summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.bzrignore13
-rwxr-xr-xBUILD/autorun.sh23
-rwxr-xr-xBUILD/compile-dist11
-rw-r--r--BUILD/compile-solaris-amd64-debug10
-rw-r--r--BUILD/compile-solaris-amd64-forte52
-rw-r--r--BUILD/compile-solaris-amd64-forte-debug54
-rw-r--r--BitKeeper/etc/collapsed16
-rwxr-xr-xBitKeeper/triggers/post-commit12
-rwxr-xr-xBitKeeper/triggers/post-commit.innodb.pl22
-rwxr-xr-xBitKeeper/triggers/post-incoming.innodb.pl30
-rwxr-xr-xBitKeeper/triggers/pre-commit.check-case.pl26
-rwxr-xr-xBitKeeper/triggers/pre-commit.innodb.pl21
-rw-r--r--BitKeeper/triggers/triggers-lib.pl356
-rwxr-xr-xCMakeLists.txt19
-rw-r--r--Docs/INSTALL-BINARY8
-rw-r--r--Docs/Makefile.am42
-rwxr-xr-xDocs/generate-text-files.pl58
-rw-r--r--Docs/manual.chm14
-rw-r--r--Docs/mysql.info29
-rw-r--r--INSTALL-SOURCE8
-rw-r--r--INSTALL-WIN-SOURCE9
-rw-r--r--Makefile.am94
-rw-r--r--client/client_priv.h6
-rw-r--r--client/mysql.cc1005
-rw-r--r--client/mysqlbinlog.cc149
-rw-r--r--client/mysqlcheck.c78
-rw-r--r--client/mysqldump.c34
-rw-r--r--client/mysqlslap.c87
-rw-r--r--client/mysqltest.c9
-rw-r--r--cmd-line-utils/libedit/Makefile.am12
-rw-r--r--cmd-line-utils/readline/INSTALL16
-rw-r--r--cmd-line-utils/readline/README18
-rw-r--r--cmd-line-utils/readline/bind.c310
-rw-r--r--cmd-line-utils/readline/callback.c132
-rw-r--r--cmd-line-utils/readline/chardefs.h6
-rw-r--r--cmd-line-utils/readline/compat.c4
-rw-r--r--cmd-line-utils/readline/complete.c140
-rw-r--r--cmd-line-utils/readline/configure.in99
-rw-r--r--cmd-line-utils/readline/display.c528
-rw-r--r--cmd-line-utils/readline/funmap.c5
-rw-r--r--cmd-line-utils/readline/histexpand.c54
-rw-r--r--cmd-line-utils/readline/histfile.c16
-rw-r--r--cmd-line-utils/readline/history.c113
-rw-r--r--cmd-line-utils/readline/histsearch.c4
-rw-r--r--cmd-line-utils/readline/input.c45
-rw-r--r--cmd-line-utils/readline/isearch.c784
-rw-r--r--cmd-line-utils/readline/keymaps.c4
-rw-r--r--cmd-line-utils/readline/kill.c36
-rw-r--r--cmd-line-utils/readline/macro.c23
-rw-r--r--cmd-line-utils/readline/mbutil.c48
-rw-r--r--cmd-line-utils/readline/misc.c302
-rw-r--r--cmd-line-utils/readline/nls.c6
-rw-r--r--cmd-line-utils/readline/parens.c4
-rw-r--r--cmd-line-utils/readline/readline.c384
-rw-r--r--cmd-line-utils/readline/readline.h69
-rw-r--r--cmd-line-utils/readline/rlconf.h5
-rw-r--r--cmd-line-utils/readline/rldefs.h10
-rw-r--r--cmd-line-utils/readline/rlmbutil.h38
-rw-r--r--cmd-line-utils/readline/rlprivate.h141
-rw-r--r--cmd-line-utils/readline/rltty.c89
-rw-r--r--cmd-line-utils/readline/rlwinsize.h2
-rw-r--r--cmd-line-utils/readline/savestring.c1
-rw-r--r--cmd-line-utils/readline/search.c314
-rw-r--r--cmd-line-utils/readline/shell.c40
-rw-r--r--cmd-line-utils/readline/signals.c78
-rw-r--r--cmd-line-utils/readline/tcap.h2
-rw-r--r--cmd-line-utils/readline/terminal.c141
-rw-r--r--cmd-line-utils/readline/text.c373
-rw-r--r--cmd-line-utils/readline/tilde.c62
-rw-r--r--cmd-line-utils/readline/tilde.h3
-rw-r--r--cmd-line-utils/readline/undo.c91
-rw-r--r--cmd-line-utils/readline/util.c34
-rw-r--r--cmd-line-utils/readline/vi_keymap.c2
-rw-r--r--cmd-line-utils/readline/vi_mode.c534
-rw-r--r--cmd-line-utils/readline/xmalloc.c9
-rw-r--r--config/ac-macros/plugins.m411
-rw-r--r--configure.in127
-rw-r--r--dbug/dbug.c28
-rwxr-xr-xextra/CMakeLists.txt3
-rw-r--r--extra/resolveip.c20
-rw-r--r--extra/yassl/src/handshake.cpp5
-rw-r--r--extra/yassl/src/template_instnt.cpp1
-rw-r--r--extra/yassl/src/yassl_imp.cpp11
-rw-r--r--include/Makefile.am2
-rw-r--r--include/atomic/gcc_builtins.h33
-rw-r--r--include/atomic/nolock.h6
-rw-r--r--include/config-win.h3
-rw-r--r--include/m_string.h1
-rw-r--r--include/my_base.h18
-rw-r--r--include/my_bitmap.h16
-rw-r--r--include/my_getopt.h4
-rw-r--r--include/my_global.h55
-rw-r--r--include/my_sys.h7
-rw-r--r--include/myisammrg.h10
-rw-r--r--include/mysql.h10
-rw-r--r--include/mysql_com.h35
-rw-r--r--include/mysql_embed.h1
-rw-r--r--include/mysql_h.ic200
-rw-r--r--include/queues.h6
-rw-r--r--include/sql_common.h6
-rwxr-xr-xlibmysql/CMakeLists.txt5
-rw-r--r--libmysql/Makefile.am2
-rw-r--r--libmysql/Makefile.shared2
-rw-r--r--libmysql/libmysql.c261
-rw-r--r--libmysql/libmysql.def1
-rw-r--r--libmysql/manager.c2
-rw-r--r--libmysql/mytest.c175
-rw-r--r--libmysql_r/Makefile.am1
-rw-r--r--libmysqld/CMakeLists.txt2
-rw-r--r--libmysqld/Makefile.am1
-rw-r--r--libmysqld/emb_qcache.cc105
-rw-r--r--libmysqld/emb_qcache.h5
-rw-r--r--libmysqld/lib_sql.cc131
-rw-r--r--libmysqld/libmysqld.c5
-rw-r--r--libmysqld/libmysqld.def1
-rw-r--r--mysql-test/Makefile.am14
-rw-r--r--mysql-test/extra/binlog_tests/blackhole.test25
-rw-r--r--mysql-test/extra/binlog_tests/ctype_cp932.test4
-rw-r--r--mysql-test/extra/binlog_tests/database.test15
-rw-r--r--mysql-test/extra/binlog_tests/mix_innodb_myisam_binlog.test320
-rw-r--r--mysql-test/extra/binlog_tests/mix_innodb_myisam_side_effects.test294
-rw-r--r--mysql-test/extra/rpl_tests/rpl_extraMaster_Col.test837
-rw-r--r--mysql-test/extra/rpl_tests/rpl_extraSlave_Col.test73
-rw-r--r--mysql-test/extra/rpl_tests/rpl_foreign_key.test31
-rw-r--r--mysql-test/extra/rpl_tests/rpl_max_relay_size.test15
-rw-r--r--mysql-test/extra/rpl_tests/rpl_reset_slave.test8
-rw-r--r--mysql-test/extra/rpl_tests/rpl_row_basic.test55
-rw-r--r--mysql-test/extra/rpl_tests/rpl_row_charset.test6
-rw-r--r--mysql-test/extra/rpl_tests/rpl_row_tabledefs.test19
-rw-r--r--mysql-test/extra/rpl_tests/rpl_truncate_helper.test14
-rw-r--r--mysql-test/include/ctype_common.inc2
-rw-r--r--mysql-test/include/ctype_regex.inc42
-rw-r--r--mysql-test/include/delete_anonymous_users.inc2
-rw-r--r--mysql-test/include/gis_keys.inc46
-rw-r--r--mysql-test/include/handler.inc126
-rw-r--r--mysql-test/include/have_binlog_format_row_or_statement.inc7
-rw-r--r--mysql-test/include/have_community_features.inc4
-rw-r--r--mysql-test/include/have_innodb.inc2
-rw-r--r--mysql-test/include/have_local_infile.inc4
-rw-r--r--mysql-test/include/have_multi_ndb.inc44
-rw-r--r--mysql-test/include/innodb_rollback_on_timeout.inc4
-rw-r--r--mysql-test/include/mix1.inc232
-rw-r--r--mysql-test/include/partition_1.inc750
-rw-r--r--mysql-test/include/ps_modify.inc1
-rw-r--r--mysql-test/include/ps_query.inc4
-rw-r--r--mysql-test/include/reset_master_and_slave.inc10
-rw-r--r--mysql-test/include/set_binlog_format_mixed.sql2
-rw-r--r--mysql-test/include/set_binlog_format_row.sql2
-rw-r--r--mysql-test/include/set_binlog_format_statement.sql2
-rw-r--r--mysql-test/include/show_binary_logs.inc5
-rw-r--r--mysql-test/include/show_binlog_events.inc2
-rw-r--r--mysql-test/include/show_binlog_events2.inc4
-rw-r--r--mysql-test/include/show_master_logs.inc5
-rw-r--r--mysql-test/include/show_master_status.inc5
-rw-r--r--mysql-test/include/show_slave_status2.inc8
-rw-r--r--mysql-test/include/wait_for_slave_sql_error.inc33
-rw-r--r--mysql-test/lib/My/Config.pm422
-rw-r--r--mysql-test/lib/mtr_cases.pl228
-rw-r--r--mysql-test/lib/mtr_misc.pl29
-rw-r--r--mysql-test/lib/mtr_report.pl56
-rwxr-xr-xmysql-test/mysql-test-run.pl162
-rw-r--r--mysql-test/r/almost_full.result29
-rw-r--r--mysql-test/r/analyze.result8
-rw-r--r--mysql-test/r/archive.result15
-rw-r--r--mysql-test/r/auto_increment.result12
-rw-r--r--mysql-test/r/bdb_notembedded.result35
-rw-r--r--mysql-test/r/bigint.result6
-rw-r--r--mysql-test/r/case.result20
-rw-r--r--mysql-test/r/cast.result24
-rw-r--r--mysql-test/r/change_user.result4
-rw-r--r--mysql-test/r/compress.result4
-rw-r--r--mysql-test/r/create.result80
-rw-r--r--mysql-test/r/csv.result10
-rw-r--r--mysql-test/r/csv_not_null.result57
-rw-r--r--mysql-test/r/ctype_big5.result4
-rw-r--r--mysql-test/r/ctype_euckr.result45
-rw-r--r--mysql-test/r/ctype_gb2312.result4
-rw-r--r--mysql-test/r/ctype_gbk.result4
-rw-r--r--mysql-test/r/ctype_uca.result49
-rw-r--r--mysql-test/r/ctype_ucs.result62
-rw-r--r--mysql-test/r/ctype_utf8.result87
-rw-r--r--mysql-test/r/date_formats.result2
-rw-r--r--mysql-test/r/ddl_i18n_koi8r.result6
-rw-r--r--mysql-test/r/ddl_i18n_utf8.result6
-rw-r--r--mysql-test/r/delayed.result27
-rw-r--r--mysql-test/r/delete.result8
-rw-r--r--mysql-test/r/derived.result3
-rw-r--r--mysql-test/r/drop.result7
-rw-r--r--mysql-test/r/events.result3
-rw-r--r--mysql-test/r/events_bugs.result123
-rw-r--r--mysql-test/r/events_scheduling.result4
-rw-r--r--mysql-test/r/events_trans.result2
-rw-r--r--mysql-test/r/explain.result20
-rw-r--r--mysql-test/r/federated.result111
-rw-r--r--mysql-test/r/federated_server.result10
-rw-r--r--mysql-test/r/flush.result17
-rw-r--r--mysql-test/r/fulltext.result6
-rw-r--r--mysql-test/r/func_gconcat.result72
-rw-r--r--mysql-test/r/func_group.result42
-rw-r--r--mysql-test/r/func_in.result5
-rw-r--r--mysql-test/r/func_math.result38
-rw-r--r--mysql-test/r/func_misc.result36
-rw-r--r--mysql-test/r/func_regexp.result19
-rw-r--r--mysql-test/r/func_sapdb.result2
-rw-r--r--mysql-test/r/func_set.result30
-rw-r--r--mysql-test/r/func_str.result30
-rw-r--r--mysql-test/r/func_time.result24
-rw-r--r--mysql-test/r/gis-rtree.result35
-rw-r--r--mysql-test/r/gis.result85
-rw-r--r--mysql-test/r/grant.result60
-rw-r--r--mysql-test/r/grant2.result18
-rw-r--r--mysql-test/r/group_by.result251
-rw-r--r--mysql-test/r/group_min_max.result49
-rw-r--r--mysql-test/r/handler_innodb.result153
-rw-r--r--mysql-test/r/handler_myisam.result153
-rw-r--r--mysql-test/r/have_community_features.require2
-rw-r--r--mysql-test/r/have_local_infile.require2
-rw-r--r--mysql-test/r/index_merge_myisam.result2
-rw-r--r--mysql-test/r/information_schema.result97
-rw-r--r--mysql-test/r/information_schema_db.result7
-rw-r--r--mysql-test/r/innodb-semi-consistent.result37
-rw-r--r--mysql-test/r/innodb-ucs2.result1
-rw-r--r--mysql-test/r/innodb.result150
-rw-r--r--mysql-test/r/innodb_autoinc_lock_mode_zero.result39
-rw-r--r--mysql-test/r/innodb_gis.result39
-rw-r--r--mysql-test/r/innodb_mysql.result195
-rw-r--r--mysql-test/r/innodb_timeout_rollback.result1
-rw-r--r--mysql-test/r/insert.result120
-rw-r--r--mysql-test/r/insert_select.result12
-rw-r--r--mysql-test/r/join.result164
-rw-r--r--mysql-test/r/join_outer_innodb.result4
-rw-r--r--mysql-test/r/key.result74
-rw-r--r--mysql-test/r/key_cache.result2
-rw-r--r--mysql-test/r/kill.result11
-rw-r--r--mysql-test/r/lock_multi.result30
-rw-r--r--mysql-test/r/log_state.result62
-rw-r--r--mysql-test/r/log_tables.result35
-rw-r--r--mysql-test/r/lowercase_view.result21
-rw-r--r--mysql-test/r/merge-big.result77
-rw-r--r--mysql-test/r/merge.result1127
-rw-r--r--mysql-test/r/merge_innodb.result37
-rw-r--r--mysql-test/r/metadata.result2
-rw-r--r--mysql-test/r/multi_update.result23
-rw-r--r--mysql-test/r/myisam.result73
-rw-r--r--mysql-test/r/myisampack.result29
-rw-r--r--mysql-test/r/mysql.result9
-rw-r--r--mysql-test/r/mysql_comments.result62
-rw-r--r--mysql-test/r/mysqlbinlog.result157
-rw-r--r--mysql-test/r/mysqlbinlog2.result342
-rw-r--r--mysql-test/r/mysqlcheck.result61
-rw-r--r--mysql-test/r/mysqldump.result41
-rw-r--r--mysql-test/r/mysqlshow.result2
-rw-r--r--mysql-test/r/mysqlslap.result14
-rw-r--r--mysql-test/r/named_pipe.result4
-rw-r--r--mysql-test/r/no-threads.result7
-rw-r--r--mysql-test/r/not_embedded_server.result2
-rw-r--r--mysql-test/r/null.result33
-rw-r--r--mysql-test/r/olap.result19
-rw-r--r--mysql-test/r/order_by.result285
-rw-r--r--mysql-test/r/outfile_loaddata.result103
-rw-r--r--mysql-test/r/packet.result8
-rw-r--r--mysql-test/r/parser.result63
-rw-r--r--mysql-test/r/partition.result198
-rw-r--r--mysql-test/r/partition_02myisam.result1725
-rw-r--r--mysql-test/r/partition_archive.result91
-rw-r--r--mysql-test/r/partition_blackhole.result7
-rw-r--r--mysql-test/r/partition_csv.result15
-rw-r--r--mysql-test/r/partition_datatype.result282
-rw-r--r--mysql-test/r/partition_error.result15
-rw-r--r--mysql-test/r/partition_hash.result15
-rw-r--r--mysql-test/r/partition_innodb.result37
-rw-r--r--mysql-test/r/partition_mgm.result10
-rw-r--r--mysql-test/r/partition_range.result2
-rw-r--r--mysql-test/r/partition_symlink.result83
-rw-r--r--mysql-test/r/plugin.result10
-rw-r--r--mysql-test/r/profiling.result415
-rw-r--r--mysql-test/r/ps.result24
-rw-r--r--mysql-test/r/ps_2myisam.result22
-rw-r--r--mysql-test/r/ps_3innodb.result22
-rw-r--r--mysql-test/r/ps_4heap.result22
-rw-r--r--mysql-test/r/ps_5merge.result44
-rw-r--r--mysql-test/r/ps_ddl.result2329
-rw-r--r--mysql-test/r/query_cache.result17
-rw-r--r--mysql-test/r/query_cache_debug.result24
-rw-r--r--mysql-test/r/range.result18
-rw-r--r--mysql-test/r/read_only.result28
-rw-r--r--mysql-test/r/select.result274
-rw-r--r--mysql-test/r/shm.result4
-rw-r--r--mysql-test/r/show_check.result4
-rw-r--r--mysql-test/r/skip_grants.result8
-rw-r--r--mysql-test/r/sp-code.result109
-rw-r--r--mysql-test/r/sp-error.result106
-rw-r--r--mysql-test/r/sp.result66
-rw-r--r--mysql-test/r/sp_gis.result4
-rw-r--r--mysql-test/r/sp_trans_log.result1
-rw-r--r--mysql-test/r/ssl.result4
-rw-r--r--mysql-test/r/ssl_compress.result4
-rw-r--r--mysql-test/r/status.result21
-rw-r--r--mysql-test/r/strict_autoinc_4bdb.result28
-rw-r--r--mysql-test/r/subselect.result250
-rw-r--r--mysql-test/r/subselect3.result2
-rw-r--r--mysql-test/r/subselect_notembedded.result101
-rw-r--r--mysql-test/r/symlink.result6
-rw-r--r--mysql-test/r/trigger.result39
-rw-r--r--mysql-test/r/trigger_notembedded.result (renamed from mysql-test/r/trigger-grant.result)15
-rw-r--r--mysql-test/r/type_bit.result12
-rw-r--r--mysql-test/r/type_bit_innodb.result2
-rw-r--r--mysql-test/r/type_blob.result14
-rw-r--r--mysql-test/r/type_date.result128
-rw-r--r--mysql-test/r/type_datetime.result118
-rw-r--r--mysql-test/r/type_decimal.result150
-rw-r--r--mysql-test/r/type_newdecimal.result20
-rw-r--r--mysql-test/r/type_ranges.result4
-rw-r--r--mysql-test/r/type_timestamp.result8
-rw-r--r--mysql-test/r/udf.result39
-rw-r--r--mysql-test/r/udf_skip_grants.result5
-rw-r--r--mysql-test/r/union.result75
-rw-r--r--mysql-test/r/user_var-binlog.result6
-rw-r--r--mysql-test/r/user_var.result18
-rw-r--r--mysql-test/r/variables+c.result7
-rw-r--r--mysql-test/r/variables.result41
-rw-r--r--mysql-test/r/view.result125
-rw-r--r--mysql-test/r/view_grant.result53
-rw-r--r--mysql-test/r/warnings.result3
-rw-r--r--mysql-test/r/windows.result1
-rw-r--r--mysql-test/r/xml.result25
-rw-r--r--mysql-test/std_data/bug30435_10k_items.txt10000
-rw-r--r--mysql-test/std_data/bug30435_5k.txt5000
-rw-r--r--mysql-test/std_data/corrupt-relay-bin.000624bin0 -> 91418 bytes
-rw-r--r--mysql-test/suite/binlog/r/binlog_base64_flag.result60
-rw-r--r--mysql-test/suite/binlog/r/binlog_database.result56
-rw-r--r--mysql-test/suite/binlog/r/binlog_innodb.result1
-rw-r--r--mysql-test/suite/binlog/r/binlog_killed.result131
-rw-r--r--mysql-test/suite/binlog/r/binlog_killed_simulate.result33
-rw-r--r--mysql-test/suite/binlog/r/binlog_multi_engine.result8
-rw-r--r--mysql-test/suite/binlog/r/binlog_old_versions.result61
-rw-r--r--mysql-test/suite/binlog/r/binlog_row_binlog.result4
-rw-r--r--mysql-test/suite/binlog/r/binlog_row_ctype_cp932.result74
-rw-r--r--mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result495
-rw-r--r--mysql-test/suite/binlog/r/binlog_start_comment.result15
-rw-r--r--mysql-test/suite/binlog/r/binlog_stm_blackhole.result27
-rwxr-xr-xmysql-test/suite/binlog/r/binlog_stm_ctype_cp932.result74
-rw-r--r--mysql-test/suite/binlog/r/binlog_stm_ctype_ucs.result3
-rw-r--r--mysql-test/suite/binlog/r/binlog_stm_mix_innodb_myisam.result449
-rw-r--r--mysql-test/suite/binlog/r/binlog_unsafe.result (renamed from mysql-test/r/binlog_unsafe.result)4
-rw-r--r--mysql-test/suite/binlog/std_data/binlog-bug32407.000001bin0 -> 368 bytes
-rw-r--r--mysql-test/suite/binlog/std_data/binlog_old_version_5_1-telco.000001bin0 -> 150385 bytes
-rw-r--r--mysql-test/suite/binlog/std_data/binlog_old_version_5_1-wl2325_row.000001bin0 -> 705 bytes
-rw-r--r--mysql-test/suite/binlog/std_data/binlog_old_version_5_1-wl2325_stm.000001bin0 -> 149796 bytes
-rw-r--r--mysql-test/suite/binlog/std_data/binlog_old_version_5_1_17.000001bin0 -> 150385 bytes
-rw-r--r--mysql-test/suite/binlog/std_data/binlog_old_version_5_1_23.000001bin0 -> 150402 bytes
-rw-r--r--mysql-test/suite/binlog/t/binlog_base64_flag.test102
-rw-r--r--mysql-test/suite/binlog/t/binlog_database.test12
-rw-r--r--mysql-test/suite/binlog/t/binlog_killed.test323
-rw-r--r--mysql-test/suite/binlog/t/binlog_killed_simulate-master.opt1
-rw-r--r--mysql-test/suite/binlog/t/binlog_killed_simulate.test69
-rw-r--r--mysql-test/suite/binlog/t/binlog_old_versions.test148
-rw-r--r--mysql-test/suite/binlog/t/binlog_row_mix_innodb_myisam.test20
-rw-r--r--mysql-test/suite/binlog/t/binlog_start_comment.test24
-rw-r--r--mysql-test/suite/binlog/t/binlog_stm_mix_innodb_myisam.test142
-rw-r--r--mysql-test/suite/binlog/t/binlog_unsafe.test (renamed from mysql-test/t/binlog_unsafe.test)0
-rw-r--r--mysql-test/suite/binlog/t/disabled.def2
-rw-r--r--mysql-test/suite/bugs/r/rpl_bug31582.result16
-rw-r--r--mysql-test/suite/bugs/r/rpl_bug31583.result15
-rw-r--r--mysql-test/suite/bugs/t/rpl_bug31582.test25
-rw-r--r--mysql-test/suite/bugs/t/rpl_bug31583.test25
-rw-r--r--mysql-test/suite/funcs_1/datadict/datadict_master.inc12
-rw-r--r--mysql-test/suite/funcs_1/datadict/datadict_priv.inc5
-rw-r--r--mysql-test/suite/funcs_1/datadict/datadict_show_schema.inc3
-rw-r--r--mysql-test/suite/funcs_1/datadict/datadict_tables.inc4
-rw-r--r--mysql-test/suite/funcs_1/datadict/processlist_val.inc123
-rw-r--r--mysql-test/suite/funcs_1/r/a_processlist_priv_no_prot.result4
-rw-r--r--mysql-test/suite/funcs_1/r/a_processlist_val_no_prot.result8
-rw-r--r--mysql-test/suite/funcs_1/r/b_processlist_priv_ps.result4
-rw-r--r--mysql-test/suite/funcs_1/r/b_processlist_val_ps.result8
-rw-r--r--mysql-test/suite/funcs_1/r/innodb__datadict.result484
-rw-r--r--mysql-test/suite/funcs_1/r/innodb_func_view.result516
-rw-r--r--mysql-test/suite/funcs_1/r/innodb_storedproc.result4090
-rwxr-xr-xmysql-test/suite/funcs_1/r/innodb_storedproc_10.result111
-rw-r--r--mysql-test/suite/funcs_1/r/innodb_trig_03.result78
-rw-r--r--mysql-test/suite/funcs_1/r/innodb_trig_03e.result2
-rw-r--r--mysql-test/suite/funcs_1/r/innodb_trig_08.result51
-rw-r--r--mysql-test/suite/funcs_1/r/innodb_trig_1011ext.result4
-rw-r--r--mysql-test/suite/funcs_1/r/innodb_views.result12035
-rw-r--r--mysql-test/suite/funcs_1/r/memory__datadict.result484
-rw-r--r--mysql-test/suite/funcs_1/r/memory_func_view.result516
-rw-r--r--mysql-test/suite/funcs_1/r/memory_storedproc.result4134
-rwxr-xr-xmysql-test/suite/funcs_1/r/memory_storedproc_10.result111
-rw-r--r--mysql-test/suite/funcs_1/r/memory_trig_03.result78
-rw-r--r--mysql-test/suite/funcs_1/r/memory_trig_03e.result2
-rw-r--r--mysql-test/suite/funcs_1/r/memory_trig_08.result51
-rw-r--r--mysql-test/suite/funcs_1/r/memory_trig_1011ext.result4
-rw-r--r--mysql-test/suite/funcs_1/r/memory_views.result12035
-rw-r--r--mysql-test/suite/funcs_1/r/myisam__datadict.result484
-rw-r--r--mysql-test/suite/funcs_1/r/myisam_func_view.result516
-rw-r--r--mysql-test/suite/funcs_1/r/myisam_storedproc.result4092
-rwxr-xr-xmysql-test/suite/funcs_1/r/myisam_storedproc_10.result111
-rw-r--r--mysql-test/suite/funcs_1/r/myisam_trig_03.result78
-rw-r--r--mysql-test/suite/funcs_1/r/myisam_trig_03e.result2
-rw-r--r--mysql-test/suite/funcs_1/r/myisam_trig_08.result51
-rw-r--r--mysql-test/suite/funcs_1/r/myisam_trig_1011ext.result4
-rw-r--r--mysql-test/suite/funcs_1/r/myisam_views.result13749
-rw-r--r--mysql-test/suite/funcs_1/r/ndb__datadict.result554
-rw-r--r--mysql-test/suite/funcs_1/r/ndb_cursors.result2
-rw-r--r--mysql-test/suite/funcs_1/r/ndb_func_view.result516
-rw-r--r--mysql-test/suite/funcs_1/r/ndb_storedproc.result4104
-rw-r--r--mysql-test/suite/funcs_1/r/ndb_storedproc_10.result119
-rw-r--r--mysql-test/suite/funcs_1/r/ndb_trig_0102.result2
-rw-r--r--mysql-test/suite/funcs_1/r/ndb_trig_03.result80
-rw-r--r--mysql-test/suite/funcs_1/r/ndb_trig_03e.result2
-rw-r--r--mysql-test/suite/funcs_1/r/ndb_trig_0407.result2
-rw-r--r--mysql-test/suite/funcs_1/r/ndb_trig_08.result53
-rw-r--r--mysql-test/suite/funcs_1/r/ndb_trig_09.result2
-rw-r--r--mysql-test/suite/funcs_1/r/ndb_trig_1011ext.result6
-rw-r--r--mysql-test/suite/funcs_1/r/ndb_views.result12069
-rwxr-xr-xmysql-test/suite/funcs_1/storedproc/storedproc_10.inc87
-rw-r--r--mysql-test/suite/funcs_1/storedproc/storedproc_master.inc4856
-rw-r--r--mysql-test/suite/funcs_1/t/disabled.def8
-rw-r--r--mysql-test/suite/funcs_1/t/innodb__load.test6
-rw-r--r--mysql-test/suite/funcs_1/t/innodb_bitdata.test6
-rw-r--r--mysql-test/suite/funcs_1/t/innodb_cursors.test6
-rw-r--r--mysql-test/suite/funcs_1/t/innodb_storedproc.test3
-rw-r--r--mysql-test/suite/funcs_1/t/innodb_trig_0102.test6
-rw-r--r--mysql-test/suite/funcs_1/t/innodb_trig_03.test6
-rw-r--r--mysql-test/suite/funcs_1/t/innodb_trig_03e.test5
-rw-r--r--mysql-test/suite/funcs_1/t/innodb_trig_0407.test6
-rw-r--r--mysql-test/suite/funcs_1/t/innodb_trig_08.test6
-rw-r--r--mysql-test/suite/funcs_1/t/innodb_trig_09.test6
-rw-r--r--mysql-test/suite/funcs_1/t/innodb_trig_1011ext.test6
-rw-r--r--mysql-test/suite/funcs_1/t/innodb_trig_frkey.test6
-rw-r--r--mysql-test/suite/funcs_1/t/innodb_views.test2
-rw-r--r--mysql-test/suite/funcs_1/t/memory__load.test6
-rw-r--r--mysql-test/suite/funcs_1/t/memory_bitdata.test6
-rw-r--r--mysql-test/suite/funcs_1/t/memory_cursors.test6
-rw-r--r--mysql-test/suite/funcs_1/t/memory_storedproc.test2
-rw-r--r--mysql-test/suite/funcs_1/t/memory_trig_0102.test6
-rw-r--r--mysql-test/suite/funcs_1/t/memory_trig_03.test6
-rw-r--r--mysql-test/suite/funcs_1/t/memory_trig_03e.test5
-rw-r--r--mysql-test/suite/funcs_1/t/memory_trig_0407.test6
-rw-r--r--mysql-test/suite/funcs_1/t/memory_trig_08.test6
-rw-r--r--mysql-test/suite/funcs_1/t/memory_trig_09.test6
-rw-r--r--mysql-test/suite/funcs_1/t/memory_trig_1011ext.test6
-rw-r--r--mysql-test/suite/funcs_1/t/memory_views.test2
-rw-r--r--mysql-test/suite/funcs_1/t/myisam__load.test6
-rw-r--r--mysql-test/suite/funcs_1/t/myisam_bitdata.test7
-rw-r--r--mysql-test/suite/funcs_1/t/myisam_cursors.test3
-rw-r--r--mysql-test/suite/funcs_1/t/myisam_storedproc.test2
-rw-r--r--mysql-test/suite/funcs_1/t/myisam_trig_0102.test6
-rw-r--r--mysql-test/suite/funcs_1/t/myisam_trig_03.test7
-rw-r--r--mysql-test/suite/funcs_1/t/myisam_trig_03e.test5
-rw-r--r--mysql-test/suite/funcs_1/t/myisam_trig_0407.test7
-rw-r--r--mysql-test/suite/funcs_1/t/myisam_trig_08.test7
-rw-r--r--mysql-test/suite/funcs_1/t/myisam_trig_09.test7
-rw-r--r--mysql-test/suite/funcs_1/t/myisam_trig_1011ext.test7
-rw-r--r--mysql-test/suite/funcs_1/t/myisam_views.test3
-rw-r--r--mysql-test/suite/funcs_1/t/ndb__load.test6
-rw-r--r--mysql-test/suite/funcs_1/t/ndb_bitdata.test8
-rw-r--r--mysql-test/suite/funcs_1/t/ndb_cursors.test8
-rw-r--r--mysql-test/suite/funcs_1/t/ndb_storedproc.test9
-rw-r--r--mysql-test/suite/funcs_1/t/ndb_trig_0102.test6
-rw-r--r--mysql-test/suite/funcs_1/t/ndb_trig_03.test8
-rw-r--r--mysql-test/suite/funcs_1/t/ndb_trig_03e.test7
-rw-r--r--mysql-test/suite/funcs_1/t/ndb_trig_0407.test6
-rw-r--r--mysql-test/suite/funcs_1/t/ndb_trig_08.test6
-rw-r--r--mysql-test/suite/funcs_1/t/ndb_trig_09.test6
-rw-r--r--mysql-test/suite/funcs_1/t/ndb_trig_1011ext.test6
-rw-r--r--mysql-test/suite/funcs_1/t/ndb_views.test2
-rw-r--r--mysql-test/suite/funcs_1/triggers/triggers_03.inc69
-rw-r--r--mysql-test/suite/funcs_1/triggers/triggers_08.inc81
-rw-r--r--mysql-test/suite/funcs_1/triggers/triggers_1011ext.inc7
-rw-r--r--mysql-test/suite/funcs_1/views/func_view.inc62
-rw-r--r--mysql-test/suite/funcs_1/views/views_master.inc672
-rw-r--r--mysql-test/suite/funcs_2/r/innodb_charset.result6
-rw-r--r--mysql-test/suite/funcs_2/r/memory_charset.result6
-rw-r--r--mysql-test/suite/funcs_2/r/myisam_charset.result6
-rw-r--r--mysql-test/suite/funcs_2/r/ndb_charset.result6
-rw-r--r--mysql-test/suite/manual/r/rpl_replication_delay.result136
-rw-r--r--mysql-test/suite/manual/t/rpl_replication_delay-slave.opt1
-rw-r--r--mysql-test/suite/manual/t/rpl_replication_delay.test71
-rw-r--r--mysql-test/suite/ndb/r/ndb_auto_increment.result445
-rw-r--r--mysql-test/suite/ndb/r/ndb_basic.result24
-rw-r--r--mysql-test/suite/ndb/r/ndb_binlog_format.result4
-rw-r--r--mysql-test/suite/ndb/r/ndb_blob.result21
-rw-r--r--mysql-test/suite/ndb/r/ndb_charset.result8
-rw-r--r--mysql-test/suite/ndb/r/ndb_condition_pushdown.result22
-rw-r--r--mysql-test/suite/ndb/r/ndb_dd_basic.result6
-rw-r--r--mysql-test/suite/ndb/r/ndb_dd_ddl.result2
-rw-r--r--mysql-test/suite/ndb/r/ndb_gis.result4
-rw-r--r--mysql-test/suite/ndb/r/ndb_index_unique.result14
-rw-r--r--mysql-test/suite/ndb/r/ndb_insert.result169
-rw-r--r--mysql-test/suite/ndb/r/ndb_lock_table.result11
-rw-r--r--mysql-test/suite/ndb/r/ndb_multi.result22
-rw-r--r--mysql-test/suite/ndb/r/ndb_multi_row.result1
-rw-r--r--mysql-test/suite/ndb/r/ndb_row_format.result2
-rw-r--r--mysql-test/suite/ndb/r/ndb_single_user.result10
-rw-r--r--mysql-test/suite/ndb/r/ndb_update.result14
-rw-r--r--mysql-test/suite/ndb/r/ndb_update_no_read.result75
-rw-r--r--mysql-test/suite/ndb/r/partition_03ndb.result1361
-rw-r--r--mysql-test/suite/ndb/r/ps_7ndb.result22
-rw-r--r--mysql-test/suite/ndb/t/disabled.def3
-rw-r--r--mysql-test/suite/ndb/t/ndb_auto_increment.test293
-rw-r--r--mysql-test/suite/ndb/t/ndb_basic.test22
-rw-r--r--mysql-test/suite/ndb/t/ndb_blob.test20
-rw-r--r--mysql-test/suite/ndb/t/ndb_condition_pushdown.test1025
-rw-r--r--mysql-test/suite/ndb/t/ndb_insert.test138
-rw-r--r--mysql-test/suite/ndb/t/ndb_lock_table.test15
-rw-r--r--mysql-test/suite/ndb/t/ndb_multi.test33
-rw-r--r--mysql-test/suite/ndb/t/ndb_multi_row.test3
-rw-r--r--mysql-test/suite/ndb/t/ndb_update.test5
-rw-r--r--mysql-test/suite/ndb/t/ndb_update_no_read.test79
-rw-r--r--mysql-test/suite/ndb/t/partition_03ndb.test26
-rw-r--r--mysql-test/suite/ndb_team/r/ndb_backup_print.result (renamed from mysql-test/suite/ndb/r/ndb_backup_print.result)0
-rw-r--r--mysql-test/suite/ndb_team/r/ndb_dd_backuprestore.result (renamed from mysql-test/suite/ndb/r/ndb_dd_backuprestore.result)0
-rw-r--r--mysql-test/suite/ndb_team/t/ndb_backup_print.test (renamed from mysql-test/suite/ndb/t/ndb_backup_print.test)0
-rw-r--r--mysql-test/suite/ndb_team/t/ndb_dd_backuprestore.test (renamed from mysql-test/suite/ndb/t/ndb_dd_backuprestore.test)0
-rw-r--r--mysql-test/suite/parts/inc/methods1.inc18
-rw-r--r--mysql-test/suite/parts/inc/part_blocked_sql_funcs_main.inc47
-rw-r--r--mysql-test/suite/parts/inc/part_supported_sql_funcs_delete.inc3
-rw-r--r--mysql-test/suite/parts/inc/part_supported_sql_funcs_main.inc23
-rw-r--r--mysql-test/suite/parts/inc/partition.pre173
-rw-r--r--mysql-test/suite/parts/inc/partition_10.inc (renamed from mysql-test/include/partition_10.inc)10
-rw-r--r--mysql-test/suite/parts/inc/partition_11.inc (renamed from mysql-test/include/partition_11.inc)6
-rw-r--r--mysql-test/suite/parts/inc/partition_12.inc (renamed from mysql-test/include/partition_12.inc)10
-rw-r--r--mysql-test/suite/parts/inc/partition_20.inc15
-rw-r--r--mysql-test/suite/parts/inc/partition_alter1.inc51
-rw-r--r--mysql-test/suite/parts/inc/partition_alter2.inc82
-rw-r--r--mysql-test/suite/parts/inc/partition_alter3.inc40
-rw-r--r--mysql-test/suite/parts/inc/partition_alter4.inc23
-rw-r--r--mysql-test/suite/parts/inc/partition_alter_1.inc35
-rw-r--r--mysql-test/suite/parts/inc/partition_alter_11.inc16
-rw-r--r--mysql-test/suite/parts/inc/partition_alter_13.inc16
-rw-r--r--mysql-test/suite/parts/inc/partition_alter_41.inc20
-rw-r--r--mysql-test/suite/parts/inc/partition_basic.inc25
-rw-r--r--mysql-test/suite/parts/inc/partition_binary.inc9
-rw-r--r--mysql-test/suite/parts/inc/partition_bit.inc2
-rw-r--r--mysql-test/suite/parts/inc/partition_blob.inc2
-rw-r--r--mysql-test/suite/parts/inc/partition_char.inc6
-rw-r--r--mysql-test/suite/parts/inc/partition_check.inc153
-rw-r--r--mysql-test/suite/parts/inc/partition_check_drop.inc6
-rw-r--r--mysql-test/suite/parts/inc/partition_check_read.inc6
-rw-r--r--mysql-test/suite/parts/inc/partition_check_read1.inc4
-rw-r--r--mysql-test/suite/parts/inc/partition_check_read2.inc4
-rw-r--r--mysql-test/suite/parts/inc/partition_cleanup.inc4
-rw-r--r--mysql-test/suite/parts/inc/partition_directory.inc11
-rw-r--r--mysql-test/suite/parts/inc/partition_engine.inc18
-rw-r--r--mysql-test/suite/parts/inc/partition_enum.inc8
-rw-r--r--mysql-test/suite/parts/inc/partition_layout.inc (renamed from mysql-test/include/partition_layout.inc)2
-rw-r--r--mysql-test/suite/parts/inc/partition_layout_check1.inc6
-rw-r--r--mysql-test/suite/parts/inc/partition_layout_check2.inc8
-rw-r--r--mysql-test/suite/parts/inc/partition_methods1.inc18
-rw-r--r--mysql-test/suite/parts/inc/partition_methods2.inc18
-rw-r--r--mysql-test/suite/parts/inc/partition_set.inc2
-rw-r--r--mysql-test/suite/parts/inc/partition_supported_sql_funcs.inc2
-rw-r--r--mysql-test/suite/parts/inc/partition_syntax.inc109
-rw-r--r--mysql-test/suite/parts/inc/partition_syntax_1.inc44
-rw-r--r--mysql-test/suite/parts/inc/partition_syntax_2.inc14
-rw-r--r--mysql-test/suite/parts/inc/partition_text.inc3
-rw-r--r--mysql-test/suite/parts/inc/partition_trigg1.inc10
-rw-r--r--mysql-test/suite/parts/inc/partition_trigg2.inc8
-rw-r--r--mysql-test/suite/parts/inc/partition_trigg3.inc28
-rw-r--r--mysql-test/suite/parts/inc/partition_value.inc4
-rw-r--r--mysql-test/suite/parts/inc/partition_varbinary.inc2
-rw-r--r--mysql-test/suite/parts/inc/partition_varchar.inc2
-rw-r--r--mysql-test/suite/parts/r/partition_alter1_innodb.result682
-rw-r--r--mysql-test/suite/parts/r/partition_alter1_myisam.result266
-rw-r--r--mysql-test/suite/parts/r/partition_alter2_innodb.result970
-rw-r--r--mysql-test/suite/parts/r/partition_alter2_myisam.result586
-rw-r--r--mysql-test/suite/parts/r/partition_alter3_innodb.result14
-rw-r--r--mysql-test/suite/parts/r/partition_alter3_myisam.result10
-rw-r--r--mysql-test/suite/parts/r/partition_alter4_innodb.result298
-rw-r--r--mysql-test/suite/parts/r/partition_alter4_myisam.result362
-rw-r--r--mysql-test/suite/parts/r/partition_basic_innodb.result420
-rw-r--r--mysql-test/suite/parts/r/partition_basic_myisam.result332
-rw-r--r--mysql-test/suite/parts/r/partition_bit_myisam.result4
-rw-r--r--mysql-test/suite/parts/r/partition_char_innodb.result311
-rw-r--r--mysql-test/suite/parts/r/partition_char_myisam.result787
-rw-r--r--mysql-test/suite/parts/r/partition_datetime_myisam.result10
-rw-r--r--mysql-test/suite/parts/r/partition_decimal_myisam.result2
-rw-r--r--mysql-test/suite/parts/r/partition_engine_innodb.result66
-rw-r--r--mysql-test/suite/parts/r/partition_engine_myisam.result66
-rw-r--r--mysql-test/suite/parts/r/partition_float_innodb.result292
-rw-r--r--mysql-test/suite/parts/r/partition_float_myisam.result4
-rw-r--r--mysql-test/suite/parts/r/partition_int_myisam.result10
-rw-r--r--mysql-test/suite/parts/r/partition_special_myisam.result8
-rw-r--r--mysql-test/suite/parts/r/partition_syntax_innodb.result125
-rw-r--r--mysql-test/suite/parts/r/partition_syntax_myisam.result125
-rw-r--r--mysql-test/suite/parts/r/rpl_partition.result2
-rw-r--r--mysql-test/suite/parts/t/disabled.def23
-rw-r--r--mysql-test/suite/parts/t/part_blocked_sql_func_innodb.test6
-rw-r--r--mysql-test/suite/parts/t/part_blocked_sql_func_myisam.test4
-rw-r--r--mysql-test/suite/parts/t/part_supported_sql_func_innodb.test4
-rw-r--r--mysql-test/suite/parts/t/part_supported_sql_func_myisam.test4
-rw-r--r--mysql-test/suite/parts/t/part_supported_sql_func_ndb.test4
-rw-r--r--mysql-test/suite/parts/t/partition_alter1_innodb.test9
-rw-r--r--mysql-test/suite/parts/t/partition_alter1_myisam.test7
-rw-r--r--mysql-test/suite/parts/t/partition_alter1_ndb.test9
-rw-r--r--mysql-test/suite/parts/t/partition_alter2_innodb.test9
-rw-r--r--mysql-test/suite/parts/t/partition_alter2_myisam.test7
-rw-r--r--mysql-test/suite/parts/t/partition_alter2_ndb.test9
-rw-r--r--mysql-test/suite/parts/t/partition_alter3_innodb.test9
-rw-r--r--mysql-test/suite/parts/t/partition_alter3_myisam.test7
-rw-r--r--mysql-test/suite/parts/t/partition_alter4_innodb.test7
-rw-r--r--mysql-test/suite/parts/t/partition_alter4_myisam.test5
-rw-r--r--mysql-test/suite/parts/t/partition_basic_innodb.test9
-rw-r--r--mysql-test/suite/parts/t/partition_basic_myisam.test10
-rw-r--r--mysql-test/suite/parts/t/partition_basic_ndb.test11
-rw-r--r--mysql-test/suite/parts/t/partition_bit_innodb.test4
-rw-r--r--mysql-test/suite/parts/t/partition_bit_myisam.test3
-rw-r--r--mysql-test/suite/parts/t/partition_bit_ndb.test4
-rw-r--r--mysql-test/suite/parts/t/partition_char_innodb.test12
-rw-r--r--mysql-test/suite/parts/t/partition_char_myisam.test21
-rw-r--r--mysql-test/suite/parts/t/partition_datetime_innodb.test9
-rw-r--r--mysql-test/suite/parts/t/partition_datetime_myisam.test7
-rw-r--r--mysql-test/suite/parts/t/partition_decimal_innodb.test5
-rw-r--r--mysql-test/suite/parts/t/partition_decimal_myisam.test3
-rw-r--r--mysql-test/suite/parts/t/partition_engine_innodb.test9
-rw-r--r--mysql-test/suite/parts/t/partition_engine_myisam.test7
-rw-r--r--mysql-test/suite/parts/t/partition_engine_ndb.test7
-rw-r--r--mysql-test/suite/parts/t/partition_float_innodb.test12
-rw-r--r--mysql-test/suite/parts/t/partition_float_myisam.test4
-rw-r--r--mysql-test/suite/parts/t/partition_int_innodb.test9
-rw-r--r--mysql-test/suite/parts/t/partition_int_myisam.test7
-rw-r--r--mysql-test/suite/parts/t/partition_int_ndb.test7
-rw-r--r--mysql-test/suite/parts/t/partition_special_innodb.test8
-rw-r--r--mysql-test/suite/parts/t/partition_special_myisam.test6
-rw-r--r--mysql-test/suite/parts/t/partition_syntax_innodb.test9
-rw-r--r--mysql-test/suite/parts/t/partition_syntax_myisam.test7
-rw-r--r--mysql-test/suite/parts/t/partition_syntax_ndb.test9
-rw-r--r--mysql-test/suite/parts/t/partition_value_innodb.test9
-rw-r--r--mysql-test/suite/parts/t/partition_value_myisam.test7
-rw-r--r--mysql-test/suite/parts/t/partition_value_ndb.test9
-rw-r--r--mysql-test/suite/rpl/combinations8
-rw-r--r--mysql-test/suite/rpl/data/rpl_bug28618.dat3
-rw-r--r--mysql-test/suite/rpl/include/rpl_mixed_check_select.inc8
-rw-r--r--mysql-test/suite/rpl/include/rpl_mixed_check_view.inc4
-rw-r--r--mysql-test/suite/rpl/include/rpl_mixed_dml.inc12
-rw-r--r--mysql-test/suite/rpl/r/rpl_000015.result14
-rw-r--r--mysql-test/suite/rpl/r/rpl_binlog_grant.result6
-rw-r--r--mysql-test/suite/rpl/r/rpl_bug31076.result4
-rw-r--r--mysql-test/suite/rpl/r/rpl_change_master.result4
-rw-r--r--mysql-test/suite/rpl/r/rpl_create_database.result24
-rw-r--r--mysql-test/suite/rpl/r/rpl_drop_view.result27
-rw-r--r--mysql-test/suite/rpl/r/rpl_extraCol_innodb.result95
-rw-r--r--mysql-test/suite/rpl/r/rpl_extraCol_myisam.result95
-rw-r--r--mysql-test/suite/rpl/r/rpl_extraColmaster_innodb.resultbin38226 -> 98050 bytes
-rw-r--r--mysql-test/suite/rpl/r/rpl_extraColmaster_myisam.resultbin38226 -> 98050 bytes
-rw-r--r--mysql-test/suite/rpl/r/rpl_flushlog_loop.result7
-rw-r--r--mysql-test/suite/rpl/r/rpl_foreign_key_innodb.result13
-rw-r--r--mysql-test/suite/rpl/r/rpl_found_rows.result233
-rw-r--r--mysql-test/suite/rpl/r/rpl_grant.result34
-rw-r--r--mysql-test/suite/rpl/r/rpl_idempotency.result226
-rw-r--r--mysql-test/suite/rpl/r/rpl_ignore_table.result2
-rw-r--r--mysql-test/suite/rpl/r/rpl_incident.result4
-rw-r--r--mysql-test/suite/rpl/r/rpl_init_slave.result3
-rw-r--r--mysql-test/suite/rpl/r/rpl_innodb_bug28430.result18
-rw-r--r--mysql-test/suite/rpl/r/rpl_innodb_mixed_dml.result223
-rw-r--r--mysql-test/suite/rpl/r/rpl_invoked_features.result54
-rw-r--r--mysql-test/suite/rpl/r/rpl_load_from_master.result18
-rw-r--r--mysql-test/suite/rpl/r/rpl_loaddata_fatal.result4
-rw-r--r--mysql-test/suite/rpl/r/rpl_loaddata_map.result26
-rw-r--r--mysql-test/suite/rpl/r/rpl_log_pos.result10
-rw-r--r--mysql-test/suite/rpl/r/rpl_packet.result42
-rw-r--r--mysql-test/suite/rpl/r/rpl_rotate_logs.result39
-rw-r--r--mysql-test/suite/rpl/r/rpl_row_basic_11bugs.result33
-rw-r--r--mysql-test/suite/rpl/r/rpl_row_basic_2myisam.result25
-rw-r--r--mysql-test/suite/rpl/r/rpl_row_basic_3innodb.result25
-rw-r--r--mysql-test/suite/rpl/r/rpl_row_charset.result8
-rw-r--r--mysql-test/suite/rpl/r/rpl_row_charset_innodb.result227
-rw-r--r--mysql-test/suite/rpl/r/rpl_row_colSize.result52
-rw-r--r--mysql-test/suite/rpl/r/rpl_row_create_table.result39
-rw-r--r--mysql-test/suite/rpl/r/rpl_row_extraColmaster_ndb.resultbin19129 -> 0 bytes
-rw-r--r--mysql-test/suite/rpl/r/rpl_row_log_innodb.result24
-rw-r--r--mysql-test/suite/rpl/r/rpl_row_max_relay_size.result30
-rw-r--r--mysql-test/suite/rpl/r/rpl_row_mysqlbinlog.result32
-rw-r--r--mysql-test/suite/rpl/r/rpl_row_mystery22.result2
-rw-r--r--mysql-test/suite/rpl/r/rpl_row_reset_slave.result16
-rw-r--r--mysql-test/suite/rpl/r/rpl_row_tabledefs_2myisam.result50
-rw-r--r--mysql-test/suite/rpl/r/rpl_row_tabledefs_3innodb.result50
-rw-r--r--mysql-test/suite/rpl/r/rpl_row_trig001.result3
-rw-r--r--mysql-test/suite/rpl/r/rpl_server_id.result34
-rw-r--r--mysql-test/suite/rpl/r/rpl_skip_error.result43
-rw-r--r--mysql-test/suite/rpl/r/rpl_slave_skip.result208
-rw-r--r--mysql-test/suite/rpl/r/rpl_sp_effects.result41
-rw-r--r--mysql-test/suite/rpl/r/rpl_start_stop_slave.result2
-rw-r--r--mysql-test/suite/rpl/r/rpl_stm_charset.result69
-rw-r--r--mysql-test/suite/rpl/r/rpl_stm_log.result4
-rw-r--r--mysql-test/suite/rpl/r/rpl_stm_max_relay_size.result30
-rw-r--r--mysql-test/suite/rpl/r/rpl_stm_reset_slave.result16
-rw-r--r--mysql-test/suite/rpl/r/rpl_stm_until.result16
-rw-r--r--mysql-test/suite/rpl/r/rpl_switch_stm_row_mixed.result80
-rw-r--r--mysql-test/suite/rpl/r/rpl_temporary_errors.result83
-rw-r--r--mysql-test/suite/rpl/r/rpl_trigger.result12
-rw-r--r--mysql-test/suite/rpl/r/rpl_truncate_2myisam.result42
-rw-r--r--mysql-test/suite/rpl/r/rpl_truncate_3innodb.result54
-rw-r--r--mysql-test/suite/rpl/r/rpl_udf.result8
-rw-r--r--mysql-test/suite/rpl/r/rpl_user.result45
-rw-r--r--mysql-test/suite/rpl/t/disabled.def7
-rw-r--r--mysql-test/suite/rpl/t/rpl_000015.test10
-rw-r--r--mysql-test/suite/rpl/t/rpl_binlog_grant.test1
-rw-r--r--mysql-test/suite/rpl/t/rpl_bug31076.test19
-rw-r--r--mysql-test/suite/rpl/t/rpl_change_master.test8
-rw-r--r--mysql-test/suite/rpl/t/rpl_colSize.test4
-rw-r--r--mysql-test/suite/rpl/t/rpl_create_database.test8
-rw-r--r--mysql-test/suite/rpl/t/rpl_critical_errors.test3
-rw-r--r--mysql-test/suite/rpl/t/rpl_drop_view.test31
-rw-r--r--mysql-test/suite/rpl/t/rpl_dual_pos_advance.test6
-rw-r--r--mysql-test/suite/rpl/t/rpl_err_ignoredtable.test5
-rw-r--r--mysql-test/suite/rpl/t/rpl_extraColmaster_innodb.test3
-rw-r--r--mysql-test/suite/rpl/t/rpl_extraColmaster_myisam.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_flushlog_loop.test9
-rw-r--r--mysql-test/suite/rpl/t/rpl_found_rows.test256
-rw-r--r--mysql-test/suite/rpl/t/rpl_grant.test20
-rw-r--r--mysql-test/suite/rpl/t/rpl_idempotency-master.opt2
-rw-r--r--mysql-test/suite/rpl/t/rpl_idempotency-slave.opt2
-rw-r--r--mysql-test/suite/rpl/t/rpl_idempotency.test415
-rw-r--r--mysql-test/suite/rpl/t/rpl_ignore_table.test11
-rw-r--r--mysql-test/suite/rpl/t/rpl_init_slave.test10
-rw-r--r--mysql-test/suite/rpl/t/rpl_innodb_bug28430.test4
-rw-r--r--mysql-test/suite/rpl/t/rpl_innodb_bug30919.test1
-rw-r--r--mysql-test/suite/rpl/t/rpl_insert.test14
-rw-r--r--mysql-test/suite/rpl/t/rpl_invoked_features.test96
-rw-r--r--mysql-test/suite/rpl/t/rpl_load_from_master.test6
-rw-r--r--mysql-test/suite/rpl/t/rpl_loaddata_map-master.opt1
-rw-r--r--mysql-test/suite/rpl/t/rpl_loaddata_map-slave.opt1
-rw-r--r--mysql-test/suite/rpl/t/rpl_loaddata_map.test53
-rw-r--r--mysql-test/suite/rpl/t/rpl_loadfile.test7
-rw-r--r--mysql-test/suite/rpl/t/rpl_log_pos.test10
-rw-r--r--mysql-test/suite/rpl/t/rpl_misc_functions.test1
-rw-r--r--mysql-test/suite/rpl/t/rpl_packet.test17
-rw-r--r--mysql-test/suite/rpl/t/rpl_rotate_logs.test18
-rw-r--r--mysql-test/suite/rpl/t/rpl_row_basic_11bugs.test40
-rw-r--r--mysql-test/suite/rpl/t/rpl_row_charset_innodb-master.opt1
-rw-r--r--mysql-test/suite/rpl/t/rpl_row_charset_innodb-slave.opt1
-rw-r--r--mysql-test/suite/rpl/t/rpl_row_charset_innodb.test10
-rw-r--r--mysql-test/suite/rpl/t/rpl_row_create_table.test8
-rw-r--r--mysql-test/suite/rpl/t/rpl_row_extraColmaster_ndb.test12
-rw-r--r--mysql-test/suite/rpl/t/rpl_row_mysqlbinlog.test1
-rw-r--r--mysql-test/suite/rpl/t/rpl_row_mystery22.test7
-rw-r--r--mysql-test/suite/rpl/t/rpl_row_sp001.test6
-rw-r--r--mysql-test/suite/rpl/t/rpl_row_sp005.test5
-rw-r--r--mysql-test/suite/rpl/t/rpl_row_stop_middle.test3
-rw-r--r--mysql-test/suite/rpl/t/rpl_row_trig001.test19
-rw-r--r--mysql-test/suite/rpl/t/rpl_row_trig003.test8
-rw-r--r--mysql-test/suite/rpl/t/rpl_row_until.test4
-rw-r--r--mysql-test/suite/rpl/t/rpl_server_id.test29
-rw-r--r--mysql-test/suite/rpl/t/rpl_session_var.test3
-rw-r--r--mysql-test/suite/rpl/t/rpl_skip_error-slave.opt2
-rw-r--r--mysql-test/suite/rpl/t/rpl_skip_error.test12
-rw-r--r--mysql-test/suite/rpl/t/rpl_slave_skip-slave.opt1
-rw-r--r--mysql-test/suite/rpl/t/rpl_slave_skip.test239
-rw-r--r--mysql-test/suite/rpl/t/rpl_sp.test3
-rw-r--r--mysql-test/suite/rpl/t/rpl_sp_effects.test50
-rw-r--r--mysql-test/suite/rpl/t/rpl_ssl.test17
-rw-r--r--mysql-test/suite/rpl/t/rpl_ssl1.test3
-rw-r--r--mysql-test/suite/rpl/t/rpl_start_stop_slave.test9
-rw-r--r--mysql-test/suite/rpl/t/rpl_stm_extraColmaster_ndb.test13
-rw-r--r--mysql-test/suite/rpl/t/rpl_stm_mystery22.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_stm_until.test12
-rw-r--r--mysql-test/suite/rpl/t/rpl_switch_stm_row_mixed.test39
-rw-r--r--mysql-test/suite/rpl/t/rpl_temporary.test14
-rw-r--r--mysql-test/suite/rpl/t/rpl_temporary_errors-slave.opt3
-rw-r--r--mysql-test/suite/rpl/t/rpl_temporary_errors.test31
-rw-r--r--mysql-test/suite/rpl/t/rpl_trigger.test17
-rw-r--r--mysql-test/suite/rpl/t/rpl_user.test61
-rw-r--r--mysql-test/suite/rpl_ndb/r/rpl_ndb_charset.result34
-rw-r--r--mysql-test/suite/rpl_ndb/r/rpl_ndb_ctype_ucs2_def.result20
-rw-r--r--mysql-test/suite/rpl_ndb/r/rpl_ndb_ddl.result40
-rw-r--r--mysql-test/suite/rpl_ndb/r/rpl_ndb_extraCol.result94
-rw-r--r--mysql-test/suite/rpl_ndb/r/rpl_ndb_extraColMaster.result2288
-rw-r--r--mysql-test/suite/rpl_ndb/r/rpl_ndb_stm_innodb.result4
-rw-r--r--mysql-test/suite/rpl_ndb/r/rpl_ndb_transaction.result110
-rw-r--r--mysql-test/suite/rpl_ndb/r/rpl_row_basic_7ndb.result29
-rw-r--r--mysql-test/suite/rpl_ndb/t/disabled.def15
-rw-r--r--mysql-test/suite/rpl_ndb/t/rpl_ndb_charset.test4
-rw-r--r--mysql-test/suite/rpl_ndb/t/rpl_ndb_extraColMaster.test14
-rw-r--r--mysql-test/suite/rpl_ndb/t/rpl_ndb_transaction-master.opt1
-rw-r--r--mysql-test/suite/rpl_ndb/t/rpl_ndb_transaction-slave.opt1
-rw-r--r--mysql-test/suite/rpl_ndb/t/rpl_ndb_transaction.test131
-rw-r--r--mysql-test/suite/stress/include/ddl3.inc2
-rw-r--r--mysql-test/suite/stress/r/ddl_archive.result16
-rw-r--r--mysql-test/suite/stress/r/ddl_csv.result16
-rw-r--r--mysql-test/suite/stress/r/ddl_innodb.result16
-rw-r--r--mysql-test/suite/stress/r/ddl_memory.result16
-rw-r--r--mysql-test/suite/stress/r/ddl_myisam.result16
-rw-r--r--mysql-test/suite/stress/r/ddl_ndb.result16
-rw-r--r--mysql-test/t/almost_full.test41
-rw-r--r--mysql-test/t/analyze.test14
-rw-r--r--mysql-test/t/archive.test33
-rw-r--r--mysql-test/t/auto_increment.test2
-rw-r--r--mysql-test/t/bdb_notembedded.test38
-rw-r--r--mysql-test/t/bigint.test9
-rw-r--r--mysql-test/t/case.test23
-rw-r--r--mysql-test/t/cast.test22
-rw-r--r--mysql-test/t/create.test91
-rw-r--r--mysql-test/t/csv.test11
-rw-r--r--mysql-test/t/csv_alter_table.test56
-rw-r--r--mysql-test/t/csv_not_null.test104
-rw-r--r--mysql-test/t/ctype_euckr.test23
-rw-r--r--mysql-test/t/ctype_uca.test4
-rw-r--r--mysql-test/t/ctype_ucs.test28
-rw-r--r--mysql-test/t/ctype_utf8.test34
-rw-r--r--mysql-test/t/delayed.test31
-rw-r--r--mysql-test/t/delete.test15
-rw-r--r--mysql-test/t/derived.test3
-rw-r--r--mysql-test/t/disabled.def9
-rw-r--r--mysql-test/t/drop.test13
-rw-r--r--mysql-test/t/events.test3
-rw-r--r--mysql-test/t/events_bugs-master.opt1
-rw-r--r--mysql-test/t/events_bugs.test239
-rw-r--r--mysql-test/t/events_scheduling.test2
-rw-r--r--mysql-test/t/explain.test28
-rw-r--r--mysql-test/t/federated.test31
-rw-r--r--mysql-test/t/federated_server.test14
-rw-r--r--mysql-test/t/flush.test31
-rw-r--r--mysql-test/t/fulltext.test8
-rw-r--r--mysql-test/t/func_gconcat.test50
-rw-r--r--mysql-test/t/func_group.test56
-rw-r--r--mysql-test/t/func_in.test8
-rw-r--r--mysql-test/t/func_math.test25
-rw-r--r--mysql-test/t/func_misc.test42
-rw-r--r--mysql-test/t/func_regexp.test34
-rw-r--r--mysql-test/t/func_set.test19
-rw-r--r--mysql-test/t/func_str.test25
-rw-r--r--mysql-test/t/func_time.test27
-rw-r--r--mysql-test/t/gis-rtree.test36
-rw-r--r--mysql-test/t/gis.test61
-rw-r--r--mysql-test/t/grant.test101
-rw-r--r--mysql-test/t/grant2.test32
-rw-r--r--mysql-test/t/group_by.test83
-rw-r--r--mysql-test/t/group_min_max.test25
-rw-r--r--mysql-test/t/information_schema.test72
-rw-r--r--mysql-test/t/innodb-semi-consistent-master.opt1
-rw-r--r--mysql-test/t/innodb-semi-consistent.test50
-rw-r--r--mysql-test/t/innodb-ucs2.test4
-rw-r--r--mysql-test/t/innodb.test147
-rw-r--r--mysql-test/t/innodb_autoinc_lock_mode_zero-master.opt1
-rw-r--r--mysql-test/t/innodb_autoinc_lock_mode_zero.test44
-rw-r--r--mysql-test/t/innodb_gis.test1
-rw-r--r--mysql-test/t/innodb_mysql.test3
-rw-r--r--mysql-test/t/insert.test86
-rw-r--r--mysql-test/t/insert_select.test12
-rw-r--r--mysql-test/t/join.test29
-rw-r--r--mysql-test/t/key.test60
-rw-r--r--mysql-test/t/kill.test18
-rw-r--r--mysql-test/t/lock_multi.test98
-rw-r--r--mysql-test/t/log_state.test48
-rw-r--r--mysql-test/t/log_tables.test34
-rw-r--r--mysql-test/t/lowercase_view.test23
-rw-r--r--mysql-test/t/merge-big.test150
-rw-r--r--mysql-test/t/merge.test869
-rw-r--r--mysql-test/t/merge_innodb.test41
-rw-r--r--mysql-test/t/multi_update.test38
-rw-r--r--mysql-test/t/myisam.test76
-rw-r--r--mysql-test/t/myisampack.test33
-rw-r--r--mysql-test/t/mysql.test27
-rw-r--r--mysql-test/t/mysql_comments.sql218
-rw-r--r--mysql-test/t/mysql_comments.test37
-rw-r--r--mysql-test/t/mysqlbinlog.test71
-rw-r--r--mysql-test/t/mysqlbinlog2.test2
-rw-r--r--mysql-test/t/mysqlcheck.test49
-rw-r--r--mysql-test/t/mysqldump.test29
-rw-r--r--mysql-test/t/mysqlslap.test13
-rw-r--r--mysql-test/t/no-threads.test11
-rw-r--r--mysql-test/t/null.test29
-rw-r--r--mysql-test/t/olap.test18
-rw-r--r--mysql-test/t/order_by.test57
-rw-r--r--mysql-test/t/order_fill_sortbuf-master.opt2
-rw-r--r--mysql-test/t/outfile_loaddata.test113
-rw-r--r--mysql-test/t/parser.test48
-rw-r--r--mysql-test/t/partition.test299
-rw-r--r--mysql-test/t/partition_02myisam.test25
-rw-r--r--mysql-test/t/partition_archive.test107
-rw-r--r--mysql-test/t/partition_blackhole.test24
-rw-r--r--mysql-test/t/partition_csv.test38
-rw-r--r--mysql-test/t/partition_datatype.test213
-rw-r--r--mysql-test/t/partition_error.test13
-rw-r--r--mysql-test/t/partition_hash.test26
-rw-r--r--mysql-test/t/partition_innodb.test45
-rw-r--r--mysql-test/t/partition_mgm.test19
-rw-r--r--mysql-test/t/partition_range.test28
-rw-r--r--mysql-test/t/partition_symlink.test121
-rw-r--r--mysql-test/t/plugin.test15
-rw-r--r--mysql-test/t/profiling.test266
-rw-r--r--mysql-test/t/ps.test44
-rw-r--r--mysql-test/t/ps_ddl.test1851
-rw-r--r--mysql-test/t/query_cache.test23
-rw-r--r--mysql-test/t/query_cache_debug.test46
-rw-r--r--mysql-test/t/range.test20
-rw-r--r--mysql-test/t/read_only.test35
-rw-r--r--mysql-test/t/select.test216
-rw-r--r--mysql-test/t/skip_grants.test10
-rw-r--r--mysql-test/t/sp-code.test77
-rw-r--r--mysql-test/t/sp-error.test154
-rw-r--r--mysql-test/t/sp.test85
-rw-r--r--mysql-test/t/sp_notembedded.test23
-rw-r--r--mysql-test/t/status.test19
-rw-r--r--mysql-test/t/subselect.test242
-rw-r--r--mysql-test/t/subselect_notembedded.test96
-rw-r--r--mysql-test/t/symlink.test12
-rw-r--r--mysql-test/t/trigger.test59
-rw-r--r--mysql-test/t/trigger_notembedded.test (renamed from mysql-test/t/trigger-grant.test)34
-rw-r--r--mysql-test/t/type_bit.test15
-rw-r--r--mysql-test/t/type_blob.test11
-rw-r--r--mysql-test/t/type_date.test93
-rw-r--r--mysql-test/t/type_datetime.test94
-rw-r--r--mysql-test/t/type_decimal.test103
-rw-r--r--mysql-test/t/type_float.test5
-rw-r--r--mysql-test/t/type_newdecimal.test21
-rw-r--r--mysql-test/t/udf.test33
-rw-r--r--mysql-test/t/udf_skip_grants-master.opt1
-rw-r--r--mysql-test/t/udf_skip_grants.test28
-rw-r--r--mysql-test/t/union.test66
-rw-r--r--mysql-test/t/user_var.test27
-rw-r--r--mysql-test/t/variables+c.test11
-rw-r--r--mysql-test/t/variables.test19
-rw-r--r--mysql-test/t/view.test122
-rw-r--r--mysql-test/t/view_grant.test50
-rw-r--r--mysql-test/t/warnings.test1
-rw-r--r--mysql-test/t/windows.test3
-rw-r--r--mysql-test/t/xml.test8
-rwxr-xr-xmysys/CMakeLists.txt2
-rw-r--r--mysys/Makefile.am2
-rw-r--r--mysys/default.c176
-rw-r--r--mysys/mf_arr_appstr.c61
-rw-r--r--mysys/mf_pack.c4
-rw-r--r--mysys/my_delete.c10
-rw-r--r--mysys/my_getopt.c159
-rw-r--r--mysys/my_symlink2.c11
-rw-r--r--mysys/my_write.c4
-rw-r--r--mysys/queues.c36
-rw-r--r--mysys/thr_lock.c33
-rw-r--r--netware/Makefile.am3
-rw-r--r--netware/mysql_test_run.c1
-rw-r--r--netware/mysqld_safe.c1
-rwxr-xr-xscripts/CMakeLists.txt35
-rw-r--r--scripts/Makefile.am18
-rw-r--r--scripts/make_binary_distribution.sh14
-rwxr-xr-xscripts/make_win_bin_dist36
-rw-r--r--scripts/mysql_config.pl.in285
-rw-r--r--scripts/mysql_convert_table_format.sh2
-rw-r--r--scripts/mysql_install_db.pl.in612
-rw-r--r--scripts/mysql_install_db.sh379
-rwxr-xr-xscripts/mysql_secure_installation.pl.in352
-rw-r--r--scripts/mysql_system_tables_data.sql12
-rw-r--r--scripts/mysqlbug.sh6
-rw-r--r--scripts/mysqld_multi.sh2
-rw-r--r--scripts/mysqld_safe.sh15
-rw-r--r--scripts/mysqldumpslow.sh2
-rw-r--r--scripts/mysqlhotcopy.sh2
-rw-r--r--server-tools/instance-manager/mysql_connection.cc2
-rw-r--r--server-tools/instance-manager/mysqlmanager.cc3
-rw-r--r--sql-common/client.c323
-rw-r--r--sql-common/my_time.c43
-rwxr-xr-xsql/CMakeLists.txt3
-rw-r--r--sql/Makefile.am3
-rw-r--r--sql/derror.cc37
-rw-r--r--sql/des_key_file.cc19
-rw-r--r--sql/discover.cc54
-rw-r--r--sql/event_data_objects.cc18
-rw-r--r--sql/event_db_repository.cc9
-rw-r--r--sql/event_scheduler.cc8
-rw-r--r--sql/events.cc23
-rw-r--r--sql/field.cc1100
-rw-r--r--sql/field.h288
-rw-r--r--sql/field_conv.cc59
-rw-r--r--sql/filesort.cc350
-rw-r--r--sql/gen_lex_hash.cc17
-rw-r--r--sql/gstream.cc2
-rw-r--r--sql/ha_ndbcluster.cc943
-rw-r--r--sql/ha_ndbcluster.h20
-rw-r--r--sql/ha_ndbcluster_binlog.cc136
-rw-r--r--sql/ha_ndbcluster_cond.cc20
-rw-r--r--sql/ha_partition.cc188
-rw-r--r--sql/handler.cc943
-rw-r--r--sql/handler.h639
-rw-r--r--sql/hostname.cc11
-rw-r--r--sql/init.cc7
-rw-r--r--sql/item.cc1133
-rw-r--r--sql/item.h62
-rw-r--r--sql/item_buff.cc19
-rw-r--r--sql/item_cmpfunc.cc863
-rw-r--r--sql/item_cmpfunc.h15
-rw-r--r--sql/item_create.cc7
-rw-r--r--sql/item_func.cc366
-rw-r--r--sql/item_func.h89
-rw-r--r--sql/item_geofunc.cc33
-rw-r--r--sql/item_geofunc.h7
-rw-r--r--sql/item_row.cc7
-rw-r--r--sql/item_strfunc.cc194
-rw-r--r--sql/item_strfunc.h6
-rw-r--r--sql/item_subselect.cc131
-rw-r--r--sql/item_subselect.h1
-rw-r--r--sql/item_sum.cc312
-rw-r--r--sql/item_sum.h28
-rw-r--r--sql/item_timefunc.cc232
-rw-r--r--sql/item_timefunc.h8
-rw-r--r--sql/item_xmlfunc.cc60
-rw-r--r--sql/item_xmlfunc.h12
-rw-r--r--sql/key.cc99
-rw-r--r--sql/lex.h12
-rw-r--r--sql/lock.cc247
-rw-r--r--sql/log.cc641
-rw-r--r--sql/log.h8
-rw-r--r--sql/log_event.cc1346
-rw-r--r--sql/log_event.h1111
-rw-r--r--sql/log_event_old.cc1740
-rw-r--r--sql/log_event_old.h450
-rw-r--r--sql/mf_iocache.cc21
-rw-r--r--sql/my_decimal.cc12
-rw-r--r--sql/my_decimal.h27
-rw-r--r--sql/mysql_priv.h195
-rw-r--r--sql/mysqld.cc772
-rw-r--r--sql/mysqld_suffix.h7
-rw-r--r--sql/net_serv.cc195
-rw-r--r--sql/nt_servc.cc78
-rw-r--r--sql/nt_servc.h16
-rw-r--r--sql/opt_range.cc55
-rw-r--r--sql/opt_range.h9
-rw-r--r--sql/opt_sum.cc176
-rw-r--r--sql/parse_file.cc290
-rw-r--r--sql/parse_file.h24
-rw-r--r--sql/partition_info.cc7
-rw-r--r--sql/procedure.cc11
-rw-r--r--sql/procedure.h4
-rw-r--r--sql/protocol.cc523
-rw-r--r--sql/protocol.h8
-rw-r--r--sql/records.cc131
-rw-r--r--sql/repl_failsafe.cc79
-rw-r--r--sql/rpl_record.cc58
-rw-r--r--sql/rpl_rli.cc20
-rw-r--r--sql/rpl_rli.h12
-rw-r--r--sql/rpl_utility.cc38
-rw-r--r--sql/rpl_utility.h14
-rw-r--r--sql/scheduler.h2
-rw-r--r--sql/set_var.cc472
-rw-r--r--sql/set_var.h73
-rw-r--r--sql/share/errmsg.txt13
-rw-r--r--sql/slave.cc460
-rw-r--r--sql/slave.h2
-rw-r--r--sql/sp.cc355
-rw-r--r--sql/sp_head.cc511
-rw-r--r--sql/sp_head.h228
-rw-r--r--sql/sp_rcontext.cc104
-rw-r--r--sql/sp_rcontext.h42
-rw-r--r--sql/sql_acl.cc445
-rw-r--r--sql/sql_acl.h5
-rw-r--r--sql/sql_base.cc1489
-rw-r--r--sql/sql_binlog.cc91
-rw-r--r--sql/sql_cache.cc92
-rw-r--r--sql/sql_cache.h4
-rw-r--r--sql/sql_class.cc278
-rw-r--r--sql/sql_class.h281
-rw-r--r--sql/sql_connect.cc233
-rw-r--r--sql/sql_cursor.cc78
-rw-r--r--sql/sql_cursor.h11
-rw-r--r--sql/sql_db.cc15
-rw-r--r--sql/sql_delete.cc94
-rw-r--r--sql/sql_derived.cc5
-rw-r--r--sql/sql_error.cc2
-rw-r--r--sql/sql_handler.cc258
-rw-r--r--sql/sql_insert.cc225
-rw-r--r--sql/sql_lex.cc5
-rw-r--r--sql/sql_lex.h18
-rw-r--r--sql/sql_load.cc29
-rw-r--r--sql/sql_parse.cc1232
-rw-r--r--sql/sql_partition.cc75
-rw-r--r--sql/sql_partition.h1
-rw-r--r--sql/sql_plugin.cc69
-rw-r--r--sql/sql_prepare.cc634
-rw-r--r--sql/sql_profile.cc672
-rw-r--r--sql/sql_profile.h297
-rw-r--r--sql/sql_rename.cc2
-rw-r--r--sql/sql_repl.cc108
-rw-r--r--sql/sql_select.cc2798
-rw-r--r--sql/sql_select.h152
-rw-r--r--sql/sql_servers.cc7
-rw-r--r--sql/sql_show.cc174
-rw-r--r--sql/sql_string.cc9
-rw-r--r--sql/sql_table.cc444
-rw-r--r--sql/sql_trigger.cc420
-rw-r--r--sql/sql_trigger.h20
-rw-r--r--sql/sql_udf.cc13
-rw-r--r--sql/sql_union.cc8
-rw-r--r--sql/sql_update.cc148
-rw-r--r--sql/sql_view.cc52
-rw-r--r--sql/sql_yacc.yy407
-rw-r--r--sql/structs.h4
-rw-r--r--sql/table.cc74
-rw-r--r--sql/table.h57
-rw-r--r--sql/tztime.cc3
-rw-r--r--sql/tztime.h12
-rw-r--r--sql/udf_example.c10
-rw-r--r--sql/unireg.cc62
-rw-r--r--sql/unireg.h10
-rw-r--r--storage/archive/azio.c12
-rw-r--r--storage/archive/ha_archive.cc41
-rw-r--r--storage/csv/ha_tina.cc13
-rw-r--r--storage/example/ha_example.cc30
-rw-r--r--storage/federated/ha_federated.cc25
-rw-r--r--storage/federated/ha_federated.h1
-rw-r--r--storage/innobase/buf/buf0lru.c2
-rw-r--r--storage/innobase/dict/dict0dict.c14
-rw-r--r--storage/innobase/dict/dict0load.c80
-rw-r--r--storage/innobase/handler/ha_innodb.cc271
-rw-r--r--storage/innobase/handler/ha_innodb.h14
-rw-r--r--storage/innobase/ibuf/ibuf0ibuf.c4
-rw-r--r--storage/innobase/include/db0err.h6
-rw-r--r--storage/innobase/include/ha_prototypes.h16
-rw-r--r--storage/innobase/include/mach0data.h11
-rw-r--r--storage/innobase/include/mach0data.ic37
-rw-r--r--storage/innobase/include/mem0dbg.h16
-rw-r--r--storage/innobase/include/mem0mem.ic16
-rw-r--r--storage/innobase/include/page0cur.h1
-rw-r--r--storage/innobase/include/rem0rec.ic1
-rw-r--r--storage/innobase/include/row0mysql.h13
-rw-r--r--storage/innobase/include/sync0rw.h2
-rw-r--r--storage/innobase/include/univ.i28
-rw-r--r--storage/innobase/include/ut0ut.h18
-rw-r--r--storage/innobase/mem/mem0dbg.c40
-rw-r--r--storage/innobase/mem/mem0mem.c6
-rw-r--r--storage/innobase/row/row0mysql.c155
-rw-r--r--storage/innobase/row/row0sel.c76
-rw-r--r--storage/innobase/sync/sync0rw.c6
-rw-r--r--storage/innobase/sync/sync0sync.c2
-rw-r--r--storage/innobase/trx/trx0trx.c1
-rw-r--r--storage/innobase/ut/ut0ut.c71
-rw-r--r--storage/myisam/ha_myisam.cc38
-rw-r--r--storage/myisam/ha_myisam.h4
-rw-r--r--storage/myisam/mi_check.c265
-rw-r--r--storage/myisam/mi_dynrec.c68
-rw-r--r--storage/myisam/mi_open.c9
-rw-r--r--storage/myisam/mi_packrec.c3
-rw-r--r--storage/myisam/myisamchk.c7
-rw-r--r--storage/myisam/rt_index.c18
-rw-r--r--storage/myisam/rt_mbr.c5
-rw-r--r--storage/myisammrg/ha_myisammrg.cc701
-rw-r--r--storage/myisammrg/ha_myisammrg.h9
-rw-r--r--storage/myisammrg/myrg_close.c35
-rw-r--r--storage/myisammrg/myrg_extra.c4
-rw-r--r--storage/myisammrg/myrg_open.c349
-rw-r--r--storage/ndb/include/kernel/AttributeHeader.hpp10
-rw-r--r--storage/ndb/include/kernel/GlobalSignalNumbers.h8
-rw-r--r--storage/ndb/include/kernel/signaldata/AccScan.hpp1
-rw-r--r--storage/ndb/include/kernel/signaldata/CopyFrag.hpp41
-rw-r--r--storage/ndb/include/kernel/signaldata/ScanTab.hpp1
-rw-r--r--storage/ndb/include/kernel/signaldata/TcKeyConf.hpp2
-rw-r--r--storage/ndb/include/kernel/signaldata/TcKeyRef.hpp3
-rw-r--r--storage/ndb/include/kernel/signaldata/TcRollbackRep.hpp3
-rw-r--r--storage/ndb/include/ndb_version.h.in47
-rw-r--r--storage/ndb/include/ndbapi/Ndb.hpp1
-rw-r--r--storage/ndb/include/ndbapi/NdbDictionary.hpp2
-rw-r--r--storage/ndb/include/ndbapi/NdbOperation.hpp5
-rw-r--r--storage/ndb/include/ndbapi/NdbPool.hpp3
-rw-r--r--storage/ndb/include/ndbapi/NdbScanFilter.hpp29
-rw-r--r--storage/ndb/include/ndbapi/NdbTransaction.hpp9
-rw-r--r--storage/ndb/include/ndbapi/ndbapi_limits.h2
-rw-r--r--storage/ndb/include/util/ndb_rand.h33
-rw-r--r--storage/ndb/src/common/debugger/EventLogger.cpp12
-rw-r--r--storage/ndb/src/common/debugger/signaldata/SignalNames.cpp4
-rw-r--r--storage/ndb/src/common/debugger/signaldata/TcKeyConf.cpp4
-rw-r--r--storage/ndb/src/common/transporter/Transporter.cpp4
-rw-r--r--storage/ndb/src/common/transporter/TransporterRegistry.cpp3
-rw-r--r--storage/ndb/src/common/util/Makefile.am3
-rw-r--r--storage/ndb/src/common/util/ndb_rand.c40
-rw-r--r--storage/ndb/src/cw/cpcd/APIService.cpp2
-rw-r--r--storage/ndb/src/kernel/blocks/ERROR_codes.txt20
-rw-r--r--storage/ndb/src/kernel/blocks/backup/Backup.cpp5
-rw-r--r--storage/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp89
-rw-r--r--storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp5
-rw-r--r--storage/ndb/src/kernel/blocks/dbdih/Dbdih.hpp18
-rw-r--r--storage/ndb/src/kernel/blocks/dbdih/DbdihInit.cpp5
-rw-r--r--storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp267
-rw-r--r--storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp21
-rw-r--r--storage/ndb/src/kernel/blocks/dblqh/DblqhInit.cpp7
-rw-r--r--storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp399
-rw-r--r--storage/ndb/src/kernel/blocks/dbtc/Dbtc.hpp14
-rw-r--r--storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp245
-rw-r--r--storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp14
-rw-r--r--storage/ndb/src/kernel/blocks/dbtup/DbtupDiskAlloc.cpp264
-rw-r--r--storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp6
-rw-r--r--storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp66
-rw-r--r--storage/ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp10
-rw-r--r--storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp70
-rw-r--r--storage/ndb/src/kernel/blocks/dbtux/DbtuxScan.cpp3
-rw-r--r--storage/ndb/src/kernel/blocks/dbutil/DbUtil.cpp5
-rw-r--r--storage/ndb/src/kernel/blocks/lgman.cpp12
-rw-r--r--storage/ndb/src/kernel/blocks/pgman.cpp62
-rw-r--r--storage/ndb/src/kernel/blocks/qmgr/Qmgr.hpp3
-rw-r--r--storage/ndb/src/kernel/blocks/qmgr/QmgrInit.cpp26
-rw-r--r--storage/ndb/src/kernel/blocks/qmgr/QmgrMain.cpp362
-rw-r--r--storage/ndb/src/kernel/blocks/suma/Suma.cpp60
-rw-r--r--storage/ndb/src/kernel/blocks/tsman.cpp62
-rw-r--r--storage/ndb/src/kernel/blocks/tsman.hpp24
-rw-r--r--storage/ndb/src/kernel/vm/SimulatedBlock.cpp2
-rw-r--r--storage/ndb/src/mgmclient/CommandInterpreter.cpp12
-rw-r--r--storage/ndb/src/mgmsrv/MgmtSrvr.cpp87
-rw-r--r--storage/ndb/src/mgmsrv/Services.cpp2
-rw-r--r--storage/ndb/src/ndbapi/ClusterMgr.cpp5
-rw-r--r--storage/ndb/src/ndbapi/NdbBlob.cpp2
-rw-r--r--storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp12
-rw-r--r--storage/ndb/src/ndbapi/NdbIndexOperation.cpp3
-rw-r--r--storage/ndb/src/ndbapi/NdbOperation.cpp6
-rw-r--r--storage/ndb/src/ndbapi/NdbOperationDefine.cpp76
-rw-r--r--storage/ndb/src/ndbapi/NdbOperationExec.cpp24
-rw-r--r--storage/ndb/src/ndbapi/NdbReceiver.cpp2
-rw-r--r--storage/ndb/src/ndbapi/NdbScanFilter.cpp244
-rw-r--r--storage/ndb/src/ndbapi/NdbScanOperation.cpp5
-rw-r--r--storage/ndb/src/ndbapi/NdbTransaction.cpp18
-rw-r--r--storage/ndb/src/ndbapi/TransporterFacade.cpp2
-rw-r--r--storage/ndb/src/ndbapi/ndberror.c5
-rw-r--r--storage/ndb/test/include/HugoTransactions.hpp18
-rw-r--r--storage/ndb/test/include/UtilTransactions.hpp5
-rwxr-xr-xstorage/ndb/test/include/dbutil.hpp97
-rw-r--r--storage/ndb/test/ndbapi/testBasic.cpp35
-rw-r--r--storage/ndb/test/ndbapi/testDict.cpp263
-rw-r--r--storage/ndb/test/ndbapi/testIndex.cpp4
-rw-r--r--storage/ndb/test/ndbapi/testNodeRestart.cpp127
-rw-r--r--storage/ndb/test/ndbapi/testScan.cpp2
-rw-r--r--storage/ndb/test/ndbapi/testSystemRestart.cpp370
-rw-r--r--storage/ndb/test/ndbapi/test_event.cpp90
-rw-r--r--storage/ndb/test/run-test/daily-basic-tests.txt103
-rw-r--r--storage/ndb/test/src/HugoOperations.cpp1
-rw-r--r--storage/ndb/test/src/HugoTransactions.cpp229
-rw-r--r--storage/ndb/test/src/Makefile.am2
-rw-r--r--storage/ndb/test/src/NDBT_Thread.cpp2
-rw-r--r--storage/ndb/test/src/NdbRestarts.cpp1
-rw-r--r--storage/ndb/test/src/UtilTransactions.cpp74
-rwxr-xr-xstorage/ndb/test/src/dbutil.cpp176
-rw-r--r--storage/ndb/test/tools/Makefile.am3
-rw-r--r--storage/ndb/test/tools/connect.cpp152
-rw-r--r--storage/ndb/tools/restore/Restore.cpp156
-rw-r--r--storage/ndb/tools/restore/Restore.hpp4
-rw-r--r--strings/ctype-cp932.c4
-rw-r--r--strings/ctype-euc_kr.c28
-rw-r--r--strings/ctype-simple.c24
-rw-r--r--strings/ctype-ucs2.c24
-rw-r--r--strings/decimal.c19
-rw-r--r--strings/int2str.c16
-rw-r--r--strings/llstr.c6
-rw-r--r--strings/longlong2str.c32
-rw-r--r--strings/strmake.c30
-rw-r--r--support-files/MacOSX/ReadMe.txt8
-rw-r--r--support-files/compiler_warnings.supp6
-rw-r--r--support-files/mysql.server.sh2
-rw-r--r--support-files/mysql.spec.sh5
-rw-r--r--tests/bug25714.c6
-rw-r--r--tests/mysql_client_test.c171
-rw-r--r--unittest/mysys/my_atomic-t.c11
1248 files changed, 152044 insertions, 37949 deletions
diff --git a/.bzrignore b/.bzrignore
index e1ad5a89015..c54795778c8 100644
--- a/.bzrignore
+++ b/.bzrignore
@@ -900,7 +900,9 @@ libmysql_r/.libs/libmysqlclient_r.lai
libmysql_r/.libs/libmysqlclient_r.so.15
libmysql_r/.libs/libmysqlclient_r.so.15.0.0
libmysql_r/acconfig.h
+libmysql_r/client_settings.h
libmysql_r/conf_to_src
+libmysql_r/link_sources
libmysql_r/my_static.h
libmysql_r/mysys_priv.h
libmysql_r/vio_priv.h
@@ -1136,6 +1138,7 @@ libmysqld/rpl_filter.cc
libmysqld/rpl_injector.cc
libmysqld/rpl_record.cc
libmysqld/rpl_record_old.cc
+libmysqld/scheduler.cc
libmysqld/set_var.cc
libmysqld/simple-test
libmysqld/slave.cc
@@ -1152,6 +1155,7 @@ libmysqld/sql_builtin.cc
libmysqld/sql_cache.cc
libmysqld/sql_class.cc
libmysqld/sql_command
+libmysqld/sql_connect.cc
libmysqld/sql_crypt.cc
libmysqld/sql_cursor.cc
libmysqld/sql_cursor.h
@@ -1182,6 +1186,7 @@ libmysqld/sql_show.cc
libmysqld/sql_state.c
libmysqld/sql_string.cc
libmysqld/sql_table.cc
+libmysqld/sql_tablespace.cc
libmysqld/sql_test.cc
libmysqld/sql_trigger.cc
libmysqld/sql_udf.cc
@@ -1840,6 +1845,7 @@ scripts/make_binary_distribution
scripts/make_sharedlib_distribution
scripts/make_win_binary_distribution
scripts/make_win_src_distribution
+scripts/make_win_src_distribution_old
scripts/msql2mysql
scripts/mysql_config
scripts/mysql_convert_table_format
@@ -2081,6 +2087,7 @@ sql/gen_lex_hash
sql/gmon.out
sql/handlerton.cc
sql/lex_hash.h
+sql/link_sources
sql/max/*
sql/message.h
sql/message.mc
@@ -3002,5 +3009,11 @@ vio/viotest.cpp
win/configure.data
win/vs71cache.txt
win/vs8cache.txt
+ylwrap
zlib/*.ds?
zlib/*.vcproj
+mysql-test/funcs_1.log
+mysql-test/funcs_1.tar
+mysql-test/suite/funcs_1.tar.gz
+mysql-test/.DS_Store
+.DS_Store
diff --git a/BUILD/autorun.sh b/BUILD/autorun.sh
index def229e21a0..35a2e56cbdf 100755
--- a/BUILD/autorun.sh
+++ b/BUILD/autorun.sh
@@ -3,20 +3,29 @@
die() { echo "$@"; exit 1; }
-# Added glibtoolize reference to make native OSX autotools work
-if [ -f /usr/bin/glibtoolize ]
+# Handle "glibtoolize" (e.g., for native OS X autotools) as another
+# name for "libtoolize". Use the first one, either name, found in PATH.
+LIBTOOLIZE=libtoolize # Default
+IFS="${IFS= }"; save_ifs="$IFS"; IFS=':'
+for dir in $PATH
+do
+ if test -x $dir/glibtoolize
then
LIBTOOLIZE=glibtoolize
- else
- LIBTOOLIZE=libtoolize
-fi
+ break
+ elif test -x $dir/libtoolize
+ then
+ break
+ fi
+done
+IFS="$save_ifs"
aclocal || die "Can't execute aclocal"
autoheader || die "Can't execute autoheader"
# --force means overwrite ltmain.sh script if it already exists
-$LIBTOOLIZE --automake --force || die "Can't execute libtoolize"
+$LIBTOOLIZE --automake --force --copy || die "Can't execute libtoolize"
# --add-missing instructs automake to install missing auxiliary files
# and --force to overwrite them if they already exist
-automake --add-missing --force || die "Can't execute automake"
+automake --add-missing --force --copy || die "Can't execute automake"
autoconf || die "Can't execute autoconf"
diff --git a/BUILD/compile-dist b/BUILD/compile-dist
index 2da2259a3f7..d9103e0a419 100755
--- a/BUILD/compile-dist
+++ b/BUILD/compile-dist
@@ -7,14 +7,9 @@
# package" that is used as the basis for all other binary builds.
#
test -f Makefile && make maintainer-clean
-(cd storage/innobase && aclocal && autoheader && \
- libtoolize --automake --force --copy && \
- automake --force --add-missing --copy && autoconf)
-aclocal
-autoheader
-libtoolize --automake --force --copy
-automake --force --add-missing --copy
-autoconf
+
+path=`dirname $0`
+. $path/autorun.sh
# Default to gcc for CC and CXX
if test -z "$CXX" ; then
diff --git a/BUILD/compile-solaris-amd64-debug b/BUILD/compile-solaris-amd64-debug
new file mode 100644
index 00000000000..ad1c298907f
--- /dev/null
+++ b/BUILD/compile-solaris-amd64-debug
@@ -0,0 +1,10 @@
+#! /bin/sh
+path=`dirname $0`
+. "$path/SETUP.sh"
+amd64_cflags="-m64 -mtune=athlon64"
+extra_flags="$amd64_cflags $debug_cflags $max_cflags"
+c_warnings="$c_warnings $debug_extra_warnings"
+cxx_warnings="$cxx_warnings $debug_extra_warnings"
+extra_configs="$amd64_configs $debug_configs $max_configs --enable-thread-safe-client"
+
+. "$path/FINISH.sh"
diff --git a/BUILD/compile-solaris-amd64-forte b/BUILD/compile-solaris-amd64-forte
new file mode 100644
index 00000000000..63aceb16c04
--- /dev/null
+++ b/BUILD/compile-solaris-amd64-forte
@@ -0,0 +1,52 @@
+#! /bin/sh
+
+gmake -k clean || true
+/bin/rm -f */.deps/*.P config.cache
+
+path=`dirname $0`
+. "$path/autorun.sh"
+
+# For "optimal" code for this computer add -fast to EXTRA
+# To compile 64 bit, add -xarch=v9 to EXTRA_64_BIT
+
+EXTRA_64_BIT="-xarch=amd64"
+EXTRA="-fast"
+
+#
+# The following should not need to be touched
+#
+
+export CC CXX CFLAGS CXXFLAGS
+STD="-g -mt -D_FORTEC_ $EXTRA $EXTRA_64_BIT"
+ASFLAGS="$EXTRA_64_BIT"
+CC=cc-5.0
+CFLAGS="-Xa -xstrconst $STD"
+CXX=CC
+CXXFLAGS="-noex $STD"
+./configure \
+ --prefix=/usr/local/mysql \
+ --localstatedir=/usr/local/mysql/data \
+ --libexecdir=/usr/local/mysql/bin \
+ --with-extra-charsets=complex \
+ --enable-thread-safe-client \
+ --enable-local-infile \
+ --with-zlib-dir=bundled \
+ --with-big-tables \
+ --with-readline \
+ --with-archive-storage-engine \
+ --with-named-curses=-lcurses \
+ --with-big-tables \
+ --with-innodb \
+ --with-example-storage-engine \
+ --with-blackhole-storage-engine \
+ --with-federated-storage-engine \
+ --with-csv-storage-engine \
+ --with-ssl \
+ --enable-assembler
+
+# Not including:
+# --with-ndbcluster
+# --with-berkeley-db
+
+gmake -j4
+test $? = 0 && make test
diff --git a/BUILD/compile-solaris-amd64-forte-debug b/BUILD/compile-solaris-amd64-forte-debug
new file mode 100644
index 00000000000..8e3ade9b429
--- /dev/null
+++ b/BUILD/compile-solaris-amd64-forte-debug
@@ -0,0 +1,54 @@
+#! /bin/sh
+
+gmake -k clean || true
+/bin/rm -f */.deps/*.P config.cache
+
+path=`dirname $0`
+. "$path/autorun.sh"
+
+# To compile 64 bit, add -xarch=amd64 to EXTRA_64_BIT
+EXTRA_64_BIT="-xarch=amd64"
+
+# For "optimal" code for this computer add -fast to EXTRA. Note that
+# this causes problem with debugging the program since -fast implies
+# -xO5.
+EXTRA=""
+
+#
+# The following should not need to be touched
+#
+
+export CC CXX CFLAGS CXXFLAGS
+STD="-g -mt -D_FORTEC_ $EXTRA $EXTRA_64_BIT $debug_cflags"
+ASFLAGS="$EXTRA_64_BIT"
+CC=cc-5.0
+CFLAGS="-Xa -xstrconst $STD"
+CXX=CC
+CXXFLAGS="-noex $STD"
+./configure \
+ --prefix=/usr/local/mysql \
+ --localstatedir=/usr/local/mysql/data \
+ --libexecdir=/usr/local/mysql/bin \
+ --with-extra-charsets=complex \
+ --enable-thread-safe-client \
+ --enable-local-infile \
+ --with-zlib-dir=bundled \
+ --with-big-tables \
+ --with-readline \
+ --with-archive-storage-engine \
+ --with-named-curses=-lcurses \
+ --with-big-tables \
+ --with-innodb \
+ --with-example-storage-engine \
+ --with-blackhole-storage-engine \
+ --with-federated-storage-engine \
+ --with-csv-storage-engine \
+ --with-ssl \
+ --with-debug \
+ --enable-assembler
+
+# Not including:
+# --with-ndbcluster
+# --with-berkeley-db
+
+gmake -j4
diff --git a/BitKeeper/etc/collapsed b/BitKeeper/etc/collapsed
index 842482e46d5..34584f04c01 100644
--- a/BitKeeper/etc/collapsed
+++ b/BitKeeper/etc/collapsed
@@ -38,9 +38,25 @@
459a70691aYIfU2ohV0a3P5iTLpO2A
459a7422KF_P7PuU3YQ5qG6ZLEVpiA
459a74e4nRcXppMSBYeQQ5efDkTADg
+459c03b9N_mqF2XJKK6DwSrIt7e6_g
+459c1965_BQMBzBO8S_gVqjTHYQrmw
+459c2098XoAUsUn8N07IVRDD6CTM-A
+459ea845XenN-uWqEM5LFvUT60tW_A
45ae6628gqKTsUFfnoNExadETVIkbA
+45af88c9RIIJWPfBxs3o7zekI-ELPQ
45ba4faf2oqu6eR8fqecR3LfSNcYUg
45ba5238-NKl80QVXzdGo8hO9M75Xg
45c0fdfb2mz6NdOIsLenJtf6_ZelTA
+45c38d90tNwOTSaYKHXd3ccLtnytlQ
+45c390d6BbWrwyEi5T5VsWKYxl06Rg
+45c39d31g0iik6UE_oTK5N55ry-ycA
45d1ffcd-r3v8A7uh92hQaMfQM9UPQ
45d21437Vg_-i4uOWyvzYWHESXDP6A
+45da6370nnZlAAIieMCrXkxF9toOyQ
+45da6551zUuplwxuqcT2fhRgceC0CQ
+45db0d4bkGtxBk21sZFJgbCV1FcNRg
+45db468b-DKE8kUTV42eYMYmk8_g9g
+45dd21d1rVPnDfvZTNVHLalcjnbsZw
+45ddaf15_Ld7IAEpUUP3FJjJ-oSEFg
+45ddc763DodLG1BqH_wRBJXMbCSB5A
+45ddc8282KnaNGuijqCTphlXV_eeog
diff --git a/BitKeeper/triggers/post-commit b/BitKeeper/triggers/post-commit
index 8376b9e0631..c3a61ed2dde 100755
--- a/BitKeeper/triggers/post-commit
+++ b/BitKeeper/triggers/post-commit
@@ -1,7 +1,13 @@
#!/bin/sh
#shift
-FROM=$USER@mysql.com
+if [ -n "$BK_USER" ]
+then
+ COMMITTER=$BK_USER
+else
+ COMMITTER=$USER
+fi
+FROM=$COMMITTER@mysql.com
COMMITS=commits@lists.mysql.com
DOCS=docs-commit@mysql.com
LIMIT=10000
@@ -88,8 +94,8 @@ Subject: bk commit into $VERSION tree ($CHANGESET)$BS
X-CSetKey: <$CSETKEY>
$BH
Below is the list of changes that have just been committed into a local
-$VERSION repository of $USER. When $USER does a push these changes will
-be propagated to the main repository and, within 24 hours after the
+$VERSION repository of $COMMITTER. When $COMMITTER does a push these changes
+will be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
diff --git a/BitKeeper/triggers/post-commit.innodb.pl b/BitKeeper/triggers/post-commit.innodb.pl
new file mode 100755
index 00000000000..44d98b04838
--- /dev/null
+++ b/BitKeeper/triggers/post-commit.innodb.pl
@@ -0,0 +1,22 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+
+use FindBin;
+require "$FindBin::Bin/triggers-lib.pl";
+
+# Don't run unless commit was successful
+check_status() || exit 0;
+
+my $cset = latest_cset();
+
+# Read most recent ChangeSet's changed files. Send merge changes along, since
+# they'll need to be incorporated in InnoDB's source tree eventually.
+my $changes = innodb_get_changes('cset', $cset, 'yes')
+ or exit 0;
+
+innodb_send_changes_email($cset, $changes)
+ or exit 1;
+
+exit 0;
diff --git a/BitKeeper/triggers/post-incoming.innodb.pl b/BitKeeper/triggers/post-incoming.innodb.pl
new file mode 100755
index 00000000000..4b100d88037
--- /dev/null
+++ b/BitKeeper/triggers/post-incoming.innodb.pl
@@ -0,0 +1,30 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+
+use FindBin;
+require "$FindBin::Bin/triggers-lib.pl";
+
+# Don't run unless push/pull was successful
+check_status() or exit 0;
+
+# Don't run if push/pull is in local clones
+exit 0 if repository_type() eq 'local';
+
+# For each pushed ChangeSet, check it for InnoDB files and send
+# diff of entire ChangeSet to InnoDB developers if such changes
+# exist.
+
+my $error = 0;
+
+foreach my $cset (read_bk_csetlist())
+{
+ my $changes = innodb_get_changes('cset', $cset, 'yes')
+ or next;
+
+ innodb_send_changes_email($cset, $changes)
+ or $error = 1;
+}
+
+exit ($error == 0 ? 0 : 1);
diff --git a/BitKeeper/triggers/pre-commit.check-case.pl b/BitKeeper/triggers/pre-commit.check-case.pl
new file mode 100755
index 00000000000..4f68f8619e5
--- /dev/null
+++ b/BitKeeper/triggers/pre-commit.check-case.pl
@@ -0,0 +1,26 @@
+#!/usr/bin/perl
+my $status = 0;
+
+my $pending = $ENV{'BK_PENDING'};
+exit 0 unless -f $pending;
+
+open FI, "<", $pending || exit 0;
+while(<FI>) {
+ my ($file, $stuff) = split /\|/, $_, 2;
+ next unless -f $file;
+ $file =~ s/^(.*)\/([^\/]*)$/$2/;
+ my $path = $1;
+ opendir DIR, $path;
+ my @files = sort map { lc } readdir DIR;
+ closedir DIR;
+ my %count = ();
+ $count{$_}++ for @files;
+ @files = grep { $count{$_} > 1 } keys %count;
+ if(@files > 0) {
+ print "$path/$file: duplicate file names: " . (join " ", @files) . "\n";
+ $status = 1;
+ }
+}
+close FI;
+
+exit $status;
diff --git a/BitKeeper/triggers/pre-commit.innodb.pl b/BitKeeper/triggers/pre-commit.innodb.pl
new file mode 100755
index 00000000000..6e2b65113b0
--- /dev/null
+++ b/BitKeeper/triggers/pre-commit.innodb.pl
@@ -0,0 +1,21 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+
+use FindBin;
+require "$FindBin::Bin/triggers-lib.pl";
+
+die "$0: Script error: \$BK_PENDING is not set in pre-commit trigger\n"
+ unless defined $ENV{BK_PENDING};
+
+# Read changed files from $BK_PENDING directly. Do not bother user about
+# merge changes; they don't have any choice, the merge must be done.
+my $changes = innodb_get_changes('file', $ENV{BK_PENDING}, undef)
+ or exit 0;
+
+innodb_inform_and_query_user($changes)
+ or exit 1; # Abort commit
+
+# OK, continue with commit
+exit 0;
diff --git a/BitKeeper/triggers/triggers-lib.pl b/BitKeeper/triggers/triggers-lib.pl
new file mode 100644
index 00000000000..65a334ba926
--- /dev/null
+++ b/BitKeeper/triggers/triggers-lib.pl
@@ -0,0 +1,356 @@
+# To use this convenience library in a trigger, simply require it at
+# at the top of the script. For example:
+#
+# #! /usr/bin/perl
+#
+# use FindBin;
+# require "$FindBin::Bin/triggers-lib.pl";
+#
+# FindBin is needed, because sometimes a trigger is called from the
+# RESYNC directory, and the trigger dir is ../BitKeeper/triggers
+
+use strict;
+use warnings;
+
+use Carp;
+use FindBin;
+
+
+my $mysql_version = "5.1";
+
+# These addresses must be kept current in all MySQL versions.
+# See the wiki page InnoDBandOracle.
+#my @innodb_to_email = ('dev_innodb_ww@oracle.com');
+#my @innodb_cc_email = ('dev-innodb@mysql.com');
+# FIXME: Keep this for testing; remove it once it's been used for a
+# week or two.
+my @innodb_to_email = ('tim@mysql.com');
+my @innodb_cc_email = ();
+
+# This is for MySQL >= 5.1. Regex which defines the InnoDB files
+# which should generally not be touched by MySQL developers.
+my $innodb_files_description = <<EOF;
+ storage/innobase/*
+ mysql-test/t/innodb* (except mysql-test/t/innodb_mysql*)
+ mysql-test/r/innodb* (except mysql-test/r/innodb_mysql*)
+EOF
+my $innodb_files_regex = qr{
+ ^
+ (
+ # Case 1: innobase/*
+ storage/innobase/
+ |
+ # Case 2: mysql-test/[tr]/innodb* (except innodb_mysql*)
+ mysql-test/(t|r)/SCCS/s.innodb
+ # The mysql-test/[tr]/innodb_mysql* are OK to edit
+ (?!_mysql)
+ )
+}x;
+
+
+# See 'bk help log', and the format of, e.g., $BK_PENDING.
+# Important: this already contains the terminating newline!
+my $file_rev_dspec = ':SFILE:|:REV:\n';
+
+my $bktmp = "$FindBin::Bin/../tmp";
+
+my $sendmail;
+foreach ('/usr/sbin/sendmail', 'sendmail') {
+ $sendmail = $_;
+ last if -x $sendmail;
+}
+my $from = $ENV{REAL_EMAIL} || $ENV{USER} . '@mysql.com';
+
+
+# close_or_warn
+# $fh file handle to be closed
+# $description description of the file handle
+# RETURN Return value of close($fh)
+#
+# Print a nice warning message if close() isn't successful. See
+# perldoc perlvar and perldoc -f close for details.
+
+sub close_or_warn (*$)
+{
+ my ($fh, $description) = @_;
+
+ my $status = close $fh;
+ if (not $status) {
+ warn "$0: error on close of '$description': ",
+ ($! ? "$!" : "exit status " . ($? >> 8)), "\n";
+ }
+
+ return $status;
+}
+
+
+# check_status
+# $warn If true, warn about bad status
+# RETURN TRUE, if $BK_STATUS is "OK"; FALSE otherwise
+#
+# Also checks the undocumented $BK_COMMIT env variable
+
+sub check_status
+{
+ my ($warn) = @_;
+
+ my $status = (grep { defined $_ }
+ $ENV{BK_STATUS}, $ENV{BK_COMMIT}, '<undef>')[0];
+
+ unless ($status eq 'OK')
+ {
+ warn "Bad BK_STATUS '$status'\n" if $warn;
+ return undef;
+ }
+
+ return 1;
+}
+
+
+# repository_location
+#
+# RETURN ('HOST', 'ROOT') for the repository being modified
+
+sub repository_location
+{
+ if ($ENV{BK_SIDE} eq 'client') {
+ return ($ENV{BK_HOST}, $ENV{BK_ROOT});
+ } else {
+ return ($ENV{BKD_HOST}, $ENV{BKD_ROOT});
+ }
+}
+
+
+# repository_type
+# RETURN:
+# 'main' for repo on bk-internal with post-incoming.bugdb trigger
+# 'team' for repo on bk-internal with post-incoming.queuepush.pl trigger
+# 'local' otherwise
+#
+# This definition may need to be modified if the host name or triggers change.
+
+sub repository_type
+{
+ my ($host, $root) = repository_location();
+
+ return 'local'
+ unless uc($host) eq 'BK-INTERNAL.MYSQL.COM'
+ and -e "$root/BitKeeper/triggers/post-incoming.queuepush.pl";
+
+ return 'main' if -e "$root/BitKeeper/triggers/post-incoming.bugdb";
+
+ return 'team';
+}
+
+
+# latest_cset
+# RETURN Key for most recent ChangeSet
+
+sub latest_cset {
+ chomp(my $retval = `bk changes -r+ -k`);
+ return $retval;
+}
+
+
+# read_bk_csetlist
+# RETURN list of cset keys from $BK_CSETLIST file
+sub read_bk_csetlist
+{
+ die "$0: script error: \$BK_CSETLIST not set\n"
+ unless defined $ENV{BK_CSETLIST};
+
+ open CSETS, '<', $ENV{BK_CSETLIST}
+ or die "$0: can't read \$BK_CSETLIST='$ENV{BK_CSETLIST}': $!\n";
+ chomp(my @csets = <CSETS>);
+ close_or_warn(CSETS, "\$BK_CSETLIST='$ENV{BK_CSETLIST}'");
+
+ return @csets;
+}
+
+
+# innodb_get_changes
+# $type 'file' or 'cset'
+# $value file name (e.g., $BK_PENDING) or ChangeSet key
+# $want_merge_changes flag; if false, merge changes will be ignored
+# RETURN A string describing the InnoDB changes, or undef if no changes
+#
+# The return value does *not* include ChangeSet comments, only per-file
+# comments.
+
+sub innodb_get_changes
+{
+ my ($type, $value, $want_merge_changes) = @_;
+
+ if ($type eq 'file')
+ {
+ open CHANGES, '<', $value
+ or die "$0: can't read '$value': $!\n";
+ }
+ elsif ($type eq 'cset')
+ {
+ open CHANGES, '-|', "bk changes -r'$value' -v -d'$file_rev_dspec'"
+ or die "$0: can't exec 'bk changes': $!\n";
+ }
+ else
+ {
+ croak "$0: script error: invalid type '$type'";
+ }
+
+ my @changes = grep { /$innodb_files_regex/ } <CHANGES>;
+
+ close_or_warn(CHANGES, "($type, '$value')");
+
+ return undef unless @changes;
+
+
+ # Set up a pipeline of 'bk log' commands to weed out unwanted deltas. We
+ # never want deltas which contain no actual changes. We may not want deltas
+ # which are merges.
+
+ my @filters;
+
+ # This tests if :LI: (lines inserted) or :LD: (lines deleted) is
+ # non-zero. That is, did this delta change the file contents?
+ push @filters,
+ "bk log -d'"
+ . "\$if(:LI: -gt 0){$file_rev_dspec}"
+ . "\$if(:LI: -eq 0){\$if(:LD: -gt 0){$file_rev_dspec}}"
+ . "' -";
+
+ push @filters, "bk log -d'\$unless(:MERGE:){$file_rev_dspec}' -"
+ unless $want_merge_changes;
+
+ my $tmpname = "$bktmp/ibchanges.txt";
+ my $pipeline = join(' | ', @filters) . " > $tmpname";
+ open TMP, '|-', $pipeline
+ or die "$0: can't exec [[$pipeline]]: $!\n";
+
+ print TMP @changes;
+ close_or_warn(TMP, "| $pipeline");
+
+ # Use bk log to describe the changes
+ open LOG, "bk log - < $tmpname |"
+ or die "$0: can't exec 'bk log - < $tmpname': $!\n";
+ my @log = <LOG>;
+ close_or_warn(LOG, "bk log - < $tmpname |");
+
+ unlink $tmpname;
+
+ return undef unless @log;
+
+ return join('', @log);
+}
+
+
+# Ask user if they really want to commit.
+# RETURN TRUE = YES, commit; FALSE = NO, do not commit
+
+sub innodb_inform_and_query_user
+{
+ my ($description) = @_;
+
+ my $tmpname = "$bktmp/ibquery.txt";
+
+ open MESSAGE, "> $tmpname"
+ or die "$0: can't write message to '$tmpname': $!";
+
+ print MESSAGE <<EOF;
+This ChangeSet modifies some files which should normally be changed by
+InnoDB developers only. In general, MySQL developers should not change:
+
+$innodb_files_description
+The following InnoDB files were modified:
+=========================================================
+$description
+=========================================================
+
+If you understand this, you may Commit these changes. The changes
+will be sent to the InnoDB developers at @{[join ', ', @innodb_to_email]},
+CC @{[join ', ', @innodb_cc_email]}.
+EOF
+
+ close_or_warn(MESSAGE, "$tmpname");
+
+ my $status = system('bk', 'prompt', '-w',
+ '-yCommit these changes', '-nDo not Commit', "-f$tmpname");
+
+ unlink $tmpname;
+
+ return ($status == 0 ? 1 : undef);
+}
+
+
+# innodb_send_changes_email
+# $cset The ChangeSet key
+# $description A (maybe brief) description of the changes
+# RETURN TRUE = Success, e-mail sent; FALSE = Failure
+#
+# Sends a complete diff of changes in $cset by e-mail.
+
+sub innodb_send_changes_email
+{
+ my ($cset, $description) = @_;
+
+ # FIXME: Much of this is duplicated in the 'post-commit' Bourne shell
+ # trigger
+
+ my $cset_short = `bk changes -r'$cset' -d':P:::I:'`;
+ my $cset_key = `bk changes -r'$cset' -d':KEY:'`;
+
+ my ($host, $bk_root) = repository_location();
+ my $type = repository_type();
+ (my $treename = $bk_root) =~ s,^.*/,,;
+
+ print "Nofifying InnoDB developers at ",
+ (join ', ', @innodb_to_email, @innodb_cc_email), "\n";
+
+ open SENDMAIL, '|-', "$sendmail -t"
+ or die "Can't exec '$sendmail -t': $!\n";
+
+ my @headers;
+ push @headers, "List-ID: <bk.innodb-$mysql_version>";
+ push @headers, "From: $from";
+ push @headers, "To: " . (join ', ', @innodb_to_email);
+ push @headers, "Cc: " . (join ', ', @innodb_cc_email) if @innodb_cc_email;
+ push @headers,
+ "Subject: InnoDB changes in $type $mysql_version tree ($cset_short)";
+ push @headers, "X-CSetKey: <$cset_key>";
+
+ print SENDMAIL map { "$_\n" } @headers, '';
+
+ if ($type eq 'main')
+ {
+ print SENDMAIL <<EOF;
+Changes pushed to $treename by $ENV{USER} affect the following
+files. These changes are in a $mysql_version main tree. They
+will be available publicly within 24 hours.
+EOF
+ }
+ elsif ($type eq 'team')
+ {
+ print SENDMAIL <<EOF;
+Changes added to $treename by $ENV{USER} affect the
+following files. These changes are in a $mysql_version team tree.
+EOF
+ }
+ else
+ {
+ print SENDMAIL <<EOF;
+A local commit by $ENV{USER} affects the following files. These
+changes are in a clone of a $mysql_version tree.
+EOF
+ }
+ print SENDMAIL "\n";
+ print SENDMAIL qx(bk changes -r'$cset');
+ print SENDMAIL "$description";
+ print SENDMAIL "The complete ChangeSet diffs follow.\n\n";
+ print SENDMAIL qx(bk rset -r'$cset' -ah | bk gnupatch -h -dup -T);
+
+ close_or_warn(SENDMAIL, "$sendmail -t")
+ or return undef;
+
+ return 1;
+}
+
+
+1;
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b702810f2c3..341f8d08df2 100755
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -13,6 +13,8 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+CMAKE_MINIMUM_REQUIRED(VERSION 2.4.7 FATAL_ERROR)
+
PROJECT(MySql)
# This reads user configuration, generated by configure.js.
@@ -135,6 +137,15 @@ IF(CMAKE_GENERATOR MATCHES "Visual Studio 7" OR
STRING(REPLACE "/EHsc" "" CMAKE_CXX_FLAGS_INIT ${CMAKE_CXX_FLAGS_INIT})
STRING(REPLACE "/EHsc" "" CMAKE_CXX_FLAGS_DEBUG_INIT ${CMAKE_CXX_FLAGS_DEBUG_INIT})
+ # Disable automatic manifest generation.
+ STRING(REPLACE "/MANIFEST" "/MANIFEST:NO" CMAKE_EXE_LINKER_FLAGS
+ ${CMAKE_EXE_LINKER_FLAGS})
+ # Explicitly disable it since it is the default for newer versions of VS
+ STRING(REGEX MATCH "MANIFEST:NO" tmp_manifest ${CMAKE_EXE_LINKER_FLAGS})
+ IF(NOT tmp_manifest)
+ SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /MANIFEST:NO")
+ ENDIF(NOT tmp_manifest)
+
ENDIF(CMAKE_GENERATOR MATCHES "Visual Studio 7" OR
CMAKE_GENERATOR MATCHES "Visual Studio 8")
@@ -184,14 +195,6 @@ IF(EMBED_MANIFESTS)
MESSAGE(FATAL_ERROR "Sign tool, signtool.exe, can't be found.")
ENDIF(HAVE_SIGN_TOOL)
- # Disable automatic manifest generation.
- STRING(REPLACE "/MANIFEST" "/MANIFEST:NO" CMAKE_EXE_LINKER_FLAGS
- ${CMAKE_EXE_LINKER_FLAGS})
- # Explicitly disable it since it is the default for newer versions of VS
- STRING(REGEX MATCH "MANIFEST:NO" tmp_manifest ${CMAKE_EXE_LINKER_FLAGS})
- IF(NOT tmp_manifest)
- SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /MANIFEST:NO")
- ENDIF(NOT tmp_manifest)
# Set the processor architecture.
IF(CMAKE_GENERATOR MATCHES "Visual Studio 8 2005 Win64")
SET(PROCESSOR_ARCH "amd64")
diff --git a/Docs/INSTALL-BINARY b/Docs/INSTALL-BINARY
new file mode 100644
index 00000000000..d1c409acd67
--- /dev/null
+++ b/Docs/INSTALL-BINARY
@@ -0,0 +1,8 @@
+
+You can find information about how to install binary distributions at
+
+ http://dev.mysql.com/doc/refman/5.1/en/quick-standard-installation.html
+
+The MySQL Reference Manual is also available in various formats on
+http://dev.mysql.com/doc; if you're interested in the DocBook XML
+sources go to http://svn.mysql.com.
diff --git a/Docs/Makefile.am b/Docs/Makefile.am
index e57a1abcb0c..629618609a3 100644
--- a/Docs/Makefile.am
+++ b/Docs/Makefile.am
@@ -13,14 +13,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-noinst_SCRIPTS = generate-text-files.pl
-
-EXTRA_DIST = $(noinst_SCRIPTS) manual.chm mysql.info INSTALL-BINARY
-
-TXT_FILES= ../INSTALL-SOURCE ../INSTALL-WIN-SOURCE \
- INSTALL-BINARY ../support-files/MacOSX/ReadMe.txt
-
-all-local: $(TXT_FILES)
+EXTRA_DIST = mysql.info INSTALL-BINARY @extra_docs@
# make sure that "make install" installs the info page, too
# automake only seems to take care of this automatically,
@@ -32,38 +25,5 @@ install-data-hook: $(srcdir)/mysql.info
uninstall-local:
@RM@ -f $(DESTDIR)$(infodir)/mysql.info
-# Problems with "make distclean", works differently for make files
-# generated by different versions of the automake. Some require the
-# generated files explicitly in DISTCLEANFILES.
-DISTCLEANFILES = $(TXT_FILES)
-
-# This target is not used in builds, just for convinience
-CLEAN_FILES: $(TXT_FILES)
- touch $(TXT_FILES)
-
-GT = $(srcdir)/generate-text-files.pl
-
-../INSTALL-SOURCE: $(srcdir)/mysql.info $(GT)
- perl -w $(GT) $(srcdir)/mysql.info "installing-source" "windows-source-build" > $@
-
-../INSTALL-WIN-SOURCE: $(srcdir)/mysql.info $(GT)
- perl -w $(GT) $(srcdir)/mysql.info "windows-source-build" "post-installation" > $@
-
-# We put the description for the binary installation here so that
-# people who download source wont have to see it. It is moved up to
-# the toplevel by the script that makes the binary tar files.
-INSTALL-BINARY: $(srcdir)/mysql.info $(GT)
- perl -w $(GT) $(srcdir)/mysql.info "installing-binary" "installing-source" > $@
-
-../support-files/MacOSX/ReadMe.txt: $(srcdir)/mysql.info $(GT)
- perl -w $(GT) $(srcdir)/mysql.info "mac-os-x-installation" "netware-installation" > $@
-
-# Include the Windows manual.chm in source .tar.gz only if available.
-# It is not in BitKeeper, but is downloaded from intranet by Bootstrap.
-dist-hook:
- if [ -e $(srcdir)/manual.chm ] ; then \
- cp -f $(srcdir)/manual.chm $(distdir); \
- fi
-
# Don't update the files from bitkeeper
%::SCCS/s.%
diff --git a/Docs/generate-text-files.pl b/Docs/generate-text-files.pl
deleted file mode 100755
index 69e0478eb8a..00000000000
--- a/Docs/generate-text-files.pl
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/usr/bin/perl -w -*- perl -*-
-# Copyright (C) 2000, 2003, 2005 MySQL AB
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; version 2 of the License.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-# Generate text files from top directory from the manual.
-
-$from = shift(@ARGV);
-$fnode = shift(@ARGV);
-$tnode = shift(@ARGV);
-
-open(IN, "$from") || die "Cannot open $from: $!";
-
-$in = 0;
-
-while (<IN>)
-{
- if ($in)
- {
- if (/Node: $tnode,/ || /\[index/)
- {
- $in = 0;
- }
- elsif (/^File: mysql.info/ || (/^/))
- {
- # Just Skip node beginnings
- }
- else
- {
- print;
- }
- }
- else
- {
- if (/Node: $fnode,/)
- {
- $in = 1;
- # Skip first empty line
- <IN>;
- }
- }
-}
-
-close(IN);
-
-die "Could not find node \"$tnode\"" if ($in == 1);
-exit 0;
diff --git a/Docs/manual.chm b/Docs/manual.chm
deleted file mode 100644
index 28c3e1b5a86..00000000000
--- a/Docs/manual.chm
+++ /dev/null
@@ -1,14 +0,0 @@
-
-*********************************************************
-
-This is a dummy placeholder file for "manual.chm" in the
-MySQL source trees.
-
-Note, that the documentation has been moved into a separate
-BitKeeper source tree named "mysqldoc" - do not attempt to edit this
-file! All changes to it should be done in the mysqldoc tree.
-
-This dummy file is being replaced with the actual file from the
-mysqldoc tree when building the official source distribution.
-
-*********************************************************
diff --git a/Docs/mysql.info b/Docs/mysql.info
index 5846d7aadf6..b2c411e51ab 100644
--- a/Docs/mysql.info
+++ b/Docs/mysql.info
@@ -1,27 +1,4 @@
-This is mysql.info, produced by makeinfo version 4.8 from manual.texi.
-START-INFO-DIR-ENTRY
-* mysql: (mysql). MySQL documentation.
-END-INFO-DIR-ENTRY
-
-
-File: mysql.info, Node: Top, Next: (dir), Prev: (dir), Up: (dir)
-
-This is an empty placeholder file for the MySQL manual.
-
-The MySQL manual is now maintained in a separate BitKeeper source tree!
-Please see `http://www.mysql.com/doc/en/Installing_source_tree.html'
-for more info on how to work with BitKeeper.
-
-This file will be replaced with the current `mysql.info' when building
-the official source distribution.
-
-You can find a specific manual for any older version of MySQL in the
-binary or source distribution for that version.
-
-
-
-Tag Table:
-Node: Top166
-
-End Tag Table
+The MySQL Reference Manual is available in various formats on
+http://dev.mysql.com/doc; if you're interested in the DocBook XML
+sources go to http://svn.mysql.com.
diff --git a/INSTALL-SOURCE b/INSTALL-SOURCE
new file mode 100644
index 00000000000..3a5dd22fa38
--- /dev/null
+++ b/INSTALL-SOURCE
@@ -0,0 +1,8 @@
+
+You can find information about how to install from a source distributions at
+
+ http://dev.mysql.com/doc/refman/5.1/en/installing-source.html
+
+The MySQL Reference Manual is also available in various formats on
+http://dev.mysql.com/doc; if you're interested in the DocBook XML
+sources go to http://svn.mysql.com.
diff --git a/INSTALL-WIN-SOURCE b/INSTALL-WIN-SOURCE
new file mode 100644
index 00000000000..9484513c431
--- /dev/null
+++ b/INSTALL-WIN-SOURCE
@@ -0,0 +1,9 @@
+
+You can find information about how to install from a Windows source
+distributions at
+
+ http://dev.mysql.com/doc/refman/5.1/en/windows-source-build.html
+
+The MySQL Reference Manual is also available in various formats on
+http://dev.mysql.com/doc; if you're interested in the DocBook XML
+sources go to http://svn.mysql.com.
diff --git a/Makefile.am b/Makefile.am
index c968c50f6bc..ad94c9ea325 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -53,8 +53,8 @@ bin-dist: all
dist-hook:
rm -rf `find $(distdir) -type d -name SCCS -print`
mkdir -p $(distdir)/win
- scripts/mysql_install_db --no-defaults --windows \
- --basedir=$(top_builddir) \
+ scripts/mysql_install_db --no-defaults --cross-bootstrap \
+ --builddir=$(top_builddir) \
--datadir=$(distdir)/win/data \
--srcdir=$(top_srcdir)
@@ -66,7 +66,7 @@ tags:
test-pl test-force-pl test-full-pl test-force-full-pl test-force-pl-mem \
test-unit test-ps test-nr test-pr test-ns test-binlog-statement \
test-ext-funcs test-ext-rpl test-ext-partitions test-ext-jp \
- test-ext-stress test-ext \
+ test-ext-stress test-ext test-embedded \
test-fast test-fast-cursor test-fast-view test-fast-prepare \
test-full-qa
@@ -83,23 +83,33 @@ test-unit:
test-ps:
cd mysql-test ; \
- @PERL@ ./mysql-test-run.pl $(force) --ps-protocol --mysqld=--binlog-format=mixed
+ @PERL@ ./mysql-test-run.pl $(force) --ps-protocol --mysqld=--binlog-format=mixed
test-nr:
cd mysql-test ; \
- @PERL@ ./mysql-test-run.pl $(force) --mysqld=--binlog-format=row
+ @PERL@ ./mysql-test-run.pl $(force) --mysqld=--binlog-format=row
test-pr:
cd mysql-test ; \
- @PERL@ ./mysql-test-run.pl $(force) $(mem) --ps-protocol --mysqld=--binlog-format=row
+ @PERL@ ./mysql-test-run.pl $(force) $(mem) --ps-protocol --mysqld=--binlog-format=row
test-ns:
cd mysql-test ; \
- @PERL@ ./mysql-test-run.pl $(force) $(mem) --mysqld=--binlog-format=mixed
+ @PERL@ ./mysql-test-run.pl $(force) $(mem) --mysqld=--binlog-format=mixed
test-binlog-statement:
cd mysql-test ; \
- @PERL@ ./mysql-test-run.pl $(force) --mysqld=--binlog-format=statement
+ @PERL@ ./mysql-test-run.pl $(force) --mysqld=--binlog-format=statement
+
+# This code is duplicated in "test-bt", see the Changeset comment of 2007-Dec-07
+test-embedded:
+ if [ -e bin/mysqltest_embedded -o -e libmysqld/examples/mysqltest_embedded ] ; then \
+ cd mysql-test ; MTR_BUILD_THREAD=auto \
+ @PERL@ ./mysql-test-run.pl --comment=embedded --force --timer \
+ --embedded-server --skip-rpl --skip-ndbcluster ; \
+ else \
+ echo "no program found for 'embedded' tests - skipped testing" ; \
+ fi
test: test-unit test-ns test-pr
@@ -117,52 +127,54 @@ test-force-mem:
test-bt:
-cd mysql-test ; MTR_BUILD_THREAD=auto \
- @PERL@ ./mysql-test-run.pl --comment=normal --force --timer \
- --skip-ndbcluster --report-features
+ @PERL@ ./mysql-test-run.pl --comment=normal --force --timer \
+ --skip-ndbcluster --report-features
-cd mysql-test ; MTR_BUILD_THREAD=auto \
- @PERL@ ./mysql-test-run.pl --comment=ps --force --timer \
- --skip-ndbcluster --ps-protocol
+ @PERL@ ./mysql-test-run.pl --comment=ps --force --timer \
+ --skip-ndbcluster --ps-protocol
-cd mysql-test ; MTR_BUILD_THREAD=auto \
- @PERL@ ./mysql-test-run.pl --comment=normal+rowrepl --force --timer \
- --skip-ndbcluster --mysqld=--binlog-format=row
+ @PERL@ ./mysql-test-run.pl --comment=normal+rowrepl --force --timer \
+ --skip-ndbcluster --mysqld=--binlog-format=row
-cd mysql-test ; MTR_BUILD_THREAD=auto \
- @PERL@ ./mysql-test-run.pl --comment=ps+rowrepl+NDB --force --timer \
- --ps-protocol --mysqld=--binlog-format=row
+ @PERL@ ./mysql-test-run.pl --comment=ps+rowrepl+NDB --force --timer \
+ --ps-protocol --mysqld=--binlog-format=row
-cd mysql-test ; MTR_BUILD_THREAD=auto \
- @PERL@ ./mysql-test-run.pl --comment=NDB --force --timer \
- --with-ndbcluster-only
+ @PERL@ ./mysql-test-run.pl --comment=NDB --force --timer \
+ --with-ndbcluster-only
-if [ -e bin/mysqltest_embedded -o -e libmysqld/examples/mysqltest_embedded ] ; then \
cd mysql-test ; MTR_BUILD_THREAD=auto \
- @PERL@ ./mysql-test-run.pl --comment=embedded --force --timer \
- --embedded-server --skip-rpl --skip-ndbcluster ; \
+ @PERL@ ./mysql-test-run.pl --comment=embedded --force --timer \
+ --embedded-server --skip-rpl --skip-ndbcluster ; \
+ else \
+ echo "no program found for 'embedded' tests - skipped testing" ; \
fi
-cd mysql-test ; MTR_BUILD_THREAD=auto \
- @PERL@ ./mysql-test-run.pl --force --comment=funcs1_ps --ps-protocol --suite=funcs_1
+ @PERL@ ./mysql-test-run.pl --force --comment=funcs1_ps --ps-protocol --suite=funcs_1
-cd mysql-test ; MTR_BUILD_THREAD=auto \
- @PERL@ ./mysql-test-run.pl --force --comment=funcs2 --suite=funcs_2
+ @PERL@ ./mysql-test-run.pl --force --comment=funcs2 --suite=funcs_2
-cd mysql-test ; MTR_BUILD_THREAD=auto \
- @PERL@ ./mysql-test-run.pl --force --comment=rpl --suite=rpl
+ @PERL@ ./mysql-test-run.pl --force --comment=rpl --suite=rpl
-cd mysql-test ; MTR_BUILD_THREAD=auto \
- @PERL@ ./mysql-test-run.pl --force --comment=partitions --suite=parts
+ @PERL@ ./mysql-test-run.pl --force --comment=partitions --suite=parts
-if [ -d mysql-test/suite/nist ] ; then \
cd mysql-test ; MTR_BUILD_THREAD=auto \
- @PERL@ ./mysql-test-run.pl --comment=NIST+normal --force --suite=nist ; \
+ @PERL@ ./mysql-test-run.pl --comment=NIST+normal --force --suite=nist ; \
fi
-if [ -d mysql-test/suite/nist ] ; then \
cd mysql-test ; MTR_BUILD_THREAD=auto \
- @PERL@ ./mysql-test-run.pl --comment=NIST+ps --force --suite=nist --ps-protocol ; \
+ @PERL@ ./mysql-test-run.pl --comment=NIST+ps --force --suite=nist --ps-protocol ; \
fi
-cd mysql-test ; MTR_BUILD_THREAD=auto \
- @PERL@ ./mysql-test-run.pl --force --comment=stress --suite=stress
+ @PERL@ ./mysql-test-run.pl --force --comment=stress --suite=stress
# Re-enable the "jp" suite when bug#28563 is fixed
# -cd mysql-test ; MTR_BUILD_THREAD=auto \
-# @PERL@ ./mysql-test-run.pl --force --comment=jp --suite=jp
+# @PERL@ ./mysql-test-run.pl --force --comment=jp --suite=jp
test-bt-debug:
-cd mysql-test ; MTR_BUILD_THREAD=auto \
- @PERL@ ./mysql-test-run.pl --comment=debug --force --timer \
- --skip-ndbcluster --skip-rpl --report-features
+ @PERL@ ./mysql-test-run.pl --comment=debug --force --timer \
+ --skip-ndbcluster --skip-rpl --report-features
# Keep these for a while
test-pl: test
@@ -173,32 +185,32 @@ test-force-full-pl: test-force-full
test-ext-funcs:
cd mysql-test ; \
- @PERL@ ./mysql-test-run.pl --force --suite=funcs_1 ; \
- @PERL@ ./mysql-test-run.pl --force --suite=funcs_2
+ @PERL@ ./mysql-test-run.pl --force --suite=funcs_1 ; \
+ @PERL@ ./mysql-test-run.pl --force --suite=funcs_2
test-ext-rpl:
cd mysql-test ; \
- @PERL@ ./mysql-test-run.pl --force --suite=rpl
+ @PERL@ ./mysql-test-run.pl --force --suite=rpl
test-ext-partitions:
cd mysql-test ; \
- @PERL@ ./mysql-test-run.pl --force --suite=parts
+ @PERL@ ./mysql-test-run.pl --force --suite=parts
test-ext-jp:
cd mysql-test ; \
- @PERL@ ./mysql-test-run.pl --force --suite=jp
+ @PERL@ ./mysql-test-run.pl --force --suite=jp
test-ext-stress:
cd mysql-test ; \
- @PERL@ ./mysql-test-run.pl --force --big-test --suite=stress
+ @PERL@ ./mysql-test-run.pl --force --big-test --suite=stress
test-ext: test-ext-funcs test-ext-rpl test-ext-partitions test-ext-jp test-ext-stress
test-fast:
cd mysql-test ; \
- @PERL@ ./mysql-test-run.pl $(subset) --force --skip-ndb --skip-innodb --skip-im --skip-rpl ; \
- @PERL@ ./mysql-test-run.pl $(subset) --force --suite=funcs_1 --do-test=myisam ; \
- @PERL@ ./mysql-test-run.pl $(subset) --force --suite=stress --do-test=ddl_myisam
+ @PERL@ ./mysql-test-run.pl $(subset) --force --skip-ndb --skip-innodb --skip-im --skip-rpl ; \
+ @PERL@ ./mysql-test-run.pl $(subset) --force --suite=funcs_1 --do-test=myisam ; \
+ @PERL@ ./mysql-test-run.pl $(subset) --force --suite=stress --do-test=ddl_myisam
test-fast-view:
$(MAKE) subset=--view-protocol test-fast
@@ -211,8 +223,8 @@ test-fast-prepare:
test-full-qa:
$(MAKE) force=--force test-pr \
- test-binlog-statement test-ext test-fast-view \
- test-fast-cursor test-unit
+ test-binlog-statement test-ext test-fast-view \
+ test-fast-cursor test-unit
# Don't update the files from bitkeeper
%::SCCS/s.%
diff --git a/client/client_priv.h b/client/client_priv.h
index a2f61b9e9ca..06145232995 100644
--- a/client/client_priv.h
+++ b/client/client_priv.h
@@ -60,7 +60,6 @@ enum options_client
OPT_USE_THREADS,
OPT_IMPORT_USE_THREADS,
OPT_MYSQL_NUMBER_OF_QUERY,
- OPT_MYSQL_PRESERVE_SCHEMA,
OPT_IGNORE_TABLE,OPT_INSERT_IGNORE,OPT_SHOW_WARNINGS,OPT_DROP_DATABASE,
OPT_TZ_UTC, OPT_AUTO_CLOSE, OPT_CREATE_SLAP_SCHEMA,
OPT_SLAP_CSV, OPT_SLAP_CREATE_STRING,
@@ -77,8 +76,9 @@ enum options_client
OPT_SLAP_POST_SYSTEM,
OPT_SLAP_COMMIT,
OPT_SLAP_DETACH,
- OPT_MYSQL_REPLACE_INTO, OPT_BASE64_OUTPUT, OPT_SERVER_ID,
+ OPT_MYSQL_REPLACE_INTO, OPT_BASE64_OUTPUT_MODE, OPT_SERVER_ID,
OPT_FIX_TABLE_NAMES, OPT_FIX_DB_NAMES, OPT_SSL_VERIFY_SERVER_CERT,
OPT_DEBUG_INFO, OPT_DEBUG_CHECK, OPT_COLUMN_TYPES, OPT_ERROR_LOG_FILE,
- OPT_WRITE_BINLOG, OPT_MAX_CLIENT_OPTION
+ OPT_WRITE_BINLOG, OPT_DUMP_DATE,
+ OPT_MAX_CLIENT_OPTION
};
diff --git a/client/mysql.cc b/client/mysql.cc
index 1dd33593b83..8500927bd53 100644
--- a/client/mysql.cc
+++ b/client/mysql.cc
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000-2003 MySQL AB
+/* Copyright (C) 2000-2008 MySQL AB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -144,6 +144,7 @@ static my_bool ignore_errors=0,wait_flag=0,quick=0,
show_warnings= 0, executing_query= 0, interrupted_query= 0;
static my_bool debug_info_flag, debug_check_flag;
static my_bool column_types_flag;
+static my_bool preserve_comments= 0;
static ulong opt_max_allowed_packet, opt_net_buffer_length;
static uint verbose=0,opt_silent=0,opt_mysql_port=0, opt_local_infile=0;
static uint my_end_arg;
@@ -289,13 +290,6 @@ static COMMANDS commands[] = {
/* Get bash-like expansion for some commands */
{ "create table", 0, 0, 0, ""},
{ "create database", 0, 0, 0, ""},
- { "drop", 0, 0, 0, ""},
- { "select", 0, 0, 0, ""},
- { "insert", 0, 0, 0, ""},
- { "replace", 0, 0, 0, ""},
- { "update", 0, 0, 0, ""},
- { "delete", 0, 0, 0, ""},
- { "explain", 0, 0, 0, ""},
{ "show databases", 0, 0, 0, ""},
{ "show fields from", 0, 0, 0, ""},
{ "show keys from", 0, 0, 0, ""},
@@ -305,6 +299,718 @@ static COMMANDS commands[] = {
{ "set option", 0, 0, 0, ""},
{ "lock tables", 0, 0, 0, ""},
{ "unlock tables", 0, 0, 0, ""},
+ /* generated 2006-12-28. Refresh occasionally from lexer. */
+ { "ACTION", 0, 0, 0, ""},
+ { "ADD", 0, 0, 0, ""},
+ { "AFTER", 0, 0, 0, ""},
+ { "AGAINST", 0, 0, 0, ""},
+ { "AGGREGATE", 0, 0, 0, ""},
+ { "ALL", 0, 0, 0, ""},
+ { "ALGORITHM", 0, 0, 0, ""},
+ { "ALTER", 0, 0, 0, ""},
+ { "ANALYZE", 0, 0, 0, ""},
+ { "AND", 0, 0, 0, ""},
+ { "ANY", 0, 0, 0, ""},
+ { "AS", 0, 0, 0, ""},
+ { "ASC", 0, 0, 0, ""},
+ { "ASCII", 0, 0, 0, ""},
+ { "ASENSITIVE", 0, 0, 0, ""},
+ { "AUTO_INCREMENT", 0, 0, 0, ""},
+ { "AVG", 0, 0, 0, ""},
+ { "AVG_ROW_LENGTH", 0, 0, 0, ""},
+ { "BACKUP", 0, 0, 0, ""},
+ { "BDB", 0, 0, 0, ""},
+ { "BEFORE", 0, 0, 0, ""},
+ { "BEGIN", 0, 0, 0, ""},
+ { "BERKELEYDB", 0, 0, 0, ""},
+ { "BETWEEN", 0, 0, 0, ""},
+ { "BIGINT", 0, 0, 0, ""},
+ { "BINARY", 0, 0, 0, ""},
+ { "BINLOG", 0, 0, 0, ""},
+ { "BIT", 0, 0, 0, ""},
+ { "BLOB", 0, 0, 0, ""},
+ { "BOOL", 0, 0, 0, ""},
+ { "BOOLEAN", 0, 0, 0, ""},
+ { "BOTH", 0, 0, 0, ""},
+ { "BTREE", 0, 0, 0, ""},
+ { "BY", 0, 0, 0, ""},
+ { "BYTE", 0, 0, 0, ""},
+ { "CACHE", 0, 0, 0, ""},
+ { "CALL", 0, 0, 0, ""},
+ { "CASCADE", 0, 0, 0, ""},
+ { "CASCADED", 0, 0, 0, ""},
+ { "CASE", 0, 0, 0, ""},
+ { "CHAIN", 0, 0, 0, ""},
+ { "CHANGE", 0, 0, 0, ""},
+ { "CHANGED", 0, 0, 0, ""},
+ { "CHAR", 0, 0, 0, ""},
+ { "CHARACTER", 0, 0, 0, ""},
+ { "CHARSET", 0, 0, 0, ""},
+ { "CHECK", 0, 0, 0, ""},
+ { "CHECKSUM", 0, 0, 0, ""},
+ { "CIPHER", 0, 0, 0, ""},
+ { "CLIENT", 0, 0, 0, ""},
+ { "CLOSE", 0, 0, 0, ""},
+ { "CODE", 0, 0, 0, ""},
+ { "COLLATE", 0, 0, 0, ""},
+ { "COLLATION", 0, 0, 0, ""},
+ { "COLUMN", 0, 0, 0, ""},
+ { "COLUMNS", 0, 0, 0, ""},
+ { "COMMENT", 0, 0, 0, ""},
+ { "COMMIT", 0, 0, 0, ""},
+ { "COMMITTED", 0, 0, 0, ""},
+ { "COMPACT", 0, 0, 0, ""},
+ { "COMPRESSED", 0, 0, 0, ""},
+ { "CONCURRENT", 0, 0, 0, ""},
+ { "CONDITION", 0, 0, 0, ""},
+ { "CONNECTION", 0, 0, 0, ""},
+ { "CONSISTENT", 0, 0, 0, ""},
+ { "CONSTRAINT", 0, 0, 0, ""},
+ { "CONTAINS", 0, 0, 0, ""},
+ { "CONTINUE", 0, 0, 0, ""},
+ { "CONVERT", 0, 0, 0, ""},
+ { "CREATE", 0, 0, 0, ""},
+ { "CROSS", 0, 0, 0, ""},
+ { "CUBE", 0, 0, 0, ""},
+ { "CURRENT_DATE", 0, 0, 0, ""},
+ { "CURRENT_TIME", 0, 0, 0, ""},
+ { "CURRENT_TIMESTAMP", 0, 0, 0, ""},
+ { "CURRENT_USER", 0, 0, 0, ""},
+ { "CURSOR", 0, 0, 0, ""},
+ { "DATA", 0, 0, 0, ""},
+ { "DATABASE", 0, 0, 0, ""},
+ { "DATABASES", 0, 0, 0, ""},
+ { "DATE", 0, 0, 0, ""},
+ { "DATETIME", 0, 0, 0, ""},
+ { "DAY", 0, 0, 0, ""},
+ { "DAY_HOUR", 0, 0, 0, ""},
+ { "DAY_MICROSECOND", 0, 0, 0, ""},
+ { "DAY_MINUTE", 0, 0, 0, ""},
+ { "DAY_SECOND", 0, 0, 0, ""},
+ { "DEALLOCATE", 0, 0, 0, ""},
+ { "DEC", 0, 0, 0, ""},
+ { "DECIMAL", 0, 0, 0, ""},
+ { "DECLARE", 0, 0, 0, ""},
+ { "DEFAULT", 0, 0, 0, ""},
+ { "DEFINER", 0, 0, 0, ""},
+ { "DELAYED", 0, 0, 0, ""},
+ { "DELAY_KEY_WRITE", 0, 0, 0, ""},
+ { "DELETE", 0, 0, 0, ""},
+ { "DESC", 0, 0, 0, ""},
+ { "DESCRIBE", 0, 0, 0, ""},
+ { "DES_KEY_FILE", 0, 0, 0, ""},
+ { "DETERMINISTIC", 0, 0, 0, ""},
+ { "DIRECTORY", 0, 0, 0, ""},
+ { "DISABLE", 0, 0, 0, ""},
+ { "DISCARD", 0, 0, 0, ""},
+ { "DISTINCT", 0, 0, 0, ""},
+ { "DISTINCTROW", 0, 0, 0, ""},
+ { "DIV", 0, 0, 0, ""},
+ { "DO", 0, 0, 0, ""},
+ { "DOUBLE", 0, 0, 0, ""},
+ { "DROP", 0, 0, 0, ""},
+ { "DUAL", 0, 0, 0, ""},
+ { "DUMPFILE", 0, 0, 0, ""},
+ { "DUPLICATE", 0, 0, 0, ""},
+ { "DYNAMIC", 0, 0, 0, ""},
+ { "EACH", 0, 0, 0, ""},
+ { "ELSE", 0, 0, 0, ""},
+ { "ELSEIF", 0, 0, 0, ""},
+ { "ENABLE", 0, 0, 0, ""},
+ { "ENCLOSED", 0, 0, 0, ""},
+ { "END", 0, 0, 0, ""},
+ { "ENGINE", 0, 0, 0, ""},
+ { "ENGINES", 0, 0, 0, ""},
+ { "ENUM", 0, 0, 0, ""},
+ { "ERRORS", 0, 0, 0, ""},
+ { "ESCAPE", 0, 0, 0, ""},
+ { "ESCAPED", 0, 0, 0, ""},
+ { "EVENTS", 0, 0, 0, ""},
+ { "EXECUTE", 0, 0, 0, ""},
+ { "EXISTS", 0, 0, 0, ""},
+ { "EXIT", 0, 0, 0, ""},
+ { "EXPANSION", 0, 0, 0, ""},
+ { "EXPLAIN", 0, 0, 0, ""},
+ { "EXTENDED", 0, 0, 0, ""},
+ { "FALSE", 0, 0, 0, ""},
+ { "FAST", 0, 0, 0, ""},
+ { "FETCH", 0, 0, 0, ""},
+ { "FIELDS", 0, 0, 0, ""},
+ { "FILE", 0, 0, 0, ""},
+ { "FIRST", 0, 0, 0, ""},
+ { "FIXED", 0, 0, 0, ""},
+ { "FLOAT", 0, 0, 0, ""},
+ { "FLOAT4", 0, 0, 0, ""},
+ { "FLOAT8", 0, 0, 0, ""},
+ { "FLUSH", 0, 0, 0, ""},
+ { "FOR", 0, 0, 0, ""},
+ { "FORCE", 0, 0, 0, ""},
+ { "FOREIGN", 0, 0, 0, ""},
+ { "FOUND", 0, 0, 0, ""},
+ { "FRAC_SECOND", 0, 0, 0, ""},
+ { "FROM", 0, 0, 0, ""},
+ { "FULL", 0, 0, 0, ""},
+ { "FULLTEXT", 0, 0, 0, ""},
+ { "FUNCTION", 0, 0, 0, ""},
+ { "GEOMETRY", 0, 0, 0, ""},
+ { "GEOMETRYCOLLECTION", 0, 0, 0, ""},
+ { "GET_FORMAT", 0, 0, 0, ""},
+ { "GLOBAL", 0, 0, 0, ""},
+ { "GRANT", 0, 0, 0, ""},
+ { "GRANTS", 0, 0, 0, ""},
+ { "GROUP", 0, 0, 0, ""},
+ { "HANDLER", 0, 0, 0, ""},
+ { "HASH", 0, 0, 0, ""},
+ { "HAVING", 0, 0, 0, ""},
+ { "HELP", 0, 0, 0, ""},
+ { "HIGH_PRIORITY", 0, 0, 0, ""},
+ { "HOSTS", 0, 0, 0, ""},
+ { "HOUR", 0, 0, 0, ""},
+ { "HOUR_MICROSECOND", 0, 0, 0, ""},
+ { "HOUR_MINUTE", 0, 0, 0, ""},
+ { "HOUR_SECOND", 0, 0, 0, ""},
+ { "IDENTIFIED", 0, 0, 0, ""},
+ { "IF", 0, 0, 0, ""},
+ { "IGNORE", 0, 0, 0, ""},
+ { "IMPORT", 0, 0, 0, ""},
+ { "IN", 0, 0, 0, ""},
+ { "INDEX", 0, 0, 0, ""},
+ { "INDEXES", 0, 0, 0, ""},
+ { "INFILE", 0, 0, 0, ""},
+ { "INNER", 0, 0, 0, ""},
+ { "INNOBASE", 0, 0, 0, ""},
+ { "INNODB", 0, 0, 0, ""},
+ { "INOUT", 0, 0, 0, ""},
+ { "INSENSITIVE", 0, 0, 0, ""},
+ { "INSERT", 0, 0, 0, ""},
+ { "INSERT_METHOD", 0, 0, 0, ""},
+ { "INT", 0, 0, 0, ""},
+ { "INT1", 0, 0, 0, ""},
+ { "INT2", 0, 0, 0, ""},
+ { "INT3", 0, 0, 0, ""},
+ { "INT4", 0, 0, 0, ""},
+ { "INT8", 0, 0, 0, ""},
+ { "INTEGER", 0, 0, 0, ""},
+ { "INTERVAL", 0, 0, 0, ""},
+ { "INTO", 0, 0, 0, ""},
+ { "IO_THREAD", 0, 0, 0, ""},
+ { "IS", 0, 0, 0, ""},
+ { "ISOLATION", 0, 0, 0, ""},
+ { "ISSUER", 0, 0, 0, ""},
+ { "ITERATE", 0, 0, 0, ""},
+ { "INVOKER", 0, 0, 0, ""},
+ { "JOIN", 0, 0, 0, ""},
+ { "KEY", 0, 0, 0, ""},
+ { "KEYS", 0, 0, 0, ""},
+ { "KILL", 0, 0, 0, ""},
+ { "LANGUAGE", 0, 0, 0, ""},
+ { "LAST", 0, 0, 0, ""},
+ { "LEADING", 0, 0, 0, ""},
+ { "LEAVE", 0, 0, 0, ""},
+ { "LEAVES", 0, 0, 0, ""},
+ { "LEFT", 0, 0, 0, ""},
+ { "LEVEL", 0, 0, 0, ""},
+ { "LIKE", 0, 0, 0, ""},
+ { "LIMIT", 0, 0, 0, ""},
+ { "LINES", 0, 0, 0, ""},
+ { "LINESTRING", 0, 0, 0, ""},
+ { "LOAD", 0, 0, 0, ""},
+ { "LOCAL", 0, 0, 0, ""},
+ { "LOCALTIME", 0, 0, 0, ""},
+ { "LOCALTIMESTAMP", 0, 0, 0, ""},
+ { "LOCK", 0, 0, 0, ""},
+ { "LOCKS", 0, 0, 0, ""},
+ { "LOGS", 0, 0, 0, ""},
+ { "LONG", 0, 0, 0, ""},
+ { "LONGBLOB", 0, 0, 0, ""},
+ { "LONGTEXT", 0, 0, 0, ""},
+ { "LOOP", 0, 0, 0, ""},
+ { "LOW_PRIORITY", 0, 0, 0, ""},
+ { "MASTER", 0, 0, 0, ""},
+ { "MASTER_CONNECT_RETRY", 0, 0, 0, ""},
+ { "MASTER_HOST", 0, 0, 0, ""},
+ { "MASTER_LOG_FILE", 0, 0, 0, ""},
+ { "MASTER_LOG_POS", 0, 0, 0, ""},
+ { "MASTER_PASSWORD", 0, 0, 0, ""},
+ { "MASTER_PORT", 0, 0, 0, ""},
+ { "MASTER_SERVER_ID", 0, 0, 0, ""},
+ { "MASTER_SSL", 0, 0, 0, ""},
+ { "MASTER_SSL_CA", 0, 0, 0, ""},
+ { "MASTER_SSL_CAPATH", 0, 0, 0, ""},
+ { "MASTER_SSL_CERT", 0, 0, 0, ""},
+ { "MASTER_SSL_CIPHER", 0, 0, 0, ""},
+ { "MASTER_SSL_KEY", 0, 0, 0, ""},
+ { "MASTER_USER", 0, 0, 0, ""},
+ { "MATCH", 0, 0, 0, ""},
+ { "MAX_CONNECTIONS_PER_HOUR", 0, 0, 0, ""},
+ { "MAX_QUERIES_PER_HOUR", 0, 0, 0, ""},
+ { "MAX_ROWS", 0, 0, 0, ""},
+ { "MAX_UPDATES_PER_HOUR", 0, 0, 0, ""},
+ { "MAX_USER_CONNECTIONS", 0, 0, 0, ""},
+ { "MEDIUM", 0, 0, 0, ""},
+ { "MEDIUMBLOB", 0, 0, 0, ""},
+ { "MEDIUMINT", 0, 0, 0, ""},
+ { "MEDIUMTEXT", 0, 0, 0, ""},
+ { "MERGE", 0, 0, 0, ""},
+ { "MICROSECOND", 0, 0, 0, ""},
+ { "MIDDLEINT", 0, 0, 0, ""},
+ { "MIGRATE", 0, 0, 0, ""},
+ { "MINUTE", 0, 0, 0, ""},
+ { "MINUTE_MICROSECOND", 0, 0, 0, ""},
+ { "MINUTE_SECOND", 0, 0, 0, ""},
+ { "MIN_ROWS", 0, 0, 0, ""},
+ { "MOD", 0, 0, 0, ""},
+ { "MODE", 0, 0, 0, ""},
+ { "MODIFIES", 0, 0, 0, ""},
+ { "MODIFY", 0, 0, 0, ""},
+ { "MONTH", 0, 0, 0, ""},
+ { "MULTILINESTRING", 0, 0, 0, ""},
+ { "MULTIPOINT", 0, 0, 0, ""},
+ { "MULTIPOLYGON", 0, 0, 0, ""},
+ { "MUTEX", 0, 0, 0, ""},
+ { "NAME", 0, 0, 0, ""},
+ { "NAMES", 0, 0, 0, ""},
+ { "NATIONAL", 0, 0, 0, ""},
+ { "NATURAL", 0, 0, 0, ""},
+ { "NDB", 0, 0, 0, ""},
+ { "NDBCLUSTER", 0, 0, 0, ""},
+ { "NCHAR", 0, 0, 0, ""},
+ { "NEW", 0, 0, 0, ""},
+ { "NEXT", 0, 0, 0, ""},
+ { "NO", 0, 0, 0, ""},
+ { "NONE", 0, 0, 0, ""},
+ { "NOT", 0, 0, 0, ""},
+ { "NO_WRITE_TO_BINLOG", 0, 0, 0, ""},
+ { "NULL", 0, 0, 0, ""},
+ { "NUMERIC", 0, 0, 0, ""},
+ { "NVARCHAR", 0, 0, 0, ""},
+ { "OFFSET", 0, 0, 0, ""},
+ { "OLD_PASSWORD", 0, 0, 0, ""},
+ { "ON", 0, 0, 0, ""},
+ { "ONE", 0, 0, 0, ""},
+ { "ONE_SHOT", 0, 0, 0, ""},
+ { "OPEN", 0, 0, 0, ""},
+ { "OPTIMIZE", 0, 0, 0, ""},
+ { "OPTION", 0, 0, 0, ""},
+ { "OPTIONALLY", 0, 0, 0, ""},
+ { "OR", 0, 0, 0, ""},
+ { "ORDER", 0, 0, 0, ""},
+ { "OUT", 0, 0, 0, ""},
+ { "OUTER", 0, 0, 0, ""},
+ { "OUTFILE", 0, 0, 0, ""},
+ { "PACK_KEYS", 0, 0, 0, ""},
+ { "PARTIAL", 0, 0, 0, ""},
+ { "PASSWORD", 0, 0, 0, ""},
+ { "PHASE", 0, 0, 0, ""},
+ { "POINT", 0, 0, 0, ""},
+ { "POLYGON", 0, 0, 0, ""},
+ { "PRECISION", 0, 0, 0, ""},
+ { "PREPARE", 0, 0, 0, ""},
+ { "PREV", 0, 0, 0, ""},
+ { "PRIMARY", 0, 0, 0, ""},
+ { "PRIVILEGES", 0, 0, 0, ""},
+ { "PROCEDURE", 0, 0, 0, ""},
+ { "PROCESS", 0, 0, 0, ""},
+ { "PROCESSLIST", 0, 0, 0, ""},
+ { "PURGE", 0, 0, 0, ""},
+ { "QUARTER", 0, 0, 0, ""},
+ { "QUERY", 0, 0, 0, ""},
+ { "QUICK", 0, 0, 0, ""},
+ { "RAID0", 0, 0, 0, ""},
+ { "RAID_CHUNKS", 0, 0, 0, ""},
+ { "RAID_CHUNKSIZE", 0, 0, 0, ""},
+ { "RAID_TYPE", 0, 0, 0, ""},
+ { "READ", 0, 0, 0, ""},
+ { "READS", 0, 0, 0, ""},
+ { "REAL", 0, 0, 0, ""},
+ { "RECOVER", 0, 0, 0, ""},
+ { "REDUNDANT", 0, 0, 0, ""},
+ { "REFERENCES", 0, 0, 0, ""},
+ { "REGEXP", 0, 0, 0, ""},
+ { "RELAY_LOG_FILE", 0, 0, 0, ""},
+ { "RELAY_LOG_POS", 0, 0, 0, ""},
+ { "RELAY_THREAD", 0, 0, 0, ""},
+ { "RELEASE", 0, 0, 0, ""},
+ { "RELOAD", 0, 0, 0, ""},
+ { "RENAME", 0, 0, 0, ""},
+ { "REPAIR", 0, 0, 0, ""},
+ { "REPEATABLE", 0, 0, 0, ""},
+ { "REPLACE", 0, 0, 0, ""},
+ { "REPLICATION", 0, 0, 0, ""},
+ { "REPEAT", 0, 0, 0, ""},
+ { "REQUIRE", 0, 0, 0, ""},
+ { "RESET", 0, 0, 0, ""},
+ { "RESTORE", 0, 0, 0, ""},
+ { "RESTRICT", 0, 0, 0, ""},
+ { "RESUME", 0, 0, 0, ""},
+ { "RETURN", 0, 0, 0, ""},
+ { "RETURNS", 0, 0, 0, ""},
+ { "REVOKE", 0, 0, 0, ""},
+ { "RIGHT", 0, 0, 0, ""},
+ { "RLIKE", 0, 0, 0, ""},
+ { "ROLLBACK", 0, 0, 0, ""},
+ { "ROLLUP", 0, 0, 0, ""},
+ { "ROUTINE", 0, 0, 0, ""},
+ { "ROW", 0, 0, 0, ""},
+ { "ROWS", 0, 0, 0, ""},
+ { "ROW_FORMAT", 0, 0, 0, ""},
+ { "RTREE", 0, 0, 0, ""},
+ { "SAVEPOINT", 0, 0, 0, ""},
+ { "SCHEMA", 0, 0, 0, ""},
+ { "SCHEMAS", 0, 0, 0, ""},
+ { "SECOND", 0, 0, 0, ""},
+ { "SECOND_MICROSECOND", 0, 0, 0, ""},
+ { "SECURITY", 0, 0, 0, ""},
+ { "SELECT", 0, 0, 0, ""},
+ { "SENSITIVE", 0, 0, 0, ""},
+ { "SEPARATOR", 0, 0, 0, ""},
+ { "SERIAL", 0, 0, 0, ""},
+ { "SERIALIZABLE", 0, 0, 0, ""},
+ { "SESSION", 0, 0, 0, ""},
+ { "SET", 0, 0, 0, ""},
+ { "SHARE", 0, 0, 0, ""},
+ { "SHOW", 0, 0, 0, ""},
+ { "SHUTDOWN", 0, 0, 0, ""},
+ { "SIGNED", 0, 0, 0, ""},
+ { "SIMPLE", 0, 0, 0, ""},
+ { "SLAVE", 0, 0, 0, ""},
+ { "SNAPSHOT", 0, 0, 0, ""},
+ { "SMALLINT", 0, 0, 0, ""},
+ { "SOME", 0, 0, 0, ""},
+ { "SONAME", 0, 0, 0, ""},
+ { "SOUNDS", 0, 0, 0, ""},
+ { "SPATIAL", 0, 0, 0, ""},
+ { "SPECIFIC", 0, 0, 0, ""},
+ { "SQL", 0, 0, 0, ""},
+ { "SQLEXCEPTION", 0, 0, 0, ""},
+ { "SQLSTATE", 0, 0, 0, ""},
+ { "SQLWARNING", 0, 0, 0, ""},
+ { "SQL_BIG_RESULT", 0, 0, 0, ""},
+ { "SQL_BUFFER_RESULT", 0, 0, 0, ""},
+ { "SQL_CACHE", 0, 0, 0, ""},
+ { "SQL_CALC_FOUND_ROWS", 0, 0, 0, ""},
+ { "SQL_NO_CACHE", 0, 0, 0, ""},
+ { "SQL_SMALL_RESULT", 0, 0, 0, ""},
+ { "SQL_THREAD", 0, 0, 0, ""},
+ { "SQL_TSI_FRAC_SECOND", 0, 0, 0, ""},
+ { "SQL_TSI_SECOND", 0, 0, 0, ""},
+ { "SQL_TSI_MINUTE", 0, 0, 0, ""},
+ { "SQL_TSI_HOUR", 0, 0, 0, ""},
+ { "SQL_TSI_DAY", 0, 0, 0, ""},
+ { "SQL_TSI_WEEK", 0, 0, 0, ""},
+ { "SQL_TSI_MONTH", 0, 0, 0, ""},
+ { "SQL_TSI_QUARTER", 0, 0, 0, ""},
+ { "SQL_TSI_YEAR", 0, 0, 0, ""},
+ { "SSL", 0, 0, 0, ""},
+ { "START", 0, 0, 0, ""},
+ { "STARTING", 0, 0, 0, ""},
+ { "STATUS", 0, 0, 0, ""},
+ { "STOP", 0, 0, 0, ""},
+ { "STORAGE", 0, 0, 0, ""},
+ { "STRAIGHT_JOIN", 0, 0, 0, ""},
+ { "STRING", 0, 0, 0, ""},
+ { "STRIPED", 0, 0, 0, ""},
+ { "SUBJECT", 0, 0, 0, ""},
+ { "SUPER", 0, 0, 0, ""},
+ { "SUSPEND", 0, 0, 0, ""},
+ { "TABLE", 0, 0, 0, ""},
+ { "TABLES", 0, 0, 0, ""},
+ { "TABLESPACE", 0, 0, 0, ""},
+ { "TEMPORARY", 0, 0, 0, ""},
+ { "TEMPTABLE", 0, 0, 0, ""},
+ { "TERMINATED", 0, 0, 0, ""},
+ { "TEXT", 0, 0, 0, ""},
+ { "THEN", 0, 0, 0, ""},
+ { "TIME", 0, 0, 0, ""},
+ { "TIMESTAMP", 0, 0, 0, ""},
+ { "TIMESTAMPADD", 0, 0, 0, ""},
+ { "TIMESTAMPDIFF", 0, 0, 0, ""},
+ { "TINYBLOB", 0, 0, 0, ""},
+ { "TINYINT", 0, 0, 0, ""},
+ { "TINYTEXT", 0, 0, 0, ""},
+ { "TO", 0, 0, 0, ""},
+ { "TRAILING", 0, 0, 0, ""},
+ { "TRANSACTION", 0, 0, 0, ""},
+ { "TRIGGER", 0, 0, 0, ""},
+ { "TRIGGERS", 0, 0, 0, ""},
+ { "TRUE", 0, 0, 0, ""},
+ { "TRUNCATE", 0, 0, 0, ""},
+ { "TYPE", 0, 0, 0, ""},
+ { "TYPES", 0, 0, 0, ""},
+ { "UNCOMMITTED", 0, 0, 0, ""},
+ { "UNDEFINED", 0, 0, 0, ""},
+ { "UNDO", 0, 0, 0, ""},
+ { "UNICODE", 0, 0, 0, ""},
+ { "UNION", 0, 0, 0, ""},
+ { "UNIQUE", 0, 0, 0, ""},
+ { "UNKNOWN", 0, 0, 0, ""},
+ { "UNLOCK", 0, 0, 0, ""},
+ { "UNSIGNED", 0, 0, 0, ""},
+ { "UNTIL", 0, 0, 0, ""},
+ { "UPDATE", 0, 0, 0, ""},
+ { "UPGRADE", 0, 0, 0, ""},
+ { "USAGE", 0, 0, 0, ""},
+ { "USE", 0, 0, 0, ""},
+ { "USER", 0, 0, 0, ""},
+ { "USER_RESOURCES", 0, 0, 0, ""},
+ { "USE_FRM", 0, 0, 0, ""},
+ { "USING", 0, 0, 0, ""},
+ { "UTC_DATE", 0, 0, 0, ""},
+ { "UTC_TIME", 0, 0, 0, ""},
+ { "UTC_TIMESTAMP", 0, 0, 0, ""},
+ { "VALUE", 0, 0, 0, ""},
+ { "VALUES", 0, 0, 0, ""},
+ { "VARBINARY", 0, 0, 0, ""},
+ { "VARCHAR", 0, 0, 0, ""},
+ { "VARCHARACTER", 0, 0, 0, ""},
+ { "VARIABLES", 0, 0, 0, ""},
+ { "VARYING", 0, 0, 0, ""},
+ { "WARNINGS", 0, 0, 0, ""},
+ { "WEEK", 0, 0, 0, ""},
+ { "WHEN", 0, 0, 0, ""},
+ { "WHERE", 0, 0, 0, ""},
+ { "WHILE", 0, 0, 0, ""},
+ { "VIEW", 0, 0, 0, ""},
+ { "WITH", 0, 0, 0, ""},
+ { "WORK", 0, 0, 0, ""},
+ { "WRITE", 0, 0, 0, ""},
+ { "X509", 0, 0, 0, ""},
+ { "XOR", 0, 0, 0, ""},
+ { "XA", 0, 0, 0, ""},
+ { "YEAR", 0, 0, 0, ""},
+ { "YEAR_MONTH", 0, 0, 0, ""},
+ { "ZEROFILL", 0, 0, 0, ""},
+ { "ABS", 0, 0, 0, ""},
+ { "ACOS", 0, 0, 0, ""},
+ { "ADDDATE", 0, 0, 0, ""},
+ { "ADDTIME", 0, 0, 0, ""},
+ { "AES_ENCRYPT", 0, 0, 0, ""},
+ { "AES_DECRYPT", 0, 0, 0, ""},
+ { "AREA", 0, 0, 0, ""},
+ { "ASIN", 0, 0, 0, ""},
+ { "ASBINARY", 0, 0, 0, ""},
+ { "ASTEXT", 0, 0, 0, ""},
+ { "ASWKB", 0, 0, 0, ""},
+ { "ASWKT", 0, 0, 0, ""},
+ { "ATAN", 0, 0, 0, ""},
+ { "ATAN2", 0, 0, 0, ""},
+ { "BENCHMARK", 0, 0, 0, ""},
+ { "BIN", 0, 0, 0, ""},
+ { "BIT_COUNT", 0, 0, 0, ""},
+ { "BIT_OR", 0, 0, 0, ""},
+ { "BIT_AND", 0, 0, 0, ""},
+ { "BIT_XOR", 0, 0, 0, ""},
+ { "CAST", 0, 0, 0, ""},
+ { "CEIL", 0, 0, 0, ""},
+ { "CEILING", 0, 0, 0, ""},
+ { "BIT_LENGTH", 0, 0, 0, ""},
+ { "CENTROID", 0, 0, 0, ""},
+ { "CHAR_LENGTH", 0, 0, 0, ""},
+ { "CHARACTER_LENGTH", 0, 0, 0, ""},
+ { "COALESCE", 0, 0, 0, ""},
+ { "COERCIBILITY", 0, 0, 0, ""},
+ { "COMPRESS", 0, 0, 0, ""},
+ { "CONCAT", 0, 0, 0, ""},
+ { "CONCAT_WS", 0, 0, 0, ""},
+ { "CONNECTION_ID", 0, 0, 0, ""},
+ { "CONV", 0, 0, 0, ""},
+ { "CONVERT_TZ", 0, 0, 0, ""},
+ { "COUNT", 0, 0, 0, ""},
+ { "COS", 0, 0, 0, ""},
+ { "COT", 0, 0, 0, ""},
+ { "CRC32", 0, 0, 0, ""},
+ { "CROSSES", 0, 0, 0, ""},
+ { "CURDATE", 0, 0, 0, ""},
+ { "CURTIME", 0, 0, 0, ""},
+ { "DATE_ADD", 0, 0, 0, ""},
+ { "DATEDIFF", 0, 0, 0, ""},
+ { "DATE_FORMAT", 0, 0, 0, ""},
+ { "DATE_SUB", 0, 0, 0, ""},
+ { "DAYNAME", 0, 0, 0, ""},
+ { "DAYOFMONTH", 0, 0, 0, ""},
+ { "DAYOFWEEK", 0, 0, 0, ""},
+ { "DAYOFYEAR", 0, 0, 0, ""},
+ { "DECODE", 0, 0, 0, ""},
+ { "DEGREES", 0, 0, 0, ""},
+ { "DES_ENCRYPT", 0, 0, 0, ""},
+ { "DES_DECRYPT", 0, 0, 0, ""},
+ { "DIMENSION", 0, 0, 0, ""},
+ { "DISJOINT", 0, 0, 0, ""},
+ { "ELT", 0, 0, 0, ""},
+ { "ENCODE", 0, 0, 0, ""},
+ { "ENCRYPT", 0, 0, 0, ""},
+ { "ENDPOINT", 0, 0, 0, ""},
+ { "ENVELOPE", 0, 0, 0, ""},
+ { "EQUALS", 0, 0, 0, ""},
+ { "EXTERIORRING", 0, 0, 0, ""},
+ { "EXTRACT", 0, 0, 0, ""},
+ { "EXP", 0, 0, 0, ""},
+ { "EXPORT_SET", 0, 0, 0, ""},
+ { "FIELD", 0, 0, 0, ""},
+ { "FIND_IN_SET", 0, 0, 0, ""},
+ { "FLOOR", 0, 0, 0, ""},
+ { "FORMAT", 0, 0, 0, ""},
+ { "FOUND_ROWS", 0, 0, 0, ""},
+ { "FROM_DAYS", 0, 0, 0, ""},
+ { "FROM_UNIXTIME", 0, 0, 0, ""},
+ { "GET_LOCK", 0, 0, 0, ""},
+ { "GEOMETRYN", 0, 0, 0, ""},
+ { "GEOMETRYTYPE", 0, 0, 0, ""},
+ { "GEOMCOLLFROMTEXT", 0, 0, 0, ""},
+ { "GEOMCOLLFROMWKB", 0, 0, 0, ""},
+ { "GEOMETRYCOLLECTIONFROMTEXT", 0, 0, 0, ""},
+ { "GEOMETRYCOLLECTIONFROMWKB", 0, 0, 0, ""},
+ { "GEOMETRYFROMTEXT", 0, 0, 0, ""},
+ { "GEOMETRYFROMWKB", 0, 0, 0, ""},
+ { "GEOMFROMTEXT", 0, 0, 0, ""},
+ { "GEOMFROMWKB", 0, 0, 0, ""},
+ { "GLENGTH", 0, 0, 0, ""},
+ { "GREATEST", 0, 0, 0, ""},
+ { "GROUP_CONCAT", 0, 0, 0, ""},
+ { "GROUP_UNIQUE_USERS", 0, 0, 0, ""},
+ { "HEX", 0, 0, 0, ""},
+ { "IFNULL", 0, 0, 0, ""},
+ { "INET_ATON", 0, 0, 0, ""},
+ { "INET_NTOA", 0, 0, 0, ""},
+ { "INSTR", 0, 0, 0, ""},
+ { "INTERIORRINGN", 0, 0, 0, ""},
+ { "INTERSECTS", 0, 0, 0, ""},
+ { "ISCLOSED", 0, 0, 0, ""},
+ { "ISEMPTY", 0, 0, 0, ""},
+ { "ISNULL", 0, 0, 0, ""},
+ { "IS_FREE_LOCK", 0, 0, 0, ""},
+ { "IS_USED_LOCK", 0, 0, 0, ""},
+ { "LAST_INSERT_ID", 0, 0, 0, ""},
+ { "ISSIMPLE", 0, 0, 0, ""},
+ { "LAST_DAY", 0, 0, 0, ""},
+ { "LCASE", 0, 0, 0, ""},
+ { "LEAST", 0, 0, 0, ""},
+ { "LENGTH", 0, 0, 0, ""},
+ { "LN", 0, 0, 0, ""},
+ { "LINEFROMTEXT", 0, 0, 0, ""},
+ { "LINEFROMWKB", 0, 0, 0, ""},
+ { "LINESTRINGFROMTEXT", 0, 0, 0, ""},
+ { "LINESTRINGFROMWKB", 0, 0, 0, ""},
+ { "LOAD_FILE", 0, 0, 0, ""},
+ { "LOCATE", 0, 0, 0, ""},
+ { "LOG", 0, 0, 0, ""},
+ { "LOG2", 0, 0, 0, ""},
+ { "LOG10", 0, 0, 0, ""},
+ { "LOWER", 0, 0, 0, ""},
+ { "LPAD", 0, 0, 0, ""},
+ { "LTRIM", 0, 0, 0, ""},
+ { "MAKE_SET", 0, 0, 0, ""},
+ { "MAKEDATE", 0, 0, 0, ""},
+ { "MAKETIME", 0, 0, 0, ""},
+ { "MASTER_POS_WAIT", 0, 0, 0, ""},
+ { "MAX", 0, 0, 0, ""},
+ { "MBRCONTAINS", 0, 0, 0, ""},
+ { "MBRDISJOINT", 0, 0, 0, ""},
+ { "MBREQUAL", 0, 0, 0, ""},
+ { "MBRINTERSECTS", 0, 0, 0, ""},
+ { "MBROVERLAPS", 0, 0, 0, ""},
+ { "MBRTOUCHES", 0, 0, 0, ""},
+ { "MBRWITHIN", 0, 0, 0, ""},
+ { "MD5", 0, 0, 0, ""},
+ { "MID", 0, 0, 0, ""},
+ { "MIN", 0, 0, 0, ""},
+ { "MLINEFROMTEXT", 0, 0, 0, ""},
+ { "MLINEFROMWKB", 0, 0, 0, ""},
+ { "MPOINTFROMTEXT", 0, 0, 0, ""},
+ { "MPOINTFROMWKB", 0, 0, 0, ""},
+ { "MPOLYFROMTEXT", 0, 0, 0, ""},
+ { "MPOLYFROMWKB", 0, 0, 0, ""},
+ { "MONTHNAME", 0, 0, 0, ""},
+ { "MULTILINESTRINGFROMTEXT", 0, 0, 0, ""},
+ { "MULTILINESTRINGFROMWKB", 0, 0, 0, ""},
+ { "MULTIPOINTFROMTEXT", 0, 0, 0, ""},
+ { "MULTIPOINTFROMWKB", 0, 0, 0, ""},
+ { "MULTIPOLYGONFROMTEXT", 0, 0, 0, ""},
+ { "MULTIPOLYGONFROMWKB", 0, 0, 0, ""},
+ { "NAME_CONST", 0, 0, 0, ""},
+ { "NOW", 0, 0, 0, ""},
+ { "NULLIF", 0, 0, 0, ""},
+ { "NUMGEOMETRIES", 0, 0, 0, ""},
+ { "NUMINTERIORRINGS", 0, 0, 0, ""},
+ { "NUMPOINTS", 0, 0, 0, ""},
+ { "OCTET_LENGTH", 0, 0, 0, ""},
+ { "OCT", 0, 0, 0, ""},
+ { "ORD", 0, 0, 0, ""},
+ { "OVERLAPS", 0, 0, 0, ""},
+ { "PERIOD_ADD", 0, 0, 0, ""},
+ { "PERIOD_DIFF", 0, 0, 0, ""},
+ { "PI", 0, 0, 0, ""},
+ { "POINTFROMTEXT", 0, 0, 0, ""},
+ { "POINTFROMWKB", 0, 0, 0, ""},
+ { "POINTN", 0, 0, 0, ""},
+ { "POLYFROMTEXT", 0, 0, 0, ""},
+ { "POLYFROMWKB", 0, 0, 0, ""},
+ { "POLYGONFROMTEXT", 0, 0, 0, ""},
+ { "POLYGONFROMWKB", 0, 0, 0, ""},
+ { "POSITION", 0, 0, 0, ""},
+ { "POW", 0, 0, 0, ""},
+ { "POWER", 0, 0, 0, ""},
+ { "QUOTE", 0, 0, 0, ""},
+ { "RADIANS", 0, 0, 0, ""},
+ { "RAND", 0, 0, 0, ""},
+ { "RELEASE_LOCK", 0, 0, 0, ""},
+ { "REVERSE", 0, 0, 0, ""},
+ { "ROUND", 0, 0, 0, ""},
+ { "ROW_COUNT", 0, 0, 0, ""},
+ { "RPAD", 0, 0, 0, ""},
+ { "RTRIM", 0, 0, 0, ""},
+ { "SEC_TO_TIME", 0, 0, 0, ""},
+ { "SESSION_USER", 0, 0, 0, ""},
+ { "SUBDATE", 0, 0, 0, ""},
+ { "SIGN", 0, 0, 0, ""},
+ { "SIN", 0, 0, 0, ""},
+ { "SHA", 0, 0, 0, ""},
+ { "SHA1", 0, 0, 0, ""},
+ { "SLEEP", 0, 0, 0, ""},
+ { "SOUNDEX", 0, 0, 0, ""},
+ { "SPACE", 0, 0, 0, ""},
+ { "SQRT", 0, 0, 0, ""},
+ { "SRID", 0, 0, 0, ""},
+ { "STARTPOINT", 0, 0, 0, ""},
+ { "STD", 0, 0, 0, ""},
+ { "STDDEV", 0, 0, 0, ""},
+ { "STDDEV_POP", 0, 0, 0, ""},
+ { "STDDEV_SAMP", 0, 0, 0, ""},
+ { "STR_TO_DATE", 0, 0, 0, ""},
+ { "STRCMP", 0, 0, 0, ""},
+ { "SUBSTR", 0, 0, 0, ""},
+ { "SUBSTRING", 0, 0, 0, ""},
+ { "SUBSTRING_INDEX", 0, 0, 0, ""},
+ { "SUBTIME", 0, 0, 0, ""},
+ { "SUM", 0, 0, 0, ""},
+ { "SYSDATE", 0, 0, 0, ""},
+ { "SYSTEM_USER", 0, 0, 0, ""},
+ { "TAN", 0, 0, 0, ""},
+ { "TIME_FORMAT", 0, 0, 0, ""},
+ { "TIME_TO_SEC", 0, 0, 0, ""},
+ { "TIMEDIFF", 0, 0, 0, ""},
+ { "TO_DAYS", 0, 0, 0, ""},
+ { "TOUCHES", 0, 0, 0, ""},
+ { "TRIM", 0, 0, 0, ""},
+ { "UCASE", 0, 0, 0, ""},
+ { "UNCOMPRESS", 0, 0, 0, ""},
+ { "UNCOMPRESSED_LENGTH", 0, 0, 0, ""},
+ { "UNHEX", 0, 0, 0, ""},
+ { "UNIQUE_USERS", 0, 0, 0, ""},
+ { "UNIX_TIMESTAMP", 0, 0, 0, ""},
+ { "UPPER", 0, 0, 0, ""},
+ { "UUID", 0, 0, 0, ""},
+ { "VARIANCE", 0, 0, 0, ""},
+ { "VAR_POP", 0, 0, 0, ""},
+ { "VAR_SAMP", 0, 0, 0, ""},
+ { "VERSION", 0, 0, 0, ""},
+ { "WEEKDAY", 0, 0, 0, ""},
+ { "WEEKOFYEAR", 0, 0, 0, ""},
+ { "WITHIN", 0, 0, 0, ""},
+ { "X", 0, 0, 0, ""},
+ { "Y", 0, 0, 0, ""},
+ { "YEARWEEK", 0, 0, 0, ""},
+ /* end sentinel */
{ (char *)NULL, 0, 0, 0, ""}
};
@@ -604,6 +1310,10 @@ static struct my_option my_long_options[] =
{"column-type-info", OPT_COLUMN_TYPES, "Display column type information.",
(uchar**) &column_types_flag, (uchar**) &column_types_flag,
0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
+ {"comments", 'c', "Preserve comments. Send comments to the server."
+ " The default is --skip-comments (discard comments), enable with --comments",
+ (uchar**) &preserve_comments, (uchar**) &preserve_comments,
+ 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
{"compress", 'C', "Use compression in server/client protocol.",
(uchar**) &opt_compress, (uchar**) &opt_compress, 0, GET_BOOL, NO_ARG, 0, 0, 0,
0, 0, 0},
@@ -754,9 +1464,9 @@ static struct my_option my_long_options[] =
0, 0},
{"max_allowed_packet", OPT_MAX_ALLOWED_PACKET,
"Max packet length to send to, or receive from server",
- (uchar**) &opt_max_allowed_packet, (uchar**) &opt_max_allowed_packet, 0, GET_ULONG,
- REQUIRED_ARG, 16 *1024L*1024L, 4096, (longlong) 2*1024L*1024L*1024L,
- MALLOC_OVERHEAD, 1024, 0},
+ (uchar**) &opt_max_allowed_packet, (uchar**) &opt_max_allowed_packet, 0,
+ GET_ULONG, REQUIRED_ARG, 16 *1024L*1024L, 4096,
+ (longlong) 2*1024L*1024L*1024L, MALLOC_OVERHEAD, 1024, 0},
{"net_buffer_length", OPT_NET_BUFFER_LENGTH,
"Buffer for TCP/IP and socket communication",
(uchar**) &opt_net_buffer_length, (uchar**) &opt_net_buffer_length, 0, GET_ULONG,
@@ -764,12 +1474,13 @@ static struct my_option my_long_options[] =
{"select_limit", OPT_SELECT_LIMIT,
"Automatic limit for SELECT when using --safe-updates",
(uchar**) &select_limit,
- (uchar**) &select_limit, 0, GET_ULONG, REQUIRED_ARG, 1000L, 1, ~0L, 0, 1, 0},
+ (uchar**) &select_limit, 0, GET_ULONG, REQUIRED_ARG, 1000L, 1, ULONG_MAX,
+ 0, 1, 0},
{"max_join_size", OPT_MAX_JOIN_SIZE,
"Automatic limit for rows in a join when using --safe-updates",
(uchar**) &max_join_size,
- (uchar**) &max_join_size, 0, GET_ULONG, REQUIRED_ARG, 1000000L, 1, ~0L, 0, 1,
- 0},
+ (uchar**) &max_join_size, 0, GET_ULONG, REQUIRED_ARG, 1000000L, 1, ULONG_MAX,
+ 0, 1, 0},
{"secure-auth", OPT_SECURE_AUTH, "Refuse client connecting to server if it"
" uses old (pre-4.1.1) protocol", (uchar**) &opt_secure_auth,
(uchar**) &opt_secure_auth, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
@@ -807,7 +1518,7 @@ static void usage(int version)
if (version)
return;
printf("\
-Copyright (C) 2002 MySQL AB\n\
+Copyright (C) 2000-2008 MySQL AB\n\
This software comes with ABSOLUTELY NO WARRANTY. This is free software,\n\
and you are welcome to modify and redistribute it under the GPL license\n");
printf("Usage: %s [OPTIONS] [database]\n", my_progname);
@@ -1087,6 +1798,17 @@ static int read_and_execute(bool interactive)
if (!interactive)
{
line=batch_readline(status.line_buff);
+ /*
+ Skip UTF8 Byte Order Marker (BOM) 0xEFBBBF.
+ Editors like "notepad" put this marker in
+ the very beginning of a text file when
+ you save the file using "Unicode UTF-8" format.
+ */
+ if (!line_number &&
+ (uchar) line[0] == 0xEF &&
+ (uchar) line[1] == 0xBB &&
+ (uchar) line[2] == 0xBF)
+ line+= 3;
line_number++;
if (!glob_buffer.length())
status.query_start_line=line_number;
@@ -1154,10 +1876,6 @@ static int read_and_execute(bool interactive)
status.exit_status=0;
break;
}
- if (!in_string && (line[0] == '#' ||
- (line[0] == '-' && line[1] == '-') ||
- line[0] == 0))
- continue; // Skip comment lines
/*
Check if line is a mysql command line
@@ -1277,21 +1995,25 @@ static bool add_line(String &buffer,char *line,char *in_string,
if (status.add_to_history && line[0] && not_in_history(line))
add_history(line);
#endif
-#ifdef USE_MB
char *end_of_line=line+(uint) strlen(line);
-#endif
for (pos=out=line ; (inchar= (uchar) *pos) ; pos++)
{
- if (my_isspace(charset_info,inchar) && out == line &&
- buffer.is_empty())
- continue;
+ if (!preserve_comments)
+ {
+ // Skip spaces at the beggining of a statement
+ if (my_isspace(charset_info,inchar) && (out == line) &&
+ buffer.is_empty())
+ continue;
+ }
+
#ifdef USE_MB
+ // Accept multi-byte characters as-is
int length;
if (use_mb(charset_info) &&
(length= my_ismbchar(charset_info, pos, end_of_line)))
{
- if (!*ml_comment)
+ if (!*ml_comment || preserve_comments)
{
while (length--)
*out++ = *pos++;
@@ -1317,8 +2039,13 @@ 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);
+ // Flush previously accepted characters
+ if (out != line)
+ {
+ buffer.append(line, (uint) (out-line));
+ out= line;
+ }
+
if ((*com->func)(&buffer,pos-1) > 0)
DBUG_RETURN(1); // Quit
if (com->takes_params)
@@ -1346,7 +2073,6 @@ static bool add_line(String &buffer,char *line,char *in_string,
pos+= delimiter_length - 1; // Point at last delim char
}
}
- out=line;
}
else
{
@@ -1359,46 +2085,105 @@ static bool add_line(String &buffer,char *line,char *in_string,
}
}
else if (!*ml_comment && !*in_string &&
- (*pos == *delimiter && is_prefix(pos + 1, delimiter + 1) ||
- buffer.length() == 0 && (out - line) >= 9 &&
- !my_strcasecmp(charset_info, line, "delimiter")))
- {
- uint old_delimiter_length= delimiter_length;
+ (end_of_line - pos) >= 10 &&
+ !my_strnncoll(charset_info, (uchar*) pos, 10,
+ (const uchar*) "delimiter ", 10))
+ {
+ // Flush previously accepted characters
if (out != line)
- buffer.append(line, (uint) (out - line)); // Add this line
+ {
+ buffer.append(line, (uint32) (out - line));
+ out= line;
+ }
+
+ // Flush possible comments in the buffer
+ if (!buffer.is_empty())
+ {
+ if (com_go(&buffer, 0) > 0) // < 0 is not fatal
+ DBUG_RETURN(1);
+ buffer.length(0);
+ }
+
+ /*
+ Delimiter wants the get rest of the given line as argument to
+ allow one to change ';' to ';;' and back
+ */
+ buffer.append(pos);
+ if (com_delimiter(&buffer, pos) > 0)
+ DBUG_RETURN(1);
+
+ buffer.length(0);
+ break;
+ }
+ else if (!*ml_comment && !*in_string && is_prefix(pos, delimiter))
+ {
+ // Found a statement. Continue parsing after the delimiter
+ pos+= delimiter_length;
+
+ if (preserve_comments)
+ {
+ while (my_isspace(charset_info, *pos))
+ *out++= *pos++;
+ }
+ // Flush previously accepted characters
+ if (out != line)
+ {
+ buffer.append(line, (uint32) (out-line));
+ out= line;
+ }
+
+ if (preserve_comments && ((*pos == '#') ||
+ ((*pos == '-') &&
+ (pos[1] == '-') &&
+ my_isspace(charset_info, pos[2]))))
+ {
+ // Add trailing single line comments to this statement
+ buffer.append(pos);
+ pos+= strlen(pos);
+ }
+
+ pos--;
+
if ((com= find_command(buffer.c_ptr(), 0)))
{
- if (com->func == com_delimiter)
- {
- /*
- Delimiter wants the get rest of the given line as argument to
- allow one to change ';' to ';;' and back
- */
- char *end= strend(pos);
- buffer.append(pos, (uint) (end - pos));
- /* Ensure pos will point at \0 after the pos+= below */
- pos= end - old_delimiter_length + 1;
- }
- if ((*com->func)(&buffer, buffer.c_ptr()) > 0)
- DBUG_RETURN(1); // Quit
+
+ if ((*com->func)(&buffer, buffer.c_ptr()) > 0)
+ DBUG_RETURN(1); // Quit
}
else
{
- if (com_go(&buffer, 0) > 0) // < 0 is not fatal
- DBUG_RETURN(1);
+ if (com_go(&buffer, 0) > 0) // < 0 is not fatal
+ DBUG_RETURN(1);
}
buffer.length(0);
- out= line;
- pos+= old_delimiter_length - 1;
}
else if (!*ml_comment && (!*in_string && (inchar == '#' ||
inchar == '-' && pos[1] == '-' &&
my_isspace(charset_info,pos[2]))))
- break; // comment to end of line
+ {
+ // Flush previously accepted characters
+ if (out != line)
+ {
+ buffer.append(line, (uint32) (out - line));
+ out= line;
+ }
+
+ // comment to end of line
+ if (preserve_comments)
+ buffer.append(pos);
+
+ break;
+ }
else if (!*in_string && inchar == '/' && *(pos+1) == '*' &&
*(pos+2) != '!')
{
- pos++;
+ if (preserve_comments)
+ {
+ *out++= *pos++; // copy '/'
+ *out++= *pos; // copy '*'
+ }
+ else
+ pos++;
*ml_comment= 1;
if (out != line)
{
@@ -1408,8 +2193,21 @@ static bool add_line(String &buffer,char *line,char *in_string,
}
else if (*ml_comment && !ss_comment && inchar == '*' && *(pos + 1) == '/')
{
- pos++;
+ if (preserve_comments)
+ {
+ *out++= *pos++; // copy '*'
+ *out++= *pos; // copy '/'
+ }
+ else
+ pos++;
*ml_comment= 0;
+ if (out != line)
+ {
+ buffer.append(line, (uint32) (out - line));
+ out= line;
+ }
+ // Consumed a 2 chars or more, and will add 1 at most,
+ // so using the 'line' buffer to edit data in place is ok.
need_space= 1;
}
else
@@ -1424,14 +2222,12 @@ static bool add_line(String &buffer,char *line,char *in_string,
else if (!*ml_comment && !*in_string &&
(inchar == '\'' || inchar == '"' || inchar == '`'))
*in_string= (char) inchar;
- if (!*ml_comment)
+ if (!*ml_comment || preserve_comments)
{
if (need_space && !my_isspace(charset_info, (char)inchar))
- {
*out++= ' ';
- need_space= 0;
- }
- *out++= (char) inchar;
+ need_space= 0;
+ *out++= (char) inchar;
}
}
}
@@ -1441,7 +2237,7 @@ static bool add_line(String &buffer,char *line,char *in_string,
uint length=(uint) (out-line);
if (buffer.length() + length >= buffer.alloced_length())
buffer.realloc(buffer.length()+length+IO_SIZE);
- if (!(*ml_comment) && buffer.append(line,length))
+ if ((!*ml_comment || preserve_comments) && buffer.append(line, length))
DBUG_RETURN(1);
}
DBUG_RETURN(0);
@@ -1676,12 +2472,6 @@ static void build_completion_hash(bool rehash, bool write_info)
if (status.batch || quick || !current_db)
DBUG_VOID_RETURN; // We don't need completion in batches
-
- /* hash SQL commands */
- while (cmd->name) {
- add_word(&ht,(char*) cmd->name);
- cmd++;
- }
if (!rehash)
DBUG_VOID_RETURN;
@@ -1691,6 +2481,12 @@ static void build_completion_hash(bool rehash, bool write_info)
completion_hash_clean(&ht);
free_root(&hash_mem_root,MYF(0));
+ /* hash this file's known subset of SQL commands */
+ while (cmd->name) {
+ add_word(&ht,(char*) cmd->name);
+ cmd++;
+ }
+
/* hash MySQL functions (to be implemented) */
/* hash all database names */
@@ -2072,9 +2868,10 @@ com_charset(String *buffer __attribute__((unused)), char *line)
static int
com_go(String *buffer,char *line __attribute__((unused)))
{
- char buff[200], time_buff[32], *pos;
+ char buff[200]; /* about 110 chars used so far */
+ char time_buff[52+3+1]; /* time max + space&parens + NUL */
MYSQL_RES *result;
- ulong timer, warnings;
+ ulong timer, warnings= 0;
uint error= 0;
int err= 0;
@@ -2126,39 +2923,36 @@ com_go(String *buffer,char *line __attribute__((unused)))
}
#endif
- if (error)
- {
- executing_query= 0;
- buffer->length(0); // Remove query on error
- return error;
- }
- error=0;
buffer->length(0);
+ if (error)
+ goto end;
+
do
{
+ char *pos;
+
if (quick)
{
if (!(result=mysql_use_result(&mysql)) && mysql_field_count(&mysql))
{
- executing_query= 0;
- return put_error(&mysql);
+ error= put_error(&mysql);
+ goto end;
}
}
else
{
error= mysql_store_result_for_lazy(&result);
if (error)
- {
- executing_query= 0;
- return error;
- }
+ goto end;
}
if (verbose >= 3 || !opt_silent)
mysql_end_timer(timer,time_buff);
else
- time_buff[0]=0;
+ time_buff[0]= '\0';
+
+ /* Every branch must truncate buff . */
if (result)
{
if (!mysql_num_rows(result) && ! quick && !column_types_flag)
@@ -2229,12 +3023,11 @@ com_go(String *buffer,char *line __attribute__((unused)))
if (err >= 1)
error= put_error(&mysql);
- if (show_warnings == 1 && warnings >= 1) /* Show warnings if any */
- {
- init_pager();
+end:
+
+ /* Show warnings if any or error occured */
+ if (show_warnings == 1 && (warnings >= 1 || error))
print_warnings();
- end_pager();
- }
if (!error && !status.batch &&
(mysql.server_status & SERVER_STATUS_DB_DROPPED))
@@ -2366,6 +3159,7 @@ static char *fieldflags2str(uint f) {
ff2s_check_flag(GROUP);
ff2s_check_flag(UNIQUE);
ff2s_check_flag(BINCMP);
+ ff2s_check_flag(ON_UPDATE_NOW);
#undef ff2s_check_flag
if (f)
sprintf(s, " unknows=0x%04x", f);
@@ -2658,6 +3452,9 @@ static void print_warnings()
MYSQL_RES *result;
MYSQL_ROW cur;
my_ulonglong num_rows;
+
+ /* Save current error before calling "show warnings" */
+ uint error= mysql_errno(&mysql);
/* Get the warnings */
query= "show warnings";
@@ -2666,16 +3463,28 @@ static void print_warnings()
/* Bail out when no warnings */
if (!(num_rows= mysql_num_rows(result)))
- {
- mysql_free_result(result);
- return;
- }
+ goto end;
+
+ cur= mysql_fetch_row(result);
+
+ /*
+ Don't print a duplicate of the current error. It is possible for SHOW
+ WARNINGS to return multiple errors with the same code, but different
+ messages. To be safe, skip printing the duplicate only if it is the only
+ warning.
+ */
+ if (!cur || num_rows == 1 && error == (uint) strtoul(cur[1], NULL, 10))
+ goto end;
/* Print the warnings */
- while ((cur= mysql_fetch_row(result)))
+ init_pager();
+ do
{
tee_fprintf(PAGER, "%s (Code %s): %s\n", cur[0], cur[1], cur[2]);
- }
+ } while ((cur= mysql_fetch_row(result)));
+ end_pager();
+
+end:
mysql_free_result(result);
}
@@ -3014,7 +3823,10 @@ com_connect(String *buffer, char *line)
Two null bytes are needed in the end of buff to allow
get_arg to find end of string the second time it's called.
*/
- strmake(buff, line, sizeof(buff)-2);
+ tmp= strmake(buff, line, sizeof(buff)-2);
+#ifdef EXTRA_DEBUG
+ tmp[1]= 0;
+#endif
tmp= get_arg(buff, 0);
if (tmp && *tmp)
{
@@ -3707,6 +4519,11 @@ static ulong start_timer(void)
}
+/**
+ Write as many as 52+1 bytes to buff, in the form of a legible duration of time.
+
+ len("4294967296 days, 23 hours, 59 minutes, 60.00 seconds") -> 52
+*/
static void nice_time(double sec,char *buff,bool part_second)
{
ulong tmp;
diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc
index 7a4135ab649..8b79266d749 100644
--- a/client/mysqlbinlog.cc
+++ b/client/mysqlbinlog.cc
@@ -63,7 +63,12 @@ void sql_print_error(const char *format, ...);
static bool one_database=0, to_last_remote_log= 0, disable_log_bin= 0;
static bool opt_hexdump= 0;
-static bool opt_base64_output= 0;
+const char *base64_output_mode_names[]= {"NEVER", "AUTO", "ALWAYS", NullS};
+TYPELIB base64_output_mode_typelib=
+ { array_elements(base64_output_mode_names) - 1, "",
+ base64_output_mode_names, NULL };
+static enum_base64_output_mode opt_base64_output_mode= BASE64_OUTPUT_UNSPEC;
+static const char *opt_base64_output_mode_str= NullS;
static const char* database= 0;
static my_bool force_opt= 0, short_form= 0, remote_opt= 0;
static my_bool debug_info_flag, debug_check_flag;
@@ -96,7 +101,7 @@ static my_bool file_not_closed_error= 0;
This is because the event will be created (alloced) in read_log_event()
(which returns a pointer) in check_header().
*/
-Format_description_log_event* glob_description_event;
+static Format_description_log_event* glob_description_event;
static int dump_local_log_entries(PRINT_EVENT_INFO *print_event_info,
const char* logname);
@@ -265,7 +270,7 @@ public:
File prepare_new_file_for_old_format(Load_log_event *le, char *filename);
int load_old_format_file(NET* net, const char *server_fname,
uint server_fname_len, File file);
- int process_first_event(const char *bname, uint blen, const char *block,
+ int process_first_event(const char *bname, uint blen, const uchar *block,
uint block_len, uint file_id,
Create_file_log_event *ce);
};
@@ -370,7 +375,7 @@ int Load_log_processor::load_old_format_file(NET* net, const char*server_fname,
*/
int Load_log_processor::process_first_event(const char *bname, uint blen,
- const char *block, uint block_len,
+ const uchar *block, uint block_len,
uint file_id,
Create_file_log_event *ce)
{
@@ -557,7 +562,7 @@ int process_event(PRINT_EVENT_INFO *print_event_info, Log_event *ev,
else
print_event_info->hexdump_from= pos;
- print_event_info->base64_output= opt_base64_output;
+ print_event_info->base64_output_mode= opt_base64_output_mode;
DBUG_PRINT("debug", ("event_type: %s", ev->get_type_str()));
@@ -565,7 +570,7 @@ int process_event(PRINT_EVENT_INFO *print_event_info, Log_event *ev,
case QUERY_EVENT:
if (check_database(((Query_log_event*)ev)->db))
goto end;
- if (opt_base64_output)
+ if (opt_base64_output_mode == BASE64_OUTPUT_ALWAYS)
write_event_header_and_base64(ev, result_file, print_event_info);
else
ev->print(result_file, print_event_info);
@@ -589,7 +594,7 @@ int process_event(PRINT_EVENT_INFO *print_event_info, Log_event *ev,
filename and use LOCAL), prepared in the 'case EXEC_LOAD_EVENT'
below.
*/
- if (opt_base64_output)
+ if (opt_base64_output_mode == BASE64_OUTPUT_ALWAYS)
{
write_event_header_and_base64(ce, result_file, print_event_info);
}
@@ -670,6 +675,13 @@ Create_file event for file_id: %u\n",exv->file_id);
if (fname)
{
+ /*
+ Fix the path so it can be consumed by mysql client (requires Unix path).
+ */
+ int stop= strlen(fname);
+ for (int i= 0; i < stop; i++)
+ if (fname[i] == '\\')
+ fname[i]= '/';
exlq->print(result_file, print_event_info, fname);
my_free(fname, MYF(MY_WME));
}
@@ -678,6 +690,38 @@ Create_file event for file_id: %u\n",exv->file_id);
Begin_load_query event for file_id: %u\n", exlq->file_id);
break;
}
+ case TABLE_MAP_EVENT:
+ case WRITE_ROWS_EVENT:
+ case DELETE_ROWS_EVENT:
+ case UPDATE_ROWS_EVENT:
+ case PRE_GA_WRITE_ROWS_EVENT:
+ case PRE_GA_DELETE_ROWS_EVENT:
+ case PRE_GA_UPDATE_ROWS_EVENT:
+ /*
+ These events must be printed in base64 format, if printed.
+ base64 format requires a FD event to be safe, so if no FD
+ event has been printed, we give an error. Except if user
+ passed --short-form, because --short-form disables printing
+ row events.
+ */
+ if (!print_event_info->printed_fd_event && !short_form)
+ {
+ /*
+ todo: a lot to clean up here
+ */
+ const char* type_str= ev->get_type_str();
+ delete ev;
+ if (opt_base64_output_mode == BASE64_OUTPUT_NEVER)
+ die("--base64-output=never specified, but binlog contains a "
+ "%s event which must be printed in base64.",
+ type_str);
+ else
+ die("malformed binlog: it does not contain any "
+ "Format_description_log_event. I now found a %s event, which is "
+ "not safe to process without a Format_description_log_event.",
+ type_str);
+ }
+ /* FALL THROUGH */
default:
ev->print(result_file, print_event_info);
}
@@ -707,12 +751,17 @@ static struct my_option my_long_options[] =
{"autoclose", OPT_AUTO_CLOSE, "Auto close the screen on exit for Netware.",
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
#endif
- {"base64-output", OPT_BASE64_OUTPUT,
- "Print all binlog entries using base64 encoding. "
- "This is for debugging only. Logs produced using this option "
- "should not be applied on production systems.",
- (uchar**) &opt_base64_output, (uchar**) &opt_base64_output, 0, GET_BOOL,
- NO_ARG, 0, 0, 0, 0, 0, 0},
+ {"base64-output", OPT_BASE64_OUTPUT_MODE,
+ "Determine when the output statements should be base64-encoded BINLOG "
+ "statements: 'never' disables it and works only for binlogs without "
+ "row-based events; 'auto' is the default and prints base64 only when "
+ "necessary (i.e., for row-based events and format description events); "
+ "'always' prints base64 whenever possible. 'always' is for debugging "
+ "only and should not be used in a production system. The default is "
+ "'auto'. --base64-output is a short form for --base64-output=always."
+ ,(uchar**) &opt_base64_output_mode_str,
+ (uchar**) &opt_base64_output_mode_str,
+ 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
/*
mysqlbinlog needs charsets knowledge, to be able to convert a charset
number found in binlog to a charset name (to be able to print things
@@ -788,7 +837,10 @@ static struct my_option my_long_options[] =
{"set-charset", OPT_SET_CHARSET,
"Add 'SET NAMES character_set' to the output.", (uchar**) &charset,
(uchar**) &charset, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
- {"short-form", 's', "Just show the queries, no extra info.",
+ {"short-form", 's', "Just show regular queries: no extra info and no "
+ "row-based events. This is for testing only, and should not be used in "
+ "production systems. If you want to suppress base64-output, consider "
+ "using --base64-output=never instead.",
(uchar**) &short_form, (uchar**) &short_form, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0,
0, 0},
{"socket", 'S', "Socket file to use for connection.",
@@ -973,6 +1025,15 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
case OPT_STOP_DATETIME:
stop_datetime= convert_str_to_timestamp(stop_datetime_str);
break;
+ case OPT_BASE64_OUTPUT_MODE:
+ if (argument == NULL)
+ opt_base64_output_mode= BASE64_OUTPUT_ALWAYS;
+ else
+ {
+ opt_base64_output_mode= (enum_base64_output_mode)
+ (find_type_or_exit(argument, &base64_output_mode_typelib, opt->name)-1);
+ }
+ break;
case 'V':
print_version();
exit(0);
@@ -1305,8 +1366,31 @@ err:
}
+/**
+ Reads the @c Format_description_log_event from the beginning of the
+ input file.
+
+ The @c Format_description_log_event is only read if it is outside
+ the range specified with @c --start-position; otherwise, it will be
+ seen later. If this is an old binlog, a fake @c
+ Format_description_event is created. This also prints a @c
+ Format_description_log_event to the output, unless we reach the
+ --start-position range. In this case, it is assumed that a @c
+ Format_description_log_event will be found when reading events the
+ usual way.
+
+ @param file The file to which a @c Format_description_log_event will
+ be printed.
+
+ @param description_event Pointer to the global @c
+ Format_description_log_event pointer. This will be updated if a new
+ Format_description_log_event is found.
+
+ @param print_event_info Context state needed to print events.
+*/
static void check_header(IO_CACHE* file,
- Format_description_log_event **description_event)
+ Format_description_log_event **description_event,
+ PRINT_EVENT_INFO *print_event_info)
{
uchar header[BIN_LOG_HEADER_SIZE];
uchar buf[PROBE_HEADER_LEN];
@@ -1369,10 +1453,12 @@ Could not read entry at offset %lu : Error in log format or read error",
}
else
{
- DBUG_PRINT("info",("buf[4]=%d", buf[4]));
+ DBUG_PRINT("info",("buf[EVENT_TYPE_OFFSET=%d]=%d",
+ EVENT_TYPE_OFFSET, buf[EVENT_TYPE_OFFSET]));
/* always test for a Start_v3, even if no --start-position */
- if (buf[4] == START_EVENT_V3) /* This is 3.23 or 4.x */
+ if (buf[EVENT_TYPE_OFFSET] == START_EVENT_V3)
{
+ /* This is 3.23 or 4.x */
if (uint4korr(buf + EVENT_LEN_OFFSET) <
(LOG_EVENT_MINIMAL_HEADER_LEN + START_V3_HEADER_LEN))
{
@@ -1384,8 +1470,9 @@ Could not read entry at offset %lu : Error in log format or read error",
}
else if (tmp_pos >= start_position)
break;
- else if (buf[4] == FORMAT_DESCRIPTION_EVENT) /* This is 5.0 */
+ else if (buf[EVENT_TYPE_OFFSET] == FORMAT_DESCRIPTION_EVENT)
{
+ /* This is 5.0 */
Format_description_log_event *new_description_event;
my_b_seek(file, tmp_pos); /* seek back to event's start */
if (!(new_description_event= (Format_description_log_event*)
@@ -1397,11 +1484,22 @@ Could not read entry at offset %lu : Error in log format or read error",
at offset %lu ; this could be a log format error or read error",
tmp_pos);
}
- delete *description_event;
- *description_event= new_description_event;
+ if (opt_base64_output_mode == BASE64_OUTPUT_AUTO
+ || opt_base64_output_mode == BASE64_OUTPUT_ALWAYS)
+ /*
+ process_event will delete *description_event and set it to
+ the new one, so we should not do it ourselves in this
+ case.
+ */
+ process_event(print_event_info, new_description_event, tmp_pos);
+ else
+ {
+ delete *description_event;
+ *description_event= new_description_event;
+ }
DBUG_PRINT("info",("Setting description_event"));
}
- else if (buf[4] == ROTATE_EVENT)
+ else if (buf[EVENT_TYPE_OFFSET] == ROTATE_EVENT)
{
Log_event *ev;
my_b_seek(file, tmp_pos); /* seek back to event's start */
@@ -1430,7 +1528,7 @@ static int dump_local_log_entries(PRINT_EVENT_INFO *print_event_info,
uchar tmp_buff[BIN_LOG_HEADER_SIZE];
int error= 0;
- if (logname && logname[0] != '-')
+ if (logname && strcmp(logname, "-") != 0)
{
if ((fd = my_open(logname, O_RDONLY | O_BINARY, MYF(MY_WME))) < 0)
return 1;
@@ -1440,7 +1538,7 @@ static int dump_local_log_entries(PRINT_EVENT_INFO *print_event_info,
my_close(fd, MYF(MY_WME));
return 1;
}
- check_header(file, &glob_description_event);
+ check_header(file, &glob_description_event, print_event_info);
}
else // reading from stdin;
{
@@ -1462,7 +1560,7 @@ static int dump_local_log_entries(PRINT_EVENT_INFO *print_event_info,
if (init_io_cache(file, fileno(stdin), 0, READ_CACHE, (my_off_t) 0,
0, MYF(MY_WME | MY_NABP | MY_DONT_CHECK_FILESIZE)))
return 1;
- check_header(file, &glob_description_event);
+ check_header(file, &glob_description_event, print_event_info);
if (start_position)
{
/* skip 'start_position' characters from stdin */
@@ -1554,6 +1652,9 @@ int main(int argc, char** argv)
exit(1);
}
+ if (opt_base64_output_mode == BASE64_OUTPUT_UNSPEC)
+ opt_base64_output_mode= BASE64_OUTPUT_AUTO;
+
my_set_max_open_files(open_files_limit);
MY_TMPDIR tmpdir;
diff --git a/client/mysqlcheck.c b/client/mysqlcheck.c
index fb2071ce10f..ce0eceeb907 100644
--- a/client/mysqlcheck.c
+++ b/client/mysqlcheck.c
@@ -206,6 +206,7 @@ static void dbDisconnect(char *host);
static void DBerror(MYSQL *mysql, const char *when);
static void safe_exit(int error);
static void print_result();
+static uint fixed_name_length(const char *name);
static char *fix_table_name(char *dest, char *src);
int what_to_do = 0;
@@ -438,14 +439,14 @@ static int process_selected_tables(char *db, char **table_names, int tables)
{
/*
We need table list in form `a`, `b`, `c`
- that's why we need 4 more chars added to to each table name
+ that's why we need 2 more chars added to to each table name
space is for more readable output in logs and in case of error
*/
char *table_names_comma_sep, *end;
int i, tot_length = 0;
for (i = 0; i < tables; i++)
- tot_length += strlen(*(table_names + i)) + 4;
+ tot_length+= fixed_name_length(*(table_names + i)) + 2;
if (!(table_names_comma_sep = (char *)
my_malloc((sizeof(char) * tot_length) + 4, MYF(MY_WME))))
@@ -463,23 +464,46 @@ static int process_selected_tables(char *db, char **table_names, int tables)
}
else
for (; tables > 0; tables--, table_names++)
- handle_request_for_tables(*table_names, strlen(*table_names));
+ handle_request_for_tables(*table_names, fixed_name_length(*table_names));
return 0;
} /* process_selected_tables */
-static char *fix_table_name(char *dest, char *src)
+static uint fixed_name_length(const char *name)
{
- char *db_sep;
+ const char *p;
+ uint extra_length= 2; /* count the first/last backticks */
+
+ for (p= name; *p; p++)
+ {
+ if (*p == '`')
+ extra_length++;
+ else if (*p == '.')
+ extra_length+= 2;
+ }
+ return (p - name) + extra_length;
+}
+
+static char *fix_table_name(char *dest, char *src)
+{
*dest++= '`';
- if ((db_sep= strchr(src, '.')))
+ for (; *src; src++)
{
- dest= strmake(dest, src, (uint) (db_sep - src));
- dest= strmov(dest, "`.`");
- src= db_sep + 1;
+ switch (*src) {
+ case '.': /* add backticks around '.' */
+ *dest++= '`';
+ *dest++= '.';
+ *dest++= '`';
+ break;
+ case '`': /* escape backtick character */
+ *dest++= '`';
+ /* fall through */
+ default:
+ *dest++= *src;
+ }
}
- dest= strxmov(dest, src, "`", NullS);
+ *dest++= '`';
return dest;
}
@@ -488,19 +512,22 @@ static int process_all_tables_in_db(char *database)
{
MYSQL_RES *res;
MYSQL_ROW row;
+ uint num_columns;
LINT_INIT(res);
if (use_db(database))
return 1;
- if (mysql_query(sock, "SHOW TABLE STATUS") ||
+ if (mysql_query(sock, "SHOW /*!50002 FULL*/ TABLES") ||
!((res= mysql_store_result(sock))))
return 1;
+ num_columns= mysql_num_fields(res);
+
if (opt_all_in_1)
{
/*
We need table list in form `a`, `b`, `c`
- that's why we need 4 more chars added to to each table name
+ that's why we need 2 more chars added to to each table name
space is for more readable output in logs and in case of error
*/
@@ -508,7 +535,7 @@ static int process_all_tables_in_db(char *database)
uint tot_length = 0;
while ((row = mysql_fetch_row(res)))
- tot_length += strlen(row[0]) + 4;
+ tot_length+= fixed_name_length(row[0]) + 2;
mysql_data_seek(res, 0);
if (!(tables=(char *) my_malloc(sizeof(char)*tot_length+4, MYF(MY_WME))))
@@ -518,12 +545,11 @@ static int process_all_tables_in_db(char *database)
}
for (end = tables + 1; (row = mysql_fetch_row(res)) ;)
{
- /* Skip tables with an engine of NULL (probably a view). */
- if (row[1])
- {
- end= fix_table_name(end, row[0]);
- *end++= ',';
- }
+ if ((num_columns == 2) && (strcmp(row[1], "VIEW") == 0))
+ continue;
+
+ end= fix_table_name(end, row[0]);
+ *end++= ',';
}
*--end = 0;
if (tot_length)
@@ -533,11 +559,13 @@ static int process_all_tables_in_db(char *database)
else
{
while ((row = mysql_fetch_row(res)))
- /* Skip tables with an engine of NULL (probably a view). */
- if (row[1])
- {
- handle_request_for_tables(row[0], strlen(row[0]));
- }
+ {
+ /* Skip views if we don't perform renaming. */
+ if ((what_to_do != DO_UPGRADE) && (num_columns == 2) && (strcmp(row[1], "VIEW") == 0))
+ continue;
+
+ handle_request_for_tables(row[0], fixed_name_length(row[0]));
+ }
}
mysql_free_result(res);
return 0;
@@ -826,7 +854,7 @@ int main(int argc, char **argv)
for (i = 0; i < tables4repair.elements ; i++)
{
char *name= (char*) dynamic_array_ptr(&tables4repair, i);
- handle_request_for_tables(name, strlen(name));
+ handle_request_for_tables(name, fixed_name_length(name));
}
}
end:
diff --git a/client/mysqldump.c b/client/mysqldump.c
index 9a83b609d0e..f119e0b40b0 100644
--- a/client/mysqldump.c
+++ b/client/mysqldump.c
@@ -90,7 +90,7 @@ static my_bool verbose= 0, opt_no_create_info= 0, opt_no_data= 0,
opt_drop=1,opt_keywords=0,opt_lock=1,opt_compress=0,
opt_delayed=0,create_options=1,opt_quoted=0,opt_databases=0,
opt_alldbs=0,opt_create_db=0,opt_lock_all_tables=0,
- opt_set_charset=0,
+ opt_set_charset=0, opt_dump_date=1,
opt_autocommit=0,opt_disable_keys=1,opt_xml=0,
opt_delete_master_logs=0, tty_password=0,
opt_single_transaction=0, opt_comments= 0, opt_compact= 0,
@@ -420,10 +420,17 @@ static struct my_option my_long_options[] =
"Creates a consistent snapshot by dumping all tables in a single "
"transaction. Works ONLY for tables stored in storage engines which "
"support multiversioning (currently only InnoDB does); the dump is NOT "
- "guaranteed to be consistent for other storage engines. Option "
- "automatically turns off --lock-tables.",
+ "guaranteed to be consistent for other storage engines. "
+ "While a --single-transaction dump is in process, to ensure a valid "
+ "dump file (correct table contents and binary log position), no other "
+ "connection should use the following statements: ALTER TABLE, DROP "
+ "TABLE, RENAME TABLE, TRUNCATE TABLE, as consistent snapshot is not "
+ "isolated from them. Option automatically turns off --lock-tables.",
(uchar**) &opt_single_transaction, (uchar**) &opt_single_transaction, 0,
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
+ {"dump-date", OPT_DUMP_DATE, "Put a dump date to the end of the output.",
+ (uchar**) &opt_dump_date, (uchar**) &opt_dump_date, 0,
+ GET_BOOL, NO_ARG, 1, 0, 0, 0, 0, 0},
{"skip-opt", OPT_SKIP_OPTIMIZATION,
"Disable --opt. Disables --add-drop-table, --add-locks, --create-options, --quick, --extended-insert, --lock-tables, --set-charset, and --disable-keys.",
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
@@ -583,7 +590,9 @@ static void write_header(FILE *sql_file, char *db_name)
{
if (opt_comments)
{
- fprintf(sql_file, "-- MySQL dump %s\n--\n", DUMP_VERSION);
+ fprintf(sql_file,
+ "-- MySQL dump %s Distrib %s, for %s (%s)\n--\n",
+ DUMP_VERSION, MYSQL_SERVER_VERSION, SYSTEM_TYPE, MACHINE_TYPE);
fprintf(sql_file, "-- Host: %s Database: %s\n",
current_host ? current_host : "localhost", db_name ? db_name :
"");
@@ -651,10 +660,15 @@ static void write_footer(FILE *sql_file)
fputs("\n", sql_file);
if (opt_comments)
{
- char time_str[20];
- get_date(time_str, GETDATE_DATE_TIME, 0);
- fprintf(sql_file, "-- Dump completed on %s\n",
- time_str);
+ if (opt_dump_date)
+ {
+ char time_str[20];
+ get_date(time_str, GETDATE_DATE_TIME, 0);
+ fprintf(sql_file, "-- Dump completed on %s\n",
+ time_str);
+ }
+ else
+ fprintf(sql_file, "-- Dump completed\n");
}
check_io(sql_file);
}
@@ -1032,8 +1046,10 @@ static int fetch_db_collation(const char *db_name,
char query[QUERY_LENGTH];
MYSQL_RES *db_cl_res;
MYSQL_ROW db_cl_row;
+ char quoted_database_buf[NAME_LEN*2+3];
+ char *qdatabase= quote_name(db_name, quoted_database_buf, 1);
- my_snprintf(query, sizeof (query), "use %s", db_name);
+ my_snprintf(query, sizeof (query), "use %s", qdatabase);
if (mysql_query_with_error_report(mysql, NULL, query))
return 1;
diff --git a/client/mysqlslap.c b/client/mysqlslap.c
index 02a0cbd04c5..d9bbeba9713 100644
--- a/client/mysqlslap.c
+++ b/client/mysqlslap.c
@@ -131,7 +131,8 @@ const char *delimiter= "\n";
const char *create_schema_string= "mysqlslap";
-static my_bool opt_preserve= 0, debug_info_flag= 0, debug_check_flag= 0;
+static my_bool opt_preserve= TRUE;
+static my_bool debug_info_flag= 0, debug_check_flag= 0;
static my_bool opt_only_print= FALSE;
static my_bool opt_compress= FALSE, tty_password= FALSE,
opt_silent= FALSE,
@@ -140,7 +141,8 @@ static my_bool opt_compress= FALSE, tty_password= FALSE,
auto_generate_sql= FALSE;
const char *auto_generate_sql_type= "mixed";
-static unsigned long connect_flags= CLIENT_MULTI_RESULTS;
+static unsigned long connect_flags= CLIENT_MULTI_RESULTS |
+ CLIENT_MULTI_STATEMENTS;
static int verbose, delimiter_length;
static uint commit_rate;
@@ -507,12 +509,12 @@ static struct my_option my_long_options[] =
(uchar**) &auto_generate_sql, (uchar**) &auto_generate_sql,
0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
{"auto-generate-sql-add-autoincrement", OPT_SLAP_AUTO_GENERATE_ADD_AUTO,
- "Add autoincrement to auto-generated tables.",
+ "Add an AUTO_INCREMENT column to auto-generated tables.",
(uchar**) &auto_generate_sql_autoincrement,
(uchar**) &auto_generate_sql_autoincrement,
0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
{"auto-generate-sql-execute-number", OPT_SLAP_AUTO_GENERATE_EXECUTE_QUERIES,
- "Set this number to generate a set number of queries to run.\n",
+ "Set this number to generate a set number of queries to run.",
(uchar**) &auto_actual_queries, (uchar**) &auto_actual_queries,
0, GET_ULL, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"auto-generate-sql-guid-primary", OPT_SLAP_AUTO_GENERATE_GUID_PRIMARY,
@@ -521,32 +523,32 @@ static struct my_option my_long_options[] =
(uchar**) &auto_generate_sql_guid_primary,
0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
{"auto-generate-sql-load-type", OPT_SLAP_AUTO_GENERATE_SQL_LOAD_TYPE,
- "Load types are mixed, update, write, key, or read. Default is mixed\n",
+ "Specify test load type: mixed, update, write, key, or read; default is mixed.",
(uchar**) &auto_generate_sql_type, (uchar**) &auto_generate_sql_type,
0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"auto-generate-sql-secondary-indexes",
OPT_SLAP_AUTO_GENERATE_SECONDARY_INDEXES,
- "Number of secondary indexes to add auto-generated tables.",
+ "Number of secondary indexes to add to auto-generated tables.",
(uchar**) &auto_generate_sql_secondary_indexes,
(uchar**) &auto_generate_sql_secondary_indexes, 0,
GET_UINT, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"auto-generate-sql-unique-query-number",
OPT_SLAP_AUTO_GENERATE_UNIQUE_QUERY_NUM,
- "Number of unique queries auto tests",
+ "Number of unique queries to generate for automatic tests.",
(uchar**) &auto_generate_sql_unique_query_number,
(uchar**) &auto_generate_sql_unique_query_number,
0, GET_ULL, REQUIRED_ARG, 10, 0, 0, 0, 0, 0},
{"auto-generate-sql-unique-write-number",
OPT_SLAP_AUTO_GENERATE_UNIQUE_WRITE_NUM,
- "Number of unique queries for auto-generate-sql-write-number",
+ "Number of unique queries to generate for auto-generate-sql-write-number.",
(uchar**) &auto_generate_sql_unique_write_number,
(uchar**) &auto_generate_sql_unique_write_number,
0, GET_ULL, REQUIRED_ARG, 10, 0, 0, 0, 0, 0},
{"auto-generate-sql-write-number", OPT_SLAP_AUTO_GENERATE_WRITE_NUM,
- "Number of rows to insert to used in read and write loads (default is 100).\n",
+ "Number of row inserts to perform for each thread (default is 100).",
(uchar**) &auto_generate_sql_number, (uchar**) &auto_generate_sql_number,
0, GET_ULL, REQUIRED_ARG, 100, 0, 0, 0, 0, 0},
- {"commit", OPT_SLAP_COMMIT, "Commit records after X number of statements.",
+ {"commit", OPT_SLAP_COMMIT, "Commit records every X number of statements.",
(uchar**) &commit_rate, (uchar**) &commit_rate, 0, GET_UINT, REQUIRED_ARG,
0, 0, 0, 0, 0, 0},
{"compress", 'C', "Use compression in server/client protocol.",
@@ -565,9 +567,14 @@ static struct my_option my_long_options[] =
"Generate CSV output to named file or to stdout if no file is named.",
(uchar**) &opt_csv_str, (uchar**) &opt_csv_str, 0, GET_STR,
OPT_ARG, 0, 0, 0, 0, 0, 0},
+#ifdef DBUG_OFF
+ {"debug", '#', "This is a non-debug version. Catch this and exit.",
+ 0, 0, 0, GET_DISABLED, OPT_ARG, 0, 0, 0, 0, 0, 0},
+#else
{"debug", '#', "Output debug log. Often this is 'd:t:o,filename'.",
(uchar**) &default_dbug_option, (uchar**) &default_dbug_option, 0, GET_STR,
OPT_ARG, 0, 0, 0, 0, 0, 0},
+#endif
{"debug-check", OPT_DEBUG_CHECK, "Check memory and open file usage at exit .",
(uchar**) &debug_check_flag, (uchar**) &debug_check_flag, 0,
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
@@ -577,7 +584,8 @@ static struct my_option my_long_options[] =
"Delimiter to use in SQL statements supplied in file or command line.",
(uchar**) &delimiter, (uchar**) &delimiter, 0, GET_STR, REQUIRED_ARG,
0, 0, 0, 0, 0, 0},
- {"detach", OPT_SLAP_DETACH, "Detach connections after X number of requests.",
+ {"detach", OPT_SLAP_DETACH,
+ "Detach (close and reopen) connections after X number of requests.",
(uchar**) &detach_rate, (uchar**) &detach_rate, 0, GET_UINT, REQUIRED_ARG,
0, 0, 0, 0, 0, 0},
{"engine", 'e', "Storage engine to use for creating the table.",
@@ -588,11 +596,11 @@ static struct my_option my_long_options[] =
{"iterations", 'i', "Number of times to run the tests.", (uchar**) &iterations,
(uchar**) &iterations, 0, GET_UINT, REQUIRED_ARG, 1, 0, 0, 0, 0, 0},
{"number-char-cols", 'x',
- "Number of VARCHAR columns to create table with if specifying --auto-generate-sql ",
+ "Number of VARCHAR columns to create in table if specifying --auto-generate-sql.",
(uchar**) &num_char_cols_opt, (uchar**) &num_char_cols_opt, 0, GET_STR, REQUIRED_ARG,
0, 0, 0, 0, 0, 0},
{"number-int-cols", 'y',
- "Number of INT columns to create table with if specifying --auto-generate-sql.",
+ "Number of INT columns to create in table if specifying --auto-generate-sql.",
(uchar**) &num_int_cols_opt, (uchar**) &num_int_cols_opt, 0, GET_STR, REQUIRED_ARG,
0, 0, 0, 0, 0, 0},
{"number-of-queries", OPT_MYSQL_NUMBER_OF_QUERY,
@@ -615,30 +623,25 @@ static struct my_option my_long_options[] =
(uchar**) &opt_mysql_port, 0, GET_UINT, REQUIRED_ARG, MYSQL_PORT, 0, 0, 0, 0,
0},
{"post-query", OPT_SLAP_POST_QUERY,
- "Query to run or file containing query to run after executing.",
+ "Query to run or file containing query to execute after tests have completed.",
(uchar**) &user_supplied_post_statements,
(uchar**) &user_supplied_post_statements,
0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"post-system", OPT_SLAP_POST_SYSTEM,
- "System() string to run after the load has completed.",
+ "system() string to execute after tests have completed.",
(uchar**) &post_system,
(uchar**) &post_system,
0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"pre-query", OPT_SLAP_PRE_QUERY,
- "Query to run or file containing query to run before executing.",
+ "Query to run or file containing query to execute before running tests.",
(uchar**) &user_supplied_pre_statements,
(uchar**) &user_supplied_pre_statements,
0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"pre-system", OPT_SLAP_PRE_SYSTEM,
- "System() string to before load has completed.",
+ "system() string to execute before running tests.",
(uchar**) &pre_system,
(uchar**) &pre_system,
0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
- {"preserve-schema", OPT_MYSQL_PRESERVE_SCHEMA,
- "Preserve the schema from the mysqlslap run, this happens unless "
- "--auto-generate-sql or --create are used.",
- (uchar**) &opt_preserve, (uchar**) &opt_preserve, 0, GET_BOOL,
- NO_ARG, TRUE, 0, 0, 0, 0, 0},
{"protocol", OPT_MYSQL_PROTOCOL,
"The protocol of connection (tcp,socket,pipe,memory).",
0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
@@ -663,7 +666,7 @@ static struct my_option my_long_options[] =
(uchar**) &user, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
#endif
{"verbose", 'v',
- "More verbose output; You can use this multiple times to get even more "
+ "More verbose output; you can use this multiple times to get even more "
"verbose output.", (uchar**) &verbose, (uchar**) &verbose, 0,
GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
{"version", 'V', "Output version information and exit.", 0, 0, 0, GET_NO_ARG,
@@ -1139,12 +1142,9 @@ get_options(int *argc,char ***argv)
if (!user)
user= (char *)"root";
+ /* If something is created we clean it up, otherwise we leave schemas alone */
if (create_string || auto_generate_sql)
- {
- if (verbose >= 1)
- fprintf(stderr, "Turning off preserve-schema!\n");
opt_preserve= FALSE;
- }
if (auto_generate_sql && (create_string || user_supplied_query))
{
@@ -1766,7 +1766,8 @@ run_scheduler(stats *sptr, statement *stmts, uint concur, ulonglong limit)
pthread_handler_t run_task(void *p)
{
ulonglong counter= 0, queries;
- ulonglong trans_counter;
+ ulonglong detach_counter;
+ unsigned int commit_counter;
MYSQL *mysql;
MYSQL_RES *result;
MYSQL_ROW row;
@@ -1810,12 +1811,16 @@ pthread_handler_t run_task(void *p)
printf("connected!\n");
queries= 0;
+ commit_counter= 0;
+ if (commit_rate)
+ run_query(mysql, "SET AUTOCOMMIT=0", strlen("SET AUTOCOMMIT=0"));
+
limit_not_met:
- for (ptr= con->stmt, trans_counter= 0;
+ for (ptr= con->stmt, detach_counter= 0;
ptr && ptr->length;
- ptr= ptr->next, trans_counter++)
+ ptr= ptr->next, detach_counter++)
{
- if (!opt_only_print && detach_rate && !(trans_counter % detach_rate))
+ if (!opt_only_print && detach_rate && !(detach_counter % detach_rate))
{
mysql_close(mysql);
@@ -1877,17 +1882,23 @@ limit_not_met:
}
}
- if (mysql_field_count(mysql))
+ do
{
- result= mysql_store_result(mysql);
- while ((row = mysql_fetch_row(result)))
- counter++;
- mysql_free_result(result);
- }
+ if (mysql_field_count(mysql))
+ {
+ result= mysql_store_result(mysql);
+ while ((row = mysql_fetch_row(result)))
+ counter++;
+ mysql_free_result(result);
+ }
+ } while(mysql_next_result(mysql) == 0);
queries++;
- if (commit_rate && commit_rate <= trans_counter)
+ if (commit_rate && (++commit_counter == commit_rate))
+ {
+ commit_counter= 0;
run_query(mysql, "COMMIT", strlen("COMMIT"));
+ }
if (con->limit && queries == con->limit)
goto end;
diff --git a/client/mysqltest.c b/client/mysqltest.c
index 04226719888..31e419244e6 100644
--- a/client/mysqltest.c
+++ b/client/mysqltest.c
@@ -2670,7 +2670,7 @@ void do_copy_file(struct st_command *command)
command command handle
DESCRIPTION
- chmod_file <octal> <file_name>
+ chmod <octal> <file_name>
Change file permission of <file_name>
*/
@@ -3654,7 +3654,7 @@ void do_get_file_name(struct st_command *command,
if (*p)
*p++= 0;
command->last_argument= p;
- strmake(dest, name, dest_max_len);
+ strmake(dest, name, dest_max_len - 1);
}
@@ -5050,7 +5050,7 @@ static struct my_option my_long_options[] =
"Don't use the memory allocation checking.", 0, 0, 0, GET_NO_ARG, NO_ARG,
0, 0, 0, 0, 0, 0},
{"sleep", 'T', "Sleep always this many seconds on sleep commands.",
- (uchar**) &opt_sleep, (uchar**) &opt_sleep, 0, GET_INT, REQUIRED_ARG, -1, 0, 0,
+ (uchar**) &opt_sleep, (uchar**) &opt_sleep, 0, GET_INT, REQUIRED_ARG, -1, -1, 0,
0, 0, 0},
{"socket", 'S', "Socket file to use for connection.",
(uchar**) &unix_sock, (uchar**) &unix_sock, 0, GET_STR, REQUIRED_ARG, 0, 0, 0,
@@ -6975,7 +6975,7 @@ int main(int argc, char **argv)
if (save_file[0])
{
- strmake(command->require_file, save_file, sizeof(save_file));
+ strmake(command->require_file, save_file, sizeof(save_file) - 1);
save_file[0]= 0;
}
run_query(cur_con, command, flags);
@@ -8018,7 +8018,6 @@ REPLACE *init_replace(char * *from, char * *to,uint count,
if (!len)
{
errno=EINVAL;
- my_message(0,"No to-string for last from-string",MYF(ME_BELL));
DBUG_RETURN(0);
}
states+=len+1;
diff --git a/cmd-line-utils/libedit/Makefile.am b/cmd-line-utils/libedit/Makefile.am
index b87f11a8de2..23ee20894ec 100644
--- a/cmd-line-utils/libedit/Makefile.am
+++ b/cmd-line-utils/libedit/Makefile.am
@@ -5,8 +5,7 @@
ASRC = $(srcdir)/vi.c $(srcdir)/emacs.c $(srcdir)/common.c
AHDR = vi.h emacs.h common.h
-# Make sure to include stuff from this directory first, to get right "config.h"
-INCLUDES = -I. -I$(top_builddir)/include -I$(top_srcdir)/include
+INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include
noinst_LIBRARIES = libedit.a
@@ -31,7 +30,14 @@ EXTRA_DIST = makelist.sh np/unvis.c np/strlcpy.c np/vis.c np/vis.h np/strlcat.c
CLEANFILES = makelist common.h emacs.h vi.h fcns.h help.h fcns.c help.c
-DEFS = -DUNDEF_THREADS_HACK -DHAVE_CONFIG_H -DNO_KILL_INTR
+# Make sure to include stuff from this directory first, to get right "config.h"
+# Automake puts into DEFAULT_INCLUDES this source and corresponding
+# build directory together with ../../include to let all make files
+# find the central "config.h". This variable is used before INCLUDES
+# above. But in automake 1.10 the order of these are changed. Put the
+# includes of this directory into DEFS to always be sure it is first
+# before DEFAULT_INCLUDES on the compile line.
+DEFS = -DUNDEF_THREADS_HACK -DHAVE_CONFIG_H -DNO_KILL_INTR -I. -I$(srcdir)
SUFFIXES = .sh
diff --git a/cmd-line-utils/readline/INSTALL b/cmd-line-utils/readline/INSTALL
index cb4a06fb701..f360b9e7907 100644
--- a/cmd-line-utils/readline/INSTALL
+++ b/cmd-line-utils/readline/INSTALL
@@ -1,7 +1,7 @@
Basic Installation
==================
-These are installation instructions for Readline-5.0.
+These are installation instructions for Readline-5.2.
The simplest way to compile readline is:
@@ -238,6 +238,9 @@ SHLIB_XLDFLAGS Additional flags to pass to SHOBJ_LD for shared library
SHLIB_LIBS Any additional libraries that shared libraries should be
linked against when they are created.
+SHLIB_LIBPREF The prefix to use when generating the filename of the shared
+ library. The default is `lib'; Cygwin uses `cyg'.
+
SHLIB_LIBSUFF The suffix to add to `libreadline' and `libhistory' when
generating the filename of the shared library. Many systems
use `so'; HP-UX uses `sl'.
@@ -254,6 +257,17 @@ SHLIB_LIBVERSION The string to append to the filename to indicate the version
numbers; use `$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' on those systems.
Other Unix versions use different schemes.
+SHLIB_DLLVERSION The version number for shared libraries that determines API
+ compatibility between readline versions and the underlying
+ system. Used only on Cygwin. Defaults to $SHLIB_MAJOR, but
+ can be overridden at configuration time by defining DLLVERSION
+ in the environment.
+
+SHLIB_DOT The character used to separate the name of the shared library
+ from the suffix and version information. The default is `.';
+ systems like Cygwin which don't separate version information
+ from the library name should set this to the empty string.
+
SHLIB_STATUS Set this to `supported' when you have defined the other
necessary variables. Make uses this to determine whether
or not shared library creation should be attempted. If
diff --git a/cmd-line-utils/readline/README b/cmd-line-utils/readline/README
index ac4e3a767f9..8da99626aa1 100644
--- a/cmd-line-utils/readline/README
+++ b/cmd-line-utils/readline/README
@@ -1,7 +1,7 @@
Introduction
============
-This is the Gnu Readline library, version 5.0.
+This is the Gnu Readline library, version 5.2.
The Readline library provides a set of functions for use by applications
that allow users to edit command lines as they are typed in. Both
@@ -102,6 +102,9 @@ SHLIB_XLDFLAGS Additional flags to pass to SHOBJ_LD for shared library
SHLIB_LIBS Any additional libraries that shared libraries should be
linked against when they are created.
+SHLIB_LIBPREF The prefix to use when generating the filename of the shared
+ library. The default is `lib'; Cygwin uses `cyg'.
+
SHLIB_LIBSUFF The suffix to add to `libreadline' and `libhistory' when
generating the filename of the shared library. Many systems
use `so'; HP-UX uses `sl'.
@@ -118,6 +121,17 @@ SHLIB_LIBVERSION The string to append to the filename to indicate the version
numbers; use `$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' on those systems.
Other Unix versions use different schemes.
+SHLIB_DLLVERSION The version number for shared libraries that determines API
+ compatibility between readline versions and the underlying
+ system. Used only on Cygwin. Defaults to $SHLIB_MAJOR, but
+ can be overridden at configuration time by defining DLLVERSION
+ in the environment.
+
+SHLIB_DOT The character used to separate the name of the shared library
+ from the suffix and version information. The default is `.';
+ systems like Cygwin which don't separate version information
+ from the library name should set this to the empty string.
+
SHLIB_STATUS Set this to `supported' when you have defined the other
necessary variables. Make uses this to determine whether
or not shared library creation should be attempted.
@@ -169,4 +183,4 @@ list (mirrored to the Usenet newsgroup gnu.bash.bug) often contains
Readline bug reports and fixes.
Chet Ramey
-chet@po.cwru.edu
+chet.ramey@case.edu
diff --git a/cmd-line-utils/readline/bind.c b/cmd-line-utils/readline/bind.c
index 568c3e8776a..baed1dfad49 100644
--- a/cmd-line-utils/readline/bind.c
+++ b/cmd-line-utils/readline/bind.c
@@ -1,6 +1,6 @@
/* bind.c -- key binding and startup file support for the readline library. */
-/* Copyright (C) 1987, 1989, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2006 Free Software Foundation, Inc.
This file is part of the GNU Readline Library, a library for
reading lines of text with interactive input and history editing.
@@ -26,7 +26,9 @@
# include <floss.h>
#endif
-#include "config_readline.h"
+#if defined (HAVE_CONFIG_H)
+# include "config_readline.h"
+#endif
#include <stdio.h>
#include <sys/types.h>
@@ -75,6 +77,9 @@ static char *_rl_read_file PARAMS((char *, size_t *));
static void _rl_init_file_error PARAMS((const char *));
static int _rl_read_init_file PARAMS((const char *, int));
static int glean_key_from_name PARAMS((char *));
+static int find_boolean_var PARAMS((const char *));
+
+static char *_rl_get_string_variable_value PARAMS((const char *));
static int substring_member_of_array PARAMS((char *, const char **));
static int currently_reading_init_file;
@@ -337,10 +342,9 @@ rl_generic_bind (type, keyseq, data, map)
KEYMAP_ENTRY k;
k.function = 0;
- k.type= 0;
/* If no keys to bind to, exit right away. */
- if (!keyseq || !*keyseq)
+ if (keyseq == 0 || *keyseq == 0)
{
if (type == ISMACR)
free (data);
@@ -366,9 +370,12 @@ rl_generic_bind (type, keyseq, data, map)
ic = uc;
if (ic < 0 || ic >= KEYMAP_SIZE)
- return -1;
+ {
+ free (keys);
+ return -1;
+ }
- if (_rl_convert_meta_chars_to_ascii && META_CHAR (ic))
+ if (META_CHAR (ic) && _rl_convert_meta_chars_to_ascii)
{
ic = UNMETA (ic);
if (map[ESC].type == ISKMAP)
@@ -435,7 +442,7 @@ rl_translate_keyseq (seq, array, len)
{
register int i, c, l, temp;
- for (i = l = 0; (c = seq[i]); i++)
+ for (i = l = 0; c = seq[i]; i++)
{
if (c == '\\')
{
@@ -458,8 +465,24 @@ rl_translate_keyseq (seq, array, len)
}
else if (c == 'M')
{
- i++;
- array[l++] = ESC; /* ESC is meta-prefix */
+ i++; /* seq[i] == '-' */
+ /* XXX - obey convert-meta setting */
+ if (_rl_convert_meta_chars_to_ascii && _rl_keymap[ESC].type == ISKMAP)
+ array[l++] = ESC; /* ESC is meta-prefix */
+ else if (seq[i+1] == '\\' && seq[i+2] == 'C' && seq[i+3] == '-')
+ {
+ i += 4;
+ temp = (seq[i] == '?') ? RUBOUT : CTRL (_rl_to_upper (seq[i]));
+ array[l++] = META (temp);
+ }
+ else
+ {
+ /* This doesn't yet handle things like \M-\a, which may
+ or may not have any reasonable meaning. You're
+ probably better off using straight octal or hex. */
+ i++;
+ array[l++] = META (seq[i]);
+ }
}
else if (c == 'C')
{
@@ -554,6 +577,11 @@ rl_untranslate_keyseq (seq)
kseq[i++] = '-';
c = UNMETA (c);
}
+ else if (c == ESC)
+ {
+ kseq[i++] = '\\';
+ c = 'e';
+ }
else if (CTRL_CHAR (c))
{
kseq[i++] = '\\';
@@ -602,7 +630,12 @@ _rl_untranslate_macro_value (seq)
*r++ = '-';
c = UNMETA (c);
}
- else if (CTRL_CHAR (c) && c != ESC)
+ else if (c == ESC)
+ {
+ *r++ = '\\';
+ c = 'e';
+ }
+ else if (CTRL_CHAR (c))
{
*r++ = '\\';
*r++ = 'C';
@@ -661,7 +694,7 @@ rl_function_of_keyseq (keyseq, map, type)
{
register int i;
- if (!map)
+ if (map == 0)
map = _rl_keymap;
for (i = 0; keyseq && keyseq[i]; i++)
@@ -670,25 +703,27 @@ rl_function_of_keyseq (keyseq, map, type)
if (META_CHAR (ic) && _rl_convert_meta_chars_to_ascii)
{
- if (map[ESC].type != ISKMAP)
+ if (map[ESC].type == ISKMAP)
+ {
+ map = FUNCTION_TO_KEYMAP (map, ESC);
+ ic = UNMETA (ic);
+ }
+ /* XXX - should we just return NULL here, since this obviously
+ doesn't match? */
+ else
{
if (type)
*type = map[ESC].type;
return (map[ESC].function);
}
- else
- {
- map = FUNCTION_TO_KEYMAP (map, ESC);
- ic = UNMETA (ic);
- }
}
if (map[ic].type == ISKMAP)
{
/* If this is the last key in the key sequence, return the
map. */
- if (!keyseq[i + 1])
+ if (keyseq[i + 1] == '\0')
{
if (type)
*type = ISKMAP;
@@ -698,7 +733,12 @@ rl_function_of_keyseq (keyseq, map, type)
else
map = FUNCTION_TO_KEYMAP (map, ic);
}
- else
+ /* If we're not at the end of the key sequence, and the current key
+ is bound to something other than a keymap, then the entire key
+ sequence is not bound. */
+ else if (map[ic].type != ISKMAP && keyseq[i+1])
+ return ((rl_command_func_t *)NULL);
+ else /* map[ic].type != ISKMAP && keyseq[i+1] == 0 */
{
if (type)
*type = map[ic].type;
@@ -736,8 +776,7 @@ _rl_read_file (filename, sizep)
file_size = (size_t)finfo.st_size;
/* check for overflow on very large files */
- if ((long long) file_size != (long long) finfo.st_size ||
- file_size + 1 < file_size)
+ if (file_size != finfo.st_size || file_size + 1 < file_size)
{
if (file >= 0)
close (file);
@@ -767,8 +806,8 @@ _rl_read_file (filename, sizep)
/* Re-read the current keybindings file. */
int
-rl_re_read_init_file (int count __attribute__((unused)),
- int ignore __attribute__((unused)))
+rl_re_read_init_file (count, ignore)
+ int count, ignore;
{
int r;
r = rl_read_init_file ((const char *)NULL);
@@ -781,6 +820,7 @@ rl_re_read_init_file (int count __attribute__((unused)),
1. the filename used for the previous call
2. the value of the shell variable `INPUTRC'
3. ~/.inputrc
+ 4. /etc/inputrc
If the file existed and could be opened and read, 0 is returned,
otherwise errno is returned. */
int
@@ -789,17 +829,18 @@ rl_read_init_file (filename)
{
/* Default the filename. */
if (filename == 0)
+ filename = last_readline_init_file;
+ if (filename == 0)
+ filename = sh_get_env_value ("INPUTRC");
+ if (filename == 0 || *filename == 0)
{
- filename = last_readline_init_file;
- if (filename == 0)
- filename = sh_get_env_value ("INPUTRC");
- if (filename == 0)
- filename = DEFAULT_INPUTRC;
+ filename = DEFAULT_INPUTRC;
+ /* Try to read DEFAULT_INPUTRC; fall back to SYS_INPUTRC on failure */
+ if (_rl_read_init_file (filename, 0) == 0)
+ return 0;
+ filename = SYS_INPUTRC;
}
- if (*filename == 0)
- filename = DEFAULT_INPUTRC;
-
#if defined (__MSDOS__)
if (_rl_read_init_file (filename, 0) == 0)
return 0;
@@ -989,7 +1030,8 @@ parser_if (args)
/* Invert the current parser state if there is anything on the stack. */
static int
-parser_else (char *args __attribute__((unused)))
+parser_else (args)
+ char *args;
{
register int i;
@@ -1019,7 +1061,8 @@ parser_else (char *args __attribute__((unused)))
/* Terminate a conditional, popping the value of
_rl_parsing_conditionalized_out from the stack. */
static int
-parser_endif (char *args __attribute__((unused)))
+parser_endif (args)
+ char *args;
{
if (if_stack_depth)
_rl_parsing_conditionalized_out = if_stack[--if_stack_depth];
@@ -1142,7 +1185,7 @@ rl_parse_and_bind (string)
{
int passc = 0;
- for (i = 1; (c = string[i]); i++)
+ for (i = 1; c = string[i]; i++)
{
if (passc)
{
@@ -1183,9 +1226,9 @@ rl_parse_and_bind (string)
/* If this is a command to set a variable, then do that. */
if (_rl_stricmp (string, "set") == 0)
{
- char *var = string + i;
- char *value;
+ char *var, *value, *e;
+ var = string + i;
/* Make VAR point to start of variable name. */
while (*var && whitespace (*var)) var++;
@@ -1196,6 +1239,20 @@ rl_parse_and_bind (string)
*value++ = '\0';
while (*value && whitespace (*value)) value++;
+ /* Strip trailing whitespace from values to boolean variables. Temp
+ fix until I get a real quoted-string parser here. */
+ i = find_boolean_var (var);
+ if (i >= 0)
+ {
+ /* remove trailing whitespace */
+ e = value + strlen (value) - 1;
+ while (e >= value && whitespace (*e))
+ e--;
+ e++; /* skip back to whitespace or EOS */
+ if (*e && e >= value)
+ *e = '\0';
+ }
+
rl_variable_bind (var, value);
return 0;
}
@@ -1216,9 +1273,10 @@ rl_parse_and_bind (string)
the quoted string delimiter, like the shell. */
if (*funname == '\'' || *funname == '"')
{
- int delimiter = string[i++], passc;
+ int delimiter, passc;
- for (passc = 0; (c = string[i]); i++)
+ delimiter = string[i++];
+ for (passc = 0; c = string[i]; i++)
{
if (passc)
{
@@ -1353,6 +1411,7 @@ static struct {
int *value;
int flags;
} boolean_varlist [] = {
+ { "bind-tty-special-chars", &_rl_bind_stty_chars, 0 },
{ "blink-matching-paren", &rl_blink_matching_paren, V_SPECIAL },
{ "byte-oriented", &rl_byte_oriented, 0 },
{ "completion-ignore-case", &_rl_completion_case_fold, 0 },
@@ -1377,7 +1436,7 @@ static struct {
#if defined (VISIBLE_STATS)
{ "visible-stats", &rl_visible_stats, 0 },
#endif /* VISIBLE_STATS */
- { (char *)NULL, (int *)NULL, 0 }
+ { (char *)NULL, (int *)NULL }
};
static int
@@ -1446,7 +1505,7 @@ static struct {
{ "editing-mode", V_STRING, sv_editmode },
{ "isearch-terminators", V_STRING, sv_isrchterm },
{ "keymap", V_STRING, sv_keymap },
- { (char *)NULL, 0, 0 }
+ { (char *)NULL, 0 }
};
static int
@@ -1466,13 +1525,32 @@ find_string_var (name)
values result in 0 (false). */
static int
bool_to_int (value)
-const char *value;
+ const char *value;
{
return (value == 0 || *value == '\0' ||
(_rl_stricmp (value, "on") == 0) ||
(value[0] == '1' && value[1] == '\0'));
}
+char *
+rl_variable_value (name)
+ const char *name;
+{
+ register int i;
+
+ /* Check for simple variables first. */
+ i = find_boolean_var (name);
+ if (i >= 0)
+ return (*boolean_varlist[i].value ? "on" : "off");
+
+ i = find_string_var (name);
+ if (i >= 0)
+ return (_rl_get_string_variable_value (string_varlist[i].name));
+
+ /* Unknown variable names return NULL. */
+ return 0;
+}
+
int
rl_variable_bind (name, value)
const char *name, *value;
@@ -1725,13 +1803,13 @@ char *
rl_get_keymap_name_from_edit_mode ()
{
if (rl_editing_mode == emacs_mode)
- return (char*) "emacs";
+ return "emacs";
#if defined (VI_MODE)
else if (rl_editing_mode == vi_mode)
- return (char*) "vi";
+ return "vi";
#endif /* VI_MODE */
else
- return (char*) "none";
+ return "none";
}
/* **************************************************************** */
@@ -1899,12 +1977,16 @@ rl_invoking_keyseqs_in_map (function, map)
char *keyname = (char *)xmalloc (6 + strlen (seqs[i]));
if (key == ESC)
-#if 0
- sprintf (keyname, "\\e");
-#else
- /* XXX - experimental */
- sprintf (keyname, "\\M-");
-#endif
+ {
+ /* If ESC is the meta prefix and we're converting chars
+ with the eighth bit set to ESC-prefixed sequences, then
+ we can use \M-. Otherwise we need to use the sequence
+ for ESC. */
+ if (_rl_convert_meta_chars_to_ascii && map[ESC].type == ISKMAP)
+ sprintf (keyname, "\\M-");
+ else
+ sprintf (keyname, "\\e");
+ }
else if (CTRL_CHAR (key))
sprintf (keyname, "\\C-%c", _rl_to_lower (UNCTRL (key)));
else if (key == RUBOUT)
@@ -1966,7 +2048,7 @@ rl_function_dumper (print_readably)
fprintf (rl_outstream, "\n");
- for (i = 0; (name = names[i]); i++)
+ for (i = 0; name = names[i]; i++)
{
rl_command_func_t *function;
char **invokers;
@@ -2025,8 +2107,8 @@ rl_function_dumper (print_readably)
rl_outstream. If an explicit argument is given, then print
the output in such a way that it can be read back in. */
int
-rl_dump_functions (int count __attribute__((unused)),
- int key __attribute__((unused)))
+rl_dump_functions (count, key)
+ int count, key;
{
if (rl_dispatching)
fprintf (rl_outstream, "\r\n");
@@ -2105,7 +2187,8 @@ rl_macro_dumper (print_readably)
}
int
-rl_dump_macros(int count __attribute__((unused)), int key __attribute__((unused)))
+rl_dump_macros (count, key)
+ int count, key;
{
if (rl_dispatching)
fprintf (rl_outstream, "\r\n");
@@ -2114,12 +2197,67 @@ rl_dump_macros(int count __attribute__((unused)), int key __attribute__((unused)
return (0);
}
+static char *
+_rl_get_string_variable_value (name)
+ const char *name;
+{
+ static char numbuf[32];
+ char *ret;
+
+ if (_rl_stricmp (name, "bell-style") == 0)
+ {
+ switch (_rl_bell_preference)
+ {
+ case NO_BELL:
+ return "none";
+ case VISIBLE_BELL:
+ return "visible";
+ case AUDIBLE_BELL:
+ default:
+ return "audible";
+ }
+ }
+ else if (_rl_stricmp (name, "comment-begin") == 0)
+ return (_rl_comment_begin ? _rl_comment_begin : RL_COMMENT_BEGIN_DEFAULT);
+ else if (_rl_stricmp (name, "completion-query-items") == 0)
+ {
+ sprintf (numbuf, "%d", rl_completion_query_items);
+ return (numbuf);
+ }
+ else if (_rl_stricmp (name, "editing-mode") == 0)
+ return (rl_get_keymap_name_from_edit_mode ());
+ else if (_rl_stricmp (name, "isearch-terminators") == 0)
+ {
+ if (_rl_isearch_terminators == 0)
+ return 0;
+ ret = _rl_untranslate_macro_value (_rl_isearch_terminators);
+ if (ret)
+ {
+ strncpy (numbuf, ret, sizeof (numbuf) - 1);
+ free (ret);
+ numbuf[sizeof(numbuf) - 1] = '\0';
+ }
+ else
+ numbuf[0] = '\0';
+ return numbuf;
+ }
+ else if (_rl_stricmp (name, "keymap") == 0)
+ {
+ ret = rl_get_keymap_name (_rl_keymap);
+ if (ret == 0)
+ ret = rl_get_keymap_name_from_edit_mode ();
+ return (ret ? ret : "none");
+ }
+ else
+ return (0);
+}
+
void
rl_variable_dumper (print_readably)
int print_readably;
{
int i;
- const char *kname;
+ char *v;
for (i = 0; boolean_varlist[i].name; i++)
{
@@ -2131,70 +2269,24 @@ rl_variable_dumper (print_readably)
*boolean_varlist[i].value ? "on" : "off");
}
- /* bell-style */
- switch (_rl_bell_preference)
- {
- case NO_BELL:
- kname = "none"; break;
- case VISIBLE_BELL:
- kname = "visible"; break;
- case AUDIBLE_BELL:
- default:
- kname = "audible"; break;
- }
- if (print_readably)
- fprintf (rl_outstream, "set bell-style %s\n", kname);
- else
- fprintf (rl_outstream, "bell-style is set to `%s'\n", kname);
-
- /* comment-begin */
- if (print_readably)
- fprintf (rl_outstream, "set comment-begin %s\n", _rl_comment_begin ? _rl_comment_begin : RL_COMMENT_BEGIN_DEFAULT);
- else
- fprintf (rl_outstream, "comment-begin is set to `%s'\n", _rl_comment_begin ? _rl_comment_begin : RL_COMMENT_BEGIN_DEFAULT);
-
- /* completion-query-items */
- if (print_readably)
- fprintf (rl_outstream, "set completion-query-items %d\n", rl_completion_query_items);
- else
- fprintf (rl_outstream, "completion-query-items is set to `%d'\n", rl_completion_query_items);
-
- /* editing-mode */
- if (print_readably)
- fprintf (rl_outstream, "set editing-mode %s\n", (rl_editing_mode == emacs_mode) ? "emacs" : "vi");
- else
- fprintf (rl_outstream, "editing-mode is set to `%s'\n", (rl_editing_mode == emacs_mode) ? "emacs" : "vi");
-
- /* isearch-terminators */
- if (_rl_isearch_terminators)
+ for (i = 0; string_varlist[i].name; i++)
{
- char *disp;
-
- disp = _rl_untranslate_macro_value (_rl_isearch_terminators);
-
+ v = _rl_get_string_variable_value (string_varlist[i].name);
+ if (v == 0) /* _rl_isearch_terminators can be NULL */
+ continue;
if (print_readably)
- fprintf (rl_outstream, "set isearch-terminators \"%s\"\n", disp);
+ fprintf (rl_outstream, "set %s %s\n", string_varlist[i].name, v);
else
- fprintf (rl_outstream, "isearch-terminators is set to \"%s\"\n", disp);
-
- free (disp);
+ fprintf (rl_outstream, "%s is set to `%s'\n", string_varlist[i].name, v);
}
-
- /* keymap */
- kname = rl_get_keymap_name (_rl_keymap);
- if (kname == 0)
- kname = rl_get_keymap_name_from_edit_mode ();
- if (print_readably)
- fprintf (rl_outstream, "set keymap %s\n", kname ? kname : "none");
- else
- fprintf (rl_outstream, "keymap is set to `%s'\n", kname ? kname : "none");
}
/* Print all of the current variables and their values to
rl_outstream. If an explicit argument is given, then print
the output in such a way that it can be read back in. */
int
-rl_dump_variables(int count __attribute__((unused)), int key __attribute__((unused)))
+rl_dump_variables (count, key)
+ int count, key;
{
if (rl_dispatching)
fprintf (rl_outstream, "\r\n");
diff --git a/cmd-line-utils/readline/callback.c b/cmd-line-utils/readline/callback.c
index 0807f137b92..2f7e4b78057 100644
--- a/cmd-line-utils/readline/callback.c
+++ b/cmd-line-utils/readline/callback.c
@@ -1,6 +1,6 @@
/* callback.c -- functions to use readline as an X `callback' mechanism. */
-/* Copyright (C) 1987, 1989, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
This file is part of the GNU Readline Library, a library for
reading lines of text with interactive input and history editing.
@@ -21,7 +21,9 @@
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
#define READLINE_LIBRARY
-#include "config_readline.h"
+#if defined (HAVE_CONFIG_H)
+# include "config_readline.h"
+#endif
#include "rlconf.h"
@@ -41,10 +43,16 @@
#include "rldefs.h"
#include "readline.h"
#include "rlprivate.h"
+#include "xmalloc.h"
+
+/* Private data for callback registration functions. See comments in
+ rl_callback_read_char for more details. */
+_rl_callback_func_t *_rl_callback_func = 0;
+_rl_callback_generic_arg *_rl_callback_data = 0;
/* **************************************************************** */
/* */
-/* Callback Readline Functions */
+/* Callback Readline Functions */
/* */
/* **************************************************************** */
@@ -70,7 +78,8 @@ _rl_callback_newline ()
{
in_handler = 1;
- (*rl_prep_term_function) (_rl_meta_flag);
+ if (rl_prep_term_function)
+ (*rl_prep_term_function) (_rl_meta_flag);
#if defined (HANDLE_SIGNALS)
rl_set_signals ();
@@ -87,6 +96,7 @@ rl_callback_handler_install (prompt, linefunc)
rl_vcpfunc_t *linefunc;
{
rl_set_prompt (prompt);
+ RL_SETSTATE (RL_STATE_CALLBACK);
rl_linefunc = linefunc;
_rl_callback_newline ();
}
@@ -96,7 +106,8 @@ void
rl_callback_read_char ()
{
char *line;
- int eof;
+ int eof, jcode;
+ static procenv_t olevel;
if (rl_linefunc == NULL)
{
@@ -104,16 +115,89 @@ rl_callback_read_char ()
abort ();
}
- eof = readline_internal_char ();
+ memcpy ((void *)olevel, (void *)readline_top_level, sizeof (procenv_t));
+ jcode = setjmp (readline_top_level);
+ if (jcode)
+ {
+ (*rl_redisplay_function) ();
+ _rl_want_redisplay = 0;
+ memcpy ((void *)readline_top_level, (void *)olevel, sizeof (procenv_t));
+ return;
+ }
- /* We loop in case some function has pushed input back with rl_execute_next. */
- for (;;)
+ do
{
+ if (RL_ISSTATE (RL_STATE_ISEARCH))
+ {
+ eof = _rl_isearch_callback (_rl_iscxt);
+ if (eof == 0 && (RL_ISSTATE (RL_STATE_ISEARCH) == 0) && RL_ISSTATE (RL_STATE_INPUTPENDING))
+ rl_callback_read_char ();
+
+ return;
+ }
+ else if (RL_ISSTATE (RL_STATE_NSEARCH))
+ {
+ eof = _rl_nsearch_callback (_rl_nscxt);
+ return;
+ }
+ else if (RL_ISSTATE (RL_STATE_NUMERICARG))
+ {
+ eof = _rl_arg_callback (_rl_argcxt);
+ if (eof == 0 && (RL_ISSTATE (RL_STATE_NUMERICARG) == 0) && RL_ISSTATE (RL_STATE_INPUTPENDING))
+ rl_callback_read_char ();
+ /* XXX - this should handle _rl_last_command_was_kill better */
+ else if (RL_ISSTATE (RL_STATE_NUMERICARG) == 0)
+ _rl_internal_char_cleanup ();
+
+ return;
+ }
+ else if (RL_ISSTATE (RL_STATE_MULTIKEY))
+ {
+ eof = _rl_dispatch_callback (_rl_kscxt); /* For now */
+ while ((eof == -1 || eof == -2) && RL_ISSTATE (RL_STATE_MULTIKEY) && _rl_kscxt && (_rl_kscxt->flags & KSEQ_DISPATCHED))
+ eof = _rl_dispatch_callback (_rl_kscxt);
+ if (RL_ISSTATE (RL_STATE_MULTIKEY) == 0)
+ {
+ _rl_internal_char_cleanup ();
+ _rl_want_redisplay = 1;
+ }
+ }
+ else if (_rl_callback_func)
+ {
+ /* This allows functions that simply need to read an additional
+ character (like quoted-insert) to register a function to be
+ called when input is available. _rl_callback_data is simply a
+ pointer to a struct that has the argument count originally
+ passed to the registering function and space for any additional
+ parameters. */
+ eof = (*_rl_callback_func) (_rl_callback_data);
+ /* If the function `deregisters' itself, make sure the data is
+ cleaned up. */
+ if (_rl_callback_func == 0)
+ {
+ if (_rl_callback_data)
+ {
+ _rl_callback_data_dispose (_rl_callback_data);
+ _rl_callback_data = 0;
+ }
+ _rl_internal_char_cleanup ();
+ }
+ }
+ else
+ eof = readline_internal_char ();
+
+ if (rl_done == 0 && _rl_want_redisplay)
+ {
+ (*rl_redisplay_function) ();
+ _rl_want_redisplay = 0;
+ }
+
if (rl_done)
{
line = readline_internal_teardown (eof);
- (*rl_deprep_term_function) ();
+ if (rl_deprep_term_function)
+ (*rl_deprep_term_function) ();
#if defined (HANDLE_SIGNALS)
rl_clear_signals ();
#endif
@@ -129,11 +213,8 @@ rl_callback_read_char ()
if (in_handler == 0 && rl_linefunc)
_rl_callback_newline ();
}
- if (rl_pending_input || _rl_pushed_input_available ())
- eof = readline_internal_char ();
- else
- break;
}
+ while (rl_pending_input || _rl_pushed_input_available () || RL_ISSTATE (RL_STATE_MACROINPUT));
}
/* Remove the handler, and make sure the terminal is in its normal state. */
@@ -141,14 +222,37 @@ void
rl_callback_handler_remove ()
{
rl_linefunc = NULL;
+ RL_UNSETSTATE (RL_STATE_CALLBACK);
if (in_handler)
{
in_handler = 0;
- (*rl_deprep_term_function) ();
+ if (rl_deprep_term_function)
+ (*rl_deprep_term_function) ();
#if defined (HANDLE_SIGNALS)
rl_clear_signals ();
#endif
}
}
+_rl_callback_generic_arg *
+_rl_callback_data_alloc (count)
+ int count;
+{
+ _rl_callback_generic_arg *arg;
+
+ arg = (_rl_callback_generic_arg *)xmalloc (sizeof (_rl_callback_generic_arg));
+ arg->count = count;
+
+ arg->i1 = arg->i2 = 0;
+
+ return arg;
+}
+
+void _rl_callback_data_dispose (arg)
+ _rl_callback_generic_arg *arg;
+{
+ if (arg)
+ free (arg);
+}
+
#endif
diff --git a/cmd-line-utils/readline/chardefs.h b/cmd-line-utils/readline/chardefs.h
index 04a3b7a8e9c..def3a111bd3 100644
--- a/cmd-line-utils/readline/chardefs.h
+++ b/cmd-line-utils/readline/chardefs.h
@@ -59,11 +59,7 @@
#define largest_char 255 /* Largest character value. */
#define CTRL_CHAR(c) ((c) < control_character_threshold && (((c) & 0x80) == 0))
-#if largest_char >= 255
-#define META_CHAR(c) ((c) > meta_character_threshold)
-#else
#define META_CHAR(c) ((c) > meta_character_threshold && (c) <= largest_char)
-#endif
#define CTRL(c) ((c) & control_character_mask)
#define META(c) ((c) | meta_character_bit)
@@ -90,6 +86,8 @@
/* Some systems define these; we want our definitions. */
#undef ISPRINT
+/* Beware: these only work with single-byte ASCII characters. */
+
#define ISALNUM(c) (IN_CTYPE_DOMAIN (c) && isalnum (c))
#define ISALPHA(c) (IN_CTYPE_DOMAIN (c) && isalpha (c))
#define ISDIGIT(c) (IN_CTYPE_DOMAIN (c) && isdigit (c))
diff --git a/cmd-line-utils/readline/compat.c b/cmd-line-utils/readline/compat.c
index e4fbc322cee..3949bf6a16b 100644
--- a/cmd-line-utils/readline/compat.c
+++ b/cmd-line-utils/readline/compat.c
@@ -21,7 +21,9 @@
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
#define READLINE_LIBRARY
-#include "config_readline.h"
+#if defined (HAVE_CONFIG_H)
+# include "config_readline.h"
+#endif
#include <stdio.h>
diff --git a/cmd-line-utils/readline/complete.c b/cmd-line-utils/readline/complete.c
index 526c1edb33d..916aa5dd9b9 100644
--- a/cmd-line-utils/readline/complete.c
+++ b/cmd-line-utils/readline/complete.c
@@ -1,6 +1,6 @@
/* complete.c -- filename completion for readline. */
-/* Copyright (C) 1987-2004 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
This file is part of the GNU Readline Library, a library for
reading lines of text with interactive input and history editing.
@@ -21,18 +21,12 @@
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
#define READLINE_LIBRARY
-#if !defined(_XOPEN_SOURCE) && !defined(__FreeBSD__)
-#define _XOPEN_SOURCE 500
+#if defined (HAVE_CONFIG_H)
+# include "config_readline.h"
#endif
-#include "config_readline.h"
-
#include <sys/types.h>
-
-/* To get SuSE 9.3 to define wcwidth() (in wchar.h) */
-
#include <fcntl.h>
-
/* FreeBSD 5.3 will not declare u_int in sys/types.h, file.h needs it */
#if defined (HAVE_SYS_FILE_H) && !defined(__FreeBSD__)
# include <sys/file.h>
@@ -55,7 +49,9 @@
extern int errno;
#endif /* !errno */
+#if defined (HAVE_PWD_H)
#include <pwd.h>
+#endif
#include "posixdir.h"
#include "posixstat.h"
@@ -86,9 +82,9 @@ typedef int QSFUNC ();
/* Most systems don't declare getpwent in <pwd.h> if _POSIX_SOURCE is
defined. */
-#if !defined (HAVE_GETPW_DECLS) || defined (_POSIX_SOURCE)
+#if defined (HAVE_GETPWENT) && (!defined (HAVE_GETPW_DECLS) || defined (_POSIX_SOURCE))
extern struct passwd *getpwent PARAMS((void));
-#endif /* !HAVE_GETPW_DECLS || _POSIX_SOURCE */
+#endif /* HAVE_GETPWENT && (!HAVE_GETPW_DECLS || _POSIX_SOURCE) */
/* If non-zero, then this is the address of a function to call when
completing a word would normally display the list of possible matches.
@@ -213,7 +209,8 @@ int rl_completion_type = 0;
/* Up to this many items will be displayed in response to a
possible-completions call. After that, we ask the user if
- she is sure she wants to see them all. */
+ she is sure she wants to see them all. A negative value means
+ don't ask. */
int rl_completion_query_items = 100;
int _rl_page_completions = 1;
@@ -361,15 +358,15 @@ rl_complete (ignore, invoking_key)
/* List the possible completions. See description of rl_complete (). */
int
-rl_possible_completions (int ignore __attribute__((unused)),
- int invoking_key __attribute__((unused)))
+rl_possible_completions (ignore, invoking_key)
+ int ignore, invoking_key;
{
return (rl_complete_internal ('?'));
}
int
-rl_insert_completions (int ignore __attribute__((unused)),
- int invoking_key __attribute__((unused)))
+rl_insert_completions (ignore, invoking_key)
+ int ignore, invoking_key;
{
return (rl_complete_internal ('*'));
}
@@ -628,6 +625,8 @@ fnprint (to_print)
mbstate_t ps;
const char *end;
size_t tlen;
+ int width, w;
+ wchar_t wc;
end = to_print + strlen (to_print) + 1;
memset (&ps, 0, sizeof (mbstate_t));
@@ -660,21 +659,28 @@ fnprint (to_print)
else
{
#if defined (HANDLE_MULTIBYTE)
- tlen = mbrlen (s, end - s, &ps);
+ tlen = mbrtowc (&wc, s, end - s, &ps);
if (MB_INVALIDCH (tlen))
{
tlen = 1;
+ width = 1;
memset (&ps, 0, sizeof (mbstate_t));
}
else if (MB_NULLWCH (tlen))
break;
+ else
+ {
+ w = wcwidth (wc);
+ width = (w >= 0) ? w : 1;
+ }
fwrite (s, 1, tlen, rl_outstream);
s += tlen;
+ printed_len += width;
#else
putc (*s, rl_outstream);
s++;
-#endif
printed_len++;
+#endif
}
}
@@ -690,7 +696,7 @@ print_filename (to_print, full_pathname)
char *to_print, *full_pathname;
{
int printed_len, extension_char, slen, tlen;
- char *s, c, *new_full_pathname;
+ char *s, c, *new_full_pathname, *dn;
extension_char = 0;
printed_len = fnprint (to_print);
@@ -715,7 +721,17 @@ print_filename (to_print, full_pathname)
files in the root directory. If we pass a null string to the
bash directory completion hook, for example, it will expand it
to the current directory. We just want the `/'. */
- s = tilde_expand (full_pathname && *full_pathname ? full_pathname : "/");
+ if (full_pathname == 0 || *full_pathname == 0)
+ dn = "/";
+ else if (full_pathname[0] != '/')
+ dn = full_pathname;
+ else if (full_pathname[1] == 0)
+ dn = "//"; /* restore trailing slash to `//' */
+ else if (full_pathname[1] == '/' && full_pathname[2] == 0)
+ dn = "/"; /* don't turn /// into // */
+ else
+ dn = full_pathname;
+ s = tilde_expand (dn);
if (rl_directory_completion_hook)
(*rl_directory_completion_hook) (&s);
@@ -723,6 +739,10 @@ print_filename (to_print, full_pathname)
tlen = strlen (to_print);
new_full_pathname = (char *)xmalloc (slen + tlen + 2);
strcpy (new_full_pathname, s);
+ if (s[slen - 1] == '/')
+ slen--;
+ else
+ new_full_pathname[slen] = '/';
new_full_pathname[slen] = '/';
strcpy (new_full_pathname + slen + 1, to_print);
@@ -761,7 +781,10 @@ print_filename (to_print, full_pathname)
}
static char *
-rl_quote_filename (char *s, int rtype __attribute__((unused)), char *qcp)
+rl_quote_filename (s, rtype, qcp)
+ char *s;
+ int rtype;
+ char *qcp;
{
char *r;
@@ -811,14 +834,7 @@ _rl_find_completion_word (fp, dp)
quote substrings for the completer. Try to find the start
of an unclosed quoted substring. */
/* FOUND_QUOTE is set so we know what kind of quotes we found. */
-#if defined (HANDLE_MULTIBYTE)
- for (scan = pass_next = 0; scan < end;
- scan = ((MB_CUR_MAX == 1 || rl_byte_oriented)
- ? (scan + 1)
- : _rl_find_next_mbchar (rl_line_buffer, scan, 1, MB_FIND_ANY)))
-#else
- for (scan = pass_next = 0; scan < end; scan++)
-#endif
+ for (scan = pass_next = 0; scan < end; scan = MB_NEXTCHAR (rl_line_buffer, scan, 1, MB_FIND_ANY))
{
if (pass_next)
{
@@ -868,11 +884,7 @@ _rl_find_completion_word (fp, dp)
/* We didn't find an unclosed quoted substring upon which to do
completion, so use the word break characters to find the
substring on which to complete. */
-#if defined (HANDLE_MULTIBYTE)
- while ((rl_point = _rl_find_prev_mbchar (rl_line_buffer, rl_point, MB_FIND_ANY)))
-#else
- while (--rl_point)
-#endif
+ while (rl_point = MB_PREVCHAR (rl_line_buffer, rl_point, MB_FIND_ANY))
{
scan = rl_line_buffer[rl_point];
@@ -939,7 +951,7 @@ gen_completion_matches (text, start, end, our_func, found_quote, quote_char)
rl_compentry_func_t *our_func;
int found_quote, quote_char;
{
- char **matches, *temp;
+ char **matches;
rl_completion_found_quote = found_quote;
rl_completion_quote_character = quote_char;
@@ -958,21 +970,9 @@ gen_completion_matches (text, start, end, our_func, found_quote, quote_char)
}
}
- /* Beware -- we're stripping the quotes here. Do this only if we know
- we are doing filename completion and the application has defined a
- filename dequoting function. */
- temp = (char *)NULL;
-
- if (found_quote && our_func == rl_filename_completion_function &&
- rl_filename_dequoting_function)
- {
- /* delete single and double quotes */
- temp = (*rl_filename_dequoting_function) (text, quote_char);
- text = temp; /* not freeing text is not a memory leak */
- }
+ /* XXX -- filename dequoting moved into rl_filename_completion_function */
matches = rl_completion_matches (text, our_func);
- FREE (temp);
return matches;
}
@@ -1105,7 +1105,8 @@ compute_lcd_of_matches (match_list, matches, text)
#if defined (HANDLE_MULTIBYTE)
if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
{
- mbstate_t ps_back = ps1;
+ mbstate_t ps_back;
+ ps_back = ps1;
if (!_rl_compare_chars (match_list[i], si, &ps1, match_list[i+1], si, &ps2))
break;
else if ((v = _rl_get_char_len (&match_list[i][si], &ps_back)) > 1)
@@ -1155,8 +1156,7 @@ compute_lcd_of_matches (match_list, matches, text)
rl_completion_found_quote &&
rl_filename_quoting_desired)
{
- dtext = (*rl_filename_dequoting_function)
- ((char*) text, rl_completion_quote_character);
+ dtext = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character);
text = dtext;
}
@@ -1402,7 +1402,7 @@ display_matches (matches)
/* If there are many items, then ask the user if she really wants to
see them all. */
- if (len >= rl_completion_query_items)
+ if (rl_completion_query_items > 0 && len >= rl_completion_query_items)
{
rl_crlf ();
fprintf (rl_outstream, "Display all %d possibilities? (y or n)", len);
@@ -1539,7 +1539,7 @@ append_to_match (text, delimiter, quote_char, nontrivial_match)
: stat (filename, &finfo);
if (s == 0 && S_ISDIR (finfo.st_mode))
{
- if (_rl_complete_mark_directories)
+ if (_rl_complete_mark_directories /* && rl_completion_suppress_append == 0 */)
{
/* This is clumsy. Avoid putting in a double slash if point
is at the end of the line and the previous character is a
@@ -1803,7 +1803,7 @@ rl_completion_matches (text, entry_function)
match_list = (char **)xmalloc ((match_list_size + 1) * sizeof (char *));
match_list[1] = (char *)NULL;
- while ((string = (*entry_function) (text, matches)))
+ while (string = (*entry_function) (text, matches))
{
if (matches + 1 == match_list_size)
match_list = (char **)xrealloc
@@ -1853,16 +1853,20 @@ rl_username_completion_function (text, state)
setpwent ();
}
- while ((entry = getpwent ()))
+#if defined (HAVE_GETPWENT)
+ while (entry = getpwent ())
{
/* Null usernames should result in all users as possible completions. */
if (namelen == 0 || (STREQN (username, entry->pw_name, namelen)))
break;
}
+#endif
if (entry == 0)
{
+#if defined (HAVE_GETPWENT)
endpwent ();
+#endif
return ((char *)NULL);
}
else
@@ -1960,13 +1964,30 @@ rl_filename_completion_function (text, state)
if (rl_directory_rewrite_hook)
(*rl_directory_rewrite_hook) (&dirname);
+ /* The directory completion hook should perform any necessary
+ dequoting. */
if (rl_directory_completion_hook && (*rl_directory_completion_hook) (&dirname))
{
free (users_dirname);
users_dirname = savestring (dirname);
}
-
+ else if (rl_completion_found_quote && rl_filename_dequoting_function)
+ {
+ /* delete single and double quotes */
+ temp = (*rl_filename_dequoting_function) (users_dirname, rl_completion_quote_character);
+ free (users_dirname);
+ users_dirname = temp;
+ }
directory = opendir (dirname);
+
+ /* Now dequote a non-null filename. */
+ if (filename && *filename && rl_completion_found_quote && rl_filename_dequoting_function)
+ {
+ /* delete single and double quotes */
+ temp = (*rl_filename_dequoting_function) (filename, rl_completion_quote_character);
+ free (filename);
+ filename = temp;
+ }
filename_len = strlen (filename);
rl_filename_completion_desired = 1;
@@ -2089,7 +2110,8 @@ rl_filename_completion_function (text, state)
hit the end of the match list, we restore the original unmatched text,
ring the bell, and reset the counter to zero. */
int
-rl_menu_complete (int count, int ignore __attribute__((unused)))
+rl_menu_complete (count, ignore)
+ int count, ignore;
{
rl_compentry_func_t *our_func;
int matching_filenames, found_quote;
@@ -2173,9 +2195,11 @@ rl_menu_complete (int count, int ignore __attribute__((unused)))
return (0);
}
- match_list_index = (match_list_index + count) % match_list_size;
+ match_list_index += count;
if (match_list_index < 0)
match_list_index += match_list_size;
+ else
+ match_list_index %= match_list_size;
if (match_list_index == 0 && match_list_size > 1)
{
diff --git a/cmd-line-utils/readline/configure.in b/cmd-line-utils/readline/configure.in
index 31e17606024..868773be696 100644
--- a/cmd-line-utils/readline/configure.in
+++ b/cmd-line-utils/readline/configure.in
@@ -4,9 +4,27 @@ dnl
dnl report bugs to chet@po.cwru.edu
dnl
dnl Process this file with autoconf to produce a configure script.
-AC_REVISION([for Readline 5.0, version 2.52, from autoconf version] AC_ACVERSION)
-AC_INIT(readline, 5.0-rc1, bug-readline@gnu.org)
+# Copyright (C) 1987-2005 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+AC_REVISION([for Readline 5.2, version 2.61])
+
+AC_INIT(readline, 5.2, bug-readline@gnu.org)
dnl make sure we are using a recent autoconf version
AC_PREREQ(2.50)
@@ -16,20 +34,28 @@ AC_CONFIG_AUX_DIR(./support)
AC_CONFIG_HEADERS(config.h)
dnl update the value of RL_READLINE_VERSION in readline.h when this changes
-LIBVERSION=5.0
+LIBVERSION=5.2
AC_CANONICAL_HOST
dnl configure defaults
opt_curses=no
+opt_purify=no
dnl arguments to configure
AC_ARG_WITH(curses, AC_HELP_STRING([--with-curses], [use the curses library instead of the termcap library]), opt_curses=$withval)
+AC_ARG_WITH(purify, AC_HELP_STRING([--with-purify], [configure to postprocess with purify]), opt_purify=$withval)
if test "$opt_curses" = "yes"; then
prefer_curses=yes
fi
+if test "$opt_purify" = yes; then
+ PURIFY="purify"
+else
+ PURIFY=
+fi
+
dnl option parsing for optional features
opt_multibyte=yes
opt_static_libs=yes
@@ -43,6 +69,36 @@ if test $opt_multibyte = no; then
AC_DEFINE(NO_MULTIBYTE_SUPPORT)
fi
+dnl load up the cross-building cache file -- add more cases and cache
+dnl files as necessary
+
+dnl Note that host and target machine are the same, and different than the
+dnl build machine.
+
+CROSS_COMPILE=
+if test "x$cross_compiling" = "xyes"; then
+ case "${host}" in
+ *-cygwin*)
+ cross_cache=${srcdir}/cross-build/cygwin.cache
+ ;;
+ *-mingw*)
+ cross_cache=${srcdir}/cross-build/mingw.cache
+ ;;
+ i[[3456]]86-*-beos*)
+ cross_cache=${srcdir}/cross-build/x86-beos.cache
+ ;;
+ *) echo "configure: cross-compiling for $host is not supported" >&2
+ ;;
+ esac
+ if test -n "${cross_cache}" && test -r "${cross_cache}"; then
+ echo "loading cross-build cache file ${cross_cache}"
+ . ${cross_cache}
+ fi
+ unset cross_cache
+ CROSS_COMPILE='-DCROSS_COMPILING'
+ AC_SUBST(CROSS_COMPILE)
+fi
+
echo ""
echo "Beginning configuration for readline-$LIBVERSION for ${host_cpu}-${host_vendor}-${host_os}"
echo ""
@@ -83,14 +139,24 @@ AC_HEADER_STDC
AC_HEADER_STAT
AC_HEADER_DIRENT
-AC_CHECK_FUNCS(lstat memmove putenv select setenv setlocale \
- strcasecmp strpbrk tcgetattr vsnprintf isascii isxdigit)
+AC_CHECK_FUNCS(fcntl kill lstat)
+AC_CHECK_FUNCS(memmove putenv select setenv setlocale \
+ strcasecmp strpbrk tcgetattr vsnprintf)
+AC_CHECK_FUNCS(isascii isxdigit)
+AC_CHECK_FUNCS(getpwent getpwnam getpwuid)
AC_FUNC_STRCOLL
-AC_CHECK_HEADERS(unistd.h stdlib.h varargs.h stdarg.h string.h strings.h \
- limits.h sys/ptem.h sys/pte.h sys/stream.h sys/select.h \
- termcap.h termios.h termio.h sys/file.h locale.h memory.h )
+AC_CHECK_HEADERS(fcntl.h unistd.h stdlib.h varargs.h stdarg.h string.h strings.h \
+ limits.h locale.h pwd.h memory.h termcap.h termios.h termio.h)
+AC_CHECK_HEADERS(sys/pte.h sys/stream.h sys/select.h sys/file.h)
+
+AC_CHECK_HEADERS(sys/ptem.h,,,
+[[
+#if HAVE_SYS_STREAM_H
+# include <sys/stream.h>
+#endif
+]])
BASH_SYS_SIGNAL_VINTAGE
BASH_SYS_REINSTALL_SIGHANDLERS
@@ -143,7 +209,13 @@ esac
#
if test -f ${srcdir}/support/shobj-conf; then
AC_MSG_CHECKING(configuration for building shared libraries)
- eval `${CONFIG_SHELL-/bin/sh} ${srcdir}/support/shobj-conf -C "${CC}" -c ${host_cpu} -o ${host_os} -v ${host_vendor}`
+ eval `TERMCAP_LIB=$TERMCAP_LIB ${CONFIG_SHELL-/bin/sh} ${srcdir}/support/shobj-conf -C "${CC}" -c ${host_cpu} -o ${host_os} -v ${host_vendor}`
+
+# case "$SHLIB_LIBS" in
+# *curses*|*termcap*|*termlib*) ;;
+# *) SHLIB_LIBS="$SHLIB_LIBS $TERMCAP_LIB" ;;
+# esac
+
AC_SUBST(SHOBJ_CC)
AC_SUBST(SHOBJ_CFLAGS)
AC_SUBST(SHOBJ_LD)
@@ -153,8 +225,11 @@ if test -f ${srcdir}/support/shobj-conf; then
AC_SUBST(SHOBJ_STATUS)
AC_SUBST(SHLIB_STATUS)
AC_SUBST(SHLIB_XLDFLAGS)
+ AC_SUBST(SHLIB_DOT)
+ AC_SUBST(SHLIB_LIBPREF)
AC_SUBST(SHLIB_LIBSUFF)
AC_SUBST(SHLIB_LIBVERSION)
+ AC_SUBST(SHLIB_DLLVERSION)
AC_SUBST(SHLIB_LIBS)
AC_MSG_RESULT($SHLIB_STATUS)
@@ -191,6 +266,12 @@ msdosdjgpp*) BUILD_DIR=`pwd.exe` ;; # to prevent //d/path/file
*) BUILD_DIR=`pwd` ;;
esac
+case "$BUILD_DIR" in
+*\ *) BUILD_DIR=`echo "$BUILD_DIR" | sed 's: :\\\\ :g'` ;;
+*) ;;
+esac
+
+AC_SUBST(PURIFY)
AC_SUBST(BUILD_DIR)
AC_SUBST(CFLAGS)
diff --git a/cmd-line-utils/readline/display.c b/cmd-line-utils/readline/display.c
index 06cac3bfd32..6f63faa9738 100644
--- a/cmd-line-utils/readline/display.c
+++ b/cmd-line-utils/readline/display.c
@@ -1,6 +1,6 @@
/* display.c -- readline redisplay facility. */
-/* Copyright (C) 1987-2004 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2006 Free Software Foundation, Inc.
This file is part of the GNU Readline Library, a library for
reading lines of text with interactive input and history editing.
@@ -21,16 +21,12 @@
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
#define READLINE_LIBRARY
-#ifndef _XOPEN_SOURCE
-#define _XOPEN_SOURCE 500
+#if defined (HAVE_CONFIG_H)
+# include "config_readline.h"
#endif
-#include "config_readline.h"
-
#include <sys/types.h>
-/* To get SuSE 9.3 to define wcwidth() (in wchar.h) */
-
#if defined (HAVE_UNISTD_H)
# include <unistd.h>
#endif /* HAVE_UNISTD_H */
@@ -63,10 +59,6 @@
extern char *strchr (), *strrchr ();
#endif /* !strchr && !__STDC__ */
-#if defined (HACK_TERMCAP_MOTION)
-extern char *_rl_term_forward_char;
-#endif
-
static void update_line PARAMS((char *, char *, int, int, int, int));
static void space_to_eol PARAMS((int));
static void delete_chars PARAMS((int));
@@ -84,9 +76,18 @@ static int *inv_lbreaks, *vis_lbreaks;
static int inv_lbsize, vis_lbsize;
/* Heuristic used to decide whether it is faster to move from CUR to NEW
- by backing up or outputting a carriage return and moving forward. */
+ by backing up or outputting a carriage return and moving forward. CUR
+ and NEW are either both buffer positions or absolute screen positions. */
#define CR_FASTER(new, cur) (((new) + 1) < ((cur) - (new)))
+/* _rl_last_c_pos is an absolute cursor position in multibyte locales and a
+ buffer index in others. This macro is used when deciding whether the
+ current cursor position is in the middle of a prompt string containing
+ invisible characters. */
+#define PROMPT_ENDING_INDEX \
+ ((MB_CUR_MAX > 1 && rl_byte_oriented == 0) ? prompt_physical_chars : prompt_last_invisible+1)
+
+
/* **************************************************************** */
/* */
/* Display stuff */
@@ -122,16 +123,25 @@ rl_voidfunc_t *rl_redisplay_function = rl_redisplay;
int rl_display_fixed = 0;
int _rl_suppress_redisplay = 0;
+int _rl_want_redisplay = 0;
/* The stuff that gets printed out before the actual text of the line.
This is usually pointing to rl_prompt. */
char *rl_display_prompt = (char *)NULL;
/* Pseudo-global variables declared here. */
+
/* The visible cursor position. If you print some text, adjust this. */
+/* NOTE: _rl_last_c_pos is used as a buffer index when not in a locale
+ supporting multibyte characters, and an absolute cursor position when
+ in such a locale. This is an artifact of the donated multibyte support.
+ Care must be taken when modifying its value. */
int _rl_last_c_pos = 0;
int _rl_last_v_pos = 0;
+static int cpos_adjusted;
+static int cpos_buffer_position;
+
/* Number of lines currently on screen minus 1. */
int _rl_vis_botlin = 0;
@@ -158,6 +168,7 @@ static int line_size = 1024;
include invisible characters. */
static char *local_prompt, *local_prompt_prefix;
+static int local_prompt_len;
static int prompt_visible_length, prompt_prefix_length;
/* The number of invisible characters in the line currently being
@@ -184,6 +195,19 @@ static int prompt_last_screen_line;
static int prompt_physical_chars;
+/* Variables to save and restore prompt and display information. */
+
+/* These are getting numerous enough that it's time to create a struct. */
+
+static char *saved_local_prompt;
+static char *saved_local_prefix;
+static int saved_last_invisible;
+static int saved_visible_length;
+static int saved_prefix_length;
+static int saved_local_length;
+static int saved_invis_chars_first_line;
+static int saved_physical_chars;
+
/* Expand the prompt string S and return the number of visible
characters in *LP, if LP is not null. This is currently more-or-less
a placeholder for expansion. LIP, if non-null is a place to store the
@@ -204,8 +228,8 @@ expand_prompt (pmt, lp, lip, niflp, vlp)
char *pmt;
int *lp, *lip, *niflp, *vlp;
{
- char *r, *ret, *p;
- int l, rl, last, ignoring, ninvis, invfl, ind, pind, physchars;
+ char *r, *ret, *p, *igstart;
+ int l, rl, last, ignoring, ninvis, invfl, invflset, ind, pind, physchars;
/* Short-circuit if we can. */
if ((MB_CUR_MAX <= 1 || rl_byte_oriented) && strchr (pmt, RL_PROMPT_START_IGNORE) == 0)
@@ -218,7 +242,7 @@ expand_prompt (pmt, lp, lip, niflp, vlp)
if (niflp)
*niflp = 0;
if (vlp)
- *vlp = lp ? *lp : (int) strlen (r);
+ *vlp = lp ? *lp : strlen (r);
return r;
}
@@ -226,20 +250,24 @@ expand_prompt (pmt, lp, lip, niflp, vlp)
r = ret = (char *)xmalloc (l + 1);
invfl = 0; /* invisible chars in first line of prompt */
+ invflset = 0; /* we only want to set invfl once */
+ igstart = 0;
for (rl = ignoring = last = ninvis = physchars = 0, p = pmt; p && *p; p++)
{
/* This code strips the invisible character string markers
RL_PROMPT_START_IGNORE and RL_PROMPT_END_IGNORE */
- if (*p == RL_PROMPT_START_IGNORE)
+ if (ignoring == 0 && *p == RL_PROMPT_START_IGNORE) /* XXX - check ignoring? */
{
- ignoring++;
+ ignoring = 1;
+ igstart = p;
continue;
}
else if (ignoring && *p == RL_PROMPT_END_IGNORE)
{
ignoring = 0;
- last = r - ret - 1;
+ if (p != (igstart + 1))
+ last = r - ret - 1;
continue;
}
else
@@ -253,7 +281,10 @@ expand_prompt (pmt, lp, lip, niflp, vlp)
while (l--)
*r++ = *p++;
if (!ignoring)
- rl += ind - pind;
+ {
+ rl += ind - pind;
+ physchars += _rl_col_width (pmt, pind, ind);
+ }
else
ninvis += ind - pind;
p--; /* compensate for later increment */
@@ -263,16 +294,19 @@ expand_prompt (pmt, lp, lip, niflp, vlp)
{
*r++ = *p;
if (!ignoring)
- rl++; /* visible length byte counter */
+ {
+ rl++; /* visible length byte counter */
+ physchars++;
+ }
else
ninvis++; /* invisible chars byte counter */
}
- if (rl >= _rl_screenwidth)
- invfl = ninvis;
-
- if (ignoring == 0)
- physchars++;
+ if (invflset == 0 && rl >= _rl_screenwidth)
+ {
+ invfl = ninvis;
+ invflset = 1;
+ }
}
}
@@ -332,7 +366,9 @@ rl_expand_prompt (prompt)
FREE (local_prompt_prefix);
local_prompt = local_prompt_prefix = (char *)0;
- prompt_last_invisible = prompt_visible_length = 0;
+ local_prompt_len = 0;
+ prompt_last_invisible = prompt_invis_chars_first_line = 0;
+ prompt_visible_length = prompt_physical_chars = 0;
if (prompt == 0 || *prompt == 0)
return (0);
@@ -346,6 +382,7 @@ rl_expand_prompt (prompt)
&prompt_invis_chars_first_line,
&prompt_physical_chars);
local_prompt_prefix = (char *)0;
+ local_prompt_len = local_prompt ? strlen (local_prompt) : 0;
return (prompt_visible_length);
}
else
@@ -355,15 +392,16 @@ rl_expand_prompt (prompt)
local_prompt = expand_prompt (p, &prompt_visible_length,
&prompt_last_invisible,
(int *)NULL,
- (int *)NULL);
+ &prompt_physical_chars);
c = *t; *t = '\0';
/* The portion of the prompt string up to and including the
final newline is now null-terminated. */
local_prompt_prefix = expand_prompt (prompt, &prompt_prefix_length,
(int *)NULL,
&prompt_invis_chars_first_line,
- &prompt_physical_chars);
+ (int *)NULL);
*t = c;
+ local_prompt_len = local_prompt ? strlen (local_prompt) : 0;
return (prompt_prefix_length);
}
}
@@ -420,13 +458,13 @@ rl_redisplay ()
{
register int in, out, c, linenum, cursor_linenum;
register char *line;
- int c_pos, inv_botlin, lb_botlin, lb_linenum;
- int newlines, lpos, temp, modmark;
+ int inv_botlin, lb_botlin, lb_linenum, o_cpos;
+ int newlines, lpos, temp, modmark, n0, num;
char *prompt_this_line;
#if defined (HANDLE_MULTIBYTE)
wchar_t wc;
size_t wc_bytes;
- int wc_width= 0;
+ int wc_width;
mbstate_t ps;
int _rl_wrapped_multicolumn = 0;
#endif
@@ -435,16 +473,16 @@ rl_redisplay ()
return;
if (!rl_display_prompt)
- rl_display_prompt = (char*) "";
+ rl_display_prompt = "";
- if (invisible_line == 0)
+ if (invisible_line == 0 || vis_lbreaks == 0)
{
init_line_structures (0);
rl_on_new_line ();
}
/* Draw the line into the buffer. */
- c_pos = -1;
+ cpos_buffer_position = -1;
line = invisible_line;
out = inv_botlin = 0;
@@ -471,24 +509,23 @@ rl_redisplay ()
number of non-visible characters in the prompt string. */
if (rl_display_prompt == rl_prompt || local_prompt)
{
- int local_len = local_prompt ? strlen (local_prompt) : 0;
if (local_prompt_prefix && forced_display)
_rl_output_some_chars (local_prompt_prefix, strlen (local_prompt_prefix));
- if (local_len > 0)
+ if (local_prompt_len > 0)
{
- temp = local_len + out + 2;
+ temp = local_prompt_len + out + 2;
if (temp >= line_size)
{
line_size = (temp + 1024) - (temp % 1024);
visible_line = (char *)xrealloc (visible_line, line_size);
line = invisible_line = (char *)xrealloc (invisible_line, line_size);
}
- strncpy (line + out, local_prompt, local_len);
- out += local_len;
+ strncpy (line + out, local_prompt, local_prompt_len);
+ out += local_prompt_len;
}
line[out] = '\0';
- wrap_offset = local_len - prompt_visible_length;
+ wrap_offset = local_prompt_len - prompt_visible_length;
}
else
{
@@ -524,17 +561,6 @@ rl_redisplay ()
wrap_offset = prompt_invis_chars_first_line = 0;
}
-#if defined (HANDLE_MULTIBYTE)
-#define CHECK_INV_LBREAKS() \
- do { \
- if (newlines >= (inv_lbsize - 2)) \
- { \
- inv_lbsize *= 2; \
- inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \
- _rl_wrapped_line = (int *)xrealloc (_rl_wrapped_line, inv_lbsize * sizeof (int)); \
- } \
- } while (0)
-#else
#define CHECK_INV_LBREAKS() \
do { \
if (newlines >= (inv_lbsize - 2)) \
@@ -543,7 +569,6 @@ rl_redisplay ()
inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \
} \
} while (0)
-#endif
#if defined (HANDLE_MULTIBYTE)
#define CHECK_LPOS() \
@@ -589,6 +614,7 @@ rl_redisplay ()
#if defined (HANDLE_MULTIBYTE)
memset (_rl_wrapped_line, 0, vis_lbsize);
+ num = 0;
#endif
/* prompt_invis_chars_first_line is the number of invisible characters in
@@ -600,6 +626,7 @@ rl_redisplay ()
contents of the command line? */
while (lpos >= _rl_screenwidth)
{
+ int z;
/* fix from Darin Johnson <darin@acuson.com> for prompt string with
invisible characters that is longer than the screen width. The
prompt_invis_chars_first_line variable could be made into an array
@@ -607,19 +634,47 @@ rl_redisplay ()
probably too much work for the benefit gained. How many people have
prompts that exceed two physical lines?
Additional logic fix from Edward Catmur <ed@catmur.co.uk> */
- temp = ((newlines + 1) * _rl_screenwidth) +
- ((local_prompt_prefix == 0) ? ((newlines == 0) ? prompt_invis_chars_first_line
- : ((newlines == 1) ? wrap_offset : 0))
- : ((newlines == 0) ? wrap_offset :0));
+#if defined (HANDLE_MULTIBYTE)
+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ {
+ n0 = num;
+ temp = local_prompt_len;
+ while (num < temp)
+ {
+ z = _rl_col_width (local_prompt, n0, num);
+ if (z > _rl_screenwidth)
+ {
+ num = _rl_find_prev_mbchar (local_prompt, num, MB_FIND_ANY);
+ break;
+ }
+ else if (z == _rl_screenwidth)
+ break;
+ num++;
+ }
+ temp = num;
+ }
+ else
+#endif /* !HANDLE_MULTIBYTE */
+ temp = ((newlines + 1) * _rl_screenwidth);
+
+ /* Now account for invisible characters in the current line. */
+ temp += ((local_prompt_prefix == 0) ? ((newlines == 0) ? prompt_invis_chars_first_line
+ : ((newlines == 1) ? wrap_offset : 0))
+ : ((newlines == 0) ? wrap_offset :0));
inv_lbreaks[++newlines] = temp;
- lpos -= _rl_screenwidth;
+#if defined (HANDLE_MULTIBYTE)
+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ lpos -= _rl_col_width (local_prompt, n0, num);
+ else
+#endif
+ lpos -= _rl_screenwidth;
}
prompt_last_screen_line = newlines;
/* Draw the rest of the line (after the prompt) into invisible_line, keeping
- track of where the cursor is (c_pos), the number of the line containing
+ track of where the cursor is (cpos_buffer_position), the number of the line containing
the cursor (lb_linenum), the last line number (lb_botlin and inv_botlin).
It maintains an array of line breaks for display (inv_lbreaks).
This handles expanding tabs for display and displaying meta characters. */
@@ -672,7 +727,7 @@ rl_redisplay ()
if (in == rl_point)
{
- c_pos = out;
+ cpos_buffer_position = out;
lb_linenum = newlines;
}
@@ -766,10 +821,10 @@ rl_redisplay ()
}
if (in == rl_point)
{
- c_pos = out;
+ cpos_buffer_position = out;
lb_linenum = newlines;
}
- for (i = in; i < (int) (in+wc_bytes); i++)
+ for (i = in; i < in+wc_bytes; i++)
line[out++] = rl_line_buffer[i];
for (i = 0; i < wc_width; i++)
CHECK_LPOS();
@@ -797,9 +852,9 @@ rl_redisplay ()
}
line[out] = '\0';
- if (c_pos < 0)
+ if (cpos_buffer_position < 0)
{
- c_pos = out;
+ cpos_buffer_position = out;
lb_linenum = newlines;
}
@@ -808,7 +863,7 @@ rl_redisplay ()
inv_lbreaks[newlines+1] = out;
cursor_linenum = lb_linenum;
- /* C_POS == position in buffer where cursor should be placed.
+ /* CPOS_BUFFER_POSITION == position in buffer where cursor should be placed.
CURSOR_LINENUM == line number where the cursor should be placed. */
/* PWP: now is when things get a bit hairy. The visible and invisible
@@ -822,7 +877,7 @@ rl_redisplay ()
if (_rl_horizontal_scroll_mode == 0 && _rl_term_up && *_rl_term_up)
{
- int nleft, pos, changed_screen_line;
+ int nleft, pos, changed_screen_line, tx;
if (!rl_display_fixed || forced_display)
{
@@ -847,15 +902,38 @@ rl_redisplay ()
#define VIS_LLEN(l) ((l) > _rl_vis_botlin ? 0 : (vis_lbreaks[l+1] - vis_lbreaks[l]))
#define INV_LLEN(l) (inv_lbreaks[l+1] - inv_lbreaks[l])
#define VIS_CHARS(line) (visible_line + vis_lbreaks[line])
-#define VIS_LINE(line) ((line) > _rl_vis_botlin) ? (char*) "" : VIS_CHARS(line)
+#define VIS_LINE(line) ((line) > _rl_vis_botlin) ? "" : VIS_CHARS(line)
#define INV_LINE(line) (invisible_line + inv_lbreaks[line])
/* For each line in the buffer, do the updating display. */
for (linenum = 0; linenum <= inv_botlin; linenum++)
{
+ /* This can lead us astray if we execute a program that changes
+ the locale from a non-multibyte to a multibyte one. */
+ o_cpos = _rl_last_c_pos;
+ cpos_adjusted = 0;
update_line (VIS_LINE(linenum), INV_LINE(linenum), linenum,
VIS_LLEN(linenum), INV_LLEN(linenum), inv_botlin);
+ /* update_line potentially changes _rl_last_c_pos, but doesn't
+ take invisible characters into account, since _rl_last_c_pos
+ is an absolute cursor position in a multibyte locale. See
+ if compensating here is the right thing, or if we have to
+ change update_line itself. There is one case in which
+ update_line adjusts _rl_last_c_pos itself (so it can pass
+ _rl_move_cursor_relative accurate values); it communicates
+ this back by setting cpos_adjusted. If we assume that
+ _rl_last_c_pos is correct (an absolute cursor position) each
+ time update_line is called, then we can assume in our
+ calculations that o_cpos does not need to be adjusted by
+ wrap_offset. */
+ if (linenum == 0 && (MB_CUR_MAX > 1 && rl_byte_oriented == 0) &&
+ cpos_adjusted == 0 &&
+ _rl_last_c_pos != o_cpos &&
+ _rl_last_c_pos > wrap_offset &&
+ o_cpos < prompt_last_invisible)
+ _rl_last_c_pos -= wrap_offset;
+
/* If this is the line with the prompt, we might need to
compensate for invisible characters in the new line. Do
this only if there is not more than one new line (which
@@ -867,7 +945,10 @@ rl_redisplay ()
(wrap_offset > visible_wrap_offset) &&
(_rl_last_c_pos < visible_first_line_len))
{
- nleft = _rl_screenwidth + wrap_offset - _rl_last_c_pos;
+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ nleft = _rl_screenwidth - _rl_last_c_pos;
+ else
+ nleft = _rl_screenwidth + wrap_offset - _rl_last_c_pos;
if (nleft)
_rl_clear_to_eol (nleft);
}
@@ -888,7 +969,7 @@ rl_redisplay ()
_rl_move_vert (linenum);
_rl_move_cursor_relative (0, tt);
_rl_clear_to_eol
- ((linenum == _rl_vis_botlin) ? (int) strlen (tt) : _rl_screenwidth);
+ ((linenum == _rl_vis_botlin) ? strlen (tt) : _rl_screenwidth);
}
}
_rl_vis_botlin = inv_botlin;
@@ -903,7 +984,7 @@ rl_redisplay ()
the physical cursor position on the screen stays the same,
but the buffer position needs to be adjusted to account
for invisible characters. */
- if (cursor_linenum == 0 && wrap_offset)
+ if ((MB_CUR_MAX == 1 || rl_byte_oriented) && cursor_linenum == 0 && wrap_offset)
_rl_last_c_pos += wrap_offset;
}
@@ -914,7 +995,11 @@ rl_redisplay ()
invisible character in the prompt string. */
nleft = prompt_visible_length + wrap_offset;
if (cursor_linenum == 0 && wrap_offset > 0 && _rl_last_c_pos > 0 &&
- _rl_last_c_pos <= prompt_last_invisible && local_prompt)
+#if 0
+ _rl_last_c_pos <= PROMPT_ENDING_INDEX && local_prompt)
+#else
+ _rl_last_c_pos < PROMPT_ENDING_INDEX && local_prompt)
+#endif
{
#if defined (__MSDOS__)
putc ('\r', rl_outstream);
@@ -924,7 +1009,7 @@ rl_redisplay ()
#endif
_rl_output_some_chars (local_prompt, nleft);
if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
- _rl_last_c_pos = _rl_col_width (local_prompt, 0, nleft);
+ _rl_last_c_pos = _rl_col_width (local_prompt, 0, nleft) - wrap_offset;
else
_rl_last_c_pos = nleft;
}
@@ -933,21 +1018,35 @@ rl_redisplay ()
in the buffer? */
pos = inv_lbreaks[cursor_linenum];
/* nleft == number of characters in the line buffer between the
- start of the line and the cursor position. */
- nleft = c_pos - pos;
+ start of the line and the desired cursor position. */
+ nleft = cpos_buffer_position - pos;
+
+ /* NLEFT is now a number of characters in a buffer. When in a
+ multibyte locale, however, _rl_last_c_pos is an absolute cursor
+ position that doesn't take invisible characters in the prompt
+ into account. We use a fudge factor to compensate. */
/* Since _rl_backspace() doesn't know about invisible characters in the
prompt, and there's no good way to tell it, we compensate for
those characters here and call _rl_backspace() directly. */
if (wrap_offset && cursor_linenum == 0 && nleft < _rl_last_c_pos)
{
- _rl_backspace (_rl_last_c_pos - nleft);
+ /* TX == new physical cursor position in multibyte locale. */
if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
- _rl_last_c_pos = _rl_col_width (&visible_line[pos], 0, nleft);
+ tx = _rl_col_width (&visible_line[pos], 0, nleft) - visible_wrap_offset;
else
- _rl_last_c_pos = nleft;
+ tx = nleft;
+ if (_rl_last_c_pos > tx)
+ {
+ _rl_backspace (_rl_last_c_pos - tx); /* XXX */
+ _rl_last_c_pos = tx;
+ }
}
+ /* We need to note that in a multibyte locale we are dealing with
+ _rl_last_c_pos as an absolute cursor position, but moving to a
+ point specified by a buffer position (NLEFT) that doesn't take
+ invisible characters into account. */
if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
_rl_move_cursor_relative (nleft, &invisible_line[pos]);
else if (nleft != _rl_last_c_pos)
@@ -966,11 +1065,11 @@ rl_redisplay ()
will be LMARGIN. */
/* The number of characters that will be displayed before the cursor. */
- ndisp = c_pos - wrap_offset;
+ ndisp = cpos_buffer_position - wrap_offset;
nleft = prompt_visible_length + wrap_offset;
/* Where the new cursor position will be on the screen. This can be
longer than SCREENWIDTH; if it is, lmargin will be adjusted. */
- phys_c_pos = c_pos - (last_lmargin ? last_lmargin : wrap_offset);
+ phys_c_pos = cpos_buffer_position - (last_lmargin ? last_lmargin : wrap_offset);
t = _rl_screenwidth / 3;
/* If the number of characters had already exceeded the screenwidth,
@@ -981,7 +1080,7 @@ rl_redisplay ()
two-thirds of the way across the screen. */
if (phys_c_pos > _rl_screenwidth - 2)
{
- lmargin = c_pos - (2 * t);
+ lmargin = cpos_buffer_position - (2 * t);
if (lmargin < 0)
lmargin = 0;
/* If the left margin would be in the middle of a prompt with
@@ -995,7 +1094,7 @@ rl_redisplay ()
{
/* If we are moving back towards the beginning of the line and
the last margin is no longer correct, compute a new one. */
- lmargin = ((c_pos - 1) / t) * t; /* XXX */
+ lmargin = ((cpos_buffer_position - 1) / t) * t; /* XXX */
if (wrap_offset && lmargin > 0 && lmargin < nleft)
lmargin = nleft;
}
@@ -1040,7 +1139,7 @@ rl_redisplay ()
if (visible_first_line_len > _rl_screenwidth)
visible_first_line_len = _rl_screenwidth;
- _rl_move_cursor_relative (c_pos - lmargin, &invisible_line[lmargin]);
+ _rl_move_cursor_relative (cpos_buffer_position - lmargin, &invisible_line[lmargin]);
last_lmargin = lmargin;
}
}
@@ -1106,7 +1205,10 @@ update_line (old, new, current_line, omax, nmax, inv_botlin)
the exact cursor position and cut-and-paste with certain terminal
emulators. In this calculation, TEMP is the physical screen
position of the cursor. */
- temp = _rl_last_c_pos - W_OFFSET(_rl_last_v_pos, visible_wrap_offset);
+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ temp = _rl_last_c_pos;
+ else
+ temp = _rl_last_c_pos - W_OFFSET(_rl_last_v_pos, visible_wrap_offset);
if (temp == _rl_screenwidth && _rl_term_autowrap && !_rl_horizontal_scroll_mode
&& _rl_last_v_pos == current_line - 1)
{
@@ -1171,7 +1273,7 @@ update_line (old, new, current_line, omax, nmax, inv_botlin)
putc (new[0], rl_outstream);
else
putc (' ', rl_outstream);
- _rl_last_c_pos = 1; /* XXX */
+ _rl_last_c_pos = 1;
_rl_last_v_pos++;
if (old[0] && new[0])
old[0] = new[0];
@@ -1312,7 +1414,7 @@ update_line (old, new, current_line, omax, nmax, inv_botlin)
if (_rl_last_v_pos != current_line)
{
_rl_move_vert (current_line);
- if (current_line == 0 && visible_wrap_offset)
+ if ((MB_CUR_MAX == 1 || rl_byte_oriented) && current_line == 0 && visible_wrap_offset)
_rl_last_c_pos += visible_wrap_offset;
}
@@ -1328,11 +1430,11 @@ update_line (old, new, current_line, omax, nmax, inv_botlin)
sequences (like drawing the `unbold' sequence without a corresponding
`bold') that manifests itself on certain terminals. */
- lendiff = local_prompt ? strlen (local_prompt) : 0;
+ lendiff = local_prompt_len;
od = ofd - old; /* index of first difference in visible line */
if (current_line == 0 && !_rl_horizontal_scroll_mode &&
_rl_term_cr && lendiff > prompt_visible_length && _rl_last_c_pos > 0 &&
- od >= lendiff && _rl_last_c_pos <= prompt_last_invisible)
+ od >= lendiff && _rl_last_c_pos < PROMPT_ENDING_INDEX)
{
#if defined (__MSDOS__)
putc ('\r', rl_outstream);
@@ -1341,12 +1443,29 @@ update_line (old, new, current_line, omax, nmax, inv_botlin)
#endif
_rl_output_some_chars (local_prompt, lendiff);
if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
- _rl_last_c_pos = _rl_col_width (local_prompt, 0, lendiff);
+ {
+ /* We take wrap_offset into account here so we can pass correct
+ information to _rl_move_cursor_relative. */
+ _rl_last_c_pos = _rl_col_width (local_prompt, 0, lendiff) - wrap_offset;
+ cpos_adjusted = 1;
+ }
else
_rl_last_c_pos = lendiff;
}
+ /* When this function returns, _rl_last_c_pos is correct, and an absolute
+ cursor postion in multibyte mode, but a buffer index when not in a
+ multibyte locale. */
_rl_move_cursor_relative (od, old);
+#if 1
+#if defined (HANDLE_MULTIBYTE)
+ /* We need to indicate that the cursor position is correct in the presence of
+ invisible characters in the prompt string. Let's see if setting this when
+ we make sure we're at the end of the drawn prompt string works. */
+ if (current_line == 0 && MB_CUR_MAX > 1 && rl_byte_oriented == 0 && _rl_last_c_pos == prompt_physical_chars)
+ cpos_adjusted = 1;
+#endif
+#endif
/* if (len (new) > len (old))
lendiff == difference in buffer
@@ -1403,7 +1522,7 @@ update_line (old, new, current_line, omax, nmax, inv_botlin)
insert_some_chars (nfd, lendiff, col_lendiff);
_rl_last_c_pos += col_lendiff;
}
- else if (*ols == 0 && lendiff > 0)
+ else if ((MB_CUR_MAX == 1 || rl_byte_oriented != 0) && *ols == 0 && lendiff > 0)
{
/* At the end of a line the characters do not have to
be "inserted". They can just be placed on the screen. */
@@ -1442,6 +1561,10 @@ update_line (old, new, current_line, omax, nmax, inv_botlin)
/* cannot insert chars, write to EOL */
_rl_output_some_chars (nfd, temp);
_rl_last_c_pos += col_temp;
+ /* If we're in a multibyte locale and were before the last invisible
+ char in the current line (which implies we just output some invisible
+ characters) we need to adjust _rl_last_c_pos, since it represents
+ a physical character position. */
}
}
else /* Delete characters from line. */
@@ -1473,7 +1596,7 @@ update_line (old, new, current_line, omax, nmax, inv_botlin)
if (temp > 0)
{
_rl_output_some_chars (nfd, temp);
- _rl_last_c_pos += col_temp;
+ _rl_last_c_pos += col_temp; /* XXX */
}
lendiff = (oe - old) - (ne - new);
if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
@@ -1535,7 +1658,7 @@ rl_on_new_line_with_prompt ()
l = strlen (prompt_last_line);
if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
- _rl_last_c_pos = _rl_col_width (prompt_last_line, 0, l);
+ _rl_last_c_pos = _rl_col_width (prompt_last_line, 0, l); /* XXX */
else
_rl_last_c_pos = l;
@@ -1570,10 +1693,11 @@ rl_on_new_line_with_prompt ()
int
rl_forced_update_display ()
{
+ register char *temp;
+
if (visible_line)
{
- register char *temp = visible_line;
-
+ temp = visible_line;
while (*temp)
*temp++ = '\0';
}
@@ -1584,6 +1708,8 @@ rl_forced_update_display ()
}
/* Move the cursor from _rl_last_c_pos to NEW, which are buffer indices.
+ (Well, when we don't have multibyte characters, _rl_last_c_pos is a
+ buffer index.)
DATA is the contents of the screen line of interest; i.e., where
the movement is being done. */
void
@@ -1592,29 +1718,47 @@ _rl_move_cursor_relative (new, data)
const char *data;
{
register int i;
+ int woff; /* number of invisible chars on current line */
+ int cpos, dpos; /* current and desired cursor positions */
- /* If we don't have to do anything, then return. */
+ woff = W_OFFSET (_rl_last_v_pos, wrap_offset);
+ cpos = _rl_last_c_pos;
#if defined (HANDLE_MULTIBYTE)
/* If we have multibyte characters, NEW is indexed by the buffer point in
a multibyte string, but _rl_last_c_pos is the display position. In
this case, NEW's display position is not obvious and must be
- calculated. */
- if (MB_CUR_MAX == 1 || rl_byte_oriented)
+ calculated. We need to account for invisible characters in this line,
+ as long as we are past them and they are counted by _rl_col_width. */
+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
{
- if (_rl_last_c_pos == new)
- return;
+ dpos = _rl_col_width (data, 0, new);
+ if (dpos > prompt_last_invisible) /* XXX - don't use woff here */
+ {
+ dpos -= woff;
+ /* Since this will be assigned to _rl_last_c_pos at the end (more
+ precisely, _rl_last_c_pos == dpos when this function returns),
+ let the caller know. */
+ cpos_adjusted = 1;
+ }
}
- else if (_rl_last_c_pos == _rl_col_width (data, 0, new))
- return;
-#else
- if (_rl_last_c_pos == new) return;
+ else
#endif
+ dpos = new;
+
+ /* If we don't have to do anything, then return. */
+ if (cpos == dpos)
+ return;
/* It may be faster to output a CR, and then move forwards instead
of moving backwards. */
/* i == current physical cursor position. */
- i = _rl_last_c_pos - W_OFFSET(_rl_last_v_pos, visible_wrap_offset);
- if (new == 0 || CR_FASTER (new, _rl_last_c_pos) ||
+#if defined (HANDLE_MULTIBYTE)
+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ i = _rl_last_c_pos;
+ else
+#endif
+ i = _rl_last_c_pos - woff;
+ if (dpos == 0 || CR_FASTER (dpos, _rl_last_c_pos) ||
(_rl_term_autowrap && i == _rl_screenwidth))
{
#if defined (__MSDOS__)
@@ -1622,10 +1766,10 @@ _rl_move_cursor_relative (new, data)
#else
tputs (_rl_term_cr, 1, _rl_output_character_function);
#endif /* !__MSDOS__ */
- _rl_last_c_pos = 0;
+ cpos = _rl_last_c_pos = 0;
}
- if (_rl_last_c_pos < new)
+ if (cpos < dpos)
{
/* Move the cursor forward. We do it by printing the command
to move the cursor forward if there is one, else print that
@@ -1636,67 +1780,43 @@ _rl_move_cursor_relative (new, data)
sequence telling the terminal to move forward one character.
That kind of control is for people who don't know what the
data is underneath the cursor. */
-#if defined (HACK_TERMCAP_MOTION)
- if (_rl_term_forward_char)
+
+ /* However, we need a handle on where the current display position is
+ in the buffer for the immediately preceding comment to be true.
+ In multibyte locales, we don't currently have that info available.
+ Without it, we don't know where the data we have to display begins
+ in the buffer and we have to go back to the beginning of the screen
+ line. In this case, we can use the terminal sequence to move forward
+ if it's available. */
+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
{
- if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ if (_rl_term_forward_char)
{
- int width;
- width = _rl_col_width (data, _rl_last_c_pos, new);
- for (i = 0; i < width; i++)
- tputs (_rl_term_forward_char, 1, _rl_output_character_function);
+ for (i = cpos; i < dpos; i++)
+ tputs (_rl_term_forward_char, 1, _rl_output_character_function);
}
else
{
- for (i = _rl_last_c_pos; i < new; i++)
- tputs (_rl_term_forward_char, 1, _rl_output_character_function);
+ tputs (_rl_term_cr, 1, _rl_output_character_function);
+ for (i = 0; i < new; i++)
+ putc (data[i], rl_outstream);
}
}
- else if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
- {
- tputs (_rl_term_cr, 1, _rl_output_character_function);
- for (i = 0; i < new; i++)
- putc (data[i], rl_outstream);
- }
else
- for (i = _rl_last_c_pos; i < new; i++)
+ for (i = cpos; i < new; i++)
putc (data[i], rl_outstream);
-
-#else /* !HACK_TERMCAP_MOTION */
-
- if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
- {
- tputs (_rl_term_cr, 1, _rl_output_character_function);
- for (i = 0; i < new; i++)
- putc (data[i], rl_outstream);
- }
- else
- for (i = _rl_last_c_pos; i < new; i++)
- putc (data[i], rl_outstream);
-
-#endif /* !HACK_TERMCAP_MOTION */
-
}
+
#if defined (HANDLE_MULTIBYTE)
/* NEW points to the buffer point, but _rl_last_c_pos is the display point.
The byte length of the string is probably bigger than the column width
of the string, which means that if NEW == _rl_last_c_pos, then NEW's
display point is less than _rl_last_c_pos. */
- else if (_rl_last_c_pos >= new)
-#else
- else if (_rl_last_c_pos > new)
#endif
- {
- if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
- _rl_backspace (_rl_last_c_pos - _rl_col_width (data, 0, new));
- else
- _rl_backspace (_rl_last_c_pos - new);
- }
+ else if (cpos > dpos)
+ _rl_backspace (cpos - dpos);
- if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
- _rl_last_c_pos = _rl_col_width (data, 0, new);
- else
- _rl_last_c_pos = new;
+ _rl_last_c_pos = dpos;
}
/* PWP: move the cursor up or down. */
@@ -1785,9 +1905,9 @@ rl_character_len (c, pos)
return ((ISPRINT (uc)) ? 1 : 2);
}
-
/* How to print things in the "echo-area". The prompt is treated as a
mini-modeline. */
+static int msg_saved_prompt = 0;
#if defined (USE_VARARGS)
int
@@ -1818,8 +1938,20 @@ rl_message (va_alist)
#endif
va_end (args);
+ if (saved_local_prompt == 0)
+ {
+ rl_save_prompt ();
+ msg_saved_prompt = 1;
+ }
rl_display_prompt = msg_buf;
+ local_prompt = expand_prompt (msg_buf, &prompt_visible_length,
+ &prompt_last_invisible,
+ &prompt_invis_chars_first_line,
+ &prompt_physical_chars);
+ local_prompt_prefix = (char *)NULL;
+ local_prompt_len = local_prompt ? strlen (local_prompt) : 0;
(*rl_redisplay_function) ();
+
return 0;
}
#else /* !USE_VARARGS */
@@ -1829,8 +1961,21 @@ rl_message (format, arg1, arg2)
{
sprintf (msg_buf, format, arg1, arg2);
msg_buf[sizeof(msg_buf) - 1] = '\0'; /* overflow? */
+
rl_display_prompt = msg_buf;
+ if (saved_local_prompt == 0)
+ {
+ rl_save_prompt ();
+ msg_saved_prompt = 1;
+ }
+ local_prompt = expand_prompt (msg_buf, &prompt_visible_length,
+ &prompt_last_invisible,
+ &prompt_invis_chars_first_line,
+ &prompt_physical_chars);
+ local_prompt_prefix = (char *)NULL;
+ local_prompt_len = local_prompt ? strlen (local_prompt) : 0;
(*rl_redisplay_function) ();
+
return 0;
}
#endif /* !USE_VARARGS */
@@ -1840,6 +1985,11 @@ int
rl_clear_message ()
{
rl_display_prompt = rl_prompt;
+ if (msg_saved_prompt)
+ {
+ rl_restore_prompt ();
+ msg_saved_prompt = 0;
+ }
(*rl_redisplay_function) ();
return 0;
}
@@ -1849,32 +1999,26 @@ rl_reset_line_state ()
{
rl_on_new_line ();
- rl_display_prompt = rl_prompt ? rl_prompt : (char*) "";
+ rl_display_prompt = rl_prompt ? rl_prompt : "";
forced_display = 1;
return 0;
}
-/* These are getting numerous enough that it's time to create a struct. */
-
-static char *saved_local_prompt;
-static char *saved_local_prefix;
-static int saved_last_invisible;
-static int saved_visible_length;
-static int saved_invis_chars_first_line;
-static int saved_physical_chars;
-
void
rl_save_prompt ()
{
saved_local_prompt = local_prompt;
saved_local_prefix = local_prompt_prefix;
+ saved_prefix_length = prompt_prefix_length;
+ saved_local_length = local_prompt_len;
saved_last_invisible = prompt_last_invisible;
saved_visible_length = prompt_visible_length;
saved_invis_chars_first_line = prompt_invis_chars_first_line;
saved_physical_chars = prompt_physical_chars;
local_prompt = local_prompt_prefix = (char *)0;
- prompt_last_invisible = prompt_visible_length = 0;
+ local_prompt_len = 0;
+ prompt_last_invisible = prompt_visible_length = prompt_prefix_length = 0;
prompt_invis_chars_first_line = prompt_physical_chars = 0;
}
@@ -1886,10 +2030,18 @@ rl_restore_prompt ()
local_prompt = saved_local_prompt;
local_prompt_prefix = saved_local_prefix;
+ local_prompt_len = saved_local_length;
+ prompt_prefix_length = saved_prefix_length;
prompt_last_invisible = saved_last_invisible;
prompt_visible_length = saved_visible_length;
prompt_invis_chars_first_line = saved_invis_chars_first_line;
prompt_physical_chars = saved_physical_chars;
+
+ /* can test saved_local_prompt to see if prompt info has been saved. */
+ saved_local_prompt = saved_local_prefix = (char *)0;
+ saved_local_length = 0;
+ saved_last_invisible = saved_visible_length = saved_prefix_length = 0;
+ saved_invis_chars_first_line = saved_physical_chars = 0;
}
char *
@@ -1897,11 +2049,15 @@ _rl_make_prompt_for_search (pchar)
int pchar;
{
int len;
- char *pmt;
+ char *pmt, *p;
rl_save_prompt ();
- if (saved_local_prompt == 0)
+ /* We've saved the prompt, and can do anything with the various prompt
+ strings we need before they're restored. We want the unexpanded
+ portion of the prompt string after any final newline. */
+ p = rl_prompt ? strrchr (rl_prompt, '\n') : 0;
+ if (p == 0)
{
len = (rl_prompt && *rl_prompt) ? strlen (rl_prompt) : 0;
pmt = (char *)xmalloc (len + 2);
@@ -1912,17 +2068,17 @@ _rl_make_prompt_for_search (pchar)
}
else
{
- len = *saved_local_prompt ? strlen (saved_local_prompt) : 0;
+ p++;
+ len = strlen (p);
pmt = (char *)xmalloc (len + 2);
if (len)
- strcpy (pmt, saved_local_prompt);
+ strcpy (pmt, p);
pmt[len] = pchar;
pmt[len+1] = '\0';
- local_prompt = savestring (pmt);
- prompt_last_invisible = saved_last_invisible;
- prompt_visible_length = saved_visible_length + 1;
- }
+ }
+ /* will be overwritten by expand_prompt, called from rl_message */
+ prompt_physical_chars = saved_physical_chars + 1;
return pmt;
}
@@ -1983,6 +2139,9 @@ insert_some_chars (string, count, col)
char *string;
int count, col;
{
+#if defined (__MSDOS__) || defined (__MINGW32__)
+ _rl_output_some_chars (string, count);
+#else
/* DEBUGGING */
if (MB_CUR_MAX == 1 || rl_byte_oriented)
if (count != col)
@@ -2021,6 +2180,7 @@ insert_some_chars (string, count, col)
if (_rl_term_ei && *_rl_term_ei)
tputs (_rl_term_ei, 1, _rl_output_character_function);
}
+#endif /* __MSDOS__ || __MINGW32__ */
}
/* Delete COUNT characters from the display line. */
@@ -2031,6 +2191,7 @@ delete_chars (count)
if (count > _rl_screenwidth) /* XXX */
return;
+#if !defined (__MSDOS__) && !defined (__MINGW32__)
if (_rl_term_DC && *_rl_term_DC)
{
char *buffer;
@@ -2043,6 +2204,7 @@ delete_chars (count)
while (count--)
tputs (_rl_term_dc, 1, _rl_output_character_function);
}
+#endif /* !__MSDOS__ && !__MINGW32__ */
}
void
@@ -2066,7 +2228,8 @@ _rl_update_final ()
char *last_line;
last_line = &visible_line[vis_lbreaks[_rl_vis_botlin]];
- _rl_move_cursor_relative (_rl_screenwidth - 1, last_line);
+ cpos_buffer_position = -1; /* don't know where we are in buffer */
+ _rl_move_cursor_relative (_rl_screenwidth - 1, last_line); /* XXX */
_rl_clear_to_eol (0);
putc (last_line[_rl_screenwidth - 1], rl_outstream);
}
@@ -2098,18 +2261,10 @@ static void
redraw_prompt (t)
char *t;
{
- char *oldp, *oldl, *oldlprefix;
- int oldlen, oldlast, oldplen, oldninvis, oldphyschars;
+ char *oldp;
- /* Geez, I should make this a struct. */
oldp = rl_display_prompt;
- oldl = local_prompt;
- oldlprefix = local_prompt_prefix;
- oldlen = prompt_visible_length;
- oldplen = prompt_prefix_length;
- oldlast = prompt_last_invisible;
- oldninvis = prompt_invis_chars_first_line;
- oldphyschars = prompt_physical_chars;
+ rl_save_prompt ();
rl_display_prompt = t;
local_prompt = expand_prompt (t, &prompt_visible_length,
@@ -2117,16 +2272,12 @@ redraw_prompt (t)
&prompt_invis_chars_first_line,
&prompt_physical_chars);
local_prompt_prefix = (char *)NULL;
+ local_prompt_len = local_prompt ? strlen (local_prompt) : 0;
+
rl_forced_update_display ();
rl_display_prompt = oldp;
- local_prompt = oldl;
- local_prompt_prefix = oldlprefix;
- prompt_visible_length = oldlen;
- prompt_prefix_length = oldplen;
- prompt_last_invisible = oldlast;
- prompt_invis_chars_first_line = oldninvis;
- prompt_physical_chars = oldphyschars;
+ rl_restore_prompt();
}
/* Redisplay the current line after a SIGWINCH is received. */
@@ -2230,10 +2381,11 @@ _rl_col_width (str, start, end)
if (end <= start)
return 0;
+ memset (&ps, 0, sizeof (mbstate_t));
+
point = 0;
max = end;
- memset (&ps, 0, sizeof(ps));
while (point < start)
{
tmp = mbrlen (str + point, max, &ps);
diff --git a/cmd-line-utils/readline/funmap.c b/cmd-line-utils/readline/funmap.c
index d56ffb9fadc..2d2a35ed0c8 100644
--- a/cmd-line-utils/readline/funmap.c
+++ b/cmd-line-utils/readline/funmap.c
@@ -21,7 +21,9 @@
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
#define READLINE_LIBRARY
-#include "config_readline.h"
+#if defined (HAVE_CONFIG_H)
+# include "config_readline.h"
+#endif
#if !defined (BUFSIZ)
#include <stdio.h>
@@ -174,6 +176,7 @@ static FUNMAP default_funmap[] = {
{ "vi-put", rl_vi_put },
{ "vi-redo", rl_vi_redo },
{ "vi-replace", rl_vi_replace },
+ { "vi-rubout", rl_vi_rubout },
{ "vi-search", rl_vi_search },
{ "vi-search-again", rl_vi_search_again },
{ "vi-set-mark", rl_vi_set_mark },
diff --git a/cmd-line-utils/readline/histexpand.c b/cmd-line-utils/readline/histexpand.c
index 0a45438990a..45377fc3b5e 100644
--- a/cmd-line-utils/readline/histexpand.c
+++ b/cmd-line-utils/readline/histexpand.c
@@ -22,7 +22,9 @@
#define READLINE_LIBRARY
-#include "config_readline.h"
+#if defined (HAVE_CONFIG_H)
+# include "config_readline.h"
+#endif
#include <stdio.h>
@@ -54,8 +56,6 @@
typedef int _hist_search_func_t PARAMS((const char *, int));
-extern int rl_byte_oriented; /* declared in mbutil.c */
-
static char error_pointer;
static char *subst_lhs;
@@ -87,14 +87,14 @@ char history_comment_char = '\0';
/* The list of characters which inhibit the expansion of text if found
immediately following history_expansion_char. */
-char *history_no_expand_chars = (char*) " \t\n\r=";
+char *history_no_expand_chars = " \t\n\r=";
/* If set to a non-zero value, single quotes inhibit history expansion.
The default is 0. */
int history_quotes_inhibit_expansion = 0;
/* Used to split words by history_tokenize_internal. */
-char *history_word_delimiters = (char*) HISTORY_WORD_DELIMITERS;
+char *history_word_delimiters = HISTORY_WORD_DELIMITERS;
/* If set, this points to a function that is called to verify that a
particular history expansion should be performed. */
@@ -203,24 +203,25 @@ get_history_event (string, caller_index, delimiting_quote)
}
/* Only a closing `?' or a newline delimit a substring search string. */
- for (local_index = i; (c = string[i]); i++)
+ for (local_index = i; c = string[i]; i++)
+ {
#if defined (HANDLE_MULTIBYTE)
- if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
- {
- int v;
- mbstate_t ps;
+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ {
+ int v;
+ mbstate_t ps;
+
+ memset (&ps, 0, sizeof (mbstate_t));
+ /* These produce warnings because we're passing a const string to a
+ function that takes a non-const string. */
+ _rl_adjust_point ((char *)string, i, &ps);
+ if ((v = _rl_get_char_len ((char *)string + i, &ps)) > 1)
+ {
+ i += v - 1;
+ continue;
+ }
+ }
- memset (&ps, 0, sizeof (mbstate_t));
- /* These produce warnings because we're passing a const string to a
- function that takes a non-const string. */
- _rl_adjust_point ((char *)string, i, &ps);
- if ((v = _rl_get_char_len ((char *)string + i, &ps)) > 1)
- {
- i += v - 1;
- continue;
- }
- }
- else
#endif /* HANDLE_MULTIBYTE */
if ((!substring_okay && (whitespace (c) || c == ':' ||
(history_search_delimiter_chars && member (c, history_search_delimiter_chars)) ||
@@ -228,6 +229,7 @@ get_history_event (string, caller_index, delimiting_quote)
string[i] == '\n' ||
(substring_okay && string[i] == '?'))
break;
+ }
which = i - local_index;
temp = (char *)xmalloc (1 + which);
@@ -560,12 +562,12 @@ history_expand_internal (string, start, end_index_ptr, ret_string, current_line)
#if defined (HANDLE_MULTIBYTE)
if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
{
- int chr, l;
+ int ch, l;
l = _rl_find_prev_mbchar (string, i, MB_FIND_ANY);
- chr = string[l];
+ ch = string[l];
/* XXX - original patch had i - 1 ??? If i == 0 it would fail. */
- if (i && (chr == '\'' || chr == '"'))
- quoted_search_delimiter = chr;
+ if (i && (ch == '\'' || ch == '"'))
+ quoted_search_delimiter = ch;
}
else
#endif /* HANDLE_MULTIBYTE */
@@ -1426,6 +1428,8 @@ history_tokenize_word (string, ind)
{
if (peek == '<' && string[i + 2] == '-')
i++;
+ else if (peek == '<' && string[i + 2] == '<')
+ i++;
i += 2;
return i;
}
diff --git a/cmd-line-utils/readline/histfile.c b/cmd-line-utils/readline/histfile.c
index f1822b105a4..d98293d933c 100644
--- a/cmd-line-utils/readline/histfile.c
+++ b/cmd-line-utils/readline/histfile.c
@@ -30,7 +30,9 @@
# include <floss.h>
#endif
-#include "config_readline.h"
+#if defined (HAVE_CONFIG_H)
+# include "config_readline.h"
+#endif
#include <stdio.h>
@@ -184,8 +186,7 @@ read_history_range (filename, from, to)
file_size = (size_t)finfo.st_size;
/* check for overflow on very large files */
- if ((long long) file_size != (long long) finfo.st_size ||
- file_size + 1 < file_size)
+ if (file_size != finfo.st_size || file_size + 1 < file_size)
{
errno = overflow_errno;
goto error_and_exit;
@@ -255,7 +256,11 @@ read_history_range (filename, from, to)
for (line_end = line_start; line_end < bufend; line_end++)
if (*line_end == '\n')
{
- *line_end = '\0';
+ /* Change to allow Windows-like \r\n end of line delimiter. */
+ if (line_end > line_start && line_end[-1] == '\r')
+ line_end[-1] = '\0';
+ else
+ *line_end = '\0';
if (*line_start)
{
@@ -334,8 +339,7 @@ history_truncate_file (fname, lines)
file_size = (size_t)finfo.st_size;
/* check for overflow on very large files */
- if ((long long) file_size != (long long) finfo.st_size ||
- file_size + 1 < file_size)
+ if (file_size != finfo.st_size || file_size + 1 < file_size)
{
close (file);
#if defined (EFBIG)
diff --git a/cmd-line-utils/readline/history.c b/cmd-line-utils/readline/history.c
index bb1960d8d99..5cd5788d1da 100644
--- a/cmd-line-utils/readline/history.c
+++ b/cmd-line-utils/readline/history.c
@@ -1,6 +1,6 @@
/* history.c -- standalone history library */
-/* Copyright (C) 1989-2003 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2005 Free Software Foundation, Inc.
This file contains the GNU History Library (the Library), a set of
routines for managing the text of previously typed lines.
@@ -25,7 +25,9 @@
you can call. I think I have done that. */
#define READLINE_LIBRARY
-#include "config_readline.h"
+#if defined (HAVE_CONFIG_H)
+# include "config_readline.h"
+#endif
#include <stdio.h>
@@ -202,11 +204,27 @@ history_get (offset)
int local_index;
local_index = offset - history_base;
- return (local_index >= history_length || local_index < 0 || !the_history)
+ return (local_index >= history_length || local_index < 0 || the_history == 0)
? (HIST_ENTRY *)NULL
: the_history[local_index];
}
+HIST_ENTRY *
+alloc_history_entry (string, ts)
+ char *string;
+ char *ts;
+{
+ HIST_ENTRY *temp;
+
+ temp = (HIST_ENTRY *)xmalloc (sizeof (HIST_ENTRY));
+
+ temp->line = string ? savestring (string) : string;
+ temp->data = (char *)NULL;
+ temp->timestamp = ts;
+
+ return temp;
+}
+
time_t
history_get_time (hist)
HIST_ENTRY *hist;
@@ -288,11 +306,7 @@ add_history (string)
}
}
- temp = (HIST_ENTRY *)xmalloc (sizeof (HIST_ENTRY));
- temp->line = savestring (string);
- temp->data = (char *)NULL;
-
- temp->timestamp = hist_inittime ();
+ temp = alloc_history_entry (string, hist_inittime ());
the_history[history_length] = (HIST_ENTRY *)NULL;
the_history[history_length - 1] = temp;
@@ -326,6 +340,26 @@ free_history_entry (hist)
free (hist);
return (x);
}
+
+HIST_ENTRY *
+copy_history_entry (hist)
+ HIST_ENTRY *hist;
+{
+ HIST_ENTRY *ret;
+ char *ts;
+
+ if (hist == 0)
+ return hist;
+
+ ret = alloc_history_entry (hist->line, (char *)NULL);
+
+ ts = hist->timestamp ? savestring (hist->timestamp) : hist->timestamp;
+ ret->timestamp = ts;
+
+ ret->data = hist->data;
+
+ return ret;
+}
/* Make the history entry at WHICH have LINE and DATA. This returns
the old entry so you can dispose of the data. In the case of an
@@ -338,7 +372,7 @@ replace_history_entry (which, line, data)
{
HIST_ENTRY *temp, *old_value;
- if (which >= history_length)
+ if (which < 0 || which >= history_length)
return ((HIST_ENTRY *)NULL);
temp = (HIST_ENTRY *)xmalloc (sizeof (HIST_ENTRY));
@@ -352,6 +386,51 @@ replace_history_entry (which, line, data)
return (old_value);
}
+/* Replace the DATA in the specified history entries, replacing OLD with
+ NEW. WHICH says which one(s) to replace: WHICH == -1 means to replace
+ all of the history entries where entry->data == OLD; WHICH == -2 means
+ to replace the `newest' history entry where entry->data == OLD; and
+ WHICH >= 0 means to replace that particular history entry's data, as
+ long as it matches OLD. */
+void
+replace_history_data (which,old, new)
+ int which;
+ histdata_t *old, *new;
+{
+ HIST_ENTRY *entry;
+ register int i, last;
+
+ if (which < -2 || which >= history_length || history_length == 0 || the_history == 0)
+ return;
+
+ if (which >= 0)
+ {
+ entry = the_history[which];
+ if (entry && entry->data == old)
+ entry->data = new;
+ return;
+ }
+
+ last = -1;
+ for (i = 0; i < history_length; i++)
+ {
+ entry = the_history[i];
+ if (entry == 0)
+ continue;
+ if (entry->data == old)
+ {
+ last = i;
+ if (which == -1)
+ entry->data = new;
+ }
+ }
+ if (which == -2 && last >= 0)
+ {
+ entry = the_history[last];
+ entry->data = new; /* XXX - we don't check entry->old */
+ }
+}
+
/* Remove history element WHICH from the history. The removed
element is returned to you so you can free the line, data,
and containing structure. */
@@ -362,17 +441,15 @@ remove_history (which)
HIST_ENTRY *return_value;
register int i;
- if (which >= history_length || !history_length)
- return_value = (HIST_ENTRY *)NULL;
- else
- {
- return_value = the_history[which];
+ if (which < 0 || which >= history_length || history_length == 0 || the_history == 0)
+ return ((HIST_ENTRY *)NULL);
- for (i = which; i < history_length; i++)
- the_history[i] = the_history[i + 1];
+ return_value = the_history[which];
- history_length--;
- }
+ for (i = which; i < history_length; i++)
+ the_history[i] = the_history[i + 1];
+
+ history_length--;
return (return_value);
}
diff --git a/cmd-line-utils/readline/histsearch.c b/cmd-line-utils/readline/histsearch.c
index 778b323afdc..b71965135cc 100644
--- a/cmd-line-utils/readline/histsearch.c
+++ b/cmd-line-utils/readline/histsearch.c
@@ -22,7 +22,9 @@
#define READLINE_LIBRARY
-#include "config_readline.h"
+#if defined (HAVE_CONFIG_H)
+# include "config_readline.h"
+#endif
#include <stdio.h>
#if defined (HAVE_STDLIB_H)
diff --git a/cmd-line-utils/readline/input.c b/cmd-line-utils/readline/input.c
index 818f2e8763d..62c0443d890 100644
--- a/cmd-line-utils/readline/input.c
+++ b/cmd-line-utils/readline/input.c
@@ -1,6 +1,6 @@
/* input.c -- character input functions for readline. */
-/* Copyright (C) 1994 Free Software Foundation, Inc.
+/* Copyright (C) 1994-2005 Free Software Foundation, Inc.
This file is part of the GNU Readline Library, a library for
reading lines of text with interactive input and history editing.
@@ -25,7 +25,9 @@
# include <floss.h>
#endif
-#include "config_readline.h"
+#if defined (HAVE_CONFIG_H)
+# include "config_readline.h"
+#endif
#include <sys/types.h>
#include <fcntl.h>
@@ -177,6 +179,7 @@ rl_gather_tyi ()
struct timeval timeout;
#endif
+ chars_avail = 0;
tty = fileno (rl_instream);
#if defined (HAVE_SELECT)
@@ -218,6 +221,13 @@ rl_gather_tyi ()
}
#endif /* O_NDELAY */
+#if defined (__MINGW32__)
+ /* Use getch/_kbhit to check for available console input, in the same way
+ that we read it normally. */
+ chars_avail = isatty (tty) ? _kbhit () : 0;
+ result = 0;
+#endif
+
/* If there's nothing available, don't waste time trying to read
something. */
if (chars_avail <= 0)
@@ -261,7 +271,7 @@ rl_set_keyboard_input_timeout (u)
int o;
o = _keyboard_input_timeout;
- if (u > 0)
+ if (u >= 0)
_keyboard_input_timeout = u;
return (o);
}
@@ -303,6 +313,11 @@ _rl_input_available ()
#endif
+#if defined (__MINGW32__)
+ if (isatty (tty))
+ return (_kbhit ());
+#endif
+
return 0;
}
@@ -405,7 +420,7 @@ rl_read_key ()
else
{
/* If input is coming from a macro, then use that. */
- if ((c= _rl_next_macro_key ()))
+ if (c = _rl_next_macro_key ())
return (c);
/* If the user has an event function, then call it periodically. */
@@ -442,6 +457,10 @@ rl_getc (stream)
while (1)
{
+#if defined (__MINGW32__)
+ if (isatty (fileno (stream)))
+ return (getch ());
+#endif
result = read (fileno (stream), &c, sizeof (unsigned char));
if (result == sizeof (unsigned char))
@@ -483,7 +502,7 @@ rl_getc (stream)
this is simply an interrupted system call to read ().
Otherwise, some error ocurred, also signifying EOF. */
if (errno != EINTR)
- return (EOF);
+ return (RL_ISSTATE (RL_STATE_READCMD) ? READERR : EOF);
}
}
@@ -517,6 +536,12 @@ _rl_read_mbchar (mbchar, size)
ps = ps_back;
continue;
}
+ else if (mbchar_bytes_length == 0)
+ {
+ mbchar[0] = '\0'; /* null wide character */
+ mb_len = 1;
+ break;
+ }
else if (mbchar_bytes_length > (size_t)(0))
break;
}
@@ -525,21 +550,21 @@ _rl_read_mbchar (mbchar, size)
}
/* Read a multibyte-character string whose first character is FIRST into
- the buffer MB of length MBLEN. Returns the last character read, which
+ the buffer MB of length MLEN. Returns the last character read, which
may be FIRST. Used by the search functions, among others. Very similar
to _rl_read_mbchar. */
int
-_rl_read_mbstring (first, mb, mb_len)
+_rl_read_mbstring (first, mb, mlen)
int first;
char *mb;
- int mb_len;
+ int mlen;
{
int i, c;
mbstate_t ps;
c = first;
- memset (mb, 0, mb_len);
- for (i = 0; i < mb_len; i++)
+ memset (mb, 0, mlen);
+ for (i = 0; i < mlen; i++)
{
mb[i] = (char)c;
memset (&ps, 0, sizeof (mbstate_t));
diff --git a/cmd-line-utils/readline/isearch.c b/cmd-line-utils/readline/isearch.c
index 9071695dda8..8060adb97cd 100644
--- a/cmd-line-utils/readline/isearch.c
+++ b/cmd-line-utils/readline/isearch.c
@@ -4,7 +4,7 @@
/* */
/* **************************************************************** */
-/* Copyright (C) 1987-2002 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
This file contains the Readline Library (the Library), a set of
routines for providing Emacs style line input to programs that ask
@@ -26,7 +26,9 @@
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
#define READLINE_LIBRARY
-#include "config_readline.h"
+#if defined (HAVE_CONFIG_H)
+# include "config_readline.h"
+#endif
#include <sys/types.h>
@@ -54,21 +56,77 @@
/* Variables exported to other files in the readline library. */
char *_rl_isearch_terminators = (char *)NULL;
+_rl_search_cxt *_rl_iscxt = 0;
+
/* Variables imported from other files in the readline library. */
extern HIST_ENTRY *_rl_saved_line_for_history;
-/* Forward declarations */
static int rl_search_history PARAMS((int, int));
+static _rl_search_cxt *_rl_isearch_init PARAMS((int));
+static void _rl_isearch_fini PARAMS((_rl_search_cxt *));
+static int _rl_isearch_cleanup PARAMS((_rl_search_cxt *, int));
+
/* Last line found by the current incremental search, so we don't `find'
- identical lines many times in a row. */
-static char *prev_line_found;
+ identical lines many times in a row. Now part of isearch context. */
+/* static char *prev_line_found; */
/* Last search string and its length. */
static char *last_isearch_string;
static int last_isearch_string_len;
-static char *default_isearch_terminators = (char*) "\033\012";
+static char *default_isearch_terminators = "\033\012";
+
+_rl_search_cxt *
+_rl_scxt_alloc (type, flags)
+ int type, flags;
+{
+ _rl_search_cxt *cxt;
+
+ cxt = (_rl_search_cxt *)xmalloc (sizeof (_rl_search_cxt));
+
+ cxt->type = type;
+ cxt->sflags = flags;
+
+ cxt->search_string = 0;
+ cxt->search_string_size = cxt->search_string_index = 0;
+
+ cxt->lines = 0;
+ cxt->allocated_line = 0;
+ cxt->hlen = cxt->hindex = 0;
+
+ cxt->save_point = rl_point;
+ cxt->save_mark = rl_mark;
+ cxt->save_line = where_history ();
+ cxt->last_found_line = cxt->save_line;
+ cxt->prev_line_found = 0;
+
+ cxt->save_undo_list = 0;
+
+ cxt->history_pos = 0;
+ cxt->direction = 0;
+
+ cxt->lastc = 0;
+
+ cxt->sline = 0;
+ cxt->sline_len = cxt->sline_index = 0;
+
+ cxt->search_terminators = 0;
+
+ return cxt;
+}
+
+void
+_rl_scxt_dispose (cxt, flags)
+ _rl_search_cxt *cxt;
+ int flags;
+{
+ FREE (cxt->search_string);
+ FREE (cxt->allocated_line);
+ FREE (cxt->lines);
+
+ free (cxt);
+}
/* Search backwards through the history looking for a string which is typed
interactively. Start with the current line. */
@@ -90,12 +148,13 @@ rl_forward_search_history (sign, key)
/* Display the current state of the search in the echo-area.
SEARCH_STRING contains the string that is being searched for,
- DIRECTION is zero for forward, or 1 for reverse,
+ DIRECTION is zero for forward, or non-zero for reverse,
WHERE is the history list number of the current line. If it is
-1, then this line is the starting one. */
static void
-rl_display_search (char *search_string, int reverse_p,
- int where __attribute__((unused)))
+rl_display_search (search_string, reverse_p, where)
+ char *search_string;
+ int reverse_p, where;
{
char *message;
int msglen, searchlen;
@@ -137,65 +196,23 @@ rl_display_search (char *search_string, int reverse_p,
(*rl_redisplay_function) ();
}
-/* Search through the history looking for an interactively typed string.
- This is analogous to i-search. We start the search in the current line.
- DIRECTION is which direction to search; >= 0 means forward, < 0 means
- backwards. */
-static int
-rl_search_history (int direction, int invoking_key __attribute__((unused)))
+static _rl_search_cxt *
+_rl_isearch_init (direction)
+ int direction;
{
- /* The string that the user types in to search for. */
- char *search_string;
-
- /* The current length of SEARCH_STRING. */
- int search_string_index;
-
- /* The amount of space that SEARCH_STRING has allocated to it. */
- int search_string_size;
-
- /* The list of lines to search through. */
- char **lines, *allocated_line;
-
- /* The length of LINES. */
- int hlen;
-
- /* Where we get LINES from. */
- HIST_ENTRY **hlist;
-
+ _rl_search_cxt *cxt;
register int i;
- int orig_point, orig_mark, orig_line, last_found_line;
- int c, found, failed, sline_len;
- int n, wstart, wlen;
-#if defined (HANDLE_MULTIBYTE)
- char mb[MB_LEN_MAX];
-#endif
-
- /* The line currently being searched. */
- char *sline;
-
- /* Offset in that line. */
- int line_index;
-
- /* Non-zero if we are doing a reverse search. */
- int reverse;
-
- /* The list of characters which terminate the search, but are not
- subsequently executed. If the variable isearch-terminators has
- been set, we use that value, otherwise we use ESC and C-J. */
- char *isearch_terminators;
+ HIST_ENTRY **hlist;
- RL_SETSTATE(RL_STATE_ISEARCH);
- orig_point = rl_point;
- orig_mark = rl_mark;
- last_found_line = orig_line = where_history ();
- reverse = direction < 0;
- hlist = history_list ();
- allocated_line = (char *)NULL;
+ cxt = _rl_scxt_alloc (RL_SEARCH_ISEARCH, 0);
+ if (direction < 0)
+ cxt->sflags |= SF_REVERSE;
- isearch_terminators = _rl_isearch_terminators ? _rl_isearch_terminators
+ cxt->search_terminators = _rl_isearch_terminators ? _rl_isearch_terminators
: default_isearch_terminators;
/* Create an arrary of pointers to the lines that we want to search. */
+ hlist = history_list ();
rl_maybe_replace_line ();
i = 0;
if (hlist)
@@ -203,354 +220,447 @@ rl_search_history (int direction, int invoking_key __attribute__((unused)))
/* Allocate space for this many lines, +1 for the current input line,
and remember those lines. */
- lines = (char **)xmalloc ((1 + (hlen = i)) * sizeof (char *));
- for (i = 0; i < hlen; i++)
- lines[i] = hlist[i]->line;
+ cxt->lines = (char **)xmalloc ((1 + (cxt->hlen = i)) * sizeof (char *));
+ for (i = 0; i < cxt->hlen; i++)
+ cxt->lines[i] = hlist[i]->line;
if (_rl_saved_line_for_history)
- lines[i] = _rl_saved_line_for_history->line;
+ cxt->lines[i] = _rl_saved_line_for_history->line;
else
{
/* Keep track of this so we can free it. */
- allocated_line = (char *)xmalloc (1 + strlen (rl_line_buffer));
- strcpy (allocated_line, &rl_line_buffer[0]);
- lines[i] = allocated_line;
+ cxt->allocated_line = (char *)xmalloc (1 + strlen (rl_line_buffer));
+ strcpy (cxt->allocated_line, &rl_line_buffer[0]);
+ cxt->lines[i] = cxt->allocated_line;
}
- hlen++;
+ cxt->hlen++;
/* The line where we start the search. */
- i = orig_line;
+ cxt->history_pos = cxt->save_line;
rl_save_prompt ();
/* Initialize search parameters. */
- search_string = (char *)xmalloc (search_string_size = 128);
- *search_string = '\0';
- search_string_index = 0;
- prev_line_found = (char *)0; /* XXX */
+ cxt->search_string = (char *)xmalloc (cxt->search_string_size = 128);
+ cxt->search_string[cxt->search_string_index = 0] = '\0';
/* Normalize DIRECTION into 1 or -1. */
- direction = (direction >= 0) ? 1 : -1;
+ cxt->direction = (direction >= 0) ? 1 : -1;
- rl_display_search (search_string, reverse, -1);
+ cxt->sline = rl_line_buffer;
+ cxt->sline_len = strlen (cxt->sline);
+ cxt->sline_index = rl_point;
- sline = rl_line_buffer;
- sline_len = strlen (sline);
- line_index = rl_point;
+ _rl_iscxt = cxt; /* save globally */
- found = failed = 0;
- for (;;)
+ return cxt;
+}
+
+static void
+_rl_isearch_fini (cxt)
+ _rl_search_cxt *cxt;
+{
+ /* First put back the original state. */
+ strcpy (rl_line_buffer, cxt->lines[cxt->save_line]);
+
+ rl_restore_prompt ();
+
+ /* Save the search string for possible later use. */
+ FREE (last_isearch_string);
+ last_isearch_string = cxt->search_string;
+ last_isearch_string_len = cxt->search_string_index;
+ cxt->search_string = 0;
+
+ if (cxt->last_found_line < cxt->save_line)
+ rl_get_previous_history (cxt->save_line - cxt->last_found_line, 0);
+ else
+ rl_get_next_history (cxt->last_found_line - cxt->save_line, 0);
+
+ /* If the string was not found, put point at the end of the last matching
+ line. If last_found_line == orig_line, we didn't find any matching
+ history lines at all, so put point back in its original position. */
+ if (cxt->sline_index < 0)
{
- rl_command_func_t *f = (rl_command_func_t *)NULL;
+ if (cxt->last_found_line == cxt->save_line)
+ cxt->sline_index = cxt->save_point;
+ else
+ cxt->sline_index = strlen (rl_line_buffer);
+ rl_mark = cxt->save_mark;
+ }
+
+ rl_point = cxt->sline_index;
+ /* Don't worry about where to put the mark here; rl_get_previous_history
+ and rl_get_next_history take care of it. */
+
+ rl_clear_message ();
+}
- /* Read a key and decide how to proceed. */
- RL_SETSTATE(RL_STATE_MOREINPUT);
- c = rl_read_key ();
- RL_UNSETSTATE(RL_STATE_MOREINPUT);
+int
+_rl_search_getchar (cxt)
+ _rl_search_cxt *cxt;
+{
+ int c;
+
+ /* Read a key and decide how to proceed. */
+ RL_SETSTATE(RL_STATE_MOREINPUT);
+ c = cxt->lastc = rl_read_key ();
+ RL_UNSETSTATE(RL_STATE_MOREINPUT);
#if defined (HANDLE_MULTIBYTE)
- if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
- c = _rl_read_mbstring (c, mb, MB_LEN_MAX);
+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ c = cxt->lastc = _rl_read_mbstring (cxt->lastc, cxt->mb, MB_LEN_MAX);
#endif
- /* Translate the keys we do something with to opcodes. */
- if (c >= 0 && _rl_keymap[c].type == ISFUNC)
- {
- f = _rl_keymap[c].function;
-
- if (f == rl_reverse_search_history)
- c = reverse ? -1 : -2;
- else if (f == rl_forward_search_history)
- c = !reverse ? -1 : -2;
- else if (f == rl_rubout)
- c = -3;
- else if (c == CTRL ('G'))
- c = -4;
- else if (c == CTRL ('W')) /* XXX */
- c = -5;
- else if (c == CTRL ('Y')) /* XXX */
- c = -6;
- }
+ return c;
+}
- /* The characters in isearch_terminators (set from the user-settable
- variable isearch-terminators) are used to terminate the search but
- not subsequently execute the character as a command. The default
- value is "\033\012" (ESC and C-J). */
- if (strchr (isearch_terminators, c))
- {
- /* ESC still terminates the search, but if there is pending
- input or if input arrives within 0.1 seconds (on systems
- with select(2)) it is used as a prefix character
- with rl_execute_next. WATCH OUT FOR THIS! This is intended
- to allow the arrow keys to be used like ^F and ^B are used
- to terminate the search and execute the movement command.
- XXX - since _rl_input_available depends on the application-
- settable keyboard timeout value, this could alternatively
- use _rl_input_queued(100000) */
- if (c == ESC && _rl_input_available ())
- rl_execute_next (ESC);
- break;
- }
+/* Process just-read character C according to isearch context CXT. Return
+ -1 if the caller should just free the context and return, 0 if we should
+ break out of the loop, and 1 if we should continue to read characters. */
+int
+_rl_isearch_dispatch (cxt, c)
+ _rl_search_cxt *cxt;
+ int c;
+{
+ int n, wstart, wlen, limit, cval;
+ rl_command_func_t *f;
+
+ f = (rl_command_func_t *)NULL;
+
+ /* Translate the keys we do something with to opcodes. */
+ if (c >= 0 && _rl_keymap[c].type == ISFUNC)
+ {
+ f = _rl_keymap[c].function;
+
+ if (f == rl_reverse_search_history)
+ cxt->lastc = (cxt->sflags & SF_REVERSE) ? -1 : -2;
+ else if (f == rl_forward_search_history)
+ cxt->lastc = (cxt->sflags & SF_REVERSE) ? -2 : -1;
+ else if (f == rl_rubout)
+ cxt->lastc = -3;
+ else if (c == CTRL ('G'))
+ cxt->lastc = -4;
+ else if (c == CTRL ('W')) /* XXX */
+ cxt->lastc = -5;
+ else if (c == CTRL ('Y')) /* XXX */
+ cxt->lastc = -6;
+ }
+
+ /* The characters in isearch_terminators (set from the user-settable
+ variable isearch-terminators) are used to terminate the search but
+ not subsequently execute the character as a command. The default
+ value is "\033\012" (ESC and C-J). */
+ if (strchr (cxt->search_terminators, cxt->lastc))
+ {
+ /* ESC still terminates the search, but if there is pending
+ input or if input arrives within 0.1 seconds (on systems
+ with select(2)) it is used as a prefix character
+ with rl_execute_next. WATCH OUT FOR THIS! This is intended
+ to allow the arrow keys to be used like ^F and ^B are used
+ to terminate the search and execute the movement command.
+ XXX - since _rl_input_available depends on the application-
+ settable keyboard timeout value, this could alternatively
+ use _rl_input_queued(100000) */
+ if (cxt->lastc == ESC && _rl_input_available ())
+ rl_execute_next (ESC);
+ return (0);
+ }
#define ENDSRCH_CHAR(c) \
((CTRL_CHAR (c) || META_CHAR (c) || (c) == RUBOUT) && ((c) != CTRL ('G')))
#if defined (HANDLE_MULTIBYTE)
- if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ {
+ if (cxt->lastc >= 0 && (cxt->mb[0] && cxt->mb[1] == '\0') && ENDSRCH_CHAR (cxt->lastc))
+ {
+ /* This sets rl_pending_input to c; it will be picked up the next
+ time rl_read_key is called. */
+ rl_execute_next (cxt->lastc);
+ return (0);
+ }
+ }
+ else
+#endif
+ if (cxt->lastc >= 0 && ENDSRCH_CHAR (cxt->lastc))
+ {
+ /* This sets rl_pending_input to LASTC; it will be picked up the next
+ time rl_read_key is called. */
+ rl_execute_next (cxt->lastc);
+ return (0);
+ }
+
+ /* Now dispatch on the character. `Opcodes' affect the search string or
+ state. Other characters are added to the string. */
+ switch (cxt->lastc)
+ {
+ /* search again */
+ case -1:
+ if (cxt->search_string_index == 0)
{
- if (c >= 0 && strlen (mb) == 1 && ENDSRCH_CHAR (c))
+ if (last_isearch_string)
{
- /* This sets rl_pending_input to c; it will be picked up the next
- time rl_read_key is called. */
- rl_execute_next (c);
+ cxt->search_string_size = 64 + last_isearch_string_len;
+ cxt->search_string = (char *)xrealloc (cxt->search_string, cxt->search_string_size);
+ strcpy (cxt->search_string, last_isearch_string);
+ cxt->search_string_index = last_isearch_string_len;
+ rl_display_search (cxt->search_string, (cxt->sflags & SF_REVERSE), -1);
break;
}
+ return (1);
}
+ else if (cxt->sflags & SF_REVERSE)
+ cxt->sline_index--;
+ else if (cxt->sline_index != cxt->sline_len)
+ cxt->sline_index++;
else
-#endif
- if (c >= 0 && ENDSRCH_CHAR (c))
+ rl_ding ();
+ break;
+
+ /* switch directions */
+ case -2:
+ cxt->direction = -cxt->direction;
+ if (cxt->direction < 0)
+ cxt->sflags |= SF_REVERSE;
+ else
+ cxt->sflags &= ~SF_REVERSE;
+ break;
+
+ /* delete character from search string. */
+ case -3: /* C-H, DEL */
+ /* This is tricky. To do this right, we need to keep a
+ stack of search positions for the current search, with
+ sentinels marking the beginning and end. But this will
+ do until we have a real isearch-undo. */
+ if (cxt->search_string_index == 0)
+ rl_ding ();
+ else
+ cxt->search_string[--cxt->search_string_index] = '\0';
+ break;
+
+ case -4: /* C-G, abort */
+ rl_replace_line (cxt->lines[cxt->save_line], 0);
+ rl_point = cxt->save_point;
+ rl_mark = cxt->save_mark;
+ rl_restore_prompt();
+ rl_clear_message ();
+
+ return -1;
+
+ case -5: /* C-W */
+ /* skip over portion of line we already matched and yank word */
+ wstart = rl_point + cxt->search_string_index;
+ if (wstart >= rl_end)
{
- /* This sets rl_pending_input to c; it will be picked up the next
- time rl_read_key is called. */
- rl_execute_next (c);
+ rl_ding ();
break;
}
- switch (c)
+ /* if not in a word, move to one. */
+ cval = _rl_char_value (rl_line_buffer, wstart);
+ if (_rl_walphabetic (cval) == 0)
{
- case -1:
- if (search_string_index == 0)
- {
- if (last_isearch_string)
- {
- search_string_size = 64 + last_isearch_string_len;
- search_string = (char *)xrealloc (search_string, search_string_size);
- strcpy (search_string, last_isearch_string);
- search_string_index = last_isearch_string_len;
- rl_display_search (search_string, reverse, -1);
- break;
- }
- continue;
- }
- else if (reverse)
- --line_index;
- else if (line_index != sline_len)
- ++line_index;
- else
- rl_ding ();
+ rl_ding ();
break;
-
- /* switch directions */
- case -2:
- direction = -direction;
- reverse = direction < 0;
+ }
+ n = MB_NEXTCHAR (rl_line_buffer, wstart, 1, MB_FIND_NONZERO);;
+ while (n < rl_end)
+ {
+ cval = _rl_char_value (rl_line_buffer, n);
+ if (_rl_walphabetic (cval) == 0)
+ break;
+ n = MB_NEXTCHAR (rl_line_buffer, n, 1, MB_FIND_NONZERO);;
+ }
+ wlen = n - wstart + 1;
+ if (cxt->search_string_index + wlen + 1 >= cxt->search_string_size)
+ {
+ cxt->search_string_size += wlen + 1;
+ cxt->search_string = (char *)xrealloc (cxt->search_string, cxt->search_string_size);
+ }
+ for (; wstart < n; wstart++)
+ cxt->search_string[cxt->search_string_index++] = rl_line_buffer[wstart];
+ cxt->search_string[cxt->search_string_index] = '\0';
+ break;
+
+ case -6: /* C-Y */
+ /* skip over portion of line we already matched and yank rest */
+ wstart = rl_point + cxt->search_string_index;
+ if (wstart >= rl_end)
+ {
+ rl_ding ();
break;
+ }
+ n = rl_end - wstart + 1;
+ if (cxt->search_string_index + n + 1 >= cxt->search_string_size)
+ {
+ cxt->search_string_size += n + 1;
+ cxt->search_string = (char *)xrealloc (cxt->search_string, cxt->search_string_size);
+ }
+ for (n = wstart; n < rl_end; n++)
+ cxt->search_string[cxt->search_string_index++] = rl_line_buffer[n];
+ cxt->search_string[cxt->search_string_index] = '\0';
+ break;
+
+ /* Add character to search string and continue search. */
+ default:
+ if (cxt->search_string_index + 2 >= cxt->search_string_size)
+ {
+ cxt->search_string_size += 128;
+ cxt->search_string = (char *)xrealloc (cxt->search_string, cxt->search_string_size);
+ }
+#if defined (HANDLE_MULTIBYTE)
+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ {
+ int j, l;
+ for (j = 0, l = strlen (cxt->mb); j < l; )
+ cxt->search_string[cxt->search_string_index++] = cxt->mb[j++];
+ }
+ else
+#endif
+ cxt->search_string[cxt->search_string_index++] = c;
+ cxt->search_string[cxt->search_string_index] = '\0';
+ break;
+ }
- /* delete character from search string. */
- case -3: /* C-H, DEL */
- /* This is tricky. To do this right, we need to keep a
- stack of search positions for the current search, with
- sentinels marking the beginning and end. But this will
- do until we have a real isearch-undo. */
- if (search_string_index == 0)
- rl_ding ();
- else
- search_string[--search_string_index] = '\0';
-
- break;
+ for (cxt->sflags &= ~(SF_FOUND|SF_FAILED);; )
+ {
+ limit = cxt->sline_len - cxt->search_string_index + 1;
- case -4: /* C-G */
- rl_replace_line (lines[orig_line], 0);
- rl_point = orig_point;
- rl_mark = orig_mark;
- rl_restore_prompt();
- rl_clear_message ();
- if (allocated_line)
- free (allocated_line);
- free (lines);
- RL_UNSETSTATE(RL_STATE_ISEARCH);
- return 0;
-
- case -5: /* C-W */
- /* skip over portion of line we already matched */
- wstart = rl_point + search_string_index;
- if (wstart >= rl_end)
+ /* Search the current line. */
+ while ((cxt->sflags & SF_REVERSE) ? (cxt->sline_index >= 0) : (cxt->sline_index < limit))
+ {
+ if (STREQN (cxt->search_string, cxt->sline + cxt->sline_index, cxt->search_string_index))
{
- rl_ding ();
+ cxt->sflags |= SF_FOUND;
break;
}
+ else
+ cxt->sline_index += cxt->direction;
+ }
+ if (cxt->sflags & SF_FOUND)
+ break;
- /* if not in a word, move to one. */
- if (rl_alphabetic(rl_line_buffer[wstart]) == 0)
- {
- rl_ding ();
- break;
- }
- n = wstart;
- while (n < rl_end && rl_alphabetic(rl_line_buffer[n]))
- n++;
- wlen = n - wstart + 1;
- if (search_string_index + wlen + 1 >= search_string_size)
- {
- search_string_size += wlen + 1;
- search_string = (char *)xrealloc (search_string, search_string_size);
- }
- for (; wstart < n; wstart++)
- search_string[search_string_index++] = rl_line_buffer[wstart];
- search_string[search_string_index] = '\0';
- break;
+ /* Move to the next line, but skip new copies of the line
+ we just found and lines shorter than the string we're
+ searching for. */
+ do
+ {
+ /* Move to the next line. */
+ cxt->history_pos += cxt->direction;
- case -6: /* C-Y */
- /* skip over portion of line we already matched */
- wstart = rl_point + search_string_index;
- if (wstart >= rl_end)
+ /* At limit for direction? */
+ if ((cxt->sflags & SF_REVERSE) ? (cxt->history_pos < 0) : (cxt->history_pos == cxt->hlen))
{
- rl_ding ();
+ cxt->sflags |= SF_FAILED;
break;
}
- n = rl_end - wstart + 1;
- if (search_string_index + n + 1 >= search_string_size)
- {
- search_string_size += n + 1;
- search_string = (char *)xrealloc (search_string, search_string_size);
- }
- for (n = wstart; n < rl_end; n++)
- search_string[search_string_index++] = rl_line_buffer[n];
- search_string[search_string_index] = '\0';
- break;
- default:
- /* Add character to search string and continue search. */
- if (search_string_index + 2 >= search_string_size)
- {
- search_string_size += 128;
- search_string = (char *)xrealloc (search_string, search_string_size);
- }
-#if defined (HANDLE_MULTIBYTE)
- if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
- {
- int j, l;
- for (j = 0, l = strlen (mb); j < l; )
- search_string[search_string_index++] = mb[j++];
- }
- else
-#endif
- search_string[search_string_index++] = c;
- search_string[search_string_index] = '\0';
- break;
+ /* We will need these later. */
+ cxt->sline = cxt->lines[cxt->history_pos];
+ cxt->sline_len = strlen (cxt->sline);
}
+ while ((cxt->prev_line_found && STREQ (cxt->prev_line_found, cxt->lines[cxt->history_pos])) ||
+ (cxt->search_string_index > cxt->sline_len));
- for (found = failed = 0;;)
- {
- int limit = sline_len - search_string_index + 1;
+ if (cxt->sflags & SF_FAILED)
+ break;
- /* Search the current line. */
- while (reverse ? (line_index >= 0) : (line_index < limit))
- {
- if (STREQN (search_string, sline + line_index, search_string_index))
- {
- found++;
- break;
- }
- else
- line_index += direction;
- }
- if (found)
- break;
+ /* Now set up the line for searching... */
+ cxt->sline_index = (cxt->sflags & SF_REVERSE) ? cxt->sline_len - cxt->search_string_index : 0;
+ }
- /* Move to the next line, but skip new copies of the line
- we just found and lines shorter than the string we're
- searching for. */
- do
- {
- /* Move to the next line. */
- i += direction;
-
- /* At limit for direction? */
- if (reverse ? (i < 0) : (i == hlen))
- {
- failed++;
- break;
- }
-
- /* We will need these later. */
- sline = lines[i];
- sline_len = strlen (sline);
- }
- while ((prev_line_found && STREQ (prev_line_found, lines[i])) ||
- (search_string_index > sline_len));
+ if (cxt->sflags & SF_FAILED)
+ {
+ /* We cannot find the search string. Ding the bell. */
+ rl_ding ();
+ cxt->history_pos = cxt->last_found_line;
+ return 1;
+ }
- if (failed)
- break;
+ /* We have found the search string. Just display it. But don't
+ actually move there in the history list until the user accepts
+ the location. */
+ if (cxt->sflags & SF_FOUND)
+ {
+ cxt->prev_line_found = cxt->lines[cxt->history_pos];
+ rl_replace_line (cxt->lines[cxt->history_pos], 0);
+ rl_point = cxt->sline_index;
+ cxt->last_found_line = cxt->history_pos;
+ rl_display_search (cxt->search_string, (cxt->sflags & SF_REVERSE), (cxt->history_pos == cxt->save_line) ? -1 : cxt->history_pos);
+ }
- /* Now set up the line for searching... */
- line_index = reverse ? sline_len - search_string_index : 0;
- }
+ return 1;
+}
- if (failed)
- {
- /* We cannot find the search string. Ding the bell. */
- rl_ding ();
- i = last_found_line;
- continue; /* XXX - was break */
- }
+static int
+_rl_isearch_cleanup (cxt, r)
+ _rl_search_cxt *cxt;
+ int r;
+{
+ if (r >= 0)
+ _rl_isearch_fini (cxt);
+ _rl_scxt_dispose (cxt, 0);
+ _rl_iscxt = 0;
- /* We have found the search string. Just display it. But don't
- actually move there in the history list until the user accepts
- the location. */
- if (found)
- {
- prev_line_found = lines[i];
- rl_replace_line (lines[i], 0);
- rl_point = line_index;
- last_found_line = i;
- rl_display_search (search_string, reverse, (i == orig_line) ? -1 : i);
- }
- }
+ RL_UNSETSTATE(RL_STATE_ISEARCH);
- /* The searching is over. The user may have found the string that she
- was looking for, or else she may have exited a failing search. If
- LINE_INDEX is -1, then that shows that the string searched for was
- not found. We use this to determine where to place rl_point. */
+ return (r != 0);
+}
- /* First put back the original state. */
- strcpy (rl_line_buffer, lines[orig_line]);
+/* Search through the history looking for an interactively typed string.
+ This is analogous to i-search. We start the search in the current line.
+ DIRECTION is which direction to search; >= 0 means forward, < 0 means
+ backwards. */
+static int
+rl_search_history (direction, invoking_key)
+ int direction, invoking_key;
+{
+ _rl_search_cxt *cxt; /* local for now, but saved globally */
+ int c, r;
- rl_restore_prompt ();
+ RL_SETSTATE(RL_STATE_ISEARCH);
+ cxt = _rl_isearch_init (direction);
- /* Save the search string for possible later use. */
- FREE (last_isearch_string);
- last_isearch_string = search_string;
- last_isearch_string_len = search_string_index;
+ rl_display_search (cxt->search_string, (cxt->sflags & SF_REVERSE), -1);
- if (last_found_line < orig_line)
- rl_get_previous_history (orig_line - last_found_line, 0);
- else
- rl_get_next_history (last_found_line - orig_line, 0);
+ /* If we are using the callback interface, all we do is set up here and
+ return. The key is that we leave RL_STATE_ISEARCH set. */
+ if (RL_ISSTATE (RL_STATE_CALLBACK))
+ return (0);
- /* If the string was not found, put point at the end of the last matching
- line. If last_found_line == orig_line, we didn't find any matching
- history lines at all, so put point back in its original position. */
- if (line_index < 0)
+ r = -1;
+ for (;;)
{
- if (last_found_line == orig_line)
- line_index = orig_point;
- else
- line_index = strlen (rl_line_buffer);
- rl_mark = orig_mark;
+ c = _rl_search_getchar (cxt);
+ /* We might want to handle EOF here (c == 0) */
+ r = _rl_isearch_dispatch (cxt, cxt->lastc);
+ if (r <= 0)
+ break;
}
- rl_point = line_index;
- /* Don't worry about where to put the mark here; rl_get_previous_history
- and rl_get_next_history take care of it. */
-
- rl_clear_message ();
+ /* The searching is over. The user may have found the string that she
+ was looking for, or else she may have exited a failing search. If
+ LINE_INDEX is -1, then that shows that the string searched for was
+ not found. We use this to determine where to place rl_point. */
+ return (_rl_isearch_cleanup (cxt, r));
+}
- FREE (allocated_line);
- free (lines);
+#if defined (READLINE_CALLBACKS)
+/* Called from the callback functions when we are ready to read a key. The
+ callback functions know to call this because RL_ISSTATE(RL_STATE_ISEARCH).
+ If _rl_isearch_dispatch finishes searching, this function is responsible
+ for turning off RL_STATE_ISEARCH, which it does using _rl_isearch_cleanup. */
+int
+_rl_isearch_callback (cxt)
+ _rl_search_cxt *cxt;
+{
+ int c, r;
- RL_UNSETSTATE(RL_STATE_ISEARCH);
+ c = _rl_search_getchar (cxt);
+ /* We might want to handle EOF here */
+ r = _rl_isearch_dispatch (cxt, cxt->lastc);
- return 0;
+ return (r <= 0) ? _rl_isearch_cleanup (cxt, r) : 0;
}
+#endif
diff --git a/cmd-line-utils/readline/keymaps.c b/cmd-line-utils/readline/keymaps.c
index 2be03f7086f..562c22d7558 100644
--- a/cmd-line-utils/readline/keymaps.c
+++ b/cmd-line-utils/readline/keymaps.c
@@ -20,7 +20,9 @@
Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
#define READLINE_LIBRARY
-#include "config_readline.h"
+#if defined (HAVE_CONFIG_H)
+# include "config_readline.h"
+#endif
#if defined (HAVE_STDLIB_H)
# include <stdlib.h>
diff --git a/cmd-line-utils/readline/kill.c b/cmd-line-utils/readline/kill.c
index 4d31a8ff170..42c53948689 100644
--- a/cmd-line-utils/readline/kill.c
+++ b/cmd-line-utils/readline/kill.c
@@ -21,7 +21,9 @@
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
#define READLINE_LIBRARY
-#include "config_readline.h"
+#if defined (HAVE_CONFIG_H)
+# include "config_readline.h"
+#endif
#include <sys/types.h>
@@ -76,7 +78,8 @@ static int rl_yank_nth_arg_internal PARAMS((int, int, int));
/* How to say that you only want to save a certain amount
of kill material. */
int
-rl_set_retained_kills (int num __attribute__((unused)))
+rl_set_retained_kills (num)
+ int num;
{
return 0;
}
@@ -292,8 +295,8 @@ rl_backward_kill_line (direction, ignore)
/* Kill the whole line, no matter where point is. */
int
-rl_kill_full_line (int count __attribute__((unused)),
- int ignore __attribute__((unused)))
+rl_kill_full_line (count, ignore)
+ int count, ignore;
{
rl_begin_undo_group ();
rl_point = 0;
@@ -310,7 +313,8 @@ rl_kill_full_line (int count __attribute__((unused)),
/* This does what C-w does in Unix. We can't prevent people from
using behaviour that they expect. */
int
-rl_unix_word_rubout (int count, int key __attribute__((unused)))
+rl_unix_word_rubout (count, key)
+ int count, key;
{
int orig_point;
@@ -342,7 +346,8 @@ rl_unix_word_rubout (int count, int key __attribute__((unused)))
/* This deletes one filename component in a Unix pathname. That is, it
deletes backward to directory separator (`/') or whitespace. */
int
-rl_unix_filename_rubout (int count, int key __attribute__((unused)))
+rl_unix_filename_rubout (count, key)
+ int count, key;
{
int orig_point, c;
@@ -385,8 +390,8 @@ rl_unix_filename_rubout (int count, int key __attribute__((unused)))
into the line at all, and if you aren't, then you know what you are
doing. */
int
-rl_unix_line_discard (int count __attribute__((unused)),
- int key __attribute__((unused)))
+rl_unix_line_discard (count, key)
+ int count, key;
{
if (rl_point == 0)
rl_ding ();
@@ -422,16 +427,16 @@ region_kill_internal (delete)
/* Copy the text in the region to the kill ring. */
int
-rl_copy_region_to_kill (int count __attribute__((unused)),
- int key __attribute__((unused)))
+rl_copy_region_to_kill (count, ignore)
+ int count, ignore;
{
return (region_kill_internal (0));
}
/* Kill the text between the point and mark. */
int
-rl_kill_region (int count __attribute__((unused)),
- int ignore __attribute__((unused)))
+rl_kill_region (count, ignore)
+ int count, ignore;
{
int r, npoint;
@@ -495,7 +500,8 @@ rl_copy_backward_word (count, key)
/* Yank back the last killed text. This ignores arguments. */
int
-rl_yank (int count __attribute__((unused)), int ignore __attribute__((unused)))
+rl_yank (count, ignore)
+ int count, ignore;
{
if (rl_kill_ring == 0)
{
@@ -513,7 +519,8 @@ rl_yank (int count __attribute__((unused)), int ignore __attribute__((unused)))
delete that text from the line, rotate the index down, and
yank back some other text. */
int
-rl_yank_pop (int count __attribute__((unused)), int key __attribute__((unused)))
+rl_yank_pop (count, key)
+ int count, key;
{
int l, n;
@@ -575,6 +582,7 @@ rl_yank_nth_arg_internal (count, ignore, history_skip)
if (!arg || !*arg)
{
rl_ding ();
+ FREE (arg);
return -1;
}
diff --git a/cmd-line-utils/readline/macro.c b/cmd-line-utils/readline/macro.c
index 8727285e181..3473f705335 100644
--- a/cmd-line-utils/readline/macro.c
+++ b/cmd-line-utils/readline/macro.c
@@ -21,7 +21,9 @@
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
#define READLINE_LIBRARY
-#include "config_readline.h"
+#if defined (HAVE_CONFIG_H)
+# include "config_readline.h"
+#endif
#include <sys/types.h>
@@ -98,6 +100,8 @@ _rl_with_macro_input (string)
int
_rl_next_macro_key ()
{
+ int c;
+
if (rl_executing_macro == 0)
return (0);
@@ -107,7 +111,14 @@ _rl_next_macro_key ()
return (_rl_next_macro_key ());
}
+#if defined (READLINE_CALLBACKS)
+ c = rl_executing_macro[executing_macro_index++];
+ if (RL_ISSTATE (RL_STATE_CALLBACK) && RL_ISSTATE (RL_STATE_READCMD|RL_STATE_MOREINPUT) && rl_executing_macro[executing_macro_index] == 0)
+ _rl_pop_executing_macro ();
+ return c;
+#else
return (rl_executing_macro[executing_macro_index++]);
+#endif
}
/* Save the currently executing macro on a stack of saved macros. */
@@ -189,8 +200,8 @@ _rl_kill_kbd_macro ()
definition to the end of the existing macro, and start by
re-executing the existing macro. */
int
-rl_start_kbd_macro (int ignore1 __attribute__((unused)),
- int ignore2 __attribute__((unused)))
+rl_start_kbd_macro (ignore1, ignore2)
+ int ignore1, ignore2;
{
if (RL_ISSTATE (RL_STATE_MACRODEF))
{
@@ -214,7 +225,8 @@ rl_start_kbd_macro (int ignore1 __attribute__((unused)),
A numeric argument says to execute the macro right now,
that many times, counting the definition as the first time. */
int
-rl_end_kbd_macro (int count, int ignore __attribute__((unused)))
+rl_end_kbd_macro (count, ignore)
+ int count, ignore;
{
if (RL_ISSTATE (RL_STATE_MACRODEF) == 0)
{
@@ -233,7 +245,8 @@ rl_end_kbd_macro (int count, int ignore __attribute__((unused)))
/* Execute the most recently defined keyboard macro.
COUNT says how many times to execute it. */
int
-rl_call_last_kbd_macro (int count, int ignore __attribute__((unused)))
+rl_call_last_kbd_macro (count, ignore)
+ int count, ignore;
{
if (current_macro == 0)
_rl_abort_internal ();
diff --git a/cmd-line-utils/readline/mbutil.c b/cmd-line-utils/readline/mbutil.c
index 284ea63aae4..e21708fb748 100644
--- a/cmd-line-utils/readline/mbutil.c
+++ b/cmd-line-utils/readline/mbutil.c
@@ -1,6 +1,6 @@
/* mbutil.c -- readline multibyte character utility functions */
-/* Copyright (C) 2001-2004 Free Software Foundation, Inc.
+/* Copyright (C) 2001-2005 Free Software Foundation, Inc.
This file is part of the GNU Readline Library, a library for
reading lines of text with interactive input and history editing.
@@ -21,16 +21,11 @@
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
#define READLINE_LIBRARY
-#ifndef _XOPEN_SOURCE
-#define _XOPEN_SOURCE 500
+#if defined (HAVE_CONFIG_H)
+# include "config_readline.h"
#endif
-#include "config_readline.h"
-
#include <sys/types.h>
-
-/* To get SuSE 9.3 to define wcwidth() (in wchar.h) */
-
#include <fcntl.h>
#include "posixjmp.h"
@@ -82,18 +77,20 @@ _rl_find_next_mbchar_internal (string, seed, count, find_non_zero)
char *string;
int seed, count, find_non_zero;
{
- size_t tmp = 0;
+ size_t tmp;
mbstate_t ps;
- int point = 0;
+ int point;
wchar_t wc;
+ tmp = 0;
+
memset(&ps, 0, sizeof (mbstate_t));
if (seed < 0)
seed = 0;
if (count <= 0)
return seed;
- point = seed + _rl_adjust_point(string, seed, &ps);
+ point = seed + _rl_adjust_point (string, seed, &ps);
/* if this is true, means that seed was not pointed character
started byte. So correct the point and consume count */
if (seed < point)
@@ -131,15 +128,16 @@ _rl_find_next_mbchar_internal (string, seed, count, find_non_zero)
if (find_non_zero)
{
tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps);
- while (wcwidth (wc) == 0)
+ while (tmp > 0 && wcwidth (wc) == 0)
{
point += tmp;
tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps);
- if (tmp == (size_t)(0) || tmp == (size_t)(-1) || tmp == (size_t)(-2))
+ if (MB_NULLWCH (tmp) || MB_INVALIDCH (tmp))
break;
}
}
- return point;
+
+ return point;
}
static int
@@ -318,6 +316,28 @@ _rl_is_mbchar_matched (string, seed, end, mbchar, length)
return 0;
return 1;
}
+
+wchar_t
+_rl_char_value (buf, ind)
+ char *buf;
+ int ind;
+{
+ size_t tmp;
+ wchar_t wc;
+ mbstate_t ps;
+ int l;
+
+ if (MB_LEN_MAX == 1 || rl_byte_oriented)
+ return ((wchar_t) buf[ind]);
+ l = strlen (buf);
+ if (ind >= l - 1)
+ return ((wchar_t) buf[ind]);
+ memset (&ps, 0, sizeof (mbstate_t));
+ tmp = mbrtowc (&wc, buf + ind, l - ind, &ps);
+ if (MB_INVALIDCH (tmp) || MB_NULLWCH (tmp))
+ return ((wchar_t) buf[ind]);
+ return wc;
+}
#endif /* HANDLE_MULTIBYTE */
/* Find next `count' characters started byte point of the specified seed.
diff --git a/cmd-line-utils/readline/misc.c b/cmd-line-utils/readline/misc.c
index c8739d0d750..e0e6893c60e 100644
--- a/cmd-line-utils/readline/misc.c
+++ b/cmd-line-utils/readline/misc.c
@@ -1,6 +1,6 @@
/* misc.c -- miscellaneous bindable readline functions. */
-/* Copyright (C) 1987-2004 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
This file is part of the GNU Readline Library, a library for
reading lines of text with interactive input and history editing.
@@ -21,7 +21,9 @@
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
#define READLINE_LIBRARY
-#include "config_readline.h"
+#if defined (HAVE_CONFIG_H)
+# include "config_readline.h"
+#endif
#if defined (HAVE_UNISTD_H)
# include <unistd.h>
@@ -61,6 +63,8 @@ void _rl_free_history_entry PARAMS((HIST_ENTRY *));
to preserve the value of rl_point from line to line. */
int _rl_history_preserve_point = 0;
+_rl_arg_cxt _rl_argcxt;
+
/* Saved target point for when _rl_history_preserve_point is set. Special
value of -1 means that point is at the end of the line. */
int _rl_history_saved_point = -1;
@@ -71,77 +75,74 @@ int _rl_history_saved_point = -1;
/* */
/* **************************************************************** */
-/* Handle C-u style numeric args, as well as M--, and M-digits. */
-static int
-rl_digit_loop ()
+int
+_rl_arg_overflow ()
{
- int key, c, sawminus, sawdigits;
+ if (rl_numeric_arg > 1000000)
+ {
+ _rl_argcxt = 0;
+ rl_explicit_arg = rl_numeric_arg = 0;
+ rl_ding ();
+ rl_restore_prompt ();
+ rl_clear_message ();
+ RL_UNSETSTATE(RL_STATE_NUMERICARG);
+ return 1;
+ }
+ return 0;
+}
+void
+_rl_arg_init ()
+{
rl_save_prompt ();
-
+ _rl_argcxt = 0;
RL_SETSTATE(RL_STATE_NUMERICARG);
- sawminus = sawdigits = 0;
- while (1)
- {
- if (rl_numeric_arg > 1000000)
- {
- sawdigits = rl_explicit_arg = rl_numeric_arg = 0;
- rl_ding ();
- rl_restore_prompt ();
- rl_clear_message ();
- RL_UNSETSTATE(RL_STATE_NUMERICARG);
- return 1;
- }
- rl_message ("(arg: %d) ", rl_arg_sign * rl_numeric_arg);
- RL_SETSTATE(RL_STATE_MOREINPUT);
- key = c = rl_read_key ();
- RL_UNSETSTATE(RL_STATE_MOREINPUT);
+}
- if (c < 0)
- {
- _rl_abort_internal ();
- return -1;
- }
+int
+_rl_arg_getchar ()
+{
+ int c;
- /* If we see a key bound to `universal-argument' after seeing digits,
- it ends the argument but is otherwise ignored. */
- if (_rl_keymap[c].type == ISFUNC &&
- _rl_keymap[c].function == rl_universal_argument)
- {
- if (sawdigits == 0)
- {
- rl_numeric_arg *= 4;
- continue;
- }
- else
- {
- RL_SETSTATE(RL_STATE_MOREINPUT);
- key = rl_read_key ();
- RL_UNSETSTATE(RL_STATE_MOREINPUT);
- rl_restore_prompt ();
- rl_clear_message ();
- RL_UNSETSTATE(RL_STATE_NUMERICARG);
- return (_rl_dispatch (key, _rl_keymap));
- }
- }
+ rl_message ("(arg: %d) ", rl_arg_sign * rl_numeric_arg);
+ RL_SETSTATE(RL_STATE_MOREINPUT);
+ c = rl_read_key ();
+ RL_UNSETSTATE(RL_STATE_MOREINPUT);
- c = UNMETA (c);
+ return c;
+}
- if (_rl_digit_p (c))
- {
- rl_numeric_arg = rl_explicit_arg ? (rl_numeric_arg * 10) + c - '0' : c - '0';
- sawdigits = rl_explicit_arg = 1;
- }
- else if (c == '-' && rl_explicit_arg == 0)
+/* Process C as part of the current numeric argument. Return -1 if the
+ argument should be aborted, 0 if we should not read any more chars, and
+ 1 if we should continue to read chars. */
+int
+_rl_arg_dispatch (cxt, c)
+ _rl_arg_cxt cxt;
+ int c;
+{
+ int key, r;
+
+ key = c;
+
+ /* If we see a key bound to `universal-argument' after seeing digits,
+ it ends the argument but is otherwise ignored. */
+ if (_rl_keymap[c].type == ISFUNC && _rl_keymap[c].function == rl_universal_argument)
+ {
+ if ((cxt & NUM_SAWDIGITS) == 0)
{
- rl_numeric_arg = sawminus = 1;
- rl_arg_sign = -1;
+ rl_numeric_arg *= 4;
+ return 1;
}
+ else if (RL_ISSTATE (RL_STATE_CALLBACK))
+ {
+ _rl_argcxt |= NUM_READONE;
+ return 0; /* XXX */
+ }
else
{
- /* Make M-- command equivalent to M--1 command. */
- if (sawminus && rl_numeric_arg == 1 && rl_explicit_arg == 0)
- rl_explicit_arg = 1;
+ RL_SETSTATE(RL_STATE_MOREINPUT);
+ key = rl_read_key ();
+ RL_UNSETSTATE(RL_STATE_MOREINPUT);
rl_restore_prompt ();
rl_clear_message ();
RL_UNSETSTATE(RL_STATE_NUMERICARG);
@@ -149,45 +150,144 @@ rl_digit_loop ()
}
}
- /*NOTREACHED*/
-}
+ c = UNMETA (c);
-/* Add the current digit to the argument in progress. */
-int
-rl_digit_argument (int ignore __attribute__((unused)), int key)
-{
- rl_execute_next (key);
- return (rl_digit_loop ());
+ if (_rl_digit_p (c))
+ {
+ r = _rl_digit_value (c);
+ rl_numeric_arg = rl_explicit_arg ? (rl_numeric_arg * 10) + r : r;
+ rl_explicit_arg = 1;
+ _rl_argcxt |= NUM_SAWDIGITS;
+ }
+ else if (c == '-' && rl_explicit_arg == 0)
+ {
+ rl_numeric_arg = 1;
+ _rl_argcxt |= NUM_SAWMINUS;
+ rl_arg_sign = -1;
+ }
+ else
+ {
+ /* Make M-- command equivalent to M--1 command. */
+ if ((_rl_argcxt & NUM_SAWMINUS) && rl_numeric_arg == 1 && rl_explicit_arg == 0)
+ rl_explicit_arg = 1;
+ rl_restore_prompt ();
+ rl_clear_message ();
+ RL_UNSETSTATE(RL_STATE_NUMERICARG);
+
+ r = _rl_dispatch (key, _rl_keymap);
+ if (RL_ISSTATE (RL_STATE_CALLBACK))
+ {
+ /* At worst, this will cause an extra redisplay. Otherwise,
+ we have to wait until the next character comes in. */
+ if (rl_done == 0)
+ (*rl_redisplay_function) ();
+ r = 0;
+ }
+ return r;
+ }
+
+ return 1;
}
-/* What to do when you abort reading an argument. */
-int
-rl_discard_argument ()
+/* Handle C-u style numeric args, as well as M--, and M-digits. */
+static int
+rl_digit_loop ()
{
- rl_ding ();
- rl_clear_message ();
- _rl_init_argument ();
- return 0;
+ int c, r;
+
+ while (1)
+ {
+ if (_rl_arg_overflow ())
+ return 1;
+
+ c = _rl_arg_getchar ();
+
+ if (c < 0)
+ {
+ _rl_abort_internal ();
+ return -1;
+ }
+
+ r = _rl_arg_dispatch (_rl_argcxt, c);
+ if (r <= 0 || (RL_ISSTATE (RL_STATE_NUMERICARG) == 0))
+ break;
+ }
+
+ return r;
}
/* Create a default argument. */
-int
-_rl_init_argument ()
+void
+_rl_reset_argument ()
{
rl_numeric_arg = rl_arg_sign = 1;
rl_explicit_arg = 0;
- return 0;
+ _rl_argcxt = 0;
+}
+
+/* Start a numeric argument with initial value KEY */
+int
+rl_digit_argument (ignore, key)
+ int ignore, key;
+{
+ _rl_arg_init ();
+ if (RL_ISSTATE (RL_STATE_CALLBACK))
+ {
+ _rl_arg_dispatch (_rl_argcxt, key);
+ rl_message ("(arg: %d) ", rl_arg_sign * rl_numeric_arg);
+ return 0;
+ }
+ else
+ {
+ rl_execute_next (key);
+ return (rl_digit_loop ());
+ }
}
/* C-u, universal argument. Multiply the current argument by 4.
Read a key. If the key has nothing to do with arguments, then
dispatch on it. If the key is the abort character then abort. */
int
-rl_universal_argument (int count __attribute__((unused)),
- int key __attribute__((unused)))
+rl_universal_argument (count, key)
+ int count, key;
{
+ _rl_arg_init ();
rl_numeric_arg *= 4;
- return (rl_digit_loop ());
+
+ return (RL_ISSTATE (RL_STATE_CALLBACK) ? 0 : rl_digit_loop ());
+}
+
+int
+_rl_arg_callback (cxt)
+ _rl_arg_cxt cxt;
+{
+ int c, r;
+
+ c = _rl_arg_getchar ();
+
+ if (_rl_argcxt & NUM_READONE)
+ {
+ _rl_argcxt &= ~NUM_READONE;
+ rl_restore_prompt ();
+ rl_clear_message ();
+ RL_UNSETSTATE(RL_STATE_NUMERICARG);
+ rl_execute_next (c);
+ return 0;
+ }
+
+ r = _rl_arg_dispatch (cxt, c);
+ return (r != 1);
+}
+
+/* What to do when you abort reading an argument. */
+int
+rl_discard_argument ()
+{
+ rl_ding ();
+ rl_clear_message ();
+ _rl_reset_argument ();
+
+ return 0;
}
/* **************************************************************** */
@@ -222,8 +322,10 @@ _rl_free_history_entry (entry)
{
if (entry == 0)
return;
- if (entry->line)
- free (entry->line);
+
+ FREE (entry->line);
+ FREE (entry->timestamp);
+
free (entry);
}
@@ -239,6 +341,7 @@ rl_maybe_replace_line ()
{
temp = replace_history_entry (where_history (), rl_line_buffer, (histdata_t)rl_undo_list);
free (temp->line);
+ FREE (temp->timestamp);
free (temp);
}
return 0;
@@ -271,14 +374,9 @@ rl_maybe_save_line ()
{
_rl_saved_line_for_history = (HIST_ENTRY *)xmalloc (sizeof (HIST_ENTRY));
_rl_saved_line_for_history->line = savestring (rl_line_buffer);
+ _rl_saved_line_for_history->timestamp = (char *)NULL;
_rl_saved_line_for_history->data = (char *)rl_undo_list;
}
- else if (STREQ (rl_line_buffer, _rl_saved_line_for_history->line) == 0)
- {
- free (_rl_saved_line_for_history->line);
- _rl_saved_line_for_history->line = savestring (rl_line_buffer);
- _rl_saved_line_for_history->data = (char *)rl_undo_list; /* XXX possible memleak */
- }
return 0;
}
@@ -313,7 +411,9 @@ _rl_history_set_point ()
}
void
-rl_replace_from_history (HIST_ENTRY *entry, int flags __attribute__((unused)))
+rl_replace_from_history (entry, flags)
+ HIST_ENTRY *entry;
+ int flags; /* currently unused */
{
/* Can't call with `1' because rl_undo_list might point to an undo list
from a history entry, just like we're setting up here. */
@@ -339,15 +439,16 @@ rl_replace_from_history (HIST_ENTRY *entry, int flags __attribute__((unused)))
/* Meta-< goes to the start of the history. */
int
-rl_beginning_of_history (int count __attribute__((unused)), int key)
+rl_beginning_of_history (count, key)
+ int count, key;
{
return (rl_get_previous_history (1 + where_history (), key));
}
/* Meta-> goes to the end of the history. (The current line). */
int
-rl_end_of_history (int count __attribute__((unused)),
- int key __attribute__((unused)))
+rl_end_of_history (count, key)
+ int count, key;
{
rl_maybe_replace_line ();
using_history ();
@@ -451,7 +552,8 @@ rl_get_previous_history (count, key)
/* **************************************************************** */
/* How to toggle back and forth between editing modes. */
int
-rl_vi_editing_mode (int count __attribute__((unused)), int key)
+rl_vi_editing_mode (count, key)
+ int count, key;
{
#if defined (VI_MODE)
_rl_set_insert_mode (RL_IM_INSERT, 1); /* vi mode ignores insert mode */
@@ -463,8 +565,8 @@ rl_vi_editing_mode (int count __attribute__((unused)), int key)
}
int
-rl_emacs_editing_mode (int count __attribute__((unused)),
- int key __attribute__((unused)))
+rl_emacs_editing_mode (count, key)
+ int count, key;
{
rl_editing_mode = emacs_mode;
_rl_set_insert_mode (RL_IM_INSERT, 1); /* emacs mode default is insert mode */
@@ -474,7 +576,8 @@ rl_emacs_editing_mode (int count __attribute__((unused)),
/* Function for the rest of the library to use to set insert/overwrite mode. */
void
-_rl_set_insert_mode (int im, int force __attribute__((unused)))
+_rl_set_insert_mode (im, force)
+ int im, force;
{
#ifdef CURSOR_MODE
_rl_set_cursor (im, force);
@@ -486,7 +589,8 @@ _rl_set_insert_mode (int im, int force __attribute__((unused)))
/* Toggle overwrite mode. A positive explicit argument selects overwrite
mode. A negative or zero explicit argument selects insert mode. */
int
-rl_overwrite_mode (int count, int key __attribute__((unused)))
+rl_overwrite_mode (count, key)
+ int count, key;
{
if (rl_explicit_arg == 0)
_rl_set_insert_mode (rl_insert_mode ^ 1, 0);
diff --git a/cmd-line-utils/readline/nls.c b/cmd-line-utils/readline/nls.c
index 73ad0227195..6ec685ed9ea 100644
--- a/cmd-line-utils/readline/nls.c
+++ b/cmd-line-utils/readline/nls.c
@@ -21,7 +21,9 @@
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
#define READLINE_LIBRARY
-#include "config_readline.h"
+#if defined (HAVE_CONFIG_H)
+# include "config_readline.h"
+#endif
#include <sys/types.h>
@@ -111,7 +113,7 @@ _rl_init_eightbit ()
if (lspec == 0 || *lspec == 0)
lspec = setlocale (LC_CTYPE, (char *)NULL);
if (lspec == 0)
- lspec = (char*) "";
+ lspec = "";
t = setlocale (LC_CTYPE, lspec);
if (t && *t && (t[0] != 'C' || t[1]) && (STREQ (t, "POSIX") == 0))
diff --git a/cmd-line-utils/readline/parens.c b/cmd-line-utils/readline/parens.c
index bb893ac1bfb..fe1578ed3e2 100644
--- a/cmd-line-utils/readline/parens.c
+++ b/cmd-line-utils/readline/parens.c
@@ -27,7 +27,9 @@
#include "rlconf.h"
-#include "config_readline.h"
+#if defined (HAVE_CONFIG_H)
+# include "config_readline.h"
+#endif
#include <stdio.h>
#include <sys/types.h>
diff --git a/cmd-line-utils/readline/readline.c b/cmd-line-utils/readline/readline.c
index dd3724a86d7..8c3cad52d36 100644
--- a/cmd-line-utils/readline/readline.c
+++ b/cmd-line-utils/readline/readline.c
@@ -1,7 +1,7 @@
/* readline.c -- a general facility for reading lines of input
with emacs style editing and completion. */
-/* Copyright (C) 1987-2002 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
This file is part of the GNU Readline Library, a library for
reading lines of text with interactive input and history editing.
@@ -22,7 +22,9 @@
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
#define READLINE_LIBRARY
-#include "config_readline.h"
+#if defined (HAVE_CONFIG_H)
+# include "config_readline.h"
+#endif
#include <sys/types.h>
#include "posixstat.h"
@@ -47,6 +49,11 @@
#include <stdio.h>
#include "posixjmp.h"
+#include <errno.h>
+
+#if !defined (errno)
+extern int errno;
+#endif /* !errno */
/* System-specific feature definitions and include files. */
#include "rldefs.h"
@@ -66,11 +73,11 @@
#include "xmalloc.h"
#ifndef RL_LIBRARY_VERSION
-# define RL_LIBRARY_VERSION "5.0"
+# define RL_LIBRARY_VERSION "5.1"
#endif
#ifndef RL_READLINE_VERSION
-# define RL_READLINE_VERSION 0x0500
+# define RL_READLINE_VERSION 0x0501
#endif
extern void _rl_free_history_entry PARAMS((HIST_ENTRY *));
@@ -83,9 +90,10 @@ static void bind_arrow_keys_internal PARAMS((Keymap));
static void bind_arrow_keys PARAMS((void));
static void readline_default_bindings PARAMS((void));
-#ifdef NOT_USED
static void reset_default_bindings PARAMS((void));
-#endif
+
+static int _rl_subseq_result PARAMS((int, Keymap, int, int));
+static int _rl_subseq_getchar PARAMS((int));
/* **************************************************************** */
/* */
@@ -104,6 +112,7 @@ int rl_gnu_readline_p = 1;
By default, it is the standard emacs keymap. */
Keymap _rl_keymap = emacs_standard_keymap;
+
/* The current style of editing. */
int rl_editing_mode = emacs_mode;
@@ -219,6 +228,9 @@ char *_rl_comment_begin;
/* Keymap holding the function currently being executed. */
Keymap rl_executing_keymap;
+/* Keymap we're currently using to dispatch. */
+Keymap _rl_dispatching_keymap;
+
/* Non-zero means to erase entire line, including prompt, on empty input lines. */
int rl_erase_empty_line = 0;
@@ -230,6 +242,9 @@ int rl_num_chars_to_read;
char *rl_line_buffer = (char *)NULL;
int rl_line_buffer_len = 0;
+/* Key sequence `contexts' */
+_rl_keyseq_cxt *_rl_kscxt = 0;
+
/* Forward declarations used by the display, termcap, and history code. */
/* **************************************************************** */
@@ -251,6 +266,10 @@ int _rl_convert_meta_chars_to_ascii = 1;
rather than as a meta-prefixed escape sequence. */
int _rl_output_meta_chars = 0;
+/* Non-zero means to look at the termios special characters and bind
+ them to equivalent readline functions at startup. */
+int _rl_bind_stty_chars = 1;
+
/* **************************************************************** */
/* */
/* Top Level Functions */
@@ -268,6 +287,7 @@ rl_set_prompt (prompt)
{
FREE (rl_prompt);
rl_prompt = prompt ? savestring (prompt) : (char *)NULL;
+ rl_display_prompt = rl_prompt ? rl_prompt : "";
rl_visible_prompt_length = rl_expand_prompt (rl_prompt);
return 0;
@@ -291,14 +311,16 @@ readline (prompt)
rl_set_prompt (prompt);
rl_initialize ();
- (*rl_prep_term_function) (_rl_meta_flag);
+ if (rl_prep_term_function)
+ (*rl_prep_term_function) (_rl_meta_flag);
#if defined (HANDLE_SIGNALS)
rl_set_signals ();
#endif
value = readline_internal ();
- (*rl_deprep_term_function) ();
+ if (rl_deprep_term_function)
+ (*rl_deprep_term_function) ();
#if defined (HANDLE_SIGNALS)
rl_clear_signals ();
@@ -388,6 +410,36 @@ readline_internal_teardown (eof)
return (eof ? (char *)NULL : savestring (the_line));
}
+void
+_rl_internal_char_cleanup ()
+{
+#if defined (VI_MODE)
+ /* In vi mode, when you exit insert mode, the cursor moves back
+ over the previous character. We explicitly check for that here. */
+ if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap)
+ rl_vi_check ();
+#endif /* VI_MODE */
+
+ if (rl_num_chars_to_read && rl_end >= rl_num_chars_to_read)
+ {
+ (*rl_redisplay_function) ();
+ _rl_want_redisplay = 0;
+ rl_newline (1, '\n');
+ }
+
+ if (rl_done == 0)
+ {
+ (*rl_redisplay_function) ();
+ _rl_want_redisplay = 0;
+ }
+
+ /* If the application writer has told us to erase the entire line if
+ the only character typed was something bound to rl_newline, do so. */
+ if (rl_erase_empty_line && rl_done && rl_last_func == rl_newline &&
+ rl_point == 0 && rl_end == 0)
+ _rl_erase_entire_line ();
+}
+
STATIC_CALLBACK int
#if defined (READLINE_CALLBACKS)
readline_internal_char ()
@@ -410,12 +462,21 @@ readline_internal_charloop ()
code = setjmp (readline_top_level);
if (code)
- (*rl_redisplay_function) ();
+ {
+ (*rl_redisplay_function) ();
+ _rl_want_redisplay = 0;
+ /* If we get here, we're not being called from something dispatched
+ from _rl_callback_read_char(), which sets up its own value of
+ readline_top_level (saving and restoring the old, of course), so
+ we can just return here. */
+ if (RL_ISSTATE (RL_STATE_CALLBACK))
+ return (0);
+ }
if (rl_pending_input == 0)
{
/* Then initialize the argument and number of keys read. */
- _rl_init_argument ();
+ _rl_reset_argument ();
rl_key_sequence_length = 0;
}
@@ -423,6 +484,20 @@ readline_internal_charloop ()
c = rl_read_key ();
RL_UNSETSTATE(RL_STATE_READCMD);
+ /* look at input.c:rl_getc() for the circumstances under which this will
+ be returned; punt immediately on read error without converting it to
+ a newline. */
+ if (c == READERR)
+ {
+#if defined (READLINE_CALLBACKS)
+ RL_SETSTATE(RL_STATE_DONE);
+ return (rl_done = 1);
+#else
+ eof_found = 1;
+ break;
+#endif
+ }
+
/* EOF typed to a non-blank line is a <NL>. */
if (c == EOF && rl_end)
c = NEWLINE;
@@ -449,27 +524,7 @@ readline_internal_charloop ()
if (rl_pending_input == 0 && lk == _rl_last_command_was_kill)
_rl_last_command_was_kill = 0;
-#if defined (VI_MODE)
- /* In vi mode, when you exit insert mode, the cursor moves back
- over the previous character. We explicitly check for that here. */
- if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap)
- rl_vi_check ();
-#endif /* VI_MODE */
-
- if (rl_num_chars_to_read && rl_end >= rl_num_chars_to_read)
- {
- (*rl_redisplay_function) ();
- rl_newline (1, '\n');
- }
-
- if (rl_done == 0)
- (*rl_redisplay_function) ();
-
- /* If the application writer has told us to erase the entire line if
- the only character typed was something bound to rl_newline, do so. */
- if (rl_erase_empty_line && rl_done && rl_last_func == rl_newline &&
- rl_point == 0 && rl_end == 0)
- _rl_erase_entire_line ();
+ _rl_internal_char_cleanup ();
#if defined (READLINE_CALLBACKS)
return 0;
@@ -519,6 +574,107 @@ _rl_set_the_line ()
the_line = rl_line_buffer;
}
+#if defined (READLINE_CALLBACKS)
+_rl_keyseq_cxt *
+_rl_keyseq_cxt_alloc ()
+{
+ _rl_keyseq_cxt *cxt;
+
+ cxt = (_rl_keyseq_cxt *)xmalloc (sizeof (_rl_keyseq_cxt));
+
+ cxt->flags = cxt->subseq_arg = cxt->subseq_retval = 0;
+
+ cxt->okey = 0;
+ cxt->ocxt = _rl_kscxt;
+ cxt->childval = 42; /* sentinel value */
+
+ return cxt;
+}
+
+void
+_rl_keyseq_cxt_dispose (cxt)
+ _rl_keyseq_cxt *cxt;
+{
+ free (cxt);
+}
+
+void
+_rl_keyseq_chain_dispose ()
+{
+ _rl_keyseq_cxt *cxt;
+
+ while (_rl_kscxt)
+ {
+ cxt = _rl_kscxt;
+ _rl_kscxt = _rl_kscxt->ocxt;
+ _rl_keyseq_cxt_dispose (cxt);
+ }
+}
+#endif
+
+static int
+_rl_subseq_getchar (key)
+ int key;
+{
+ int k;
+
+ if (key == ESC)
+ RL_SETSTATE(RL_STATE_METANEXT);
+ RL_SETSTATE(RL_STATE_MOREINPUT);
+ k = rl_read_key ();
+ RL_UNSETSTATE(RL_STATE_MOREINPUT);
+ if (key == ESC)
+ RL_UNSETSTATE(RL_STATE_METANEXT);
+
+ return k;
+}
+
+#if defined (READLINE_CALLBACKS)
+int
+_rl_dispatch_callback (cxt)
+ _rl_keyseq_cxt *cxt;
+{
+ int nkey, r;
+
+ /* For now */
+#if 1
+ /* The first time this context is used, we want to read input and dispatch
+ on it. When traversing the chain of contexts back `up', we want to use
+ the value from the next context down. We're simulating recursion using
+ a chain of contexts. */
+ if ((cxt->flags & KSEQ_DISPATCHED) == 0)
+ {
+ nkey = _rl_subseq_getchar (cxt->okey);
+ r = _rl_dispatch_subseq (nkey, cxt->dmap, cxt->subseq_arg);
+ cxt->flags |= KSEQ_DISPATCHED;
+ }
+ else
+ r = cxt->childval;
+#else
+ r = _rl_dispatch_subseq (nkey, cxt->dmap, cxt->subseq_arg);
+#endif
+
+ /* For now */
+ r = _rl_subseq_result (r, cxt->oldmap, cxt->okey, (cxt->flags & KSEQ_SUBSEQ));
+
+ if (r == 0) /* success! */
+ {
+ _rl_keyseq_chain_dispose ();
+ RL_UNSETSTATE (RL_STATE_MULTIKEY);
+ return r;
+ }
+
+ if (r != -3) /* magic value that says we added to the chain */
+ _rl_kscxt = cxt->ocxt;
+ if (_rl_kscxt)
+ _rl_kscxt->childval = r;
+ if (r != -3)
+ _rl_keyseq_cxt_dispose (cxt);
+
+ return r;
+}
+#endif /* READLINE_CALLBACKS */
+
/* Do the command associated with KEY in MAP.
If the associated command is really a keymap, then read
another key, and dispatch into that map. */
@@ -527,6 +683,7 @@ _rl_dispatch (key, map)
register int key;
Keymap map;
{
+ _rl_dispatching_keymap = map;
return _rl_dispatch_subseq (key, map, 0);
}
@@ -539,6 +696,9 @@ _rl_dispatch_subseq (key, map, got_subseq)
int r, newkey;
char *macro;
rl_command_func_t *func;
+#if defined (READLINE_CALLBACKS)
+ _rl_keyseq_cxt *cxt;
+#endif
if (META_CHAR (key) && _rl_convert_meta_chars_to_ascii)
{
@@ -572,13 +732,9 @@ _rl_dispatch_subseq (key, map, got_subseq)
rl_executing_keymap = map;
-#if 0
- _rl_suppress_redisplay = (map[key].function == rl_insert) && _rl_input_available ();
-#endif
-
rl_dispatching = 1;
RL_SETSTATE(RL_STATE_DISPATCHING);
- r = (*map[key].function)(rl_numeric_arg * rl_arg_sign, key);
+ (*map[key].function)(rl_numeric_arg * rl_arg_sign, key);
RL_UNSETSTATE(RL_STATE_DISPATCHING);
rl_dispatching = 0;
@@ -607,6 +763,10 @@ _rl_dispatch_subseq (key, map, got_subseq)
}
else
{
+#if defined (READLINE_CALLBACKS)
+ RL_UNSETSTATE (RL_STATE_MULTIKEY);
+ _rl_keyseq_chain_dispose ();
+#endif
_rl_abort_internal ();
return -1;
}
@@ -628,58 +788,43 @@ _rl_dispatch_subseq (key, map, got_subseq)
#endif
rl_key_sequence_length++;
+ _rl_dispatching_keymap = FUNCTION_TO_KEYMAP (map, key);
- if (key == ESC)
- RL_SETSTATE(RL_STATE_METANEXT);
- RL_SETSTATE(RL_STATE_MOREINPUT);
- newkey = rl_read_key ();
- RL_UNSETSTATE(RL_STATE_MOREINPUT);
- if (key == ESC)
- RL_UNSETSTATE(RL_STATE_METANEXT);
+ /* Allocate new context here. Use linked contexts (linked through
+ cxt->ocxt) to simulate recursion */
+#if defined (READLINE_CALLBACKS)
+ if (RL_ISSTATE (RL_STATE_CALLBACK))
+ {
+ /* Return 0 only the first time, to indicate success to
+ _rl_callback_read_char. The rest of the time, we're called
+ from _rl_dispatch_callback, so we return 3 to indicate
+ special handling is necessary. */
+ r = RL_ISSTATE (RL_STATE_MULTIKEY) ? -3 : 0;
+ cxt = _rl_keyseq_cxt_alloc ();
+
+ if (got_subseq)
+ cxt->flags |= KSEQ_SUBSEQ;
+ cxt->okey = key;
+ cxt->oldmap = map;
+ cxt->dmap = _rl_dispatching_keymap;
+ cxt->subseq_arg = got_subseq || cxt->dmap[ANYOTHERKEY].function;
+
+ RL_SETSTATE (RL_STATE_MULTIKEY);
+ _rl_kscxt = cxt;
+
+ return r; /* don't indicate immediate success */
+ }
+#endif
+ newkey = _rl_subseq_getchar (key);
if (newkey < 0)
{
_rl_abort_internal ();
return -1;
}
- r = _rl_dispatch_subseq (newkey, FUNCTION_TO_KEYMAP (map, key), got_subseq || map[ANYOTHERKEY].function);
-
- if (r == -2)
- /* We didn't match anything, and the keymap we're indexed into
- shadowed a function previously bound to that prefix. Call
- the function. The recursive call to _rl_dispatch_subseq has
- already taken care of pushing any necessary input back onto
- the input queue with _rl_unget_char. */
- {
-#if 0
- r = _rl_dispatch (ANYOTHERKEY, FUNCTION_TO_KEYMAP (map, key));
-#else
- /* XXX - experimental code -- might never be executed. Save
- for later. */
- Keymap m = FUNCTION_TO_KEYMAP (map, key);
- int type = m[ANYOTHERKEY].type;
- func = m[ANYOTHERKEY].function;
- if (type == ISFUNC && func == rl_do_lowercase_version)
- r = _rl_dispatch (_rl_to_lower (key), map);
- else
- r = _rl_dispatch (ANYOTHERKEY, m);
-#endif
- }
- else if (r && map[ANYOTHERKEY].function)
- {
- /* We didn't match (r is probably -1), so return something to
- tell the caller that it should try ANYOTHERKEY for an
- overridden function. */
- _rl_unget_char (key);
- return -2;
- }
- else if (r && got_subseq)
- {
- /* OK, back up the chain. */
- _rl_unget_char (key);
- return -1;
- }
+ r = _rl_dispatch_subseq (newkey, _rl_dispatching_keymap, got_subseq || map[ANYOTHERKEY].function);
+ return _rl_subseq_result (r, map, key, got_subseq);
}
else
{
@@ -703,9 +848,69 @@ _rl_dispatch_subseq (key, map, got_subseq)
_rl_vi_textmod_command (key))
_rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign);
#endif
+
return (r);
}
+static int
+_rl_subseq_result (r, map, key, got_subseq)
+ int r;
+ Keymap map;
+ int key, got_subseq;
+{
+ Keymap m;
+ int type, nt;
+ rl_command_func_t *func, *nf;
+
+ if (r == -2)
+ /* We didn't match anything, and the keymap we're indexed into
+ shadowed a function previously bound to that prefix. Call
+ the function. The recursive call to _rl_dispatch_subseq has
+ already taken care of pushing any necessary input back onto
+ the input queue with _rl_unget_char. */
+ {
+ m = _rl_dispatching_keymap;
+ type = m[ANYOTHERKEY].type;
+ func = m[ANYOTHERKEY].function;
+ if (type == ISFUNC && func == rl_do_lowercase_version)
+ r = _rl_dispatch (_rl_to_lower (key), map);
+ else if (type == ISFUNC && func == rl_insert)
+ {
+ /* If the function that was shadowed was self-insert, we
+ somehow need a keymap with map[key].func == self-insert.
+ Let's use this one. */
+ nt = m[key].type;
+ nf = m[key].function;
+
+ m[key].type = type;
+ m[key].function = func;
+ r = _rl_dispatch (key, m);
+ m[key].type = nt;
+ m[key].function = nf;
+ }
+ else
+ r = _rl_dispatch (ANYOTHERKEY, m);
+ }
+ else if (r && map[ANYOTHERKEY].function)
+ {
+ /* We didn't match (r is probably -1), so return something to
+ tell the caller that it should try ANYOTHERKEY for an
+ overridden function. */
+ _rl_unget_char (key);
+ _rl_dispatching_keymap = map;
+ return -2;
+ }
+ else if (r && got_subseq)
+ {
+ /* OK, back up the chain. */
+ _rl_unget_char (key);
+ _rl_dispatching_keymap = map;
+ return -1;
+ }
+
+ return r;
+}
+
/* **************************************************************** */
/* */
/* Initializations */
@@ -863,19 +1068,21 @@ readline_initialize_everything ()
static void
readline_default_bindings ()
{
- rl_tty_set_default_bindings (_rl_keymap);
+ if (_rl_bind_stty_chars)
+ rl_tty_set_default_bindings (_rl_keymap);
}
/* Reset the default bindings for the terminal special characters we're
interested in back to rl_insert and read the new ones. */
-#ifdef NOT_USED
static void
reset_default_bindings ()
{
- rl_tty_unset_default_bindings (_rl_keymap);
- rl_tty_set_default_bindings (_rl_keymap);
+ if (_rl_bind_stty_chars)
+ {
+ rl_tty_unset_default_bindings (_rl_keymap);
+ rl_tty_set_default_bindings (_rl_keymap);
+ }
}
-#endif
/* Bind some common arrow key sequences in MAP. */
static void
@@ -908,6 +1115,13 @@ bind_arrow_keys_internal (map)
rl_bind_keyseq_if_unbound ("\033OH", rl_beg_of_line);
rl_bind_keyseq_if_unbound ("\033OF", rl_end_of_line);
+#if defined (__MINGW32__)
+ rl_bind_keyseq_if_unbound ("\340H", rl_get_previous_history);
+ rl_bind_keyseq_if_unbound ("\340P", rl_get_next_history);
+ rl_bind_keyseq_if_unbound ("\340M", rl_forward_char);
+ rl_bind_keyseq_if_unbound ("\340K", rl_backward_char);
+#endif
+
_rl_keymap = xkeymap;
}
diff --git a/cmd-line-utils/readline/readline.h b/cmd-line-utils/readline/readline.h
index 222b317c4a8..b71bf98d204 100644
--- a/cmd-line-utils/readline/readline.h
+++ b/cmd-line-utils/readline/readline.h
@@ -1,6 +1,6 @@
/* Readline.h -- the names of functions callable from within readline. */
-/* Copyright (C) 1987-2004 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
This file is part of the GNU Readline Library, a library for
reading lines of text with interactive input and history editing.
@@ -40,9 +40,9 @@ extern "C" {
#endif
/* Hex-encoded Readline version number. */
-#define RL_READLINE_VERSION 0x0500 /* Readline 5.0 */
+#define RL_READLINE_VERSION 0x0502 /* Readline 5.2 */
#define RL_VERSION_MAJOR 5
-#define RL_VERSION_MINOR 0
+#define RL_VERSION_MINOR 2
/* Readline data structures. */
@@ -241,6 +241,7 @@ extern int rl_vi_column PARAMS((int, int));
extern int rl_vi_delete_to PARAMS((int, int));
extern int rl_vi_change_to PARAMS((int, int));
extern int rl_vi_yank_to PARAMS((int, int));
+extern int rl_vi_rubout PARAMS((int, int));
extern int rl_vi_delete PARAMS((int, int));
extern int rl_vi_back_to_indent PARAMS((int, int));
extern int rl_vi_first_print PARAMS((int, int));
@@ -302,6 +303,8 @@ extern int rl_bind_keyseq_in_map PARAMS((const char *, rl_command_func_t *, Keym
extern int rl_bind_keyseq_if_unbound PARAMS((const char *, rl_command_func_t *));
extern int rl_bind_keyseq_if_unbound_in_map PARAMS((const char *, rl_command_func_t *, Keymap));
extern int rl_generic_bind PARAMS((int, const char *, char *, Keymap));
+
+extern char *rl_variable_value PARAMS((const char *));
extern int rl_variable_bind PARAMS((const char *, const char *));
/* Backwards compatibility, use rl_bind_keyseq_in_map instead. */
@@ -401,6 +404,7 @@ extern int rl_reset_terminal PARAMS((const char *));
extern void rl_resize_terminal PARAMS((void));
extern void rl_set_screen_size PARAMS((int, int));
extern void rl_get_screen_size PARAMS((int *, int *));
+extern void rl_reset_screen_size PARAMS((void));
extern char *rl_get_termcap PARAMS((const char *));
@@ -528,6 +532,11 @@ extern const char *rl_terminal_name;
extern FILE *rl_instream;
extern FILE *rl_outstream;
+/* If non-zero, Readline gives values of LINES and COLUMNS from the environment
+ greater precedence than values fetched from the kernel when computing the
+ screen dimensions. */
+extern int rl_prefer_env_winsize;
+
/* If non-zero, then this is the address of a function to call just
before readline_internal () prints the first prompt. */
extern rl_hook_func_t *rl_startup_hook;
@@ -748,6 +757,10 @@ extern int rl_ignore_completion_duplicates;
completion character will be inserted as any other. */
extern int rl_inhibit_completion;
+/* Input error; can be returned by (*rl_getc_function) if readline is reading
+ a top-level command (RL_ISSTATE (RL_STATE_READCMD)). */
+#define READERR (-2)
+
/* Definitions available for use by readline clients. */
#define RL_PROMPT_START_IGNORE '\001'
#define RL_PROMPT_END_IGNORE '\002'
@@ -759,29 +772,33 @@ extern int rl_inhibit_completion;
#define MULT_MATCH 2
/* Possible state values for rl_readline_state */
-#define RL_STATE_NONE 0x00000 /* no state; before first call */
-
-#define RL_STATE_INITIALIZING 0x00001 /* initializing */
-#define RL_STATE_INITIALIZED 0x00002 /* initialization done */
-#define RL_STATE_TERMPREPPED 0x00004 /* terminal is prepped */
-#define RL_STATE_READCMD 0x00008 /* reading a command key */
-#define RL_STATE_METANEXT 0x00010 /* reading input after ESC */
-#define RL_STATE_DISPATCHING 0x00020 /* dispatching to a command */
-#define RL_STATE_MOREINPUT 0x00040 /* reading more input in a command function */
-#define RL_STATE_ISEARCH 0x00080 /* doing incremental search */
-#define RL_STATE_NSEARCH 0x00100 /* doing non-inc search */
-#define RL_STATE_SEARCH 0x00200 /* doing a history search */
-#define RL_STATE_NUMERICARG 0x00400 /* reading numeric argument */
-#define RL_STATE_MACROINPUT 0x00800 /* getting input from a macro */
-#define RL_STATE_MACRODEF 0x01000 /* defining keyboard macro */
-#define RL_STATE_OVERWRITE 0x02000 /* overwrite mode */
-#define RL_STATE_COMPLETING 0x04000 /* doing completion */
-#define RL_STATE_SIGHANDLER 0x08000 /* in readline sighandler */
-#define RL_STATE_UNDOING 0x10000 /* doing an undo */
-#define RL_STATE_INPUTPENDING 0x20000 /* rl_execute_next called */
-#define RL_STATE_TTYCSAVED 0x40000 /* tty special chars saved */
-
-#define RL_STATE_DONE 0x80000 /* done; accepted line */
+#define RL_STATE_NONE 0x000000 /* no state; before first call */
+
+#define RL_STATE_INITIALIZING 0x000001 /* initializing */
+#define RL_STATE_INITIALIZED 0x000002 /* initialization done */
+#define RL_STATE_TERMPREPPED 0x000004 /* terminal is prepped */
+#define RL_STATE_READCMD 0x000008 /* reading a command key */
+#define RL_STATE_METANEXT 0x000010 /* reading input after ESC */
+#define RL_STATE_DISPATCHING 0x000020 /* dispatching to a command */
+#define RL_STATE_MOREINPUT 0x000040 /* reading more input in a command function */
+#define RL_STATE_ISEARCH 0x000080 /* doing incremental search */
+#define RL_STATE_NSEARCH 0x000100 /* doing non-inc search */
+#define RL_STATE_SEARCH 0x000200 /* doing a history search */
+#define RL_STATE_NUMERICARG 0x000400 /* reading numeric argument */
+#define RL_STATE_MACROINPUT 0x000800 /* getting input from a macro */
+#define RL_STATE_MACRODEF 0x001000 /* defining keyboard macro */
+#define RL_STATE_OVERWRITE 0x002000 /* overwrite mode */
+#define RL_STATE_COMPLETING 0x004000 /* doing completion */
+#define RL_STATE_SIGHANDLER 0x008000 /* in readline sighandler */
+#define RL_STATE_UNDOING 0x010000 /* doing an undo */
+#define RL_STATE_INPUTPENDING 0x020000 /* rl_execute_next called */
+#define RL_STATE_TTYCSAVED 0x040000 /* tty special chars saved */
+#define RL_STATE_CALLBACK 0x080000 /* using the callback interface */
+#define RL_STATE_VIMOTION 0x100000 /* reading vi motion arg */
+#define RL_STATE_MULTIKEY 0x200000 /* reading multiple-key command */
+#define RL_STATE_VICMDONCE 0x400000 /* entered vi command mode at least once */
+
+#define RL_STATE_DONE 0x800000 /* done; accepted line */
#define RL_SETSTATE(x) (rl_readline_state |= (x))
#define RL_UNSETSTATE(x) (rl_readline_state &= ~(x))
diff --git a/cmd-line-utils/readline/rlconf.h b/cmd-line-utils/readline/rlconf.h
index c651fd8b41f..ff3929e0bf5 100644
--- a/cmd-line-utils/readline/rlconf.h
+++ b/cmd-line-utils/readline/rlconf.h
@@ -37,9 +37,12 @@
/* Ugly but working hack for binding prefix meta. */
#define PREFIX_META_HACK
-/* The final, last-ditch effort file name for an init file. */
+/* The next-to-last-ditch effort file name for a user-specific init file. */
#define DEFAULT_INPUTRC "~/.inputrc"
+/* The ultimate last-ditch filenname for an init file -- system-wide. */
+#define SYS_INPUTRC "/etc/inputrc"
+
/* If defined, expand tabs to spaces. */
#define DISPLAY_TABS
diff --git a/cmd-line-utils/readline/rldefs.h b/cmd-line-utils/readline/rldefs.h
index 0d600407b5f..dcdfc49fbbc 100644
--- a/cmd-line-utils/readline/rldefs.h
+++ b/cmd-line-utils/readline/rldefs.h
@@ -2,7 +2,7 @@
for readline. This should be included after any files that define
system-specific constants like _POSIX_VERSION or USG. */
-/* Copyright (C) 1987,1989 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
This file contains the Readline Library (the Library), a set of
routines for providing Emacs style line input to programs that ask
@@ -27,7 +27,7 @@
#define _RLDEFS_H_
#if defined (HAVE_CONFIG_H)
-# include "config.h"
+# include "config_readline.h"
#endif
#include "rlstdc.h"
@@ -38,7 +38,11 @@
# if defined (HAVE_TERMIO_H)
# define TERMIO_TTY_DRIVER
# else
-# define NEW_TTY_DRIVER
+# if !defined (__MINGW32__)
+# define NEW_TTY_DRIVER
+# else
+# define NO_TTY_DRIVER
+# endif
# endif
#endif
diff --git a/cmd-line-utils/readline/rlmbutil.h b/cmd-line-utils/readline/rlmbutil.h
index 77cc026e3e8..dd317e2a090 100644
--- a/cmd-line-utils/readline/rlmbutil.h
+++ b/cmd-line-utils/readline/rlmbutil.h
@@ -32,10 +32,19 @@
/* For platforms which support the ISO C amendement 1 functionality we
support user defined character classes. */
/* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>. */
-#if defined (HAVE_WCTYPE_H) && defined (HAVE_WCHAR_H)
+#if defined (HAVE_WCTYPE_H) && defined (HAVE_WCHAR_H) && defined (HAVE_LOCALE_H)
# include <wchar.h>
# include <wctype.h>
-# if defined (HAVE_MBSRTOWCS) && defined (HAVE_MBRTOWC) && defined (HAVE_MBRLEN) && defined (HAVE_WCWIDTH)
+# if defined (HAVE_ISWCTYPE) && \
+ defined (HAVE_ISWLOWER) && \
+ defined (HAVE_ISWUPPER) && \
+ defined (HAVE_MBSRTOWCS) && \
+ defined (HAVE_MBRTOWC) && \
+ defined (HAVE_MBRLEN) && \
+ defined (HAVE_TOWLOWER) && \
+ defined (HAVE_TOWUPPER) && \
+ defined (HAVE_WCHAR_T) && \
+ defined (HAVE_WCWIDTH)
/* system is supposed to support XPG5 */
# define HANDLE_MULTIBYTE 1
# endif
@@ -97,6 +106,21 @@ extern int _rl_read_mbstring PARAMS((int, char *, int));
extern int _rl_is_mbchar_matched PARAMS((char *, int, int, char *, int));
+extern wchar_t _rl_char_value PARAMS((char *, int));
+extern int _rl_walphabetic PARAMS((wchar_t));
+
+#define _rl_to_wupper(wc) (iswlower (wc) ? towupper (wc) : (wc))
+#define _rl_to_wlower(wc) (iswupper (wc) ? towlower (wc) : (wc))
+
+#define MB_NEXTCHAR(b,s,c,f) \
+ ((MB_CUR_MAX > 1 && rl_byte_oriented == 0) \
+ ? _rl_find_next_mbchar ((b), (s), (c), (f)) \
+ : ((s) + (c)))
+#define MB_PREVCHAR(b,s,f) \
+ ((MB_CUR_MAX > 1 && rl_byte_oriented == 0) \
+ ? _rl_find_prev_mbchar ((b), (s), (f)) \
+ : ((s) - 1))
+
#define MB_INVALIDCH(x) ((x) == (size_t)-1 || (x) == (size_t)-2)
#define MB_NULLWCH(x) ((x) == 0)
@@ -111,6 +135,16 @@ extern int _rl_is_mbchar_matched PARAMS((char *, int, int, char *, int));
#define _rl_find_prev_mbchar(b, i, f) (((i) == 0) ? (i) : ((i) - 1))
#define _rl_find_next_mbchar(b, i1, i2, f) ((i1) + (i2))
+#define _rl_char_value(buf,ind) ((buf)[(ind)])
+
+#define _rl_walphabetic(c) (rl_alphabetic (c))
+
+#define _rl_to_wupper(c) (_rl_to_upper (c))
+#define _rl_to_wlower(c) (_rl_to_lower (c))
+
+#define MB_NEXTCHAR(b,s,c,f) ((s) + (c))
+#define MB_PREVCHAR(b,s,f) ((s) - 1)
+
#define MB_INVALIDCH(x) (0)
#define MB_NULLWCH(x) (0)
diff --git a/cmd-line-utils/readline/rlprivate.h b/cmd-line-utils/readline/rlprivate.h
index c3cee917b76..64aa7bdd3fa 100644
--- a/cmd-line-utils/readline/rlprivate.h
+++ b/cmd-line-utils/readline/rlprivate.h
@@ -1,7 +1,7 @@
/* rlprivate.h -- functions and variables global to the readline library,
but not intended for use by applications. */
-/* Copyright (C) 1999-2004 Free Software Foundation, Inc.
+/* Copyright (C) 1999-2005 Free Software Foundation, Inc.
This file is part of the GNU Readline Library, a library for
reading lines of text with interactive input and history editing.
@@ -30,6 +30,95 @@
/*************************************************************************
* *
+ * Global structs undocumented in texinfo manual and not in readline.h *
+ * *
+ *************************************************************************/
+/* search types */
+#define RL_SEARCH_ISEARCH 0x01 /* incremental search */
+#define RL_SEARCH_NSEARCH 0x02 /* non-incremental search */
+#define RL_SEARCH_CSEARCH 0x04 /* intra-line char search */
+
+/* search flags */
+#define SF_REVERSE 0x01
+#define SF_FOUND 0x02
+#define SF_FAILED 0x04
+
+typedef struct __rl_search_context
+{
+ int type;
+ int sflags;
+
+ char *search_string;
+ int search_string_index;
+ int search_string_size;
+
+ char **lines;
+ char *allocated_line;
+ int hlen;
+ int hindex;
+
+ int save_point;
+ int save_mark;
+ int save_line;
+ int last_found_line;
+ char *prev_line_found;
+
+ UNDO_LIST *save_undo_list;
+
+ int history_pos;
+ int direction;
+
+ int lastc;
+#if defined (HANDLE_MULTIBYTE)
+ char mb[MB_LEN_MAX];
+#endif
+
+ char *sline;
+ int sline_len;
+ int sline_index;
+
+ char *search_terminators;
+} _rl_search_cxt;
+
+/* Callback data for reading numeric arguments */
+#define NUM_SAWMINUS 0x01
+#define NUM_SAWDIGITS 0x02
+#define NUM_READONE 0x04
+
+typedef int _rl_arg_cxt;
+
+/* A context for reading key sequences longer than a single character when
+ using the callback interface. */
+#define KSEQ_DISPATCHED 0x01
+#define KSEQ_SUBSEQ 0x02
+#define KSEQ_RECURSIVE 0x04
+
+typedef struct __rl_keyseq_context
+{
+ int flags;
+ int subseq_arg;
+ int subseq_retval; /* XXX */
+ Keymap dmap;
+
+ Keymap oldmap;
+ int okey;
+ struct __rl_keyseq_context *ocxt;
+ int childval;
+} _rl_keyseq_cxt;
+
+ /* fill in more as needed */
+/* `Generic' callback data and functions */
+typedef struct __rl_callback_generic_arg
+{
+ int count;
+ int i1, i2;
+ /* add here as needed */
+} _rl_callback_generic_arg;
+
+typedef int _rl_callback_func_t PARAMS((_rl_callback_generic_arg *));
+
+/*************************************************************************
+ * *
* Global functions undocumented in texinfo manual and not in readline.h *
* *
*************************************************************************/
@@ -54,6 +143,8 @@ extern int readline_echoing_p;
extern int rl_key_sequence_length;
extern int rl_byte_oriented;
+extern _rl_keyseq_cxt *_rl_kscxt;
+
/* display.c */
extern int rl_display_fixed;
@@ -100,6 +191,16 @@ extern void readline_internal_setup PARAMS((void));
extern char *readline_internal_teardown PARAMS((int));
extern int readline_internal_char PARAMS((void));
+extern _rl_keyseq_cxt *_rl_keyseq_cxt_alloc PARAMS((void));
+extern void _rl_keyseq_cxt_dispose PARAMS((_rl_keyseq_cxt *));
+extern void _rl_keyseq_chain_dispose PARAMS((void));
+
+extern int _rl_dispatch_callback PARAMS((_rl_keyseq_cxt *));
+
+/* callback.c */
+extern _rl_callback_generic_arg *_rl_callback_data_alloc PARAMS((int));
+extern void _rl_callback_data_dispose PARAMS((_rl_callback_generic_arg *));
+
#endif /* READLINE_CALLBACKS */
/* bind.c */
@@ -132,6 +233,15 @@ extern void _rl_insert_typein PARAMS((int));
extern int _rl_unget_char PARAMS((int));
extern int _rl_pushed_input_available PARAMS((void));
+/* isearch.c */
+extern _rl_search_cxt *_rl_scxt_alloc PARAMS((int, int));
+extern void _rl_scxt_dispose PARAMS((_rl_search_cxt *, int));
+
+extern int _rl_isearch_dispatch PARAMS((_rl_search_cxt *, int));
+extern int _rl_isearch_callback PARAMS((_rl_search_cxt *));
+
+extern int _rl_search_getchar PARAMS((_rl_search_cxt *));
+
/* macro.c */
extern void _rl_with_macro_input PARAMS((char *));
extern int _rl_next_macro_key PARAMS((void));
@@ -141,7 +251,12 @@ extern void _rl_add_macro_char PARAMS((int));
extern void _rl_kill_kbd_macro PARAMS((void));
/* misc.c */
-extern int _rl_init_argument PARAMS((void));
+extern int _rl_arg_overflow PARAMS((void));
+extern void _rl_arg_init PARAMS((void));
+extern int _rl_arg_getchar PARAMS((void));
+extern int _rl_arg_callback PARAMS((_rl_arg_cxt));
+extern void _rl_reset_argument PARAMS((void));
+
extern void _rl_start_using_history PARAMS((void));
extern int _rl_free_saved_history_line PARAMS((void));
extern void _rl_set_insert_mode PARAMS((int, int));
@@ -157,11 +272,15 @@ extern void _rl_init_line_state PARAMS((void));
extern void _rl_set_the_line PARAMS((void));
extern int _rl_dispatch PARAMS((int, Keymap));
extern int _rl_dispatch_subseq PARAMS((int, Keymap, int));
+extern void _rl_internal_char_cleanup PARAMS((void));
/* rltty.c */
extern int _rl_disable_tty_signals PARAMS((void));
extern int _rl_restore_tty_signals PARAMS((void));
+/* search.c */
+extern int _rl_nsearch_callback PARAMS((_rl_search_cxt *));
+
/* terminal.c */
extern void _rl_get_screen_size PARAMS((int, int));
extern int _rl_init_terminal_io PARAMS((const char *));
@@ -190,6 +309,10 @@ extern int _rl_char_search_internal PARAMS((int, int, int));
#endif
extern int _rl_set_mark_at_pos PARAMS((int));
+/* undo.c */
+extern UNDO_LIST *_rl_copy_undo_entry PARAMS((UNDO_LIST *));
+extern UNDO_LIST *_rl_copy_undo_list PARAMS((UNDO_LIST *));
+
/* util.c */
extern int _rl_abort_internal PARAMS((void));
extern char *_rl_strindex PARAMS((const char *, const char *));
@@ -217,6 +340,10 @@ extern void _rl_vi_done_inserting PARAMS((void));
extern const char *_rl_possible_control_prefixes[];
extern const char *_rl_possible_meta_prefixes[];
+/* callback.c */
+extern _rl_callback_func_t *_rl_callback_func;
+extern _rl_callback_generic_arg *_rl_callback_data;
+
/* complete.c */
extern int _rl_complete_show_all;
extern int _rl_complete_show_unmodified;
@@ -231,11 +358,14 @@ extern int _rl_page_completions;
extern int _rl_vis_botlin;
extern int _rl_last_c_pos;
extern int _rl_suppress_redisplay;
+extern int _rl_want_redisplay;
extern char *rl_display_prompt;
/* isearch.c */
extern char *_rl_isearch_terminators;
+extern _rl_search_cxt *_rl_iscxt;
+
/* macro.c */
extern char *_rl_executing_macro;
@@ -243,6 +373,8 @@ extern char *_rl_executing_macro;
extern int _rl_history_preserve_point;
extern int _rl_history_saved_point;
+extern _rl_arg_cxt _rl_argcxt;
+
/* readline.c */
extern int _rl_horizontal_scroll_mode;
extern int _rl_mark_modified_lines;
@@ -250,6 +382,7 @@ extern int _rl_bell_preference;
extern int _rl_meta_flag;
extern int _rl_convert_meta_chars_to_ascii;
extern int _rl_output_meta_chars;
+extern int _rl_bind_stty_chars;
extern char *_rl_comment_begin;
extern unsigned char _rl_parsing_conditionalized_out;
extern Keymap _rl_keymap;
@@ -259,6 +392,9 @@ extern int _rl_last_command_was_kill;
extern int _rl_eof_char;
extern procenv_t readline_top_level;
+/* search.c */
+extern _rl_search_cxt *_rl_nscxt;
+
/* terminal.c */
extern int _rl_enable_keypad;
extern int _rl_enable_meta;
@@ -272,6 +408,7 @@ extern char *_rl_term_up;
extern char *_rl_term_dc;
extern char *_rl_term_cr;
extern char *_rl_term_IC;
+extern char *_rl_term_forward_char;
extern int _rl_screenheight;
extern int _rl_screenwidth;
extern int _rl_screenchars;
diff --git a/cmd-line-utils/readline/rltty.c b/cmd-line-utils/readline/rltty.c
index 869538af9ab..8c896bd3b26 100644
--- a/cmd-line-utils/readline/rltty.c
+++ b/cmd-line-utils/readline/rltty.c
@@ -1,7 +1,7 @@
/* rltty.c -- functions to prepare and restore the terminal for readline's
use. */
-/* Copyright (C) 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1992-2005 Free Software Foundation, Inc.
This file is part of the GNU Readline Library, a library for
reading lines of text with interactive input and history editing.
@@ -22,7 +22,9 @@
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
#define READLINE_LIBRARY
-#include "config_readline.h"
+#if defined (HAVE_CONFIG_H)
+# include "config_readline.h"
+#endif
#include <sys/types.h>
#include <signal.h>
@@ -149,7 +151,9 @@ set_winsize (int tty __attribute__((unused)))
#endif /* TIOCGWINSZ */
}
-#if defined (NEW_TTY_DRIVER)
+#if defined (NO_TTY_DRIVER)
+/* Nothing */
+#elif defined (NEW_TTY_DRIVER)
/* Values for the `flags' field of a struct bsdtty. This tells which
elements of the struct bsdtty have been fetched from the system and
@@ -230,6 +234,7 @@ get_tty_settings (tty, tiop)
tiop->flags = tiop->lflag = 0;
+ errno = 0;
if (ioctl (tty, TIOCGETP, &(tiop->sgttyb)) < 0)
return -1;
tiop->flags |= SGTTY_SET;
@@ -515,6 +520,7 @@ get_tty_settings (tty, tiop)
{
set_winsize (tty);
+ errno = 0;
if (_get_tty_settings (tty, tiop) < 0)
return -1;
@@ -628,9 +634,23 @@ prepare_terminal_settings (meta_flag, oldtio, tiop)
#endif /* TERMIOS_TTY_DRIVER && _POSIX_VDISABLE */
}
-#endif /* NEW_TTY_DRIVER */
+#endif /* !NEW_TTY_DRIVER */
/* Put the terminal in CBREAK mode so that we can detect key presses. */
+#if defined (NO_TTY_DRIVER)
+void
+rl_prep_terminal (meta_flag)
+ int meta_flag;
+{
+ readline_echoing_p = 1;
+}
+
+void
+rl_deprep_terminal ()
+{
+}
+
+#else /* ! NO_TTY_DRIVER */
void
rl_prep_terminal (meta_flag)
int meta_flag;
@@ -648,16 +668,43 @@ rl_prep_terminal (meta_flag)
if (get_tty_settings (tty, &tio) < 0)
{
+#if defined (ENOTSUP)
+ /* MacOS X, at least, lies about the value of errno if tcgetattr fails. */
+ if (errno == ENOTTY || errno == ENOTSUP)
+#else
+ if (errno == ENOTTY)
+#endif
+ readline_echoing_p = 1; /* XXX */
release_sigint ();
return;
}
otio = tio;
- rl_tty_unset_default_bindings (_rl_keymap);
+ if (_rl_bind_stty_chars)
+ {
+#if defined (VI_MODE)
+ /* If editing in vi mode, make sure we restore the bindings in the
+ insertion keymap no matter what keymap we ended up in. */
+ if (rl_editing_mode == vi_mode)
+ rl_tty_unset_default_bindings (vi_insertion_keymap);
+ else
+#endif
+ rl_tty_unset_default_bindings (_rl_keymap);
+ }
save_tty_chars (&otio);
RL_SETSTATE(RL_STATE_TTYCSAVED);
- _rl_bind_tty_special_chars (_rl_keymap, tio);
+ if (_rl_bind_stty_chars)
+ {
+#if defined (VI_MODE)
+ /* If editing in vi mode, make sure we set the bindings in the
+ insertion keymap no matter what keymap we ended up in. */
+ if (rl_editing_mode == vi_mode)
+ _rl_bind_tty_special_chars (vi_insertion_keymap, tio);
+ else
+#endif
+ _rl_bind_tty_special_chars (_rl_keymap, tio);
+ }
prepare_terminal_settings (meta_flag, otio, &tio);
@@ -707,6 +754,7 @@ rl_deprep_terminal ()
release_sigint ();
}
+#endif /* !NO_TTY_DRIVER */
/* **************************************************************** */
/* */
@@ -715,8 +763,13 @@ rl_deprep_terminal ()
/* **************************************************************** */
int
-rl_restart_output(int count __attribute__((unused)), int key __attribute__((unused)))
+rl_restart_output (count, key)
+ int count, key;
{
+#if defined (__MINGW32__)
+ return 0;
+#else /* !__MING32__ */
+
int fildes = fileno (rl_outstream);
#if defined (TIOCSTART)
#if defined (apollo)
@@ -744,11 +797,17 @@ rl_restart_output(int count __attribute__((unused)), int key __attribute__((unus
#endif /* !TIOCSTART */
return 0;
+#endif /* !__MINGW32__ */
}
int
-rl_stop_output(int count __attribute__((unused)), int key __attribute__((unused)))
+rl_stop_output (count, key)
+ int count, key;
{
+#if defined (__MINGW32__)
+ return 0;
+#else
+
int fildes = fileno (rl_instream);
#if defined (TIOCSTOP)
@@ -771,6 +830,7 @@ rl_stop_output(int count __attribute__((unused)), int key __attribute__((unused)
#endif /* !TIOCSTOP */
return 0;
+#endif /* !__MINGW32__ */
}
/* **************************************************************** */
@@ -779,9 +839,16 @@ rl_stop_output(int count __attribute__((unused)), int key __attribute__((unused)
/* */
/* **************************************************************** */
+#if !defined (NO_TTY_DRIVER)
#define SET_SPECIAL(sc, func) set_special_char(kmap, &ttybuff, sc, func)
+#endif
-#if defined (NEW_TTY_DRIVER)
+#if defined (NO_TTY_DRIVER)
+
+#define SET_SPECIAL(sc, func)
+#define RESET_SPECIAL(c)
+
+#elif defined (NEW_TTY_DRIVER)
static void
set_special_char (kmap, tiop, sc, func)
Keymap kmap;
@@ -862,6 +929,7 @@ void
rltty_set_default_bindings (kmap)
Keymap kmap;
{
+#if !defined (NO_TTY_DRIVER)
TIOTYPE ttybuff;
int tty;
@@ -869,6 +937,7 @@ rltty_set_default_bindings (kmap)
if (get_tty_settings (tty, &ttybuff) == 0)
_rl_bind_tty_special_chars (kmap, ttybuff);
+#endif
}
/* New public way to set the system default editing chars to their readline
@@ -906,7 +975,7 @@ rl_tty_unset_default_bindings (kmap)
#if defined (HANDLE_SIGNALS)
-#if defined (NEW_TTY_DRIVER)
+#if defined (NEW_TTY_DRIVER) || defined (NO_TTY_DRIVER)
int
_rl_disable_tty_signals ()
{
diff --git a/cmd-line-utils/readline/rlwinsize.h b/cmd-line-utils/readline/rlwinsize.h
index 7838154d023..60729b0f549 100644
--- a/cmd-line-utils/readline/rlwinsize.h
+++ b/cmd-line-utils/readline/rlwinsize.h
@@ -26,7 +26,7 @@
#define _RLWINSIZE_H_
#if defined (HAVE_CONFIG_H)
-# include "config.h"
+# include "config_readline.h"
#endif
/* Try to find the definitions of `struct winsize' and TIOGCWINSZ */
diff --git a/cmd-line-utils/readline/savestring.c b/cmd-line-utils/readline/savestring.c
index ae605374d13..d42bcadf5d7 100644
--- a/cmd-line-utils/readline/savestring.c
+++ b/cmd-line-utils/readline/savestring.c
@@ -22,7 +22,6 @@
#define READLINE_LIBRARY
#include "config_readline.h"
-
#ifdef HAVE_STRING_H
# include <string.h>
#endif
diff --git a/cmd-line-utils/readline/search.c b/cmd-line-utils/readline/search.c
index 6479427be2f..cfa5db1dc17 100644
--- a/cmd-line-utils/readline/search.c
+++ b/cmd-line-utils/readline/search.c
@@ -1,6 +1,6 @@
/* search.c - code for non-incremental searching in emacs and vi modes. */
-/* Copyright (C) 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1992-2005 Free Software Foundation, Inc.
This file is part of the Readline Library (the Library), a set of
routines for providing Emacs style line input to programs that ask
@@ -22,7 +22,9 @@
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
#define READLINE_LIBRARY
-#include "config_readline.h"
+#if defined (HAVE_CONFIG_H)
+# include "config_readline.h"
+#endif
#include <sys/types.h>
#include <stdio.h>
@@ -51,6 +53,8 @@
#endif
#define abs(x) (((x) >= 0) ? (x) : -(x))
+_rl_search_cxt *_rl_nscxt = 0;
+
extern HIST_ENTRY *_rl_saved_line_for_history;
/* Functions imported from the rest of the library. */
@@ -68,11 +72,16 @@ static int history_string_size;
static void make_history_line_current PARAMS((HIST_ENTRY *));
static int noninc_search_from_pos PARAMS((char *, int, int));
-static void noninc_dosearch PARAMS((char *, int));
-static void noninc_search PARAMS((int, int));
+static int noninc_dosearch PARAMS((char *, int));
+static int noninc_search PARAMS((int, int));
static int rl_history_search_internal PARAMS((int, int));
static void rl_history_search_reinit PARAMS((void));
+static _rl_search_cxt *_rl_nsearch_init PARAMS((int, int));
+static int _rl_nsearch_cleanup PARAMS((_rl_search_cxt *, int));
+static void _rl_nsearch_abort PARAMS((_rl_search_cxt *));
+static int _rl_nsearch_dispatch PARAMS((_rl_search_cxt *, int));
+
/* Make the data from the history entry ENTRY be the contents of the
current line. This doesn't do anything with rl_point; the caller
must set it. */
@@ -80,12 +89,15 @@ static void
make_history_line_current (entry)
HIST_ENTRY *entry;
{
-#if 0
- rl_replace_line (entry->line, 1);
- rl_undo_list = (UNDO_LIST *)entry->data;
-#else
_rl_replace_text (entry->line, 0, rl_end);
_rl_fix_point (1);
+#if defined (VI_MODE)
+ if (rl_editing_mode == vi_mode)
+ /* POSIX.2 says that the `U' command doesn't affect the copy of any
+ command lines to the edit line. We're going to implement that by
+ making the undo list start after the matching line is copied to the
+ current editing buffer. */
+ rl_free_undo_list ();
#endif
if (_rl_saved_line_for_history)
@@ -128,8 +140,8 @@ noninc_search_from_pos (string, pos, dir)
/* Search for a line in the history containing STRING. If DIR is < 0, the
search is backwards through previous entries, else through subsequent
- entries. */
-static void
+ entries. Returns 1 if the search was successful, 0 otherwise. */
+static int
noninc_dosearch (string, dir)
char *string;
int dir;
@@ -140,7 +152,7 @@ noninc_dosearch (string, dir)
if (string == 0 || *string == '\0' || noninc_history_pos < 0)
{
rl_ding ();
- return;
+ return 0;
}
pos = noninc_search_from_pos (string, noninc_history_pos + dir, dir);
@@ -151,7 +163,7 @@ noninc_dosearch (string, dir)
rl_clear_message ();
rl_point = 0;
rl_ding ();
- return;
+ return 0;
}
noninc_history_pos = pos;
@@ -162,7 +174,7 @@ noninc_dosearch (string, dir)
#if defined (VI_MODE)
if (rl_editing_mode != vi_mode)
#endif
- history_set_pos (oldpos);
+ history_set_pos (oldpos);
make_history_line_current (entry);
@@ -170,27 +182,24 @@ noninc_dosearch (string, dir)
rl_mark = rl_end;
rl_clear_message ();
+ return 1;
}
-/* Search non-interactively through the history list. DIR < 0 means to
- search backwards through the history of previous commands; otherwise
- the search is for commands subsequent to the current position in the
- history list. PCHAR is the character to use for prompting when reading
- the search string; if not specified (0), it defaults to `:'. */
-static void
-noninc_search (dir, pchar)
- int dir;
- int pchar;
+static _rl_search_cxt *
+_rl_nsearch_init (dir, pchar)
+ int dir, pchar;
{
- int saved_point, saved_mark, c;
+ _rl_search_cxt *cxt;
char *p;
-#if defined (HANDLE_MULTIBYTE)
- char mb[MB_LEN_MAX];
-#endif
+
+ cxt = _rl_scxt_alloc (RL_SEARCH_NSEARCH, 0);
+ if (dir < 0)
+ cxt->sflags |= SF_REVERSE; /* not strictly needed */
+
+ cxt->direction = dir;
+ cxt->history_pos = cxt->save_line;
rl_maybe_save_line ();
- saved_point = rl_point;
- saved_mark = rl_mark;
/* Clear the undo list, since reading the search string should create its
own undo list, and the whole list will end up being freed when we
@@ -202,152 +211,243 @@ noninc_search (dir, pchar)
rl_end = rl_point = 0;
p = _rl_make_prompt_for_search (pchar ? pchar : ':');
- rl_message (p, 0, 0);
+ rl_message ("%s", p, 0);
free (p);
-#define SEARCH_RETURN rl_restore_prompt (); RL_UNSETSTATE(RL_STATE_NSEARCH); return
-
RL_SETSTATE(RL_STATE_NSEARCH);
- /* Read the search string. */
- while (1)
+
+ _rl_nscxt = cxt;
+
+ return cxt;
+}
+
+static int
+_rl_nsearch_cleanup (cxt, r)
+ _rl_search_cxt *cxt;
+ int r;
+{
+ _rl_scxt_dispose (cxt, 0);
+ _rl_nscxt = 0;
+
+ RL_UNSETSTATE(RL_STATE_NSEARCH);
+
+ return (r != 1);
+}
+
+static void
+_rl_nsearch_abort (cxt)
+ _rl_search_cxt *cxt;
+{
+ rl_maybe_unsave_line ();
+ rl_clear_message ();
+ rl_point = cxt->save_point;
+ rl_mark = cxt->save_mark;
+ rl_restore_prompt ();
+
+ RL_UNSETSTATE (RL_STATE_NSEARCH);
+}
+
+/* Process just-read character C according to search context CXT. Return -1
+ if the caller should abort the search, 0 if we should break out of the
+ loop, and 1 if we should continue to read characters. */
+static int
+_rl_nsearch_dispatch (cxt, c)
+ _rl_search_cxt *cxt;
+ int c;
+{
+ switch (c)
{
- RL_SETSTATE(RL_STATE_MOREINPUT);
- c = rl_read_key ();
- RL_UNSETSTATE(RL_STATE_MOREINPUT);
+ case CTRL('W'):
+ rl_unix_word_rubout (1, c);
+ break;
-#if defined (HANDLE_MULTIBYTE)
- if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
- c = _rl_read_mbstring (c, mb, MB_LEN_MAX);
-#endif
+ case CTRL('U'):
+ rl_unix_line_discard (1, c);
+ break;
- if (c == 0)
- break;
+ case RETURN:
+ case NEWLINE:
+ return 0;
- switch (c)
+ case CTRL('H'):
+ case RUBOUT:
+ if (rl_point == 0)
{
- case CTRL('H'):
- case RUBOUT:
- if (rl_point == 0)
- {
- rl_maybe_unsave_line ();
- rl_clear_message ();
- rl_point = saved_point;
- rl_mark = saved_mark;
- SEARCH_RETURN;
- }
- _rl_rubout_char (1, c);
- break;
-
- case CTRL('W'):
- rl_unix_word_rubout (1, c);
- break;
-
- case CTRL('U'):
- rl_unix_line_discard (1, c);
- break;
-
- case RETURN:
- case NEWLINE:
- goto dosearch;
- /* NOTREACHED */
- break;
-
- case CTRL('C'):
- case CTRL('G'):
- rl_maybe_unsave_line ();
- rl_clear_message ();
- rl_point = saved_point;
- rl_mark = saved_mark;
- rl_ding ();
- SEARCH_RETURN;
+ _rl_nsearch_abort (cxt);
+ return -1;
+ }
+ _rl_rubout_char (1, c);
+ break;
+
+ case CTRL('C'):
+ case CTRL('G'):
+ rl_ding ();
+ _rl_nsearch_abort (cxt);
+ return -1;
- default:
+ default:
#if defined (HANDLE_MULTIBYTE)
- if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
- rl_insert_text (mb);
- else
+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ rl_insert_text (cxt->mb);
+ else
#endif
- _rl_insert_char (1, c);
- break;
- }
- (*rl_redisplay_function) ();
+ _rl_insert_char (1, c);
+ break;
}
- dosearch:
- rl_mark = saved_mark;
+ (*rl_redisplay_function) ();
+ return 1;
+}
+
+/* Perform one search according to CXT, using NONINC_SEARCH_STRING. Return
+ -1 if the search should be aborted, any other value means to clean up
+ using _rl_nsearch_cleanup (). Returns 1 if the search was successful,
+ 0 otherwise. */
+static int
+_rl_nsearch_dosearch (cxt)
+ _rl_search_cxt *cxt;
+{
+ rl_mark = cxt->save_mark;
/* If rl_point == 0, we want to re-use the previous search string and
start from the saved history position. If there's no previous search
string, punt. */
if (rl_point == 0)
{
- if (!noninc_search_string)
+ if (noninc_search_string == 0)
{
rl_ding ();
- SEARCH_RETURN;
+ rl_restore_prompt ();
+ RL_UNSETSTATE (RL_STATE_NSEARCH);
+ return -1;
}
}
else
{
/* We want to start the search from the current history position. */
- noninc_history_pos = where_history ();
+ noninc_history_pos = cxt->save_line;
FREE (noninc_search_string);
noninc_search_string = savestring (rl_line_buffer);
+
+ /* If we don't want the subsequent undo list generated by the search
+ matching a history line to include the contents of the search string,
+ we need to clear rl_line_buffer here. For now, we just clear the
+ undo list generated by reading the search string. (If the search
+ fails, the old undo list will be restored by rl_maybe_unsave_line.) */
+ rl_free_undo_list ();
}
rl_restore_prompt ();
- noninc_dosearch (noninc_search_string, dir);
- RL_UNSETSTATE(RL_STATE_NSEARCH);
+ return (noninc_dosearch (noninc_search_string, cxt->direction));
+}
+
+/* Search non-interactively through the history list. DIR < 0 means to
+ search backwards through the history of previous commands; otherwise
+ the search is for commands subsequent to the current position in the
+ history list. PCHAR is the character to use for prompting when reading
+ the search string; if not specified (0), it defaults to `:'. */
+static int
+noninc_search (dir, pchar)
+ int dir;
+ int pchar;
+{
+ _rl_search_cxt *cxt;
+ int c, r;
+
+ cxt = _rl_nsearch_init (dir, pchar);
+
+ if (RL_ISSTATE (RL_STATE_CALLBACK))
+ return (0);
+
+ /* Read the search string. */
+ r = 0;
+ while (1)
+ {
+ c = _rl_search_getchar (cxt);
+
+ if (c == 0)
+ break;
+
+ r = _rl_nsearch_dispatch (cxt, c);
+ if (r < 0)
+ return 1;
+ else if (r == 0)
+ break;
+ }
+
+ r = _rl_nsearch_dosearch (cxt);
+ return ((r >= 0) ? _rl_nsearch_cleanup (cxt, r) : (r != 1));
}
/* Search forward through the history list for a string. If the vi-mode
code calls this, KEY will be `?'. */
int
-rl_noninc_forward_search (int count __attribute__((unused)), int key)
+rl_noninc_forward_search (count, key)
+ int count, key;
{
- noninc_search (1, (key == '?') ? '?' : 0);
- return 0;
+ return noninc_search (1, (key == '?') ? '?' : 0);
}
/* Reverse search the history list for a string. If the vi-mode code
calls this, KEY will be `/'. */
int
-rl_noninc_reverse_search (int count __attribute__((unused)), int key)
+rl_noninc_reverse_search (count, key)
+ int count, key;
{
- noninc_search (-1, (key == '/') ? '/' : 0);
- return 0;
+ return noninc_search (-1, (key == '/') ? '/' : 0);
}
/* Search forward through the history list for the last string searched
for. If there is no saved search string, abort. */
int
-rl_noninc_forward_search_again (int count __attribute__((unused)),
- int key __attribute__((unused)))
+rl_noninc_forward_search_again (count, key)
+ int count, key;
{
+ int r;
+
if (!noninc_search_string)
{
rl_ding ();
return (-1);
}
- noninc_dosearch (noninc_search_string, 1);
- return 0;
+ r = noninc_dosearch (noninc_search_string, 1);
+ return (r != 1);
}
/* Reverse search in the history list for the last string searched
for. If there is no saved search string, abort. */
int
-rl_noninc_reverse_search_again (int count __attribute__((unused)),
- int key __attribute__((unused)))
+rl_noninc_reverse_search_again (count, key)
+ int count, key;
{
+ int r;
+
if (!noninc_search_string)
{
rl_ding ();
return (-1);
}
- noninc_dosearch (noninc_search_string, -1);
- return 0;
+ r = noninc_dosearch (noninc_search_string, -1);
+ return (r != 1);
}
+#if defined (READLINE_CALLBACKS)
+int
+_rl_nsearch_callback (cxt)
+ _rl_search_cxt *cxt;
+{
+ int c, r;
+
+ c = _rl_search_getchar (cxt);
+ r = _rl_nsearch_dispatch (cxt, c);
+ if (r != 0)
+ return 1;
+
+ r = _rl_nsearch_dosearch (cxt);
+ return ((r >= 0) ? _rl_nsearch_cleanup (cxt, r) : (r != 1));
+}
+#endif
+
static int
rl_history_search_internal (count, dir)
int count, dir;
diff --git a/cmd-line-utils/readline/shell.c b/cmd-line-utils/readline/shell.c
index 41668d70ab5..5d084476bed 100644
--- a/cmd-line-utils/readline/shell.c
+++ b/cmd-line-utils/readline/shell.c
@@ -22,7 +22,9 @@
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
#define READLINE_LIBRARY
-#include "config_readline.h"
+#if defined (HAVE_CONFIG_H)
+# include "config_readline.h"
+#endif
#include <sys/types.h>
@@ -46,8 +48,12 @@
# include <limits.h>
#endif
+#if defined (HAVE_FCNTL_H)
#include <fcntl.h>
+#endif
+#if defined (HAVE_PWD_H)
#include <pwd.h>
+#endif
#include <stdio.h>
@@ -55,9 +61,9 @@
#include "rlshell.h"
#include "xmalloc.h"
-#if !defined (HAVE_GETPW_DECLS)
+#if defined (HAVE_GETPWUID) && !defined (HAVE_GETPW_DECLS)
extern struct passwd *getpwuid PARAMS((uid_t));
-#endif /* !HAVE_GETPW_DECLS */
+#endif /* HAVE_GETPWUID && !HAVE_GETPW_DECLS */
#ifndef NULL
# define NULL 0
@@ -120,16 +126,7 @@ sh_set_lines_and_columns (lines, cols)
{
char *b;
-#if defined (HAVE_PUTENV)
- b = (char *)xmalloc (INT_STRLEN_BOUND (int) + sizeof ("LINES=") + 1);
- sprintf (b, "LINES=%d", lines);
- putenv (b);
-
- b = (char *)xmalloc (INT_STRLEN_BOUND (int) + sizeof ("COLUMNS=") + 1);
- sprintf (b, "COLUMNS=%d", cols);
- putenv (b);
-#else /* !HAVE_PUTENV */
-# if defined (HAVE_SETENV)
+#if defined (HAVE_SETENV)
b = (char *)xmalloc (INT_STRLEN_BOUND (int) + 1);
sprintf (b, "%d", lines);
setenv ("LINES", b, 1);
@@ -139,8 +136,17 @@ sh_set_lines_and_columns (lines, cols)
sprintf (b, "%d", cols);
setenv ("COLUMNS", b, 1);
free (b);
-# endif /* HAVE_SETENV */
-#endif /* !HAVE_PUTENV */
+#else /* !HAVE_SETENV */
+# if defined (HAVE_PUTENV)
+ b = (char *)xmalloc (INT_STRLEN_BOUND (int) + sizeof ("LINES=") + 1);
+ sprintf (b, "LINES=%d", lines);
+ putenv (b);
+
+ b = (char *)xmalloc (INT_STRLEN_BOUND (int) + sizeof ("COLUMNS=") + 1);
+ sprintf (b, "COLUMNS=%d", cols);
+ putenv (b);
+# endif /* HAVE_PUTENV */
+#endif /* !HAVE_SETENV */
}
char *
@@ -157,9 +163,11 @@ sh_get_home_dir ()
struct passwd *entry;
home_dir = (char *)NULL;
+#if defined (HAVE_GETPWUID)
entry = getpwuid (getuid ());
if (entry)
home_dir = entry->pw_dir;
+#endif
return (home_dir);
}
@@ -173,6 +181,7 @@ int
sh_unset_nodelay_mode (fd)
int fd;
{
+#if defined (HAVE_FCNTL)
int flags, bflags;
if ((flags = fcntl (fd, F_GETFL, 0)) < 0)
@@ -193,6 +202,7 @@ sh_unset_nodelay_mode (fd)
flags &= ~bflags;
return (fcntl (fd, F_SETFL, flags));
}
+#endif
return 0;
}
diff --git a/cmd-line-utils/readline/signals.c b/cmd-line-utils/readline/signals.c
index be1150f6c54..65c2ff308f6 100644
--- a/cmd-line-utils/readline/signals.c
+++ b/cmd-line-utils/readline/signals.c
@@ -1,6 +1,6 @@
/* signals.c -- signal handling support for readline. */
-/* Copyright (C) 1987, 1989, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
This file is part of the GNU Readline Library, a library for
reading lines of text with interactive input and history editing.
@@ -21,7 +21,9 @@
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
#define READLINE_LIBRARY
-#include "config_readline.h"
+#if defined (HAVE_CONFIG_H)
+# include "config_readline.h"
+#endif
#include <stdio.h> /* Just for NULL. Yuck. */
#include <sys/types.h>
@@ -129,7 +131,11 @@ rl_signal_handler (sig)
#if !defined (HAVE_BSD_SIGNALS) && !defined (HAVE_POSIX_SIGNALS)
/* Since the signal will not be blocked while we are in the signal
handler, ignore it until rl_clear_signals resets the catcher. */
+# if defined (SIGALRM)
if (sig == SIGINT || sig == SIGALRM)
+# else
+ if (sig == SIGINT)
+# endif
rl_set_sighandler (sig, SIG_IGN, &dummy_cxt);
#endif /* !HAVE_BSD_SIGNALS && !HAVE_POSIX_SIGNALS */
@@ -139,17 +145,22 @@ rl_signal_handler (sig)
rl_free_line_state ();
/* FALLTHROUGH */
+ case SIGTERM:
#if defined (SIGTSTP)
case SIGTSTP:
case SIGTTOU:
case SIGTTIN:
#endif /* SIGTSTP */
+#if defined (SIGALRM)
case SIGALRM:
- case SIGTERM:
+#endif
+#if defined (SIGQUIT)
case SIGQUIT:
+#endif
rl_cleanup_after_signal ();
#if defined (HAVE_POSIX_SIGNALS)
+ sigemptyset (&set);
sigprocmask (SIG_BLOCK, (sigset_t *)NULL, &set);
sigdelset (&set, sig);
#else /* !HAVE_POSIX_SIGNALS */
@@ -162,7 +173,11 @@ rl_signal_handler (sig)
signal (sig, SIG_ACK);
#endif
+#if defined (HAVE_KILL)
kill (getpid (), sig);
+#else
+ raise (sig); /* assume we have raise */
+#endif
/* Let the signal that we just sent through. */
#if defined (HAVE_POSIX_SIGNALS)
@@ -274,13 +289,51 @@ rl_set_signals ()
{
sighandler_cxt dummy;
SigHandler *oh;
+#if defined (HAVE_POSIX_SIGNALS)
+ static int sigmask_set = 0;
+ static sigset_t bset, oset;
+#endif
+
+#if defined (HAVE_POSIX_SIGNALS)
+ if (rl_catch_signals && sigmask_set == 0)
+ {
+ sigemptyset (&bset);
+
+ sigaddset (&bset, SIGINT);
+ sigaddset (&bset, SIGINT);
+#if defined (SIGQUIT)
+ sigaddset (&bset, SIGQUIT);
+#endif
+#if defined (SIGALRM)
+ sigaddset (&bset, SIGALRM);
+#endif
+#if defined (SIGTSTP)
+ sigaddset (&bset, SIGTSTP);
+#endif
+#if defined (SIGTTIN)
+ sigaddset (&bset, SIGTTIN);
+#endif
+#if defined (SIGTTOU)
+ sigaddset (&bset, SIGTTOU);
+#endif
+ sigmask_set = 1;
+ }
+#endif /* HAVE_POSIX_SIGNALS */
if (rl_catch_signals && signals_set_flag == 0)
{
+#if defined (HAVE_POSIX_SIGNALS)
+ sigemptyset (&oset);
+ sigprocmask (SIG_BLOCK, &bset, &oset);
+#endif
+
rl_maybe_set_sighandler (SIGINT, rl_signal_handler, &old_int);
rl_maybe_set_sighandler (SIGTERM, rl_signal_handler, &old_term);
+#if defined (SIGQUIT)
rl_maybe_set_sighandler (SIGQUIT, rl_signal_handler, &old_quit);
+#endif
+#if defined (SIGALRM)
oh = rl_set_sighandler (SIGALRM, rl_signal_handler, &old_alrm);
if (oh == (SigHandler *)SIG_IGN)
rl_sigaction (SIGALRM, &old_alrm, &dummy);
@@ -292,6 +345,7 @@ rl_set_signals ()
if (oh != (SigHandler *)SIG_DFL && (old_alrm.sa_flags & SA_RESTART))
rl_sigaction (SIGALRM, &old_alrm, &dummy);
#endif /* HAVE_POSIX_SIGNALS */
+#endif /* SIGALRM */
#if defined (SIGTSTP)
rl_maybe_set_sighandler (SIGTSTP, rl_signal_handler, &old_tstp);
@@ -306,6 +360,10 @@ rl_set_signals ()
#endif /* SIGTTIN */
signals_set_flag = 1;
+
+#if defined (HAVE_POSIX_SIGNALS)
+ sigprocmask (SIG_SETMASK, &oset, (sigset_t *)NULL);
+#endif
}
#if defined (SIGWINCH)
@@ -330,8 +388,12 @@ rl_clear_signals ()
rl_sigaction (SIGINT, &old_int, &dummy);
rl_sigaction (SIGTERM, &old_term, &dummy);
+#if defined (SIGQUIT)
rl_sigaction (SIGQUIT, &old_quit, &dummy);
+#endif
+#if defined (SIGALRM)
rl_sigaction (SIGALRM, &old_alrm, &dummy);
+#endif
#if defined (SIGTSTP)
rl_sigaction (SIGTSTP, &old_tstp, &dummy);
@@ -366,16 +428,18 @@ void
rl_cleanup_after_signal ()
{
_rl_clean_up_for_exit ();
- (*rl_deprep_term_function) ();
- rl_clear_signals ();
+ if (rl_deprep_term_function)
+ (*rl_deprep_term_function) ();
rl_clear_pending_input ();
+ rl_clear_signals ();
}
/* Reset the terminal and readline state after a signal handler returns. */
void
rl_reset_after_signal ()
{
- (*rl_prep_term_function) (_rl_meta_flag);
+ if (rl_prep_term_function)
+ (*rl_prep_term_function) (_rl_meta_flag);
rl_set_signals ();
}
@@ -396,7 +460,7 @@ rl_free_line_state ()
_rl_kill_kbd_macro ();
rl_clear_message ();
- _rl_init_argument ();
+ _rl_reset_argument ();
}
#endif /* HANDLE_SIGNALS */
diff --git a/cmd-line-utils/readline/tcap.h b/cmd-line-utils/readline/tcap.h
index 58ab894d93e..04252e72f2d 100644
--- a/cmd-line-utils/readline/tcap.h
+++ b/cmd-line-utils/readline/tcap.h
@@ -25,7 +25,7 @@
#define _RLTCAP_H_
#if defined (HAVE_CONFIG_H)
-# include "config.h"
+# include "config_readline.h"
#endif
#if defined (HAVE_TERMCAP_H)
diff --git a/cmd-line-utils/readline/terminal.c b/cmd-line-utils/readline/terminal.c
index 4b900c5d860..a630bc02e05 100644
--- a/cmd-line-utils/readline/terminal.c
+++ b/cmd-line-utils/readline/terminal.c
@@ -1,6 +1,6 @@
/* terminal.c -- controlling the terminal with termcap. */
-/* Copyright (C) 1996 Free Software Foundation, Inc.
+/* Copyright (C) 1996-2006 Free Software Foundation, Inc.
This file is part of the GNU Readline Library, a library for
reading lines of text with interactive input and history editing.
@@ -21,7 +21,9 @@
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
#define READLINE_LIBRARY
-#include "config_readline.h"
+#if defined (HAVE_CONFIG_H)
+# include "config_readline.h"
+#endif
#include <sys/types.h>
#include "posixstat.h"
@@ -64,9 +66,25 @@
#include "rlshell.h"
#include "xmalloc.h"
+#if defined (__MINGW32__)
+# include <windows.h>
+# include <wincon.h>
+
+static void _win_get_screensize PARAMS((int *, int *));
+#endif
+
+#if defined (__EMX__)
+static void _emx_get_screensize PARAMS((int *, int *));
+#endif
+
#define CUSTOM_REDISPLAY_FUNC() (rl_redisplay_function != rl_redisplay)
#define CUSTOM_INPUT_FUNC() (rl_getc_function != rl_getc)
+/* If the calling application sets this to a non-zero value, readline will
+ use the $LINES and $COLUMNS environment variables to set its idea of the
+ window size before interrogating the kernel. */
+int rl_prefer_env_winsize = 0;
+
/* **************************************************************** */
/* */
/* Terminal and Termcap */
@@ -107,9 +125,7 @@ char *_rl_term_IC;
char *_rl_term_dc;
char *_rl_term_DC;
-#if defined (HACK_TERMCAP_MOTION)
char *_rl_term_forward_char;
-#endif /* HACK_TERMCAP_MOTION */
/* How to go up a line. */
char *_rl_term_up;
@@ -118,7 +134,7 @@ char *_rl_term_up;
static char *_rl_visible_bell;
/* Non-zero means the terminal can auto-wrap lines. */
-int _rl_term_autowrap;
+int _rl_term_autowrap = -1;
/* Non-zero means that this terminal has a meta key. */
static int term_has_meta;
@@ -143,6 +159,9 @@ static char *_rl_term_kh;
static char *_rl_term_kH;
static char *_rl_term_at7; /* @7 */
+/* Delete key */
+static char *_rl_term_kD;
+
/* Insert key */
static char *_rl_term_kI;
@@ -177,6 +196,26 @@ _emx_get_screensize (swp, shp)
}
#endif
+#if defined (__MINGW32__)
+static void
+_win_get_screensize (swp, shp)
+ int *swp, *shp;
+{
+ HANDLE hConOut;
+ CONSOLE_SCREEN_BUFFER_INFO scr;
+
+ hConOut = GetStdHandle (STD_OUTPUT_HANDLE);
+ if (hConOut != INVALID_HANDLE_VALUE)
+ {
+ if (GetConsoleScreenBufferInfo (hConOut, &scr))
+ {
+ *swp = scr.dwSize.X;
+ *shp = scr.srWindow.Bottom - scr.srWindow.Top + 1;
+ }
+ }
+}
+#endif
+
/* Get readline's idea of the screen size. TTY is a file descriptor open
to the terminal. If IGNORE_ENV is true, we do not pay attention to the
values of $LINES and $COLUMNS. The tests for TERM_STRING_BUFFER being
@@ -189,26 +228,42 @@ _rl_get_screen_size (tty, ignore_env)
#if defined (TIOCGWINSZ)
struct winsize window_size;
#endif /* TIOCGWINSZ */
+ int wr, wc;
+ wr = wc = -1;
#if defined (TIOCGWINSZ)
if (ioctl (tty, TIOCGWINSZ, &window_size) == 0)
{
- _rl_screenwidth = (int) window_size.ws_col;
- _rl_screenheight = (int) window_size.ws_row;
+ wc = (int) window_size.ws_col;
+ wr = (int) window_size.ws_row;
}
#endif /* TIOCGWINSZ */
#if defined (__EMX__)
- _emx_get_screensize (&_rl_screenwidth, &_rl_screenheight);
+ _emx_get_screensize (&wc, &wr);
+#elif defined (__MINGW32__)
+ _win_get_screensize (&wc, &wr);
#endif
+ if (ignore_env || rl_prefer_env_winsize == 0)
+ {
+ _rl_screenwidth = wc;
+ _rl_screenheight = wr;
+ }
+ else
+ _rl_screenwidth = _rl_screenheight = -1;
+
/* Environment variable COLUMNS overrides setting of "co" if IGNORE_ENV
- is unset. */
+ is unset. If we prefer the environment, check it first before
+ assigning the value returned by the kernel. */
if (_rl_screenwidth <= 0)
{
if (ignore_env == 0 && (ss = sh_get_env_value ("COLUMNS")))
_rl_screenwidth = atoi (ss);
+ if (_rl_screenwidth <= 0)
+ _rl_screenwidth = wc;
+
#if !defined (__DJGPP__)
if (_rl_screenwidth <= 0 && term_string_buffer)
_rl_screenwidth = tgetnum ("co");
@@ -222,6 +277,9 @@ _rl_get_screen_size (tty, ignore_env)
if (ignore_env == 0 && (ss = sh_get_env_value ("LINES")))
_rl_screenheight = atoi (ss);
+ if (_rl_screenheight <= 0)
+ _rl_screenheight = wr;
+
#if !defined (__DJGPP__)
if (_rl_screenheight <= 0 && term_string_buffer)
_rl_screenheight = tgetnum ("li");
@@ -250,16 +308,20 @@ void
_rl_set_screen_size (rows, cols)
int rows, cols;
{
- if (rows == 0 || cols == 0)
- return;
-
- _rl_screenheight = rows;
- _rl_screenwidth = cols;
+ if (_rl_term_autowrap == -1)
+ _rl_init_terminal_io (rl_terminal_name);
- if (_rl_term_autowrap == 0)
- _rl_screenwidth--;
+ if (rows > 0)
+ _rl_screenheight = rows;
+ if (cols > 0)
+ {
+ _rl_screenwidth = cols;
+ if (_rl_term_autowrap == 0)
+ _rl_screenwidth--;
+ }
- _rl_screenchars = _rl_screenwidth * _rl_screenheight;
+ if (rows > 0 || cols > 0)
+ _rl_screenchars = _rl_screenwidth * _rl_screenheight;
}
void
@@ -278,6 +340,12 @@ rl_get_screen_size (rows, cols)
if (cols)
*cols = _rl_screenwidth;
}
+
+void
+rl_reset_screen_size ()
+{
+ _rl_get_screen_size (fileno (rl_instream), 0);
+}
void
rl_resize_terminal ()
@@ -311,6 +379,7 @@ static struct _tc_string tc_strings[] =
{ "ei", &_rl_term_ei },
{ "ic", &_rl_term_ic },
{ "im", &_rl_term_im },
+ { "kD", &_rl_term_kD }, /* delete */
{ "kH", &_rl_term_kH }, /* home down ?? */
{ "kI", &_rl_term_kI }, /* insert */
{ "kd", &_rl_term_kd },
@@ -323,9 +392,7 @@ static struct _tc_string tc_strings[] =
{ "le", &_rl_term_backspace },
{ "mm", &_rl_term_mm },
{ "mo", &_rl_term_mo },
-#if defined (HACK_TERMCAP_MOTION)
{ "nd", &_rl_term_forward_char },
-#endif
{ "pc", &_rl_term_pc },
{ "up", &_rl_term_up },
{ "vb", &_rl_visible_bell },
@@ -344,7 +411,7 @@ get_term_capabilities (bp)
#if !defined (__DJGPP__) /* XXX - doesn't DJGPP have a termcap library? */
register int i;
- for (i = 0; i < (int) NUM_TC_STRINGS; i++)
+ for (i = 0; i < NUM_TC_STRINGS; i++)
*(tc_strings[i].tc_value) = tgetstr ((char *)tc_strings[i].tc_var, bp);
#endif
tcap_initialized = 1;
@@ -361,7 +428,6 @@ _rl_init_terminal_io (terminal_name)
term = terminal_name ? terminal_name : sh_get_env_value ("TERM");
_rl_term_clrpag = _rl_term_cr = _rl_term_clreol = (char *)NULL;
tty = rl_instream ? fileno (rl_instream) : 0;
- _rl_screenwidth = _rl_screenheight = 0;
if (term == 0)
term = "dumb";
@@ -394,12 +460,17 @@ _rl_init_terminal_io (terminal_name)
_rl_term_autowrap = 0; /* used by _rl_get_screen_size */
+ /* Allow calling application to set default height and width, using
+ rl_set_screen_size */
+ if (_rl_screenwidth <= 0 || _rl_screenheight <= 0)
+ {
#if defined (__EMX__)
- _emx_get_screensize (&_rl_screenwidth, &_rl_screenheight);
- _rl_screenwidth--;
+ _emx_get_screensize (&_rl_screenwidth, &_rl_screenheight);
+ _rl_screenwidth--;
#else /* !__EMX__ */
- _rl_get_screen_size (tty, 0);
+ _rl_get_screen_size (tty, 0);
#endif /* !__EMX__ */
+ }
/* Defaults. */
if (_rl_screenwidth <= 0 || _rl_screenheight <= 0)
@@ -410,24 +481,22 @@ _rl_init_terminal_io (terminal_name)
/* Everything below here is used by the redisplay code (tputs). */
_rl_screenchars = _rl_screenwidth * _rl_screenheight;
- _rl_term_cr = (char*) "\r";
+ _rl_term_cr = "\r";
_rl_term_im = _rl_term_ei = _rl_term_ic = _rl_term_IC = (char *)NULL;
_rl_term_up = _rl_term_dc = _rl_term_DC = _rl_visible_bell = (char *)NULL;
_rl_term_ku = _rl_term_kd = _rl_term_kl = _rl_term_kr = (char *)NULL;
- _rl_term_kh = _rl_term_kH = _rl_term_kI = (char *)NULL;
+ _rl_term_kh = _rl_term_kH = _rl_term_kI = _rl_term_kD = (char *)NULL;
_rl_term_ks = _rl_term_ke = _rl_term_at7 = (char *)NULL;
_rl_term_mm = _rl_term_mo = (char *)NULL;
_rl_term_ve = _rl_term_vs = (char *)NULL;
-#if defined (HACK_TERMCAP_MOTION)
- term_forward_char = (char *)NULL;
-#endif
+ _rl_term_forward_char = (char *)NULL;
_rl_terminal_can_insert = term_has_meta = 0;
/* Reasonable defaults for tgoto(). Readline currently only uses
tgoto if _rl_term_IC or _rl_term_DC is defined, but just in case we
change that later... */
PC = '\0';
- BC = _rl_term_backspace = (char*) "\b";
+ BC = _rl_term_backspace = "\b";
UP = _rl_term_up;
return 0;
@@ -442,11 +511,14 @@ _rl_init_terminal_io (terminal_name)
UP = _rl_term_up;
if (!_rl_term_cr)
- _rl_term_cr = (char*) "\r";
+ _rl_term_cr = "\r";
_rl_term_autowrap = tgetflag ("am") && tgetflag ("xn");
- _rl_get_screen_size (tty, 0);
+ /* Allow calling application to set default height and width, using
+ rl_set_screen_size */
+ if (_rl_screenwidth <= 0 || _rl_screenheight <= 0)
+ _rl_get_screen_size (tty, 0);
/* "An application program can assume that the terminal can do
character insertion if *any one of* the capabilities `IC',
@@ -491,6 +563,8 @@ bind_termcap_arrow_keys (map)
rl_bind_keyseq_if_unbound (_rl_term_kh, rl_beg_of_line); /* Home */
rl_bind_keyseq_if_unbound (_rl_term_at7, rl_end_of_line); /* End */
+ rl_bind_keyseq_if_unbound (_rl_term_kD, rl_delete);
+
_rl_keymap = xkeymap;
}
@@ -502,7 +576,7 @@ rl_get_termcap (cap)
if (tcap_initialized == 0)
return ((char *)NULL);
- for (i = 0; i < (int) NUM_TC_STRINGS; i++)
+ for (i = 0; i < NUM_TC_STRINGS; i++)
{
if (tc_strings[i].tc_var[0] == cap[0] && strcmp (tc_strings[i].tc_var, cap) == 0)
return *(tc_strings[i].tc_value);
@@ -516,6 +590,7 @@ int
rl_reset_terminal (terminal_name)
const char *terminal_name;
{
+ _rl_screenwidth = _rl_screenheight = 0;
_rl_init_terminal_io (terminal_name);
return 0;
}
diff --git a/cmd-line-utils/readline/text.c b/cmd-line-utils/readline/text.c
index cf9223df844..b26afeda525 100644
--- a/cmd-line-utils/readline/text.c
+++ b/cmd-line-utils/readline/text.c
@@ -1,6 +1,6 @@
/* text.c -- text handling commands for readline. */
-/* Copyright (C) 1987-2004 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
This file is part of the GNU Readline Library, a library for
reading lines of text with interactive input and history editing.
@@ -21,7 +21,9 @@
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
#define READLINE_LIBRARY
-#include "config_readline.h"
+#if defined (HAVE_CONFIG_H)
+# include "config_readline.h"
+#endif
#if defined (HAVE_UNISTD_H)
# include <unistd.h>
@@ -60,6 +62,11 @@
static int rl_change_case PARAMS((int, int));
static int _rl_char_search PARAMS((int, int, int));
+#if defined (READLINE_CALLBACKS)
+static int _rl_insert_next_callback PARAMS((_rl_callback_generic_arg *));
+static int _rl_char_search_callback PARAMS((_rl_callback_generic_arg *));
+#endif
+
/* **************************************************************** */
/* */
/* Insert and Delete */
@@ -402,7 +409,8 @@ rl_backward (count, key)
/* Move to the beginning of the line. */
int
-rl_beg_of_line (int count __attribute__((unused)), int key __attribute__((unused)))
+rl_beg_of_line (count, key)
+ int count, key;
{
rl_point = 0;
return 0;
@@ -410,14 +418,14 @@ rl_beg_of_line (int count __attribute__((unused)), int key __attribute__((unused
/* Move to the end of the line. */
int
-rl_end_of_line (int count __attribute__((unused)), int key __attribute__((unused)))
+rl_end_of_line (count, key)
+ int count, key;
{
rl_point = rl_end;
return 0;
}
-/* XXX - these might need changes for multibyte characters */
-/* Move forward a word. We do what Emacs does. */
+/* Move forward a word. We do what Emacs does. Handles multibyte chars. */
int
rl_forward_word (count, key)
int count, key;
@@ -434,68 +442,80 @@ rl_forward_word (count, key)
/* If we are not in a word, move forward until we are in one.
Then, move forward until we hit a non-alphabetic character. */
- c = rl_line_buffer[rl_point];
- if (rl_alphabetic (c) == 0)
+ c = _rl_char_value (rl_line_buffer, rl_point);
+
+ if (_rl_walphabetic (c) == 0)
{
- while (++rl_point < rl_end)
+ rl_point = MB_NEXTCHAR (rl_line_buffer, rl_point, 1, MB_FIND_NONZERO);
+ while (rl_point < rl_end)
{
- c = rl_line_buffer[rl_point];
- if (rl_alphabetic (c))
+ c = _rl_char_value (rl_line_buffer, rl_point);
+ if (_rl_walphabetic (c))
break;
+ rl_point = MB_NEXTCHAR (rl_line_buffer, rl_point, 1, MB_FIND_NONZERO);
}
}
if (rl_point == rl_end)
return 0;
- while (++rl_point < rl_end)
+ rl_point = MB_NEXTCHAR (rl_line_buffer, rl_point, 1, MB_FIND_NONZERO);
+ while (rl_point < rl_end)
{
- c = rl_line_buffer[rl_point];
- if (rl_alphabetic (c) == 0)
+ c = _rl_char_value (rl_line_buffer, rl_point);
+ if (_rl_walphabetic (c) == 0)
break;
+ rl_point = MB_NEXTCHAR (rl_line_buffer, rl_point, 1, MB_FIND_NONZERO);
}
+
--count;
}
return 0;
}
-/* Move backward a word. We do what Emacs does. */
+/* Move backward a word. We do what Emacs does. Handles multibyte chars. */
int
rl_backward_word (count, key)
int count, key;
{
- int c;
+ int c, p;
if (count < 0)
return (rl_forward_word (-count, key));
while (count)
{
- if (!rl_point)
+ if (rl_point == 0)
return 0;
/* Like rl_forward_word (), except that we look at the characters
just before point. */
- c = rl_line_buffer[rl_point - 1];
- if (rl_alphabetic (c) == 0)
+ p = MB_PREVCHAR (rl_line_buffer, rl_point, MB_FIND_NONZERO);
+ c = _rl_char_value (rl_line_buffer, p);
+
+ if (_rl_walphabetic (c) == 0)
{
- while (--rl_point)
+ rl_point = p;
+ while (rl_point > 0)
{
- c = rl_line_buffer[rl_point - 1];
- if (rl_alphabetic (c))
+ p = MB_PREVCHAR (rl_line_buffer, rl_point, MB_FIND_NONZERO);
+ c = _rl_char_value (rl_line_buffer, p);
+ if (_rl_walphabetic (c))
break;
+ rl_point = p;
}
}
while (rl_point)
{
- c = rl_line_buffer[rl_point - 1];
- if (rl_alphabetic (c) == 0)
+ p = MB_PREVCHAR (rl_line_buffer, rl_point, MB_FIND_NONZERO);
+ c = _rl_char_value (rl_line_buffer, p);
+ if (_rl_walphabetic (c) == 0)
break;
else
- --rl_point;
+ rl_point = p;
}
--count;
@@ -506,7 +526,8 @@ rl_backward_word (count, key)
/* Clear the current line. Numeric argument to C-l does this. */
int
-rl_refresh_line (int count __attribute__((unused)), int key __attribute__((unused)))
+rl_refresh_line (ignore1, ignore2)
+ int ignore1, ignore2;
{
int curr_line;
@@ -544,7 +565,8 @@ rl_clear_screen (count, key)
}
int
-rl_arrow_keys (int count, int c __attribute__((unused)))
+rl_arrow_keys (count, c)
+ int count, c;
{
int ch;
@@ -592,7 +614,7 @@ rl_arrow_keys (int count, int c __attribute__((unused)))
#ifdef HANDLE_MULTIBYTE
static char pending_bytes[MB_LEN_MAX];
static int pending_bytes_length = 0;
-static mbstate_t ps;
+static mbstate_t ps = {0};
#endif
/* Insert the character C at the current location, moving point forward.
@@ -750,10 +772,8 @@ _rl_insert_char (count, c)
return 0;
}
-#if defined (HANDLE_MULTIBYTE)
if (MB_CUR_MAX == 1 || rl_byte_oriented)
{
-#endif
/* We are inserting a single character.
If there is pending input, then make a string of all of the
pending characters that are bound to rl_insert, and insert
@@ -769,8 +789,8 @@ _rl_insert_char (count, c)
str[0] = c;
rl_insert_text (str);
}
-#if defined (HANDLE_MULTIBYTE)
}
+#if defined (HANDLE_MULTIBYTE)
else
{
rl_insert_text (incoming);
@@ -827,29 +847,67 @@ rl_insert (count, c)
}
/* Insert the next typed character verbatim. */
-int
-rl_quoted_insert (int count, int key __attribute__((unused)))
+static int
+_rl_insert_next (count)
+ int count;
{
int c;
-#if defined (HANDLE_SIGNALS)
- _rl_disable_tty_signals ();
-#endif
-
RL_SETSTATE(RL_STATE_MOREINPUT);
c = rl_read_key ();
RL_UNSETSTATE(RL_STATE_MOREINPUT);
#if defined (HANDLE_SIGNALS)
- _rl_restore_tty_signals ();
+ if (RL_ISSTATE (RL_STATE_CALLBACK) == 0)
+ _rl_restore_tty_signals ();
#endif
return (_rl_insert_char (count, c));
}
+#if defined (READLINE_CALLBACKS)
+static int
+_rl_insert_next_callback (data)
+ _rl_callback_generic_arg *data;
+{
+ int count;
+
+ count = data->count;
+
+ /* Deregister function, let rl_callback_read_char deallocate data */
+ _rl_callback_func = 0;
+ _rl_want_redisplay = 1;
+
+ return _rl_insert_next (count);
+}
+#endif
+
+int
+rl_quoted_insert (count, key)
+ int count, key;
+{
+ /* Let's see...should the callback interface futz with signal handling? */
+#if defined (HANDLE_SIGNALS)
+ if (RL_ISSTATE (RL_STATE_CALLBACK) == 0)
+ _rl_disable_tty_signals ();
+#endif
+
+#if defined (READLINE_CALLBACKS)
+ if (RL_ISSTATE (RL_STATE_CALLBACK))
+ {
+ _rl_callback_data = _rl_callback_data_alloc (count);
+ _rl_callback_func = _rl_insert_next_callback;
+ return (0);
+ }
+#endif
+
+ return _rl_insert_next (count);
+}
+
/* Insert a tab character. */
int
-rl_tab_insert (int count, int key __attribute__((unused)))
+rl_tab_insert (count, key)
+ int count, key;
{
return (_rl_insert_char (count, '\t'));
}
@@ -858,7 +916,8 @@ rl_tab_insert (int count, int key __attribute__((unused)))
KEY is the key that invoked this command. I guess it could have
meaning in the future. */
int
-rl_newline (int count __attribute__((unused)), int key __attribute__((unused)))
+rl_newline (count, key)
+ int count, key;
{
rl_done = 1;
@@ -891,8 +950,8 @@ rl_newline (int count __attribute__((unused)), int key __attribute__((unused)))
is just a stub, you bind keys to it and the code in _rl_dispatch ()
is special cased. */
int
-rl_do_lowercase_version (int count __attribute__((unused)),
- int key __attribute__((unused)))
+rl_do_lowercase_version (ignore1, ignore2)
+ int ignore1, ignore2;
{
return 0;
}
@@ -979,43 +1038,17 @@ _rl_rubout_char (count, key)
return -1;
}
+ orig_point = rl_point;
if (count > 1 || rl_explicit_arg)
{
- orig_point = rl_point;
-#if defined (HANDLE_MULTIBYTE)
- if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
- rl_backward_char (count, key);
- else
-#endif
- rl_backward_byte (count, key);
+ rl_backward_char (count, key);
rl_kill_text (orig_point, rl_point);
}
- else
+ else if (MB_CUR_MAX == 1 || rl_byte_oriented)
{
-#if defined (HANDLE_MULTIBYTE)
- if (MB_CUR_MAX == 1 || rl_byte_oriented)
- {
-#endif
- c = rl_line_buffer[--rl_point];
- rl_delete_text (rl_point, rl_point + 1);
-#if defined (HANDLE_MULTIBYTE)
- }
- else
- {
- int orig_point2;
-
- orig_point2 = rl_point;
- rl_point = _rl_find_prev_mbchar (rl_line_buffer, rl_point, MB_FIND_NONZERO);
- c = rl_line_buffer[rl_point];
- rl_delete_text (rl_point, orig_point2);
- }
-#endif /* HANDLE_MULTIBYTE */
-
- /* I don't think that the hack for end of line is needed for
- multibyte chars. */
-#if defined (HANDLE_MULTIBYTE)
- if (MB_CUR_MAX == 1 || rl_byte_oriented)
-#endif
+ c = rl_line_buffer[--rl_point];
+ rl_delete_text (rl_point, orig_point);
+ /* The erase-at-end-of-line hack is of questionable merit now. */
if (rl_point == rl_end && ISPRINT (c) && _rl_last_c_pos)
{
int l;
@@ -1023,6 +1056,11 @@ _rl_rubout_char (count, key)
_rl_erase_at_end_of_line (l);
}
}
+ else
+ {
+ rl_point = _rl_find_prev_mbchar (rl_line_buffer, rl_point, MB_FIND_NONZERO);
+ rl_delete_text (rl_point, orig_point);
+ }
return 0;
}
@@ -1033,7 +1071,7 @@ int
rl_delete (count, key)
int count, key;
{
- int r;
+ int xpoint;
if (count < 0)
return (_rl_rubout_char (-count, key));
@@ -1046,28 +1084,21 @@ rl_delete (count, key)
if (count > 1 || rl_explicit_arg)
{
- int orig_point = rl_point;
-#if defined (HANDLE_MULTIBYTE)
+ xpoint = rl_point;
if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
rl_forward_char (count, key);
else
-#endif
rl_forward_byte (count, key);
- r = rl_kill_text (orig_point, rl_point);
- rl_point = orig_point;
- return r;
+ rl_kill_text (xpoint, rl_point);
+ rl_point = xpoint;
}
else
{
- int new_point;
- if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
- new_point = _rl_find_next_mbchar (rl_line_buffer, rl_point, 1, MB_FIND_NONZERO);
- else
- new_point = rl_point + 1;
-
- return (rl_delete_text (rl_point, new_point));
+ xpoint = MB_NEXTCHAR (rl_line_buffer, rl_point, 1, MB_FIND_NONZERO);
+ rl_delete_text (rl_point, xpoint);
}
+ return 0;
}
/* Delete the character under the cursor, unless the insertion
@@ -1086,8 +1117,8 @@ rl_rubout_or_delete (count, key)
/* Delete all spaces and tabs around point. */
int
-rl_delete_horizontal_space (int count __attribute__((unused)),
- int key __attribute__((unused)))
+rl_delete_horizontal_space (count, ignore)
+ int count, ignore;
{
int start = rl_point;
@@ -1104,6 +1135,10 @@ rl_delete_horizontal_space (int count __attribute__((unused)),
rl_delete_text (start, rl_point);
rl_point = start;
}
+
+ if (rl_point < 0)
+ rl_point = 0;
+
return 0;
}
@@ -1127,13 +1162,14 @@ rl_delete_or_show_completions (count, key)
/* Turn the current line into a comment in shell history.
A K*rn shell style function. */
int
-rl_insert_comment (int count __attribute__((unused)), int key)
+rl_insert_comment (count, key)
+ int count, key;
{
char *rl_comment_text;
int rl_comment_len;
rl_beg_of_line (1, key);
- rl_comment_text = _rl_comment_begin ? _rl_comment_begin : (char*) RL_COMMENT_BEGIN_DEFAULT;
+ rl_comment_text = _rl_comment_begin ? _rl_comment_begin : RL_COMMENT_BEGIN_DEFAULT;
if (rl_explicit_arg == 0)
rl_insert_text (rl_comment_text);
@@ -1165,21 +1201,24 @@ rl_insert_comment (int count __attribute__((unused)), int key)
/* Uppercase the word at point. */
int
-rl_upcase_word (int count, int key __attribute__((unused)))
+rl_upcase_word (count, key)
+ int count, key;
{
return (rl_change_case (count, UpCase));
}
/* Lowercase the word at point. */
int
-rl_downcase_word (int count, int key __attribute__((unused)))
+rl_downcase_word (count, key)
+ int count, key;
{
return (rl_change_case (count, DownCase));
}
/* Upcase the first letter, downcase the rest. */
int
-rl_capitalize_word (int count, int key __attribute__((unused)))
+rl_capitalize_word (count, key)
+ int count, key;
{
return (rl_change_case (count, CapCase));
}
@@ -1193,42 +1232,80 @@ static int
rl_change_case (count, op)
int count, op;
{
- register int start, end;
- int inword, c;
+ int start, next, end;
+ int inword, c, nc, nop;
+#if defined (HANDLE_MULTIBYTE)
+ wchar_t wc, nwc;
+ char mb[MB_LEN_MAX+1];
+ int mlen;
+ mbstate_t mps;
+#endif
start = rl_point;
rl_forward_word (count, 0);
end = rl_point;
+ if (op != UpCase && op != DownCase && op != CapCase)
+ {
+ rl_ding ();
+ return -1;
+ }
+
if (count < 0)
SWAP (start, end);
+#if defined (HANDLE_MULTIBYTE)
+ memset (&mps, 0, sizeof (mbstate_t));
+#endif
+
/* We are going to modify some text, so let's prepare to undo it. */
rl_modifying (start, end);
- for (inword = 0; start < end; start++)
+ inword = 0;
+ while (start < end)
{
- c = rl_line_buffer[start];
- switch (op)
- {
- case UpCase:
- rl_line_buffer[start] = _rl_to_upper (c);
- break;
+ c = _rl_char_value (rl_line_buffer, start);
+ /* This assumes that the upper and lower case versions are the same width. */
+ next = MB_NEXTCHAR (rl_line_buffer, start, 1, MB_FIND_NONZERO);
- case DownCase:
- rl_line_buffer[start] = _rl_to_lower (c);
- break;
-
- case CapCase:
- rl_line_buffer[start] = (inword == 0) ? _rl_to_upper (c) : _rl_to_lower (c);
- inword = rl_alphabetic (rl_line_buffer[start]);
- break;
+ if (_rl_walphabetic (c) == 0)
+ {
+ inword = 0;
+ start = next;
+ continue;
+ }
- default:
- rl_ding ();
- return -1;
+ if (op == CapCase)
+ {
+ nop = inword ? DownCase : UpCase;
+ inword = 1;
+ }
+ else
+ nop = op;
+ if (MB_CUR_MAX == 1 || rl_byte_oriented || isascii (c))
+ {
+ nc = (nop == UpCase) ? _rl_to_upper (c) : _rl_to_lower (c);
+ rl_line_buffer[start] = nc;
+ }
+#if defined (HANDLE_MULTIBYTE)
+ else
+ {
+ mbrtowc (&wc, rl_line_buffer + start, end - start, &mps);
+ nwc = (nop == UpCase) ? _rl_to_wupper (wc) : _rl_to_wlower (wc);
+ if (nwc != wc) /* just skip unchanged characters */
+ {
+ mlen = wcrtomb (mb, nwc, &mps);
+ if (mlen > 0)
+ mb[mlen] = '\0';
+ /* Assume the same width */
+ strncpy (rl_line_buffer + start, mb, mlen);
+ }
}
+#endif
+
+ start = next;
}
+
rl_point = end;
return 0;
}
@@ -1303,15 +1380,16 @@ rl_transpose_words (count, key)
/* Transpose the characters at point. If point is at the end of the line,
then transpose the characters before point. */
int
-rl_transpose_chars (int count, int key __attribute__((unused)))
+rl_transpose_chars (count, key)
+ int count, key;
{
#if defined (HANDLE_MULTIBYTE)
char *dummy;
- int i, prev_point;
+ int i;
#else
char dummy[2];
#endif
- int char_length;
+ int char_length, prev_point;
if (count == 0)
return 0;
@@ -1326,20 +1404,12 @@ rl_transpose_chars (int count, int key __attribute__((unused)))
if (rl_point == rl_end)
{
- if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
- rl_point = _rl_find_prev_mbchar (rl_line_buffer, rl_point, MB_FIND_NONZERO);
- else
- --rl_point;
+ rl_point = MB_PREVCHAR (rl_line_buffer, rl_point, MB_FIND_NONZERO);
count = 1;
}
-#if defined (HANDLE_MULTIBYTE)
prev_point = rl_point;
- if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
- rl_point = _rl_find_prev_mbchar (rl_line_buffer, rl_point, MB_FIND_NONZERO);
- else
-#endif
- rl_point--;
+ rl_point = MB_PREVCHAR (rl_line_buffer, rl_point, MB_FIND_NONZERO);
#if defined (HANDLE_MULTIBYTE)
char_length = prev_point - rl_point;
@@ -1473,15 +1543,51 @@ _rl_char_search (count, fdir, bdir)
}
#endif /* !HANDLE_MULTIBYTE */
+#if defined (READLINE_CALLBACKS)
+static int
+_rl_char_search_callback (data)
+ _rl_callback_generic_arg *data;
+{
+ _rl_callback_func = 0;
+ _rl_want_redisplay = 1;
+
+ return (_rl_char_search (data->count, data->i1, data->i2));
+}
+#endif
+
int
-rl_char_search (int count, int key __attribute__((unused)))
+rl_char_search (count, key)
+ int count, key;
{
+#if defined (READLINE_CALLBACKS)
+ if (RL_ISSTATE (RL_STATE_CALLBACK))
+ {
+ _rl_callback_data = _rl_callback_data_alloc (count);
+ _rl_callback_data->i1 = FFIND;
+ _rl_callback_data->i2 = BFIND;
+ _rl_callback_func = _rl_char_search_callback;
+ return (0);
+ }
+#endif
+
return (_rl_char_search (count, FFIND, BFIND));
}
int
-rl_backward_char_search (int count, int key __attribute__((unused)))
+rl_backward_char_search (count, key)
+ int count, key;
{
+#if defined (READLINE_CALLBACKS)
+ if (RL_ISSTATE (RL_STATE_CALLBACK))
+ {
+ _rl_callback_data = _rl_callback_data_alloc (count);
+ _rl_callback_data->i1 = BFIND;
+ _rl_callback_data->i2 = FFIND;
+ _rl_callback_func = _rl_char_search_callback;
+ return (0);
+ }
+#endif
+
return (_rl_char_search (count, BFIND, FFIND));
}
@@ -1505,15 +1611,16 @@ _rl_set_mark_at_pos (position)
/* A bindable command to set the mark. */
int
-rl_set_mark (int count, int key __attribute__((unused)))
+rl_set_mark (count, key)
+ int count, key;
{
return (_rl_set_mark_at_pos (rl_explicit_arg ? count : rl_point));
}
/* Exchange the position of mark and point. */
int
-rl_exchange_point_and_mark (int count __attribute__((unused)),
- int key __attribute__((unused)))
+rl_exchange_point_and_mark (count, key)
+ int count, key;
{
if (rl_mark > rl_end)
rl_mark = -1;
diff --git a/cmd-line-utils/readline/tilde.c b/cmd-line-utils/readline/tilde.c
index 91eead0d9e2..d50f7a0ffa4 100644
--- a/cmd-line-utils/readline/tilde.c
+++ b/cmd-line-utils/readline/tilde.c
@@ -19,9 +19,9 @@
along with Readline; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
-#define READLINE_LIBRARY
-
-#include "config_readline.h"
+#if defined (HAVE_CONFIG_H)
+# include "config_readline.h"
+#endif
#if defined (HAVE_UNISTD_H)
# ifdef _MINIX
@@ -43,7 +43,9 @@
#endif /* HAVE_STDLIB_H */
#include <sys/types.h>
+#if defined (HAVE_PWD_H)
#include <pwd.h>
+#endif
#include "tilde.h"
@@ -54,8 +56,12 @@ static void *xmalloc (), *xrealloc ();
#endif /* TEST || STATIC_MALLOC */
#if !defined (HAVE_GETPW_DECLS)
+# if defined (HAVE_GETPWUID)
extern struct passwd *getpwuid PARAMS((uid_t));
+# endif
+# if defined (HAVE_GETPWNAM)
extern struct passwd *getpwnam PARAMS((const char *));
+# endif
#endif /* !HAVE_GETPW_DECLS */
#if !defined (savestring)
@@ -190,7 +196,7 @@ tilde_expand (string)
int result_size, result_index;
result_index = result_size = 0;
- if ((result = strchr (string, '~')))
+ if (result = strchr (string, '~'))
result = (char *)xmalloc (result_size = (strlen (string) + 16));
else
result = (char *)xmalloc (result_size = (strlen (string) + 1));
@@ -277,6 +283,39 @@ isolate_tilde_prefix (fname, lenp)
return ret;
}
+#if 0
+/* Public function to scan a string (FNAME) beginning with a tilde and find
+ the portion of the string that should be passed to the tilde expansion
+ function. Right now, it just calls tilde_find_suffix and allocates new
+ memory, but it can be expanded to do different things later. */
+char *
+tilde_find_word (fname, flags, lenp)
+ const char *fname;
+ int flags, *lenp;
+{
+ int x;
+ char *r;
+
+ x = tilde_find_suffix (fname);
+ if (x == 0)
+ {
+ r = savestring (fname);
+ if (lenp)
+ *lenp = 0;
+ }
+ else
+ {
+ r = (char *)xmalloc (1 + x);
+ strncpy (r, fname, x);
+ r[x] = '\0';
+ if (lenp)
+ *lenp = x;
+ }
+
+ return r;
+}
+#endif
+
/* Return a string that is PREFIX concatenated with SUFFIX starting at
SUFFIND. */
static char *
@@ -347,7 +386,11 @@ tilde_expand_word (filename)
/* No preexpansion hook, or the preexpansion hook failed. Look in the
password database. */
dirname = (char *)NULL;
+#if defined (HAVE_GETPWNAM)
user_entry = getpwnam (username);
+#else
+ user_entry = 0;
+#endif
if (user_entry == 0)
{
/* If the calling program has a special syntax for expanding tildes,
@@ -361,19 +404,20 @@ tilde_expand_word (filename)
free (expansion);
}
}
- free (username);
/* If we don't have a failure hook, or if the failure hook did not
expand the tilde, return a copy of what we were passed. */
if (dirname == 0)
dirname = savestring (filename);
}
+#if defined (HAVE_GETPWENT)
else
- {
- free (username);
- dirname = glue_prefix_and_suffix (user_entry->pw_dir, filename, user_len);
- }
+ dirname = glue_prefix_and_suffix (user_entry->pw_dir, filename, user_len);
+#endif
+ free (username);
+#if defined (HAVE_GETPWENT)
endpwent ();
+#endif
return (dirname);
}
diff --git a/cmd-line-utils/readline/tilde.h b/cmd-line-utils/readline/tilde.h
index f8182c999d9..c58ce20e7a2 100644
--- a/cmd-line-utils/readline/tilde.h
+++ b/cmd-line-utils/readline/tilde.h
@@ -71,6 +71,9 @@ extern char *tilde_expand PARAMS((const char *));
tilde. If there is no expansion, call tilde_expansion_failure_hook. */
extern char *tilde_expand_word PARAMS((const char *));
+/* Find the portion of the string beginning with ~ that should be expanded. */
+extern char *tilde_find_word PARAMS((const char *, int, int *));
+
#ifdef __cplusplus
}
#endif
diff --git a/cmd-line-utils/readline/undo.c b/cmd-line-utils/readline/undo.c
index 4d256f492b8..5699193b14c 100644
--- a/cmd-line-utils/readline/undo.c
+++ b/cmd-line-utils/readline/undo.c
@@ -1,7 +1,7 @@
/* readline.c -- a general facility for reading lines of input
with emacs style editing and completion. */
-/* Copyright (C) 1987, 1989, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1987, 1989, 1992, 2006 Free Software Foundation, Inc.
This file is part of the GNU Readline Library, a library for
reading lines of text with interactive input and history editing.
@@ -22,7 +22,9 @@
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
#define READLINE_LIBRARY
-#include "config_readline.h"
+#if defined (HAVE_CONFIG_H)
+# include "config_readline.h"
+#endif
#include <sys/types.h>
@@ -48,6 +50,8 @@
#include "rlprivate.h"
#include "xmalloc.h"
+extern void replace_history_data PARAMS((int, histdata_t *, histdata_t *));
+
/* Non-zero tells rl_delete_text and rl_insert_text to not add to
the undo list. */
int _rl_doing_an_undo = 0;
@@ -64,19 +68,35 @@ UNDO_LIST *rl_undo_list = (UNDO_LIST *)NULL;
/* */
/* **************************************************************** */
-/* Remember how to undo something. Concatenate some undos if that
- seems right. */
-void
-rl_add_undo (what, start, end, text)
+static UNDO_LIST *
+alloc_undo_entry (what, start, end, text)
enum undo_code what;
int start, end;
char *text;
{
- UNDO_LIST *temp = (UNDO_LIST *)xmalloc (sizeof (UNDO_LIST));
+ UNDO_LIST *temp;
+
+ temp = (UNDO_LIST *)xmalloc (sizeof (UNDO_LIST));
temp->what = what;
temp->start = start;
temp->end = end;
temp->text = text;
+
+ temp->next = (UNDO_LIST *)NULL;
+ return temp;
+}
+
+/* Remember how to undo something. Concatenate some undos if that
+ seems right. */
+void
+rl_add_undo (what, start, end, text)
+ enum undo_code what;
+ int start, end;
+ char *text;
+{
+ UNDO_LIST *temp;
+
+ temp = alloc_undo_entry (what, start, end, text);
temp->next = rl_undo_list;
rl_undo_list = temp;
}
@@ -85,9 +105,12 @@ rl_add_undo (what, start, end, text)
void
rl_free_undo_list ()
{
+ UNDO_LIST *release, *orig_list;
+
+ orig_list = rl_undo_list;
while (rl_undo_list)
{
- UNDO_LIST *release = rl_undo_list;
+ release = rl_undo_list;
rl_undo_list = rl_undo_list->next;
if (release->what == UNDO_DELETE)
@@ -96,6 +119,43 @@ rl_free_undo_list ()
free (release);
}
rl_undo_list = (UNDO_LIST *)NULL;
+ replace_history_data (-1, (histdata_t *)orig_list, (histdata_t *)NULL);
+}
+
+UNDO_LIST *
+_rl_copy_undo_entry (entry)
+ UNDO_LIST *entry;
+{
+ UNDO_LIST *new;
+
+ new = alloc_undo_entry (entry->what, entry->start, entry->end, (char *)NULL);
+ new->text = entry->text ? savestring (entry->text) : 0;
+ return new;
+}
+
+UNDO_LIST *
+_rl_copy_undo_list (head)
+ UNDO_LIST *head;
+{
+ UNDO_LIST *list, *new, *roving, *c;
+
+ list = head;
+ new = 0;
+ while (list)
+ {
+ c = _rl_copy_undo_entry (list);
+ if (new == 0)
+ roving = new = c;
+ else
+ {
+ roving->next = c;
+ roving = roving->next;
+ }
+ list = list->next;
+ }
+
+ roving->next = 0;
+ return new;
}
/* Undo the next thing in the list. Return 0 if there
@@ -159,6 +219,8 @@ rl_do_undo ()
release = rl_undo_list;
rl_undo_list = rl_undo_list->next;
+ replace_history_data (-1, (histdata_t *)release, (histdata_t *)rl_undo_list);
+
free (release);
}
while (waiting_for_begin);
@@ -175,7 +237,7 @@ _rl_fix_last_undo_of_type (type, start, end)
for (rl = rl_undo_list; rl; rl = rl->next)
{
- if (rl->what == (unsigned int) type)
+ if (rl->what == type)
{
rl->start = start;
rl->end = end;
@@ -226,7 +288,8 @@ rl_modifying (start, end)
/* Revert the current line to its previous state. */
int
-rl_revert_line (int count __attribute__((unused)), int key __attribute__((unused)))
+rl_revert_line (count, key)
+ int count, key;
{
if (!rl_undo_list)
rl_ding ();
@@ -234,13 +297,19 @@ rl_revert_line (int count __attribute__((unused)), int key __attribute__((unuse
{
while (rl_undo_list)
rl_do_undo ();
+#if defined (VI_MODE)
+ if (rl_editing_mode == vi_mode)
+ rl_point = rl_mark = 0; /* rl_end should be set correctly */
+#endif
}
+
return 0;
}
/* Do some undoing of things that were done. */
int
-rl_undo_command (int count, int key __attribute__((unused)))
+rl_undo_command (count, key)
+ int count, key;
{
if (count < 0)
return 0; /* Nothing to do. */
diff --git a/cmd-line-utils/readline/util.c b/cmd-line-utils/readline/util.c
index d5fe51a7bf2..935c9c927c2 100644
--- a/cmd-line-utils/readline/util.c
+++ b/cmd-line-utils/readline/util.c
@@ -1,6 +1,6 @@
/* util.c -- readline utility functions */
-/* Copyright (C) 1987, 1989, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
This file is part of the GNU Readline Library, a library for
reading lines of text with interactive input and history editing.
@@ -21,7 +21,9 @@
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
#define READLINE_LIBRARY
-#include "config_readline.h"
+#if defined (HAVE_CONFIG_H)
+# include "config_readline.h"
+#endif
#include <sys/types.h>
#include <fcntl.h>
@@ -42,6 +44,7 @@
/* System-specific feature definitions and include files. */
#include "rldefs.h"
+#include "rlmbutil.h"
#if defined (TIOCSTAT_IN_SYS_IOCTL)
# include <sys/ioctl.h>
@@ -76,13 +79,29 @@ rl_alphabetic (c)
strchr (pathname_alphabetic_chars, c) != NULL);
}
+#if defined (HANDLE_MULTIBYTE)
+int
+_rl_walphabetic (wc)
+ wchar_t wc;
+{
+ int c;
+
+ if (iswalnum (wc))
+ return (1);
+
+ c = wc & 0177;
+ return (_rl_allow_pathname_alphabetic_chars &&
+ strchr (pathname_alphabetic_chars, c) != NULL);
+}
+#endif
+
/* How to abort things. */
int
_rl_abort_internal ()
{
rl_ding ();
rl_clear_message ();
- _rl_init_argument ();
+ _rl_reset_argument ();
rl_clear_pending_input ();
RL_UNSETSTATE (RL_STATE_MACRODEF);
@@ -95,13 +114,15 @@ _rl_abort_internal ()
}
int
-rl_abort (int count __attribute__((unused)), int key __attribute__((unused)))
+rl_abort (count, key)
+ int count, key;
{
return (_rl_abort_internal ());
}
int
-rl_tty_status (int count __attribute__((unused)), int key __attribute__((unused)))
+rl_tty_status (count, key)
+ int count, key;
{
#if defined (TIOCSTAT)
ioctl (1, TIOCSTAT, (char *)0);
@@ -150,7 +171,8 @@ rl_extend_line_buffer (len)
/* A function for simple tilde expansion. */
int
-rl_tilde_expand (int ignore __attribute__((unused)), int key __attribute__((unused)))
+rl_tilde_expand (ignore, key)
+ int ignore, key;
{
register int start, end;
char *homedir, *temp;
diff --git a/cmd-line-utils/readline/vi_keymap.c b/cmd-line-utils/readline/vi_keymap.c
index 53a67c674ce..4b48c75cc5d 100644
--- a/cmd-line-utils/readline/vi_keymap.c
+++ b/cmd-line-utils/readline/vi_keymap.c
@@ -130,7 +130,7 @@ KEYMAP_ENTRY_ARRAY vi_movement_keymap = {
{ ISFUNC, rl_revert_line }, /* U */
{ ISFUNC, (rl_command_func_t *)0x0 }, /* V */
{ ISFUNC, rl_vi_next_word }, /* W */
- { ISFUNC, rl_rubout }, /* X */
+ { ISFUNC, rl_vi_rubout }, /* X */
{ ISFUNC, rl_vi_yank_to }, /* Y */
{ ISFUNC, (rl_command_func_t *)0x0 }, /* Z */
diff --git a/cmd-line-utils/readline/vi_mode.c b/cmd-line-utils/readline/vi_mode.c
index a277fe2c237..25213cb762f 100644
--- a/cmd-line-utils/readline/vi_mode.c
+++ b/cmd-line-utils/readline/vi_mode.c
@@ -1,7 +1,7 @@
/* vi_mode.c -- A vi emulation mode for Bash.
Derived from code written by Jeff Sparkes (jsparkes@bnr.ca). */
-/* Copyright (C) 1987-2004 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
This file is part of the GNU Readline Library, a library for
reading lines of text with interactive input and history editing.
@@ -31,7 +31,9 @@
#if defined (VI_MODE)
-#include "config_readline.h"
+#if defined (HAVE_CONFIG_H)
+# include "config_readline.h"
+#endif
#include <sys/types.h>
@@ -88,6 +90,7 @@ static int _rl_vi_last_arg_sign = 1;
static int _rl_vi_last_motion;
#if defined (HANDLE_MULTIBYTE)
static char _rl_vi_last_search_mbchar[MB_LEN_MAX];
+static int _rl_vi_last_search_mblen;
#else
static int _rl_vi_last_search_char;
#endif
@@ -105,15 +108,35 @@ static int vi_mark_chars['z' - 'a' + 1];
static void _rl_vi_stuff_insert PARAMS((int));
static void _rl_vi_save_insert PARAMS((UNDO_LIST *));
+
+static void _rl_vi_backup PARAMS((void));
+
+static int _rl_vi_arg_dispatch PARAMS((int));
static int rl_digit_loop1 PARAMS((void));
+static int _rl_vi_set_mark PARAMS((void));
+static int _rl_vi_goto_mark PARAMS((void));
+
+static void _rl_vi_append_forward PARAMS((int));
+
+static int _rl_vi_callback_getchar PARAMS((char *, int));
+
+#if defined (READLINE_CALLBACKS)
+static int _rl_vi_callback_set_mark PARAMS((_rl_callback_generic_arg *));
+static int _rl_vi_callback_goto_mark PARAMS((_rl_callback_generic_arg *));
+static int _rl_vi_callback_change_char PARAMS((_rl_callback_generic_arg *));
+static int _rl_vi_callback_char_search PARAMS((_rl_callback_generic_arg *));
+#endif
+
void
_rl_vi_initialize_line ()
{
register int i;
- for (i = 0; i < (int) (sizeof (vi_mark_chars) / sizeof (int)); i++)
+ for (i = 0; i < sizeof (vi_mark_chars) / sizeof (int); i++)
vi_mark_chars[i] = -1;
+
+ RL_UNSETSTATE(RL_STATE_VICMDONCE);
}
void
@@ -166,7 +189,8 @@ _rl_vi_stuff_insert (count)
redo a text modification command. The default for _rl_vi_last_command
puts you back into insert mode. */
int
-rl_vi_redo (int count, int c __attribute__((unused)))
+rl_vi_redo (count, c)
+ int count, c;
{
int r;
@@ -185,7 +209,16 @@ rl_vi_redo (int count, int c __attribute__((unused)))
_rl_vi_stuff_insert (count);
/* And back up point over the last character inserted. */
if (rl_point > 0)
- rl_point--;
+ _rl_vi_backup ();
+ }
+ /* Ditto for redoing an insert with `a', but move forward a character first
+ like the `a' command does. */
+ else if (_rl_vi_last_command == 'a' && vi_insert_buffer && *vi_insert_buffer)
+ {
+ _rl_vi_append_forward ('a');
+ _rl_vi_stuff_insert (count);
+ if (rl_point > 0)
+ _rl_vi_backup ();
}
else
r = _rl_dispatch (_rl_vi_last_command, _rl_keymap);
@@ -204,7 +237,8 @@ rl_vi_undo (count, key)
/* Yank the nth arg from the previous line into this line at point. */
int
-rl_vi_yank_arg (int count, int key __attribute__((unused)))
+rl_vi_yank_arg (count, key)
+ int count, key;
{
/* Readline thinks that the first word on a line is the 0th, while vi
thinks the first word on a line is the 1st. Compensate. */
@@ -268,10 +302,12 @@ rl_vi_search (count, key)
switch (key)
{
case '?':
+ _rl_free_saved_history_line ();
rl_noninc_forward_search (count, key);
break;
case '/':
+ _rl_free_saved_history_line ();
rl_noninc_reverse_search (count, key);
break;
@@ -284,7 +320,8 @@ rl_vi_search (count, key)
/* Completion, from vi's point of view. */
int
-rl_vi_complete (int ignore __attribute__((unused)), int key)
+rl_vi_complete (ignore, key)
+ int ignore, key;
{
if ((rl_point < rl_end) && (!whitespace (rl_line_buffer[rl_point])))
{
@@ -310,7 +347,8 @@ rl_vi_complete (int ignore __attribute__((unused)), int key)
/* Tilde expansion for vi mode. */
int
-rl_vi_tilde_expand (int ignore __attribute__((unused)), int key)
+rl_vi_tilde_expand (ignore, key)
+ int ignore, key;
{
rl_tilde_expand (0, key);
rl_vi_start_inserting (key, 1, rl_arg_sign);
@@ -380,7 +418,8 @@ rl_vi_end_word (count, key)
/* Move forward a word the way that 'W' does. */
int
-rl_vi_fWord (int count, int ignore __attribute__((unused)))
+rl_vi_fWord (count, ignore)
+ int count, ignore;
{
while (count-- && rl_point < (rl_end - 1))
{
@@ -396,7 +435,8 @@ rl_vi_fWord (int count, int ignore __attribute__((unused)))
}
int
-rl_vi_bWord (int count, int ignore __attribute__((unused)))
+rl_vi_bWord (count, ignore)
+ int count, ignore;
{
while (count-- && rl_point > 0)
{
@@ -419,7 +459,8 @@ rl_vi_bWord (int count, int ignore __attribute__((unused)))
}
int
-rl_vi_eWord(int count, int ignore __attribute__((unused)))
+rl_vi_eWord (count, ignore)
+ int count, ignore;
{
while (count-- && rl_point < (rl_end - 1))
{
@@ -449,7 +490,8 @@ rl_vi_eWord(int count, int ignore __attribute__((unused)))
}
int
-rl_vi_fword (int count, int ignore __attribute__((unused)))
+rl_vi_fword (count, ignore)
+ int count, ignore;
{
while (count-- && rl_point < (rl_end - 1))
{
@@ -474,7 +516,8 @@ rl_vi_fword (int count, int ignore __attribute__((unused)))
}
int
-rl_vi_bword (int count, int ignore __attribute__((unused)))
+rl_vi_bword (count, ignore)
+ int count, ignore;
{
while (count-- && rl_point > 0)
{
@@ -512,7 +555,8 @@ rl_vi_bword (int count, int ignore __attribute__((unused)))
}
int
-rl_vi_eword (int count, int ignore __attribute__((unused)))
+rl_vi_eword (count, ignore)
+ int count, ignore;
{
while (count-- && rl_point < rl_end - 1)
{
@@ -536,34 +580,46 @@ rl_vi_eword (int count, int ignore __attribute__((unused)))
}
int
-rl_vi_insert_beg (int count __attribute__((unused)), int key)
+rl_vi_insert_beg (count, key)
+ int count, key;
{
rl_beg_of_line (1, key);
rl_vi_insertion_mode (1, key);
return (0);
}
-int
-rl_vi_append_mode (int count __attribute__((unused)), int key)
+static void
+_rl_vi_append_forward (key)
+ int key;
{
+ int point;
+
if (rl_point < rl_end)
{
if (MB_CUR_MAX == 1 || rl_byte_oriented)
rl_point++;
else
{
- int point = rl_point;
+ point = rl_point;
rl_forward_char (1, key);
if (point == rl_point)
rl_point = rl_end;
}
}
- rl_vi_insertion_mode (1, key);
+}
+
+int
+rl_vi_append_mode (count, key)
+ int count, key;
+{
+ _rl_vi_append_forward (key);
+ rl_vi_start_inserting (key, 1, rl_arg_sign);
return (0);
}
int
-rl_vi_append_eol (int count __attribute__((unused)), int key)
+rl_vi_append_eol (count, key)
+ int count, key;
{
rl_end_of_line (1, key);
rl_vi_append_mode (1, key);
@@ -572,7 +628,8 @@ rl_vi_append_eol (int count __attribute__((unused)), int key)
/* What to do in the case of C-d. */
int
-rl_vi_eof_maybe (int count __attribute__((unused)), int c __attribute__((unused)))
+rl_vi_eof_maybe (count, c)
+ int count, c;
{
return (rl_newline (1, '\n'));
}
@@ -582,7 +639,8 @@ rl_vi_eof_maybe (int count __attribute__((unused)), int c __attribute__((unused)
/* Switching from one mode to the other really just involves
switching keymaps. */
int
-rl_vi_insertion_mode (int count __attribute__((unused)), int key)
+rl_vi_insertion_mode (count, key)
+ int count, key;
{
_rl_keymap = vi_insertion_keymap;
_rl_vi_last_key_before_insert = key;
@@ -595,7 +653,7 @@ _rl_vi_save_insert (up)
{
int len, start, end;
- if (up == 0)
+ if (up == 0 || up->what != UNDO_INSERT)
{
if (vi_insert_buffer_size >= 1)
vi_insert_buffer[0] = '\0';
@@ -644,13 +702,21 @@ _rl_vi_done_inserting ()
}
int
-rl_vi_movement_mode (int count __attribute__((unused)), int key)
+rl_vi_movement_mode (count, key)
+ int count, key;
{
if (rl_point > 0)
rl_backward_char (1, key);
_rl_keymap = vi_movement_keymap;
_rl_vi_done_inserting ();
+
+ /* This is how POSIX.2 says `U' should behave -- everything up until the
+ first time you go into command mode should not be undone. */
+ if (RL_ISSTATE (RL_STATE_VICMDONCE) == 0)
+ rl_free_undo_list ();
+
+ RL_SETSTATE (RL_STATE_VICMDONCE);
return (0);
}
@@ -672,7 +738,7 @@ _rl_vi_change_mbchar_case (count)
{
wchar_t wc;
char mb[MB_LEN_MAX+1];
- int local_mblen;
+ int mlen, p;
mbstate_t ps;
memset (&ps, 0, sizeof (mbstate_t));
@@ -695,11 +761,14 @@ _rl_vi_change_mbchar_case (count)
/* Vi is kind of strange here. */
if (wc)
{
- local_mblen = wcrtomb (mb, wc, &ps);
- if (local_mblen >= 0)
- mb[local_mblen] = '\0';
+ p = rl_point;
+ mlen = wcrtomb (mb, wc, &ps);
+ if (mlen >= 0)
+ mb[mlen] = '\0';
rl_begin_undo_group ();
- rl_delete (1, 0);
+ rl_vi_delete (1, 0);
+ if (rl_point < p) /* Did we retreat at EOL? */
+ rl_point++; /* XXX - should we advance more than 1 for mbchar? */
rl_insert_text (mb);
rl_end_undo_group ();
rl_vi_check ();
@@ -713,7 +782,8 @@ _rl_vi_change_mbchar_case (count)
#endif
int
-rl_vi_change_case (int count, int ignore __attribute__((unused)))
+rl_vi_change_case (count, ignore)
+ int count, ignore;
{
int c, p;
@@ -772,6 +842,15 @@ rl_vi_put (count, key)
return (0);
}
+static void
+_rl_vi_backup ()
+{
+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ rl_point = _rl_find_prev_mbchar (rl_line_buffer, rl_point, MB_FIND_NONZERO);
+ else
+ rl_point--;
+}
+
int
rl_vi_check ()
{
@@ -816,7 +895,9 @@ rl_vi_domove (key, nextkey)
save = rl_numeric_arg;
rl_numeric_arg = _rl_digit_value (c);
rl_explicit_arg = 1;
+ RL_SETSTATE (RL_STATE_NUMERICARG|RL_STATE_VIMOTION);
rl_digit_loop1 ();
+ RL_UNSETSTATE (RL_STATE_VIMOTION);
rl_numeric_arg *= save;
RL_SETSTATE(RL_STATE_MOREINPUT);
c = rl_read_key (); /* real command */
@@ -889,52 +970,59 @@ rl_vi_domove (key, nextkey)
return (0);
}
+/* Process C as part of the current numeric argument. Return -1 if the
+ argument should be aborted, 0 if we should not read any more chars, and
+ 1 if we should continue to read chars. */
+static int
+_rl_vi_arg_dispatch (c)
+ int c;
+{
+ int key;
+
+ key = c;
+ if (c >= 0 && _rl_keymap[c].type == ISFUNC && _rl_keymap[c].function == rl_universal_argument)
+ {
+ rl_numeric_arg *= 4;
+ return 1;
+ }
+
+ c = UNMETA (c);
+
+ if (_rl_digit_p (c))
+ {
+ if (rl_explicit_arg)
+ rl_numeric_arg = (rl_numeric_arg * 10) + _rl_digit_value (c);
+ else
+ rl_numeric_arg = _rl_digit_value (c);
+ rl_explicit_arg = 1;
+ return 1;
+ }
+ else
+ {
+ rl_clear_message ();
+ rl_stuff_char (key);
+ return 0;
+ }
+}
+
/* A simplified loop for vi. Don't dispatch key at end.
Don't recognize minus sign?
Should this do rl_save_prompt/rl_restore_prompt? */
static int
rl_digit_loop1 ()
{
- int key, c;
+ int c, r;
- RL_SETSTATE(RL_STATE_NUMERICARG);
while (1)
{
- if (rl_numeric_arg > 1000000)
- {
- rl_explicit_arg = rl_numeric_arg = 0;
- rl_ding ();
- rl_clear_message ();
- RL_UNSETSTATE(RL_STATE_NUMERICARG);
- return 1;
- }
- rl_message ("(arg: %d) ", rl_arg_sign * rl_numeric_arg);
- RL_SETSTATE(RL_STATE_MOREINPUT);
- key = c = rl_read_key ();
- RL_UNSETSTATE(RL_STATE_MOREINPUT);
+ if (_rl_arg_overflow ())
+ return 1;
- if (c >= 0 && _rl_keymap[c].type == ISFUNC &&
- _rl_keymap[c].function == rl_universal_argument)
- {
- rl_numeric_arg *= 4;
- continue;
- }
+ c = _rl_arg_getchar ();
- c = UNMETA (c);
- if (_rl_digit_p (c))
- {
- if (rl_explicit_arg)
- rl_numeric_arg = (rl_numeric_arg * 10) + _rl_digit_value (c);
- else
- rl_numeric_arg = _rl_digit_value (c);
- rl_explicit_arg = 1;
- }
- else
- {
- rl_clear_message ();
- rl_stuff_char (key);
- break;
- }
+ r = _rl_vi_arg_dispatch (c);
+ if (r <= 0)
+ break;
}
RL_UNSETSTATE(RL_STATE_NUMERICARG);
@@ -942,7 +1030,8 @@ rl_digit_loop1 ()
}
int
-rl_vi_delete_to (int count __attribute__((unused)), int key)
+rl_vi_delete_to (count, key)
+ int count, key;
{
int c;
@@ -967,7 +1056,8 @@ rl_vi_delete_to (int count __attribute__((unused)), int key)
}
int
-rl_vi_change_to (int count __attribute__((unused)), int key)
+rl_vi_change_to (count, key)
+ int count, key;
{
int c, start_pos;
@@ -1019,10 +1109,12 @@ rl_vi_change_to (int count __attribute__((unused)), int key)
}
int
-rl_vi_yank_to (int count __attribute__((unused)), int key)
+rl_vi_yank_to (count, key)
+ int count, key;
{
- int c, save = rl_point;
+ int c, save;
+ save = rl_point;
if (_rl_uppercase_p (key))
rl_stuff_char ('$');
@@ -1047,11 +1139,45 @@ rl_vi_yank_to (int count __attribute__((unused)), int key)
}
int
+rl_vi_rubout (count, key)
+ int count, key;
+{
+ int opoint;
+
+ if (count < 0)
+ return (rl_vi_delete (-count, key));
+
+ if (rl_point == 0)
+ {
+ rl_ding ();
+ return -1;
+ }
+
+ opoint = rl_point;
+ if (count > 1 && MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ rl_backward_char (count, key);
+ else if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ rl_point = _rl_find_prev_mbchar (rl_line_buffer, rl_point, MB_FIND_NONZERO);
+ else
+ rl_point -= count;
+
+ if (rl_point < 0)
+ rl_point = 0;
+
+ rl_kill_text (rl_point, opoint);
+
+ return (0);
+}
+
+int
rl_vi_delete (count, key)
int count, key;
{
int end;
+ if (count < 0)
+ return (rl_vi_rubout (-count, key));
+
if (rl_end == 0)
{
rl_ding ();
@@ -1070,11 +1196,13 @@ rl_vi_delete (count, key)
if (rl_point > 0 && rl_point == rl_end)
rl_backward_char (1, key);
+
return (0);
}
int
-rl_vi_back_to_indent (int count __attribute__((unused)), int key)
+rl_vi_back_to_indent (count, key)
+ int count, key;
{
rl_beg_of_line (1, key);
while (rl_point < rl_end && whitespace (rl_line_buffer[rl_point]))
@@ -1083,75 +1211,115 @@ rl_vi_back_to_indent (int count __attribute__((unused)), int key)
}
int
-rl_vi_first_print (int count __attribute__((unused)), int key)
+rl_vi_first_print (count, key)
+ int count, key;
{
return (rl_vi_back_to_indent (1, key));
}
+static int _rl_cs_dir, _rl_cs_orig_dir;
+
+#if defined (READLINE_CALLBACKS)
+static int
+_rl_vi_callback_char_search (data)
+ _rl_callback_generic_arg *data;
+{
+#if defined (HANDLE_MULTIBYTE)
+ _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX);
+#else
+ RL_SETSTATE(RL_STATE_MOREINPUT);
+ _rl_vi_last_search_char = rl_read_key ();
+ RL_UNSETSTATE(RL_STATE_MOREINPUT);
+#endif
+
+ _rl_callback_func = 0;
+ _rl_want_redisplay = 1;
+
+#if defined (HANDLE_MULTIBYTE)
+ return (_rl_char_search_internal (data->count, _rl_cs_dir, _rl_vi_last_search_mbchar, _rl_vi_last_search_mblen));
+#else
+ return (_rl_char_search_internal (data->count, _rl_cs_dir, _rl_vi_last_search_char));
+#endif
+}
+#endif
+
int
rl_vi_char_search (count, key)
int count, key;
{
#if defined (HANDLE_MULTIBYTE)
static char *target;
- static int mb_len;
+ static int tlen;
#else
static char target;
#endif
- static int orig_dir, dir;
if (key == ';' || key == ',')
- dir = key == ';' ? orig_dir : -orig_dir;
+ _rl_cs_dir = (key == ';') ? _rl_cs_orig_dir : -_rl_cs_orig_dir;
else
{
- if (vi_redoing)
-#if defined (HANDLE_MULTIBYTE)
- target = _rl_vi_last_search_mbchar;
-#else
- target = _rl_vi_last_search_char;
-#endif
- else
- {
-#if defined (HANDLE_MULTIBYTE)
- mb_len = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX);
- target = _rl_vi_last_search_mbchar;
-#else
- RL_SETSTATE(RL_STATE_MOREINPUT);
- _rl_vi_last_search_char = target = rl_read_key ();
- RL_UNSETSTATE(RL_STATE_MOREINPUT);
-#endif
- }
-
switch (key)
{
case 't':
- orig_dir = dir = FTO;
+ _rl_cs_orig_dir = _rl_cs_dir = FTO;
break;
case 'T':
- orig_dir = dir = BTO;
+ _rl_cs_orig_dir = _rl_cs_dir = BTO;
break;
case 'f':
- orig_dir = dir = FFIND;
+ _rl_cs_orig_dir = _rl_cs_dir = FFIND;
break;
case 'F':
- orig_dir = dir = BFIND;
+ _rl_cs_orig_dir = _rl_cs_dir = BFIND;
break;
}
+
+ if (vi_redoing)
+ {
+ /* set target and tlen below */
+ }
+#if defined (READLINE_CALLBACKS)
+ else if (RL_ISSTATE (RL_STATE_CALLBACK))
+ {
+ _rl_callback_data = _rl_callback_data_alloc (count);
+ _rl_callback_data->i1 = _rl_cs_dir;
+ _rl_callback_func = _rl_vi_callback_char_search;
+ return (0);
+ }
+#endif
+ else
+ {
+#if defined (HANDLE_MULTIBYTE)
+ _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX);
+#else
+ RL_SETSTATE(RL_STATE_MOREINPUT);
+ _rl_vi_last_search_char = rl_read_key ();
+ RL_UNSETSTATE(RL_STATE_MOREINPUT);
+#endif
+ }
}
#if defined (HANDLE_MULTIBYTE)
- return (_rl_char_search_internal (count, dir, target, mb_len));
+ target = _rl_vi_last_search_mbchar;
+ tlen = _rl_vi_last_search_mblen;
+#else
+ target = _rl_vi_last_search_char;
+#endif
+
+#if defined (HANDLE_MULTIBYTE)
+ return (_rl_char_search_internal (count, _rl_cs_dir, target, tlen));
#else
- return (_rl_char_search_internal (count, dir, target));
+ return (_rl_char_search_internal (count, _rl_cs_dir, target));
#endif
}
/* Match brackets */
int
-rl_vi_match (int ignore __attribute__((unused)), int key)
+rl_vi_match (ignore, key)
+ int ignore, key;
{
int count = 1, brack, pos, tmp, pre;
@@ -1255,24 +1423,12 @@ rl_vi_bracktype (c)
}
}
-/* XXX - think about reading an entire mbchar with _rl_read_mbchar and
- inserting it in one bunch instead of the loop below (like in
- rl_vi_char_search or _rl_vi_change_mbchar_case). Set c to mbchar[0]
- for test against 033 or ^C. Make sure that _rl_read_mbchar does
- this right. */
-int
-rl_vi_change_char (int count, int key __attribute__((unused)))
+static int
+_rl_vi_change_char (count, c, mb)
+ int count, c;
+ char *mb;
{
- int c, p;
-
- if (vi_redoing)
- c = _rl_vi_last_replacement;
- else
- {
- RL_SETSTATE(RL_STATE_MOREINPUT);
- _rl_vi_last_replacement = c = rl_read_key ();
- RL_UNSETSTATE(RL_STATE_MOREINPUT);
- }
+ int p;
if (c == '\033' || c == CTRL ('C'))
return -1;
@@ -1282,27 +1438,87 @@ rl_vi_change_char (int count, int key __attribute__((unused)))
{
p = rl_point;
rl_vi_delete (1, c);
+ if (rl_point < p) /* Did we retreat at EOL? */
+ rl_point++;
#if defined (HANDLE_MULTIBYTE)
if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
- while (_rl_insert_char (1, c))
- {
- RL_SETSTATE (RL_STATE_MOREINPUT);
- c = rl_read_key ();
- RL_UNSETSTATE (RL_STATE_MOREINPUT);
- }
+ rl_insert_text (mb);
else
#endif
- {
- if (rl_point < p) /* Did we retreat at EOL? */
- rl_point++;
- _rl_insert_char (1, c);
- }
+ _rl_insert_char (1, c);
}
+
+ /* The cursor shall be left on the last character changed. */
+ rl_backward_char (1, c);
+
rl_end_undo_group ();
return (0);
}
+static int
+_rl_vi_callback_getchar (mb, mlen)
+ char *mb;
+ int mlen;
+{
+ int c;
+
+ RL_SETSTATE(RL_STATE_MOREINPUT);
+ c = rl_read_key ();
+ RL_UNSETSTATE(RL_STATE_MOREINPUT);
+
+#if defined (HANDLE_MULTIBYTE)
+ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ c = _rl_read_mbstring (c, mb, mlen);
+#endif
+
+ return c;
+}
+
+#if defined (READLINE_CALLBACKS)
+static int
+_rl_vi_callback_change_char (data)
+ _rl_callback_generic_arg *data;
+{
+ int c;
+ char mb[MB_LEN_MAX];
+
+ _rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX);
+
+ _rl_callback_func = 0;
+ _rl_want_redisplay = 1;
+
+ return (_rl_vi_change_char (data->count, c, mb));
+}
+#endif
+
+int
+rl_vi_change_char (count, key)
+ int count, key;
+{
+ int c;
+ char mb[MB_LEN_MAX];
+
+ if (vi_redoing)
+ {
+ c = _rl_vi_last_replacement;
+ mb[0] = c;
+ mb[1] = '\0';
+ }
+#if defined (READLINE_CALLBACKS)
+ else if (RL_ISSTATE (RL_STATE_CALLBACK))
+ {
+ _rl_callback_data = _rl_callback_data_alloc (count);
+ _rl_callback_func = _rl_vi_callback_change_char;
+ return (0);
+ }
+#endif
+ else
+ _rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX);
+
+ return (_rl_vi_change_char (count, c, mb));
+}
+
int
rl_vi_subst (count, key)
int count, key;
@@ -1365,7 +1581,8 @@ rl_vi_overstrike_delete (count, key)
}
int
-rl_vi_replace (int count __attribute__((unused)), int key __attribute__((unused)))
+rl_vi_replace (count, key)
+ int count, key;
{
int i;
@@ -1424,8 +1641,8 @@ rl_vi_possible_completions()
#endif
/* Functions to save and restore marks. */
-int
-rl_vi_set_mark (int count __attribute__((unused)), int key __attribute__((unused)))
+static int
+_rl_vi_set_mark ()
{
int ch;
@@ -1443,8 +1660,36 @@ rl_vi_set_mark (int count __attribute__((unused)), int key __attribute__((unused
return 0;
}
+#if defined (READLINE_CALLBACKS)
+static int
+_rl_vi_callback_set_mark (data)
+ _rl_callback_generic_arg *data;
+{
+ _rl_callback_func = 0;
+ _rl_want_redisplay = 1;
+
+ return (_rl_vi_set_mark ());
+}
+#endif
+
int
-rl_vi_goto_mark (int count __attribute__((unused)), int key __attribute__((unused)))
+rl_vi_set_mark (count, key)
+ int count, key;
+{
+#if defined (READLINE_CALLBACKS)
+ if (RL_ISSTATE (RL_STATE_CALLBACK))
+ {
+ _rl_callback_data = 0;
+ _rl_callback_func = _rl_vi_callback_set_mark;
+ return (0);
+ }
+#endif
+
+ return (_rl_vi_set_mark ());
+}
+
+static int
+_rl_vi_goto_mark ()
{
int ch;
@@ -1473,4 +1718,31 @@ rl_vi_goto_mark (int count __attribute__((unused)), int key __attribute__((unuse
return 0;
}
+#if defined (READLINE_CALLBACKS)
+static int
+_rl_vi_callback_goto_mark (data)
+ _rl_callback_generic_arg *data;
+{
+ _rl_callback_func = 0;
+ _rl_want_redisplay = 1;
+
+ return (_rl_vi_goto_mark ());
+}
+#endif
+
+int
+rl_vi_goto_mark (count, key)
+ int count, key;
+{
+#if defined (READLINE_CALLBACKS)
+ if (RL_ISSTATE (RL_STATE_CALLBACK))
+ {
+ _rl_callback_data = 0;
+ _rl_callback_func = _rl_vi_callback_goto_mark;
+ return (0);
+ }
+#endif
+
+ return (_rl_vi_goto_mark ());
+}
#endif /* VI_MODE */
diff --git a/cmd-line-utils/readline/xmalloc.c b/cmd-line-utils/readline/xmalloc.c
index 497936d3b43..cf52da351a8 100644
--- a/cmd-line-utils/readline/xmalloc.c
+++ b/cmd-line-utils/readline/xmalloc.c
@@ -20,7 +20,9 @@
Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
#define READLINE_LIBRARY
+#if defined (HAVE_CONFIG_H)
#include "config_readline.h"
+#endif
#include <stdio.h>
@@ -39,7 +41,8 @@
/* **************************************************************** */
static void
-memory_error_and_abort(const char *fname)
+memory_error_and_abort (fname)
+ char *fname;
{
fprintf (stderr, "%s: out of virtual memory\n", fname);
exit (2);
@@ -56,7 +59,7 @@ xmalloc (bytes)
temp = malloc (bytes);
if (temp == 0)
- memory_error_and_abort("xmalloc");
+ memory_error_and_abort ("xmalloc");
return (temp);
}
@@ -70,7 +73,7 @@ xrealloc (pointer, bytes)
temp = pointer ? realloc (pointer, bytes) : malloc (bytes);
if (temp == 0)
- memory_error_and_abort("xrealloc");
+ memory_error_and_abort ("xrealloc");
return (temp);
}
diff --git a/config/ac-macros/plugins.m4 b/config/ac-macros/plugins.m4
index 48754563992..8dfb698709f 100644
--- a/config/ac-macros/plugins.m4
+++ b/config/ac-macros/plugins.m4
@@ -360,6 +360,17 @@ AC_DEFUN([__MYSQL_EMIT_CHECK_PLUGIN],[
AC_MSG_ERROR([cannot disable mandatory plugin])
fi
[mysql_plugin_]$2=yes
+ ],[
+ case "$with_mysqld_ldflags " in
+ *"-all-static "*)
+ # No need to build shared plugins when mysqld is linked with
+ # -all-static as it won't be able to load them.
+ if test "X[$mysql_plugin_]$2" != Xyes -a \
+ "X[$with_plugin_]$2" != Xyes; then
+ [with_plugin_]$2=no
+ fi
+ ;;
+ esac
])
if test "X[$with_plugin_]$2" = Xno; then
AC_MSG_RESULT([no])
diff --git a/configure.in b/configure.in
index 0fe2f1b5510..d8bd14180c2 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.23-beta)
+AM_INIT_AUTOMAKE(mysql, 5.1.24-rc)
AM_CONFIG_HEADER([include/config.h:config.h.in])
PROTOCOL_VERSION=10
@@ -20,6 +20,7 @@ SHARED_LIB_MAJOR_VERSION=16
SHARED_LIB_VERSION=$SHARED_LIB_MAJOR_VERSION:0:0
NDB_SHARED_LIB_MAJOR_VERSION=3
NDB_SHARED_LIB_VERSION=$NDB_SHARED_LIB_MAJOR_VERSION:0:0
+
# Set all version vars based on $VERSION. How do we do this more elegant ?
# Remember that regexps needs to quote [ and ] since this is run through m4
MYSQL_NO_DASH_VERSION=`echo $VERSION | sed -e "s|[[a-z]]*-.*$||"`
@@ -95,6 +96,8 @@ case $MACHINE_TYPE in
esac
# Save some variables and the command line options for mysqlbug
+SAVE_CC="$CC"
+SAVE_CXX="$CXX"
SAVE_ASFLAGS="$ASFLAGS"
SAVE_CFLAGS="$CFLAGS"
SAVE_CXXFLAGS="$CXXFLAGS"
@@ -102,6 +105,8 @@ SAVE_LDFLAGS="$LDFLAGS"
SAVE_CXXLDFLAGS="$CXXLDFLAGS"
CONF_COMMAND="$0 $ac_configure_args"
AC_SUBST(CONF_COMMAND)
+AC_SUBST(SAVE_CC)
+AC_SUBST(SAVE_CXX)
AC_SUBST(SAVE_ASFLAGS)
AC_SUBST(SAVE_CFLAGS)
AC_SUBST(SAVE_CXXFLAGS)
@@ -183,7 +188,7 @@ CC_VERSION=`$CC --version | sed 1q`
esac
if test $? -eq "0"
then
- AC_MSG_CHECKING("C Compiler version");
+ AC_MSG_CHECKING("C Compiler version")
AC_MSG_RESULT("$CC $CC_VERSION")
else
CC_VERSION=""
@@ -340,6 +345,7 @@ AC_SUBST(CC)
AC_SUBST(CFLAGS)
AC_SUBST(CXX)
AC_SUBST(CXXFLAGS)
+AC_SUBST(ASFLAGS)
AC_SUBST(LD)
AC_SUBST(INSTALL_SCRIPT)
@@ -589,7 +595,7 @@ AC_SUBST(NOINST_LDFLAGS)
if test "$TARGET_LINUX" = "true" -a "$static_nss" = ""
then
- tmp=`nm /usr/lib/libc.a | grep _nss_files_getaliasent_r`
+ tmp=`nm /usr/lib*/libc.a | grep _nss_files_getaliasent_r`
if test -n "$tmp"
then
STATIC_NSS_FLAGS="-lc -lnss_files -lnss_dns -lresolv"
@@ -598,6 +604,23 @@ then
fi
fi
+AC_MSG_CHECKING(whether features provided by the user community should be included.)
+AC_ARG_ENABLE(community-features,
+ AC_HELP_STRING(
+ [--enable-community-features],
+ [Enable additional features provided by the user community.]),
+ [ ENABLE_COMMUNITY_FEATURES=$enableval ],
+ [ ENABLE_COMMUNITY_FEATURES=no ]
+ )
+
+if test "$ENABLE_COMMUNITY_FEATURES" = "yes"
+then
+ AC_DEFINE([COMMUNITY_SERVER], [1],
+ [Whether features provided by the user community should be included])
+ AC_MSG_RESULT([yes, community server])
+else
+ AC_MSG_RESULT([no, enterprise server])
+fi
AC_ARG_WITH(server-suffix,
[ --with-server-suffix Append value to the version string.],
@@ -661,6 +684,27 @@ else
AC_MSG_RESULT([no])
fi
+# Add query profiler
+AC_MSG_CHECKING(if SHOW PROFILE should be enabled.)
+AC_ARG_ENABLE(profiling,
+ AS_HELP_STRING([--enable-profiling], [Build a version with query profiling code (req. community-features)]),
+ [ ENABLED_PROFILING=$enableval ],
+ [ ENABLED_PROFILING=$ENABLE_COMMUNITY_FEATURES ])
+
+if test "$ENABLED_PROFILING" = "yes"
+then
+ if test "$ENABLE_COMMUNITY_FEATURES" = "yes";
+ then
+ AC_DEFINE([ENABLED_PROFILING], [1],
+ [If SHOW PROFILE should be enabled])
+ AC_MSG_RESULT([yes])
+ else
+ ENABLED_PROFILING="no"
+ AC_MSG_RESULT([no, overridden by community-features disabled])
+ fi
+else
+ AC_MSG_RESULT([no])
+fi
# Use this to set the place used for unix socket used to local communication.
AC_ARG_WITH(unix-socket-path,
@@ -784,7 +828,6 @@ AC_CHECK_LIB(m, floor, [], AC_CHECK_LIB(m, __infinity))
AC_CHECK_LIB(nsl_r, gethostbyname_r, [],
AC_CHECK_LIB(nsl, gethostbyname_r))
AC_CHECK_FUNC(gethostbyname_r)
-AC_CHECK_LIB(mtmalloc, malloc)
AC_CHECK_FUNC(setsockopt, , AC_CHECK_LIB(socket, setsockopt))
AC_CHECK_FUNC(yp_get_default_domain, ,
@@ -794,6 +837,8 @@ AC_CHECK_FUNC(p2open, , AC_CHECK_LIB(gen, p2open))
AC_CHECK_FUNC(bind, , AC_CHECK_LIB(bind, bind))
# Check if crypt() exists in libc or libcrypt, sets LIBS if needed
AC_SEARCH_LIBS(crypt, crypt, AC_DEFINE(HAVE_CRYPT, 1, [crypt]))
+# See if we need a library for address lookup.
+AC_SEARCH_LIBS(inet_aton, [socket nsl resolv])
# For the sched_yield() function on Solaris
AC_CHECK_FUNC(sched_yield, , AC_CHECK_LIB(posix4, sched_yield))
@@ -1036,7 +1081,6 @@ case $SYSTEM_TYPE in
fi
;;
*darwin*)
- AC_DEFINE([DEFAULT_SKIP_THREAD_PRIORITY], [1], [default to skip thread priority])
if test "$ac_cv_prog_gcc" = "yes"
then
FLAGS="-D_P1003_1B_VISIBLE -DSIGNAL_WITH_VIO_CLOSE -DSIGNALS_DONT_BREAK_READ -DIGNORE_SIGHUP_SIGQUIT -DDONT_DECLARE_CXA_PURE_VIRTUAL"
@@ -1252,7 +1296,7 @@ See the Installation chapter in the Reference Manual for more information.])
AC_MSG_RESULT("no need to check headers")
fi
- AC_MSG_CHECKING("for pthread_create in -lpthread");
+ AC_MSG_CHECKING("for pthread_create in -lpthread")
ac_save_LIBS="$LIBS"
LIBS="$LIBS -lpthread"
AC_TRY_LINK( [#include <pthread.h>],
@@ -1312,7 +1356,7 @@ then
then
AC_MSG_RESULT("yes")
else
- AC_MSG_ERROR([On SCO UNIX MySQL must be compiled with gcc. See the Installation chapter in the Reference Manual.]);
+ AC_MSG_ERROR([On SCO UNIX MySQL must be compiled with gcc. See the Installation chapter in the Reference Manual.])
fi
AC_MSG_RESULT("yes")
elif test -f /usr/local/lib/libpthread.a -o -f /usr/local/lib/libpthread.so
@@ -1328,7 +1372,7 @@ then
then
AC_MSG_RESULT("yes")
else
- AC_MSG_ERROR([On SCO UNIX MySQL must be compiled with gcc. See the Installation chapter in the Reference Manual.]);
+ AC_MSG_ERROR([On SCO UNIX MySQL must be compiled with gcc. See the Installation chapter in the Reference Manual.])
fi
AC_MSG_RESULT("yes")
# Hack for SCO UnixWare 7.1.x
@@ -1473,7 +1517,7 @@ else
AC_MSG_RESULT("$with_posix_threads")
if test "$with_posix_threads" = "no"
then
- AC_MSG_CHECKING("for pthread_create in -lpthread");
+ AC_MSG_CHECKING("for pthread_create in -lpthread")
ac_save_LIBS="$LIBS"
LIBS="$LIBS -lpthread"
CLIENT_THREAD_LIBS="-lpthread"
@@ -1486,7 +1530,7 @@ else
then
LIBS=" $ac_save_LIBS -lpthreads"
CLIENT_THREAD_LIBS="-lpthreads"
- AC_MSG_CHECKING("for pthread_create in -lpthreads");
+ AC_MSG_CHECKING("for pthread_create in -lpthreads")
AC_TRY_LINK(
[#include <pthread.h>],
[ pthread_create((pthread_t*) 0,(pthread_attr_t*) 0, 0, 0); ],
@@ -1497,7 +1541,7 @@ else
# This is for FreeBSD
LIBS="$ac_save_LIBS -pthread"
CLIENT_THREAD_LIBS="-pthread"
- AC_MSG_CHECKING("for pthread_create in -pthread");
+ AC_MSG_CHECKING("for pthread_create in -pthread")
AC_TRY_LINK(
[#include <pthread.h>],
[ pthread_create((pthread_t*) 0,(pthread_attr_t*) 0, 0, 0); ],
@@ -1683,6 +1727,30 @@ case "$with_atomic_ops" in
*) AC_MSG_ERROR(["$with_atomic_ops" is not a valid value for --with-atomic-ops]) ;;
esac
+AC_CACHE_CHECK([whether the compiler provides atomic builtins],
+ [mysql_cv_gcc_atomic_builtins], [AC_TRY_RUN([
+ int main()
+ {
+ int foo= -10; int bar= 10;
+ if (!__sync_fetch_and_add(&foo, bar) || foo)
+ return -1;
+ bar= __sync_lock_test_and_set(&foo, bar);
+ if (bar || foo != 10)
+ return -1;
+ bar= __sync_val_compare_and_swap(&bar, foo, 15);
+ if (bar)
+ return -1;
+ return 0;
+ }
+], [mysql_cv_gcc_atomic_builtins=yes],
+ [mysql_cv_gcc_atomic_builtins=no],
+ [mysql_cv_gcc_atomic_builtins=no])])
+
+if test "x$mysql_cv_gcc_atomic_builtins" = xyes; then
+ AC_DEFINE(HAVE_GCC_ATOMIC_BUILTINS, 1,
+ [Define to 1 if compiler provides atomic builtins.])
+fi
+
# Force static compilation to avoid linking problems/get more speed
AC_ARG_WITH(mysqld-ldflags,
[ --with-mysqld-ldflags Extra linking arguments for mysqld],
@@ -1745,7 +1813,18 @@ then
LDFLAGS="$LDFLAGS -rdynamic"
AC_MSG_RESULT("-rdynamic")
else
- AC_MSG_RESULT("none")
+ case "$SYSTEM_TYPE$with_mysqld_ldflags " in
+ *freebsd*"-all-static "*|*dragonfly*"-all-static "*)
+ AC_MSG_RESULT("none")
+ ;;
+ *freebsd*|*dragonfly*)
+ MYSQLD_EXTRA_LDFLAGS="$MYSQLD_EXTRA_LDFLAGS -export-dynamic"
+ AC_MSG_RESULT("-export-dynamic")
+ ;;
+ *)
+ AC_MSG_RESULT("none")
+ ;;
+ esac
fi
dnl Checks for typedefs, structures, and compiler characteristics.
@@ -1836,7 +1915,7 @@ if test "$ac_cv_conv_longlong_to_float" != "yes"
then
AC_MSG_ERROR([Your compiler cannot convert a longlong value to a float!
If you are using gcc 2.8.# you should upgrade to egcs 1.0.3 or newer and try
-again]);
+again])
fi
fi
AC_CHECK_TYPES([sigset_t, off_t], [], [], [#include <sys/types.h>])
@@ -2000,7 +2079,7 @@ CFLAGS="$ORG_CFLAGS"
AC_CHECK_FUNC(fseeko,
[if test "$large_file_support" = no -a "$TARGET_LINUX" = "true";
then
- AC_MSG_ERROR("Found fseeko symbol but large_file_support is not enabled!");
+ AC_MSG_ERROR("Found fseeko symbol but large_file_support is not enabled!")
fi]
)
@@ -2363,10 +2442,15 @@ AC_ARG_WITH(docs,
if test "$with_docs" = "yes"
then
docs_dirs="Docs"
+ if test -f "$srcdir/Docs/manual.chm" ; then
+ extra_docs="manual.chm"
+ fi
else
docs_dirs=""
+ extra_docs=""
fi
AC_SUBST(docs_dirs)
+AC_SUBST(extra_docs)
# Shall we build the man pages?
AC_ARG_WITH(man,
@@ -2551,17 +2635,16 @@ server_scripts=
dnl This probably should be cleaned up more - for now the threaded
dnl client is just using plain-old libs.
-sql_client_dirs=
+sql_client_dirs="strings regex mysys libmysql"
AM_CONDITIONAL(THREAD_SAFE_CLIENT, test "$THREAD_SAFE_CLIENT" != "no")
-if test "$THREAD_SAFE_CLIENT" = "no"
+if test "$THREAD_SAFE_CLIENT" != "no"
then
- sql_client_dirs="strings regex mysys dbug extra libmysql client"
-else
- sql_client_dirs="strings regex mysys dbug extra libmysql libmysql_r client"
+ sql_client_dirs="$sql_client_dirs libmysql_r"
AC_DEFINE([THREAD_SAFE_CLIENT], [1], [Should the client be thread safe])
fi
+sql_client_dirs="$sql_client_dirs client"
CLIENT_LIBS="$NON_THREADED_LIBS $openssl_libs $ZLIB_LIBS $STATIC_NSS_FLAGS"
@@ -2580,17 +2663,13 @@ fi
AC_SUBST(netware_dir)
AM_CONDITIONAL(HAVE_NETWARE, test "$netware_dir" = "netware")
-if test "$with_server" != "no" -o "$THREAD_SAFE_CLIENT" != "no"
+if test "$with_server" = "yes" -o "$THREAD_SAFE_CLIENT" != "no"
then
AC_DEFINE([THREAD], [1],
[Define if you want to have threaded code. This may be undef on client code])
# Avoid _PROGRAMS names
THREAD_LOBJECTS="thr_alarm.o thr_lock.o thr_mutex.o thr_rwlock.o my_pthread.o my_thr_init.o mf_keycache.o"
AC_SUBST(THREAD_LOBJECTS)
-fi
-
-if test "$with_server" != "no"
-then
server_scripts="mysqld_safe mysql_install_db"
sql_server_dirs="strings mysys dbug extra regex"
diff --git a/dbug/dbug.c b/dbug/dbug.c
index 9d638c299d3..7f4292d18b1 100644
--- a/dbug/dbug.c
+++ b/dbug/dbug.c
@@ -1826,7 +1826,13 @@ static void DBUGOpenFile(CODE_STATE *cs,
else
{
newfile= !EXISTS(name);
- if (!(fp= fopen(name, append ? "a+" : "w")))
+ if (!(fp= fopen(name,
+#if defined(MSDOS) || defined(__WIN__)
+ append ? "a+c" : "wc"
+#else
+ append ? "a+" : "w"
+#endif
+ )))
{
(void) fprintf(stderr, ERR_OPEN, cs->process, name);
perror("");
@@ -2231,23 +2237,9 @@ static void dbug_flush(CODE_STATE *cs)
if (cs->stack->flags & FLUSH_ON_WRITE)
#endif
{
-#if defined(MSDOS) || defined(__WIN__)
- if (cs->stack->out_file != stdout && cs->stack->out_file != stderr)
- {
- if (!(freopen(cs->stack->name,"a",cs->stack->out_file)))
- {
- (void) fprintf(stderr, ERR_OPEN, cs->process, cs->stack->name);
- fflush(stderr);
- cs->stack->out_file= stderr;
- }
- }
- else
-#endif
- {
- (void) fflush(cs->stack->out_file);
- if (cs->stack->delay)
- (void) Delay(cs->stack->delay);
- }
+ (void) fflush(cs->stack->out_file);
+ if (cs->stack->delay)
+ (void) Delay(cs->stack->delay);
}
if (!cs->locked)
pthread_mutex_unlock(&THR_LOCK_dbug);
diff --git a/extra/CMakeLists.txt b/extra/CMakeLists.txt
index 42561a97888..cec0db6a4ae 100755
--- a/extra/CMakeLists.txt
+++ b/extra/CMakeLists.txt
@@ -44,6 +44,9 @@ TARGET_LINK_LIBRARIES(my_print_defaults strings mysys debug dbug taocrypt wsock3
ADD_EXECUTABLE(perror perror.c)
TARGET_LINK_LIBRARIES(perror strings mysys debug dbug wsock32)
+ADD_EXECUTABLE(resolveip resolveip.c)
+TARGET_LINK_LIBRARIES(resolveip strings mysys debug dbug wsock32)
+
ADD_EXECUTABLE(replace replace.c)
TARGET_LINK_LIBRARIES(replace strings mysys debug dbug wsock32)
diff --git a/extra/resolveip.c b/extra/resolveip.c
index b61c0871aaf..9f936fa60b4 100644
--- a/extra/resolveip.c
+++ b/extra/resolveip.c
@@ -21,13 +21,15 @@
#include <m_ctype.h>
#include <my_sys.h>
#include <m_string.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#ifndef HAVE_BROKEN_NETINET_INCLUDES
-#include <netinet/in.h>
+#ifndef WIN32
+# include <sys/types.h>
+# include <sys/socket.h>
+# ifndef HAVE_BROKEN_NETINET_INCLUDES
+# include <netinet/in.h>
+# endif
+# include <arpa/inet.h>
+# include <netdb.h>
#endif
-#include <arpa/inet.h>
-#include <netdb.h>
#include <my_net.h>
#include <my_getopt.h>
@@ -116,11 +118,13 @@ int main(int argc, char **argv)
while (argc--)
{
+ struct in_addr addr;
ip = *argv++;
- if (my_isdigit(&my_charset_latin1,ip[0]))
+ /* Not compatible with IPv6! Probably should use getnameinfo(). */
+ if (inet_aton(ip, &addr) != 0)
{
- taddr = inet_addr(ip);
+ taddr= addr.s_addr;
if (taddr == htonl(INADDR_BROADCAST))
{
puts("Broadcast");
diff --git a/extra/yassl/src/handshake.cpp b/extra/yassl/src/handshake.cpp
index 1d5a95820bb..262b5cb3b8b 100644
--- a/extra/yassl/src/handshake.cpp
+++ b/extra/yassl/src/handshake.cpp
@@ -527,6 +527,11 @@ void ProcessOldClientHello(input_buffer& input, SSL& ssl)
input.read(len, sizeof(len));
uint16 randomLen;
ato16(len, randomLen);
+ if (ch.suite_len_ > MAX_SUITE_SZ || sessionLen > ID_LEN ||
+ randomLen > RAN_LEN) {
+ ssl.SetError(bad_input);
+ return;
+ }
int j = 0;
for (uint16 i = 0; i < ch.suite_len_; i += 3) {
diff --git a/extra/yassl/src/template_instnt.cpp b/extra/yassl/src/template_instnt.cpp
index f82f7924359..fe3a251b865 100644
--- a/extra/yassl/src/template_instnt.cpp
+++ b/extra/yassl/src/template_instnt.cpp
@@ -101,6 +101,7 @@ template void ysArrayDelete<unsigned char>(unsigned char*);
template void ysArrayDelete<char>(char*);
template int min<int>(int, int);
+template uint16 min<uint16>(uint16, uint16);
template unsigned int min<unsigned int>(unsigned int, unsigned int);
template unsigned long min<unsigned long>(unsigned long, unsigned long);
}
diff --git a/extra/yassl/src/yassl_imp.cpp b/extra/yassl/src/yassl_imp.cpp
index 0bc95f64abc..b43d9c27355 100644
--- a/extra/yassl/src/yassl_imp.cpp
+++ b/extra/yassl/src/yassl_imp.cpp
@@ -621,6 +621,10 @@ void HandShakeHeader::Process(input_buffer& input, SSL& ssl)
}
uint len = c24to32(length_);
+ if (len > input.get_remaining()) {
+ ssl.SetError(bad_input);
+ return;
+ }
hashHandShake(ssl, input, len);
hs->set_length(len);
@@ -1391,10 +1395,15 @@ input_buffer& operator>>(input_buffer& input, ClientHello& hello)
// Suites
byte tmp[2];
+ uint16 len;
tmp[0] = input[AUTO];
tmp[1] = input[AUTO];
- ato16(tmp, hello.suite_len_);
+ ato16(tmp, len);
+
+ hello.suite_len_ = min(len, static_cast<uint16>(MAX_SUITE_SZ));
input.read(hello.cipher_suites_, hello.suite_len_);
+ if (len > hello.suite_len_) // ignore extra suites
+ input.set_current(input.get_current() + len - hello.suite_len_);
// Compression
hello.comp_len_ = input[AUTO];
diff --git a/include/Makefile.am b/include/Makefile.am
index 8335da36e93..5975a3e8bf0 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -36,7 +36,7 @@ noinst_HEADERS = config-win.h config-netware.h \
mysql_version.h.in my_handler.h my_time.h \
my_vle.h my_user.h my_atomic.h atomic/nolock.h \
atomic/rwlock.h atomic/x86-gcc.h atomic/x86-msvc.h \
- my_libwrap.h
+ atomic/gcc_builtins.h my_libwrap.h
# Remove built files and the symlinked directories
CLEANFILES = $(BUILT_SOURCES) readline openssl
diff --git a/include/atomic/gcc_builtins.h b/include/atomic/gcc_builtins.h
new file mode 100644
index 00000000000..509701b30a5
--- /dev/null
+++ b/include/atomic/gcc_builtins.h
@@ -0,0 +1,33 @@
+/* Copyright (C) 2008 MySQL AB
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; version 2 of the License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+#define make_atomic_add_body(S) \
+ v= __sync_fetch_and_add(a, v);
+#define make_atomic_swap_body(S) \
+ v= __sync_lock_test_and_set(a, v);
+#define make_atomic_cas_body(S) \
+ int ## S sav; \
+ sav= __sync_val_compare_and_swap(a, *cmp, set); \
+ if (!(ret= (sav == *cmp))) *cmp= sav;
+
+#ifdef MY_ATOMIC_MODE_DUMMY
+#define make_atomic_load_body(S) ret= *a
+#define make_atomic_store_body(S) *a= v
+#else
+#define make_atomic_load_body(S) \
+ ret= __sync_fetch_and_or(a, 0);
+#define make_atomic_store_body(S) \
+ (void) __sync_lock_test_and_set(a, v);
+#endif
diff --git a/include/atomic/nolock.h b/include/atomic/nolock.h
index f15c8b13b7f..10ac17884b6 100644
--- a/include/atomic/nolock.h
+++ b/include/atomic/nolock.h
@@ -13,7 +13,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-#if defined(__i386__) || defined(_M_IX86)
+#if defined(__i386__) || defined(_M_IX86) || defined(HAVE_GCC_ATOMIC_BUILTINS)
#ifdef MY_ATOMIC_MODE_DUMMY
# define LOCK ""
@@ -21,7 +21,9 @@
# define LOCK "lock"
#endif
-#ifdef __GNUC__
+#ifdef HAVE_GCC_ATOMIC_BUILTINS
+#include "gcc_builtins.h"
+#elif __GNUC__
#include "x86-gcc.h"
#elif defined(_MSC_VER)
#include "x86-msvc.h"
diff --git a/include/config-win.h b/include/config-win.h
index 07b316dcbab..e0558ca4564 100644
--- a/include/config-win.h
+++ b/include/config-win.h
@@ -211,6 +211,9 @@ typedef uint rf_SetTimer;
/* If LOAD DATA LOCAL INFILE should be enabled by default */
#define ENABLED_LOCAL_INFILE 1
+/* If query profiling should be enabled by default */
+#define ENABLED_PROFILING 1
+
/* Convert some simple functions to Posix */
#define my_sigset(A,B) signal((A),(B))
diff --git a/include/m_string.h b/include/m_string.h
index 00fb4cb0656..9d2a30917bd 100644
--- a/include/m_string.h
+++ b/include/m_string.h
@@ -200,6 +200,7 @@ double my_strtod(const char *str, char **end, int *error);
double my_atof(const char *nptr);
extern char *llstr(longlong value,char *buff);
+extern char *ullstr(longlong value,char *buff);
#ifndef HAVE_STRTOUL
extern long strtol(const char *str, char **ptr, int base);
extern ulong strtoul(const char *str, char **ptr, int base);
diff --git a/include/my_base.h b/include/my_base.h
index 339554979a8..947f7695215 100644
--- a/include/my_base.h
+++ b/include/my_base.h
@@ -187,7 +187,13 @@ enum ha_extra_function {
Inform handler that an "INSERT...ON DUPLICATE KEY UPDATE" will be
executed. This condition is unset by HA_EXTRA_NO_IGNORE_DUP_KEY.
*/
- HA_EXTRA_INSERT_WITH_UPDATE
+ HA_EXTRA_INSERT_WITH_UPDATE,
+ /*
+ Orders MERGE handler to attach or detach its child tables. Used at
+ begin and end of a statement.
+ */
+ HA_EXTRA_ATTACH_CHILDREN,
+ HA_EXTRA_DETACH_CHILDREN
};
/* The following is parameter to ha_panic() */
@@ -244,6 +250,8 @@ enum ha_base_keytype {
HA_BINARY_PACK_KEY | HA_FULLTEXT | HA_UNIQUE_CHECK | \
HA_SPATIAL | HA_NULL_ARE_EQUAL | HA_GENERATED_KEY)
+#define HA_KEY_HAS_PART_KEY_SEG 65536 /* Key contains partial segments */
+
/* Automatic bits in key-flag */
#define HA_SPACE_PACK_USED 4 /* Test for if SPACE_PACK used */
@@ -407,9 +415,11 @@ enum ha_base_keytype {
#define HA_ERR_RECORD_IS_THE_SAME 169 /* row not actually updated :
new values same as the old values */
-#define HA_ERR_LOGGING_IMPOSSIBLE 170 /* It is not possible to log this
- statement */
-#define HA_ERR_LAST 170 /*Copy last error nr.*/
+#define HA_ERR_LOGGING_IMPOSSIBLE 170 /* It is not possible to log this
+ statement */
+#define HA_ERR_CORRUPT_EVENT 171 /* The event was corrupt, leading to
+ illegal data being read */
+#define HA_ERR_LAST 171 /*Copy last error nr.*/
/* Add error numbers before HA_ERR_LAST and change it accordingly. */
#define HA_ERR_ERRORS (HA_ERR_LAST - HA_ERR_FIRST + 1)
diff --git a/include/my_bitmap.h b/include/my_bitmap.h
index ab69b2d671d..78642df3362 100644
--- a/include/my_bitmap.h
+++ b/include/my_bitmap.h
@@ -159,6 +159,22 @@ static inline my_bool bitmap_cmp(const MY_BITMAP *map1, const MY_BITMAP *map2)
#define bitmap_set_all(MAP) \
(memset((MAP)->bitmap, 0xFF, 4*no_words_in_map((MAP))))
+/**
+ check, set and clear a bit of interest of an integer.
+
+ If the bit is out of range @retval -1. Otherwise
+ bit_is_set @return 0 or 1 reflecting the bit is set or not;
+ bit_do_set @return 1 (bit is set 1)
+ bit_do_clear @return 0 (bit is cleared to 0)
+*/
+
+#define bit_is_set(I,B) (sizeof(I) * CHAR_BIT > (B) ? \
+ (((I) & (ULL(1) << (B))) == 0 ? 0 : 1) : -1)
+#define bit_do_set(I,B) (sizeof(I) * CHAR_BIT > (B) ? \
+ ((I) |= (ULL(1) << (B)), 1) : -1)
+#define bit_do_clear(I,B) (sizeof(I) * CHAR_BIT > (B) ? \
+ ((I) &= ~(ULL(1) << (B)), 0) : -1)
+
#ifdef __cplusplus
}
#endif
diff --git a/include/my_getopt.h b/include/my_getopt.h
index 30c2eb9531a..14f8e6df95b 100644
--- a/include/my_getopt.h
+++ b/include/my_getopt.h
@@ -74,7 +74,9 @@ extern void my_print_variables(const struct my_option *options);
extern void my_getopt_register_get_addr(uchar ** (*func_addr)(const char *, uint,
const struct my_option *));
-ulonglong getopt_ull_limit_value(ulonglong num, const struct my_option *optp);
+ulonglong getopt_ull_limit_value(ulonglong num, const struct my_option *optp,
+ bool *fix);
+longlong getopt_ll_limit_value(longlong, const struct my_option *,bool *fix);
my_bool getopt_compare_strings(const char *s, const char *t, uint length);
C_MODE_END
diff --git a/include/my_global.h b/include/my_global.h
index ce76aeaec20..4b0786aa826 100644
--- a/include/my_global.h
+++ b/include/my_global.h
@@ -116,36 +116,31 @@
The macros below are used to allow build of Universal/fat binaries of
MySQL and MySQL applications under darwin.
*/
-#ifdef TARGET_FAT_BINARY
-# undef SIZEOF_CHARP
-# undef SIZEOF_INT
-# undef SIZEOF_LONG
-# undef SIZEOF_LONG_LONG
-# undef SIZEOF_OFF_T
-# undef SIZEOF_SHORT
-
-#if defined(__i386__)
-# undef WORDS_BIGENDIAN
-# define SIZEOF_CHARP 4
-# define SIZEOF_INT 4
-# define SIZEOF_LONG 4
-# define SIZEOF_LONG_LONG 8
-# define SIZEOF_OFF_T 8
-# define SIZEOF_SHORT 2
-
-#elif defined(__ppc__)
-# define WORDS_BIGENDIAN
-# define SIZEOF_CHARP 4
-# define SIZEOF_INT 4
-# define SIZEOF_LONG 4
-# define SIZEOF_LONG_LONG 8
-# define SIZEOF_OFF_T 8
-# define SIZEOF_SHORT 2
-
-#else
-# error Building FAT binary for an unknown architecture.
-#endif
-#endif /* TARGET_FAT_BINARY */
+#if defined(__APPLE__) && defined(__MACH__)
+# undef SIZEOF_CHARP
+# undef SIZEOF_SHORT
+# undef SIZEOF_INT
+# undef SIZEOF_LONG
+# undef SIZEOF_LONG_LONG
+# undef SIZEOF_OFF_T
+# undef WORDS_BIGENDIAN
+# define SIZEOF_SHORT 2
+# define SIZEOF_INT 4
+# define SIZEOF_LONG_LONG 8
+# define SIZEOF_OFF_T 8
+# if defined(__i386__) || defined(__ppc__)
+# define SIZEOF_CHARP 4
+# define SIZEOF_LONG 4
+# elif defined(__x86_64__) || defined(__ppc64__)
+# define SIZEOF_CHARP 8
+# define SIZEOF_LONG 8
+# else
+# error Building FAT binary for an unknown architecture.
+# endif
+# if defined(__ppc__) || defined(__ppc64__)
+# define WORDS_BIGENDIAN
+# endif
+#endif /* defined(__APPLE__) && defined(__MACH__) */
/*
diff --git a/include/my_sys.h b/include/my_sys.h
index 638b1f4a2d4..ee79806c40e 100644
--- a/include/my_sys.h
+++ b/include/my_sys.h
@@ -521,6 +521,11 @@ typedef int (*qsort2_cmp)(const void *, const void *, const void *);
#define my_b_tell(info) ((info)->pos_in_file + \
(size_t) (*(info)->current_pos - (info)->request_pos))
+#define my_b_get_buffer_start(info) (info)->request_pos
+#define my_b_get_bytes_in_buffer(info) (char*) (info)->read_end - \
+ (char*) my_b_get_buffer_start(info)
+#define my_b_get_pos_in_file(info) (info)->pos_in_file
+
/* tell write offset in the SEQ_APPEND cache */
int my_b_copy_to_file(IO_CACHE *cache, FILE *file);
my_off_t my_b_append_tell(IO_CACHE* info);
@@ -691,6 +696,8 @@ extern WF_PACK *wf_comp(char * str);
extern int wf_test(struct wild_file_pack *wf_pack,const char *name);
extern void wf_end(struct wild_file_pack *buffer);
extern size_t strip_sp(char * str);
+extern my_bool array_append_string_unique(const char *str,
+ const char **array, size_t size);
extern void get_date(char * to,int timeflag,time_t use_time);
extern void soundex(CHARSET_INFO *, char * out_pntr, char * in_pntr,
pbool remove_garbage);
diff --git a/include/myisammrg.h b/include/myisammrg.h
index eed50bebaee..cc6e6aac6cd 100644
--- a/include/myisammrg.h
+++ b/include/myisammrg.h
@@ -69,9 +69,12 @@ typedef struct st_myrg_info
uint merge_insert_method;
uint tables,options,reclength,keys;
my_bool cache_in_use;
+ /* If MERGE children attached to parent. See top comment in ha_myisammrg.cc */
+ my_bool children_attached;
LIST open_list;
QUEUE by_key;
ulong *rec_per_key_part; /* for sql optimizing */
+ pthread_mutex_t mutex;
} MYRG_INFO;
@@ -80,6 +83,13 @@ typedef struct st_myrg_info
extern int myrg_close(MYRG_INFO *file);
extern int myrg_delete(MYRG_INFO *file,const uchar *buff);
extern MYRG_INFO *myrg_open(const char *name,int mode,int wait_if_locked);
+extern MYRG_INFO *myrg_parent_open(const char *parent_name,
+ int (*callback)(void*, const char*),
+ void *callback_param);
+extern int myrg_attach_children(MYRG_INFO *m_info, int handle_locking,
+ MI_INFO *(*callback)(void*),
+ void *callback_param);
+extern int myrg_detach_children(MYRG_INFO *m_info);
extern int myrg_panic(enum ha_panic_function function);
extern int myrg_rfirst(MYRG_INFO *file,uchar *buf,int inx);
extern int myrg_rlast(MYRG_INFO *file,uchar *buf,int inx);
diff --git a/include/mysql.h b/include/mysql.h
index 68cce3196a0..d114afb6c93 100644
--- a/include/mysql.h
+++ b/include/mysql.h
@@ -557,16 +557,6 @@ unsigned long STDCALL mysql_real_escape_string(MYSQL *mysql,
char *to,const char *from,
unsigned long length);
void STDCALL mysql_debug(const char *debug);
-char * STDCALL mysql_odbc_escape_string(MYSQL *mysql,
- char *to,
- unsigned long to_length,
- const char *from,
- unsigned long from_length,
- void *param,
- char *
- (*extend_buffer)
- (void *, char *to,
- unsigned long *length));
void STDCALL myodbc_remove_escape(MYSQL *mysql,char *name);
unsigned int STDCALL mysql_thread_safe(void);
my_bool STDCALL mysql_embedded(void);
diff --git a/include/mysql_com.h b/include/mysql_com.h
index f76486b9ec2..7eefad44716 100644
--- a/include/mysql_com.h
+++ b/include/mysql_com.h
@@ -94,6 +94,7 @@ enum enum_server_command
#define TIMESTAMP_FLAG 1024 /* Field is a timestamp */
#define SET_FLAG 2048 /* field is a set */
#define NO_DEFAULT_VALUE_FLAG 4096 /* Field doesn't have default value */
+#define ON_UPDATE_NOW_FLAG 8192 /* Field is set to NOW on UPDATE */
#define NUM_FLAG 32768 /* Field is num (for clients) */
#define PART_KEY_FLAG 16384 /* Intern; Part of some key */
#define GROUP_FLAG 32768 /* Intern: Group field */
@@ -202,14 +203,10 @@ typedef struct st_net {
unsigned int *return_status;
unsigned char reading_or_writing;
char save_char;
- my_bool no_send_ok; /* For SPs and other things that do multiple stmts */
+ my_bool unused0; /* Please remove with the next incompatible ABI change. */
my_bool unused; /* Please remove with the next incompatible ABI change */
my_bool compress;
- /*
- Set if OK packet is already sent, and we do not need to send error
- messages
- */
- my_bool no_send_error;
+ my_bool unused1; /* Please remove with the next incompatible ABI change. */
/*
Pointer to query object in query cache, do not equal NULL (0) for
queries in cache that have not stored its results yet
@@ -220,11 +217,14 @@ typedef struct st_net {
functions and methods to maintain proper locking.
*/
unsigned char *query_cache_query;
- unsigned int last_errno;
- unsigned char error;
- my_bool report_error; /* We should report error (we have unreported error) */
+ unsigned int client_last_errno;
+ unsigned char error;
+ my_bool unused2; /* Please remove with the next incompatible ABI change. */
my_bool return_errno;
- char last_error[MYSQL_ERRMSG_SIZE], sqlstate[SQLSTATE_LENGTH+1];
+ /** Client library error message buffer. Actually belongs to struct MYSQL. */
+ char client_last_error[MYSQL_ERRMSG_SIZE];
+ /** Client library sqlstate buffer. Set along with the error message. */
+ char sqlstate[SQLSTATE_LENGTH+1];
void *extension;
} NET;
@@ -396,14 +396,17 @@ typedef struct st_udf_args
typedef struct st_udf_init
{
- my_bool maybe_null; /* 1 if function can return NULL */
- unsigned int decimals; /* for real functions */
- unsigned long max_length; /* For string functions */
- char *ptr; /* free pointer for function data */
- /* 0 if result is independent of arguments */
- my_bool const_item;
+ my_bool maybe_null; /* 1 if function can return NULL */
+ unsigned int decimals; /* for real functions */
+ unsigned long max_length; /* For string functions */
+ char *ptr; /* free pointer for function data */
+ my_bool const_item; /* 1 if function always returns the same value */
void *extension;
} UDF_INIT;
+/*
+ TODO: add a notion for determinism of the UDF.
+ See Item_udf_func::update_used_tables ()
+*/
/* Constants when using compression */
#define NET_HEADER_SIZE 4 /* standard header size */
diff --git a/include/mysql_embed.h b/include/mysql_embed.h
index 7416283d83d..4a7fd3ef63c 100644
--- a/include/mysql_embed.h
+++ b/include/mysql_embed.h
@@ -21,7 +21,6 @@
/* TODO HF add #undef HAVE_VIO if we don't want client in embedded library */
#undef HAVE_PSTACK /* No stacktrace */
-#undef HAVE_DLOPEN /* No udf functions */
#undef HAVE_OPENSSL
#undef HAVE_SMEM /* No shared memory */
#undef HAVE_NDBCLUSTER_DB /* No NDB cluster */
diff --git a/include/mysql_h.ic b/include/mysql_h.ic
index 12e16df878a..4f138d9a229 100644
--- a/include/mysql_h.ic
+++ b/include/mysql_h.ic
@@ -54,7 +54,7 @@ typedef struct st_list LIST;
typedef struct st_mem_root MEM_ROOT;
# 258 "mysql.h"
typedef struct st_mysql MYSQL;
-# 664 "mysql.h"
+# 654 "mysql.h"
typedef struct st_mysql_bind MYSQL_BIND;
# 95 "mysql.h"
typedef struct st_mysql_field MYSQL_FIELD;
@@ -72,17 +72,17 @@ typedef struct st_mysql_res MYSQL_RES;
typedef char * * MYSQL_ROW;
# 145 "mysql.h"
typedef MYSQL_ROWS * MYSQL_ROW_OFFSET;
-# 693 "mysql.h"
+# 683 "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"
+# 188 "mysql_com.h"
typedef struct st_net NET;
# 22 "typelib.h"
typedef struct st_typelib TYPELIB;
-# 177 "mysql_com.h"
+# 178 "mysql_com.h"
typedef struct st_vio Vio;
# 28 "my_list.h"
typedef int (* list_walk_action)(void *, void *);
@@ -92,7 +92,7 @@ typedef char my_bool;
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"
+# 214 "/usr/lib/gcc/i486-linux-gnu/4.1.3/include/stddef.h"
typedef unsigned int size_t;
# 149 "mysql.h"
typedef struct embedded_query_result EMBEDDED_QUERY_RESULT;
@@ -102,13 +102,13 @@ typedef struct st_mysql_data MYSQL_DATA;
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"
+# 753 "mysql.h"
typedef struct st_mysql_methods MYSQL_METHODS;
# 47 "mysql_time.h"
typedef struct st_mysql_time MYSQL_TIME;
-# 383 "mysql_com.h"
+# 384 "mysql_com.h"
typedef struct st_udf_args UDF_ARGS;
-# 397 "mysql_com.h"
+# 398 "mysql_com.h"
typedef struct st_udf_init UDF_INIT;
# 26 "my_alloc.h"
typedef struct st_used_mem USED_MEM;
@@ -130,7 +130,7 @@ struct __attribute__((aligned(__alignof__(unsigned int)), aligned(__alignof__(vo
unsigned int mbminlen;
unsigned int mbmaxlen;
};
-# 369 "mysql_com.h"
+# 370 "mysql_com.h"
struct __attribute__((aligned(__alignof__(unsigned long int)), aligned(__alignof__(double)))) rand_struct
{
unsigned long int seed1;
@@ -203,7 +203,7 @@ struct __attribute__((aligned(__alignof__(void *)), aligned(__alignof__(unsigned
char * info_buffer;
void * extension;
};
-# 664 "mysql.h"
+# 654 "mysql.h"
struct __attribute__((aligned(__alignof__(void *)), aligned(__alignof__(unsigned long int)))) st_mysql_bind
{
unsigned long int * length;
@@ -328,7 +328,7 @@ struct __attribute__((aligned(__alignof__(void *)), aligned(__alignof__(unsigned
char last_error[256];
void * extension;
};
-# 763 "mysql.h"
+# 753 "mysql.h"
struct __attribute__((aligned(__alignof__(void *)))) st_mysql_methods
{
my_bool (* read_query_result)(MYSQL * mysql);
@@ -448,7 +448,7 @@ struct __attribute__((aligned(__alignof__(void *)))) st_mysql_show_var
char * value;
enum enum_mysql_show_type type;
};
-# 693 "mysql.h"
+# 683 "mysql.h"
struct __attribute__((aligned(__alignof__(void *)), aligned(__alignof__(unsigned long long int)))) st_mysql_stmt
{
MEM_ROOT mem_root;
@@ -513,7 +513,7 @@ struct __attribute__((aligned(__alignof__(long int)))) st_mysql_xid
long int bqual_length;
char data[128];
};
-# 187 "mysql_com.h"
+# 188 "mysql_com.h"
struct __attribute__((aligned(__alignof__(void *)), aligned(__alignof__(unsigned long int)))) st_net
{
Vio * vio;
@@ -537,16 +537,16 @@ struct __attribute__((aligned(__alignof__(void *)), aligned(__alignof__(unsigned
unsigned int * return_status;
unsigned char reading_or_writing;
char save_char;
- my_bool no_send_ok;
+ my_bool unused0;
my_bool unused;
my_bool compress;
- my_bool no_send_error;
+ my_bool unused1;
unsigned char * query_cache_query;
- unsigned int last_errno;
+ unsigned int client_last_errno;
unsigned char error;
- my_bool report_error;
+ my_bool unused2;
my_bool return_errno;
- char last_error[512];
+ char client_last_error[512];
char sqlstate[(5 + 1)];
void * extension;
};
@@ -558,7 +558,7 @@ struct __attribute__((aligned(__alignof__(unsigned int)), aligned(__alignof__(vo
char const * * type_names;
unsigned int * type_lengths;
};
-# 383 "mysql_com.h"
+# 384 "mysql_com.h"
struct __attribute__((aligned(__alignof__(unsigned int)), aligned(__alignof__(void *)))) st_udf_args
{
unsigned int arg_count;
@@ -570,7 +570,7 @@ struct __attribute__((aligned(__alignof__(unsigned int)), aligned(__alignof__(vo
unsigned long int * attribute_lengths;
void * extension;
};
-# 397 "mysql_com.h"
+# 398 "mysql_com.h"
struct __attribute__((aligned(__alignof__(unsigned long int)), aligned(__alignof__(void *)))) st_udf_init
{
my_bool maybe_null;
@@ -587,7 +587,7 @@ struct __attribute__((aligned(__alignof__(void *)), aligned(__alignof__(unsigned
unsigned int left;
unsigned int size;
};
-# 380 "mysql_com.h"
+# 381 "mysql_com.h"
enum Item_result
{
STRING_RESULT = 0,
@@ -596,7 +596,7 @@ enum Item_result
ROW_RESULT = 3,
DECIMAL_RESULT = 4,
};
-# 321 "mysql_com.h"
+# 322 "mysql_com.h"
enum enum_cursor_type
{
CURSOR_TYPE_NO_CURSOR = 0,
@@ -604,7 +604,7 @@ enum enum_cursor_type
CURSOR_TYPE_FOR_UPDATE = 2,
CURSOR_TYPE_SCROLLABLE = 4,
};
-# 234 "mysql_com.h"
+# 235 "mysql_com.h"
enum enum_field_types
{
MYSQL_TYPE_DECIMAL = 0,
@@ -651,7 +651,7 @@ enum enum_ftparser_mode
MYSQL_FTPARSER_WITH_STOPWORDS = 1,
MYSQL_FTPARSER_FULL_BOOLEAN_INFO = 2,
};
-# 331 "mysql_com.h"
+# 332 "mysql_com.h"
enum enum_mysql_set_option
{
MYSQL_OPTION_MULTI_STATEMENTS_ON = 0,
@@ -671,7 +671,7 @@ enum enum_mysql_show_type
SHOW_FUNC = 8,
SHOW_DOUBLE = 9,
};
-# 594 "mysql.h"
+# 584 "mysql.h"
enum enum_mysql_stmt_state
{
MYSQL_STMT_INIT_DONE = 1,
@@ -723,14 +723,14 @@ enum enum_server_command
COM_DAEMON = 29,
COM_END = 30,
};
-# 740 "mysql.h"
+# 730 "mysql.h"
enum enum_stmt_attr_type
{
STMT_ATTR_UPDATE_MAX_LENGTH = 0,
STMT_ATTR_CURSOR_TYPE = 1,
STMT_ATTR_PREFETCH_ROWS = 2,
};
-# 296 "mysql_com.h"
+# 297 "mysql_com.h"
enum mysql_enum_shutdown_level
{
SHUTDOWN_DEFAULT = 0,
@@ -790,13 +790,13 @@ enum mysql_status
MYSQL_STATUS_GET_RESULT = 1,
MYSQL_STATUS_USE_RESULT = 2,
};
-# 438 "mysql_com.h"
+# 439 "mysql_com.h"
extern my_bool check_scramble(char const * reply, char const * message, unsigned char const * hash_stage2);
-# 431 "mysql_com.h"
+# 432 "mysql_com.h"
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"
+# 427 "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);
@@ -804,15 +804,15 @@ extern int find_type(char * x, TYPELIB const * typelib, unsigned int);
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"
+# 441 "mysql_com.h"
extern void get_salt_from_password(unsigned char * res, char const * password);
-# 433 "mysql_com.h"
+# 434 "mysql_com.h"
extern void get_salt_from_password_323(unsigned long int * res, char const * password);
-# 446 "mysql_com.h"
+# 447 "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"
+# 429 "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);
@@ -828,47 +828,47 @@ extern unsigned int list_length(LIST *);
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"
+# 442 "mysql_com.h"
extern void make_password_from_salt(char * to, unsigned char const * hash_stage2);
-# 434 "mysql_com.h"
+# 435 "mysql_com.h"
extern void make_password_from_salt_323(char * to, unsigned long int const * salt);
-# 436 "mysql_com.h"
+# 437 "mysql_com.h"
extern void make_scrambled_password(char * to, char const * password);
-# 429 "mysql_com.h"
+# 430 "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"
+# 367 "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 my_bool my_net_init(NET * net, Vio * vio);
+# 345 "mysql_com.h"
extern void my_net_local_init(NET * net);
-# 354 "mysql_com.h"
+# 355 "mysql_com.h"
extern unsigned long int my_net_read(NET * net);
-# 349 "mysql_com.h"
+# 350 "mysql_com.h"
extern my_bool my_net_write(NET * net, unsigned char const * packet, size_t);
-# 425 "mysql_com.h"
+# 426 "mysql_com.h"
extern double my_rnd(struct rand_struct *);
-# 452 "mysql_com.h"
+# 453 "mysql_com.h"
extern void my_thread_end(void);
-# 451 "mysql_com.h"
+# 452 "mysql_com.h"
extern my_bool my_thread_init(void);
-# 570 "mysql.h"
+# 560 "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"
+# 826 "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"
+# 829 "mysql.h"
extern void mysql_close(MYSQL * sock);
-# 834 "mysql.h"
+# 824 "mysql.h"
extern my_bool mysql_commit(MYSQL * mysql);
# 541 "mysql.h"
extern void mysql_data_seek(MYSQL_RES * result, my_ulonglong);
@@ -880,7 +880,7 @@ extern void mysql_disable_reads_from_master(MYSQL * mysql);
extern void mysql_disable_rpl_parse(MYSQL * mysql);
# 520 "mysql.h"
extern int mysql_dump_debug_info(MYSQL * mysql);
-# 572 "mysql.h"
+# 562 "mysql.h"
extern my_bool mysql_embedded(void);
# 497 "mysql.h"
extern void mysql_enable_reads_from_master(MYSQL * mysql);
@@ -890,7 +890,7 @@ extern void mysql_enable_rpl_parse(MYSQL * mysql);
extern my_bool mysql_eof(MYSQL_RES * res);
# 423 "mysql.h"
extern unsigned int mysql_errno(MYSQL * mysql);
-# 447 "mysql_com.h"
+# 448 "mysql_com.h"
extern char const * mysql_errno_to_sqlstate(unsigned int);
# 424 "mysql.h"
extern char const * mysql_error(MYSQL * mysql);
@@ -950,30 +950,28 @@ extern MYSQL_RES * mysql_list_fields(MYSQL * mysql, char const * table, char con
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"
+# 569 "mysql.h"
extern void mysql_manager_close(MYSQL_MANAGER * con);
-# 580 "mysql.h"
+# 570 "mysql.h"
extern int mysql_manager_command(MYSQL_MANAGER * con, char const * cmd, int);
-# 574 "mysql.h"
+# 564 "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"
+# 572 "mysql.h"
extern int mysql_manager_fetch_line(MYSQL_MANAGER * con, char * res_buf, int);
-# 573 "mysql.h"
+# 563 "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"
+# 827 "mysql.h"
extern my_bool mysql_more_results(MYSQL * mysql);
-# 838 "mysql.h"
+# 828 "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"
@@ -984,7 +982,7 @@ extern unsigned int mysql_port;
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"
+# 575 "mysql.h"
extern my_bool mysql_read_query_result(MYSQL * mysql);
# 500 "mysql.h"
extern my_bool mysql_reads_from_master_enabled(MYSQL * mysql);
@@ -996,7 +994,7 @@ extern unsigned long int mysql_real_escape_string(MYSQL * mysql, char * to, char
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"
+# 825 "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);
@@ -1038,59 +1036,59 @@ extern char const * mysql_sqlstate(MYSQL * mysql);
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"
+# 820 "mysql.h"
extern my_ulonglong mysql_stmt_affected_rows(MYSQL_STMT * stmt);
-# 808 "mysql.h"
+# 798 "mysql.h"
extern my_bool mysql_stmt_attr_get(MYSQL_STMT * stmt, enum enum_stmt_attr_type, void * attr);
-# 805 "mysql.h"
+# 795 "mysql.h"
extern my_bool mysql_stmt_attr_set(MYSQL_STMT * stmt, enum enum_stmt_attr_type, void const * attr);
-# 811 "mysql.h"
+# 801 "mysql.h"
extern my_bool mysql_stmt_bind_param(MYSQL_STMT * stmt, MYSQL_BIND * bnd);
-# 812 "mysql.h"
+# 802 "mysql.h"
extern my_bool mysql_stmt_bind_result(MYSQL_STMT * stmt, MYSQL_BIND * bnd);
-# 813 "mysql.h"
+# 803 "mysql.h"
extern my_bool mysql_stmt_close(MYSQL_STMT * stmt);
-# 828 "mysql.h"
+# 818 "mysql.h"
extern void mysql_stmt_data_seek(MYSQL_STMT * stmt, my_ulonglong);
-# 822 "mysql.h"
+# 812 "mysql.h"
extern unsigned int mysql_stmt_errno(MYSQL_STMT * stmt);
-# 823 "mysql.h"
+# 813 "mysql.h"
extern char const * mysql_stmt_error(MYSQL_STMT * stmt);
-# 798 "mysql.h"
+# 788 "mysql.h"
extern int mysql_stmt_execute(MYSQL_STMT * stmt);
-# 799 "mysql.h"
+# 789 "mysql.h"
extern int mysql_stmt_fetch(MYSQL_STMT * stmt);
-# 800 "mysql.h"
+# 790 "mysql.h"
extern int mysql_stmt_fetch_column(MYSQL_STMT * stmt, MYSQL_BIND * bind_arg, unsigned int, unsigned long int);
-# 832 "mysql.h"
+# 822 "mysql.h"
extern unsigned int mysql_stmt_field_count(MYSQL_STMT * stmt);
-# 815 "mysql.h"
+# 805 "mysql.h"
extern my_bool mysql_stmt_free_result(MYSQL_STMT * stmt);
-# 795 "mysql.h"
+# 785 "mysql.h"
extern MYSQL_STMT * mysql_stmt_init(MYSQL * mysql);
-# 831 "mysql.h"
+# 821 "mysql.h"
extern my_ulonglong mysql_stmt_insert_id(MYSQL_STMT * stmt);
-# 829 "mysql.h"
+# 819 "mysql.h"
extern my_ulonglong mysql_stmt_num_rows(MYSQL_STMT * stmt);
-# 804 "mysql.h"
+# 794 "mysql.h"
extern unsigned long int mysql_stmt_param_count(MYSQL_STMT * stmt);
-# 821 "mysql.h"
+# 811 "mysql.h"
extern MYSQL_RES * mysql_stmt_param_metadata(MYSQL_STMT * stmt);
-# 796 "mysql.h"
+# 786 "mysql.h"
extern int mysql_stmt_prepare(MYSQL_STMT * stmt, char const * query, unsigned long int);
-# 814 "mysql.h"
+# 804 "mysql.h"
extern my_bool mysql_stmt_reset(MYSQL_STMT * stmt);
-# 820 "mysql.h"
+# 810 "mysql.h"
extern MYSQL_RES * mysql_stmt_result_metadata(MYSQL_STMT * stmt);
-# 825 "mysql.h"
+# 815 "mysql.h"
extern MYSQL_ROW_OFFSET mysql_stmt_row_seek(MYSQL_STMT * stmt, MYSQL_ROW_OFFSET);
-# 827 "mysql.h"
+# 817 "mysql.h"
extern MYSQL_ROW_OFFSET mysql_stmt_row_tell(MYSQL_STMT * stmt);
-# 816 "mysql.h"
+# 806 "mysql.h"
extern my_bool mysql_stmt_send_long_data(MYSQL_STMT * stmt, unsigned int, char const * data, unsigned long int);
-# 824 "mysql.h"
+# 814 "mysql.h"
extern char const * mysql_stmt_sqlstate(MYSQL_STMT * stmt);
-# 803 "mysql.h"
+# 793 "mysql.h"
extern int mysql_stmt_store_result(MYSQL_STMT * stmt);
# 452 "mysql.h"
extern MYSQL_RES * mysql_store_result(MYSQL * mysql);
@@ -1100,7 +1098,7 @@ extern void mysql_thread_end(void);
extern unsigned long int mysql_thread_id(MYSQL * mysql);
# 403 "mysql.h"
extern my_bool mysql_thread_init(void);
-# 571 "mysql.h"
+# 561 "mysql.h"
extern unsigned int mysql_thread_safe(void);
# 699 "mysql/plugin.h"
extern int mysql_tmpfile(char const * prefix);
@@ -1110,25 +1108,25 @@ extern char * mysql_unix_port;
extern MYSQL_RES * mysql_use_result(MYSQL * mysql);
# 426 "mysql.h"
extern unsigned int mysql_warning_count(MYSQL * mysql);
-# 346 "mysql_com.h"
+# 347 "mysql_com.h"
extern void net_clear(NET * net, my_bool);
-# 345 "mysql_com.h"
+# 346 "mysql_com.h"
extern void net_end(NET * net);
-# 348 "mysql_com.h"
+# 349 "mysql_com.h"
extern my_bool net_flush(NET * net);
-# 353 "mysql_com.h"
+# 354 "mysql_com.h"
extern int net_real_write(NET * net, unsigned char const * packet, size_t);
-# 347 "mysql_com.h"
+# 348 "mysql_com.h"
extern my_bool net_realloc(NET * net, size_t);
-# 350 "mysql_com.h"
+# 351 "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"
+# 443 "mysql_com.h"
extern char * octet2hex(char * to, char const * str, unsigned int);
-# 423 "mysql_com.h"
+# 424 "mysql_com.h"
extern void randominit(struct rand_struct *, unsigned long int, unsigned long int);
-# 437 "mysql_com.h"
+# 438 "mysql_com.h"
extern void scramble(char * to, char const * message, char const * password);
-# 430 "mysql_com.h"
+# 431 "mysql_com.h"
extern void scramble_323(char * to, char const * message, char const * password);
# 37 "typelib.h"
extern TYPELIB sql_protocol_typelib;
diff --git a/include/queues.h b/include/queues.h
index 4fd0f72484e..d01b73ba999 100644
--- a/include/queues.h
+++ b/include/queues.h
@@ -31,8 +31,8 @@ typedef struct st_queue {
void *first_cmp_arg;
uint elements;
uint max_elements;
- uint offset_to_key; /* compare is done on element+offset */
- int max_at_top; /* Set if queue_top gives max */
+ uint offset_to_key; /* compare is done on element+offset */
+ int max_at_top; /* Normally 1, set to -1 if queue_top gives max */
int (*compare)(void *, uchar *,uchar *);
uint auto_extent;
} QUEUE;
@@ -43,7 +43,7 @@ typedef struct st_queue {
#define queue_replaced(queue) _downheap(queue,1)
#define queue_set_cmp_arg(queue, set_arg) (queue)->first_cmp_arg= set_arg
#define queue_set_max_at_top(queue, set_arg) \
- (queue)->max_at_top= set_arg ? (-1 ^ 1) : 0
+ (queue)->max_at_top= set_arg ? -1 : 1
typedef int (*queue_compare)(void *,uchar *, uchar *);
int init_queue(QUEUE *queue,uint max_elements,uint offset_to_key,
diff --git a/include/sql_common.h b/include/sql_common.h
index 80504140fae..56e7305130f 100644
--- a/include/sql_common.h
+++ b/include/sql_common.h
@@ -36,8 +36,10 @@ cli_advanced_command(MYSQL *mysql, enum enum_server_command command,
const unsigned char *arg, ulong arg_length,
my_bool skip_check, MYSQL_STMT *stmt);
unsigned long cli_safe_read(MYSQL *mysql);
-void set_stmt_errmsg(MYSQL_STMT * stmt, const char *err, int errcode,
- const char *sqlstate);
+void net_clear_error(NET *net);
+void set_stmt_errmsg(MYSQL_STMT *stmt, NET *net);
+void set_stmt_error(MYSQL_STMT *stmt, int errcode, const char *sqlstate,
+ const char *err);
void set_mysql_error(MYSQL *mysql, int errcode, const char *sqlstate);
#ifdef __cplusplus
}
diff --git a/libmysql/CMakeLists.txt b/libmysql/CMakeLists.txt
index cde23e8627e..b761907ec9d 100755
--- a/libmysql/CMakeLists.txt
+++ b/libmysql/CMakeLists.txt
@@ -75,7 +75,7 @@ SET(CLIENT_SOURCES ../mysys/array.c ../strings/bchange.c ../strings/bmove.c
../mysys/hash.c ../mysys/my_sleep.c ../mysys/default_modify.c
get_password.c ../strings/int2str.c ../strings/is_prefix.c
libmysql.c ../mysys/list.c ../strings/llstr.c
- ../strings/longlong2str.c manager.c ../mysys/mf_cache.c
+ ../strings/longlong2str.c manager.c ../mysys/mf_arr_appstr.c ../mysys/mf_cache.c
../mysys/mf_dirname.c ../mysys/mf_fn_ext.c ../mysys/mf_format.c
../mysys/mf_iocache.c ../mysys/mf_iocache2.c ../mysys/mf_loadpath.c
../mysys/mf_pack.c ../mysys/mf_path.c ../mysys/mf_tempfile.c ../mysys/mf_unixpath.c
@@ -126,9 +126,6 @@ ENDIF(WIN32)
ADD_DEPENDENCIES(libmysql GenError)
TARGET_LINK_LIBRARIES(libmysql wsock32)
-ADD_EXECUTABLE(myTest mytest.c)
-TARGET_LINK_LIBRARIES(myTest libmysql)
-
IF(EMBED_MANIFESTS)
MYSQL_EMBED_MANIFEST("myTest" "asInvoker")
ENDIF(EMBED_MANIFESTS)
diff --git a/libmysql/Makefile.am b/libmysql/Makefile.am
index e5005553467..21f8f372d0f 100644
--- a/libmysql/Makefile.am
+++ b/libmysql/Makefile.am
@@ -31,7 +31,7 @@ include $(srcdir)/Makefile.shared
libmysqlclient_la_SOURCES = $(target_sources)
libmysqlclient_la_LIBADD = $(target_libadd) $(yassl_las)
libmysqlclient_la_LDFLAGS = $(target_ldflags)
-EXTRA_DIST = Makefile.shared libmysql.def dll.c mytest.c CMakeLists.txt
+EXTRA_DIST = Makefile.shared libmysql.def dll.c CMakeLists.txt
noinst_HEADERS = client_settings.h
link_sources:
diff --git a/libmysql/Makefile.shared b/libmysql/Makefile.shared
index 5887ea0eceb..53b24c4fb42 100644
--- a/libmysql/Makefile.shared
+++ b/libmysql/Makefile.shared
@@ -59,7 +59,7 @@ mysysobjects1 = my_init.lo my_static.lo my_malloc.lo my_realloc.lo \
mf_pack.lo my_messnc.lo mf_dirname.lo mf_fn_ext.lo\
mf_wcomp.lo typelib.lo safemalloc.lo my_alloc.lo \
mf_format.lo mf_path.lo mf_unixpath.lo my_fopen.lo \
- my_symlink.lo my_fstream.lo \
+ my_symlink.lo my_fstream.lo mf_arr_appstr.lo \
mf_loadpath.lo my_pthread.lo my_thr_init.lo \
thr_mutex.lo mulalloc.lo string.lo \
default.lo default_modify.lo \
diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c
index 7807982df1a..f5ac1c09248 100644
--- a/libmysql/libmysql.c
+++ b/libmysql/libmysql.c
@@ -440,11 +440,11 @@ static void expand_error(MYSQL* mysql, int error)
char tmp[MYSQL_ERRMSG_SIZE];
char *p;
uint err_length;
- strmake(tmp, mysql->net.last_error, MYSQL_ERRMSG_SIZE-1);
- p = strmake(mysql->net.last_error, ER(error), MYSQL_ERRMSG_SIZE-1);
- err_length= (uint) (p - mysql->net.last_error);
+ strmake(tmp, mysql->net.client_last_error, MYSQL_ERRMSG_SIZE-1);
+ p = strmake(mysql->net.client_last_error, ER(error), MYSQL_ERRMSG_SIZE-1);
+ err_length= (uint) (p - mysql->net.client_last_error);
strmake(p, tmp, MYSQL_ERRMSG_SIZE-1 - err_length);
- mysql->net.last_errno = error;
+ mysql->net.client_last_errno = error;
}
/*
@@ -686,9 +686,7 @@ int cli_read_change_user_result(MYSQL *mysql, char *buff, const char *passwd)
if (my_net_write(net, (uchar*) buff, SCRAMBLE_LENGTH_323 + 1) ||
net_flush(net))
{
- net->last_errno= CR_SERVER_LOST;
- strmov(net->sqlstate, unknown_sqlstate);
- strmov(net->last_error,ER(net->last_errno));
+ set_mysql_error(mysql, CR_SERVER_LOST, unknown_sqlstate);
return 1;
}
/* Read what server thinks about out new auth message report */
@@ -701,7 +699,8 @@ int cli_read_change_user_result(MYSQL *mysql, char *buff, const char *passwd)
my_bool STDCALL mysql_change_user(MYSQL *mysql, const char *user,
const char *passwd, const char *db)
{
- char buff[512],*end=buff;
+ char buff[USERNAME_LENGTH+SCRAMBLED_PASSWORD_CHAR_LENGTH+NAME_LEN+2];
+ char *end= buff;
int rc;
CHARSET_INFO *saved_cs= mysql->charset;
@@ -723,7 +722,7 @@ my_bool STDCALL mysql_change_user(MYSQL *mysql, const char *user,
passwd="";
/* Store user into the buffer */
- end=strmov(end,user)+1;
+ end= strmake(end, user, USERNAME_LENGTH) + 1;
/* write scrambled password according to server capabilities */
if (passwd[0])
@@ -743,7 +742,7 @@ my_bool STDCALL mysql_change_user(MYSQL *mysql, const char *user,
else
*end++= '\0'; /* empty password */
/* Add database if needed */
- end= strmov(end, db ? db : "") + 1;
+ end= strmake(end, db ? db : "", NAME_LEN) + 1;
/* Add character set number. */
@@ -860,8 +859,7 @@ my_bool handle_local_infile(MYSQL *mysql, const char *net_filename)
/* copy filename into local memory and allocate read buffer */
if (!(buf=my_malloc(packet_length, MYF(0))))
{
- strmov(net->sqlstate, unknown_sqlstate);
- strmov(net->last_error, ER(net->last_errno=CR_OUT_OF_MEMORY));
+ set_mysql_error(mysql, CR_OUT_OF_MEMORY, unknown_sqlstate);
DBUG_RETURN(1);
}
@@ -872,9 +870,10 @@ my_bool handle_local_infile(MYSQL *mysql, const char *net_filename)
VOID(my_net_write(net,(const uchar*) "",0)); /* Server needs one packet */
net_flush(net);
strmov(net->sqlstate, unknown_sqlstate);
- net->last_errno= (*options->local_infile_error)(li_ptr,
- net->last_error,
- sizeof(net->last_error)-1);
+ net->client_last_errno=
+ (*options->local_infile_error)(li_ptr,
+ net->client_last_error,
+ sizeof(net->client_last_error)-1);
goto err;
}
@@ -887,9 +886,7 @@ my_bool handle_local_infile(MYSQL *mysql, const char *net_filename)
{
DBUG_PRINT("error",
("Lost connection to MySQL server during LOAD DATA of local file"));
- strmov(net->sqlstate, unknown_sqlstate);
- net->last_errno=CR_SERVER_LOST;
- strmov(net->last_error,ER(net->last_errno));
+ set_mysql_error(mysql, CR_SERVER_LOST, unknown_sqlstate);
goto err;
}
}
@@ -897,17 +894,16 @@ my_bool handle_local_infile(MYSQL *mysql, const char *net_filename)
/* Send empty packet to mark end of file */
if (my_net_write(net, (const uchar*) "", 0) || net_flush(net))
{
- strmov(net->sqlstate, unknown_sqlstate);
- net->last_errno=CR_SERVER_LOST;
- sprintf(net->last_error,ER(net->last_errno),errno);
+ set_mysql_error(mysql, CR_SERVER_LOST, unknown_sqlstate);
goto err;
}
if (readcount < 0)
{
- net->last_errno= (*options->local_infile_error)(li_ptr,
- net->last_error,
- sizeof(net->last_error)-1);
+ net->client_last_errno=
+ (*options->local_infile_error)(li_ptr,
+ net->client_last_error,
+ sizeof(net->client_last_error)-1);
goto err;
}
@@ -1400,10 +1396,8 @@ const char *cli_read_statistics(MYSQL *mysql)
mysql->net.read_pos[mysql->packet_length]=0; /* End of stat string */
if (!mysql->net.read_pos[0])
{
- strmov(mysql->net.sqlstate, unknown_sqlstate);
- mysql->net.last_errno=CR_WRONG_HOST_INFO;
- strmov(mysql->net.last_error, ER(mysql->net.last_errno));
- return mysql->net.last_error;
+ set_mysql_error(mysql, CR_WRONG_HOST_INFO, unknown_sqlstate);
+ return mysql->net.client_last_error;
}
return (char*) mysql->net.read_pos;
}
@@ -1414,7 +1408,7 @@ mysql_stat(MYSQL *mysql)
{
DBUG_ENTER("mysql_stat");
if (simple_command(mysql,COM_STATISTICS,0,0,0))
- DBUG_RETURN(mysql->net.last_error);
+ DBUG_RETURN(mysql->net.client_last_error);
DBUG_RETURN((*mysql->methods->read_statistics)(mysql));
}
@@ -1637,78 +1631,6 @@ mysql_real_escape_string(MYSQL *mysql, char *to,const char *from,
return escape_string_for_mysql(mysql->charset, to, 0, from, length);
}
-
-char * STDCALL
-mysql_odbc_escape_string(MYSQL *mysql,
- char *to, ulong to_length,
- const char *from, ulong from_length,
- void *param,
- char * (*extend_buffer)
- (void *, char *, ulong *))
-{
- char *to_end=to+to_length-5;
- const char *end;
-#ifdef USE_MB
- my_bool use_mb_flag=use_mb(mysql->charset);
-#endif
-
- for (end=from+from_length; from != end ; from++)
- {
- if (to >= to_end)
- {
- to_length = (ulong) (end-from)+512; /* We want this much more */
- if (!(to=(*extend_buffer)(param, to, &to_length)))
- return to;
- to_end=to+to_length-5;
- }
-#ifdef USE_MB
- {
- int l;
- if (use_mb_flag && (l = my_ismbchar(mysql->charset, from, end)))
- {
- while (l--)
- *to++ = *from++;
- from--;
- continue;
- }
- }
-#endif
- switch (*from) {
- case 0: /* Must be escaped for 'mysql' */
- *to++= '\\';
- *to++= '0';
- break;
- case '\n': /* Must be escaped for logs */
- *to++= '\\';
- *to++= 'n';
- break;
- case '\r':
- *to++= '\\';
- *to++= 'r';
- break;
- case '\\':
- *to++= '\\';
- *to++= '\\';
- break;
- case '\'':
- *to++= '\\';
- *to++= '\'';
- break;
- case '"': /* Better safe than sorry */
- *to++= '\\';
- *to++= '"';
- break;
- case '\032': /* This gives problems on Win32 */
- *to++= '\\';
- *to++= 'Z';
- break;
- default:
- *to++= *from;
- }
- }
- return to;
-}
-
void STDCALL
myodbc_remove_escape(MYSQL *mysql,char *name)
{
@@ -1848,24 +1770,17 @@ static my_bool my_realloc_str(NET *net, ulong length)
if (buf_length + length > net->max_packet)
{
res= net_realloc(net, buf_length + length);
+ if (res)
+ {
+ strmov(net->sqlstate, unknown_sqlstate);
+ strmov(net->client_last_error, ER(net->client_last_errno));
+ }
net->write_pos= net->buff+ buf_length;
}
DBUG_RETURN(res);
}
-/* Clear possible error statee of struct NET */
-
-static void net_clear_error(NET *net)
-{
- if (net->last_errno)
- {
- net->last_errno= 0;
- net->last_error[0]= '\0';
- strmov(net->sqlstate, not_error_sqlstate);
- }
-}
-
static void stmt_clear_error(MYSQL_STMT *stmt)
{
if (stmt->last_errno)
@@ -1876,18 +1791,21 @@ static void stmt_clear_error(MYSQL_STMT *stmt)
}
}
-/*
+/**
Set statement error code, sqlstate, and error message
from given errcode and sqlstate.
*/
-static void set_stmt_error(MYSQL_STMT * stmt, int errcode,
- const char *sqlstate)
+void set_stmt_error(MYSQL_STMT * stmt, int errcode,
+ const char *sqlstate, const char *err)
{
DBUG_ENTER("set_stmt_error");
DBUG_PRINT("enter", ("error: %d '%s'", errcode, ER(errcode)));
DBUG_ASSERT(stmt != 0);
+ if (err == 0)
+ err= ER(errcode);
+
stmt->last_errno= errcode;
strmov(stmt->last_error, ER(errcode));
strmov(stmt->sqlstate, sqlstate);
@@ -1896,21 +1814,26 @@ static void set_stmt_error(MYSQL_STMT * stmt, int errcode,
}
-/*
- Set statement error code, sqlstate, and error message.
+/**
+ Set statement error code, sqlstate, and error message from NET.
+
+ @param stmt a statement handle. Copy the error here.
+ @param net mysql->net. Source of the error.
*/
-void set_stmt_errmsg(MYSQL_STMT * stmt, const char *err, int errcode,
- const char *sqlstate)
+void set_stmt_errmsg(MYSQL_STMT *stmt, NET *net)
{
DBUG_ENTER("set_stmt_errmsg");
- DBUG_PRINT("enter", ("error: %d/%s '%s'", errcode, sqlstate, err));
+ DBUG_PRINT("enter", ("error: %d/%s '%s'",
+ net->client_last_errno,
+ net->sqlstate,
+ net->client_last_error));
DBUG_ASSERT(stmt != 0);
- stmt->last_errno= errcode;
- if (err && err[0])
- strmov(stmt->last_error, err);
- strmov(stmt->sqlstate, sqlstate);
+ stmt->last_errno= net->client_last_errno;
+ if (net->client_last_error && net->client_last_error[0])
+ strmov(stmt->last_error, net->client_last_error);
+ strmov(stmt->sqlstate, net->sqlstate);
DBUG_VOID_RETURN;
}
@@ -2085,7 +2008,7 @@ mysql_stmt_prepare(MYSQL_STMT *stmt, const char *query, ulong length)
if (!mysql)
{
/* mysql can be reset in mysql_close called from mysql_reconnect */
- set_stmt_error(stmt, CR_SERVER_LOST, unknown_sqlstate);
+ set_stmt_error(stmt, CR_SERVER_LOST, unknown_sqlstate, NULL);
DBUG_RETURN(1);
}
@@ -2123,23 +2046,20 @@ mysql_stmt_prepare(MYSQL_STMT *stmt, const char *query, ulong length)
stmt->state= MYSQL_STMT_INIT_DONE;
if (stmt_command(mysql, COM_STMT_CLOSE, buff, 4, stmt))
{
- set_stmt_errmsg(stmt, mysql->net.last_error, mysql->net.last_errno,
- mysql->net.sqlstate);
+ set_stmt_errmsg(stmt, &mysql->net);
DBUG_RETURN(1);
}
}
if (stmt_command(mysql, COM_STMT_PREPARE, (const uchar*) query, length, stmt))
{
- set_stmt_errmsg(stmt, mysql->net.last_error, mysql->net.last_errno,
- mysql->net.sqlstate);
+ set_stmt_errmsg(stmt, &mysql->net);
DBUG_RETURN(1);
}
if ((*mysql->methods->read_prepare_result)(mysql, stmt))
{
- set_stmt_errmsg(stmt, mysql->net.last_error, mysql->net.last_errno,
- mysql->net.sqlstate);
+ set_stmt_errmsg(stmt, &mysql->net);
DBUG_RETURN(1);
}
@@ -2154,7 +2074,7 @@ mysql_stmt_prepare(MYSQL_STMT *stmt, const char *query, ulong length)
(stmt->param_count +
stmt->field_count))))
{
- set_stmt_error(stmt, CR_OUT_OF_MEMORY, unknown_sqlstate);
+ set_stmt_error(stmt, CR_OUT_OF_MEMORY, unknown_sqlstate, NULL);
DBUG_RETURN(1);
}
stmt->bind= stmt->params + stmt->param_count;
@@ -2284,7 +2204,7 @@ mysql_stmt_result_metadata(MYSQL_STMT *stmt)
if (!(result=(MYSQL_RES*) my_malloc(sizeof(*result),
MYF(MY_WME | MY_ZEROFILL))))
{
- set_stmt_error(stmt, CR_OUT_OF_MEMORY, unknown_sqlstate);
+ set_stmt_error(stmt, CR_OUT_OF_MEMORY, unknown_sqlstate, NULL);
DBUG_RETURN(0);
}
@@ -2517,7 +2437,7 @@ static my_bool store_param(MYSQL_STMT *stmt, MYSQL_BIND *param)
*/
if ((my_realloc_str(net, *param->length)))
{
- set_stmt_error(stmt, net->last_errno, unknown_sqlstate);
+ set_stmt_errmsg(stmt, net);
DBUG_RETURN(1);
}
(*param->store_param_func)(net, param);
@@ -2554,7 +2474,7 @@ static my_bool execute(MYSQL_STMT *stmt, char *packet, ulong length)
stmt->insert_id= mysql->insert_id;
if (res)
{
- set_stmt_errmsg(stmt, net->last_error, net->last_errno, net->sqlstate);
+ set_stmt_errmsg(stmt, net);
DBUG_RETURN(1);
}
DBUG_RETURN(0);
@@ -2577,13 +2497,13 @@ int cli_stmt_execute(MYSQL_STMT *stmt)
if (!stmt->bind_param_done)
{
- set_stmt_error(stmt, CR_PARAMS_NOT_BOUND, unknown_sqlstate);
+ set_stmt_error(stmt, CR_PARAMS_NOT_BOUND, unknown_sqlstate, NULL);
DBUG_RETURN(1);
}
if (mysql->status != MYSQL_STATUS_READY ||
mysql->server_status & SERVER_MORE_RESULTS_EXISTS)
{
- set_stmt_error(stmt, CR_COMMANDS_OUT_OF_SYNC, unknown_sqlstate);
+ set_stmt_error(stmt, CR_COMMANDS_OUT_OF_SYNC, unknown_sqlstate, NULL);
DBUG_RETURN(1);
}
@@ -2592,7 +2512,7 @@ int cli_stmt_execute(MYSQL_STMT *stmt)
null_count= (stmt->param_count+7) /8;
if (my_realloc_str(net, null_count + 1))
{
- set_stmt_error(stmt, net->last_errno, unknown_sqlstate);
+ set_stmt_errmsg(stmt, net);
DBUG_RETURN(1);
}
bzero((char*) net->write_pos, null_count);
@@ -2605,7 +2525,7 @@ int cli_stmt_execute(MYSQL_STMT *stmt)
{
if (my_realloc_str(net, 2 * stmt->param_count))
{
- set_stmt_error(stmt, net->last_errno, unknown_sqlstate);
+ set_stmt_errmsg(stmt, net);
DBUG_RETURN(1);
}
/*
@@ -2628,7 +2548,7 @@ int cli_stmt_execute(MYSQL_STMT *stmt)
/* TODO: Look into avoding the following memdup */
if (!(param_data= my_memdup(net->buff, length, MYF(0))))
{
- set_stmt_error(stmt, CR_OUT_OF_MEMORY, unknown_sqlstate);
+ set_stmt_error(stmt, CR_OUT_OF_MEMORY, unknown_sqlstate, NULL);
DBUG_RETURN(1);
}
result= execute(stmt, param_data, length);
@@ -2692,20 +2612,19 @@ static int stmt_read_row_unbuffered(MYSQL_STMT *stmt, unsigned char **row)
*/
if (!mysql)
{
- set_stmt_error(stmt, CR_SERVER_LOST, unknown_sqlstate);
+ set_stmt_error(stmt, CR_SERVER_LOST, unknown_sqlstate, NULL);
return 1;
}
if (mysql->status != MYSQL_STATUS_GET_RESULT)
{
set_stmt_error(stmt, stmt->unbuffered_fetch_cancelled ?
CR_FETCH_CANCELED : CR_COMMANDS_OUT_OF_SYNC,
- unknown_sqlstate);
+ unknown_sqlstate, NULL);
goto error;
}
if ((*mysql->methods->unbuffered_fetch)(mysql, (char**) row))
{
- set_stmt_errmsg(stmt, mysql->net.last_error, mysql->net.last_errno,
- mysql->net.sqlstate);
+ set_stmt_errmsg(stmt, &mysql->net);
/*
If there was an error, there are no more pending rows:
reset statement status to not hang up in following
@@ -2766,7 +2685,7 @@ stmt_read_row_from_cursor(MYSQL_STMT *stmt, unsigned char **row)
buff, sizeof(buff), (uchar*) 0, 0,
1, NULL))
{
- set_stmt_errmsg(stmt, net->last_error, net->last_errno, net->sqlstate);
+ set_stmt_errmsg(stmt, net);
return 1;
}
if ((*mysql->methods->read_rows_from_cursor)(stmt))
@@ -2797,7 +2716,7 @@ static int
stmt_read_row_no_result_set(MYSQL_STMT *stmt __attribute__((unused)),
unsigned char **row __attribute__((unused)))
{
- set_stmt_error(stmt, CR_NO_RESULT_SET, unknown_sqlstate);
+ set_stmt_error(stmt, CR_NO_RESULT_SET, unknown_sqlstate, NULL);
return 1;
}
@@ -2847,7 +2766,7 @@ my_bool STDCALL mysql_stmt_attr_set(MYSQL_STMT *stmt,
}
return FALSE;
err_not_implemented:
- set_stmt_error(stmt, CR_NOT_IMPLEMENTED, unknown_sqlstate);
+ set_stmt_error(stmt, CR_NOT_IMPLEMENTED, unknown_sqlstate, NULL);
return TRUE;
}
@@ -3232,7 +3151,7 @@ my_bool STDCALL mysql_stmt_bind_param(MYSQL_STMT *stmt, MYSQL_BIND *my_bind)
{
if ((int) stmt->state < (int) MYSQL_STMT_PREPARE_DONE)
{
- set_stmt_error(stmt, CR_NO_PREPARE_STMT, unknown_sqlstate);
+ set_stmt_error(stmt, CR_NO_PREPARE_STMT, unknown_sqlstate, NULL);
DBUG_RETURN(1);
}
DBUG_RETURN(0);
@@ -3397,7 +3316,7 @@ mysql_stmt_send_long_data(MYSQL_STMT *stmt, uint param_number,
*/
if (param_number >= stmt->param_count)
{
- set_stmt_error(stmt, CR_INVALID_PARAMETER_NO, unknown_sqlstate);
+ set_stmt_error(stmt, CR_INVALID_PARAMETER_NO, unknown_sqlstate, NULL);
DBUG_RETURN(1);
}
@@ -3433,8 +3352,7 @@ mysql_stmt_send_long_data(MYSQL_STMT *stmt, uint param_number,
buff, sizeof(buff), (uchar*) data,
length, 1, NULL))
{
- set_stmt_errmsg(stmt, mysql->net.last_error,
- mysql->net.last_errno, mysql->net.sqlstate);
+ set_stmt_errmsg(stmt, &mysql->net);
DBUG_RETURN(1);
}
}
@@ -3903,7 +3821,8 @@ static void fetch_float_with_conversion(MYSQL_BIND *param, MYSQL_FIELD *field,
if (field->flags & ZEROFILL_FLAG && length < field->length &&
field->length < MAX_DOUBLE_STRING_REP_LENGTH - 1)
{
- bmove_upp((char*) buff + field->length, buff + length, length);
+ bmove_upp((uchar*) buff + field->length, (uchar*) buff + length,
+ length);
bfill((char*) buff, field->length - length, '0');
length= field->length;
}
@@ -4401,6 +4320,7 @@ static my_bool setup_one_fetch_function(MYSQL_BIND *param, MYSQL_FIELD *field)
case MYSQL_TYPE_STRING:
case MYSQL_TYPE_DECIMAL:
case MYSQL_TYPE_NEWDECIMAL:
+ case MYSQL_TYPE_NEWDATE:
DBUG_ASSERT(param->buffer_length != 0);
param->fetch_result= fetch_result_str;
break;
@@ -4473,6 +4393,7 @@ static my_bool setup_one_fetch_function(MYSQL_BIND *param, MYSQL_FIELD *field)
case MYSQL_TYPE_VAR_STRING:
case MYSQL_TYPE_STRING:
case MYSQL_TYPE_BIT:
+ case MYSQL_TYPE_NEWDATE:
param->skip_result= skip_result_string;
break;
default:
@@ -4500,7 +4421,7 @@ my_bool STDCALL mysql_stmt_bind_result(MYSQL_STMT *stmt, MYSQL_BIND *my_bind)
{
int errorcode= (int) stmt->state < (int) MYSQL_STMT_PREPARE_DONE ?
CR_NO_PREPARE_STMT : CR_NO_STMT_METADATA;
- set_stmt_error(stmt, errorcode, unknown_sqlstate);
+ set_stmt_error(stmt, errorcode, unknown_sqlstate, NULL);
DBUG_RETURN(1);
}
@@ -4680,12 +4601,12 @@ int STDCALL mysql_stmt_fetch_column(MYSQL_STMT *stmt, MYSQL_BIND *my_bind,
if ((int) stmt->state < (int) MYSQL_STMT_FETCH_DONE)
{
- set_stmt_error(stmt, CR_NO_DATA, unknown_sqlstate);
+ set_stmt_error(stmt, CR_NO_DATA, unknown_sqlstate, NULL);
return 1;
}
if (column >= stmt->field_count)
{
- set_stmt_error(stmt, CR_INVALID_PARAMETER_NO, unknown_sqlstate);
+ set_stmt_error(stmt, CR_INVALID_PARAMETER_NO, unknown_sqlstate, NULL);
DBUG_RETURN(1);
}
@@ -4731,7 +4652,7 @@ int cli_read_binary_rows(MYSQL_STMT *stmt)
if (!mysql)
{
- set_stmt_error(stmt, CR_SERVER_LOST, unknown_sqlstate);
+ set_stmt_error(stmt, CR_SERVER_LOST, unknown_sqlstate, NULL);
DBUG_RETURN(1);
}
@@ -4746,7 +4667,7 @@ int cli_read_binary_rows(MYSQL_STMT *stmt)
if (!(cur= (MYSQL_ROWS*) alloc_root(&result->alloc,
sizeof(MYSQL_ROWS) + pkt_len - 1)))
{
- set_stmt_error(stmt, CR_OUT_OF_MEMORY, unknown_sqlstate);
+ set_stmt_error(stmt, CR_OUT_OF_MEMORY, unknown_sqlstate, NULL);
goto err;
}
cur->data= (MYSQL_ROW) (cur+1);
@@ -4767,7 +4688,7 @@ int cli_read_binary_rows(MYSQL_STMT *stmt)
DBUG_RETURN(0);
}
}
- set_stmt_errmsg(stmt, net->last_error, net->last_errno, net->sqlstate);
+ set_stmt_errmsg(stmt, net);
err:
DBUG_RETURN(1);
@@ -4834,7 +4755,7 @@ int STDCALL mysql_stmt_store_result(MYSQL_STMT *stmt)
if ((int) stmt->state < (int) MYSQL_STMT_EXECUTE_DONE)
{
- set_stmt_error(stmt, CR_COMMANDS_OUT_OF_SYNC, unknown_sqlstate);
+ set_stmt_error(stmt, CR_COMMANDS_OUT_OF_SYNC, unknown_sqlstate, NULL);
DBUG_RETURN(1);
}
@@ -4854,13 +4775,13 @@ int STDCALL mysql_stmt_store_result(MYSQL_STMT *stmt)
if (cli_advanced_command(mysql, COM_STMT_FETCH, buff, sizeof(buff),
(uchar*) 0, 0, 1, NULL))
{
- set_stmt_errmsg(stmt, net->last_error, net->last_errno, net->sqlstate);
+ set_stmt_errmsg(stmt, net);
DBUG_RETURN(1);
}
}
else if (mysql->status != MYSQL_STATUS_GET_RESULT)
{
- set_stmt_error(stmt, CR_COMMANDS_OUT_OF_SYNC, unknown_sqlstate);
+ set_stmt_error(stmt, CR_COMMANDS_OUT_OF_SYNC, unknown_sqlstate, NULL);
DBUG_RETURN(1);
}
@@ -5041,8 +4962,7 @@ static my_bool reset_stmt_handle(MYSQL_STMT *stmt, uint flags)
if ((*mysql->methods->advanced_command)(mysql, COM_STMT_RESET, buff,
sizeof(buff), 0, 0, 0, NULL))
{
- set_stmt_errmsg(stmt, mysql->net.last_error, mysql->net.last_errno,
- mysql->net.sqlstate);
+ set_stmt_errmsg(stmt, &mysql->net);
stmt->state= MYSQL_STMT_INIT_DONE;
return 1;
}
@@ -5115,8 +5035,7 @@ my_bool STDCALL mysql_stmt_close(MYSQL_STMT *stmt)
int4store(buff, stmt->stmt_id);
if ((rc= stmt_command(mysql, COM_STMT_CLOSE, buff, 4, stmt)))
{
- set_stmt_errmsg(stmt, mysql->net.last_error, mysql->net.last_errno,
- mysql->net.sqlstate);
+ set_stmt_errmsg(stmt, &mysql->net);
}
}
}
@@ -5137,7 +5056,7 @@ my_bool STDCALL mysql_stmt_reset(MYSQL_STMT *stmt)
if (!stmt->mysql)
{
/* mysql can be reset in mysql_close called from mysql_reconnect */
- set_stmt_error(stmt, CR_SERVER_LOST, unknown_sqlstate);
+ set_stmt_error(stmt, CR_SERVER_LOST, unknown_sqlstate, NULL);
DBUG_RETURN(1);
}
/* Reset the client and server sides of the prepared statement */
@@ -5241,15 +5160,11 @@ int STDCALL mysql_next_result(MYSQL *mysql)
if (mysql->status != MYSQL_STATUS_READY)
{
- strmov(mysql->net.sqlstate, unknown_sqlstate);
- strmov(mysql->net.last_error,
- ER(mysql->net.last_errno=CR_COMMANDS_OUT_OF_SYNC));
+ set_mysql_error(mysql, CR_COMMANDS_OUT_OF_SYNC, unknown_sqlstate);
DBUG_RETURN(1);
}
- mysql->net.last_error[0]= 0;
- mysql->net.last_errno= 0;
- strmov(mysql->net.sqlstate, not_error_sqlstate);
+ net_clear_error(&mysql->net);
mysql->affected_rows= ~(my_ulonglong) 0;
if (mysql->last_used_con->server_status & SERVER_MORE_RESULTS_EXISTS)
diff --git a/libmysql/libmysql.def b/libmysql/libmysql.def
index 8c6b71d9553..81f86dc8726 100644
--- a/libmysql/libmysql.def
+++ b/libmysql/libmysql.def
@@ -78,7 +78,6 @@ EXPORTS
mysql_next_result
mysql_num_fields
mysql_num_rows
- mysql_odbc_escape_string
mysql_options
mysql_stmt_param_count
mysql_stmt_param_metadata
diff --git a/libmysql/manager.c b/libmysql/manager.c
index 53ffffa55c0..27d35758f3e 100644
--- a/libmysql/manager.c
+++ b/libmysql/manager.c
@@ -160,7 +160,7 @@ MYSQL_MANAGER* STDCALL mysql_manager_connect(MYSQL_MANAGER* con,
msg_len=strlen(msg_buf);
if (my_net_write(&con->net,(uchar*) msg_buf,msg_len) || net_flush(&con->net))
{
- con->last_errno=con->net.last_errno;
+ con->last_errno=con->net.client_last_errno;
strmov(con->last_error,"Write error on socket");
goto err;
}
diff --git a/libmysql/mytest.c b/libmysql/mytest.c
deleted file mode 100644
index 2d5c576b72a..00000000000
--- a/libmysql/mytest.c
+++ /dev/null
@@ -1,175 +0,0 @@
-/*C4*/
-/****************************************************************/
-/* Author: Jethro Wright, III TS : 3/ 4/1998 9:15 */
-/* Date: 02/18/1998 */
-/* mytest.c : do some testing of the libmySQL.DLL.... */
-/* */
-/* History: */
-/* 02/18/1998 jw3 also sprach zarathustra.... */
-/****************************************************************/
-
-
-#include <windows.h>
-#include <stdio.h>
-#include <string.h>
-
-#include <mysql.h>
-
-#define DEFALT_SQL_STMT "SELECT * FROM db"
-#ifndef offsetof
-#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
-#endif
-
-
-/********************************************************
-**
-** main :-
-**
-********************************************************/
-
-int
-main( int argc, char * argv[] )
-{
-
- char szSQL[ 200 ], aszFlds[ 25 ][ 25 ], szDB[ 50 ] ;
- const char *pszT;
- int i, j, k, l, x ;
- MYSQL * myData ;
- MYSQL_RES * res ;
- MYSQL_FIELD * fd ;
- MYSQL_ROW row ;
-
- //....just curious....
- printf( "sizeof( MYSQL ) == %d\n", (int) sizeof( MYSQL ) ) ;
- if ( argc == 2 )
- {
- strcpy( szDB, argv[ 1 ] ) ;
- strcpy( szSQL, DEFALT_SQL_STMT ) ;
- if (!strcmp(szDB,"--debug"))
- {
- strcpy( szDB, "mysql" ) ;
- printf("Some mysql struct information (size and offset):\n");
- printf("net:\t%3d %3d\n",(int) sizeof(myData->net),
- (int) offsetof(MYSQL,net));
- printf("host:\t%3d %3d\n",(int) sizeof(myData->host),
- (int) offsetof(MYSQL,host));
- printf("port:\t%3d %3d\n", (int) sizeof(myData->port),
- (int) offsetof(MYSQL,port));
- printf("protocol_version:\t%3d %3d\n",
- (int) sizeof(myData->protocol_version),
- (int) offsetof(MYSQL,protocol_version));
- printf("thread_id:\t%3d %3d\n",(int) sizeof(myData->thread_id),
- (int) offsetof(MYSQL,thread_id));
- printf("affected_rows:\t%3d %3d\n",(int) sizeof(myData->affected_rows),
- (int) offsetof(MYSQL,affected_rows));
- printf("packet_length:\t%3d %3d\n",(int) sizeof(myData->packet_length),
- (int) offsetof(MYSQL,packet_length));
- printf("status:\t%3d %3d\n",(int) sizeof(myData->status),
- (int) offsetof(MYSQL,status));
- printf("fields:\t%3d %3d\n",(int) sizeof(myData->fields),
- (int) offsetof(MYSQL,fields));
- printf("field_alloc:\t%3d %3d\n",(int) sizeof(myData->field_alloc),
- (int) offsetof(MYSQL,field_alloc));
- printf("free_me:\t%3d %3d\n",(int) sizeof(myData->free_me),
- (int) offsetof(MYSQL,free_me));
- printf("options:\t%3d %3d\n",(int) sizeof(myData->options),
- (int) offsetof(MYSQL,options));
- puts("");
- }
- }
- else if ( argc > 2 ) {
- strcpy( szDB, argv[ 1 ] ) ;
- strcpy( szSQL, argv[ 2 ] ) ;
- }
- else {
- strcpy( szDB, "mysql" ) ;
- strcpy( szSQL, DEFALT_SQL_STMT ) ;
- }
- //....
-
- if ( (myData = mysql_init((MYSQL*) 0)) &&
- mysql_real_connect( myData, NULL, NULL, NULL, NULL, MYSQL_PORT,
- NULL, 0 ) )
- {
- myData->reconnect= 1;
- if ( mysql_select_db( myData, szDB ) < 0 ) {
- printf( "Can't select the %s database !\n", szDB ) ;
- mysql_close( myData ) ;
- return 2 ;
- }
- }
- else {
- printf( "Can't connect to the mysql server on port %d !\n",
- MYSQL_PORT ) ;
- mysql_close( myData ) ;
- return 1 ;
- }
- //....
- if ( ! mysql_query( myData, szSQL ) ) {
- res = mysql_store_result( myData ) ;
- i = (int) mysql_num_rows( res ) ; l = 1 ;
- printf( "Query: %s\nNumber of records found: %ld\n", szSQL, i ) ;
- //....we can get the field-specific characteristics here....
- for ( x = 0 ; fd = mysql_fetch_field( res ) ; x++ )
- strcpy( aszFlds[ x ], fd->name ) ;
- //....
- while ( row = mysql_fetch_row( res ) ) {
- j = mysql_num_fields( res ) ;
- printf( "Record #%ld:-\n", l++ ) ;
- for ( k = 0 ; k < j ; k++ )
- printf( " Fld #%d (%s): %s\n", k + 1, aszFlds[ k ],
- (((row[k]==NULL)||(!strlen(row[k])))?"NULL":row[k])) ;
- puts( "==============================\n" ) ;
- }
- mysql_free_result( res ) ;
- }
- else printf( "Couldn't execute %s on the server !\n", szSQL ) ;
- //....
- puts( "==== Diagnostic info ====" ) ;
- pszT = mysql_get_client_info() ;
- printf( "Client info: %s\n", pszT ) ;
- //....
- pszT = mysql_get_host_info( myData ) ;
- printf( "Host info: %s\n", pszT ) ;
- //....
- pszT = mysql_get_server_info( myData ) ;
- printf( "Server info: %s\n", pszT ) ;
- //....
- res = mysql_list_processes( myData ) ; l = 1 ;
- if (res)
- {
- for ( x = 0 ; fd = mysql_fetch_field( res ) ; x++ )
- strcpy( aszFlds[ x ], fd->name ) ;
- while ( row = mysql_fetch_row( res ) ) {
- j = mysql_num_fields( res ) ;
- printf( "Process #%ld:-\n", l++ ) ;
- for ( k = 0 ; k < j ; k++ )
- printf( " Fld #%d (%s): %s\n", k + 1, aszFlds[ k ],
- (((row[k]==NULL)||(!strlen(row[k])))?"NULL":row[k])) ;
- puts( "==============================\n" ) ;
- }
- }
- else
- {
- printf("Got error %s when retreiving processlist\n",mysql_error(myData));
- }
- //....
- res = mysql_list_tables( myData, "%" ) ; l = 1 ;
- for ( x = 0 ; fd = mysql_fetch_field( res ) ; x++ )
- strcpy( aszFlds[ x ], fd->name ) ;
- while ( row = mysql_fetch_row( res ) ) {
- j = mysql_num_fields( res ) ;
- printf( "Table #%ld:-\n", l++ ) ;
- for ( k = 0 ; k < j ; k++ )
- printf( " Fld #%d (%s): %s\n", k + 1, aszFlds[ k ],
- (((row[k]==NULL)||(!strlen(row[k])))?"NULL":row[k])) ;
- puts( "==============================\n" ) ;
- }
- //....
- pszT = mysql_stat( myData ) ;
- puts( pszT ) ;
- //....
- mysql_close( myData ) ;
- return 0 ;
-
-}
diff --git a/libmysql_r/Makefile.am b/libmysql_r/Makefile.am
index 2ff4082b014..4a37dcfdec9 100644
--- a/libmysql_r/Makefile.am
+++ b/libmysql_r/Makefile.am
@@ -41,6 +41,7 @@ link_sources:
@LN_CP_F@ $$d/$$f $$f; \
done; \
done
+ echo timestamp > link_sources
# Don't update the files from bitkeeper
%::SCCS/s.%
diff --git a/libmysqld/CMakeLists.txt b/libmysqld/CMakeLists.txt
index fb3316c303c..9fa7d46d466 100644
--- a/libmysqld/CMakeLists.txt
+++ b/libmysqld/CMakeLists.txt
@@ -22,7 +22,7 @@ IF(WIN32)
ADD_DEFINITIONS(-DUSE_TLS)
ENDIF(WIN32)
-ADD_DEFINITIONS(-DMYSQL_SERVER -DEMBEDDED_LIBRARY)
+ADD_DEFINITIONS(-DMYSQL_SERVER -DEMBEDDED_LIBRARY -DHAVE_DLOPEN)
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include
${CMAKE_SOURCE_DIR}/libmysqld
diff --git a/libmysqld/Makefile.am b/libmysqld/Makefile.am
index c0784447216..5d673bb340e 100644
--- a/libmysqld/Makefile.am
+++ b/libmysqld/Makefile.am
@@ -59,6 +59,7 @@ sqlsources = derror.cc field.cc field_conv.cc strfunc.cc filesort.cc \
protocol.cc net_serv.cc opt_range.cc \
opt_sum.cc procedure.cc records.cc sql_acl.cc \
sql_load.cc discover.cc sql_locale.cc \
+ sql_profile.cc \
sql_analyse.cc sql_base.cc sql_cache.cc sql_class.cc \
sql_crypt.cc sql_db.cc sql_delete.cc sql_error.cc sql_insert.cc \
sql_lex.cc sql_list.cc sql_manager.cc sql_map.cc \
diff --git a/libmysqld/emb_qcache.cc b/libmysqld/emb_qcache.cc
index 17549bfa96b..fdd7f8ed776 100644
--- a/libmysqld/emb_qcache.cc
+++ b/libmysqld/emb_qcache.cc
@@ -19,7 +19,7 @@
#include "emb_qcache.h"
#include "embedded_priv.h"
-void Querycache_stream::store_char(char c)
+void Querycache_stream::store_uchar(uchar c)
{
if (data_end == cur_data)
use_next_block(TRUE);
@@ -142,7 +142,7 @@ void Querycache_stream::store_safe_str(const char *str, uint str_len)
store_int(0);
}
-char Querycache_stream::load_char()
+uchar Querycache_stream::load_uchar()
{
if (cur_data == data_end)
use_next_block(FALSE);
@@ -301,8 +301,8 @@ uint emb_count_querycache_size(THD *thd)
*data->embedded_info->prev_ptr= NULL; // this marks the last record
cur_row= data->data;
n_rows= data->rows;
- /* n_fields + n_rows + (field_info + strlen * n_rows) * n_fields */
- result+= (uint) (4+8 + (42 + 4*n_rows)*data->fields);
+ /* n_fields + n_rows + field_info * n_fields */
+ result+= (uint) (4+8 + 42*data->fields);
for(; field < field_end; field++)
{
@@ -313,13 +313,23 @@ uint emb_count_querycache_size(THD *thd)
result+= field->def_length;
}
- for (; cur_row; cur_row=cur_row->next)
+ if (thd->protocol == &thd->protocol_binary)
{
- MYSQL_ROW col= cur_row->data;
- MYSQL_ROW col_end= col + data->fields;
- for (; col < col_end; col++)
- if (*col)
- result+= *(uint *)((*col) - sizeof(uint));
+ result+= (uint) (4*n_rows);
+ for (; cur_row; cur_row=cur_row->next)
+ result+= cur_row->length;
+ }
+ else
+ {
+ result+= (uint) (4*n_rows*data->fields);
+ for (; cur_row; cur_row=cur_row->next)
+ {
+ MYSQL_ROW col= cur_row->data;
+ MYSQL_ROW col_end= col + data->fields;
+ for (; col < col_end; col++)
+ if (*col)
+ result+= *(uint *)((*col) - sizeof(uint));
+ }
}
return result;
}
@@ -353,10 +363,10 @@ void emb_store_querycache_result(Querycache_stream *dst, THD *thd)
{
dst->store_int((uint)field->length);
dst->store_int((uint)field->max_length);
- dst->store_char((char)field->type);
+ dst->store_uchar((uchar)field->type);
dst->store_short((ushort)field->flags);
dst->store_short((ushort)field->charsetnr);
- dst->store_char((char)field->decimals);
+ dst->store_uchar((uchar)field->decimals);
dst->store_str(field->name, field->name_length);
dst->store_str(field->table, field->table_length);
dst->store_str(field->org_name, field->org_name_length);
@@ -366,14 +376,22 @@ void emb_store_querycache_result(Querycache_stream *dst, THD *thd)
dst->store_safe_str(field->def, field->def_length);
}
- for (; cur_row; cur_row=cur_row->next)
+ if (thd->protocol == &thd->protocol_binary)
{
- MYSQL_ROW col= cur_row->data;
- MYSQL_ROW col_end= col + data->fields;
- for (; col < col_end; col++)
+ for (; cur_row; cur_row=cur_row->next)
+ dst->store_str((char *) cur_row->data, cur_row->length);
+ }
+ else
+ {
+ for (; cur_row; cur_row=cur_row->next)
{
- uint len= *col ? *(uint *)((*col) - sizeof(uint)) : 0;
- dst->store_safe_str(*col, len);
+ MYSQL_ROW col= cur_row->data;
+ MYSQL_ROW col_end= col + data->fields;
+ for (; col < col_end; col++)
+ {
+ uint len= *col ? *(uint *)((*col) - sizeof(uint)) : 0;
+ dst->store_safe_str(*col, len);
+ }
}
}
DBUG_ASSERT(emb_count_querycache_size(thd) == dst->stored_size);
@@ -408,10 +426,10 @@ int emb_load_querycache_result(THD *thd, Querycache_stream *src)
{
field->length= src->load_int();
field->max_length= (unsigned int)src->load_int();
- field->type= (enum enum_field_types)src->load_char();
+ field->type= (enum enum_field_types)src->load_uchar();
field->flags= (unsigned int)src->load_short();
field->charsetnr= (unsigned int)src->load_short();
- field->decimals= (unsigned int)src->load_char();
+ field->decimals= src->load_uchar();
if (!(field->name= src->load_str(f_alloc, &field->name_length)) ||
!(field->table= src->load_str(f_alloc,&field->table_length)) ||
@@ -423,31 +441,48 @@ int emb_load_querycache_result(THD *thd, Querycache_stream *src)
goto err;
}
- row= (MYSQL_ROWS *)alloc_root(&data->alloc,
- (uint) (rows * sizeof(MYSQL_ROWS) +
- rows*(data->fields+1)*sizeof(char*)));
- end_row= row + rows;
- columns= (MYSQL_ROW)end_row;
-
data->rows= rows;
- data->data= row;
if (!rows)
goto return_ok;
+ if (thd->protocol == &thd->protocol_binary)
+ {
+ uint length;
+ row= (MYSQL_ROWS *)alloc_root(&data->alloc, rows * sizeof(MYSQL_ROWS));
+ end_row= row + rows;
+ data->data= row;
- for (prev_row= &row->next; row < end_row; prev_row= &row->next, row++)
+ for (prev_row= &row->next; row < end_row; prev_row= &row->next, row++)
+ {
+ *prev_row= row;
+ row->data= (MYSQL_ROW) src->load_str(&data->alloc, &length);
+ row->length= length;
+ }
+ }
+ else
{
- *prev_row= row;
- row->data= columns;
- MYSQL_ROW col_end= columns + data->fields;
- for (; columns < col_end; columns++)
- src->load_column(&data->alloc, columns);
+ row= (MYSQL_ROWS *)alloc_root(&data->alloc,
+ (uint) (rows * sizeof(MYSQL_ROWS) +
+ rows*(data->fields+1)*sizeof(char*)));
+ end_row= row + rows;
+ columns= (MYSQL_ROW)end_row;
- *(columns++)= NULL;
+ data->data= row;
+
+ for (prev_row= &row->next; row < end_row; prev_row= &row->next, row++)
+ {
+ *prev_row= row;
+ row->data= columns;
+ MYSQL_ROW col_end= columns + data->fields;
+ for (; columns < col_end; columns++)
+ src->load_column(&data->alloc, columns);
+
+ *(columns++)= NULL;
+ }
}
*prev_row= NULL;
data->embedded_info->prev_ptr= prev_row;
return_ok:
- send_eof(thd);
+ net_send_eof(thd, thd->server_status, thd->total_warn_count);
DBUG_RETURN(0);
err:
DBUG_RETURN(1);
diff --git a/libmysqld/emb_qcache.h b/libmysqld/emb_qcache.h
index 6e320fbd967..67413739f2c 100644
--- a/libmysqld/emb_qcache.h
+++ b/libmysqld/emb_qcache.h
@@ -58,7 +58,7 @@ public:
data_end= cur_data + (block->used-headers_len);
}
- void store_char(char c);
+ void store_uchar(uchar c);
void store_short(ushort s);
void store_int(uint i);
void store_ll(ulonglong ll);
@@ -66,7 +66,7 @@ public:
void store_str(const char *str, uint str_len);
void store_safe_str(const char *str, uint str_len);
- char load_char();
+ uchar load_uchar();
ushort load_short();
uint load_int();
ulonglong load_ll();
@@ -79,3 +79,4 @@ public:
uint emb_count_querycache_size(THD *thd);
int emb_load_querycache_result(THD *thd, Querycache_stream *src);
void emb_store_querycache_result(Querycache_stream *dst, THD* thd);
+void net_send_eof(THD *thd, uint server_status, uint total_warn_count);
diff --git a/libmysqld/lib_sql.cc b/libmysqld/lib_sql.cc
index 4e525f8447f..cb3b6a7115d 100644
--- a/libmysqld/lib_sql.cc
+++ b/libmysqld/lib_sql.cc
@@ -61,9 +61,10 @@ void embedded_get_error(MYSQL *mysql, MYSQL_DATA *data)
{
NET *net= &mysql->net;
struct embedded_query_result *ei= data->embedded_info;
- net->last_errno= ei->last_errno;
- strmake(net->last_error, ei->info, sizeof(net->last_error));
+ net->client_last_errno= ei->last_errno;
+ strmake(net->client_last_error, ei->info, sizeof(net->client_last_error)-1);
memcpy(net->sqlstate, ei->sqlstate, sizeof(net->sqlstate));
+ mysql->server_status= ei->server_status;
my_free(data, MYF(0));
}
@@ -77,23 +78,28 @@ emb_advanced_command(MYSQL *mysql, enum enum_server_command command,
THD *thd=(THD *) mysql->thd;
NET *net= &mysql->net;
+#if defined(ENABLED_PROFILING) && defined(COMMUNITY_SERVER)
+ thd->profiling.start_new_query();
+#endif
+
thd->clear_data_list();
/* Check that we are calling the client functions in right order */
if (mysql->status != MYSQL_STATUS_READY)
{
- strmov(net->last_error,
- ER(net->last_errno=CR_COMMANDS_OUT_OF_SYNC));
+ set_mysql_error(mysql, CR_COMMANDS_OUT_OF_SYNC, unknown_sqlstate);
return 1;
}
/* Clear result variables */
thd->clear_error();
+ thd->main_da.reset_diagnostics_area();
mysql->affected_rows= ~(my_ulonglong) 0;
mysql->field_count= 0;
- net->last_errno= 0;
+ net_clear_error(net);
thd->current_stmt= stmt;
thd->store_globals(); // Fix if more than one connect
+ lex_start(thd);
/*
We have to call free_old_query before we start to fill mysql->fields
for new query. In the case of embedded server we collect field data
@@ -110,13 +116,15 @@ emb_advanced_command(MYSQL *mysql, enum enum_server_command command,
arg_length= header_length;
}
- thd->net.no_send_error= 0;
result= dispatch_command(command, thd, (char *) arg, arg_length);
thd->cur_data= 0;
if (!skip_check)
- result= thd->net.last_errno ? -1 : 0;
+ result= thd->is_error() ? -1 : 0;
+#if defined(ENABLED_PROFILING) && defined(COMMUNITY_SERVER)
+ thd->profiling.finish_current_query();
+#endif
return result;
}
@@ -242,11 +250,12 @@ static my_bool emb_read_query_result(MYSQL *mysql)
mysql->warning_count= res->embedded_info->warning_count;
mysql->server_status= res->embedded_info->server_status;
mysql->field_count= res->fields;
- mysql->fields= res->embedded_info->fields_list;
- mysql->affected_rows= res->embedded_info->affected_rows;
- mysql->insert_id= res->embedded_info->insert_id;
- mysql->net.last_errno= 0;
- mysql->net.last_error[0]= 0;
+ if (!(mysql->fields= res->embedded_info->fields_list))
+ {
+ mysql->affected_rows= res->embedded_info->affected_rows;
+ mysql->insert_id= res->embedded_info->insert_id;
+ }
+ net_clear_error(&mysql->net);
mysql->info= 0;
if (res->embedded_info->info[0])
@@ -288,7 +297,7 @@ static int emb_stmt_execute(MYSQL_STMT *stmt)
if (res)
{
NET *net= &stmt->mysql->net;
- set_stmt_errmsg(stmt, net->last_error, net->last_errno, net->sqlstate);
+ set_stmt_errmsg(stmt, net);
DBUG_RETURN(1);
}
DBUG_RETURN(0);
@@ -299,14 +308,12 @@ int emb_read_binary_rows(MYSQL_STMT *stmt)
MYSQL_DATA *data;
if (!(data= emb_read_rows(stmt->mysql, 0, 0)))
{
- set_stmt_errmsg(stmt, stmt->mysql->net.last_error,
- stmt->mysql->net.last_errno, stmt->mysql->net.sqlstate);
+ set_stmt_errmsg(stmt, &stmt->mysql->net);
return 1;
}
stmt->result= *data;
my_free((char *) data, MYF(0));
- set_stmt_errmsg(stmt, stmt->mysql->net.last_error,
- stmt->mysql->net.last_errno, stmt->mysql->net.sqlstate);
+ set_stmt_errmsg(stmt, &stmt->mysql->net);
return 0;
}
@@ -320,16 +327,14 @@ int emb_read_rows_from_cursor(MYSQL_STMT *stmt)
if (res->embedded_info->last_errno)
{
embedded_get_error(mysql, res);
- set_stmt_errmsg(stmt, mysql->net.last_error,
- mysql->net.last_errno, mysql->net.sqlstate);
+ set_stmt_errmsg(stmt, &mysql->net);
return 1;
}
thd->cur_data= res;
mysql->warning_count= res->embedded_info->warning_count;
mysql->server_status= res->embedded_info->server_status;
- mysql->net.last_errno= 0;
- mysql->net.last_error[0]= 0;
+ net_clear_error(&mysql->net);
return emb_read_binary_rows(stmt);
}
@@ -375,7 +380,7 @@ static void emb_free_embedded_thd(MYSQL *mysql)
static const char * emb_read_statistics(MYSQL *mysql)
{
THD *thd= (THD*)mysql->thd;
- return thd->net.last_error;
+ return thd->is_error() ? thd->main_da.message() : "";
}
@@ -551,7 +556,6 @@ void end_embedded_server()
{
my_free((char*) copy_arguments_ptr, MYF(MY_ALLOW_ZERO_PTR));
copy_arguments_ptr=0;
- release_ddl_log();
clean_up(0);
}
@@ -586,6 +590,7 @@ void *create_embedded_thd(int client_flag)
fprintf(stderr,"store_globals failed.\n");
goto err;
}
+ lex_start(thd);
/* TODO - add init_connect command execution */
@@ -630,6 +635,7 @@ int check_embedded_connection(MYSQL *mysql, const char *db)
strmake(sctx->priv_host, (char*) my_localhost, MAX_HOSTNAME-1);
sctx->priv_user= sctx->user= my_strdup(mysql->user, MYF(0));
result= check_user(thd, COM_CONNECT, NULL, 0, db, true);
+ net_end_statement(thd);
emb_read_query_result(mysql);
return result;
}
@@ -679,8 +685,10 @@ int check_embedded_connection(MYSQL *mysql, const char *db)
err:
{
NET *net= &mysql->net;
- memcpy(net->last_error, thd->net.last_error, sizeof(net->last_error));
- memcpy(net->sqlstate, thd->net.sqlstate, sizeof(net->sqlstate));
+ strmake(net->client_last_error, thd->main_da.message(), sizeof(net->client_last_error)-1);
+ memcpy(net->sqlstate,
+ mysql_errno_to_sqlstate(thd->main_da.sql_errno()),
+ sizeof(net->sqlstate)-1);
}
return result;
}
@@ -703,9 +711,8 @@ void THD::clear_data_list()
void THD::clear_error()
{
- net.last_error[0]= 0;
- net.last_errno= 0;
- net.report_error= 0;
+ if (main_da.is_error())
+ main_da.reset_diagnostics_area();
}
static char *dup_str_aux(MEM_ROOT *root, const char *from, uint length,
@@ -768,20 +775,18 @@ MYSQL_DATA *THD::alloc_new_dataset()
}
-/*
- stores server_status and warning_count in the current
- query result structures
-
- SYNOPSIS
- write_eof_packet()
- thd current thread
+/**
+ Stores server_status and warning_count in the current
+ query result structures.
- NOTES
- should be called to after we get the recordset-result
+ @param thd current thread
+ @note Should be called after we get the recordset-result.
*/
-static void write_eof_packet(THD *thd)
+static
+void
+write_eof_packet(THD *thd, uint server_status, uint total_warn_count)
{
if (!thd->mysql) // bootstrap file handling
return;
@@ -792,13 +797,13 @@ static void write_eof_packet(THD *thd)
*/
if (thd->is_fatal_error)
thd->server_status&= ~SERVER_MORE_RESULTS_EXISTS;
- thd->cur_data->embedded_info->server_status= thd->server_status;
+ thd->cur_data->embedded_info->server_status= server_status;
/*
Don't send warn count during SP execution, as the warn_list
is cleared between substatements, and mysqltest gets confused
*/
thd->cur_data->embedded_info->warning_count=
- (thd->spcont ? 0 : min(thd->total_warn_count, 65535));
+ (thd->spcont ? 0 : min(total_warn_count, 65535));
}
@@ -954,7 +959,7 @@ bool Protocol::send_fields(List<Item> *list, uint flags)
}
if (flags & SEND_EOF)
- write_eof_packet(thd);
+ write_eof_packet(thd, thd->server_status, thd->total_warn_count);
DBUG_RETURN(prepare_for_send(list));
err:
@@ -994,17 +999,35 @@ bool Protocol_binary::write()
return false;
}
+
+/**
+ Embedded library implementation of OK response.
+
+ This function is used by the server to write 'OK' packet to
+ the "network" when the server is compiled as an embedded library.
+ Since there is no network in the embedded configuration,
+ a different implementation is necessary.
+ Instead of marshalling response parameters to a network representation
+ and then writing it to the socket, here we simply copy the data to the
+ corresponding client-side connection structures.
+
+ @sa Server implementation of net_send_ok in protocol.cc for
+ description of the arguments.
+
+ @return The function does not return errors.
+*/
+
void
-send_ok(THD *thd,ha_rows affected_rows,ulonglong id,const char *message)
+net_send_ok(THD *thd,
+ uint server_status, uint total_warn_count,
+ ha_rows affected_rows, ulonglong id, const char *message)
{
- DBUG_ENTER("send_ok");
+ DBUG_ENTER("emb_net_send_ok");
MYSQL_DATA *data;
MYSQL *mysql= thd->mysql;
-
+
if (!mysql) // bootstrap file handling
DBUG_VOID_RETURN;
- if (thd->net.no_send_ok) // hack for re-parsing queries
- DBUG_VOID_RETURN;
if (!(data= thd->alloc_new_dataset()))
return;
data->embedded_info->affected_rows= affected_rows;
@@ -1013,15 +1036,24 @@ send_ok(THD *thd,ha_rows affected_rows,ulonglong id,const char *message)
strmake(data->embedded_info->info, message,
sizeof(data->embedded_info->info)-1);
- write_eof_packet(thd);
+ write_eof_packet(thd, server_status, total_warn_count);
thd->cur_data= 0;
DBUG_VOID_RETURN;
}
+
+/**
+ Embedded library implementation of EOF response.
+
+ @sa net_send_ok
+
+ @return This function does not return errors.
+*/
+
void
-send_eof(THD *thd)
+net_send_eof(THD *thd, uint server_status, uint total_warn_count)
{
- write_eof_packet(thd);
+ write_eof_packet(thd, server_status, total_warn_count);
thd->cur_data= 0;
}
@@ -1034,6 +1066,7 @@ void net_send_error_packet(THD *thd, uint sql_errno, const char *err)
ei->last_errno= sql_errno;
strmake(ei->info, err, sizeof(ei->info)-1);
strmov(ei->sqlstate, mysql_errno_to_sqlstate(sql_errno));
+ ei->server_status= thd->server_status;
thd->cur_data= 0;
}
diff --git a/libmysqld/libmysqld.c b/libmysqld/libmysqld.c
index eb47a045669..a8542f6fca9 100644
--- a/libmysqld/libmysqld.c
+++ b/libmysqld/libmysqld.c
@@ -209,8 +209,9 @@ mysql_real_connect(MYSQL *mysql,const char *host, const char *user,
DBUG_RETURN(mysql);
error:
- DBUG_PRINT("error",("message: %u (%s)", mysql->net.last_errno,
- mysql->net.last_error));
+ DBUG_PRINT("error",("message: %u (%s)",
+ mysql->net.client_last_errno,
+ mysql->net.client_last_error));
{
/* Free alloced memory */
my_bool free_me=mysql->free_me;
diff --git a/libmysqld/libmysqld.def b/libmysqld/libmysqld.def
index 78ff08e510a..2aa75c0b23c 100644
--- a/libmysqld/libmysqld.def
+++ b/libmysqld/libmysqld.def
@@ -78,7 +78,6 @@ EXPORTS
mysql_next_result
mysql_num_fields
mysql_num_rows
- mysql_odbc_escape_string
mysql_options
mysql_ping
mysql_query
diff --git a/mysql-test/Makefile.am b/mysql-test/Makefile.am
index 900ee14bd4e..a77dccdebf2 100644
--- a/mysql-test/Makefile.am
+++ b/mysql-test/Makefile.am
@@ -44,7 +44,9 @@ dist-hook:
$(distdir)/std_data/ndb_backup51 \
$(distdir)/std_data/ndb_backup51_data_be \
$(distdir)/std_data/ndb_backup51_data_le \
- $(distdir)/lib
+ $(distdir)/std_data/parts \
+ $(distdir)/lib \
+ $(distdir)/lib/My
-$(INSTALL_DATA) $(srcdir)/t/*.def $(distdir)/t
$(INSTALL_DATA) $(srcdir)/t/*.test $(distdir)/t
-$(INSTALL_DATA) $(srcdir)/t/*.imtest $(distdir)/t
@@ -57,6 +59,7 @@ dist-hook:
-$(INSTALL_DATA) $(srcdir)/extra/binlog_tests/*.opt $(distdir)/extra/binlog_tests
-$(INSTALL_DATA) $(srcdir)/extra/rpl_tests/*.opt $(distdir)/extra/rpl_tests
$(INSTALL_DATA) $(srcdir)/include/*.inc $(distdir)/include
+ $(INSTALL_DATA) $(srcdir)/include/*.sql $(distdir)/include
$(INSTALL_DATA) $(srcdir)/include/*.test $(distdir)/include
$(INSTALL_DATA) $(srcdir)/r/*.result $(srcdir)/r/*.require $(distdir)/r
$(INSTALL_DATA) $(srcdir)/std_data/Moscow_leap $(distdir)/std_data
@@ -71,7 +74,9 @@ dist-hook:
$(INSTALL_DATA) $(srcdir)/std_data/ndb_backup51/BACKUP* $(distdir)/std_data/ndb_backup51
$(INSTALL_DATA) $(srcdir)/std_data/ndb_backup51_data_be/BACKUP* $(distdir)/std_data/ndb_backup51_data_be
$(INSTALL_DATA) $(srcdir)/std_data/ndb_backup51_data_le/BACKUP* $(distdir)/std_data/ndb_backup51_data_le
+ $(INSTALL_DATA) $(srcdir)/std_data/parts/part_* $(distdir)/std_data/parts
$(INSTALL_DATA) $(srcdir)/lib/*.pl $(distdir)/lib
+ $(INSTALL_DATA) $(srcdir)/lib/My/*.pm $(distdir)/lib/My
-rm -rf `find $(distdir)/suite -type d -name SCCS` $(distdir)/suite/row_lock
install-data-local:
@@ -86,7 +91,9 @@ install-data-local:
$(DESTDIR)$(testdir)/std_data/ndb_backup51 \
$(DESTDIR)$(testdir)/std_data/ndb_backup51_data_be \
$(DESTDIR)$(testdir)/std_data/ndb_backup51_data_le \
- $(DESTDIR)$(testdir)/lib
+ $(DESTDIR)$(testdir)/std_data/parts \
+ $(DESTDIR)$(testdir)/lib \
+ $(DESTDIR)$(testdir)/lib/My
$(INSTALL_DATA) $(srcdir)/README $(DESTDIR)$(testdir)
-$(INSTALL_DATA) $(srcdir)/t/*.def $(DESTDIR)$(testdir)/t
$(INSTALL_DATA) $(srcdir)/t/*.test $(DESTDIR)$(testdir)/t
@@ -103,6 +110,7 @@ install-data-local:
-$(INSTALL_DATA) $(srcdir)/extra/binlog_tests/*.opt $(DESTDIR)$(testdir)/extra/binlog_tests
-$(INSTALL_DATA) $(srcdir)/extra/rpl_tests/*.opt $(DESTDIR)$(testdir)/extra/rpl_tests
$(INSTALL_DATA) $(srcdir)/include/*.inc $(DESTDIR)$(testdir)/include
+ $(INSTALL_DATA) $(srcdir)/include/*.sql $(DESTDIR)$(testdir)/include
$(INSTALL_DATA) $(srcdir)/include/*.test $(DESTDIR)$(testdir)/include
$(INSTALL_DATA) $(srcdir)/std_data/*.dat $(DESTDIR)$(testdir)/std_data
$(INSTALL_DATA) $(srcdir)/std_data/*.*001 $(DESTDIR)$(testdir)/std_data
@@ -118,7 +126,9 @@ install-data-local:
$(INSTALL_DATA) $(srcdir)/std_data/ndb_backup51/BACKUP* $(DESTDIR)$(testdir)/std_data/ndb_backup51
$(INSTALL_DATA) $(srcdir)/std_data/ndb_backup51_data_be/BACKUP* $(DESTDIR)$(testdir)/std_data/ndb_backup51_data_be
$(INSTALL_DATA) $(srcdir)/std_data/ndb_backup51_data_le/BACKUP* $(DESTDIR)$(testdir)/std_data/ndb_backup51_data_le
+ $(INSTALL_DATA) $(srcdir)/std_data/parts/part_* $(DESTDIR)$(testdir)/std_data/parts
$(INSTALL_DATA) $(srcdir)/lib/*.pl $(DESTDIR)$(testdir)/lib
+ $(INSTALL_DATA) $(srcdir)/lib/My/*.pm $(DESTDIR)$(testdir)/lib/My
for f in `(cd $(srcdir); find suite -type f | egrep -v 'SCCS|row_lock')`; \
do \
d=$(DESTDIR)$(testdir)/`dirname $$f`; \
diff --git a/mysql-test/extra/binlog_tests/blackhole.test b/mysql-test/extra/binlog_tests/blackhole.test
index 1ca59955d76..59d31c3a08b 100644
--- a/mysql-test/extra/binlog_tests/blackhole.test
+++ b/mysql-test/extra/binlog_tests/blackhole.test
@@ -126,7 +126,12 @@ select * from t2;
select * from t3;
let $VERSION=`select version()`;
-source include/show_binlog_events.inc;
+--replace_result $VERSION VERSION
+--replace_column 2 # 4 # 5 #
+--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
+--replace_regex /file_id=[0-9]+/file_id=#/
+show binlog events;
+
drop table t1,t2,t3;
#
@@ -134,6 +139,15 @@ drop table t1,t2,t3;
# table
#
CREATE TABLE t1(a INT) ENGINE=BLACKHOLE;
+# NOTE: After exchanging open_ltable() by open_and_lock_tables() in
+# handle_delayed_insert() to fix problems with MERGE tables (Bug#26379),
+# problems with INSERT DELAYED and BLACKHOLE popped up. open_ltable()
+# does not check if the binlogging capabilities of the statement and the
+# table match. So the below used to succeed. But since INSERT DELAYED
+# switches to row-based logging in mixed-mode and BLACKHOLE cannot do
+# row-based logging, it could not really work. Until this problem is
+# correctly fixed, we have that error here.
+--error ER_BINLOG_LOGGING_IMPOSSIBLE
INSERT DELAYED INTO t1 VALUES(1);
DROP TABLE t1;
@@ -169,7 +183,14 @@ start transaction;
insert into t1 values(2);
rollback;
set autocommit=1;
-source include/show_binlog_events.inc;
+
+let $VERSION=`select version()`;
+--replace_result $VERSION VERSION
+--replace_column 2 # 4 # 5 #
+--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
+--replace_regex /file_id=[0-9]+/file_id=#/
+show binlog events;
+
drop table if exists t1;
# End of 5.1 tests
diff --git a/mysql-test/extra/binlog_tests/ctype_cp932.test b/mysql-test/extra/binlog_tests/ctype_cp932.test
index 0839f5d43aa..3deeea13997 100644
--- a/mysql-test/extra/binlog_tests/ctype_cp932.test
+++ b/mysql-test/extra/binlog_tests/ctype_cp932.test
@@ -8,6 +8,10 @@ drop table if exists t3;
drop table if exists t4;
--enable_warnings
+SET @test_character_set= 'cp932';
+SET @test_collation= 'cp932_japanese_ci';
+-- source include/ctype_common.inc
+
set names cp932;
set character_set_database = cp932;
diff --git a/mysql-test/extra/binlog_tests/database.test b/mysql-test/extra/binlog_tests/database.test
new file mode 100644
index 00000000000..11a8f53a6d7
--- /dev/null
+++ b/mysql-test/extra/binlog_tests/database.test
@@ -0,0 +1,15 @@
+source include/have_log_bin.inc;
+source include/not_embedded.inc;
+
+# Checking that the drop of a database does not replicate anything in
+# addition to the drop of the database
+
+reset master;
+create database testing_1;
+use testing_1;
+create table t1 (a int);
+create function sf1 (a int) returns int return a+1;
+create trigger tr1 before insert on t1 for each row insert into t2 values (2*new.a);
+create procedure sp1 (a int) insert into t1 values(a);
+drop database testing_1;
+source include/show_binlog_events.inc;
diff --git a/mysql-test/extra/binlog_tests/mix_innodb_myisam_binlog.test b/mysql-test/extra/binlog_tests/mix_innodb_myisam_binlog.test
index 7141bd1abb9..6ac8a89591a 100644
--- a/mysql-test/extra/binlog_tests/mix_innodb_myisam_binlog.test
+++ b/mysql-test/extra/binlog_tests/mix_innodb_myisam_binlog.test
@@ -315,4 +315,324 @@ disconnect con3;
connection con4;
select get_lock("a",10); # wait for rollback to finish
+flush logs;
+
+# we check that the error code of the "ROLLBACK" event is 0 and not
+# ER_SERVER_SHUTDOWN (i.e. disconnection just rolls back transaction
+# and does not make slave to stop)
+if (`select @@binlog_format = 'ROW'`)
+{
+ --exec $MYSQL_BINLOG --start-position=524 $MYSQLTEST_VARDIR/log/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/mix_innodb_myisam_binlog.output
+}
+
+if (`select @@binlog_format = 'STATEMENT' || @@binlog_format = 'MIXED'`)
+{
+ --exec $MYSQL_BINLOG --start-position=555 $MYSQLTEST_VARDIR/log/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/mix_innodb_myisam_binlog.output
+}
+
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+eval select
+(@a:=load_file("$MYSQLTEST_VARDIR/tmp/mix_innodb_myisam_binlog.output"))
+is not null;
+--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
+eval select
+@a like "%#%error_code=0%ROLLBACK\\n/*!*/;%ROLLBACK /* added by mysqlbinlog */;%" OR
+@a like "%#%error_code=0%ROLLBACK\\r\\n/*!*/;%ROLLBACK /* added by mysqlbinlog */;%",
+@a not like "%#%error_code=%error_code=%";
+drop table t1, t2;
+
+#
+# Bug #27417 thd->no_trans_update.stmt lost value inside of SF-exec-stack
+# bug #28960 non-trans temp table changes with insert .. select
+# not binlogged after rollback
+#
+# testing appearence of insert into temp_table in binlog.
+# There are two branches of execution that require different setup.
+
+## send_eof() branch
+
+# prepare
+
+create temporary table tt (a int unique);
+create table ti (a int) engine=innodb;
+reset master;
+
+# action
+
+begin;
+insert into ti values (1);
+insert into ti values (2) ;
+insert into tt select * from ti;
+rollback;
+
+# check
+
+select count(*) from tt /* 2 */;
+source include/show_binlog_events.inc;
+select count(*) from ti /* zero */;
+insert into ti select * from tt;
+select * from ti /* that is what slave would miss - a bug */;
+
+
+## send_error() branch
+delete from ti;
+delete from tt where a=1;
+reset master;
+
+# action
+
+begin;
+insert into ti values (1);
+insert into ti values (2) /* to make the dup error in the following */;
+--error ER_DUP_ENTRY
+insert into tt select * from ti /* one affected and error */;
+rollback;
+
+# check
+
+source include/show_binlog_events.inc;
+select count(*) from ti /* zero */;
+insert into ti select * from tt;
+select * from tt /* that is what otherwise slave missed - the bug */;
+
+drop table ti, tt;
+
+
+#
+# Bug #27417 thd->no_trans_update.stmt lost value inside of SF-exec-stack
+#
+# Testing asserts: if there is a side effect of modifying non-transactional
+# table thd->no_trans_update.stmt must be TRUE;
+# the assert is active with debug build
+#
+
+--disable_warnings
+drop function if exists bug27417;
+drop table if exists t1,t2;
+--enable_warnings
+# side effect table
+CREATE TABLE t1 (a int NOT NULL auto_increment primary key) ENGINE=MyISAM;
+# target tables
+CREATE TABLE t2 (a int NOT NULL auto_increment, PRIMARY KEY (a));
+
+delimiter |;
+create function bug27417(n int)
+RETURNS int(11)
+begin
+ insert into t1 values (null);
+ return n;
+end|
+delimiter ;|
+
+reset master;
+
+# execute
+
+insert into t2 values (bug27417(1));
+insert into t2 select bug27417(2);
+reset master;
+
+--error ER_DUP_ENTRY
+insert into t2 values (bug27417(2));
+source include/show_binlog_events.inc; /* only (!) with fixes for #23333 will show there is the query */;
+select count(*) from t1 /* must be 3 */;
+
+reset master;
+select count(*) from t2;
+delete from t2 where a=bug27417(3);
+select count(*) from t2 /* nothing got deleted */;
+source include/show_binlog_events.inc; /* the query must be in regardless of #23333 */;
+select count(*) from t1 /* must be 5 */;
+
+--enable_info
+delete t2 from t2 where t2.a=bug27417(100) /* must not affect t2 */;
+--disable_info
+select count(*) from t1 /* must be 7 */;
+
+# function bug27417 remains for the following testing of bug#23333
+drop table t1,t2;
+
+#
+# Bug#23333 using the patch (and the test) for bug#27471
+#
+# throughout the bug tests
+# t1 - non-trans side effects gatherer;
+# t2 - transactional table;
+#
+
+CREATE TABLE t1 (a int NOT NULL auto_increment primary key) ENGINE=MyISAM;
+CREATE TABLE t2 (a int, PRIMARY KEY (a)) ENGINE=InnoDB;
+CREATE TABLE t3 (a int, PRIMARY KEY (a), b int unique) ENGINE=MyISAM;
+CREATE TABLE t4 (a int, PRIMARY KEY (a), b int unique) ENGINE=Innodb;
+CREATE TABLE t5 (a int, PRIMARY KEY (a)) ENGINE=InnoDB;
+
+
+#
+# INSERT
+#
+
+# prepare
+
+ insert into t2 values (1);
+ reset master;
+
+# execute
+
+ --error ER_DUP_ENTRY
+ insert into t2 values (bug27417(1));
+
+# check
+
+ source include/show_binlog_events.inc; /* the output must denote there is the query */;
+ select count(*) from t1 /* must be 1 */;
+
+#
+# INSERT SELECT
+#
+
+# prepare
+ delete from t1;
+ delete from t2;
+ insert into t2 values (2);
+ reset master;
+
+# execute
+
+ --error ER_DUP_ENTRY
+ insert into t2 select bug27417(1) union select bug27417(2);
+
+# check
+
+ source include/show_binlog_events.inc; /* the output must denote there is the query */;
+ select count(*) from t1 /* must be 2 */;
+
+#
+# UPDATE inc multi-update
+#
+
+# prepare
+ delete from t1;
+ insert into t3 values (1,1),(2,3),(3,4);
+ reset master;
+
+# execute
+ --error ER_DUP_ENTRY
+ update t3 set b=b+bug27417(1);
+
+# check
+ source include/show_binlog_events.inc; /* the output must denote there is the query */;
+ select count(*) from t1 /* must be 2 */;
+
+## multi_update::send_eof() branch
+
+# prepare
+ delete from t3;
+ delete from t4;
+ insert into t3 values (1,1);
+ insert into t4 values (1,1),(2,2);
+
+ reset master;
+
+# execute
+ --error ER_DUP_ENTRY
+ UPDATE t4,t3 SET t4.a=t3.a + bug27417(1) /* top level non-ta table */;
+
+# check
+ source include/show_binlog_events.inc; /* the output must denote there is the query */;
+ select count(*) from t1 /* must be 4 */;
+
+## send_error() branch of multi_update
+
+# prepare
+ delete from t1;
+ delete from t3;
+ delete from t4;
+ insert into t3 values (1,1),(2,2);
+ insert into t4 values (1,1),(2,2);
+
+ reset master;
+
+# execute
+ --error ER_DUP_ENTRY
+ UPDATE t3,t4 SET t3.a=t4.a + bug27417(1);
+
+# check
+ select count(*) from t1 /* must be 1 */;
+
+# cleanup
+ drop table t4;
+
+
+#
+# DELETE incl multi-delete
+#
+
+# prepare
+ delete from t1;
+ delete from t2;
+ delete from t3;
+ insert into t2 values (1);
+ insert into t3 values (1,1);
+ create trigger trg_del before delete on t2 for each row
+ insert into t3 values (bug27417(1), 2);
+ reset master;
+
+# execute
+ --error ER_DUP_ENTRY
+ delete from t2;
+# check
+ source include/show_binlog_events.inc; /* the output must denote there is the query */;
+ select count(*) from t1 /* must be 1 */;
+
+# cleanup
+ drop trigger trg_del;
+
+# prepare
+ delete from t1;
+ delete from t2;
+ delete from t5;
+ create trigger trg_del_t2 after delete on t2 for each row
+ insert into t1 values (1);
+ insert into t2 values (2),(3);
+ insert into t5 values (1),(2);
+ reset master;
+
+# execute
+ --error ER_DUP_ENTRY
+ delete t2.* from t2,t5 where t2.a=t5.a + 1;
+
+# check
+ source include/show_binlog_events.inc; /* the output must denote there is the query */;
+ select count(*) from t1 /* must be 1 */;
+
+
+#
+# LOAD DATA
+#
+
+# prepare
+ delete from t1;
+ create table t4 (a int default 0, b int primary key) engine=innodb;
+ insert into t4 values (0, 17);
+ reset master;
+
+# execute
+ --error ER_DUP_ENTRY
+ load data infile '../std_data_ln/rpl_loaddata.dat' into table t4 (a, @b) set b= @b + bug27417(2);
+# check
+ select * from t4;
+ select count(*) from t1 /* must be 2 */;
+ source include/show_binlog_events.inc; /* the output must denote there is the query */;
+
+#
+# bug#23333 cleanup
+#
+
+
+drop trigger trg_del_t2;
+drop table t1,t2,t3,t4,t5;
+drop function bug27417;
+
+
+--echo end of tests
diff --git a/mysql-test/extra/binlog_tests/mix_innodb_myisam_side_effects.test b/mysql-test/extra/binlog_tests/mix_innodb_myisam_side_effects.test
new file mode 100644
index 00000000000..0a0bef4ca4d
--- /dev/null
+++ b/mysql-test/extra/binlog_tests/mix_innodb_myisam_side_effects.test
@@ -0,0 +1,294 @@
+# the file to be sourced from binlog.binlog_mix_innodb_myisam
+
+#
+# Bug #27417 thd->no_trans_update.stmt lost value inside of SF-exec-stack
+# bug #28960 non-trans temp table changes with insert .. select
+# not binlogged after rollback
+#
+# testing appearence of insert into temp_table in binlog.
+# There are two branches of execution that require different setup.
+
+# checking binlog content filled with row-based events due to
+# a used stored function modifies non-transactional table
+
+## send_eof() branch
+
+# prepare
+
+create temporary table tt (a int unique);
+create table ti (a int) engine=innodb;
+reset master;
+
+# action
+
+begin;
+insert into ti values (1);
+insert into ti values (2) ;
+insert into tt select * from ti;
+rollback;
+
+# check
+
+select count(*) from tt /* 2 */;
+source include/show_binlog_events.inc;
+select count(*) from ti /* zero */;
+insert into ti select * from tt;
+select * from ti /* that is what slave would miss - bug#28960 */;
+
+
+## send_error() branch
+delete from ti;
+delete from tt where a=1;
+reset master;
+
+# action
+
+begin;
+insert into ti values (1);
+insert into ti values (2) /* to make the dup error in the following */;
+--error ER_DUP_ENTRY
+insert into tt select * from ti /* one affected and error */;
+rollback;
+
+# check
+
+source include/show_binlog_events.inc; # nothing in binlog with row bilog format
+select count(*) from ti /* zero */;
+insert into ti select * from tt;
+select * from tt /* that is what otherwise slave missed - the bug */;
+
+drop table ti;
+
+
+#
+# Bug #27417 thd->no_trans_update.stmt lost value inside of SF-exec-stack
+#
+# Testing asserts: if there is a side effect of modifying non-transactional
+# table thd->no_trans_update.stmt must be TRUE;
+# the assert is active with debug build
+#
+
+--disable_warnings
+drop function if exists bug27417;
+drop table if exists t1,t2;
+--enable_warnings
+# side effect table
+CREATE TABLE t1 (a int NOT NULL auto_increment primary key) ENGINE=MyISAM;
+# target tables
+CREATE TABLE t2 (a int NOT NULL auto_increment, PRIMARY KEY (a));
+
+delimiter |;
+create function bug27417(n int)
+RETURNS int(11)
+begin
+ insert into t1 values (null);
+ return n;
+end|
+delimiter ;|
+
+reset master;
+
+# execute
+
+insert into t2 values (bug27417(1));
+insert into t2 select bug27417(2);
+reset master;
+
+--error ER_DUP_ENTRY
+insert into t2 values (bug27417(2));
+source include/show_binlog_events.inc; #only (!) with fixes for #23333 will show there is the query
+select count(*) from t1 /* must be 3 */;
+
+reset master;
+select count(*) from t2;
+delete from t2 where a=bug27417(3);
+select count(*) from t2 /* nothing got deleted */;
+source include/show_binlog_events.inc; # the query must be in regardless of #23333
+select count(*) from t1 /* must be 5 */;
+
+--enable_info
+delete t2 from t2 where t2.a=bug27417(100) /* must not affect t2 */;
+--disable_info
+select count(*) from t1 /* must be 7 */;
+
+# function bug27417 remains for the following testing of bug#23333
+drop table t1,t2;
+
+#
+# Bug#23333 using the patch (and the test) for bug#27471
+# throughout the bug tests
+# t1 - non-trans side effects gatherer;
+# t2 - transactional table;
+#
+CREATE TABLE t1 (a int NOT NULL auto_increment primary key) ENGINE=MyISAM;
+CREATE TABLE t2 (a int, PRIMARY KEY (a)) ENGINE=InnoDB;
+CREATE TABLE t3 (a int, PRIMARY KEY (a), b int unique) ENGINE=MyISAM;
+CREATE TABLE t4 (a int, PRIMARY KEY (a), b int unique) ENGINE=Innodb;
+CREATE TABLE t5 (a int, PRIMARY KEY (a)) ENGINE=InnoDB;
+
+
+#
+# INSERT
+#
+
+# prepare
+
+ insert into t2 values (1);
+ reset master;
+
+# execute
+
+ --error ER_DUP_ENTRY
+ insert into t2 values (bug27417(1));
+
+# check
+
+ source include/show_binlog_events.inc; # must be event of the query
+ select count(*) from t1 /* must be 1 */;
+
+#
+# INSERT SELECT
+#
+
+# prepare
+ delete from t1;
+ delete from t2;
+ insert into t2 values (2);
+ reset master;
+
+# execute
+
+ --error ER_DUP_ENTRY
+ insert into t2 select bug27417(1) union select bug27417(2);
+
+# check
+
+ source include/show_binlog_events.inc; # must be events of the query
+ select count(*) from t1 /* must be 2 */;
+
+#
+# UPDATE inc multi-update
+#
+
+# prepare
+ delete from t1;
+ insert into t3 values (1,1),(2,3),(3,4);
+ reset master;
+
+# execute
+ --error ER_DUP_ENTRY
+ update t3 set b=b+bug27417(1);
+
+# check
+ source include/show_binlog_events.inc; # must be events of the query
+ select count(*) from t1 /* must be 2 */;
+
+## multi_update::send_eof() branch
+
+# prepare
+ delete from t3;
+ delete from t4;
+ insert into t3 values (1,1);
+ insert into t4 values (1,1),(2,2);
+
+ reset master;
+
+# execute
+ --error ER_DUP_ENTRY
+ UPDATE t4,t3 SET t4.a=t3.a + bug27417(1) /* top level non-ta table */;
+
+# check
+ source include/show_binlog_events.inc; # the offset must denote there is the query
+ select count(*) from t1 /* must be 4 */;
+
+## send_error() branch of multi_update
+
+# prepare
+ delete from t1;
+ delete from t3;
+ delete from t4;
+ insert into t3 values (1,1),(2,2);
+ insert into t4 values (1,1),(2,2);
+
+ reset master;
+
+# execute
+ --error ER_DUP_ENTRY
+ UPDATE t3,t4 SET t3.a=t4.a + bug27417(1);
+
+# check
+ select count(*) from t1 /* must be 1 */;
+
+# cleanup
+ drop table t4;
+
+
+#
+# DELETE incl multi-delete
+#
+
+# prepare
+ delete from t1;
+ delete from t2;
+ delete from t3;
+ insert into t2 values (1);
+ insert into t3 values (1,1);
+ create trigger trg_del before delete on t2 for each row
+ insert into t3 values (bug27417(1), 2);
+ reset master;
+
+# execute
+ --error ER_DUP_ENTRY
+ delete from t2;
+# check
+ source include/show_binlog_events.inc; # the offset must denote there is the query
+ select count(*) from t1 /* must be 1 */;
+
+# cleanup
+ drop trigger trg_del;
+
+# prepare
+ delete from t1;
+ delete from t2;
+ delete from t5;
+ create trigger trg_del_t2 after delete on t2 for each row
+ insert into t1 values (1);
+ insert into t2 values (2),(3);
+ insert into t5 values (1),(2);
+ reset master;
+
+# execute
+ --error ER_DUP_ENTRY
+ delete t2.* from t2,t5 where t2.a=t5.a + 1;
+
+# check
+ source include/show_binlog_events.inc; # must be events of the query
+ select count(*) from t1 /* must be 1 */;
+
+
+#
+# LOAD DATA
+#
+
+# prepare
+ delete from t1;
+ create table t4 (a int default 0, b int primary key) engine=innodb;
+ insert into t4 values (0, 17);
+ reset master;
+
+# execute
+ --error ER_DUP_ENTRY
+ load data infile '../std_data_ln/rpl_loaddata.dat' into table t4 (a, @b) set b= @b + bug27417(2);
+# check
+ select * from t4;
+ select count(*) from t1 /* must be 2 */;
+ source include/show_binlog_events.inc; # must be events of the query
+
+#
+# bug#23333 cleanup
+#
+
+
+drop trigger trg_del_t2;
+drop table t1,t2,t3,t4,t5;
+drop function bug27417;
diff --git a/mysql-test/extra/rpl_tests/rpl_extraMaster_Col.test b/mysql-test/extra/rpl_tests/rpl_extraMaster_Col.test
index 26b1e6d5ba0..5abd04b98ef 100644
--- a/mysql-test/extra/rpl_tests/rpl_extraMaster_Col.test
+++ b/mysql-test/extra/rpl_tests/rpl_extraMaster_Col.test
@@ -1,16 +1,22 @@
#############################################################
+# Author: Chuck
+#############################################################
# Purpose: To test having extra columns on the master WL#3915
# engine inspecific sourced part
#############################################################
-
+# Change Author: Jeb
+# Change: Cleanup and extend testing
+#############################################################
# TODO: partition specific
# -- source include/have_partition.inc
+# Note: Will be done in different test due to NDB using this
+# test case.
+############################################################
########### Clean up ################
--disable_warnings
--disable_query_log
-DROP TABLE IF EXISTS t1,t2,t3,t4,t31;
-
+DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t10,t11,t12,t13,t14,t15,t16,t17,t18,t31;
--enable_query_log
--enable_warnings
@@ -70,154 +76,87 @@ DROP TABLE IF EXISTS t1,t2,t3,t4,t31;
#VARCHAR(M)
#
-
-connection master;
-eval CREATE TABLE t1 (f1 INT, f2 INT, f3 INT PRIMARY KEY, f4 CHAR(20),
- f5 FLOAT DEFAULT '2.00')
- ENGINE=$engine_type;
-
-sync_slave_with_master;
-alter table t1 drop f5;
-
-connection master;
-INSERT into t1 values (1, 1, 1, 'first', 1.0);
-
- sync_slave_with_master;
---replace_column 1 # 4 # 7 # 8 # 9 # 22 # 23 # 33 #
---query_vertical show slave status;
- select * from t1 order by f3;
-
-connection master;
-DROP TABLE t1;
-eval CREATE TABLE t1 (f1 INT, f2 INT, f3 INT PRIMARY KEY, f4 CHAR(20),
- f5 FLOAT DEFAULT '2.00',
- f6 CHAR(4) DEFAULT 'TEST')
- ENGINE=$engine_type;
-
-sync_slave_with_master;
-alter table t1 drop f5, drop f6;
-
-connection master;
-INSERT into t1 values (1, 1, 1, 'first', 1.0, 'yksi');
-
- sync_slave_with_master;
---replace_column 1 # 4 # 7 # 8 # 9 # 22 # 23 # 33 #
---query_vertical show slave status;
- select * from t1 order by f3;
-
-connection master;
-DROP TABLE t1;
-eval CREATE TABLE t1 (f1 INT, f2 INT, f3 INT PRIMARY KEY, f4 CHAR(20),
- f5 FLOAT DEFAULT '2.00',
- f6 CHAR(4) DEFAULT 'TEST',
- f7 INT DEFAULT '0')
- ENGINE=$engine_type;
-
-sync_slave_with_master;
-alter table t1 drop f5, drop f6, drop f7;
-
-connection master;
-INSERT into t1 values (1, 1, 1, 'first', 1.0, 'yksi', 1);
- sync_slave_with_master;
---replace_column 1 # 4 # 7 # 8 # 9 # 22 # 23 # 33 #
---query_vertical show slave status;
- select * from t1 order by f3;
-
-connection master;
-DROP TABLE t1;
-eval CREATE TABLE t1 (f1 INT, f2 INT, f3 INT PRIMARY KEY, f4 CHAR(20),
- f5 FLOAT DEFAULT '2.00',
- f6 CHAR(4) DEFAULT 'TEST',
- f7 INT DEFAULT '0',
- f8 TEXT)
- ENGINE=$engine_type;
-
-sync_slave_with_master;
-alter table t1 drop f5, drop f6, drop f7, drop f8;
-
-connection master;
-INSERT into t1 values (1, 1, 1, 'first', 1.0, 'yksi', 1, 'lounge of happiness');
- sync_slave_with_master;
---replace_column 1 # 4 # 7 # 8 # 9 # 22 # 23 # 33 #
---query_vertical show slave status;
- select * from t1 order by f3;
-
-connection master;
-DROP TABLE t1;
-eval CREATE TABLE t1 (f1 INT, f2 INT, f3 INT PRIMARY KEY, f4 CHAR(20),
- f5 FLOAT DEFAULT '2.00',
- f6 CHAR(4) DEFAULT 'TEST',
- f7 INT DEFAULT '0',
- f8 TEXT,
- f9 LONGBLOB)
- ENGINE=$engine_type;
-
-sync_slave_with_master;
-alter table t1 drop f5, drop f6, drop f7, drop f8, drop f9;
-
-connection master;
-INSERT into t1 values (1, 1, 1, 'first', 1.0, 'yksi', 1, 'lounge of happiness', 'very fat blob');
- sync_slave_with_master;
---replace_column 1 # 4 # 7 # 8 # 9 # 22 # 23 # 33 #
---query_vertical show slave status;
- select * from t1 order by f3;
-
+let $binformat = `SHOW VARIABLES LIKE '%binlog_format%'`;
+--echo
+--echo ***********************************************************
+--echo ***********************************************************
+--echo ***************** Start of Testing ************************
+--echo ***********************************************************
+--echo ***********************************************************
+--echo * This test format == $binformat and engine == $engine_type
+--echo ***********************************************************
+--echo ***********************************************************
+--echo
+--echo ***** Testing more columns on the Master *****
+--echo
connection master;
-DROP TABLE t1;
eval CREATE TABLE t1 (f1 INT, f2 INT, f3 INT PRIMARY KEY, f4 CHAR(20),
- f5 FLOAT DEFAULT '2.00',
- f6 CHAR(4) DEFAULT 'TEST',
- f7 INT DEFAULT '0',
- f8 TEXT,
- f9 LONGBLOB,
- f10 BIT(63))
- ENGINE=$engine_type;
-
+ /* extra */
+ f5 FLOAT DEFAULT '2.00',
+ f6 CHAR(4) DEFAULT 'TEST',
+ f7 INT DEFAULT '0',
+ f8 TEXT,
+ f9 LONGBLOB,
+ f10 BIT(63),
+ f11 VARBINARY(64))ENGINE=$engine_type;
+--echo
+--echo * Alter Table on Slave and drop columns f5 through f11 *
+--echo
sync_slave_with_master;
-alter table t1 drop f5, drop f6, drop f7, drop f8, drop f9, drop f10;
+alter table t1 drop f5, drop f6, drop f7, drop f8, drop f9, drop f10, drop f11;
+--echo
+--echo * Insert data in Master then update and delete some rows*
+--echo
connection master;
-INSERT into t1 values (1, 1, 1, 'first', 1.0, 'yksi', 1, 'lounge of happiness', 'very fat blob', b'01010101010101');
- sync_slave_with_master;
---replace_column 1 # 4 # 7 # 8 # 9 # 22 # 23 # 33 #
---query_vertical show slave status;
- select * from t1 order by f3;
+let $j= 50;
+--disable_query_log
+while ($j)
+{
+ eval INSERT INTO t1 VALUES ($j, $j, $j, 'second', 2.0, 'kaks', 2,
+ 'got stolen from the paradise',
+ 'very fat blob', b'01010101010101',
+ 0x123456);
+ dec $j;
+}
+let $j= 30;
+while ($j)
+{
+ eval update t1 set f4= 'next' where f1=$j;
+ dec $j;
+ dec $j;
+ eval delete from t1 where f1=$j;
+ dec $j;
+}
+--enable_query_log
-connection master;
-DROP TABLE t1;
- eval CREATE TABLE t1 (f1 INT, f2 INT, f3 INT PRIMARY KEY, f4 CHAR(20),
- /* extra */
- f5 FLOAT DEFAULT '2.00',
- f6 CHAR(4) DEFAULT 'TEST',
- f7 INT DEFAULT '0',
- f8 TEXT,
- f9 LONGBLOB,
- f10 BIT(63),
- f11 VARBINARY(64))
- ENGINE=$engine_type;
+--echo * Select count and 20 rows from Master *
+--echo
+SELECT COUNT(*) FROM t1;
+--echo
+SELECT f1,f2,f3,f4,f5,f6,f7,f8,f9,
+ hex(f10),hex(f11) FROM t1 ORDER BY f3 LIMIT 20;
#connection slave;
- sync_slave_with_master;
- alter table t1 drop f5, drop f6, drop f7, drop f8, drop f9, drop f10, drop f11;
-
-connection master;
-
- INSERT into t1 values (1, 1, 1, 'first', 1.0, 'yksi', 1, 'lounge of happiness', 'very fat blob', b'01010101010101', 0x123456);
- INSERT into t1 values (2, 2, 2, 'second', 2.0, 'kaks', 2, 'got stolen from the paradise', 'very fat blob', b'01010101010101', 0x123456), (3, 3, 3, 'third', 3.0, 'kolm', 3, 'got stolen from the paradise', 'very fat blob', b'01010101010101', 0x123456);
- update t1 set f4= 'next' where f1=1;
- delete from t1 where f1=1;
-
- select * from t1 order by f3;
-
+sync_slave_with_master;
+--echo
+--echo * Select count and 20 rows from Slave *
+--echo
+SELECT COUNT(*) FROM t1;
+--echo
+SELECT * FROM t1 ORDER BY f3 LIMIT 20;
-#connection slave;
- sync_slave_with_master;
---replace_column 1 # 4 # 7 # 8 # 9 # 22 # 23 # 33 #
+--echo
+--echo * Show Slave Status *
+--echo
+--replace_column 1 # 4 # 7 # 8 # 9 # 22 # 23 # 33 # 35 # 36 #
--query_vertical show slave status;
- select * from t1 order by f3;
-
+--echo
### Altering table def scenario
+--echo
+--echo ***** Testing Altering table def scenario *****
+--echo
connection master;
@@ -232,7 +171,7 @@ connection master;
f11 BINARY(20) NOT NULL DEFAULT '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0',
f12 SET('a', 'b', 'c') default 'b')
ENGINE=$engine_type;
-
+--echo
eval CREATE TABLE t3 (f1 INT, f2 INT, f3 INT PRIMARY KEY, f4 CHAR(20),
/* extra */
f5 DOUBLE DEFAULT '2.00',
@@ -243,7 +182,7 @@ connection master;
f12 SET('a', 'b', 'c') default 'b')
ENGINE=$engine_type;
-
+--echo
# no ENUM and SET
eval CREATE TABLE t4 (f1 INT, f2 INT, f3 INT PRIMARY KEY, f4 CHAR(20),
/* extra */
@@ -256,7 +195,7 @@ connection master;
f11 CHAR(255))
ENGINE=$engine_type;
-
+--echo
eval CREATE TABLE t31 (f1 INT, f2 INT, f3 INT PRIMARY KEY, f4 CHAR(20),
/* extra */
@@ -293,7 +232,9 @@ connection master;
f34 VARBINARY(1025),
f35 VARCHAR(257)
) ENGINE=$engine_type;
-
+--echo
+--echo ** Alter tables on slave and drop columns **
+--echo
#connection slave;
sync_slave_with_master;
alter table t2 drop f5, drop f6, drop f7, drop f8, drop f9, drop f10, drop f11, drop
@@ -308,8 +249,8 @@ f12;
drop f26, drop f27, drop f28, drop f29, drop f30, drop f31, drop f32,
drop f33, drop f34, drop f35;
-
-
+--echo
+--echo ** Insert Data into Master **
connection master;
INSERT into t2 set f1=1, f2=1, f3=1, f4='first', f8='f8: medium size blob', f10='f10:
some var char';
@@ -458,7 +399,10 @@ binary data';
/*f34 VARBINARY(1025),*/ '3333 minus 3',
/*f35 VARCHAR(257),*/ NULL
);
-
+--echo
+--echo ** Sync slave with master **
+--echo ** Do selects from tables **
+--echo
#connection slave;
sync_slave_with_master;
@@ -466,14 +410,20 @@ binary data';
select * from t2 order by f1;
select * from t3 order by f1;
select * from t4 order by f1;
- select * from t31 order by f1;
+ select * from t31 order by f3;
connection master;
-
+--echo
+--echo ** Do updates master **
+--echo
update t31 set f5=555555555555555 where f3=6;
update t31 set f2=2 where f3=2;
update t31 set f1=NULL where f3=1;
- update t31 set f3=NULL, f27=NULL, f35='f35 new value' where f3=3;
+ update t31 set f3=0, f27=NULL, f35='f35 new value' where f3=3;
+
+--echo
+--echo ** Delete from Master **
+--echo
delete from t1;
delete from t2;
@@ -481,12 +431,15 @@ connection master;
delete from t4;
delete from t31;
+--echo
+--echo ** Check slave status **
+--echo
#connection slave;
sync_slave_with_master;
select * from t31;
--replace_result $MASTER_MYPORT MASTER_PORT
---replace_column 1 # 4 # 7 # 8 # 9 # 22 # 23 # 33 #
+--replace_column 1 # 4 # 7 # 8 # 9 # 22 # 23 # 33 # 35 # 36 #
--query_vertical show slave status;
#### Clean Up ####
@@ -496,11 +449,593 @@ connection master;
--disable_query_log
DROP TABLE t1,t2,t3,t4,t31;
+######################################################
#connection slave;
sync_slave_with_master;
--enable_query_log
--enable_warnings
+--echo
+--echo ****************************************
+--echo * columns in master at middle of table *
+--echo * Expect: Proper error message *
+--echo ****************************************
+--echo
+--echo ** Stop and Reset Slave **
+--echo
+STOP SLAVE;
+RESET SLAVE;
+--echo
+--echo ** create table slave side **
+eval CREATE TABLE t10 (a INT PRIMARY KEY, b BLOB, c CHAR(5)
+ ) ENGINE=$engine_type;
+
+--echo
+--echo ** Connect to master and create table **
+--echo
+--connection master
+eval CREATE TABLE t10 (a INT KEY, b BLOB, f DOUBLE DEFAULT '233',
+ c CHAR(5), e INT DEFAULT '1')ENGINE=$engine_type;
+RESET MASTER;
+
+--echo
+--echo *** Start Slave ***
+connection slave;
+START SLAVE;
+
+--echo
+--echo *** Master Data Insert ***
+connection master;
+set @b1 = 'b1b1b1b1';
+set @b1 = concat(@b1,@b1);
+INSERT INTO t10 () VALUES(1,@b1,DEFAULT,'Kyle',DEFAULT),
+ (2,@b1,DEFAULT,'JOE',DEFAULT),
+ (3,@b1,DEFAULT,'QA',DEFAULT);
+
+--echo
+--echo ********************************************
+--echo *** Expect slave to fail with Error 1523 ***
+--echo ********************************************
+--echo
+connection slave;
+wait_for_slave_to_stop;
+--replace_result $MASTER_MYPORT MASTER_PORT
+--replace_column 1 # 4 # 7 # 8 # 9 # 22 # 23 # 33 # 35 # 36 #
+--query_vertical SHOW SLAVE STATUS
+SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
+START SLAVE;
+
+--echo
+--echo *** Drop t10 ***
+connection master;
+DROP TABLE t10;
+sync_slave_with_master;
+
+############################################
+############## Continued ###################
+############################################
+--echo
+--echo *********************************************
+--echo * More columns in master at middle of table *
+--echo * Expect: Proper error message *
+--echo *********************************************
+--echo
+--echo *** Create t11 on slave ***
+STOP SLAVE;
+RESET SLAVE;
+
+eval CREATE TABLE t11 (a INT PRIMARY KEY, b BLOB, c VARCHAR(254)
+ ) ENGINE=$engine_type;
+
+--echo
+--echo *** Create t11 on Master ***
+connection master;
+eval CREATE TABLE t11 (a INT KEY, b BLOB, f TEXT,
+ c CHAR(5) DEFAULT 'test', e INT DEFAULT '1')ENGINE=$engine_type;
+
+RESET MASTER;
+
+--echo
+--echo *** Start Slave ***
+connection slave;
+START SLAVE;
+
+--echo
+--echo *** Master Data Insert ***
+connection master;
+set @b1 = 'b1b1b1b1';
+set @b1 = concat(@b1,@b1);
+INSERT INTO t11 () VALUES(1,@b1,'Testing is fun','Kyle',DEFAULT),
+ (2,@b1,'Testing is cool','JOE',DEFAULT),
+ (3,@b1,DEFAULT,'QA',DEFAULT);
+
+--echo
+--echo ********************************************
+--echo *** Expect slave to fail with Error 1523 ***
+--echo ********************************************
+--echo
+connection slave;
+wait_for_slave_to_stop;
+--replace_result $MASTER_MYPORT MASTER_PORT
+--replace_column 1 # 4 # 7 # 8 # 9 # 22 # 23 # 33 # 35 # 36 #
+--query_vertical SHOW SLAVE STATUS
+SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
+START SLAVE;
+
+--echo
+--echo *** Drop t11 ***
+connection master;
+DROP TABLE t11;
+sync_slave_with_master;
+
+############################################
+############## Continued ###################
+############################################
+--echo
+--echo *********************************************
+--echo * More columns in master at middle of table *
+--echo * Expect: This one should pass blob-text *
+--echo *********************************************
+--echo
+--echo *** Create t12 on slave ***
+STOP SLAVE;
+RESET SLAVE;
+eval CREATE TABLE t12 (a INT PRIMARY KEY, b BLOB, c BLOB
+ ) ENGINE=$engine_type;
+
+--echo
+--echo *** Create t12 on Master ***
+connection master;
+eval CREATE TABLE t12 (a INT KEY, b BLOB, f TEXT,
+ c CHAR(5) DEFAULT 'test', e INT DEFAULT '1')ENGINE=$engine_type;
+
+RESET MASTER;
+
+--echo
+--echo *** Start Slave ***
+connection slave;
+START SLAVE;
+
+--echo
+--echo *** Master Data Insert ***
+connection master;
+set @b1 = 'b1b1b1b1';
+set @b1 = concat(@b1,@b1);
+INSERT INTO t12 () VALUES(1,@b1,'Kyle',DEFAULT,DEFAULT),
+ (2,@b1,'JOE',DEFAULT,DEFAULT),
+ (3,@b1,'QA',DEFAULT,DEFAULT);
+--echo
+SELECT a,hex(b),f,c,e FROM t12 ORDER BY a;
+
+--echo
+--echo *** Select on Slave ***
+sync_slave_with_master;
+SELECT a,hex(b),c FROM t12 ORDER BY a;
+
+--echo
+--echo *** Drop t12 ***
+connection master;
+DROP TABLE t12;
+sync_slave_with_master;
+
+############################################
+############## Continued ###################
+############################################
+--echo
+--echo ****************************************************
+--echo * - Alter Master adding columns at middle of table *
+--echo * Expect: columns added *
+--echo ****************************************************
+--echo
+--echo
+--echo *** Create t14 on slave ***
+STOP SLAVE;
+RESET SLAVE;
+eval CREATE TABLE t14 (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
+ ) ENGINE=$engine_type;
+
+--echo
+--echo *** Create t14 on Master ***
+connection master;
+eval CREATE TABLE t14 (c1 INT KEY, c4 BLOB, c5 CHAR(5),
+ c6 INT DEFAULT '1',
+ c7 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
+ )ENGINE=$engine_type;
+
+RESET MASTER;
+
+--echo
+--echo *** Start Slave ***
+connection slave;
+START SLAVE;
+
+--echo
+--echo *** Master Data Insert ***
+connection master;
+ALTER TABLE t14 ADD COLUMN c2 DECIMAL(8,2) AFTER c1;
+ALTER TABLE t14 ADD COLUMN c3 TEXT AFTER c2;
+--echo
+set @b1 = 'b1b1b1b1';
+set @b1 = concat(@b1,@b1);
+INSERT INTO t14 () VALUES(1,1.00,'Replication Testing Extra Col',@b1,'Kyle',DEFAULT,DEFAULT),
+ (2,2.00,'This Test Should work',@b1,'JOE',DEFAULT,DEFAULT),
+ (3,3.00,'If is does not, I will open a bug',@b1,'QA',DEFAULT,DEFAULT);
+--echo
+--replace_column 7 CURRENT_TIMESTAMP
+SELECT c1,c2,c3,hex(c4),c5,c6,c7 FROM t14 ORDER BY c1;
+
+--echo
+--echo *** Select on Slave ****
+sync_slave_with_master;
+SELECT c1,c2,c3,hex(c4),c5 FROM t14 ORDER BY c1;
+
+####################################################
+--echo
+--echo ****************************************************
+--echo * - Alter Master Dropping columns from the middle. *
+--echo * Expect: columns dropped *
+--echo ****************************************************
+--echo
+--echo *** connect to master and drop columns ***
+connection master;
+ALTER TABLE t14 DROP COLUMN c2;
+ALTER TABLE t14 DROP COLUMN c7;
+--echo
+--echo *** Select from Master ***
+SELECT c1,c3,hex(c4),c5,c6 FROM t14 ORDER BY c1;
+--echo
+
+--echo ************
+--echo * Bug30415 *
+--echo ************
+# Uncomment below once fixed
+
+#--echo *** Select from Slave ***
+#sync_slave_with_master;
+#SELECT c1,c2,c3,hex(c4),c5 FROM t14 ORDER BY c1;
+
+# Bug30415
+# Remove below once fixed
+#***************************
+connection slave;
+wait_for_slave_to_stop;
+--replace_result $MASTER_MYPORT MASTER_PORT
+--replace_column 1 # 4 # 7 # 8 # 9 # 22 # 23 # 33 # 35 # 36 #
+--query_vertical SHOW SLAVE STATUS
+#***************************
+
+STOP SLAVE;
+RESET SLAVE;
+
+--echo
+--echo *** Drop t14 ***
+DROP TABLE t14;
+
+connection master;
+DROP TABLE t14;
+RESET MASTER;
+
+connection slave;
+START SLAVE;
+
+#################################################
+--echo
+--echo *************************************************
+--echo * - Alter Master adding columns at end of table *
+--echo * Expect: Error 1054 *
+--echo *************************************************
+--echo
+--echo *** Create t15 on slave ***
+STOP SLAVE;
+RESET SLAVE;
+eval CREATE TABLE t15 (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
+ ) ENGINE=$engine_type;
+
+--echo
+--echo *** Create t15 on Master ***
+connection master;
+eval CREATE TABLE t15 (c1 INT KEY, c4 BLOB, c5 CHAR(5),
+ c6 INT DEFAULT '1',
+ c7 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
+ )ENGINE=$engine_type;
+
+RESET MASTER;
+
+--echo
+--echo *** Start Slave ***
+connection slave;
+START SLAVE;
+
+--echo
+--echo *** Master Data Insert ***
+connection master;
+ALTER TABLE t15 ADD COLUMN c2 DECIMAL(8,2) AFTER c7;
+set @b1 = 'b1b1b1b1';
+set @b1 = concat(@b1,@b1);
+INSERT INTO t15 () VALUES(1,@b1,'Kyle',DEFAULT,DEFAULT,3.00),
+ (2,@b1,'JOE',DEFAULT,DEFAULT,3.00),
+ (3,@b1,'QA',DEFAULT,DEFAULT,3.00);
+--replace_column 5 CURRENT_TIMESTAMP
+SELECT c1,hex(c4),c5,c6,c7,c2 FROM t15 ORDER BY c1;
+
+--echo
+--echo ********************************************
+--echo *** Expect slave to fail with Error 1054 ***
+--echo ********************************************
+--echo
+connection slave;
+wait_for_slave_to_stop;
+--replace_result $MASTER_MYPORT MASTER_PORT
+--replace_column 1 # 4 # 7 # 8 # 9 # 22 # 23 # 33 # 35 # 36 #
+--query_vertical SHOW SLAVE STATUS
+STOP SLAVE;
+RESET SLAVE;
+
+--echo
+--echo *** Drop t15 ***
+DROP TABLE t15;
+
+connection master;
+DROP TABLE t15;
+RESET MASTER;
+
+connection slave;
+START SLAVE;
+
+####################################################
+--echo
+--echo ************************************************
+--echo * - Create index on Master column not on slave *
+--echo * Expect:Warning *
+--echo ************************************************
+--echo
+--echo *** Create t16 on slave ***
+STOP SLAVE;
+RESET SLAVE;
+eval CREATE TABLE t16 (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
+ ) ENGINE=$engine_type;
+
+--echo
+--echo *** Create t16 on Master ***
+connection master;
+eval CREATE TABLE t16 (c1 INT KEY, c4 BLOB, c5 CHAR(5),
+ c6 INT DEFAULT '1',
+ c7 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
+ )ENGINE=$engine_type;
+
+RESET MASTER;
+
+--echo
+--echo *** Start Slave ***
+connection slave;
+START SLAVE;
+
+--echo
+--echo *** Master Create Index and Data Insert ***
+connection master;
+CREATE INDEX part_of_c6 ON t16 (c6);
+set @b1 = 'b1b1b1b1';
+set @b1 = concat(@b1,@b1);
+INSERT INTO t16 () VALUES(1,@b1,'Kyle',DEFAULT,DEFAULT),
+ (2,@b1,'JOE',2,DEFAULT),
+ (3,@b1,'QA',3,DEFAULT);
+--replace_column 5 CURRENT_TIMESTAMP
+SELECT c1,hex(c4),c5,c6,c7 FROM t16 ORDER BY c1;
+
+# Uncomment the below when bug 30434 is patched
+
+#--echo *** Select on Slave ****
+#sync_slave_with_master;
+#SELECT c1,hex(c4),c5 FROM t16 ORDER BY c1;
+#
+#--echo *** Drop t16 ***
+#connection master;
+#DROP TABLE t16;
+#sync_slave_with_master;
+
+# Remove the below when bug 30434 is patched
+#*******************************************
+--echo
+--echo *****************
+--echo *** BUG 30434 ***
+--echo *****************
+--echo
+connection slave;
+wait_for_slave_to_stop;
+--replace_result $MASTER_MYPORT MASTER_PORT
+--replace_column 1 # 4 # 7 # 8 # 9 # 22 # 23 # 33 # 35 # 36 #
+--query_vertical SHOW SLAVE STATUS
+STOP SLAVE;
+RESET SLAVE;
+
+--echo
+--echo *** Drop t16 ***
+DROP TABLE t16;
+
+connection master;
+DROP TABLE t16;
+RESET MASTER;
+
+connection slave;
+START SLAVE;
+#*******************************************
+
+####################################################
+--echo
+--echo *****************************************************
+--echo * - Delete rows using column on Master not on slave *
+--echo * Expect: Rows Deleted *
+--echo *****************************************************
+--echo
+--echo *** Create t17 on slave ***
+STOP SLAVE;
+RESET SLAVE;
+eval CREATE TABLE t17 (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
+ ) ENGINE=$engine_type;
+
+--echo
+--echo *** Create t17 on Master ***
+connection master;
+eval CREATE TABLE t17 (c1 INT KEY, c4 BLOB, c5 CHAR(5),
+ c6 INT DEFAULT '1',
+ c7 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
+ )ENGINE=$engine_type;
+
+RESET MASTER;
+
+--echo
+--echo *** Start Slave ***
+connection slave;
+START SLAVE;
+
+--echo
+--echo *** Master Data Insert ***
+connection master;
+set @b1 = 'b1b1b1b1';
+set @b1 = concat(@b1,@b1);
+INSERT INTO t17 () VALUES(1,@b1,'Kyle',DEFAULT,DEFAULT),
+ (2,@b1,'JOE',2,DEFAULT),
+ (3,@b1,'QA',3,DEFAULT);
+--replace_column 5 CURRENT_TIMESTAMP
+SELECT c1,hex(c4),c5,c6,c7 FROM t17 ORDER BY c1;
+
+--echo
+--echo ** Select * from Slave **
+sync_slave_with_master;
+SELECT c1,hex(c4),c5 FROM t17 ORDER BY c1;
+
+--echo
+--echo ** Delete from master **
+connection master;
+DELETE FROM t17 WHERE c6 = 3;
+--replace_column 5 CURRENT_TIMESTAMP
+SELECT c1,hex(c4),c5,c6,c7 FROM t17 ORDER BY c1;
+
+--echo
+--echo ** Check slave **
+sync_slave_with_master;
+SELECT c1,hex(c4),c5 FROM t17 ORDER BY c1;
+
+
+connection master;
+DROP TABLE t17;
+sync_slave_with_master;
+--echo
+
+####################################################
+--echo
+--echo *****************************************************
+--echo * - Update row using column on Master not on slave *
+--echo * Expect: Rows updated *
+--echo *****************************************************
+--echo
+--echo ** Bug30674 **
+--echo
+--echo *** Create t18 on slave ***
+--echo
+
+STOP SLAVE;
+RESET SLAVE;
+eval CREATE TABLE t18 (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
+ ) ENGINE=$engine_type;
+
+--echo
+--echo *** Create t18 on Master ***
+connection master;
+eval CREATE TABLE t18 (c1 INT KEY, c4 BLOB, c5 CHAR(5),
+ c6 INT DEFAULT '1',
+ c7 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
+ )ENGINE=$engine_type;
+
+RESET MASTER;
+
+--echo
+--echo *** Start Slave ***
+connection slave;
+START SLAVE;
+
+--echo
+--echo *** Master Data Insert ***
+connection master;
+set @b1 = 'b1b1b1b1';
+set @b1 = concat(@b1,@b1);
+
+INSERT INTO t18 () VALUES(1,@b1,'Kyle',DEFAULT,DEFAULT),
+ (2,@b1,'JOE',2,DEFAULT),
+ (3,@b1,'QA',3,DEFAULT);
+--replace_column 5 CURRENT_TIMESTAMP
+SELECT c1,hex(c4),c5,c6,c7 FROM t18 ORDER BY c1;
+
+--echo
+--echo ** Select * from Slave **
+sync_slave_with_master;
+SELECT c1,hex(c4),c5 FROM t18 ORDER BY c1;
+
+--echo
+--echo ** update from master **
+connection master;
+UPDATE t18 SET c5 = 'TEST' WHERE c6 = 3;
+
+--replace_column 5 CURRENT_TIMESTAMP
+SELECT c1,hex(c4),c5,c6,c7 FROM t18 ORDER BY c1;
+
+--echo
+--echo ** Check slave **
+sync_slave_with_master;
+SELECT c1,hex(c4),c5 FROM t18 ORDER BY c1;
+
+connection master;
+DROP TABLE t18;
+sync_slave_with_master;
+--echo
+
+####################################################
+--echo
+--echo *****************************************************
+--echo * - Insert UUID column on Master not on slave *
+--echo * Expect: Rows inserted *
+--echo *****************************************************
+--echo
+--echo *** Create t5 on slave ***
+STOP SLAVE;
+RESET SLAVE;
+eval CREATE TABLE t5 (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
+ ) ENGINE=$engine_type;
+
+--echo
+--echo *** Create t5 on Master ***
+connection master;
+eval CREATE TABLE t5 (c1 INT KEY, c4 BLOB, c5 CHAR(5),
+ c6 LONG,
+ c7 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
+ )ENGINE=$engine_type;
+
+RESET MASTER;
+
+--echo
+--echo *** Start Slave ***
+connection slave;
+START SLAVE;
+
+--echo
+--echo *** Master Data Insert ***
+connection master;
+set @b1 = 'b1b1b1b1';
+INSERT INTO t5 () VALUES(1,@b1,'Kyle',UUID(),DEFAULT),
+ (2,@b1,'JOE',UUID(),DEFAULT),
+ (3,@b1,'QA',UUID(),DEFAULT);
+--replace_column 4 UUID 5 TIME
+SELECT c1,hex(c4),c5,c6,c7 FROM t5 ORDER BY c1;
+
+--echo
+--echo ** Select * from Slave **
+sync_slave_with_master;
+SELECT c1,hex(c4),c5 FROM t5 ORDER BY c1;
+
+connection master;
+DROP TABLE t5;
+sync_slave_with_master;
+--echo
-# END of the tests
+# END of 5.1 tests case
diff --git a/mysql-test/extra/rpl_tests/rpl_extraSlave_Col.test b/mysql-test/extra/rpl_tests/rpl_extraSlave_Col.test
index a4ac55cc2e8..6fa2c9ac1b5 100644
--- a/mysql-test/extra/rpl_tests/rpl_extraSlave_Col.test
+++ b/mysql-test/extra/rpl_tests/rpl_extraSlave_Col.test
@@ -10,7 +10,7 @@
########### Clean up ################
--disable_warnings
--disable_query_log
-DROP TABLE IF EXISTS t1, t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16,t17;
+DROP TABLE IF EXISTS t1, t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t14a,t15,t16,t17;
--enable_query_log
--enable_warnings
@@ -662,6 +662,68 @@ sync_slave_with_master;
--replace_column 7 CURRENT_TIMESTAMP
SELECT * FROM t14 ORDER BY c1;
+####################################################
+# - Alter Master drop column at end of table #
+# Expect: column dropped #
+####################################################
+
+--echo *** Create t14a on slave ***
+STOP SLAVE;
+RESET SLAVE;
+eval CREATE TABLE t14a (c1 INT KEY, c4 BLOB, c5 CHAR(5),
+ c6 INT DEFAULT '1',
+ c7 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
+ )ENGINE=$engine_type;
+
+--echo *** Create t14a on Master ***
+connection master;
+eval CREATE TABLE t14a (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
+ ) ENGINE=$engine_type;
+RESET MASTER;
+
+--echo *** Start Slave ***
+connection slave;
+START SLAVE;
+
+--echo *** Master Data Insert ***
+connection master;
+set @b1 = 'b1b1b1b1';
+set @b1 = concat(@b1,@b1);
+INSERT INTO t14a () VALUES(1,@b1,'Kyle'),
+ (2,@b1,'JOE'),
+ (3,@b1,'QA');
+
+SELECT * FROM t14a ORDER BY c1;
+--echo *** Select on Slave ****
+sync_slave_with_master;
+--replace_column 5 CURRENT_TIMESTAMP
+SELECT * FROM t14a ORDER BY c1;
+STOP SLAVE;
+RESET SLAVE;
+
+--echo *** Master Drop c5 ***
+connection master;
+ALTER TABLE t14a DROP COLUMN c5;
+RESET MASTER;
+
+--echo *** Start Slave ***
+connection slave;
+START SLAVE;
+
+--echo *** Master Data Insert ***
+connection master;
+set @b1 = 'b1b1b1b1';
+set @b1 = concat(@b1,@b1);
+
+INSERT INTO t14a () VALUES(4,@b1),
+ (5,@b1),
+ (6,@b1);
+SELECT * FROM t14a ORDER BY c1;
+
+--echo *** Select on Slave ****
+sync_slave_with_master;
+--replace_column 5 CURRENT_TIMESTAMP
+SELECT * FROM t14a ORDER BY c1;
####################################################
# - Alter Master Dropping columns from the middle. #
@@ -736,7 +798,7 @@ connection slave;
--replace_result $MASTER_MYPORT MASTER_PORT
--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;
+SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
START SLAVE;
--echo *** Try to insert in master ****
@@ -744,6 +806,8 @@ connection master;
INSERT INTO t15 () VALUES(5,2.00,'Replication Testing',@b1,'Buda',2);
SELECT * FROM t15 ORDER BY c1;
+#SHOW BINLOG EVENTS;
+
--echo *** Try to select from slave ****
sync_slave_with_master;
--replace_column 7 CURRENT_TIMESTAMP
@@ -856,7 +920,10 @@ sync_slave_with_master;
#### Clean Up ####
--disable_warnings
--disable_query_log
-DROP TABLE IF EXISTS t1, t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16,t17;
+connection master;
+DROP TABLE IF EXISTS t1, t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t14a,t15,t16,t17;
+sync_slave_with_master;
+connection master;
--enable_query_log
--enable_warnings
diff --git a/mysql-test/extra/rpl_tests/rpl_foreign_key.test b/mysql-test/extra/rpl_tests/rpl_foreign_key.test
index 583f2d85554..8755bf5aa87 100644
--- a/mysql-test/extra/rpl_tests/rpl_foreign_key.test
+++ b/mysql-test/extra/rpl_tests/rpl_foreign_key.test
@@ -32,3 +32,34 @@ SET FOREIGN_KEY_CHECKS=0;
DROP TABLE IF EXISTS t1,t2,t3;
SET FOREIGN_KEY_CHECKS=1;
sync_slave_with_master;
+
+#
+# Bug #32468 delete rows event on a table with foreign key constraint fails
+#
+
+connection master;
+
+eval create table t1 (b int primary key) engine = $engine_type;
+eval create table t2 (a int primary key, b int, foreign key (b) references t1(b))
+ engine = $engine_type;
+
+insert into t1 set b=1;
+insert into t2 set a=1, b=1;
+
+set foreign_key_checks=0;
+set @@session.binlog_format=row;
+delete from t1;
+
+--echo must sync w/o a problem (could not with the buggy code)
+sync_slave_with_master;
+select count(*) from t1 /* must be zero */;
+
+
+# cleanup for bug#32468
+
+connection master;
+drop table t2,t1;
+
+sync_slave_with_master;
+
+
diff --git a/mysql-test/extra/rpl_tests/rpl_max_relay_size.test b/mysql-test/extra/rpl_tests/rpl_max_relay_size.test
index 6b84cf67d58..5b546bbd891 100644
--- a/mysql-test/extra/rpl_tests/rpl_max_relay_size.test
+++ b/mysql-test/extra/rpl_tests/rpl_max_relay_size.test
@@ -43,7 +43,7 @@ set global max_relay_log_size=8192-1; # mapped to 4096
select @@global.max_relay_log_size;
start slave;
sync_with_master;
-source include/show_slave_status.inc;
+source include/show_slave_status2.inc;
--echo #
--echo # Test 2
@@ -55,7 +55,7 @@ set global max_relay_log_size=(5*4096);
query_vertical select @@global.max_relay_log_size;
start slave;
sync_with_master;
-source include/show_slave_status.inc;
+source include/show_slave_status2.inc;
--echo #
--echo # Test 3: max_relay_log_size = 0
@@ -67,7 +67,7 @@ set global max_relay_log_size=0;
query_vertical select @@global.max_relay_log_size;
start slave;
sync_with_master;
-source include/show_slave_status.inc;
+source include/show_slave_status2.inc;
--echo #
--echo # Test 4: Tests below are mainly to ensure that we have not coded with wrong assumptions
@@ -78,7 +78,7 @@ reset slave;
# test of relay log rotation when the slave is stopped
# (to make sure it does not crash).
flush logs;
-source include/show_slave_status.inc;
+source include/show_slave_status2.inc;
--echo #
--echo # Test 5
@@ -96,7 +96,7 @@ create table t1 (a int);
save_master_pos;
connection slave;
sync_with_master;
-source include/show_slave_status.inc;
+source include/show_slave_status2.inc;
--echo #
--echo # Test 6: one more rotation, to be sure Relay_Log_Space is correctly updated
@@ -108,13 +108,12 @@ drop table t1;
save_master_pos;
connection slave;
sync_with_master;
-source include/show_slave_status.inc;
+source include/show_slave_status2.inc;
connection master;
# test that the absence of relay logs does not make a master crash
flush logs;
--- replace_column 3 <Binlog_Ignore_DB>
-query_vertical show master status;
+source include/show_master_status.inc;
# Restore max_binlog_size
connection slave;
diff --git a/mysql-test/extra/rpl_tests/rpl_reset_slave.test b/mysql-test/extra/rpl_tests/rpl_reset_slave.test
index 83b39d3299a..2cc041a35e1 100644
--- a/mysql-test/extra/rpl_tests/rpl_reset_slave.test
+++ b/mysql-test/extra/rpl_tests/rpl_reset_slave.test
@@ -13,18 +13,18 @@ connection master;
save_master_pos;
connection slave;
sync_with_master;
-source include/show_slave_status.inc;
+source include/show_slave_status2.inc;
stop slave;
change master to master_user='test';
-source include/show_slave_status.inc;
+source include/show_slave_status2.inc;
reset slave;
-source include/show_slave_status.inc;
+source include/show_slave_status2.inc;
start slave;
sync_with_master;
-source include/show_slave_status.inc;
+source include/show_slave_status2.inc;
# test of crash with temp tables & RESET SLAVE
# (test to see if RESET SLAVE clears temp tables in memory and disk)
diff --git a/mysql-test/extra/rpl_tests/rpl_row_basic.test b/mysql-test/extra/rpl_tests/rpl_row_basic.test
index 6de254d9931..48ddbaf244a 100644
--- a/mysql-test/extra/rpl_tests/rpl_row_basic.test
+++ b/mysql-test/extra/rpl_tests/rpl_row_basic.test
@@ -174,11 +174,18 @@ sync_slave_with_master;
INSERT INTO t7 VALUES (1,3), (2,6), (3,9);
SELECT * FROM t7 ORDER BY C1;
+# since bug#31552/31609 idempotency is not default any longer. In order
+# the preceeding test INSERT INTO t7 to pass the mode is switched
+# temprorarily
+set @@global.slave_exec_mode= 'IDEMPOTENT';
+
connection master;
--echo --- on master: new values inserted ---
INSERT INTO t7 VALUES (1,2), (2,4), (3,6);
SELECT * FROM t7 ORDER BY C1;
sync_slave_with_master;
+
+set @@global.slave_exec_mode= default;
--echo --- on slave: old values should be overwritten by replicated values ---
SELECT * FROM t7 ORDER BY C1;
@@ -206,20 +213,57 @@ SELECT * FROM t8 ORDER BY a;
INSERT INTO t8 VALUES (1,2,3), (2,4,6), (3,6,9);
SELECT * FROM t8 ORDER BY a;
+# since bug#31552/31609 idempotency is not default any longer. In order
+# the preceeding test INSERT INTO t8 to pass the mode is switched
+# temprorarily
+set @@global.slave_exec_mode= 'IDEMPOTENT';
+
connection master;
--echo --- on master ---
# We insert a row that will cause conflict on the primary key but not
# on the other keys.
INSERT INTO t8 VALUES (2,4,8);
sync_slave_with_master;
+set @@global.slave_exec_mode= default;
+
--echo --- on slave ---
SELECT * FROM t8 ORDER BY a;
-#
-# Test conflicting operations when changing in a table referenced by a
-# foreign key. We'll reuse the above table and just add a table that
-# references it.
-#
+# BUG#31552: Replication breaks when deleting rows from out-of-sync
+# table without PK
+
+--echo **** Test for BUG#31552 ****
+
+--echo **** On Master ****
+# Clean up t1 so that we can use it.
+connection master;
+DELETE FROM t1;
+sync_slave_with_master;
+
+# Just to get a clean binary log
+source include/reset_master_and_slave.inc;
+
+--echo **** On Master ****
+connection master;
+INSERT INTO t1 VALUES ('K','K'), ('L','L'), ('M','M');
+--echo **** On Master ****
+sync_slave_with_master;
+# since bug#31552/31609 idempotency is not default any longer. In order
+# the following test DELETE FROM t1 to pass the mode is switched
+# temprorarily
+set @@global.slave_exec_mode= 'IDEMPOTENT';
+DELETE FROM t1 WHERE C1 = 'L';
+
+connection master;
+DELETE FROM t1;
+query_vertical SELECT COUNT(*) FROM t1 ORDER BY c1,c2;
+sync_slave_with_master;
+set @@global.slave_exec_mode= default;
+let $last_error = query_get_value("SHOW SLAVE STATUS", Last_SQL_Errno, 1);
+disable_query_log;
+eval SELECT "$last_error" AS Last_SQL_Error;
+enable_query_log;
+query_vertical SELECT COUNT(*) FROM t1 ORDER BY c1,c2;
#
# cleanup
@@ -227,3 +271,4 @@ SELECT * FROM t8 ORDER BY a;
connection master;
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7,t8;
+sync_slave_with_master;
diff --git a/mysql-test/extra/rpl_tests/rpl_row_charset.test b/mysql-test/extra/rpl_tests/rpl_row_charset.test
index a21ed5bb841..c1eccff9bd5 100644
--- a/mysql-test/extra/rpl_tests/rpl_row_charset.test
+++ b/mysql-test/extra/rpl_tests/rpl_row_charset.test
@@ -38,7 +38,7 @@ show create database mysqltest3;
connection master;
use mysqltest2;
-create table t1 (a int auto_increment primary key, b varchar(100));
+--eval create table t1 (a int auto_increment primary key, b varchar(100))engine=$engine_type;
set character_set_client=cp850, collation_connection=latin2_croatian_ci;
insert into t1 (b) values(@@character_set_server);
insert into t1 (b) values(@@collation_server);
@@ -146,13 +146,15 @@ set collation_server=9999998;
select "--- --3943--" as "";
use test;
-CREATE TABLE t1 (c1 VARBINARY(255), c2 VARBINARY(255));
+--eval CREATE TABLE t1 (c1 VARBINARY(255), c2 VARBINARY(255))ENGINE=$engine_type;
SET CHARACTER_SET_CLIENT=koi8r,
CHARACTER_SET_CONNECTION=cp1251,
CHARACTER_SET_RESULTS=koi8r;
INSERT INTO t1 (c1, c2) VALUES ('îÕ, ÚÁ ÒÙÂÁÌËÕ','îÕ, ÚÁ ÒÙÂÁÌËÕ');
+SET SQL_BIG_SELECTS=1;
select hex(c1), hex(c2) from t1;
sync_slave_with_master;
+SET SQL_BIG_SELECTS=1;
select hex(c1), hex(c2) from t1;
connection master;
diff --git a/mysql-test/extra/rpl_tests/rpl_row_tabledefs.test b/mysql-test/extra/rpl_tests/rpl_row_tabledefs.test
index 23ac16d24ae..b5795cf525d 100644
--- a/mysql-test/extra/rpl_tests/rpl_row_tabledefs.test
+++ b/mysql-test/extra/rpl_tests/rpl_row_tabledefs.test
@@ -69,6 +69,11 @@ ALTER TABLE t8 ADD e1 INT NOT NULL DEFAULT 0, ADD e2 INT NOT NULL DEFAULT 0,
# Insert some values for tables on slave side. These should not be
# modified when the row from the master is applied.
+# since bug#31552/31609 idempotency is not default any longer. In order
+# the following INSERTs to pass the mode is switched temprorarily
+set @@global.slave_exec_mode= 'IDEMPOTENT';
+
+# so the inserts are going to be overriden
INSERT INTO t1_int VALUES (2, 4, 4711);
INSERT INTO t1_char VALUES (2, 4, 'Foo is a bar');
INSERT INTO t1_bit VALUES (2, 4, b'101', b'11100', b'01');
@@ -86,6 +91,8 @@ SELECT * FROM t1_bit ORDER BY a;
SELECT * FROM t1_char ORDER BY a;
--echo **** On Slave ****
sync_slave_with_master;
+set @@global.slave_exec_mode= default;
+
SELECT a,b,x FROM t1_int ORDER BY a;
SELECT a,b,HEX(x),HEX(y),HEX(z) FROM t1_bit ORDER BY a;
SELECT a,b,x FROM t1_char ORDER BY a;
@@ -115,7 +122,7 @@ INSERT INTO t1_nodef VALUES (1,2);
connection slave;
--source include/wait_for_slave_sql_to_stop.inc
--replace_result $MASTER_MYPORT MASTER_PORT
---replace_column 1 # 4 # 7 # 8 # 9 # 22 # 23 # 33 #
+--replace_column 1 # 4 # 7 # 8 # 9 # 20 <Last_Error> 22 # 23 # 33 # 36 <Last_IO_Error> 38 <Last_SQL_Error>
--query_vertical SHOW SLAVE STATUS
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
START SLAVE;
@@ -135,7 +142,7 @@ sync_slave_with_master;
--echo **** On Slave ****
SELECT * FROM t2;
--replace_result $MASTER_MYPORT MASTER_PORT
---replace_column 1 # 4 # 7 # 8 # 9 # 22 # 23 # 33 #
+--replace_column 1 # 4 # 7 # 8 # 9 # 20 <Last_Error> 22 # 23 # 33 # 36 <Last_IO_Error> 38 <Last_SQL_Error>
--query_vertical SHOW SLAVE STATUS
connection master;
@@ -147,7 +154,7 @@ INSERT INTO t4 VALUES (4);
connection slave;
--source include/wait_for_slave_sql_to_stop.inc
--replace_result $MASTER_MYPORT MASTER_PORT
---replace_column 1 # 4 # 7 # 8 # 9 # 22 # 23 # 33 #
+--replace_column 1 # 4 # 7 # 8 # 9 # 20 <Last_Error> 22 # 23 # 33 # 36 <Last_IO_Error> 38 <Last_SQL_Error>
--query_vertical SHOW SLAVE STATUS
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
START SLAVE;
@@ -161,7 +168,7 @@ INSERT INTO t5 VALUES (5,10,25);
connection slave;
--source include/wait_for_slave_sql_to_stop.inc
--replace_result $MASTER_MYPORT MASTER_PORT
---replace_column 1 # 4 # 7 # 8 # 9 # 22 # 23 # 33 #
+--replace_column 1 # 4 # 7 # 8 # 9 # 20 <Last_Error> 22 # 23 # 33 # 36 <Last_IO_Error> 38 <Last_SQL_Error>
--query_vertical SHOW SLAVE STATUS
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
START SLAVE;
@@ -175,7 +182,7 @@ INSERT INTO t6 VALUES (6,12,36);
connection slave;
--source include/wait_for_slave_sql_to_stop.inc
--replace_result $MASTER_MYPORT MASTER_PORT
---replace_column 1 # 4 # 7 # 8 # 9 # 22 # 23 # 33 #
+--replace_column 1 # 4 # 7 # 8 # 9 # 20 <Last_Error> 22 # 23 # 33 # 36 <Last_IO_Error> 38 <Last_SQL_Error>
--query_vertical SHOW SLAVE STATUS
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
START SLAVE;
@@ -184,7 +191,7 @@ connection master;
INSERT INTO t9 VALUES (6);
sync_slave_with_master;
--replace_result $SLAVE_MYPORT SLAVE_PORT
---replace_column 1 # 4 # 7 # 8 # 9 # 22 # 23 # 33 #
+--replace_column 1 # 4 # 7 # 8 # 9 # 20 <Last_Error> 22 # 23 # 33 # 36 <Last_IO_Error> 38 <Last_SQL_Error>
--query_vertical SHOW SLAVE STATUS
# Testing some tables extra field that can be null and cannot be null
diff --git a/mysql-test/extra/rpl_tests/rpl_truncate_helper.test b/mysql-test/extra/rpl_tests/rpl_truncate_helper.test
index 64a8de7c6a0..76db74acfa1 100644
--- a/mysql-test/extra/rpl_tests/rpl_truncate_helper.test
+++ b/mysql-test/extra/rpl_tests/rpl_truncate_helper.test
@@ -1,17 +1,16 @@
-
---disable_query_log
---disable_warnings
connection slave;
STOP SLAVE;
+source include/wait_for_slave_to_stop.inc;
connection master;
+--disable_warnings
DROP TABLE IF EXISTS t1;
-RESET MASTER;
+--enable_warnings
connection slave;
+--disable_warnings
DROP TABLE IF EXISTS t1;
+--enable_warnings
RESET SLAVE;
START SLAVE;
---enable_warnings
---enable_query_log
--echo **** On Master ****
connection master;
@@ -38,3 +37,6 @@ connection master;
DROP TABLE t1;
let $SERVER_VERSION=`select version()`;
source include/show_binlog_events.inc;
+
+connection master;
+RESET MASTER;
diff --git a/mysql-test/include/ctype_common.inc b/mysql-test/include/ctype_common.inc
index 9ee0a40c8ce..89b7ceb0c72 100644
--- a/mysql-test/include/ctype_common.inc
+++ b/mysql-test/include/ctype_common.inc
@@ -53,11 +53,13 @@ DROP TABLE t1;
#
# Bug #31070: crash during conversion of charsets
+# Bug #32726: crash with cast in order by clause and cp932 charset
#
create table t1 (a set('a') not null);
insert into t1 values (),();
select cast(a as char(1)) from t1;
select a sounds like a from t1;
+select 1 from t1 order by cast(a as char(1));
drop table t1;
DROP DATABASE d1;
diff --git a/mysql-test/include/ctype_regex.inc b/mysql-test/include/ctype_regex.inc
new file mode 100644
index 00000000000..0e6b4c41607
--- /dev/null
+++ b/mysql-test/include/ctype_regex.inc
@@ -0,0 +1,42 @@
+#
+# To test a desired collation, set session.collation_connection to
+# this collation before including this file
+#
+
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+
+#
+# Create a table with two varchar(64) null-able column,
+# using current values of
+# @@character_set_connection and @@collation_connection.
+#
+
+create table t1 as
+select repeat(' ', 64) as s1, repeat(' ',64) as s2
+union
+select null, null;
+show create table t1;
+delete from t1;
+
+insert into t1 values('aaa','aaa');
+insert into t1 values('aaa|qqq','qqq');
+insert into t1 values('gheis','^[^a-dXYZ]+$');
+insert into t1 values('aab','^aa?b');
+insert into t1 values('Baaan','^Ba*n');
+insert into t1 values('aaa','qqq|aaa');
+insert into t1 values('qqq','qqq|aaa');
+
+insert into t1 values('bbb','qqq|aaa');
+insert into t1 values('bbb','qqq');
+insert into t1 values('aaa','aba');
+
+insert into t1 values(null,'abc');
+insert into t1 values('def',null);
+insert into t1 values(null,null);
+insert into t1 values('ghi','ghi[');
+
+select HIGH_PRIORITY s1 regexp s2 from t1;
+
+drop table t1;
diff --git a/mysql-test/include/delete_anonymous_users.inc b/mysql-test/include/delete_anonymous_users.inc
index 9f642223748..704e74ae4a3 100644
--- a/mysql-test/include/delete_anonymous_users.inc
+++ b/mysql-test/include/delete_anonymous_users.inc
@@ -1,5 +1,7 @@
# Remove anonymous users added by add_anonymous_users.inc
+disable_warnings;
disable_query_log;
DELETE FROM mysql.user where host='localhost' and user='';
FLUSH PRIVILEGES;
enable_query_log;
+enable_warnings;
diff --git a/mysql-test/include/gis_keys.inc b/mysql-test/include/gis_keys.inc
new file mode 100644
index 00000000000..c75311f062a
--- /dev/null
+++ b/mysql-test/include/gis_keys.inc
@@ -0,0 +1,46 @@
+--source include/have_geometry.inc
+
+#
+# Spatial objects with keys
+#
+
+#
+# Bug #30825: Problems when putting a non-spatial index on a GIS column
+#
+
+CREATE TABLE t1 (p POINT);
+CREATE TABLE t2 (p POINT, INDEX(p));
+INSERT INTO t1 VALUES (POINTFROMTEXT('POINT(1 2)'));
+INSERT INTO t2 VALUES (POINTFROMTEXT('POINT(1 2)'));
+
+# no index, returns 1 as expected
+SELECT COUNT(*) FROM t1 WHERE p=POINTFROMTEXT('POINT(1 2)');
+
+# with index, returns 1 as expected
+# EXPLAIN shows that the index is not used though
+# due to the "most rows covered anyway, so a scan is more effective" rule
+EXPLAIN
+SELECT COUNT(*) FROM t2 WHERE p=POINTFROMTEXT('POINT(1 2)');
+SELECT COUNT(*) FROM t2 WHERE p=POINTFROMTEXT('POINT(1 2)');
+
+# adding another row to the table so that
+# the "most rows covered" rule doesn't kick in anymore
+# now EXPLAIN shows the index used on the table
+# and we're getting the wrong result again
+INSERT INTO t1 VALUES (POINTFROMTEXT('POINT(1 2)'));
+INSERT INTO t2 VALUES (POINTFROMTEXT('POINT(1 2)'));
+EXPLAIN
+SELECT COUNT(*) FROM t1 WHERE p=POINTFROMTEXT('POINT(1 2)');
+SELECT COUNT(*) FROM t1 WHERE p=POINTFROMTEXT('POINT(1 2)');
+
+EXPLAIN
+SELECT COUNT(*) FROM t2 WHERE p=POINTFROMTEXT('POINT(1 2)');
+SELECT COUNT(*) FROM t2 WHERE p=POINTFROMTEXT('POINT(1 2)');
+
+EXPLAIN
+SELECT COUNT(*) FROM t2 IGNORE INDEX(p) WHERE p=POINTFROMTEXT('POINT(1 2)');
+SELECT COUNT(*) FROM t2 IGNORE INDEX(p) WHERE p=POINTFROMTEXT('POINT(1 2)');
+
+DROP TABLE t1, t2;
+
+--echo End of 5.0 tests
diff --git a/mysql-test/include/handler.inc b/mysql-test/include/handler.inc
index 71647112126..485b2e881d3 100644
--- a/mysql-test/include/handler.inc
+++ b/mysql-test/include/handler.inc
@@ -566,3 +566,129 @@ reap;
connection default;
drop table t2;
disconnect flush;
+
+#
+# Bug#30882 Dropping a temporary table inside a stored function may cause a server crash
+#
+# Test HANDLER statements in conjunction with temporary tables. While the temporary table
+# is open by a HANDLER, no other statement can access it.
+#
+
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+create temporary table t1 (a int, b char(1), key a(a), key b(a,b));
+insert into t1 values (0,"a"),(1,"b"),(2,"c"),(3,"d"),(4,"e"),
+ (5,"f"),(6,"g"),(7,"h"),(8,"i"),(9,"j");
+select a,b from t1;
+handler t1 open as a1;
+handler a1 read a first;
+handler a1 read a next;
+handler a1 read a next;
+--error ER_CANT_REOPEN_TABLE
+select a,b from t1;
+handler a1 read a prev;
+handler a1 read a prev;
+handler a1 read a=(6) where b="g";
+handler a1 close;
+select a,b from t1;
+handler t1 open as a2;
+handler a2 read a first;
+handler a2 read a last;
+handler a2 read a prev;
+handler a2 close;
+drop table t1;
+
+#
+# Bug#31397 Inconsistent drop table behavior of handler tables.
+#
+
+--disable_warnings
+drop table if exists t1,t2;
+--enable_warnings
+create table t1 (a int);
+handler t1 open as t1_alias;
+drop table t1;
+create table t1 (a int);
+handler t1 open as t1_alias;
+flush tables;
+drop table t1;
+create table t1 (a int);
+handler t1 open as t1_alias;
+handler t1_alias close;
+drop table t1;
+create table t1 (a int);
+handler t1 open as t1_alias;
+handler t1_alias read first;
+drop table t1;
+--error ER_UNKNOWN_TABLE
+handler t1_alias read next;
+
+# Test that temporary tables associated with handlers are properly dropped.
+
+create table t1 (a int);
+create temporary table t2 (a int, key(a));
+handler t1 open as a1;
+handler t2 open as a2;
+handler a2 read a first;
+drop table t1, t2;
+--error ER_UNKNOWN_TABLE
+handler a2 read a next;
+--error ER_UNKNOWN_TABLE
+handler a1 close;
+
+# Alter table drop handlers
+
+create table t1 (a int, key(a));
+create table t2 like t1;
+handler t1 open as a1;
+handler t2 open as a2;
+handler a1 read a first;
+handler a2 read a first;
+alter table t1 add b int;
+--error ER_UNKNOWN_TABLE
+handler a1 close;
+handler a2 close;
+drop table t1, t2;
+
+# Rename table drop handlers
+
+create table t1 (a int, key(a));
+handler t1 open as a1;
+handler a1 read a first;
+rename table t1 to t2;
+--error ER_UNKNOWN_TABLE
+handler a1 read a first;
+drop table t2;
+
+# Optimize table drop handlers
+
+create table t1 (a int, key(a));
+create table t2 like t1;
+handler t1 open as a1;
+handler t2 open as a2;
+handler a1 read a first;
+handler a2 read a first;
+optimize table t1;
+--error ER_UNKNOWN_TABLE
+handler a1 close;
+handler a2 close;
+drop table t1, t2;
+
+# Flush tables causes handlers reopen
+
+create table t1 (a int, b char(1), key a(a), key b(a,b));
+insert into t1 values (0,"a"),(1,"b"),(2,"c"),(3,"d"),(4,"e"),
+ (5,"f"),(6,"g"),(7,"h"),(8,"i"),(9,"j");
+handler t1 open;
+handler t1 read a first;
+handler t1 read a next;
+flush tables;
+handler t1 read a next;
+handler t1 read a next;
+flush tables with read lock;
+handler t1 read a next;
+unlock tables;
+drop table t1;
+--error ER_UNKNOWN_TABLE
+handler t1 read a next;
diff --git a/mysql-test/include/have_binlog_format_row_or_statement.inc b/mysql-test/include/have_binlog_format_row_or_statement.inc
new file mode 100644
index 00000000000..c89df82eb80
--- /dev/null
+++ b/mysql-test/include/have_binlog_format_row_or_statement.inc
@@ -0,0 +1,7 @@
+--source include/have_log_bin.inc
+
+-- require r/have_binlog_format_statement.require
+--disable_query_log
+--replace_result ROW STATEMENT
+show variables like "binlog_format";
+--enable_query_log
diff --git a/mysql-test/include/have_community_features.inc b/mysql-test/include/have_community_features.inc
new file mode 100644
index 00000000000..01ed6142500
--- /dev/null
+++ b/mysql-test/include/have_community_features.inc
@@ -0,0 +1,4 @@
+--require r/have_community_features.require
+--disable_query_log
+show variables like "have_community_features";
+--enable_query_log
diff --git a/mysql-test/include/have_innodb.inc b/mysql-test/include/have_innodb.inc
index cbffe6a2574..8944cc46f3e 100644
--- a/mysql-test/include/have_innodb.inc
+++ b/mysql-test/include/have_innodb.inc
@@ -1,4 +1,4 @@
disable_query_log;
--require r/true.require
-select (support = 'YES' or support = 'DEFAULT') as `TRUE` from information_schema.engines where engine = 'innodb';
+select (support = 'YES' or support = 'DEFAULT' or support = 'ENABLED') as `TRUE` from information_schema.engines where engine = 'innodb';
enable_query_log;
diff --git a/mysql-test/include/have_local_infile.inc b/mysql-test/include/have_local_infile.inc
new file mode 100644
index 00000000000..4a1362c6e30
--- /dev/null
+++ b/mysql-test/include/have_local_infile.inc
@@ -0,0 +1,4 @@
+--require r/have_local_infile.require
+disable_query_log;
+show variables like 'local_infile';
+enable_query_log;
diff --git a/mysql-test/include/have_multi_ndb.inc b/mysql-test/include/have_multi_ndb.inc
index deda22b64c0..8dbfa2aa034 100644
--- a/mysql-test/include/have_multi_ndb.inc
+++ b/mysql-test/include/have_multi_ndb.inc
@@ -4,27 +4,49 @@ connect (server2,127.0.0.1,root,,test,$MASTER_MYPORT1,);
# Check that server1 has NDB support
connection server1;
+let $engines_table= query_get_value(SHOW TABLES FROM information_schema LIKE 'ENGINES', Tables_in_information_schema (ENGINES), 1);
disable_query_log;
---disable_warnings
-drop table if exists t1, t2;
---enable_warnings
-flush tables;
+if (`SELECT 1 FROM dual WHERE '$engines_table' = 'engines'`)
+{
--require r/true.require
-select (support = 'YES' or support = 'DEFAULT') as `TRUE` from information_schema.engines where engine = 'ndbcluster';
+SELECT (support = 'YES' or support = 'DEFAULT' or support = 'ENABLED') as `TRUE` FROM information_schema.engines WHERE engine = 'ndbcluster';
--source include/ndb_not_readonly.inc
+}
enable_query_log;
# Check that server2 has NDB support
connection server2;
+let $engines_table= query_get_value(SHOW TABLES FROM information_schema LIKE 'ENGINES', Tables_in_information_schema (ENGINES), 1);
disable_query_log;
---disable_warnings
-drop table if exists t1, t2;
---enable_warnings
-flush tables;
+if (`SELECT 1 FROM dual WHERE '$engines_table' = 'engines'`)
+{
--require r/true.require
-select (support = 'YES' or support = 'DEFAULT') as `TRUE` from information_schema.engines where engine = 'ndbcluster';
+SELECT (support = 'YES' or support = 'DEFAULT' or support = 'ENABLED') as `TRUE` FROM information_schema.engines WHERE engine = 'ndbcluster';
--source include/ndb_not_readonly.inc
+}
+enable_query_log;
+
+# cleanup
+
+connection server1;
+disable_query_log;
+disable_warnings;
+--error 0,1051
+drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9,t10;
+flush tables;
+flush status;
+enable_warnings;
+enable_query_log;
+
+connection server2;
+disable_query_log;
+disable_warnings;
+--error 0,1051
+drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9,t10;
+flush tables;
+flush status;
+enable_warnings;
enable_query_log;
-# Set the default connection to 'server1'
+# Set the default connection
connection server1;
diff --git a/mysql-test/include/innodb_rollback_on_timeout.inc b/mysql-test/include/innodb_rollback_on_timeout.inc
index 73c7374c79e..6be47397e4b 100644
--- a/mysql-test/include/innodb_rollback_on_timeout.inc
+++ b/mysql-test/include/innodb_rollback_on_timeout.inc
@@ -2,6 +2,10 @@
# Bug #24200: Provide backwards compatibility mode for 4.x "rollback on
# transaction timeout"
#
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+
show variables like 'innodb_rollback_on_timeout';
create table t1 (a int unsigned not null primary key) engine = innodb;
insert into t1 values (1);
diff --git a/mysql-test/include/mix1.inc b/mysql-test/include/mix1.inc
index aee5613ff35..703dfa44df0 100644
--- a/mysql-test/include/mix1.inc
+++ b/mysql-test/include/mix1.inc
@@ -29,6 +29,7 @@ eval SET SESSION STORAGE_ENGINE = $engine_type;
--disable_warnings
drop table if exists t1,t2,t3,t1m,t1i,t2m,t2i,t4;
+drop procedure if exists p1;
--enable_warnings
@@ -722,7 +723,6 @@ set @@sort_buffer_size=default;
DROP TABLE t1,t2;
-#
# Test of behaviour with CREATE ... SELECT
#
@@ -1019,6 +1019,77 @@ SELECT * FROM t1 ORDER BY b DESC, a ASC;
DROP TABLE t1;
+###########################################################################
+
+--echo
+--echo #
+--echo # Bug#27610: ALTER TABLE ROW_FORMAT=... does not rebuild the table.
+--echo #
+
+--echo
+--echo # - prepare;
+--echo
+
+--disable_warnings
+DROP TABLE IF EXISTS t1;
+--enable_warnings
+
+--echo
+
+CREATE TABLE t1(c INT)
+ ENGINE = InnoDB
+ ROW_FORMAT = COMPACT;
+
+--echo
+--echo # - initial check;
+--echo
+
+SELECT table_schema, table_name, row_format
+FROM INFORMATION_SCHEMA.TABLES
+WHERE table_schema = DATABASE() AND table_name = 't1';
+
+--echo
+--echo # - change ROW_FORMAT and check;
+--echo
+
+ALTER TABLE t1 ROW_FORMAT = REDUNDANT;
+
+--echo
+
+SELECT table_schema, table_name, row_format
+FROM INFORMATION_SCHEMA.TABLES
+WHERE table_schema = DATABASE() AND table_name = 't1';
+
+--echo
+--echo # - that's it, cleanup.
+--echo
+
+DROP TABLE t1;
+
+###########################################################################
+
+#
+# Bug #31137: Assertion failed: primary_key_no == -1 || primary_key_no == 0
+#
+create table t1(a char(10) not null, unique key aa(a(1)),
+ b char(4) not null, unique key bb(b(4))) engine=innodb;
+desc t1;
+show create table t1;
+drop table t1;
+
+#
+# Bug #32815: query with ORDER BY and a possible ref_or_null access
+#
+
+CREATE TABLE t1 (id int, type char(6), d int, INDEX idx(id,d)) ENGINE=InnoDB;
+INSERT INTO t1 VALUES
+ (191, 'member', 1), (NULL, 'member', 3), (NULL, 'member', 4), (201, 'member', 2);
+
+EXPLAIN SELECT * FROM t1 WHERE id=191 OR id IS NULL ORDER BY d;
+SELECT * FROM t1 WHERE id=191 OR id IS NULL ORDER BY d;
+
+DROP TABLE t1;
+
--echo End of 5.0 tests
# Fix for BUG#19243 "wrong LAST_INSERT_ID() after ON DUPLICATE KEY
@@ -1147,6 +1218,129 @@ select if(@a=@b,"ok","wrong");
drop table t1;
#
+# Bug #31310: Locked rows silently skipped in read-committed isolation level.
+#
+
+connect (con1,localhost,root,,);
+connect (con2,localhost,root,,);
+SET SESSION AUTOCOMMIT = 0;
+SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
+--echo # Switch to connection con1
+connection con1;
+
+eval
+CREATE TABLE t1 (a INT PRIMARY KEY, b VARCHAR(256))
+ENGINE = $engine_type;
+INSERT INTO t1 VALUES (1,2);
+
+--echo # 1. test for locking:
+
+BEGIN;
+--enable_info
+UPDATE t1 SET b = 12 WHERE a = 1;
+--disable_info
+SELECT * FROM t1;
+
+--echo # Switch to connection con2
+connection con2;
+
+--enable_info
+--disable_abort_on_error
+--error ER_LOCK_WAIT_TIMEOUT
+UPDATE t1 SET b = 21 WHERE a = 1;
+--disable_info
+
+--echo # Switch to connection con1
+connection con1;
+SELECT * FROM t1;
+ROLLBACK;
+
+--echo # 2. test for serialized update:
+
+CREATE TABLE t2 (a INT);
+
+TRUNCATE t1;
+INSERT INTO t1 VALUES (1,'init');
+
+DELIMITER |;
+CREATE PROCEDURE p1()
+BEGIN
+ UPDATE t1 SET b = CONCAT(b, '+con2') WHERE a = 1;
+ INSERT INTO t2 VALUES ();
+END|
+DELIMITER ;|
+
+BEGIN;
+--enable_info
+UPDATE t1 SET b = CONCAT(b, '+con1') WHERE a = 1;
+--disable_info
+SELECT * FROM t1;
+
+--echo # Switch to connection con2
+connection con2;
+
+--send CALL p1;
+
+--echo # Switch to connection con1
+connection con1;
+SELECT * FROM t1;
+COMMIT;
+
+let $bug31310 = 1;
+while ($bug31310)
+{
+ let $bug31310= `SELECT 1 - COUNT(*) FROM t2`;
+}
+
+SELECT * FROM t1;
+
+--echo # Switch to connection con2
+connection con2;
+SELECT * FROM t1;
+
+--echo # Switch to connection con1
+connection con1;
+
+--echo # 3. test for updated key column:
+
+TRUNCATE t1;
+TRUNCATE t2;
+
+INSERT INTO t1 VALUES (1,'init');
+
+BEGIN;
+--enable_info
+UPDATE t1 SET a = 2, b = CONCAT(b, '+con1') WHERE a = 1;
+--disable_info
+SELECT * FROM t1;
+
+--echo # Switch to connection con2
+connection con2;
+
+--send CALL p1;
+
+--echo # Switch to connection con1
+connection con1;
+SELECT * FROM t1;
+COMMIT;
+
+let $bug31310 = 1;
+while ($bug31310)
+{
+ let $bug31310= `SELECT 1 - COUNT(*) FROM t2`;
+}
+
+SELECT * FROM t1;
+
+--echo # Switch to connection con2
+connection con2;
+SELECT * FROM t1;
+
+connection default;
+disconnect con1;
+disconnect con2;
+DROP PROCEDURE p1;
+DROP TABLE t1, t2;
# Bug#30747 Create table with identical constraint names behaves incorrectly
#
@@ -1180,4 +1374,40 @@ if ($test_foreign_keys)
DROP TABLE t1;
}
+#
+# Bug #26447: "ALTER TABLE .. ORDER" does not work with InnoDB and
+# auto_increment keys
+#
+create table t1 (a int auto_increment primary key) engine=innodb;
+alter table t1 order by a;
+drop table t1;
+
+#
+# Bug #33697: ORDER BY primary key DESC vs. ref access + filesort
+# (reproduced only with InnoDB tables)
+#
+
+CREATE TABLE t1
+ (vid integer NOT NULL,
+ tid integer NOT NULL,
+ idx integer NOT NULL,
+ name varchar(128) NOT NULL,
+ type varchar(128) NULL,
+ PRIMARY KEY(idx, vid, tid),
+ UNIQUE(vid, tid, name)
+) ENGINE=InnoDB;
+
+INSERT INTO t1 VALUES
+ (1,1,1,'pk',NULL),(2,1,1,'pk',NULL),(3,1,1,'pk',NULL),(4,1,1,'c1',NULL),
+ (5,1,1,'pk',NULL),(1,1,2,'c1',NULL),(2,1,2,'c1',NULL),(3,1,2,'c1',NULL),
+ (4,1,2,'c2',NULL),(5,1,2,'c1',NULL),(2,1,3,'c2',NULL),(3,1,3,'c2',NULL),
+ (4,1,3,'pk',NULL),(5,1,3,'c2',NULL),
+ (2,1,4,'c_extra',NULL),(3,1,4,'c_extra',NULL);
+
+EXPLAIN SELECT * FROM t1 WHERE tid = 1 AND vid = 3 ORDER BY idx DESC;
+
+SELECT * FROM t1 WHERE tid = 1 AND vid = 3 ORDER BY idx DESC;
+
+DROP TABLE t1;
+
--echo End of 5.1 tests
diff --git a/mysql-test/include/partition_1.inc b/mysql-test/include/partition_1.inc
deleted file mode 100644
index b0094db2efe..00000000000
--- a/mysql-test/include/partition_1.inc
+++ /dev/null
@@ -1,750 +0,0 @@
--- source include/have_partition.inc
-
-# include/partition_1.inc
-#
-# Partitionong tests
-#
-# Attention: The variable
-# $engine -- Storage engine to be tested.
-# must be set within the script sourcing this file.
-#
---disable_abort_on_error
-SET AUTOCOMMIT= 1;
-
-##### Disabled testcases, because of open bugs #####
---echo
---echo #------------------------------------------------------------------------
---echo # There are several testcases disabled because ouf the open bugs
---echo # #15407 , #15408 , #15890 , #15961 , #13447 , #15966 , #15968, #16370
---echo #------------------------------------------------------------------------
-# Bug#15407 Partitions: crash if subpartition
-let $fixed_bug15407= 0;
-# Bug#15408 Partitions: subpartition names are not unique
-let $fixed_bug15408= 0;
-# Bug#15890 Partitions: Strange interpretation of partition number
-let $fixed_bug15890= 0;
-# Bug#15961 Partitions: Creation of subpart. table without subpart. rule not rejected
-let $fixed_bug15961= 0;
-# Bug#13447 Partitions: crash with alter table
-let $fixed_bug13447= 0;
-# Bug#15966 Partitions: crash if session default engine <> engine used in create table
-let $fixed_bug15966= 0;
-# Bug#15968 Partitions: crash when INSERT with f1 = -1 into PARTITION BY HASH(f1)
-let $fixed_bug15968= 0;
-# Bug #16370 Partitions: subpartitions names not mentioned in SHOW CREATE TABLE output
-let $fixed_bug16370= 0;
-
-##### Option, for displaying files #####
-#
-# Attention: Displaying the directory content via "ls $MYSQLTEST_VARDIR/master-data/test/t*"
-# is probably not portable.
-# let $ls= 0; disables the execution of "ls ....."
-let $ls= 0;
-
-################################################################################
-# Partitioning syntax
-#
-# CREATE TABLE .... (column-list ..)
-# PARTITION BY
-# KEY '(' ( column-list ) ')'
-# | RANGE '(' ( expr ) ')'
-# | LIST '(' ( expr ) ')'
-# | HASH '(' ( expr ) ')'
-# [PARTITIONS num ]
-# [SUBPARTITION BY
-# KEY '(' ( column-list ) ')'
-# | HASH '(' ( expr ) ')'
-# [SUBPARTITIONS num ]
-# ]
-# [ '('
-# ( PARTITION logical-name
-# [ VALUES LESS THAN '(' ( expr | MAX_VALUE ) ')' ]
-# [ VALUES IN '(' (expr)+ ')' ]
-# [ TABLESPACE tablespace-name ]
-# [ [ STORAGE ] ENGINE [ '=' ] storage-engine-name ]
-# [ NODEGROUP nodegroup-id ]
-# [ '('
-# ( SUBPARTITION logical-name
-# [ TABLESPACE tablespace-name ]
-# [ STORAGE ENGINE = storage-engine-name ]
-# [ NODEGROUP nodegroup-id ]
-# )+
-# ')'
-# )+
-# ')'
-# ]
-################################################################################
-
---echo
---echo #------------------------------------------------------------------------
---echo # 0. Setting of auxiliary variables + Creation of an auxiliary table
---echo # needed in all testcases
---echo #------------------------------------------------------------------------
-let $max_row= `SELECT @max_row`;
-let $max_row_div2= `SELECT @max_row DIV 2`;
-let $max_row_div3= `SELECT @max_row DIV 3`;
-let $max_row_div4= `SELECT @max_row DIV 4`;
-let $max_int_4= 2147483647;
---disable_warnings
-DROP TABLE IF EXISTS t0_template;
---enable_warnings
-CREATE TABLE t0_template ( f1 INTEGER, f2 char(20), PRIMARY KEY(f1))
-ENGINE = MEMORY;
---echo # Logging of <max_row> INSERTs into t0_template suppressed
---disable_query_log
-let $num= $max_row;
-while ($num)
-{
- eval INSERT INTO t0_template SET f1 = $num, f2 = '---$num---';
-
- dec $num;
-}
---enable_query_log
-
---echo
---echo #------------------------------------------------------------------------
---echo # 1. Some syntax checks
---echo #------------------------------------------------------------------------
---echo # 1.1 Subpartioned table without subpartitioning rule must be rejected
---disable_warnings
-DROP TABLE IF EXISTS t1;
---enable_warnings
-if ($fixed_bug15961)
-{
-# Bug#15961 Partitions: Creation of subpart. table without subpart. rule not rejected
---error 9999
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1)
-( PARTITION part1 VALUES LESS THAN (1000) (SUBPARTITION subpart11));
-}
---echo # FIXME Implement testcases, where it is checked that all create and
---echo # alter table statements
---echo # - with missing mandatory parameters are rejected
---echo # - with optional parameters are accepted
---echo # - with wrong combinations of optional parameters are rejected
---echo # - ............
-
---echo
---echo #------------------------------------------------------------------------
---echo # 2. Checks where the engine is assigned on all supported (CREATE TABLE
---echo # statement) positions + basic operations on the tables
---echo # Storage engine mixups are currently (2005-12-23) not supported
---echo #------------------------------------------------------------------------
---disable_warnings
-DROP TABLE IF EXISTS t1;
---enable_warnings
-
---echo # 2.1 non partitioned table (for comparison)
-eval CREATE TABLE t1 ( f1 INTEGER, f2 char(20)) ENGINE = $engine;
-# MLML Full size (as check of check routine)
---source include/partition_10.inc
-DROP TABLE t1;
-#
---echo # 2.2 Assignment of storage engine just after column list only
-eval CREATE TABLE t1 ( f1 INTEGER, f2 char(20)) ENGINE = $engine
- PARTITION BY HASH(f1) PARTITIONS 2;
---source include/partition_10.inc
-DROP TABLE t1;
-#
---echo # 2.3 Assignment of storage engine just after partition or subpartition
---echo # name only
-eval CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
- PARTITION BY HASH(f1)
- ( PARTITION part1 STORAGE ENGINE = $engine,
- PARTITION part2 STORAGE ENGINE = $engine
- );
---source include/partition_10.inc
-DROP TABLE t1;
-eval CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
- PARTITION BY RANGE(f1)
- SUBPARTITION BY HASH(f1)
- ( PARTITION part1 VALUES LESS THAN ($max_row_div2)
- (SUBPARTITION subpart11 STORAGE ENGINE = $engine,
- SUBPARTITION subpart12 STORAGE ENGINE = $engine),
- PARTITION part2 VALUES LESS THAN ($max_int_4)
- (SUBPARTITION subpart21 STORAGE ENGINE = $engine,
- SUBPARTITION subpart22 STORAGE ENGINE = $engine)
- );
---source include/partition_10.inc
-DROP TABLE t1;
-#
---echo # 2.4 Some but not all named partitions or subpartitions get a storage
---echo # engine assigned
-eval CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
- PARTITION BY HASH(f1)
- ( PARTITION part1 STORAGE ENGINE = $engine,
- PARTITION part2
- );
---source include/partition_10.inc
-DROP TABLE t1;
-eval CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
- PARTITION BY HASH(f1)
- ( PARTITION part1 ,
- PARTITION part2 STORAGE ENGINE = $engine
- );
---source include/partition_10.inc
-DROP TABLE t1;
-eval CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
- PARTITION BY RANGE(f1)
- SUBPARTITION BY HASH(f1)
- ( PARTITION part1 VALUES LESS THAN ($max_row_div2)
- (SUBPARTITION subpart11,
- SUBPARTITION subpart12 STORAGE ENGINE = $engine),
- PARTITION part2 VALUES LESS THAN ($max_int_4)
- (SUBPARTITION subpart21 STORAGE ENGINE = $engine,
- SUBPARTITION subpart22 STORAGE ENGINE = $engine)
- );
---source include/partition_10.inc
-DROP TABLE t1;
-eval CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
- PARTITION BY RANGE(f1)
- SUBPARTITION BY HASH(f1)
- ( PARTITION part1 VALUES LESS THAN ($max_row_div2)
- (SUBPARTITION subpart11 STORAGE ENGINE = $engine,
- SUBPARTITION subpart12 STORAGE ENGINE = $engine),
- PARTITION part2 VALUES LESS THAN ($max_int_4)
- (SUBPARTITION subpart21,
- SUBPARTITION subpart22 )
- );
---source include/partition_10.inc
-DROP TABLE t1;
-#
---echo # 2.5 Storage engine assignment after partition name + after name of
---echo # subpartitions belonging to another partition
-eval CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
- PARTITION BY RANGE(f1)
- SUBPARTITION BY HASH(f1)
- ( PARTITION part1 VALUES LESS THAN ($max_row_div2) ENGINE = $engine
- (SUBPARTITION subpart11,
- SUBPARTITION subpart12),
- PARTITION part2 VALUES LESS THAN ($max_int_4)
- (SUBPARTITION subpart21 STORAGE ENGINE = $engine,
- SUBPARTITION subpart22 STORAGE ENGINE = $engine)
- );
---source include/partition_10.inc
-DROP TABLE t1;
-eval CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
- PARTITION BY RANGE(f1)
- SUBPARTITION BY HASH(f1)
- ( PARTITION part1 VALUES LESS THAN ($max_row_div2)
- (SUBPARTITION subpart11 STORAGE ENGINE = $engine,
- SUBPARTITION subpart12 STORAGE ENGINE = $engine),
- PARTITION part2 VALUES LESS THAN ($max_int_4) ENGINE = $engine
- (SUBPARTITION subpart21,
- SUBPARTITION subpart22)
- );
---source include/partition_10.inc
-DROP TABLE t1;
-#
---echo # 2.6 Precedence of storage engine assignments
---echo # 2.6.1 Storage engine assignment after column list + after partition
---echo # or subpartition name
-eval CREATE TABLE t1 ( f1 INTEGER, f2 char(20)) ENGINE = $engine
- PARTITION BY HASH(f1)
- ( PARTITION part1 STORAGE ENGINE = $engine,
- PARTITION part2 STORAGE ENGINE = $engine
- );
---source include/partition_10.inc
-DROP TABLE t1;
-eval CREATE TABLE t1 ( f1 INTEGER, f2 char(20)) ENGINE = $engine
- PARTITION BY RANGE(f1)
- SUBPARTITION BY HASH(f1)
- ( PARTITION part1 VALUES LESS THAN ($max_row_div2)
- (SUBPARTITION subpart11 STORAGE ENGINE = $engine,
- SUBPARTITION subpart12 STORAGE ENGINE = $engine),
- PARTITION part2 VALUES LESS THAN ($max_int_4)
- (SUBPARTITION subpart21 STORAGE ENGINE = $engine,
- SUBPARTITION subpart22 STORAGE ENGINE = $engine)
- );
---source include/partition_10.inc
-DROP TABLE t1;
---echo # 2.6.2 Storage engine assignment after partition name + after
---echo # subpartition name
-# in partition part + in sub partition part
-eval CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
- PARTITION BY RANGE(f1)
- SUBPARTITION BY HASH(f1)
- ( PARTITION part1 VALUES LESS THAN ($max_row_div2) STORAGE ENGINE = $engine
- (SUBPARTITION subpart11 STORAGE ENGINE = $engine,
- SUBPARTITION subpart12 STORAGE ENGINE = $engine),
- PARTITION part2 VALUES LESS THAN ($max_int_4)
- (SUBPARTITION subpart21 STORAGE ENGINE = $engine,
- SUBPARTITION subpart22 STORAGE ENGINE = $engine)
- );
---source include/partition_10.inc
-DROP TABLE t1;
-
---echo # 2.7 Session default engine differs from engine used within create table
-eval SET SESSION storage_engine=$engine_other;
-if ($fixed_bug15966)
-{
-# Bug#15966 Partitions: crash if session default engine <> engine used in create table
-eval CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) ( PARTITION part1 ENGINE = $engine);
---source include/partition_10.inc
-DROP TABLE t1;
-# Bug#15966 Partitions: crash if session default engine <> engine used in create table
-eval CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
- PARTITION BY RANGE(f1)
- SUBPARTITION BY HASH(f1)
- ( PARTITION part1 VALUES LESS THAN (1000)
- (SUBPARTITION subpart11 STORAGE ENGINE = $engine,
- SUBPARTITION subpart12 STORAGE ENGINE = $engine));
---source include/partition_10.inc
-DROP TABLE t1;
-}
-eval SET SESSION storage_engine=$engine;
-
-
---echo
---echo #------------------------------------------------------------------------
---echo # 3. Check assigning the number of partitions and subpartitions
---echo # with and without named partitions/subpartitions
---echo #------------------------------------------------------------------------
---disable_warnings
-DROP TABLE IF EXISTS t1;
---enable_warnings
---echo # 3.1 (positive) without partition/subpartition number assignment
---echo # 3.1.1 no partition number, no named partitions
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1);
---source include/partition_10.inc
-DROP TABLE t1;
---echo # 3.1.2 no partition number, named partitions
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) (PARTITION part1, PARTITION part2);
---source include/partition_10.inc
-DROP TABLE t1;
-# Attention: Several combinations are impossible
-# If subpartitioning exists
-# - partitioning algorithm must be RANGE or LIST
-# This implies the assignment of named partitions.
-# - subpartitioning algorithm must be HASH or KEY
---echo # 3.1.3 variations on no partition/subpartition number, named partitions,
---echo # different subpartitions are/are not named
-#
-# Partition name -- "properties"
-# part1 -- first/non last
-# part2 -- non first/non last
-# part3 -- non first/ last
-#
-# Testpattern:
-# named subpartitions in
-# Partition part1 part2 part3
-# N N N
-# N N Y
-# N Y N
-# N Y Y
-# Y N N
-# Y N Y
-# Y Y N
-# Y Y Y
---disable_query_log
-let $part0= CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1);
-#
-eval SET @aux = '(PARTITION part1 VALUES LESS THAN ($max_row_div2),';
-let $part1_N= `SELECT @AUX`;
-eval SET @aux = '(PARTITION part1 VALUES LESS THAN ($max_row_div2)
-(SUBPARTITION subpart11 , SUBPARTITION subpart12 ),';
-let $part1_Y= `SELECT @AUX`;
-#
-eval SET @aux = 'PARTITION part2 VALUES LESS THAN ($max_row),';
-let $part2_N= `SELECT @AUX`;
-eval SET @aux = 'PARTITION part2 VALUES LESS THAN ($max_row)
-(SUBPARTITION subpart21 , SUBPARTITION subpart22 ),';
-let $part2_Y= `SELECT @AUX`;
-#
-eval SET @aux = 'PARTITION part3 VALUES LESS THAN ($max_int_4))';
-let $part3_N= `SELECT @AUX`;
-eval SET @aux = 'PARTITION part3 VALUES LESS THAN ($max_int_4)
-(SUBPARTITION subpart31 , SUBPARTITION subpart32 ))';
-let $part3_Y= `SELECT @AUX`;
---enable_query_log
-
-eval $part0 $part1_N $part2_N $part3_N ;
-DROP TABLE t1;
-# Bug#15407 Partitions: crash if subpartition
-if ($fixed_bug15407)
-{
-eval $part0 $part1_N $part2_N $part3_Y ;
---source include/partition_10.inc
-DROP TABLE t1;
-eval $part0 $part1_N $part2_Y $part3_N ;
---source include/partition_10.inc
-DROP TABLE t1;
-eval $part0 $part1_N $part2_Y $part3_Y ;
---source include/partition_10.inc
-DROP TABLE t1;
-eval $part0 $part1_Y $part2_N $part3_N ;
---source include/partition_10.inc
-DROP TABLE t1;
-eval $part0 $part1_Y $part2_N $part3_Y ;
---source include/partition_10.inc
-DROP TABLE t1;
-eval $part0 $part1_Y $part2_Y $part3_N ;
---source include/partition_10.inc
-DROP TABLE t1;
-}
-eval $part0 $part1_Y $part2_Y $part3_Y ;
---source include/partition_10.inc
-DROP TABLE t1;
-
---echo # 3.2 partition/subpartition numbers good and bad values and notations
---disable_warnings
-DROP TABLE IF EXISTS t1;
---enable_warnings
---echo # 3.2.1 partition/subpartition numbers INTEGER notation
-# ML: "positive/negative" is my private judgement. It need no to correspond
-# with the server response.
-# (positive) number = 2
-let $part_number= 2;
---source include/partition_11.inc
-# (positive) special case number = 1
-let $part_number= 1;
---source include/partition_11.inc
-# (negative) 0 is non sense
-let $part_number= 0;
---source include/partition_11.inc
-# (negative) -1 is non sense
-let $part_number= -1;
---source include/partition_11.inc
-# (negative) 1000000 is too huge
-let $part_number= 1000000;
---source include/partition_11.inc
-
-if ($fixed_bug15890)
-{
---echo # 3.2.2 partition/subpartition numbers DECIMAL notation
-# (positive) number = 2.0
-let $part_number= 2.0;
---source include/partition_11.inc
-# (negative) -2.0 is non sense
-let $part_number= -2.0;
---source include/partition_11.inc
-# (negative) case number = 0.0 is non sense
-let $part_number= 0.0;
---source include/partition_11.inc
-# Bug#15890 Partitions: Strange interpretation of partition number
-# (negative) number = 1.5 is non sense
-let $part_number= 1.5;
---source include/partition_11.inc
-# (negative) number is too huge
-let $part_number= 999999999999999999999999999999.999999999999999999999999999999;
---source include/partition_11.inc
-# (negative) number is nearly zero
-let $part_number= 0.000000000000000000000000000001;
---source include/partition_11.inc
-
---echo # 3.2.3 partition/subpartition numbers FLOAT notation
-##### FLOAT notation
-# (positive) number = 2.0E+0
-let $part_number= 2.0E+0;
---source include/partition_11.inc
-# Bug#15890 Partitions: Strange interpretation of partition number
-# (positive) number = 0.2E+1
-let $part_number= 0.2E+1;
---source include/partition_11.inc
-# (negative) -2.0E+0 is non sense
-let $part_number= -2.0E+0;
---source include/partition_11.inc
-# (negative) 0.15E+1 is non sense
-let $part_number= 0.15E+1;
---source include/partition_11.inc
-# (negative) 0.0E+300 is zero
-let $part_number= 0.0E+300;
---source include/partition_11.inc
-# Bug#15890 Partitions: Strange interpretation of partition number
-# (negative) 1E+300 is too huge
-let $part_number= 1E+300;
---source include/partition_11.inc
-# (negative) 1E-300 is nearly zero
-let $part_number= 1E-300;
---source include/partition_11.inc
-}
-
---echo # 3.2.4 partition/subpartition numbers STRING notation
-##### STRING notation
-# (negative?) case number = '2'
-let $part_number= '2';
---source include/partition_11.inc
-# (negative?) case number = '2.0'
-let $part_number= '2.0';
---source include/partition_11.inc
-# (negative?) case number = '0.2E+1'
-let $part_number= '0.2E+1';
---source include/partition_11.inc
-# (negative) Strings starts with digit, but 'A' follows
-let $part_number= '2A';
---source include/partition_11.inc
-# (negative) Strings starts with 'A', but digit follows
-let $part_number= 'A2';
---source include/partition_11.inc
-# (negative) empty string
-let $part_number= '';
---source include/partition_11.inc
-# (negative) string without any digits
-let $part_number= 'GARBAGE';
---source include/partition_11.inc
-
---echo # 3.2.5 partition/subpartition numbers other notations
-# (negative) Strings starts with digit, but 'A' follows
-let $part_number= 2A;
---source include/partition_11.inc
-# (negative) Strings starts with 'A', but digit follows
-let $part_number= A2;
---source include/partition_11.inc
-# (negative) string without any digits
-let $part_number= GARBAGE;
---source include/partition_11.inc
-
-# (negative?) double quotes
-let $part_number= "2";
---source include/partition_11.inc
-# (negative) Strings starts with digit, but 'A' follows
-let $part_number= "2A";
---source include/partition_11.inc
-# (negative) Strings starts with 'A', but digit follows
-let $part_number= "A2";
---source include/partition_11.inc
-# (negative) string without any digits
-let $part_number= "GARBAGE";
---source include/partition_11.inc
-
---echo # 3.3 Mixups of assigned partition/subpartition numbers and names
---echo # 3.3.1 (positive) number of partition/subpartition
---echo # = number of named partition/subpartition
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS 2 ( PARTITION part1, PARTITION part2 ) ;
-SHOW CREATE TABLE t1;
-DROP TABLE t1;
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) PARTITIONS 2
-SUBPARTITION BY HASH(f1) SUBPARTITIONS 2
-( PARTITION part1 VALUES LESS THAN (1000)
- (SUBPARTITION subpart11, SUBPARTITION subpart12),
- PARTITION part2 VALUES LESS THAN (2147483647)
- (SUBPARTITION subpart21, SUBPARTITION subpart22)
-);
---source include/partition_layout.inc
-DROP TABLE t1;
---echo # 3.3.2 (positive) number of partition/subpartition ,
---echo # 0 (= no) named partition/subpartition
---echo # already checked above
---echo # 3.3.3 (negative) number of partitions/subpartitions
---echo # > number of named partitions/subpartitions
---error 1064
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS 2 ( PARTITION part1 ) ;
-# Wrong number of named subpartitions in first partition
---error 1064
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1)
-SUBPARTITION BY HASH(f1) SUBPARTITIONS 2
-( PARTITION part1 VALUES LESS THAN (1000)
- (SUBPARTITION subpart11 ),
- PARTITION part2 VALUES LESS THAN (2147483647)
- (SUBPARTITION subpart21, SUBPARTITION subpart22)
-);
-# Wrong number of named subpartitions in non first/non last partition
---error 1064
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1)
-SUBPARTITION BY HASH(f1) SUBPARTITIONS 2
-( PARTITION part1 VALUES LESS THAN (1000)
- (SUBPARTITION subpart11, SUBPARTITION subpart12),
- PARTITION part2 VALUES LESS THAN (2000)
- (SUBPARTITION subpart21 ),
- PARTITION part3 VALUES LESS THAN (2147483647)
- (SUBPARTITION subpart31, SUBPARTITION subpart32)
-);
-# Wrong number of named subpartitions in last partition
---error 1064
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) PARTITIONS 2
-SUBPARTITION BY HASH(f1) SUBPARTITIONS 2
-( PARTITION part1 VALUES LESS THAN (1000)
- (SUBPARTITION subpart11, SUBPARTITION subpart12),
- PARTITION part2 VALUES LESS THAN (2147483647)
- (SUBPARTITION subpart21 )
-);
---echo # 3.3.4 (negative) number of partitions < number of named partitions
---error 1064
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS 1 ( PARTITION part1, PARTITION part2 ) ;
-# Wrong number of named subpartitions in first partition
---error 1064
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1)
-SUBPARTITION BY HASH(f1) SUBPARTITIONS 1
-( PARTITION part1 VALUES LESS THAN (1000)
- (SUBPARTITION subpart11, SUBPARTITION subpart12),
- PARTITION part2 VALUES LESS THAN (2147483647)
- (SUBPARTITION subpart21, SUBPARTITION subpart22)
-);
-# Wrong number of named subpartitions in non first/non last partition
---error 1064
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1)
-SUBPARTITION BY HASH(f1) SUBPARTITIONS 1
-( PARTITION part1 VALUES LESS THAN (1000)
- (SUBPARTITION subpart11, SUBPARTITION subpart12),
- PARTITION part2 VALUES LESS THAN (2000)
- (SUBPARTITION subpart21 ),
- PARTITION part3 VALUES LESS THAN (2147483647)
- (SUBPARTITION subpart31, SUBPARTITION subpart32)
-);
-# Wrong number of named subpartitions in last partition
---error 1064
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1)
-SUBPARTITION BY HASH(f1) SUBPARTITIONS 1
-( PARTITION part1 VALUES LESS THAN (1000)
- (SUBPARTITION subpart11, SUBPARTITION subpart12),
- PARTITION part2 VALUES LESS THAN (2147483647)
- (SUBPARTITION subpart21, SUBPARTITION subpart22)
-);
-
-
---echo
---echo #------------------------------------------------------------------------
---echo # 4. Checks of logical partition/subpartition name
---echo # file name clashes during CREATE TABLE
---echo #------------------------------------------------------------------------
---disable_warnings
-DROP TABLE IF EXISTS t1;
---enable_warnings
-
---echo # 4.1 (negative) A partition name used more than once
---error ER_SAME_NAME_PARTITION
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) (PARTITION part1, PARTITION part1);
-#
-if ($fixed_bug15408)
-{
-# Bug#15408 Partitions: subpartition names are not unique
---error ER_SAME_NAME_PARTITION
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1)
-SUBPARTITION BY HASH(f1)
-( PARTITION part1 VALUES LESS THAN (1000)
- (SUBPARTITION subpart11, SUBPARTITION subpart11)
-);
-}
---echo # FIXME Implement testcases with filename problems
---echo # existing file of other table --- partition/subpartition file name
---echo # partition/subpartition file name --- file of the same table
-
---echo
---echo #------------------------------------------------------------------------
---echo # 5. Alter table experiments
---echo #------------------------------------------------------------------------
---disable_warnings
-DROP TABLE IF EXISTS t1;
---enable_warnings
---echo # 5.1 alter table add partition
---echo # 5.1.1 (negative) add partition to non partitioned table
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20));
---source include/partition_layout.inc
-# MyISAM gets ER_PARTITION_MGMT_ON_NONPARTITIONED and NDB 1005
-# The error code of NDB differs, because all NDB tables are partitioned even
-# if the CREATE TABLE does not contain a partitioning clause.
---error ER_PARTITION_MGMT_ON_NONPARTITIONED,1005
-ALTER TABLE t1 ADD PARTITION (PARTITION part1);
---source include/partition_layout.inc
-DROP TABLE t1;
-
---echo # 5.1.2 Add one partition to a table with one partition
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1);
---source include/partition_layout.inc
-eval INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND $max_row_div2 - 1;
---disable_query_log
-eval SELECT $engine = 'NDB' INTO @aux;
-let $my_exit= `SELECT @aux`;
-if ($my_exit)
-{
- exit;
-}
---enable_query_log
-ALTER TABLE t1 ADD PARTITION (PARTITION part1);
---source include/partition_12.inc
-DROP TABLE t1;
-
---echo # 5.1.3 Several times add one partition to a table with some partitions
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) (PARTITION part1, PARTITION part3);
---source include/partition_layout.inc
-eval INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND $max_row_div2 - 1;
-# Partition name before first existing partition name
-ALTER TABLE t1 ADD PARTITION (PARTITION part0);
---source include/partition_12.inc
-DELETE FROM t1;
-eval INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND $max_row_div2 - 1;
-# Partition name between existing partition names
-ALTER TABLE t1 ADD PARTITION (PARTITION part2);
---source include/partition_12.inc
-DELETE FROM t1;
-eval INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND $max_row_div2 - 1;
-if ($fixed_bug13447)
-{
-# Partition name after all existing partition names
-# Bug#13447 Partitions: crash with alter table
-ALTER TABLE t1 ADD PARTITION (PARTITION part4);
-}
---source include/partition_12.inc
-DROP TABLE t1;
-
---echo # 5.1.4 Add several partitions to a table with some partitions
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) (PARTITION part1, PARTITION part3);
---source include/partition_layout.inc
-eval INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND $max_row_div2 - 1;
-if ($fixed_bug13447)
-{
-# Bug#13447 Partitions: crash with alter table
-ALTER TABLE t1 ADD PARTITION (PARTITION part0, PARTITION part2, PARTITION part4);
-}
---source include/partition_12.inc
-DROP TABLE t1;
-
---echo # 5.1.5 (negative) Add partitions to a table with some partitions
---echo # clash on new and already existing partition names
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) (PARTITION part1, PARTITION part2, PARTITION part3);
-# Clash on first/non last partition name
---error ER_SAME_NAME_PARTITION
-ALTER TABLE t1 ADD PARTITION (PARTITION part1);
-# Clash on non first/non last partition name
---error ER_SAME_NAME_PARTITION
-ALTER TABLE t1 ADD PARTITION (PARTITION part2);
-# Clash on non first/last partition name
---error ER_SAME_NAME_PARTITION
-ALTER TABLE t1 ADD PARTITION (PARTITION part3);
-# Clash on all partition names
---error ER_SAME_NAME_PARTITION
-ALTER TABLE t1 ADD PARTITION (PARTITION part1, PARTITION part2, PARTITION part3);
-DROP TABLE t1;
-
-# FIXME Is there any way to add a subpartition to an already existing partition
-
---echo # 5.2 alter table add subpartition
---echo # 5.2.1 Add one subpartition to a table with subpartitioning rule and
---echo # no explicit defined subpartitions
-eval CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1)
-SUBPARTITION BY HASH(f1)
-(PARTITION part1 VALUES LESS THAN ($max_row_div2));
-if ($fixed_bug16370)
-{
---source include/partition_layout.inc
-}
-eval INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND $max_row_div2 - 1;
-eval ALTER TABLE t1 ADD PARTITION (PARTITION part2 VALUES LESS THAN ($max_int_4)
- (SUBPARTITION subpart21));
-if ($fixed_bug16370)
-{
---source include/partition_12.inc
-}
-DROP TABLE t1;
-DROP TABLE if exists t0_template;
diff --git a/mysql-test/include/ps_modify.inc b/mysql-test/include/ps_modify.inc
index f66f888261d..4cde18b97d1 100644
--- a/mysql-test/include/ps_modify.inc
+++ b/mysql-test/include/ps_modify.inc
@@ -108,6 +108,7 @@ execute stmt1 using @arg00, @arg01;
select a,b from t1 where a=@arg00;
set @arg00=NULL;
set @arg01=2;
+--error 1048
execute stmt1 using @arg00, @arg01;
select a,b from t1 order by a;
set @arg00=0;
diff --git a/mysql-test/include/ps_query.inc b/mysql-test/include/ps_query.inc
index e96d666eaec..ae6027a0e07 100644
--- a/mysql-test/include/ps_query.inc
+++ b/mysql-test/include/ps_query.inc
@@ -434,8 +434,8 @@ execute stmt1 ;
let $1= 3 ;
while ($1)
{
- prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
- (SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
+ prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
+ (SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
execute stmt1 ;
deallocate prepare stmt1 ;
dec $1 ;
diff --git a/mysql-test/include/reset_master_and_slave.inc b/mysql-test/include/reset_master_and_slave.inc
new file mode 100644
index 00000000000..c2d4120ddc9
--- /dev/null
+++ b/mysql-test/include/reset_master_and_slave.inc
@@ -0,0 +1,10 @@
+--echo **** Resetting master and slave ****
+connection slave;
+STOP SLAVE;
+source include/wait_for_slave_to_stop.inc;
+RESET SLAVE;
+connection master;
+RESET MASTER;
+connection slave;
+START SLAVE;
+source include/wait_for_slave_to_start.inc;
diff --git a/mysql-test/include/set_binlog_format_mixed.sql b/mysql-test/include/set_binlog_format_mixed.sql
new file mode 100644
index 00000000000..836992d1080
--- /dev/null
+++ b/mysql-test/include/set_binlog_format_mixed.sql
@@ -0,0 +1,2 @@
+SET GLOBAL BINLOG_FORMAT=MIXED;
+SET SESSION BINLOG_FORMAT=MIXED;
diff --git a/mysql-test/include/set_binlog_format_row.sql b/mysql-test/include/set_binlog_format_row.sql
new file mode 100644
index 00000000000..49f34c8ccd1
--- /dev/null
+++ b/mysql-test/include/set_binlog_format_row.sql
@@ -0,0 +1,2 @@
+SET GLOBAL BINLOG_FORMAT=ROW;
+SET SESSION BINLOG_FORMAT=ROW;
diff --git a/mysql-test/include/set_binlog_format_statement.sql b/mysql-test/include/set_binlog_format_statement.sql
new file mode 100644
index 00000000000..ed286e7e3cc
--- /dev/null
+++ b/mysql-test/include/set_binlog_format_statement.sql
@@ -0,0 +1,2 @@
+SET GLOBAL BINLOG_FORMAT=STATEMENT;
+SET SESSION BINLOG_FORMAT=STATEMENT;
diff --git a/mysql-test/include/show_binary_logs.inc b/mysql-test/include/show_binary_logs.inc
new file mode 100644
index 00000000000..c3729a8f9b9
--- /dev/null
+++ b/mysql-test/include/show_binary_logs.inc
@@ -0,0 +1,5 @@
+# show binary logs
+
+# mask out the binlog position
+-- replace_column 2 #
+show binary logs;
diff --git a/mysql-test/include/show_binlog_events.inc b/mysql-test/include/show_binlog_events.inc
index 7377b4a0fed..fcdf84102aa 100644
--- a/mysql-test/include/show_binlog_events.inc
+++ b/mysql-test/include/show_binlog_events.inc
@@ -1,5 +1,5 @@
--let $binlog_start=106
--replace_result $binlog_start <binlog_start>
--replace_column 2 # 4 # 5 #
---replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
+--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/ /file_id=[0-9]+/file_id=#/
--eval show binlog events from $binlog_start
diff --git a/mysql-test/include/show_binlog_events2.inc b/mysql-test/include/show_binlog_events2.inc
index 234b7e06fcf..5dd272c562d 100644
--- a/mysql-test/include/show_binlog_events2.inc
+++ b/mysql-test/include/show_binlog_events2.inc
@@ -1,7 +1,3 @@
-#
-# Differs slightly from show_binlog events in showing server_id
-# which is important for some tests
-#
--let $binlog_start=106
--replace_result $binlog_start <binlog_start>
--replace_column 2 # 5 #
diff --git a/mysql-test/include/show_master_logs.inc b/mysql-test/include/show_master_logs.inc
new file mode 100644
index 00000000000..4792ebd9651
--- /dev/null
+++ b/mysql-test/include/show_master_logs.inc
@@ -0,0 +1,5 @@
+# show master logs
+
+# mask out the binlog position
+-- replace_column 2 #
+query_vertical show master logs;
diff --git a/mysql-test/include/show_master_status.inc b/mysql-test/include/show_master_status.inc
new file mode 100644
index 00000000000..b7b32a65df4
--- /dev/null
+++ b/mysql-test/include/show_master_status.inc
@@ -0,0 +1,5 @@
+# show master status
+
+# mask out the binlog position
+-- replace_column 2 # 3 <Binlog_Do_DB> 4 <Binlog_Ignore_DB>
+show master status;
diff --git a/mysql-test/include/show_slave_status2.inc b/mysql-test/include/show_slave_status2.inc
new file mode 100644
index 00000000000..9c4e14c62c2
--- /dev/null
+++ b/mysql-test/include/show_slave_status2.inc
@@ -0,0 +1,8 @@
+# Include file to show the slave status, masking out some information
+# that varies depending on where the test is executed.
+
+# masked out log positions
+
+--replace_result $MASTER_MYPORT MASTER_PORT
+--replace_column 1 # 7 # 8 # 9 # 16 # 22 # 23 # 33 # 35 # 36 #
+query_vertical SHOW SLAVE STATUS;
diff --git a/mysql-test/include/wait_for_slave_sql_error.inc b/mysql-test/include/wait_for_slave_sql_error.inc
new file mode 100644
index 00000000000..6780edbe2f0
--- /dev/null
+++ b/mysql-test/include/wait_for_slave_sql_error.inc
@@ -0,0 +1,33 @@
+###################################################
+#Author: Sven
+#Date: 2007-10-09
+#Purpose: Wait until the slave has an error in the
+# sql thread, as indicated by
+# "SHOW SLAVE STATUS", or at most 30
+# seconds.
+#Details:
+# 1) Fill in and setup variables
+# 2) loop, looking for sql error on slave
+# 3) If it loops too long, die.
+####################################################
+connection slave;
+let $row_number= 1;
+let $run= 1;
+let $counter= 300;
+
+while ($run)
+{
+ let $sql_result= query_get_value("SHOW SLAVE STATUS", Last_SQL_Errno, $row_number);
+ let $run= `SELECT '$sql_result' = '0'`;
+ if ($run) {
+ real_sleep 0.1;
+ if (!$counter){
+ --echo "Failed while waiting for slave to produce an error in its sql thread"
+ --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/lib/My/Config.pm b/mysql-test/lib/My/Config.pm
new file mode 100644
index 00000000000..5491e341ddc
--- /dev/null
+++ b/mysql-test/lib/My/Config.pm
@@ -0,0 +1,422 @@
+# -*- cperl -*-
+
+package My::Config::Option;
+
+use strict;
+use warnings;
+
+
+sub new {
+ my ($class, $option_name, $option_value)= @_;
+ my $self= bless { name => $option_name,
+ value => $option_value
+ }, $class;
+ return $self;
+}
+
+
+sub name {
+ my ($self)= @_;
+ return $self->{name};
+}
+
+
+sub value {
+ my ($self)= @_;
+ return $self->{value};
+}
+
+
+package My::Config::Group;
+
+use strict;
+use warnings;
+
+
+sub new {
+ my ($class, $group_name)= @_;
+ my $self= bless { name => $group_name,
+ options => [],
+ options_by_name => {},
+ }, $class;
+ return $self;
+}
+
+
+sub insert {
+ my ($self, $option_name, $value, $if_not_exist)= @_;
+ my $option= $self->option($option_name);
+ if (defined($option) and !$if_not_exist) {
+ $option->{value}= $value;
+ }
+ else {
+ my $option= My::Config::Option->new($option_name, $value);
+ # Insert option in list
+ push(@{$self->{options}}, $option);
+ # Insert option in hash
+ $self->{options_by_name}->{$option_name}= $option;
+ }
+ return $option;
+}
+
+sub remove {
+ my ($self, $option_name)= @_;
+
+ # Check that option exists
+ my $option= $self->option($option_name);
+
+ return undef unless defined $option;
+
+ # Remove from the hash
+ delete($self->{options_by_name}->{$option_name}) or die;
+
+ # Remove from the array
+ @{$self->{options}}= grep { $_->name ne $option_name } @{$self->{options}};
+
+ return $option;
+}
+
+
+sub options {
+ my ($self)= @_;
+ return @{$self->{options}};
+}
+
+
+sub name {
+ my ($self)= @_;
+ return $self->{name};
+}
+
+
+#
+# Return a specific option in the group
+#
+sub option {
+ my ($self, $option_name)= @_;
+
+ return $self->{options_by_name}->{$option_name};
+}
+
+
+#
+# Return a specific value for an option in the group
+#
+sub value {
+ my ($self, $option_name)= @_;
+ my $option= $self->option($option_name);
+
+ die "No option named '$option_name' in this group"
+ if ! defined($option);
+
+ return $option->value();
+}
+
+
+package My::Config;
+
+use strict;
+use warnings;
+use IO::File;
+use File::Basename;
+
+#
+# Constructor for My::Config
+# - represents a my.cnf config file
+#
+# Array of arrays
+#
+sub new {
+ my ($class, $path)= @_;
+ my $group_name= undef;
+
+ my $self= bless { groups => [] }, $class;
+ my $F= IO::File->new($path, "<")
+ or die "Could not open '$path': $!";
+
+ while ( my $line= <$F> ) {
+ chomp($line);
+
+ # [group]
+ if ( $line =~ /\[(.*)\]/ ) {
+ # New group found
+ $group_name= $1;
+ #print "group: $group_name\n";
+
+ $self->insert($group_name, undef, undef);
+ }
+
+ # Magic #! comments
+ elsif ( $line =~ /^#\!/) {
+ my $magic= $line;
+ die "Found magic comment '$magic' outside of group"
+ unless $group_name;
+
+ #print "$magic\n";
+ $self->insert($group_name, $magic, undef);
+ }
+
+ # Comments
+ elsif ( $line =~ /^#/ || $line =~ /^;/) {
+ # Skip comment
+ next;
+ }
+
+ # Empty lines
+ elsif ( $line =~ /^$/ ) {
+ # Skip empty lines
+ next;
+ }
+
+ # !include <filename>
+ elsif ( $line =~ /^\!include\s*(.*?)\s*$/ ) {
+ my $include_file_name= dirname($path)."/".$1;
+ # Check that the file exists
+ die "The include file '$include_file_name' does not exist"
+ unless -f $include_file_name;
+
+ $self->append(My::Config->new($include_file_name));
+ }
+
+ # <option>
+ elsif ( $line =~ /^([\@\w-]+)\s*$/ ) {
+ my $option= $1;
+
+ die "Found option '$option' outside of group"
+ unless $group_name;
+
+ #print "$option\n";
+ $self->insert($group_name, $option, undef);
+ }
+
+ # <option>=<value>
+ elsif ( $line =~ /^([\@\w-]+)\s*=\s*(.*?)\s*$/ ) {
+ my $option= $1;
+ my $value= $2;
+
+ die "Found option '$option=$value' outside of group"
+ unless $group_name;
+
+ #print "$option=$value\n";
+ $self->insert($group_name, $option, $value);
+ } else {
+ die "Unexpected line '$line' found in '$path'";
+ }
+
+ }
+ undef $F; # Close the file
+
+ return $self;
+}
+
+#
+# Insert a new group if it does not already exist
+# and add option if defined
+#
+sub insert {
+ my ($self, $group_name, $option, $value, $if_not_exist)= @_;
+ my $group;
+
+ # Create empty array for the group if it doesn't exist
+ if ( !$self->group_exists($group_name) ) {
+ $group= $self->_group_insert($group_name);
+ }
+ else {
+ $group= $self->group($group_name);
+ }
+
+ if ( defined $option ) {
+ #print "option: $option, value: $value\n";
+
+ # Add the option to the group
+ $group->insert($option, $value, $if_not_exist);
+ }
+}
+
+#
+# Remove a option, given group and option name
+#
+sub remove {
+ my ($self, $group_name, $option_name)= @_;
+ my $group= $self->group($group_name);
+
+ die "group '$group_name' does not exist"
+ unless defined($group);
+
+ $group->remove($option_name) or
+ die "option '$option_name' does not exist";
+}
+
+
+
+#
+# Check if group with given name exists in config
+#
+sub group_exists {
+ my ($self, $group_name)= @_;
+
+ foreach my $group ($self->groups()) {
+ return 1 if $group->{name} eq $group_name;
+ }
+ return 0;
+}
+
+
+#
+# Insert a new group into config
+#
+sub _group_insert {
+ my ($self, $group_name)= @_;
+ caller eq __PACKAGE__ or die;
+
+ # Check that group does not already exist
+ die "Group already exists" if $self->group_exists($group_name);
+
+ my $group= My::Config::Group->new($group_name);
+ push(@{$self->{groups}}, $group);
+ return $group;
+}
+
+
+#
+# Append a configuration to current config
+#
+sub append {
+ my ($self, $from)= @_;
+
+ foreach my $group ($from->groups()) {
+ foreach my $option ($group->options()) {
+ $self->insert($group->name(), $option->name(), $option->value());
+ }
+
+ }
+}
+
+
+#
+# Return a list with all the groups in config
+#
+sub groups {
+ my ($self)= @_;
+ return ( @{$self->{groups}} );
+}
+
+
+#
+# Return a list of all the groups in config
+# starting with the given string
+#
+sub like {
+ my ($self, $prefix)= @_;
+ return ( grep ( $_->{name} =~ /^$prefix/, $self->groups()) );
+}
+
+
+#
+# Return the first group in config
+# starting with the given string
+#
+sub first_like {
+ my ($self, $prefix)= @_;
+ return ($self->like($prefix))[0];
+}
+
+
+#
+# Return a specific group in the config
+#
+sub group {
+ my ($self, $group_name)= @_;
+
+ foreach my $group ( $self->groups() ) {
+ return $group if $group->{name} eq $group_name;
+ }
+ return undef;
+}
+
+
+#
+# Return a list of all options in a specific group in the config
+#
+sub options_in_group {
+ my ($self, $group_name)= @_;
+
+ my $group= $self->group($group_name);
+ return () unless defined $group;
+ return $group->options();
+}
+
+
+#
+# Return a value given group and option name
+#
+sub value {
+ my ($self, $group_name, $option_name)= @_;
+ my $group= $self->group($group_name);
+
+ die "group '$group_name' does not exist"
+ unless defined($group);
+
+ my $option= $group->option($option_name);
+ die "option '$option_name' does not exist"
+ unless defined($option);
+
+ return $option->value();
+}
+
+
+#
+# Check if an option exists
+#
+sub exists {
+ my ($self, $group_name, $option_name)= @_;
+ my $group= $self->group($group_name);
+
+ die "group '$group_name' does not exist"
+ unless defined($group);
+
+ my $option= $group->option($option_name);
+ return defined($option);
+}
+
+
+# Overload "to string"-operator with 'stringify'
+use overload
+ '""' => \&stringify;
+
+#
+# Return the config as a string in my.cnf file format
+#
+sub stringify {
+ my ($self)= @_;
+ my $res;
+
+ foreach my $group ($self->groups()) {
+ $res .= "[$group->{name}]\n";
+
+ foreach my $option ($group->options()) {
+ $res .= $option->name();
+ my $value= $option->value();
+ if (defined $value) {
+ $res .= "=$value";
+ }
+ $res .= "\n";
+ }
+ $res .= "\n";
+ }
+ return $res;
+}
+
+
+#
+# Save the config to named file
+#
+sub save {
+ my ($self, $path)= @_;
+ my $F= IO::File->new($path, ">")
+ or die "Could not open '$path': $!";
+ print $F $self;
+ undef $F; # Close the file
+}
+
+1;
diff --git a/mysql-test/lib/mtr_cases.pl b/mysql-test/lib/mtr_cases.pl
index 3d5752b4ec8..d9ba9466482 100644
--- a/mysql-test/lib/mtr_cases.pl
+++ b/mysql-test/lib/mtr_cases.pl
@@ -22,8 +22,10 @@ use File::Basename;
use IO::File();
use strict;
+use My::Config;
+
sub collect_test_cases ($);
-sub collect_one_suite ($$);
+sub collect_one_suite ($);
sub collect_one_test_case ($$$$$$$$$);
sub mtr_options_from_test_file($$);
@@ -33,16 +35,14 @@ my $skip_test;
sub init_pattern {
my ($from, $what)= @_;
- if ( $from =~ /[a-z0-9]/ ) {
+ if ( $from =~ /^[a-z0-9]$/ ) {
# Does not contain any regex, make the pattern match
# beginning of string
$from= "^$from";
}
- else {
- # Check that pattern is a valid regex
- eval { "" =~/$from/; 1 } or
- mtr_error("Invalid regex '$from' passed to $what\nPerl says: $@");
- }
+ # Check that pattern is a valid regex
+ eval { "" =~/$from/; 1 } or
+ mtr_error("Invalid regex '$from' passed to $what\nPerl says: $@");
return $from;
}
@@ -63,7 +63,7 @@ sub collect_test_cases ($) {
foreach my $suite (split(",", $suites))
{
- collect_one_suite($suite, $cases);
+ push(@$cases, collect_one_suite($suite));
}
@@ -207,10 +207,10 @@ sub split_testname {
}
-sub collect_one_suite($$)
+sub collect_one_suite($)
{
my $suite= shift; # Test suite name
- my $cases= shift; # List of test cases
+ my @cases; # Array of hash
mtr_verbose("Collecting: $suite");
@@ -299,7 +299,7 @@ sub collect_one_suite($$)
}
collect_one_test_case($testdir,$resdir,$suite,$tname,
- "$tname.$extension",$cases,\%disabled,
+ "$tname.$extension",\@cases,\%disabled,
$component_id,$suite_opts);
}
}
@@ -329,13 +329,168 @@ sub collect_one_suite($$)
next if ($do_test and not $tname =~ /$do_test/o);
collect_one_test_case($testdir,$resdir,$suite,$tname,
- $elem,$cases,\%disabled,$component_id,
+ $elem,\@cases,\%disabled,$component_id,
$suite_opts);
}
closedir TESTDIR;
}
- return $cases;
+
+ # Return empty list if no testcases found
+ return if (@cases == 0);
+
+ # ----------------------------------------------------------------------
+ # Read combinations for this suite and build testcases x combinations
+ # if any combinations exists
+ # ----------------------------------------------------------------------
+ if ( ! $::opt_skip_combination )
+ {
+ my @combinations;
+ my $combination_file= "$suitedir/combinations";
+ #print "combination_file: $combination_file\n";
+ if (@::opt_combinations)
+ {
+ # take the combination from command-line
+ mtr_verbose("Take the combination from command line");
+ foreach my $combination (@::opt_combinations) {
+ my $comb= {};
+ $comb->{name}= $combination;
+ push(@{$comb->{comb_opt}}, $combination);
+ push(@combinations, $comb);
+ }
+ }
+ elsif (-f $combination_file )
+ {
+ # Read combinations file in my.cnf format
+ mtr_verbose("Read combinations file");
+ my $config= My::Config->new($combination_file);
+
+ foreach my $group ($config->groups()) {
+ my $comb= {};
+ $comb->{name}= $group->name();
+ foreach my $option ( $group->options() ) {
+ push(@{$comb->{comb_opt}}, $option->name()."=".$option->value());
+ }
+ push(@combinations, $comb);
+ }
+ }
+
+ if (@combinations)
+ {
+ print " - adding combinations\n";
+ #print_testcases(@cases);
+
+ my @new_cases;
+ foreach my $comb (@combinations)
+ {
+ foreach my $test (@cases)
+ {
+ #print $test->{name}, " ", $comb, "\n";
+ my $new_test= {};
+
+ while (my ($key, $value) = each(%$test)) {
+ if (ref $value eq "ARRAY") {
+ push(@{$new_test->{$key}}, @$value);
+ } else {
+ $new_test->{$key}= $value;
+ }
+ }
+
+ # Append the combination options to master_opt and slave_opt
+ push(@{$new_test->{master_opt}}, @{$comb->{comb_opt}});
+ push(@{$new_test->{slave_opt}}, @{$comb->{comb_opt}});
+
+ # Add combination name shrt name
+ $new_test->{combination}= $comb->{name};
+
+ # Add the new test to new test cases list
+ push(@new_cases, $new_test);
+ }
+ }
+ #print_testcases(@new_cases);
+ @cases= @new_cases;
+ #print_testcases(@cases);
+ }
+ }
+
+ optimize_cases(\@cases);
+ #print_testcases(@cases);
+
+ return @cases;
+}
+
+
+#
+# Loop through all test cases
+# - optimize which test to run by skipping unnecessary ones
+# - update settings if necessary
+#
+sub optimize_cases {
+ my ($cases)= @_;
+
+ foreach my $tinfo ( @$cases )
+ {
+ # Skip processing if already marked as skipped
+ next if $tinfo->{skip};
+
+ # Replication test needs an adjustment of binlog format
+ if (mtr_match_prefix($tinfo->{'name'}, "rpl"))
+ {
+
+ # =======================================================
+ # Get binlog-format used by this test from master_opt
+ # =======================================================
+ my $test_binlog_format;
+ foreach my $opt ( @{$tinfo->{master_opt}} ) {
+ $test_binlog_format= $test_binlog_format ||
+ mtr_match_prefix($opt, "--binlog-format=");
+ }
+ # print $tinfo->{name}." uses ".$test_binlog_format."\n";
+
+ # =======================================================
+ # If a special binlog format was selected with
+ # --mysqld=--binlog-format=x, skip all test with different
+ # binlog-format
+ # =======================================================
+ if (defined $::used_binlog_format and
+ $test_binlog_format and
+ $::used_binlog_format ne $test_binlog_format)
+ {
+ $tinfo->{'skip'}= 1;
+ $tinfo->{'comment'}= "Requires --binlog-format='$test_binlog_format'";
+ next;
+ }
+
+ # =======================================================
+ # Check that testcase supports the designated binlog-format
+ # =======================================================
+ if ($test_binlog_format and defined $tinfo->{'sup_binlog_formats'} )
+ {
+ my $supported=
+ grep { $_ eq $test_binlog_format } @{$tinfo->{'sup_binlog_formats'}};
+ if ( !$supported )
+ {
+ $tinfo->{'skip'}= 1;
+ $tinfo->{'comment'}=
+ "Doesn't support --binlog-format='$test_binlog_format'";
+ next;
+ }
+ }
+
+ # =======================================================
+ # Use dynamic switching of binlog-format if mtr started
+ # w/o --mysqld=--binlog-format=xxx and combinations.
+ # =======================================================
+ if (!defined $tinfo->{'combination'} and
+ !defined $::used_binlog_format)
+ {
+ $test_binlog_format= $tinfo->{'sup_binlog_formats'}->[0];
+ }
+
+ # Save binlog format for dynamic switching
+ $tinfo->{binlog_format}= $test_binlog_format;
+ }
+ }
}
@@ -425,6 +580,7 @@ sub collect_one_test_case($$$$$$$$$) {
$tinfo->{'slave_opt'}= [];
$tinfo->{'slave_mi'}= [];
+
# Add suite opts
foreach my $opt ( @$suite_opts )
{
@@ -638,14 +794,6 @@ sub collect_one_test_case($$$$$$$$$) {
return;
}
- if ( defined $tinfo->{'binlog_format'} and
- ! ( $tinfo->{'binlog_format'} eq $::used_binlog_format ) )
- {
- $tinfo->{'skip'}= 1;
- $tinfo->{'comment'}= "Requiring binlog format '$tinfo->{'binlog_format'}'";
- return;
- }
-
if ( $tinfo->{'need_debug'} && ! $::debug_compiled_binaries )
{
$tinfo->{'skip'}= 1;
@@ -725,10 +873,17 @@ sub collect_one_test_case($$$$$$$$$) {
our @tags=
(
["include/have_innodb.inc", "innodb_test", 1],
- ["include/have_binlog_format_row.inc", "binlog_format", "row"],
+ ["include/have_binlog_format_row.inc", "sup_binlog_formats", ["row"]],
["include/have_log_bin.inc", "need_binlog", 1],
- ["include/have_binlog_format_statement.inc", "binlog_format", "statement"],
- ["include/have_binlog_format_mixed.inc", "binlog_format", "mixed"],
+ ["include/have_binlog_format_statement.inc",
+ "sup_binlog_formats", ["statement"]],
+ ["include/have_binlog_format_mixed.inc", "sup_binlog_formats", ["mixed"]],
+ ["include/have_binlog_format_mixed_or_row.inc",
+ "sup_binlog_formats", ["mixed","row"]],
+ ["include/have_binlog_format_mixed_or_statement.inc",
+ "sup_binlog_formats", ["mixed","statement"]],
+ ["include/have_binlog_format_row_or_statement.inc",
+ "sup_binlog_formats", ["row","statement"]],
["include/big_test.inc", "big_test", 1],
["include/have_debug.inc", "need_debug", 1],
["include/have_ndb.inc", "ndb_test", 1],
@@ -754,8 +909,8 @@ sub mtr_options_from_test_file($$) {
{
if ( index($line, $tag->[0]) >= 0 )
{
- # Tag matched, assign value to "tinfo"
- $tinfo->{"$tag->[1]"}= $tag->[2];
+ # Tag matched, assign value to "tinfo"
+ $tinfo->{"$tag->[1]"}= $tag->[2];
}
}
@@ -776,8 +931,29 @@ sub mtr_options_from_test_file($$) {
mtr_options_from_test_file($tinfo, $sourced_file);
}
}
+ }
+}
+
+sub print_testcases {
+ my (@cases)= @_;
+
+ print "=" x 60, "\n";
+ foreach my $test (@cases){
+ print "[", $test->{name}, "]", "\n";
+ while ((my ($key, $value)) = each(%$test)) {
+ print " ", $key, "=";
+ if (ref $value eq "ARRAY") {
+ print join(", ", @$value);
+ } else {
+ print $value;
+ }
+ print "\n";
+ }
+ print "\n";
}
+ print "=" x 60, "\n";
}
+
1;
diff --git a/mysql-test/lib/mtr_misc.pl b/mysql-test/lib/mtr_misc.pl
index 226f73a21de..0173e8b8572 100644
--- a/mysql-test/lib/mtr_misc.pl
+++ b/mysql-test/lib/mtr_misc.pl
@@ -280,4 +280,33 @@ sub mtr_cmp_opts ($$) {
return 0; # They are the same
}
+#
+# Compare two arrays and put all unequal elements into a new one
+#
+sub mtr_diff_opts ($$) {
+ my $l1= shift;
+ my $l2= shift;
+ my $f;
+ my $l= [];
+ foreach my $e1 (@$l1)
+ {
+ $f= undef;
+ foreach my $e2 (@$l2)
+ {
+ $f= 1 unless ($e1 ne $e2);
+ }
+ push(@$l, $e1) unless (defined $f);
+ }
+ foreach my $e2 (@$l2)
+ {
+ $f= undef;
+ foreach my $e1 (@$l1)
+ {
+ $f= 1 unless ($e1 ne $e2);
+ }
+ push(@$l, $e2) unless (defined $f);
+ }
+ return $l;
+}
+
1;
diff --git a/mysql-test/lib/mtr_report.pl b/mysql-test/lib/mtr_report.pl
index 7cd6c1362b3..ecfdc00eaf9 100644
--- a/mysql-test/lib/mtr_report.pl
+++ b/mysql-test/lib/mtr_report.pl
@@ -50,9 +50,13 @@ my $tot_real_time= 0;
sub mtr_report_test_name ($) {
my $tinfo= shift;
+ my $tname= $tinfo->{name};
- _mtr_log("$tinfo->{name}");
- printf "%-30s ", $tinfo->{'name'};
+ $tname.= " '$tinfo->{combination}'"
+ if defined $tinfo->{combination};
+
+ _mtr_log($tname);
+ printf "%-30s ", $tname;
}
sub mtr_report_test_skipped ($) {
@@ -234,6 +238,7 @@ sub mtr_report_stats ($) {
"\\[ERROR\\]",
"^Error:", "^==.* at 0x",
"InnoDB: Warning",
+ "InnoDB: Error",
"^safe_mutex:",
"missing DBUG_RETURN",
"mysqld: Warning",
@@ -303,6 +308,7 @@ sub mtr_report_stats ($) {
/Slave: Error .*Unknown table/ or
/Slave: Error in Write_rows event: / or
/Slave: Field .* of table .* has no default value/ or
+ /Slave: Field .* doesn't have a default value/ or
/Slave: Query caused different errors on master and slave/ or
/Slave: Table .* doesn't exist/ or
/Slave: Table width mismatch/ or
@@ -335,19 +341,53 @@ sub mtr_report_stats ($) {
/\QError in Log_event::read_log_event(): 'Sanity check failed', data_len: 258, event_type: 49\E/ or
/Statement is not safe to log in statement format/ or
+ # test case for Bug#bug29807 copies a stray frm into database
+ /InnoDB: Error: table `test`.`bug29807` does not exist in the InnoDB internal/ or
+ /Cannot find or open table test\/bug29807 from/ or
+
+ # innodb foreign key tests that fail in ALTER or RENAME produce this
+ /InnoDB: Error: in ALTER TABLE `test`.`t[12]`/ or
+ /InnoDB: Error: in RENAME TABLE table `test`.`t1`/ or
+ /InnoDB: Error: table `test`.`t[12]` does not exist in the InnoDB internal/ or
+
# Test case for Bug#14233 produces the following warnings:
/Stored routine 'test'.'bug14233_1': invalid value in column mysql.proc/ or
/Stored routine 'test'.'bug14233_2': invalid value in column mysql.proc/ or
/Stored routine 'test'.'bug14233_3': invalid value in column mysql.proc/ or
- # BUG#29807 - innodb_mysql.test: Cannot find table test/t2
- # from the internal data dictionary
- /Cannot find table test\/bug29807 from the internal data dictionary/ or
-
# BUG#29839 - lowercase_table3.test: Cannot find table test/T1
# from the internal data dictiona
- /Cannot find table test\/BUG29839 from the internal data dictionary/
- )
+ /Cannot find table test\/BUG29839 from the internal data dictionary/ or
+ # BUG#32080 - Excessive warnings on Solaris: setrlimit could not
+ # change the size of core files
+ /setrlimit could not change the size of core files to 'infinity'/ or
+
+ # rpl_extrColmaster_*.test, the slave thread produces warnings
+ # when it get updates to a table that has more columns on the
+ # master
+ /Slave: Unknown column 'c7' in 't15' Error_code: 1054/ or
+ /Slave: Can't DROP 'c7'.* 1091/ or
+ /Slave: Key column 'c6'.* 1072/ or
+
+ # rpl_idempotency.test produces warnings for the slave.
+ ($testname eq 'rpl.rpl_idempotency' and
+ (/Slave: Can\'t find record in \'t1\' Error_code: 1032/ or
+ /Slave: Cannot add or update a child row: a foreign key constraint fails .* Error_code: 1452/
+ )) or
+
+ # These tests does "kill" on queries, causing sporadic errors when writing to logs
+ (($testname eq 'rpl.rpl_skip_error' or
+ $testname eq 'rpl.rpl_err_ignoredtable' or
+ $testname eq 'binlog.binlog_killed_simulate' or
+ $testname eq 'binlog.binlog_killed') and
+ (/Failed to write to mysql\.\w+_log/
+ )) or
+
+ # rpl_temporary has an error on slave that can be ignored
+ ($testname eq 'rpl.rpl_temporary' and
+ (/Slave: Can\'t find record in \'user\' Error_code: 1032/
+ ))
+ )
{
next; # Skip these lines
}
diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl
index 2b415665474..42471f35ebe 100755
--- a/mysql-test/mysql-test-run.pl
+++ b/mysql-test/mysql-test-run.pl
@@ -52,6 +52,9 @@
# "perl -d:Trace mysql-test-run.pl"
#
+
+use lib "lib/";
+
$Devel::Trace::TRACE= 0; # Don't trace boring init stuff
#require 5.6.1;
@@ -129,7 +132,15 @@ our $opt_vs_config = $ENV{'MTR_VS_CONFIG'};
our $default_vardir;
our $opt_usage;
-our $opt_suites= "main,binlog,rpl,rpl_ndb,ndb"; # Default suites to run
+our $opt_suites;
+our $opt_suites_default= "main,binlog,rpl,rpl_ndb,ndb"; # Default suites to run
+our @extra_suites=
+(
+ ["mysql-5.1-new-ndb", "ndb_team"],
+ ["mysql-5.1-telco-6.2", "ndb_team"],
+ ["mysql-5.1-telco-6.3", "ndb_team"],
+);
+
our $opt_script_debug= 0; # Script debugging, enable with --script-debug
our $opt_verbose= 0; # Verbose output, enable with --verbose
@@ -164,6 +175,9 @@ our $opt_bench= 0;
our $opt_small_bench= 0;
our $opt_big_test= 0;
+our @opt_combinations;
+our $opt_skip_combination;
+
our @opt_extra_mysqld_opt;
our $opt_compress;
@@ -395,6 +409,20 @@ sub main () {
else
{
# Figure out which tests we are going to run
+ if (!$opt_suites)
+ {
+ # use default and add any extra_suites as defined
+ $opt_suites= $opt_suites_default;
+ my $ddd= basename(dirname($glob_mysql_test_dir));
+ foreach my $extra_suite (@extra_suites)
+ {
+ if ($extra_suite->[0] eq "$ddd")
+ {
+ $opt_suites= "$extra_suite->[1],$opt_suites";
+ }
+ }
+ }
+
my $tests= collect_test_cases($opt_suites);
# Turn off NDB and other similar options if no tests use it
@@ -461,20 +489,28 @@ sub main () {
#
##############################################################################
+#
+# When an option is no longer used by this program, it must be explicitly
+# ignored or else it will be passed through to mysqld. GetOptions will call
+# this subroutine once for each such option on the command line. See
+# Getopt::Long documentation.
+#
+
+sub warn_about_removed_option {
+ my ($option, $value, $hash_value) = @_;
+
+ warn "WARNING: This option is no longer used, and is ignored: --$option\n";
+}
+
sub command_line_setup () {
# These are defaults for things that are set on the command line
my $opt_comment;
- $opt_master_myport= 9306;
- $opt_slave_myport= 9308;
- $opt_ndbcluster_port= 9310;
- $opt_ndbcluster_port_slave= 9311;
- $im_port= 9312;
- $im_mysqld1_port= 9313;
- $im_mysqld2_port= 9314;
-
+ # Magic number -69.4 results in traditional test ports starting from 9306.
+ set_mtr_build_thread_ports(-69.4);
+
# If so requested, we try to avail ourselves of a unique build thread number.
if ( $ENV{'MTR_BUILD_THREAD'} ) {
if ( lc($ENV{'MTR_BUILD_THREAD'}) eq 'auto' ) {
@@ -497,6 +533,15 @@ sub command_line_setup () {
# Read the command line
# Note: Keep list, and the order, in sync with usage at end of this file
+ # Options that are no longer used must still be processed, because all
+ # unprocessed options are passed directly to mysqld. The user will be
+ # warned that the option is being ignored.
+ #
+ # Put the complete option string here. For example, to remove the --suite
+ # option, remove it from GetOptions() below and put 'suite|suites=s' here.
+ my @removed_options = (
+ );
+
Getopt::Long::Configure("pass_through");
GetOptions(
# Control what engine/variation to run
@@ -529,6 +574,8 @@ sub command_line_setup () {
'skip-im' => \$opt_skip_im,
'skip-test=s' => \$opt_skip_test,
'big-test' => \$opt_big_test,
+ 'combination=s' => \@opt_combinations,
+ 'skip-combination' => \$opt_skip_combination,
# Specify ports
'master_port=i' => \$opt_master_myport,
@@ -625,6 +672,9 @@ sub command_line_setup () {
'suite-timeout=i' => \$opt_suite_timeout,
'warnings|log-warnings' => \$opt_warnings,
+ # Options which are no longer used
+ (map { $_ => \&warn_about_removed_option } @removed_options),
+
'help|h' => \$opt_usage,
) or usage("Can't read options");
@@ -800,20 +850,23 @@ sub command_line_setup () {
# --------------------------------------------------------------------------
# Find out type of logging that are being used
# --------------------------------------------------------------------------
- # NOTE if the default binlog format is changed, this has to be changed
- $used_binlog_format= "statement";
if (!$opt_extern && $mysql_version_id >= 50100 )
{
- $used_binlog_format= "mixed"; # Default value for binlog format
-
foreach my $arg ( @opt_extra_mysqld_opt )
{
if ( $arg =~ /binlog[-_]format=(\S+)/ )
{
- $used_binlog_format= $1;
+ $used_binlog_format= $1;
}
}
- mtr_report("Using binlog format '$used_binlog_format'");
+ if (defined $used_binlog_format)
+ {
+ mtr_report("Using binlog format '$used_binlog_format'");
+ }
+ else
+ {
+ mtr_report("Using dynamic switching of binlog format");
+ }
}
@@ -931,6 +984,10 @@ sub command_line_setup () {
mtr_error("Will not run in record mode without a specific test case");
}
+ if ( $opt_record )
+ {
+ $opt_skip_combination = 1;
+ }
# --------------------------------------------------------------------------
# ps protcol flag
@@ -1031,12 +1088,14 @@ sub command_line_setup () {
{
$opt_testcase_timeout= $default_testcase_timeout;
$opt_testcase_timeout*= 10 if $opt_valgrind;
+ $opt_testcase_timeout*= 10 if ($opt_debug and $glob_win32);
}
if ( ! $opt_suite_timeout )
{
$opt_suite_timeout= $default_suite_timeout;
$opt_suite_timeout*= 6 if $opt_valgrind;
+ $opt_suite_timeout*= 6 if ($opt_debug and $glob_win32);
}
if ( ! $opt_user )
@@ -1317,6 +1376,7 @@ sub set_mtr_build_thread_ports($) {
}
# Up to two masters, up to three slaves
+ # A magic value in command_line_setup depends on these equations.
$opt_master_myport= $mtr_build_thread * 10 + 10000; # and 1
$opt_slave_myport= $opt_master_myport + 2; # and 3 4
$opt_ndbcluster_port= $opt_master_myport + 5;
@@ -2103,6 +2163,22 @@ sub environment_setup () {
($lib_example_plugin ? "--plugin_dir=" . dirname($lib_example_plugin) : "");
# ----------------------------------------------------
+ # Setup env so childs can execute myisampack and myisamchk
+ # ----------------------------------------------------
+ $ENV{'MYISAMCHK'}= mtr_native_path(mtr_exe_exists(
+ vs_config_dirs('storage/myisam', 'myisamchk'),
+ vs_config_dirs('myisam', 'myisamchk'),
+ "$path_client_bindir/myisamchk",
+ "$glob_basedir/storage/myisam/myisamchk",
+ "$glob_basedir/myisam/myisamchk"));
+ $ENV{'MYISAMPACK'}= mtr_native_path(mtr_exe_exists(
+ vs_config_dirs('storage/myisam', 'myisampack'),
+ vs_config_dirs('myisam', 'myisampack'),
+ "$path_client_bindir/myisampack",
+ "$glob_basedir/storage/myisam/myisampack",
+ "$glob_basedir/myisam/myisampack"));
+
+ # ----------------------------------------------------
# We are nice and report a bit about our settings
# ----------------------------------------------------
if (!$opt_extern)
@@ -3311,6 +3387,7 @@ sub run_testcase_check_skip_test($)
sub do_before_run_mysqltest($)
{
my $tinfo= shift;
+ my $args;
# Remove old files produced by mysqltest
my $base_file= mtr_match_extension($tinfo->{'result_file'},
@@ -3331,6 +3408,28 @@ sub do_before_run_mysqltest($)
# if script decided to run mysqltest cluster _is_ installed ok
$ENV{'NDB_STATUS_OK'} = "YES";
}
+ if (defined $tinfo->{binlog_format} and $mysql_version_id > 50100 )
+ {
+ # Dynamically switch binlog format of
+ # master, slave is always restarted
+ foreach my $server ( @$master )
+ {
+ next unless ($server->{'pid'});
+
+ mtr_init_args(\$args);
+ mtr_add_arg($args, "--no-defaults");
+ mtr_add_arg($args, "--user=root");
+ mtr_add_arg($args, "--port=$server->{'port'}");
+ mtr_add_arg($args, "--socket=$server->{'path_sock'}");
+
+ my $sql= "include/set_binlog_format_".$tinfo->{binlog_format}.".sql";
+ mtr_verbose("Setting binlog format:", $tinfo->{binlog_format});
+ if (mtr_run($exe_mysql, $args, $sql, "", "", "") != 0)
+ {
+ mtr_error("Failed to switch binlog format");
+ }
+ }
+ }
}
}
@@ -3761,6 +3860,15 @@ sub mysqld_arguments ($$$$) {
# see BUG#28359
mtr_add_arg($args, "%s--connect-timeout=60", $prefix);
+
+ # When mysqld is run by a root user(euid is 0), it will fail
+ # to start unless we specify what user to run as, see BUG#30630
+ my $euid= $>;
+ if (!$glob_win32 and $euid == 0 and
+ grep(/^--user/, @$extra_opt, @opt_extra_mysqld_opt) == 0) {
+ mtr_add_arg($args, "%s--user=root", $prefix);
+ }
+
if ( $opt_valgrind_mysqld )
{
mtr_add_arg($args, "%s--skip-safemalloc", $prefix);
@@ -3865,7 +3973,7 @@ sub mysqld_arguments ($$$$) {
my $slave_load_path= "../tmp";
mtr_add_arg($args, "%s--slave-load-tmpdir=%s", $prefix,
$slave_load_path);
- mtr_add_arg($args, "%s--set-variable=slave_net_timeout=10", $prefix);
+ mtr_add_arg($args, "%s--set-variable=slave_net_timeout=120", $prefix);
if ( @$slave_master_info )
{
@@ -4218,10 +4326,19 @@ sub run_testcase_need_master_restart($)
elsif (! mtr_same_opts($master->[0]->{'start_opts'},
$tinfo->{'master_opt'}) )
{
- $do_restart= 1;
- mtr_verbose("Restart master: running with different options '" .
- join(" ", @{$tinfo->{'master_opt'}}) . "' != '" .
- join(" ", @{$master->[0]->{'start_opts'}}) . "'" );
+ # Chech that diff is binlog format only
+ my $diff_opts= mtr_diff_opts($master->[0]->{'start_opts'},$tinfo->{'master_opt'});
+ if (scalar(@$diff_opts) eq 2)
+ {
+ $do_restart= 1 unless ($diff_opts->[0] =~/^--binlog-format=/ and $diff_opts->[1] =~/^--binlog-format=/);
+ }
+ else
+ {
+ $do_restart= 1;
+ mtr_verbose("Restart master: running with different options '" .
+ join(" ", @{$tinfo->{'master_opt'}}) . "' != '" .
+ join(" ", @{$master->[0]->{'start_opts'}}) . "'" );
+ }
}
elsif( ! $master->[0]->{'pid'} )
{
@@ -5139,11 +5256,14 @@ Options to control what test suites or cases to run
start-from=PREFIX Run test cases starting from test prefixed with PREFIX
suite[s]=NAME1,..,NAMEN Collect tests in suites from the comma separated
list of suite names.
- The default is: "$opt_suites"
+ The default is: "$opt_suites_default"
skip-rpl Skip the replication test cases.
skip-im Don't start IM, and skip the IM test cases
big-test Set the environment variable BIG_TEST, which can be
checked from test cases.
+ combination="ARG1 .. ARG2" Specify a set of "mysqld" arguments for one
+ combination.
+ skip-combination Skip any combination options and combinations files
Options that specify ports
diff --git a/mysql-test/r/almost_full.result b/mysql-test/r/almost_full.result
new file mode 100644
index 00000000000..eb28f12fa51
--- /dev/null
+++ b/mysql-test/r/almost_full.result
@@ -0,0 +1,29 @@
+drop table if exists t1;
+set global myisam_data_pointer_size=2;
+CREATE TABLE t1 (a int auto_increment primary key not null, b longtext) ENGINE=MyISAM;
+DELETE FROM t1 WHERE a=1 or a=5;
+INSERT INTO t1 SET b=repeat('a',600);
+ERROR HY000: The table 't1' is full
+CHECK TABLE t1 EXTENDED;
+Table Op Msg_type Msg_text
+test.t1 check warning Datafile is almost full, 65448 of 65534 used
+test.t1 check status OK
+UPDATE t1 SET b=repeat('a', 800) where a=10;
+ERROR HY000: The table 't1' is full
+CHECK TABLE t1 EXTENDED;
+Table Op Msg_type Msg_text
+test.t1 check warning Datafile is almost full, 65448 of 65534 used
+test.t1 check status OK
+INSERT INTO t1 SET b=repeat('a',400);
+CHECK TABLE t1 EXTENDED;
+Table Op Msg_type Msg_text
+test.t1 check warning Datafile is almost full, 65448 of 65534 used
+test.t1 check status OK
+DELETE FROM t1 WHERE a=2 or a=6;
+UPDATE t1 SET b=repeat('a', 600) where a=11;
+CHECK TABLE t1 EXTENDED;
+Table Op Msg_type Msg_text
+test.t1 check warning Datafile is almost full, 65448 of 65534 used
+test.t1 check status OK
+drop table t1;
+set global myisam_data_pointer_size=default;
diff --git a/mysql-test/r/analyze.result b/mysql-test/r/analyze.result
index 7b476c3cca2..c3dbb846402 100644
--- a/mysql-test/r/analyze.result
+++ b/mysql-test/r/analyze.result
@@ -56,3 +56,11 @@ show index from t1;
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
t1 1 a 1 a A 5 NULL NULL YES BTREE
drop table t1;
+End of 4.1 tests
+create table t1(a int);
+analyze table t1 extended;
+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 'extended' at line 1
+optimize table t1 extended;
+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 'extended' at line 1
+drop table t1;
+End of 5.0 tests
diff --git a/mysql-test/r/archive.result b/mysql-test/r/archive.result
index 0a473a16771..e9eb50fc805 100644
--- a/mysql-test/r/archive.result
+++ b/mysql-test/r/archive.result
@@ -2619,7 +2619,7 @@ auto fld1 companynr fld3 fld4 fld5 fld6
INSERT INTO t2 VALUES (2,011401,37,'breaking','dreaded','Steinberg','W');
INSERT INTO t2 VALUES (3,011402,37,'Romans','scholastics','jarring','');
INSERT INTO t2 VALUES (4,011403,37,'intercepted','audiology','tinily','');
-OPTIMIZE TABLE t2 EXTENDED;
+OPTIMIZE TABLE t2;
Table Op Msg_type Msg_text
test.t2 optimize status OK
SELECT * FROM t2;
@@ -12665,7 +12665,7 @@ t6 CREATE TABLE `t6` (
`b` tinyblob,
`c` int(11) DEFAULT NULL,
KEY `a` (`a`)
-) ENGINE=ARCHIVE DEFAULT CHARSET=latin1
+) ENGINE=ARCHIVE AUTO_INCREMENT=36 DEFAULT CHARSET=latin1
DROP TABLE t1, t2, t4, t5, t6;
create table t1 (i int) engine=archive;
insert into t1 values (1);
@@ -12683,3 +12683,14 @@ check table t1 extended;
Table Op Msg_type Msg_text
test.t1 check status OK
drop table t1;
+CREATE TABLE t1(a VARCHAR(510)) ENGINE = ARCHIVE;
+INSERT INTO t1(a) VALUES ('');
+SELECT * FROM t1 ORDER BY a;
+DROP TABLE t1;
+CREATE TABLE t1(a INT NOT NULL AUTO_INCREMENT, b BLOB, KEY(a)) ENGINE=archive;
+INSERT INTO t1 VALUES (NULL, NULL),(NULL, NULL);
+FLUSH TABLE t1;
+SELECT * FROM t1 ORDER BY a;
+a b
+1 NULL
+2 NULL
diff --git a/mysql-test/r/auto_increment.result b/mysql-test/r/auto_increment.result
index 54c2df34a7f..bc9daf43f14 100644
--- a/mysql-test/r/auto_increment.result
+++ b/mysql-test/r/auto_increment.result
@@ -231,8 +231,7 @@ a b
204 7
delete from t1 where a=0;
update t1 set a=NULL where b=6;
-Warnings:
-Warning 1048 Column 'a' cannot be null
+ERROR 23000: Column 'a' cannot be null
update t1 set a=300 where b=7;
SET SQL_MODE='';
insert into t1(a,b)values(NULL,8);
@@ -247,7 +246,7 @@ a b
1 1
200 2
201 4
-0 6
+203 6
300 7
301 8
400 9
@@ -263,6 +262,7 @@ a b
1 1
200 2
201 4
+203 6
300 7
301 8
400 9
@@ -273,20 +273,20 @@ a b
405 14
delete from t1 where a=0;
update t1 set a=NULL where b=13;
-Warnings:
-Warning 1048 Column 'a' cannot be null
+ERROR 23000: Column 'a' cannot be null
update t1 set a=500 where b=14;
select * from t1 order by b;
a b
1 1
200 2
201 4
+203 6
300 7
301 8
400 9
401 10
402 11
-0 13
+404 13
500 14
drop table t1;
create table t1 (a bigint);
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/r/bigint.result b/mysql-test/r/bigint.result
index 0d6cf8e7d30..4a5b8fcf4aa 100644
--- a/mysql-test/r/bigint.result
+++ b/mysql-test/r/bigint.result
@@ -170,6 +170,12 @@ t2.value64=t1.value64;
value64 value32 value64 value32
9223372036854775807 2 9223372036854775807 4
drop table t1, t2;
+create table t1 (sint64 bigint not null);
+insert into t1 values (-9223372036854775808);
+select * from t1;
+sint64
+-9223372036854775808
+drop table t1;
create table t1 select 1 as 'a';
show create table t1;
Table Create Table
diff --git a/mysql-test/r/case.result b/mysql-test/r/case.result
index 9ee64ee6dbd..d408a0b6153 100644
--- a/mysql-test/r/case.result
+++ b/mysql-test/r/case.result
@@ -1,4 +1,4 @@
-drop table if exists t1,t2;
+drop table if exists t1, t2;
select CASE "b" when "a" then 1 when "b" then 2 END;
CASE "b" when "a" then 1 when "b" then 2 END
2
@@ -200,3 +200,21 @@ CEMPNUM EMPMUM1 EMPNUM2
0.00 0 0.00
2.00 2 NULL
DROP TABLE t1,t2;
+End of 4.1 tests
+create table t1 (a int, b bigint unsigned);
+create table t2 (c int);
+insert into t1 (a, b) values (1,4572794622775114594), (2,18196094287899841997),
+(3,11120436154190595086);
+insert into t2 (c) values (1), (2), (3);
+select t1.a, (case t1.a when 0 then 0 else t1.b end) d from t1
+join t2 on t1.a=t2.c order by d;
+a d
+1 4572794622775114594
+3 11120436154190595086
+2 18196094287899841997
+select t1.a, (case t1.a when 0 then 0 else t1.b end) d from t1
+join t2 on t1.a=t2.c where b=11120436154190595086 order by d;
+a d
+3 11120436154190595086
+drop table t1, t2;
+End of 5.0 tests
diff --git a/mysql-test/r/cast.result b/mysql-test/r/cast.result
index afd0a5a990e..c1af92c5f8d 100644
--- a/mysql-test/r/cast.result
+++ b/mysql-test/r/cast.result
@@ -414,4 +414,28 @@ NULL
NULL
20070719
drop table t1;
+CREATE TABLE t1 (f1 DATE);
+INSERT INTO t1 VALUES ('2007-07-19'), (NULL);
+SELECT HOUR(f1),
+MINUTE(f1),
+SECOND(f1) FROM t1;
+HOUR(f1) MINUTE(f1) SECOND(f1)
+0 0 0
+NULL NULL NULL
+SELECT HOUR(CAST('2007-07-19' AS DATE)),
+MINUTE(CAST('2007-07-19' AS DATE)),
+SECOND(CAST('2007-07-19' AS DATE));
+HOUR(CAST('2007-07-19' AS DATE)) MINUTE(CAST('2007-07-19' AS DATE)) SECOND(CAST('2007-07-19' AS DATE))
+0 0 0
+SELECT HOUR(CAST(NULL AS DATE)),
+MINUTE(CAST(NULL AS DATE)),
+SECOND(CAST(NULL AS DATE));
+HOUR(CAST(NULL AS DATE)) MINUTE(CAST(NULL AS DATE)) SECOND(CAST(NULL AS DATE))
+NULL NULL NULL
+SELECT HOUR(NULL),
+MINUTE(NULL),
+SECOND(NULL);
+HOUR(NULL) MINUTE(NULL) SECOND(NULL)
+NULL NULL NULL
+DROP TABLE t1;
End of 5.0 tests
diff --git a/mysql-test/r/change_user.result b/mysql-test/r/change_user.result
index cb409621d56..28b55dfd5e5 100644
--- a/mysql-test/r/change_user.result
+++ b/mysql-test/r/change_user.result
@@ -4,14 +4,14 @@ SELECT @@session.sql_big_selects;
1
SELECT @@global.max_join_size;
@@global.max_join_size
--1
+18446744073709551615
change_user
SELECT @@session.sql_big_selects;
@@session.sql_big_selects
1
SELECT @@global.max_join_size;
@@global.max_join_size
--1
+18446744073709551615
SET @@global.max_join_size = 10000;
SET @@session.max_join_size = default;
change_user
diff --git a/mysql-test/r/compress.result b/mysql-test/r/compress.result
index 68206c0dc0e..a71d840d229 100644
--- a/mysql-test/r/compress.result
+++ b/mysql-test/r/compress.result
@@ -611,11 +611,11 @@ id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t3 ref period period 4 test.t1.period 4181
explain select * from t3 as t1,t3 where t1.period=t3.period order by t3.period limit 10;
id select_type table type possible_keys key key_len ref rows Extra
-1 SIMPLE t3 ALL period NULL NULL NULL 41810 Using filesort
+1 SIMPLE t3 index period period 4 NULL 1
1 SIMPLE t1 ref period period 4 test.t3.period 4181
explain select * from t3 as t1,t3 where t1.period=t3.period order by t1.period limit 10;
id select_type table type possible_keys key key_len ref rows Extra
-1 SIMPLE t1 ALL period NULL NULL NULL 41810 Using filesort
+1 SIMPLE t1 index period period 4 NULL 1
1 SIMPLE t3 ref period period 4 test.t1.period 4181
select period from t1;
period
diff --git a/mysql-test/r/create.result b/mysql-test/r/create.result
index bead320751f..0613c9ba488 100644
--- a/mysql-test/r/create.result
+++ b/mysql-test/r/create.result
@@ -438,7 +438,7 @@ explain t2;
Field Type Null Key Default Extra
a int(11) YES NULL
b bigint(11) NO 0
-c bigint(11) NO 0
+c bigint(11) unsigned NO 0
d date YES NULL
e varchar(1) NO
f datetime YES NULL
@@ -594,7 +594,7 @@ create table t1 (a int);
create table t1 select * from t1;
ERROR HY000: You can't specify target table 't1' for update in FROM clause
create table t2 union = (t1) select * from t1;
-ERROR HY000: You can't specify target table 't1' for update in FROM clause
+ERROR HY000: 'test.t2' is not BASE TABLE
flush tables with read lock;
unlock tables;
drop table t1;
@@ -763,44 +763,6 @@ t2 CREATE TABLE `t2` (
drop table t1, t2;
create table t1(a set("a,b","c,d") not null);
ERROR 22007: Illegal set 'a,b' value found during parsing
-create database mysqltest;
-use mysqltest;
-grant create on mysqltest.* to mysqltest@localhost;
-create table t1 (i INT);
-insert into t1 values (1);
-ERROR 42000: INSERT command denied to user 'mysqltest'@'localhost' for table 't1'
-create table t2 (i INT);
-create table t4 (i INT);
-grant select, insert on mysqltest.t2 to mysqltest@localhost;
-grant insert on mysqltest.t4 to mysqltest@localhost;
-grant create, insert on mysqltest.t5 to mysqltest@localhost;
-grant create, insert on mysqltest.t6 to mysqltest@localhost;
-flush privileges;
-insert into t2 values (1);
-create table if not exists t1 select * from t2;
-ERROR 42000: INSERT command denied to user 'mysqltest'@'localhost' for table 't1'
-create table if not exists t3 select * from t2;
-ERROR 42000: INSERT command denied to user 'mysqltest'@'localhost' for table 't3'
-create table if not exists t4 select * from t2;
-Warnings:
-Note 1050 Table 't4' already exists
-create table if not exists t5 select * from t2;
-create table t6 select * from t2;
-create table t7 select * from t2;
-ERROR 42000: INSERT command denied to user 'mysqltest'@'localhost' for table 't7'
-create table t4 select * from t2;
-ERROR 42S01: Table 't4' already exists
-create table t1 select * from t2;
-ERROR 42000: INSERT command denied to user 'mysqltest'@'localhost' for table 't1'
-drop table t1,t2,t4,t5,t6;
-revoke create on mysqltest.* from mysqltest@localhost;
-revoke select, insert on mysqltest.t2 from mysqltest@localhost;
-revoke insert on mysqltest.t4 from mysqltest@localhost;
-revoke create, insert on mysqltest.t5 from mysqltest@localhost;
-revoke create, insert on mysqltest.t6 from mysqltest@localhost;
-flush privileges;
-drop database mysqltest;
-use test;
create table t1 (i int) engine=myisam max_rows=100000000000;
show create table t1;
Table Create Table
@@ -1743,4 +1705,42 @@ create table t1 as select 1;
create table t2 as select f1() from t1;
drop table t1,t2;
drop function f1;
+create table t1 like information_schema.processlist;
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `ID` bigint(4) NOT NULL DEFAULT '0',
+ `USER` varchar(16) NOT NULL DEFAULT '',
+ `HOST` varchar(64) NOT NULL DEFAULT '',
+ `DB` varchar(64) DEFAULT NULL,
+ `COMMAND` varchar(16) NOT NULL DEFAULT '',
+ `TIME` bigint(7) NOT NULL DEFAULT '0',
+ `STATE` varchar(64) DEFAULT NULL,
+ `INFO` longtext
+) ENGINE=MyISAM DEFAULT CHARSET=utf8
+drop table t1;
+create temporary table t1 like information_schema.processlist;
+show create table t1;
+Table Create Table
+t1 CREATE TEMPORARY TABLE `t1` (
+ `ID` bigint(4) NOT NULL DEFAULT '0',
+ `USER` varchar(16) NOT NULL DEFAULT '',
+ `HOST` varchar(64) NOT NULL DEFAULT '',
+ `DB` varchar(64) DEFAULT NULL,
+ `COMMAND` varchar(16) NOT NULL DEFAULT '',
+ `TIME` bigint(7) NOT NULL DEFAULT '0',
+ `STATE` varchar(64) DEFAULT NULL,
+ `INFO` longtext
+) ENGINE=MyISAM DEFAULT CHARSET=utf8
+drop table t1;
+create table t1 like information_schema.character_sets;
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `CHARACTER_SET_NAME` varchar(64) NOT NULL DEFAULT '',
+ `DEFAULT_COLLATE_NAME` varchar(64) NOT NULL DEFAULT '',
+ `DESCRIPTION` varchar(60) NOT NULL DEFAULT '',
+ `MAXLEN` bigint(3) NOT NULL DEFAULT '0'
+) ENGINE=MEMORY DEFAULT CHARSET=utf8
+drop table t1;
End of 5.1 tests
diff --git a/mysql-test/r/csv.result b/mysql-test/r/csv.result
index 69f77dc3cd8..b0033383f00 100644
--- a/mysql-test/r/csv.result
+++ b/mysql-test/r/csv.result
@@ -5364,13 +5364,19 @@ BIN(a)
0
drop table t1;
create table t1(a enum('foo','bar') default null) engine=csv;
-ERROR HY000: Can't create table 'test.t1' (errno: -1)
+ERROR 42000: The storage engine for the table doesn't support nullable columns
create table t1(a enum('foo','bar') default 'foo') engine=csv;
-ERROR HY000: Can't create table 'test.t1' (errno: -1)
+ERROR 42000: The storage engine for the table doesn't support nullable columns
create table t1(a enum('foo','bar') default 'foo' not null) engine=csv;
insert into t1 values();
select * from t1;
a
foo
drop table t1;
+CREATE TABLE t1(a INT) ENGINE=CSV;
+ERROR 42000: The storage engine for the table doesn't support nullable columns
+SHOW WARNINGS;
+Level Code Message
+Error 1178 The storage engine for the table doesn't support nullable columns
+Error 1005 Can't create table 'test.t1' (errno: 138)
End of 5.1 tests
diff --git a/mysql-test/r/csv_not_null.result b/mysql-test/r/csv_not_null.result
new file mode 100644
index 00000000000..ccd88631ce6
--- /dev/null
+++ b/mysql-test/r/csv_not_null.result
@@ -0,0 +1,57 @@
+# ===== csv_not_null.1 =====
+DROP TABLE IF EXISTS t1, t2;
+# === Will fail -- no NOT NULL ===
+CREATE TABLE t1 (a int) ENGINE = CSV;
+ERROR 42000: The storage engine for the table doesn't support nullable columns
+# === Good CREATE ===
+CREATE TABLE t1 (a int NOT NULL) ENGINE = CSV;
+# === Will fail -- ALL columns need NOT NULL ==
+CREATE TABLE t2 (a int NOT NULL, b char(20)) ENGINE = CSV;
+ERROR 42000: The storage engine for the table doesn't support nullable columns
+DROP TABLE t1;
+# ===== csv_not_null.2 =====
+DROP TABLE IF EXISTS t1;
+CREATE TABLE t1 (a int NOT NULL, b blob NOT NULL, c CHAR(20) NOT NULL,
+d VARCHAR(20) NOT NULL, e enum('foo','bar') NOT NULL,f DATE NOT NULL)
+ENGINE = CSV;
+# === should result in default for each datatype ===
+INSERT INTO t1 VALUES();
+SELECT * FROM t1;
+a b c d e f
+0 foo 0000-00-00
+SELECT * FROM t1;
+a b c d e f
+0 foo 0000-00-00
+INSERT INTO t1 VALUES(0,'abc','def','ghi','bar','1999-12-31');
+SELECT * FROM t1;
+a b c d e f
+0 foo 0000-00-00
+0 abc def ghi bar 1999-12-31
+# === insert failures ===
+INSERT INTO t1 VALUES(NULL,'ab','a','b','foo','2007-01-01');
+ERROR 23000: Column 'a' cannot be null
+INSERT INTO t1 VALUES(default(a),default(b), default(c), default(d),
+default(e), default(f));
+ERROR HY000: Field 'a' doesn't have a default value
+DROP TABLE t1;
+# ===== csv_not_null.3 =====
+DROP TABLE IF EXISTS t1;
+CREATE TABLE t1 (a int NOT NULL, b char(10) NOT NULL) ENGINE = CSV;
+INSERT INTO t1 VALUES();
+Warnings:
+Warning 1364 Field 'a' doesn't have a default value
+Warning 1364 Field 'b' doesn't have a default value
+SELECT * FROM t1;
+a b
+0
+UPDATE t1 set b = 'new_value' where a = 0;
+SELECT * FROM t1;
+a b
+0 new_value
+UPDATE t1 set b = NULL where b = 'new_value';
+Warnings:
+Warning 1048 Column 'b' cannot be null
+SELECT * FROM t1;
+a b
+0
+DROP TABLE t1;
diff --git a/mysql-test/r/ctype_big5.result b/mysql-test/r/ctype_big5.result
index b190273cc64..8103e9b856f 100644
--- a/mysql-test/r/ctype_big5.result
+++ b/mysql-test/r/ctype_big5.result
@@ -64,6 +64,10 @@ select a sounds like a from t1;
a sounds like a
1
1
+select 1 from t1 order by cast(a as char(1));
+1
+1
+1
drop table t1;
DROP DATABASE d1;
USE test;
diff --git a/mysql-test/r/ctype_euckr.result b/mysql-test/r/ctype_euckr.result
index b9619370d4c..bb1b3f5995b 100644
--- a/mysql-test/r/ctype_euckr.result
+++ b/mysql-test/r/ctype_euckr.result
@@ -64,6 +64,10 @@ select a sounds like a from t1;
a sounds like a
1
1
+select 1 from t1 order by cast(a as char(1));
+1
+1
+1
drop table t1;
DROP DATABASE d1;
USE test;
@@ -178,3 +182,44 @@ hex(a)
A2E6
FEF7
DROP TABLE t1;
+create table t1 (s1 varchar(5) character set euckr);
+insert into t1 values (0xA141);
+insert into t1 values (0xA15A);
+insert into t1 values (0xA161);
+insert into t1 values (0xA17A);
+insert into t1 values (0xA181);
+insert into t1 values (0xA1FE);
+insert into t1 values (0xA140);
+Warnings:
+Warning 1366 Incorrect string value: '\xA1@' for column 's1' at row 1
+insert into t1 values (0xA15B);
+Warnings:
+Warning 1366 Incorrect string value: '\xA1[' for column 's1' at row 1
+insert into t1 values (0xA160);
+Warnings:
+Warning 1366 Incorrect string value: '\xA1`' for column 's1' at row 1
+insert into t1 values (0xA17B);
+Warnings:
+Warning 1366 Incorrect string value: '\xA1{' for column 's1' at row 1
+insert into t1 values (0xA180);
+Warnings:
+Warning 1366 Incorrect string value: '\xA1\x80' for column 's1' at row 1
+insert into t1 values (0xA1FF);
+Warnings:
+Warning 1366 Incorrect string value: '\xA1\xFF' for column 's1' at row 1
+select hex(s1), hex(convert(s1 using utf8)) from t1 order by binary s1;
+hex(s1) hex(convert(s1 using utf8))
+
+
+
+
+
+
+A141 ECA2A5
+A15A ECA381
+A161 ECA382
+A17A ECA3A5
+A181 ECA3A6
+A1FE EFBFA2
+drop table t1;
+End of 5.0 tests
diff --git a/mysql-test/r/ctype_gb2312.result b/mysql-test/r/ctype_gb2312.result
index 90c94c3b299..95246525368 100644
--- a/mysql-test/r/ctype_gb2312.result
+++ b/mysql-test/r/ctype_gb2312.result
@@ -64,6 +64,10 @@ select a sounds like a from t1;
a sounds like a
1
1
+select 1 from t1 order by cast(a as char(1));
+1
+1
+1
drop table t1;
DROP DATABASE d1;
USE test;
diff --git a/mysql-test/r/ctype_gbk.result b/mysql-test/r/ctype_gbk.result
index fe90c7bff29..8437e34be1e 100644
--- a/mysql-test/r/ctype_gbk.result
+++ b/mysql-test/r/ctype_gbk.result
@@ -64,6 +64,10 @@ select a sounds like a from t1;
a sounds like a
1
1
+select 1 from t1 order by cast(a as char(1));
+1
+1
+1
drop table t1;
DROP DATABASE d1;
USE test;
diff --git a/mysql-test/r/ctype_uca.result b/mysql-test/r/ctype_uca.result
index e676d5a5ca0..92b76802d0b 100644
--- a/mysql-test/r/ctype_uca.result
+++ b/mysql-test/r/ctype_uca.result
@@ -2599,6 +2599,10 @@ select a sounds like a from t1;
a sounds like a
1
1
+select 1 from t1 order by cast(a as char(1));
+1
+1
+1
drop table t1;
DROP DATABASE d1;
USE test;
@@ -2767,4 +2771,49 @@ a
c
ch
drop table t1;
+set collation_connection=ucs2_unicode_ci;
+drop table if exists t1;
+create table t1 as
+select repeat(' ', 64) as s1, repeat(' ',64) as s2
+union
+select null, null;
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `s1` varchar(64) CHARACTER SET ucs2 COLLATE ucs2_unicode_ci DEFAULT NULL,
+ `s2` varchar(64) CHARACTER SET ucs2 COLLATE ucs2_unicode_ci DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+delete from t1;
+insert into t1 values('aaa','aaa');
+insert into t1 values('aaa|qqq','qqq');
+insert into t1 values('gheis','^[^a-dXYZ]+$');
+insert into t1 values('aab','^aa?b');
+insert into t1 values('Baaan','^Ba*n');
+insert into t1 values('aaa','qqq|aaa');
+insert into t1 values('qqq','qqq|aaa');
+insert into t1 values('bbb','qqq|aaa');
+insert into t1 values('bbb','qqq');
+insert into t1 values('aaa','aba');
+insert into t1 values(null,'abc');
+insert into t1 values('def',null);
+insert into t1 values(null,null);
+insert into t1 values('ghi','ghi[');
+select HIGH_PRIORITY s1 regexp s2 from t1;
+s1 regexp s2
+1
+1
+1
+1
+1
+1
+1
+0
+0
+0
+NULL
+NULL
+NULL
+NULL
+drop table t1;
+set names utf8;
End for 5.0 tests
diff --git a/mysql-test/r/ctype_ucs.result b/mysql-test/r/ctype_ucs.result
index 1097486f185..bd76f2a859f 100644
--- a/mysql-test/r/ctype_ucs.result
+++ b/mysql-test/r/ctype_ucs.result
@@ -811,6 +811,20 @@ quote(name)
????????
????????????????
drop table bug20536;
+set names ucs2;
+ERROR 42000: Variable 'character_set_client' can't be set to the value of 'ucs2'
+set names ucs2 collate ucs2_bin;
+ERROR 42000: Variable 'character_set_client' can't be set to the value of 'ucs2'
+set character_set_client= ucs2;
+ERROR 42000: Variable 'character_set_client' can't be set to the value of 'ucs2'
+set character_set_client= concat('ucs', substr('2', 1));
+ERROR 42000: Variable 'character_set_client' can't be set to the value of 'ucs2'
+CREATE TABLE t1(a TEXT CHARSET ucs2 COLLATE ucs2_unicode_ci);
+INSERT INTO t1 VALUES('abcd');
+SELECT * FROM t1 WHERE MATCH(a) AGAINST ('+abcd' IN BOOLEAN MODE);
+a
+abcd
+DROP TABLE t1;
End of 4.1 tests
CREATE TABLE t1 (a varchar(64) character set ucs2, b decimal(10,3));
INSERT INTO t1 VALUES ("1.1", 0), ("2.1", 0);
@@ -922,4 +936,52 @@ ERROR HY000: Illegal mix of collations (ascii_general_ci,IMPLICIT) and (ucs2_gen
select * from t1 where a=if(b<10,_ucs2 0x0062,_ucs2 0x00C0);
ERROR HY000: Illegal mix of collations (ascii_general_ci,IMPLICIT) and (ucs2_general_ci,COERCIBLE) for operation '='
drop table t1;
+set collation_connection=ucs2_general_ci;
+drop table if exists t1;
+create table t1 as
+select repeat(' ', 64) as s1, repeat(' ',64) as s2
+union
+select null, null;
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `s1` varchar(64) CHARACTER SET ucs2 DEFAULT NULL,
+ `s2` varchar(64) CHARACTER SET ucs2 DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+delete from t1;
+insert into t1 values('aaa','aaa');
+insert into t1 values('aaa|qqq','qqq');
+insert into t1 values('gheis','^[^a-dXYZ]+$');
+insert into t1 values('aab','^aa?b');
+insert into t1 values('Baaan','^Ba*n');
+insert into t1 values('aaa','qqq|aaa');
+insert into t1 values('qqq','qqq|aaa');
+insert into t1 values('bbb','qqq|aaa');
+insert into t1 values('bbb','qqq');
+insert into t1 values('aaa','aba');
+insert into t1 values(null,'abc');
+insert into t1 values('def',null);
+insert into t1 values(null,null);
+insert into t1 values('ghi','ghi[');
+select HIGH_PRIORITY s1 regexp s2 from t1;
+s1 regexp s2
+1
+1
+1
+1
+1
+1
+1
+0
+0
+0
+NULL
+NULL
+NULL
+NULL
+drop table t1;
+set names latin1;
+select hex(char(0x41 using ucs2));
+hex(char(0x41 using ucs2))
+0041
End of 5.0 tests
diff --git a/mysql-test/r/ctype_utf8.result b/mysql-test/r/ctype_utf8.result
index 715dfb1b7d8..5c90c3b5e0b 100644
--- a/mysql-test/r/ctype_utf8.result
+++ b/mysql-test/r/ctype_utf8.result
@@ -267,6 +267,51 @@ b
select * from t1 where a = 'b' and a != 'b';
a
drop table t1;
+set collation_connection=utf8_general_ci;
+drop table if exists t1;
+create table t1 as
+select repeat(' ', 64) as s1, repeat(' ',64) as s2
+union
+select null, null;
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `s1` varchar(64) CHARACTER SET utf8 DEFAULT NULL,
+ `s2` varchar(64) CHARACTER SET utf8 DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+delete from t1;
+insert into t1 values('aaa','aaa');
+insert into t1 values('aaa|qqq','qqq');
+insert into t1 values('gheis','^[^a-dXYZ]+$');
+insert into t1 values('aab','^aa?b');
+insert into t1 values('Baaan','^Ba*n');
+insert into t1 values('aaa','qqq|aaa');
+insert into t1 values('qqq','qqq|aaa');
+insert into t1 values('bbb','qqq|aaa');
+insert into t1 values('bbb','qqq');
+insert into t1 values('aaa','aba');
+insert into t1 values(null,'abc');
+insert into t1 values('def',null);
+insert into t1 values(null,null);
+insert into t1 values('ghi','ghi[');
+select HIGH_PRIORITY s1 regexp s2 from t1;
+s1 regexp s2
+1
+1
+1
+1
+1
+1
+1
+0
+0
+0
+NULL
+NULL
+NULL
+NULL
+drop table t1;
+set names utf8;
set names utf8;
select 'ваÑÑ' rlike '[[:<:]]ваÑÑ[[:>:]]';
'ваÑÑ' rlike '[[:<:]]ваÑÑ[[:>:]]'
@@ -1538,12 +1583,12 @@ char(53647 using utf8)
Ñ
select char(0xff,0x8f using utf8);
char(0xff,0x8f using utf8)
-ÿ
+
Warnings:
Warning 1300 Invalid utf8 character string: 'FF8F'
select convert(char(0xff,0x8f) using utf8);
convert(char(0xff,0x8f) using utf8)
-ÿ
+
Warnings:
Warning 1300 Invalid utf8 character string: 'FF8F'
set sql_mode=traditional;
@@ -1730,3 +1775,41 @@ i
1
н1234567890
DROP TABLE t1, t2;
+set sql_mode=traditional;
+select hex(char(0xFF using utf8));
+hex(char(0xFF using utf8))
+NULL
+Warnings:
+Error 1300 Invalid utf8 character string: 'FF'
+select hex(convert(0xFF using utf8));
+hex(convert(0xFF using utf8))
+NULL
+Warnings:
+Error 1300 Invalid utf8 character string: 'FF'
+select hex(_utf8 0x616263FF);
+ERROR HY000: Invalid utf8 character string: 'FF'
+select hex(_utf8 X'616263FF');
+ERROR HY000: Invalid utf8 character string: 'FF'
+select hex(_utf8 B'001111111111');
+ERROR HY000: Invalid utf8 character string: 'FF'
+select (_utf8 X'616263FF');
+ERROR HY000: Invalid utf8 character string: 'FF'
+set sql_mode=default;
+select hex(char(0xFF using utf8));
+hex(char(0xFF using utf8))
+
+Warnings:
+Warning 1300 Invalid utf8 character string: 'FF'
+select hex(convert(0xFF using utf8));
+hex(convert(0xFF using utf8))
+
+Warnings:
+Warning 1300 Invalid utf8 character string: 'FF'
+select hex(_utf8 0x616263FF);
+ERROR HY000: Invalid utf8 character string: 'FF'
+select hex(_utf8 X'616263FF');
+ERROR HY000: Invalid utf8 character string: 'FF'
+select hex(_utf8 B'001111111111');
+ERROR HY000: Invalid utf8 character string: 'FF'
+select (_utf8 X'616263FF');
+ERROR HY000: Invalid utf8 character string: 'FF'
diff --git a/mysql-test/r/date_formats.result b/mysql-test/r/date_formats.result
index c1c8b7b060e..fbe46e9fa21 100644
--- a/mysql-test/r/date_formats.result
+++ b/mysql-test/r/date_formats.result
@@ -478,7 +478,7 @@ str_to_date(a,b)
create table t2 select str_to_date(a,b) from t1;
describe t2;
Field Type Null Key Default Extra
-str_to_date(a,b) binary(29) YES NULL
+str_to_date(a,b) datetime YES NULL
select str_to_date("2003-01-02 10:11:12.0012", "%Y-%m-%d %H:%i:%S.%f") as f1,
str_to_date("2003-01-02 10:11:12.0012", "%Y-%m-%d %H:%i:%S") as f2,
str_to_date("2003-01-02", "%Y-%m-%d") as f3,
diff --git a/mysql-test/r/ddl_i18n_koi8r.result b/mysql-test/r/ddl_i18n_koi8r.result
index 3d38319df21..fbaf2f2fd4a 100644
--- a/mysql-test/r/ddl_i18n_koi8r.result
+++ b/mysql-test/r/ddl_i18n_koi8r.result
@@ -29,7 +29,8 @@ v2 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE table_name = 'v1'|
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION
-NULL mysqltest1 v1 SELECT 'ÔÅÓÔ' AS c1, ËÏÌ AS c2 NONE YES root@localhost DEFINER koi8r koi8r_general_ci
+NULL mysqltest1 v1 SELECT 'ÔÅÓÔ' AS c1, ËÏÌ AS c2
+FROM t1 NONE YES root@localhost DEFINER koi8r koi8r_general_ci
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE table_name = 'v2'|
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION
@@ -68,7 +69,8 @@ v2 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE table_name = 'v1'|
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION
-NULL mysqltest1 v1 SELECT 'ÔÅÓÔ' AS c1, ËÏÌ AS c2 NONE YES root@localhost DEFINER koi8r koi8r_general_ci
+NULL mysqltest1 v1 SELECT 'ÔÅÓÔ' AS c1, ËÏÌ AS c2
+FROM t1 NONE YES root@localhost DEFINER koi8r koi8r_general_ci
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE table_name = 'v2'|
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION
diff --git a/mysql-test/r/ddl_i18n_utf8.result b/mysql-test/r/ddl_i18n_utf8.result
index b8e690bfeb7..d0f176c1985 100644
--- a/mysql-test/r/ddl_i18n_utf8.result
+++ b/mysql-test/r/ddl_i18n_utf8.result
@@ -29,7 +29,8 @@ v2 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE table_name = 'v1'|
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION
-NULL mysqltest1 v1 SELECT 'теÑÑ‚' AS c1, кол AS c2 NONE YES root@localhost DEFINER utf8 utf8_general_ci
+NULL mysqltest1 v1 SELECT 'теÑÑ‚' AS c1, кол AS c2
+FROM t1 NONE YES root@localhost DEFINER utf8 utf8_general_ci
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE table_name = 'v2'|
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION
@@ -68,7 +69,8 @@ v2 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE table_name = 'v1'|
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION
-NULL mysqltest1 v1 SELECT 'теÑÑ‚' AS c1, кол AS c2 NONE YES root@localhost DEFINER utf8 utf8_general_ci
+NULL mysqltest1 v1 SELECT 'теÑÑ‚' AS c1, кол AS c2
+FROM t1 NONE YES root@localhost DEFINER utf8 utf8_general_ci
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE table_name = 'v2'|
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION
diff --git a/mysql-test/r/delayed.result b/mysql-test/r/delayed.result
index c520ab52ab3..bcda6ddb6ab 100644
--- a/mysql-test/r/delayed.result
+++ b/mysql-test/r/delayed.result
@@ -73,13 +73,13 @@ a
13
DROP TABLE t1;
SET @bug20627_old_auto_increment_offset=
-@@auto_increment_offset= 2;
+@@auto_increment_offset;
SET @bug20627_old_auto_increment_increment=
-@@auto_increment_increment= 3;
+@@auto_increment_increment;
SET @bug20627_old_session_auto_increment_offset=
-@@session.auto_increment_offset= 4;
+@@session.auto_increment_offset;
SET @bug20627_old_session_auto_increment_increment=
-@@session.auto_increment_increment= 5;
+@@session.auto_increment_increment;
SET @@auto_increment_offset= 2;
SET @@auto_increment_increment= 3;
SET @@session.auto_increment_offset= 4;
@@ -116,13 +116,13 @@ SET @@session.auto_increment_offset=
SET @@session.auto_increment_increment=
@bug20627_old_session_auto_increment_increment;
SET @bug20830_old_auto_increment_offset=
-@@auto_increment_offset= 2;
+@@auto_increment_offset;
SET @bug20830_old_auto_increment_increment=
-@@auto_increment_increment= 3;
+@@auto_increment_increment;
SET @bug20830_old_session_auto_increment_offset=
-@@session.auto_increment_offset= 4;
+@@session.auto_increment_offset;
SET @bug20830_old_session_auto_increment_increment=
-@@session.auto_increment_increment= 5;
+@@session.auto_increment_increment;
SET @@auto_increment_offset= 2;
SET @@auto_increment_increment= 3;
SET @@session.auto_increment_offset= 4;
@@ -250,11 +250,11 @@ SELECT HEX(a) FROM t1;
HEX(a)
1
DROP TABLE t1;
-CREATE TABLE t1(c1 INT) ENGINE=MyISAM;
-CREATE TABLE t2(c1 INT) ENGINE=MERGE UNION=(t1);
-INSERT DELAYED INTO t2 VALUES(1);
-ERROR HY000: Table storage engine for 't2' doesn't have this option
-DROP TABLE t1, t2;
+CREATE TABLE t1 (a INT);
+INSERT DELAYED INTO t1 SET b= b();
+ERROR 42S22: Unknown column 'b' in 'field list'
+DROP TABLE t1;
+End of 5.0 tests
DROP TABLE IF EXISTS t1,t2;
SET SQL_MODE='NO_AUTO_VALUE_ON_ZERO';
CREATE TABLE `t1` (
@@ -284,3 +284,4 @@ ERROR 22007: Incorrect date value: '0000-00-00' for column 'f1' at row 1
INSERT DELAYED INTO t2 VALUES (0,'2007-00-00');
ERROR 22007: Incorrect date value: '2007-00-00' for column 'f1' at row 1
DROP TABLE t1,t2;
+End of 5.1 tests
diff --git a/mysql-test/r/delete.result b/mysql-test/r/delete.result
index 5084498c01c..eb93c69d960 100644
--- a/mysql-test/r/delete.result
+++ b/mysql-test/r/delete.result
@@ -271,3 +271,11 @@ a
DROP TABLE t1, t2;
DROP DATABASE db1;
DROP DATABASE db2;
+CREATE FUNCTION f1() RETURNS INT RETURN 1;
+CREATE TABLE t1 (a INT);
+INSERT INTO t1 VALUES (0);
+DELETE FROM t1 ORDER BY (f1(10)) LIMIT 1;
+ERROR 42000: Incorrect number of arguments for FUNCTION test.f1; expected 0, got 1
+DROP TABLE t1;
+DROP FUNCTION f1;
+End of 5.0 tests
diff --git a/mysql-test/r/derived.result b/mysql-test/r/derived.result
index 7da82ada121..306c51fb8cf 100644
--- a/mysql-test/r/derived.result
+++ b/mysql-test/r/derived.result
@@ -326,7 +326,8 @@ id select_type table type possible_keys key key_len ref rows Extra
2 DERIVED t2 index PRIMARY PRIMARY 4 NULL 2 Using where; Using index
drop table t2;
CREATE TABLE `t1` ( `itemid` int(11) NOT NULL default '0', `grpid` varchar(15) NOT NULL default '', `vendor` int(11) NOT NULL default '0', `date_` date NOT NULL default '0000-00-00', `price` decimal(12,2) NOT NULL default '0.00', PRIMARY KEY (`itemid`,`grpid`,`vendor`,`date_`), KEY `itemid` (`itemid`,`vendor`), KEY `itemid_2` (`itemid`,`date_`));
-insert into t1 values (128, 'rozn', 2, now(), 10),(128, 'rozn', 1, now(), 10);
+insert into t1 values (128, 'rozn', 2, curdate(), 10),
+(128, 'rozn', 1, curdate(), 10);
SELECT MIN(price) min, MAX(price) max, AVG(price) avg FROM (SELECT SUBSTRING( MAX(concat(date_,";",price)), 12) price FROM t1 WHERE itemid=128 AND grpid='rozn' GROUP BY itemid, grpid, vendor) lastprices;
min max avg
10.00 10.00 10
diff --git a/mysql-test/r/drop.result b/mysql-test/r/drop.result
index ff11905aa34..71d6fcc7cd0 100644
--- a/mysql-test/r/drop.result
+++ b/mysql-test/r/drop.result
@@ -85,3 +85,10 @@ select 1;
1
unlock tables;
End of 5.0 tests
+create database mysql_test;
+create table mysql_test.t1(f1 int);
+create table mysql_test.`#sql-347f_7` (f1 int);
+create table mysql_test.`#sql-347f_8` (f1 int);
+drop table mysql_test.`#sql-347f_8`;
+drop database mysql_test;
+End of 5.1 tests
diff --git a/mysql-test/r/events.result b/mysql-test/r/events.result
index d1ee6d1c5a1..7b68914e219 100644
--- a/mysql-test/r/events.result
+++ b/mysql-test/r/events.result
@@ -403,9 +403,10 @@ ERROR 42S02: Table 'mysql.event' doesn't exist
DROP DATABASE IF EXISTS mysqltest_no_such_database;
Warnings:
Note 1008 Can't drop database 'mysqltest_no_such_database'; database doesn't exist
-Error 1146 Table 'mysql.event' doesn't exist
CREATE DATABASE mysqltest_db2;
DROP DATABASE mysqltest_db2;
+Warnings:
+Error 1146 Table 'mysql.event' doesn't exist
OK, there is an unnecessary warning about the non-existent table
but it's not easy to fix and no one complained about it.
A similar warning is printed if mysql.proc is missing.
diff --git a/mysql-test/r/events_bugs.result b/mysql-test/r/events_bugs.result
index 3c9e6384c64..b91e7e88d64 100644
--- a/mysql-test/r/events_bugs.result
+++ b/mysql-test/r/events_bugs.result
@@ -3,6 +3,10 @@ drop database if exists mysqltest_db1;
drop database if exists mysqltest_db2;
create database events_test;
use events_test;
+select * from information_schema.global_variables where variable_name like 'event_scheduler';
+VARIABLE_NAME VARIABLE_VALUE
+EVENT_SCHEDULER ON
+SET GLOBAL event_scheduler = 'OFF';
CREATE EVENT lower_case ON SCHEDULE EVERY 1 MINUTE DO SELECT 1;
CREATE EVENT Lower_case ON SCHEDULE EVERY 2 MINUTE DO SELECT 2;
ERROR HY000: Event 'Lower_case' already exists
@@ -31,7 +35,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 1587 Event execution time is in the past and ON COMPLETION NOT PRESERVE is set. The event was dropped immediately after creation.
+Note 1588 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 +461,22 @@ CREATE EVENT e4 ON SCHEDULE EVERY 1 HOUR STARTS '1999-01-01 00:00:00'
DO
SELECT 1;
Warnings:
-Note 1587 Event execution time is in the past and ON COMPLETION NOT PRESERVE is set. The event was dropped immediately after creation.
+Note 1588 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 1587 Event execution time is in the past and ON COMPLETION NOT PRESERVE is set. The event was dropped immediately after creation.
+Note 1588 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 1587 Event execution time is in the past and ON COMPLETION NOT PRESERVE is set. The event was dropped immediately after creation.
+Note 1588 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 1587 Event execution time is in the past and ON COMPLETION NOT PRESERVE is set. The event was dropped immediately after creation.
+Note 1588 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 +486,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 1543 Event execution time is in the past. Event has been disabled
+Note 1544 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 1543 Event execution time is in the past. Event has been disabled
+Note 1544 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 1543 Event execution time is in the past. Event has been disabled
+Note 1544 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'
@@ -610,7 +614,6 @@ id ev_nm ev_cnt
6 ev_sched_1823 6
DROP TABLE event_log;
SET GLOBAL event_scheduler = OFF;
-DROP DATABASE events_test;
SET GLOBAL event_scheduler= ON;
CREATE EVENT bug28641 ON SCHEDULE AT '2038.01.18 03:00:00'
DO BEGIN
@@ -618,3 +621,105 @@ SELECT 1;
END;|
SET GLOBAL event_scheduler= OFF;
DROP EVENT bug28641;
+
+#####################################################################
+#
+# BUG#31111: --read-only crashes MySQL (events fail to load).
+#
+#####################################################################
+
+DROP USER mysqltest_u1@localhost;
+DROP EVENT IF EXISTS e1;
+DROP EVENT IF EXISTS e2;
+
+GRANT EVENT ON *.* TO mysqltest_u1@localhost;
+
+SET GLOBAL READ_ONLY = 1;
+
+#
+# Connection: u1_con (mysqltest_u1@localhost/events_test).
+#
+
+CREATE EVENT e1 ON SCHEDULE AT '2020-01-01 00:00:00' DO SET @a = 1;
+ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
+
+ALTER EVENT e1 COMMENT 'comment';
+ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
+
+DROP EVENT e1;
+ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
+
+#
+# Connection: root_con (root@localhost/events_test).
+#
+
+CREATE EVENT e1 ON SCHEDULE AT '2020-01-01 00:00:00' DO SET @a = 1;
+
+ALTER EVENT e1 COMMENT 'comment';
+
+DROP EVENT e1;
+
+SET GLOBAL READ_ONLY = 0;
+
+#
+# Connection: u1_con (mysqltest_u1@localhost/test).
+#
+
+CREATE EVENT e1 ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 SECOND DO SET @a = 1;
+CREATE EVENT e2 ON SCHEDULE EVERY 1 SECOND DO SET @a = 1;
+
+SELECT
+event_name,
+last_executed IS NULL,
+definer
+FROM INFORMATION_SCHEMA.EVENTS
+WHERE event_schema = 'events_test';
+event_name last_executed IS NULL definer
+e1 1 mysqltest_u1@localhost
+e2 1 mysqltest_u1@localhost
+
+#
+# Connection: root_con (root@localhost/events_test).
+#
+
+SET GLOBAL READ_ONLY = 1;
+
+SET GLOBAL EVENT_SCHEDULER = ON;
+
+# Waiting for the event scheduler to execute and drop event e1...
+
+# Waiting for the event scheduler to execute and update event e2...
+
+SET GLOBAL EVENT_SCHEDULER = OFF;
+
+SELECT
+event_name,
+last_executed IS NULL,
+definer
+FROM INFORMATION_SCHEMA.EVENTS
+WHERE event_schema = 'events_test';
+event_name last_executed IS NULL definer
+e2 0 mysqltest_u1@localhost
+
+DROP EVENT e1;
+ERROR HY000: Unknown event 'e1'
+
+# Cleanup.
+
+DROP EVENT e2;
+
+SET GLOBAL READ_ONLY = 0;
+
+#
+# Connection: default
+#
+
+DROP USER mysqltest_u1@localhost;
+
+#####################################################################
+#
+# End of BUG#31111.
+#
+#####################################################################
+
+DROP DATABASE events_test;
diff --git a/mysql-test/r/events_scheduling.result b/mysql-test/r/events_scheduling.result
index d45bffcd7ff..033136ba354 100644
--- a/mysql-test/r/events_scheduling.result
+++ b/mysql-test/r/events_scheduling.result
@@ -78,10 +78,10 @@ FROM INFORMATION_SCHEMA.EVENTS
WHERE EVENT_SCHEMA=DATABASE() AND EVENT_NAME='event_2';
IF(TIME_TO_SEC(TIMEDIFF(ENDS,STARTS))=6, 'OK', 'ERROR')
OK
-SELECT IF(LAST_EXECUTED-ENDS < 3, 'OK', 'ERROR')
+SELECT IF(LAST_EXECUTED-ENDS <= 0, 'OK', 'ERROR')
FROM INFORMATION_SCHEMA.EVENTS
WHERE EVENT_SCHEMA=DATABASE() AND EVENT_NAME='event_2';
-IF(LAST_EXECUTED-ENDS < 3, 'OK', 'ERROR')
+IF(LAST_EXECUTED-ENDS <= 0, 'OK', 'ERROR')
OK
"Already dropped because ended. Therefore an error."
DROP EVENT event_3;
diff --git a/mysql-test/r/events_trans.result b/mysql-test/r/events_trans.result
index 984e22a2c1a..16ec64b4c50 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 1536 Event 'e1' already exists
+Note 1537 Event 'e1' already exists
rollback work;
select * from t1;
a
diff --git a/mysql-test/r/explain.result b/mysql-test/r/explain.result
index 6f348447fbb..2ce8b8c384f 100644
--- a/mysql-test/r/explain.result
+++ b/mysql-test/r/explain.result
@@ -87,3 +87,23 @@ Warnings:
Note 1003 select '1' AS `f1`,'1' AS `f2` from `test`.`t1` having 1
drop view v1;
drop table t1;
+CREATE TABLE t1(c INT);
+INSERT INTO t1 VALUES (),();
+CREATE TABLE t2 (b INT,
+KEY(b),KEY(b),KEY(b),KEY(b),KEY(b),
+KEY(b),KEY(b),KEY(b),KEY(b),KEY(b),
+KEY(b),KEY(b),KEY(b),KEY(b),KEY(b),
+KEY(b),KEY(b),KEY(b),KEY(b),KEY(b),
+KEY(b),KEY(b),KEY(b),KEY(b),KEY(b),
+KEY(b),KEY(b),KEY(b),KEY(b),KEY(b),
+KEY(b),KEY(b),KEY(b),KEY(b),KEY(b),
+KEY(b),KEY(b),KEY(b),KEY(b),KEY(b));
+INSERT INTO t2 VALUES (),(),();
+EXPLAIN SELECT 1 FROM
+(SELECT 1 FROM t2,t1 WHERE b < c GROUP BY 1 LIMIT 1) AS d2;
+id select_type table type possible_keys key key_len ref rows Extra
+X X X X X X X X X const row not found
+X X X X X X X X X
+X X X X X X X X X Range checked for each record (index map: 0xFFFFFFFFFF)
+DROP TABLE t2;
+DROP TABLE t1;
diff --git a/mysql-test/r/federated.result b/mysql-test/r/federated.result
index 8f1fe20ea3b..00287338459 100644
--- a/mysql-test/r/federated.result
+++ b/mysql-test/r/federated.result
@@ -1955,6 +1955,117 @@ a
2
DROP TABLE federated.t1;
DROP TABLE federated.t1;
+create table t1 (a varchar(256));
+drop view if exists v1;
+create view v1 as select a from t1;
+create table t1
+(a varchar(256)) engine=federated
+connection='mysql://root@127.0.0.1:SLAVE_PORT/test/v1';
+select 1 from t1 order by a;
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+drop table t1;
+drop table t1;
+drop view v1;
End of 5.1 tests
DROP TABLE IF EXISTS federated.t1;
DROP DATABASE IF EXISTS federated;
diff --git a/mysql-test/r/federated_server.result b/mysql-test/r/federated_server.result
index 0905aabb075..32717b4f0e3 100644
--- a/mysql-test/r/federated_server.result
+++ b/mysql-test/r/federated_server.result
@@ -253,6 +253,14 @@ drop user guest_usage@localhost;
drop user guest_select@localhost;
drop table federated.t1;
drop server 's1';
+create server 's1' foreign data wrapper 'mysql' options (port 3306);
+alter server 's1' options
+(host 'localhost', database '', user '',
+password '', socket '', owner '', port 3306);
+alter server 's1' options
+(host 'localhost', database 'database1', user '',
+password '', socket '', owner '', port 3306);
+drop server 's1';
# End of 5.1 tests
use test;
create procedure p1 ()
@@ -262,7 +270,7 @@ DECLARE e INT DEFAULT 0;
DECLARE i INT;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET e = e + 1;
SET i = sleep(5);
-WHILE v < 20000 do
+WHILE v < 10000 do
CREATE SERVER s
FOREIGN DATA WRAPPER mysql
OPTIONS (USER 'Remote', HOST '192.168.1.106', DATABASE 'test');
diff --git a/mysql-test/r/flush.result b/mysql-test/r/flush.result
index dcbffd6f7c8..f1b6c471943 100644
--- a/mysql-test/r/flush.result
+++ b/mysql-test/r/flush.result
@@ -55,6 +55,23 @@ flush tables with read lock;
insert into t2 values(1);
unlock tables;
drop table t1, t2;
+drop table if exists t1, t2;
+set session low_priority_updates=1;
+create table t1 (a int);
+create table t2 (b int);
+lock tables t1 write;
+flush tables with read lock;
+ERROR HY000: Can't execute the given command because you have active locked tables or an active transaction
+unlock tables;
+lock tables t1 read, t2 write;
+flush tables with read lock;
+ERROR HY000: Can't execute the given command because you have active locked tables or an active transaction
+unlock tables;
+lock tables t1 read;
+flush tables with read lock;
+unlock tables;
+drop table t1, t2;
+set session low_priority_updates=default;
End of 5.0 tests
set @old_general_log= @@general_log;
set @old_read_only= @@read_only;
diff --git a/mysql-test/r/fulltext.result b/mysql-test/r/fulltext.result
index 96ebb9bf254..c3fa427127b 100644
--- a/mysql-test/r/fulltext.result
+++ b/mysql-test/r/fulltext.result
@@ -476,6 +476,12 @@ ALTER TABLE t1 DISABLE KEYS;
SELECT * FROM t1 WHERE MATCH(a) AGAINST('test');
ERROR HY000: Can't find FULLTEXT index matching the column list
DROP TABLE t1;
+CREATE TABLE t1(a TEXT);
+INSERT INTO t1 VALUES(' aaaaa aaaa');
+SELECT * FROM t1 WHERE MATCH(a) AGAINST ('"aaaa"' IN BOOLEAN MODE);
+a
+ aaaaa aaaa
+DROP TABLE t1;
CREATE TABLE t1(a VARCHAR(20), FULLTEXT(a));
INSERT INTO t1 VALUES('Offside'),('City Of God');
SELECT a FROM t1 WHERE MATCH a AGAINST ('+city of*' IN BOOLEAN MODE);
diff --git a/mysql-test/r/func_gconcat.result b/mysql-test/r/func_gconcat.result
index 7ae7806baea..b5bfadf1f57 100644
--- a/mysql-test/r/func_gconcat.result
+++ b/mysql-test/r/func_gconcat.result
@@ -271,7 +271,7 @@ group_concat(distinct s1 order by s2)
c,b,a
select group_concat(distinct s1 order by s2) from t1;
group_concat(distinct s1 order by s2)
-c,b,a,c
+c,b,a
drop table t1;
create table t1 (a int, c int);
insert into t1 values (1, 2), (2, 3), (2, 4), (3, 5);
@@ -867,4 +867,74 @@ select group_concat(distinct a, c order by a desc, c desc) from t1;
group_concat(distinct a, c order by a desc, c desc)
31,11,10,01,00
drop table t1;
+create table t1 (f1 char(20));
+insert into t1 values (''),('');
+select group_concat(distinct f1) from t1;
+group_concat(distinct f1)
+
+select group_concat(f1) from t1;
+group_concat(f1)
+,
+drop table t1;
+CREATE TABLE t1 (a INT, b INT);
+INSERT INTO t1 VALUES (1, 1), (2, 2), (2, 3);
+SELECT GROUP_CONCAT(DISTINCT a ORDER BY b) FROM t1;
+GROUP_CONCAT(DISTINCT a ORDER BY b)
+1,2
+SELECT GROUP_CONCAT(DISTINCT a ORDER BY b DESC) FROM t1;
+GROUP_CONCAT(DISTINCT a ORDER BY b DESC)
+2,1
+SELECT GROUP_CONCAT(DISTINCT a) FROM t1;
+GROUP_CONCAT(DISTINCT a)
+1,2
+SELECT GROUP_CONCAT(DISTINCT a + 1 ORDER BY 3 - b) FROM t1;
+GROUP_CONCAT(DISTINCT a + 1 ORDER BY 3 - b)
+3,2
+SELECT GROUP_CONCAT(DISTINCT a + 1 ORDER BY b) FROM t1;
+GROUP_CONCAT(DISTINCT a + 1 ORDER BY b)
+2,3
+SELECT GROUP_CONCAT(a ORDER BY 3 - b) FROM t1;
+GROUP_CONCAT(a ORDER BY 3 - b)
+2,2,1
+CREATE TABLE t2 (a INT, b INT, c INT, d INT);
+INSERT INTO t2 VALUES (1,1, 1,1), (1,1, 2,2), (1,2, 2,1), (2,1, 1,2);
+SELECT GROUP_CONCAT(DISTINCT a, b ORDER BY c, d) FROM t2;
+GROUP_CONCAT(DISTINCT a, b ORDER BY c, d)
+11,21,12
+SELECT GROUP_CONCAT(DISTINCT a, b ORDER BY d, c) FROM t2;
+GROUP_CONCAT(DISTINCT a, b ORDER BY d, c)
+11,12,21
+CREATE TABLE t3 (a INT, b INT, c INT);
+INSERT INTO t3 VALUES (1, 1, 1), (2, 1, 2), (3, 2, 1);
+SELECT GROUP_CONCAT(DISTINCT a, b ORDER BY b, c) FROM t3;
+GROUP_CONCAT(DISTINCT a, b ORDER BY b, c)
+11,21,32
+SELECT GROUP_CONCAT(DISTINCT a, b ORDER BY c, b) FROM t3;
+GROUP_CONCAT(DISTINCT a, b ORDER BY c, b)
+11,32,21
+SELECT GROUP_CONCAT(DISTINCT a, b ORDER BY a, b) FROM t1;
+GROUP_CONCAT(DISTINCT a, b ORDER BY a, b)
+11,22,23
+SELECT GROUP_CONCAT(DISTINCT b, a ORDER BY a, b) FROM t1;
+GROUP_CONCAT(DISTINCT b, a ORDER BY a, b)
+11,22,32
+SELECT GROUP_CONCAT(DISTINCT a, b ORDER BY b, a) FROM t1;
+GROUP_CONCAT(DISTINCT a, b ORDER BY b, a)
+11,22,23
+SELECT GROUP_CONCAT(DISTINCT b, a ORDER BY a, b) FROM t1;
+GROUP_CONCAT(DISTINCT b, a ORDER BY a, b)
+11,22,32
+SELECT GROUP_CONCAT(DISTINCT a ORDER BY a, b) FROM t1;
+GROUP_CONCAT(DISTINCT a ORDER BY a, b)
+1,2
+SELECT GROUP_CONCAT(DISTINCT b ORDER BY b, a) FROM t1;
+GROUP_CONCAT(DISTINCT b ORDER BY b, a)
+1,2,3
+SELECT GROUP_CONCAT(DISTINCT a, b ORDER BY a) FROM t1;
+GROUP_CONCAT(DISTINCT a, b ORDER BY a)
+11,23,22
+SELECT GROUP_CONCAT(DISTINCT b, a ORDER BY b) FROM t1;
+GROUP_CONCAT(DISTINCT b, a ORDER BY b)
+11,22,32
+DROP TABLE t1, t2, t3;
End of 5.0 tests
diff --git a/mysql-test/r/func_group.result b/mysql-test/r/func_group.result
index fce01ffd171..4c1abb160c6 100644
--- a/mysql-test/r/func_group.result
+++ b/mysql-test/r/func_group.result
@@ -1368,4 +1368,46 @@ SELECT MIN(a), MIN(b) FROM t5 WHERE a = 1 and b > 1;
MIN(a) MIN(b)
1 2
DROP TABLE t1, t2, t3, t4, t5;
+CREATE TABLE t1 (a INT);
+INSERT INTO t1 values (),(),();
+SELECT (SELECT SLEEP(0) FROM t1 ORDER BY AVG(DISTINCT a) ) as x FROM t1
+GROUP BY x;
+x
+0
+SELECT 1 FROM t1 GROUP BY (SELECT SLEEP(0) FROM t1 ORDER BY AVG(DISTINCT a) );
+1
+1
+DROP TABLE t1;
+CREATE TABLE t1 (a int, b date NOT NULL, KEY k1 (a,b));
+SELECT MIN(b) FROM t1 WHERE a=1 AND b>'2007-08-01';
+MIN(b)
+NULL
+DROP TABLE t1;
+CREATE TABLE t1 (a INT);
+INSERT INTO t1 VALUES (1),(2),(3),(4);
+SET SQL_MODE=ONLY_FULL_GROUP_BY;
+SELECT a FROM t1 HAVING COUNT(*)>2;
+ERROR 42000: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
+SELECT COUNT(*), a FROM t1;
+ERROR 42000: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
+SET SQL_MODE=DEFAULT;
+SELECT a FROM t1 HAVING COUNT(*)>2;
+a
+1
+SELECT COUNT(*), a FROM t1;
+COUNT(*) a
+4 1
+DROP TABLE t1;
+set SQL_MODE=ONLY_FULL_GROUP_BY;
+CREATE TABLE t1 (a INT);
+INSERT INTO t1 VALUES (1),(2),(3),(4);
+CREATE VIEW v1 AS SELECT a,(a + 1) AS y FROM t1;
+EXPLAIN EXTENDED SELECT y FROM v1 GROUP BY v1.y;
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 4 100.00 Using temporary; Using filesort
+Warnings:
+Note 1003 select (`test`.`t1`.`a` + 1) AS `y` from `test`.`t1` group by (`test`.`t1`.`a` + 1)
+DROP VIEW v1;
+DROP TABLE t1;
+SET SQL_MODE=DEFAULT;
End of 5.0 tests
diff --git a/mysql-test/r/func_in.result b/mysql-test/r/func_in.result
index 4f64d39ccc0..80fa8f17a2a 100644
--- a/mysql-test/r/func_in.result
+++ b/mysql-test/r/func_in.result
@@ -564,4 +564,9 @@ explain select f2 from t2 where f2 in (1,'b');
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t2 index t2f2 t2f2 5 NULL 3 Using where; Using index
drop table t1, t2;
+create table t1 (a time, key(a));
+insert into t1 values (),(),(),(),(),(),(),(),(),();
+select a from t1 where a not in (a,a,a) group by a;
+a
+drop table t1;
End of 5.1 tests
diff --git a/mysql-test/r/func_math.result b/mysql-test/r/func_math.result
index e2e93796afe..6a476d12896 100644
--- a/mysql-test/r/func_math.result
+++ b/mysql-test/r/func_math.result
@@ -369,4 +369,42 @@ mod(5, cast(-2 as unsigned)) mod(5, 18446744073709551614) mod(5, -2)
select pow(cast(-2 as unsigned), 5), pow(18446744073709551614, 5), pow(-2, 5);
pow(cast(-2 as unsigned), 5) pow(18446744073709551614, 5) pow(-2, 5)
2.1359870359209e+96 2.1359870359209e+96 -32
+CREATE TABLE t1 (a timestamp, b varchar(20), c bit(1));
+INSERT INTO t1 VALUES('1998-09-23', 'str1', 1), ('2003-03-25', 'str2', 0);
+SELECT a DIV 900 y FROM t1 GROUP BY y;
+y
+22201025555
+22255916666
+SELECT DISTINCT a DIV 900 y FROM t1;
+y
+22201025555
+22255916666
+SELECT b DIV 900 y FROM t1 GROUP BY y;
+y
+0
+SELECT c DIV 900 y FROM t1 GROUP BY y;
+y
+0
+DROP TABLE t1;
+CREATE TABLE t1(a LONGBLOB);
+INSERT INTO t1 VALUES('1'),('2'),('3');
+SELECT DISTINCT (a DIV 254576881) FROM t1;
+(a DIV 254576881)
+0
+SELECT (a DIV 254576881) FROM t1 UNION ALL
+SELECT (a DIV 254576881) FROM t1;
+(a DIV 254576881)
+0
+0
+0
+0
+0
+0
+DROP TABLE t1;
+CREATE TABLE t1(a SET('a','b','c'));
+INSERT INTO t1 VALUES ('a');
+SELECT a DIV 2 FROM t1 UNION SELECT a DIV 2 FROM t1;
+a DIV 2
+0
+DROP TABLE t1;
End of 5.0 tests
diff --git a/mysql-test/r/func_misc.result b/mysql-test/r/func_misc.result
index 946a07d0eb2..745a340ec94 100644
--- a/mysql-test/r/func_misc.result
+++ b/mysql-test/r/func_misc.result
@@ -1,4 +1,4 @@
-DROP TABLE IF EXISTS t1;
+DROP TABLE IF EXISTS t1, t2;
select format(1.5555,0),format(123.5555,1),format(1234.5555,2),format(12345.55555,3),format(123456.5555,4),format(1234567.5555,5),format("12345.2399",2);
format(1.5555,0) format(123.5555,1) format(1234.5555,2) format(12345.55555,3) format(123456.5555,4) format(1234567.5555,5) format("12345.2399",2)
2 123.6 1,234.56 12,345.556 123,456.5555 1,234,567.55550 12,345.24
@@ -190,6 +190,40 @@ ERROR 21000: Operand should contain 1 column(s)
drop table table_26093;
drop function func_26093_a;
drop function func_26093_b;
+SELECT NAME_CONST('test', NOW());
+ERROR HY000: Incorrect arguments to NAME_CONST
+SELECT NAME_CONST('test', UPPER('test'));
+ERROR HY000: Incorrect arguments to NAME_CONST
+SELECT NAME_CONST('test', NULL);
+test
+NULL
+SELECT NAME_CONST('test', 1);
+test
+1
+SELECT NAME_CONST('test', -1);
+test
+-1
+SELECT NAME_CONST('test', 1.0);
+test
+1.0
+SELECT NAME_CONST('test', -1.0);
+test
+-1.0
+SELECT NAME_CONST('test', 'test');
+test
+test
+CREATE TABLE t1 (a int);
+INSERT INTO t1 VALUES (5), (2);
+SELECT NAME_CONST(x,2) FROM (SELECT a x FROM t1) t;
+ERROR HY000: Incorrect arguments to NAME_CONST
+DROP TABLE t1;
+CREATE TABLE t1(a INT);
+INSERT INTO t1 VALUES (), (), ();
+SELECT NAME_CONST(a, '1') FROM t1;
+ERROR HY000: Incorrect arguments to NAME_CONST
+SET INSERT_ID= NAME_CONST(a, a);
+ERROR HY000: Incorrect arguments to NAME_CONST
+DROP TABLE t1;
create table t1 (a int not null);
insert into t1 values (-1), (-2);
select min(a) from t1 group by inet_ntoa(a);
diff --git a/mysql-test/r/func_regexp.result b/mysql-test/r/func_regexp.result
index 4e35c2a1348..9d85b1d3e7f 100644
--- a/mysql-test/r/func_regexp.result
+++ b/mysql-test/r/func_regexp.result
@@ -1,5 +1,17 @@
drop table if exists t1;
-create table t1 (s1 char(64),s2 char(64));
+set names latin1;
+drop table if exists t1;
+create table t1 as
+select repeat(' ', 64) as s1, repeat(' ',64) as s2
+union
+select null, null;
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `s1` varchar(64) DEFAULT NULL,
+ `s2` varchar(64) DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+delete from t1;
insert into t1 values('aaa','aaa');
insert into t1 values('aaa|qqq','qqq');
insert into t1 values('gheis','^[^a-dXYZ]+$');
@@ -98,3 +110,8 @@ R2
R3
deallocate prepare stmt1;
drop table t1;
+End of 4.1 tests
+SELECT 1 REGEXP NULL;
+1 REGEXP NULL
+NULL
+End of 5.0 tests
diff --git a/mysql-test/r/func_sapdb.result b/mysql-test/r/func_sapdb.result
index 5d7a564b187..942073e3fbd 100644
--- a/mysql-test/r/func_sapdb.result
+++ b/mysql-test/r/func_sapdb.result
@@ -199,7 +199,7 @@ f2 datetime YES NULL
f3 time YES NULL
f4 time YES NULL
f5 time YES NULL
-f6 time NO 00:00:00
+f6 time YES NULL
f7 datetime YES NULL
f8 date YES NULL
f9 time YES NULL
diff --git a/mysql-test/r/func_set.result b/mysql-test/r/func_set.result
index 5f6ddb020f2..4dd11cafdcd 100644
--- a/mysql-test/r/func_set.result
+++ b/mysql-test/r/func_set.result
@@ -73,3 +73,33 @@ find_in_set(binary 'a', 'A,B,C')
select find_in_set('1','3,1,');
find_in_set('1','3,1,')
2
+End of 4.1 tests
+SELECT INTERVAL(0.0, NULL);
+INTERVAL(0.0, NULL)
+1
+SELECT INTERVAL(0.0, CAST(NULL AS DECIMAL));
+INTERVAL(0.0, CAST(NULL AS DECIMAL))
+1
+SELECT INTERVAL(0.0, CAST(DATE(NULL) AS DECIMAL));
+INTERVAL(0.0, CAST(DATE(NULL) AS DECIMAL))
+1
+SELECT INTERVAL(0.0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+INTERVAL(0.0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
+8
+SELECT INTERVAL(0.0, CAST(NULL AS DECIMAL), CAST(NULL AS DECIMAL),
+CAST(NULL AS DECIMAL), CAST(NULL AS DECIMAL), CAST(NULL AS DECIMAL),
+CAST(NULL AS DECIMAL), CAST(NULL AS DECIMAL), CAST(NULL AS DECIMAL));
+INTERVAL(0.0, CAST(NULL AS DECIMAL), CAST(NULL AS DECIMAL),
+CAST(NULL AS DECIMAL), CAST(NULL AS DECIMAL), CAST(NULL AS DECIMAL),
+CAST(NULL AS DECIMAL), CAST(NULL AS DECIMAL), CAST(NULL AS DECIMAL))
+8
+SELECT INTERVAL(0.0, CAST(DATE(NULL) AS DECIMAL), CAST(DATE(NULL) AS DECIMAL),
+CAST(DATE(NULL) AS DECIMAL), CAST(DATE(NULL) AS DECIMAL),
+CAST(DATE(NULL) AS DECIMAL), CAST(DATE(NULL) AS DECIMAL),
+CAST(DATE(NULL) AS DECIMAL), CAST(DATE(NULL) AS DECIMAL));
+INTERVAL(0.0, CAST(DATE(NULL) AS DECIMAL), CAST(DATE(NULL) AS DECIMAL),
+CAST(DATE(NULL) AS DECIMAL), CAST(DATE(NULL) AS DECIMAL),
+CAST(DATE(NULL) AS DECIMAL), CAST(DATE(NULL) AS DECIMAL),
+CAST(DATE(NULL) AS DECIMAL), CAST(DATE(NULL) AS DECIMAL))
+8
+End of 5.0 tests
diff --git a/mysql-test/r/func_str.result b/mysql-test/r/func_str.result
index 6fbb9c811a7..6f6edd5112b 100644
--- a/mysql-test/r/func_str.result
+++ b/mysql-test/r/func_str.result
@@ -722,11 +722,11 @@ Warning 1265 Data truncated for column 'format(130,10)' at row 1
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `bin(130)` varchar(64) NOT NULL DEFAULT '',
- `oct(130)` varchar(64) NOT NULL DEFAULT '',
- `conv(130,16,10)` varchar(64) NOT NULL DEFAULT '',
+ `bin(130)` varchar(64) DEFAULT NULL,
+ `oct(130)` varchar(64) DEFAULT NULL,
+ `conv(130,16,10)` varchar(64) DEFAULT NULL,
`hex(130)` varchar(6) NOT NULL DEFAULT '',
- `char(130)` varbinary(1) NOT NULL DEFAULT '',
+ `char(130)` varbinary(4) NOT NULL DEFAULT '',
`format(130,10)` varchar(4) NOT NULL DEFAULT '',
`left(_latin2'a',1)` varchar(1) CHARACTER SET latin2 NOT NULL DEFAULT '',
`right(_latin2'a',1)` varchar(1) CHARACTER SET latin2 NOT NULL DEFAULT '',
@@ -1316,6 +1316,18 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
Warnings:
Note 1003 select decode('',_latin1'zxcv') AS `enc` from `test`.`t1`
drop table t1;
+create table t1 (a bigint not null)engine=myisam;
+insert into t1 set a = 1024*1024*1024*4;
+delete from t1 order by (inet_ntoa(a)) desc limit 10;
+drop table t1;
+create table t1 (a char(36) not null)engine=myisam;
+insert ignore into t1 set a = ' ';
+insert ignore into t1 set a = ' ';
+select * from t1 order by (oct(a));
+a
+
+
+drop table t1;
End of 4.1 tests
create table t1 (d decimal default null);
insert into t1 values (null);
@@ -2486,4 +2498,14 @@ SUBSTR(a,1,len)
ba
DROP TABLE t1;
+CREATE TABLE t1 AS SELECT CHAR(0x414243) as c1;
+SELECT HEX(c1) from t1;
+HEX(c1)
+414243
+DROP TABLE t1;
+CREATE VIEW v1 AS SELECT CHAR(0x414243) as c1;
+SELECT HEX(c1) from v1;
+HEX(c1)
+414243
+DROP VIEW v1;
End of 5.0 tests
diff --git a/mysql-test/r/func_time.result b/mysql-test/r/func_time.result
index 3105bc3b578..4dd8fb1531d 100644
--- a/mysql-test/r/func_time.result
+++ b/mysql-test/r/func_time.result
@@ -1027,6 +1027,15 @@ fmtddate field2
Sep-4 12:00AM abcd
DROP TABLE testBug8868;
SET NAMES DEFAULT;
+CREATE TABLE t1 (
+a TIMESTAMP
+);
+INSERT INTO t1 VALUES (now()), (now());
+SELECT 1 FROM t1 ORDER BY MAKETIME(1, 1, a);
+1
+1
+1
+DROP TABLE t1;
(select time_format(timediff(now(), DATE_SUB(now(),INTERVAL 5 DAY)),'%H') As H)
union
(select time_format(timediff(now(), DATE_SUB(now(),INTERVAL 5 DAY)),'%H') As H);
@@ -1237,6 +1246,21 @@ select concat(a,ifnull(min(date_format(now(), '%Y-%m-%d')),' ull')) from t1;
ERROR HY000: Illegal mix of collations (ascii_general_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation 'concat'
set lc_time_names=en_US;
drop table t1;
+select DATE_ADD('20071108181000', INTERVAL 1 DAY);
+DATE_ADD('20071108181000', INTERVAL 1 DAY)
+2007-11-09 18:10:00
+select DATE_ADD(20071108181000, INTERVAL 1 DAY);
+DATE_ADD(20071108181000, INTERVAL 1 DAY)
+2007-11-09 18:10:00
+select DATE_ADD('20071108', INTERVAL 1 DAY);
+DATE_ADD('20071108', INTERVAL 1 DAY)
+2007-11-09
+select DATE_ADD(20071108, INTERVAL 1 DAY);
+DATE_ADD(20071108, INTERVAL 1 DAY)
+2007-11-09
+select LAST_DAY('2007-12-06 08:59:19.05') - INTERVAL 1 SECOND;
+LAST_DAY('2007-12-06 08:59:19.05') - INTERVAL 1 SECOND
+2007-12-30 23:59:59
End of 5.0 tests
select date_sub("0050-01-01 00:00:01",INTERVAL 2 SECOND);
date_sub("0050-01-01 00:00:01",INTERVAL 2 SECOND)
diff --git a/mysql-test/r/gis-rtree.result b/mysql-test/r/gis-rtree.result
index 6e3aebe8d47..f8e0085bf59 100644
--- a/mysql-test/r/gis-rtree.result
+++ b/mysql-test/r/gis-rtree.result
@@ -167,7 +167,7 @@ count(*)
150
EXPLAIN SELECT fid, AsText(g) FROM t1 WHERE Within(g, GeomFromText('Polygon((140 140,160 140,160 160,140 160,140 140))'));
id select_type table type possible_keys key key_len ref rows Extra
-1 SIMPLE t1 range g g 32 NULL 8 Using where
+1 SIMPLE t1 range g g 34 NULL 8 Using where
SELECT fid, AsText(g) FROM t1 WHERE Within(g, GeomFromText('Polygon((140 140,160 140,160 160,140 160,140 140))'));
fid AsText(g)
1 LINESTRING(150 150,150 150)
@@ -301,7 +301,7 @@ count(*)
EXPLAIN SELECT fid, AsText(g) FROM t2 WHERE Within(g,
GeomFromText('Polygon((40 40,60 40,60 60,40 60,40 40))'));
id select_type table type possible_keys key key_len ref rows Extra
-1 SIMPLE t2 range g g 32 NULL 4 Using where
+1 SIMPLE t2 range g g 34 NULL 4 Using where
SELECT fid, AsText(g) FROM t2 WHERE Within(g,
GeomFromText('Polygon((40 40,60 40,60 60,40 60,40 40))'));
fid AsText(g)
@@ -1425,6 +1425,37 @@ CHECK TABLE t1 EXTENDED;
Table Op Msg_type Msg_text
test.t1 check status OK
DROP TABLE t1;
+create table t1 (a geometry not null, spatial index(a));
+insert into t1 values (PointFromWKB(POINT(1.1517219314031e+164, 131072)));
+insert into t1 values (PointFromWKB(POINT(9.1248812352444e+192, 2.9740338169556e+284)));
+insert into t1 values (PointFromWKB(POINT(4.7783097267365e-299, -0)));
+insert into t1 values (PointFromWKB(POINT(1.49166814624e-154, 2.0880974297595e-53)));
+insert into t1 values (PointFromWKB(POINT(4.0917382598702e+149, 1.2024538023802e+111)));
+insert into t1 values (PointFromWKB(POINT(2.0349165139404e+236, 2.9993936277913e-241)));
+insert into t1 values (PointFromWKB(POINT(2.5243548967072e-29, 1.2024538023802e+111)));
+insert into t1 values (PointFromWKB(POINT(0, 6.9835074892995e-251)));
+insert into t1 values (PointFromWKB(POINT(2.0880974297595e-53, 3.1050361846014e+231)));
+insert into t1 values (PointFromWKB(POINT(2.8728483499323e-188, 2.4600631144627e+260)));
+insert into t1 values (PointFromWKB(POINT(3.0517578125e-05, 2.0349165139404e+236)));
+insert into t1 values (PointFromWKB(POINT(1.1517219314031e+164, 1.1818212630766e-125)));
+insert into t1 values (PointFromWKB(POINT(2.481040258324e-265, 5.7766220027675e-275)));
+insert into t1 values (PointFromWKB(POINT(2.0880974297595e-53, 2.5243548967072e-29)));
+insert into t1 values (PointFromWKB(POINT(5.7766220027675e-275, 9.9464647281957e+86)));
+insert into t1 values (PointFromWKB(POINT(2.2181357552967e+130, 3.7857669957337e-270)));
+insert into t1 values (PointFromWKB(POINT(4.5767114681874e-246, 3.6893488147419e+19)));
+insert into t1 values (PointFromWKB(POINT(4.5767114681874e-246, 3.7537584144024e+255)));
+insert into t1 values (PointFromWKB(POINT(3.7857669957337e-270, 1.8033161362863e-130)));
+insert into t1 values (PointFromWKB(POINT(0, 5.8774717541114e-39)));
+insert into t1 values (PointFromWKB(POINT(1.1517219314031e+164, 2.2761049594727e-159)));
+insert into t1 values (PointFromWKB(POINT(6.243497100632e+144, 3.7857669957337e-270)));
+insert into t1 values (PointFromWKB(POINT(3.7857669957337e-270, 2.6355494858076e-82)));
+insert into t1 values (PointFromWKB(POINT(2.0349165139404e+236, 3.8518598887745e-34)));
+insert into t1 values (PointFromWKB(POINT(4.6566128730774e-10, 2.0880974297595e-53)));
+insert into t1 values (PointFromWKB(POINT(2.0880974297595e-53, 1.8827498946116e-183)));
+insert into t1 values (PointFromWKB(POINT(1.8033161362863e-130, 9.1248812352444e+192)));
+insert into t1 values (PointFromWKB(POINT(4.7783097267365e-299, 2.2761049594727e-159)));
+insert into t1 values (PointFromWKB(POINT(1.94906280228e+289, 1.2338789709327e-178)));
+drop table t1;
CREATE TABLE t1(foo GEOMETRY NOT NULL, SPATIAL INDEX(foo) );
INSERT INTO t1(foo) VALUES (NULL);
ERROR 23000: Column 'foo' cannot be null
diff --git a/mysql-test/r/gis.result b/mysql-test/r/gis.result
index 7b4b02f3ff3..73fb9cc69e0 100644
--- a/mysql-test/r/gis.result
+++ b/mysql-test/r/gis.result
@@ -680,7 +680,7 @@ def test t1 t1 g g 255 4294967295 0 Y 144 0 63
g
select asbinary(g) from t1;
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
-def asbinary(g) 252 16777216 0 Y 128 0 63
+def asbinary(g) 252 4294967295 0 Y 128 0 63
asbinary(g)
drop table t1;
create table t1 (a TEXT, b GEOMETRY NOT NULL, SPATIAL KEY(b));
@@ -736,6 +736,44 @@ SELECT * FROM t1;
a
NULL
DROP TABLE t1;
+CREATE TABLE `t1` ( `col9` set('a'), `col89` date);
+INSERT INTO `t1` VALUES ('','0000-00-00');
+select geomfromtext(col9,col89) as a from t1;
+a
+NULL
+DROP TABLE t1;
+CREATE TABLE t1 (
+geomdata polygon NOT NULL,
+SPATIAL KEY index_geom (geomdata)
+) ENGINE=MyISAM DEFAULT CHARSET=latin2 DELAY_KEY_WRITE=1 ROW_FORMAT=FIXED;
+CREATE TABLE t2 (
+geomdata polygon NOT NULL,
+SPATIAL KEY index_geom (geomdata)
+) ENGINE=MyISAM DEFAULT CHARSET=latin2 DELAY_KEY_WRITE=1 ROW_FORMAT=FIXED;
+CREATE TABLE t3
+select
+aswkb(ws.geomdata) AS geomdatawkb
+from
+t1 ws
+union
+select
+aswkb(ws.geomdata) AS geomdatawkb
+from
+t2 ws;
+describe t3;
+Field Type Null Key Default Extra
+geomdatawkb longblob YES NULL
+drop table t1;
+drop table t2;
+drop table t3;
+create table t1(col1 geometry default null,col15 geometrycollection not
+null,spatial index(col15),index(col1(15)))engine=myisam;
+insert into t1 set col15 = GeomFromText('POINT(6 5)');
+insert into t1 set col15 = GeomFromText('POINT(6 5)');
+check table t1 extended;
+Table Op Msg_type Msg_text
+test.t1 check status OK
+drop table t1;
End of 4.1 tests
create table t1 (s1 geometry not null,s2 char(100));
create trigger t1_bu before update on t1 for each row set new.s1 = null;
@@ -889,6 +927,51 @@ drop table t1, t2;
SELECT 1;
1
1
+CREATE TABLE t1 (p POINT);
+CREATE TABLE t2 (p POINT, INDEX(p));
+INSERT INTO t1 VALUES (POINTFROMTEXT('POINT(1 2)'));
+INSERT INTO t2 VALUES (POINTFROMTEXT('POINT(1 2)'));
+SELECT COUNT(*) FROM t1 WHERE p=POINTFROMTEXT('POINT(1 2)');
+COUNT(*)
+1
+EXPLAIN
+SELECT COUNT(*) FROM t2 WHERE p=POINTFROMTEXT('POINT(1 2)');
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t2 system p NULL NULL NULL 1
+SELECT COUNT(*) FROM t2 WHERE p=POINTFROMTEXT('POINT(1 2)');
+COUNT(*)
+1
+INSERT INTO t1 VALUES (POINTFROMTEXT('POINT(1 2)'));
+INSERT INTO t2 VALUES (POINTFROMTEXT('POINT(1 2)'));
+EXPLAIN
+SELECT COUNT(*) FROM t1 WHERE p=POINTFROMTEXT('POINT(1 2)');
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 Using where
+SELECT COUNT(*) FROM t1 WHERE p=POINTFROMTEXT('POINT(1 2)');
+COUNT(*)
+2
+EXPLAIN
+SELECT COUNT(*) FROM t2 WHERE p=POINTFROMTEXT('POINT(1 2)');
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t2 ref p p 28 const 1 Using where
+SELECT COUNT(*) FROM t2 WHERE p=POINTFROMTEXT('POINT(1 2)');
+COUNT(*)
+2
+EXPLAIN
+SELECT COUNT(*) FROM t2 IGNORE INDEX(p) WHERE p=POINTFROMTEXT('POINT(1 2)');
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t2 ALL NULL NULL NULL NULL 2 Using where
+SELECT COUNT(*) FROM t2 IGNORE INDEX(p) WHERE p=POINTFROMTEXT('POINT(1 2)');
+COUNT(*)
+2
+DROP TABLE t1, t2;
+End of 5.0 tests
+create table `t1` (`col002` point)engine=myisam;
+insert into t1 values (),(),();
+select min(`col002`) from t1 union select `col002` from t1;
+min(`col002`)
+NULL
+drop table t1;
End of 5.0 tests
create table t1 (f1 tinyint(1), f2 char(1), f3 varchar(1), f4 geometry, f5 datetime);
create view v1 as select * from t1;
diff --git a/mysql-test/r/grant.result b/mysql-test/r/grant.result
index 4e25ada43a0..0df3ac6de8a 100644
--- a/mysql-test/r/grant.result
+++ b/mysql-test/r/grant.result
@@ -529,7 +529,7 @@ Db char(64) NO PRI
User char(16) NO PRI
Table_name char(64) NO PRI
Grantor char(77) NO MUL
-Timestamp timestamp NO CURRENT_TIMESTAMP
+Timestamp timestamp NO CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter','Create View','Show view','Trigger') NO
Column_priv set('Select','Insert','Update','References') NO
use test;
@@ -1194,6 +1194,7 @@ ERROR 42000: SELECT command denied to user 'mysqltest_2'@'localhost' for table '
DROP DATABASE mysqltest1;
DROP DATABASE mysqltest2;
DROP USER mysqltest_1@localhost;
+DROP USER mysqltest_2@localhost;
use test;
CREATE TABLE t1 (f1 int, f2 int);
INSERT INTO t1 VALUES(1,1), (2,2);
@@ -1213,6 +1214,7 @@ f1 f2
REVOKE UPDATE (f1) ON `test`.`t1` FROM 'mysqltest_1'@'localhost';
REVOKE SELECT ON `test`.* FROM 'mysqltest_1'@'localhost';
REVOKE ALL ON db27878.* FROM 'mysqltest_1'@'localhost';
+DROP USER mysqltest_1@localhost;
DROP DATABASE db27878;
use test;
DROP TABLE t1;
@@ -1226,3 +1228,59 @@ drop user юзер_юзер@localhost;
grant select on test.* to очень_длинный_юзер@localhost;
ERROR HY000: String 'очень_длинный_юзер' is too long for user name (should be no longer than 16)
set names default;
+create database mysqltest;
+use mysqltest;
+grant create on mysqltest.* to mysqltest@localhost;
+create table t1 (i INT);
+insert into t1 values (1);
+ERROR 42000: INSERT command denied to user 'mysqltest'@'localhost' for table 't1'
+create table t2 (i INT);
+create table t4 (i INT);
+grant select, insert on mysqltest.t2 to mysqltest@localhost;
+grant insert on mysqltest.t4 to mysqltest@localhost;
+grant create, insert on mysqltest.t5 to mysqltest@localhost;
+grant create, insert on mysqltest.t6 to mysqltest@localhost;
+flush privileges;
+insert into t2 values (1);
+create table if not exists t1 select * from t2;
+ERROR 42000: INSERT command denied to user 'mysqltest'@'localhost' for table 't1'
+create table if not exists t3 select * from t2;
+ERROR 42000: INSERT command denied to user 'mysqltest'@'localhost' for table 't3'
+create table if not exists t4 select * from t2;
+Warnings:
+Note 1050 Table 't4' already exists
+create table if not exists t5 select * from t2;
+create table t6 select * from t2;
+create table t7 select * from t2;
+ERROR 42000: INSERT command denied to user 'mysqltest'@'localhost' for table 't7'
+create table t4 select * from t2;
+ERROR 42S01: Table 't4' already exists
+create table t1 select * from t2;
+ERROR 42000: INSERT command denied to user 'mysqltest'@'localhost' for table 't1'
+drop table t1,t2,t4,t5,t6;
+revoke create on mysqltest.* from mysqltest@localhost;
+revoke select, insert on mysqltest.t2 from mysqltest@localhost;
+revoke insert on mysqltest.t4 from mysqltest@localhost;
+revoke create, insert on mysqltest.t5 from mysqltest@localhost;
+revoke create, insert on mysqltest.t6 from mysqltest@localhost;
+drop user mysqltest@localhost;
+drop database mysqltest;
+use test;
+FLUSH PRIVILEGES without procs_priv table.
+RENAME TABLE mysql.procs_priv TO mysql.procs_gone;
+FLUSH PRIVILEGES;
+ERROR 42S02: Table 'mysql.procs_priv' doesn't exist
+Assigning privileges without procs_priv table.
+CREATE DATABASE mysqltest1;
+CREATE PROCEDURE mysqltest1.test() SQL SECURITY DEFINER
+SELECT 1;
+GRANT EXECUTE ON FUNCTION mysqltest1.test TO mysqltest_1@localhost;
+ERROR 42S02: Table 'mysql.procs_priv' doesn't exist
+GRANT ALL PRIVILEGES ON test.* TO mysqltest_1@localhost;
+CALL mysqltest1.test();
+1
+1
+DROP DATABASE mysqltest1;
+RENAME TABLE mysql.procs_gone TO mysql.procs_priv;
+FLUSH PRIVILEGES;
+End of 5.1 tests
diff --git a/mysql-test/r/grant2.result b/mysql-test/r/grant2.result
index 21bad4fddcb..b94de265d0c 100644
--- a/mysql-test/r/grant2.result
+++ b/mysql-test/r/grant2.result
@@ -422,4 +422,22 @@ revoke all privileges, grant option from mysqltest_1@localhost;
revoke all privileges, grant option from mysqltest_2@localhost;
drop user mysqltest_1@localhost;
drop user mysqltest_2@localhost;
+CREATE DATABASE db1;
+USE db1;
+CREATE TABLE t1 (a INT, b INT);
+INSERT INTO t1 VALUES (1,1),(2,2);
+CREATE TABLE t2 (b INT, c INT);
+INSERT INTO t2 VALUES (1,100),(2,200);
+GRANT SELECT ON t1 TO mysqltest1@localhost;
+GRANT SELECT (b) ON t2 TO mysqltest1@localhost;
+USE db1;
+SELECT c FROM t2;
+ERROR 42000: SELECT command denied to user 'mysqltest1'@'localhost' for column 'c' in table 't2'
+SELECT * FROM t2;
+ERROR 42000: SELECT command denied to user 'mysqltest1'@'localhost' for column 'c' in table 't2'
+SELECT * FROM t1 JOIN t2 USING (b);
+ERROR 42000: SELECT command denied to user 'mysqltest1'@'localhost' for column 'c' in table 't2'
+DROP TABLE db1.t1, db1.t2;
+DROP USER mysqltest1@localhost;
+DROP DATABASE db1;
End of 5.0 tests
diff --git a/mysql-test/r/group_by.result b/mysql-test/r/group_by.result
index 2faf7832aca..268f290ddca 100644
--- a/mysql-test/r/group_by.result
+++ b/mysql-test/r/group_by.result
@@ -1064,6 +1064,71 @@ select t1.f1,t.* from t1, t1 t group by 1;
ERROR 42000: 'test.t.f1' isn't in GROUP BY
drop table t1;
SET SQL_MODE = '';
+CREATE TABLE t1(
+id INT AUTO_INCREMENT PRIMARY KEY,
+c1 INT NOT NULL,
+c2 INT NOT NULL,
+UNIQUE KEY (c2,c1));
+INSERT INTO t1(c1,c2) VALUES (5,1), (4,1), (3,5), (2,3), (1,3);
+SELECT * FROM t1 ORDER BY c1;
+id c1 c2
+5 1 3
+4 2 3
+3 3 5
+2 4 1
+1 5 1
+SELECT * FROM t1 GROUP BY id ORDER BY c1;
+id c1 c2
+5 1 3
+4 2 3
+3 3 5
+2 4 1
+1 5 1
+SELECT * FROM t1 GROUP BY id ORDER BY id DESC;
+id c1 c2
+5 1 3
+4 2 3
+3 3 5
+2 4 1
+1 5 1
+SELECT * FROM t1 GROUP BY c2 ,c1, id ORDER BY c2, c1;
+id c1 c2
+2 4 1
+1 5 1
+5 1 3
+4 2 3
+3 3 5
+SELECT * FROM t1 GROUP BY c2, c1, id ORDER BY c2 DESC, c1;
+id c1 c2
+3 3 5
+5 1 3
+4 2 3
+2 4 1
+1 5 1
+SELECT * FROM t1 GROUP BY c2, c1, id ORDER BY c2 DESC, c1 DESC;
+id c1 c2
+3 3 5
+4 2 3
+5 1 3
+1 5 1
+2 4 1
+SELECT * FROM t1 GROUP BY c2 ORDER BY c2, c1;
+id c1 c2
+1 5 1
+4 2 3
+3 3 5
+SELECT * FROM t1 GROUP BY c2 ORDER BY c2 DESC, c1;
+id c1 c2
+3 3 5
+4 2 3
+1 5 1
+SELECT * FROM t1 GROUP BY c2 ORDER BY c2 DESC, c1 DESC;
+id c1 c2
+3 3 5
+4 2 3
+1 5 1
+DROP TABLE t1;
+End of 5.0 tests
CREATE TABLE t1 (a INT, b INT,
PRIMARY KEY (a),
KEY i2(a,b));
@@ -1093,10 +1158,156 @@ id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 144
EXPLAIN SELECT a FROM t1 IGNORE INDEX FOR GROUP BY (PRIMARY,i2) GROUP BY a;
id select_type table type possible_keys key key_len ref rows Extra
-1 SIMPLE t1 index NULL PRIMARY 4 NULL 144 Using index; Using filesort
+1 SIMPLE t1 index NULL PRIMARY 4 NULL 144 Using index
EXPLAIN SELECT a FROM t1 IGNORE INDEX FOR ORDER BY (PRIMARY,i2) ORDER BY a;
id select_type table type possible_keys key key_len ref rows Extra
-1 SIMPLE t1 index NULL PRIMARY 4 NULL 144 Using index; Using filesort
+1 SIMPLE t1 index NULL PRIMARY 4 NULL 144 Using index
+SELECT a FROM t1 IGNORE INDEX FOR ORDER BY (PRIMARY,i2) ORDER BY a;
+a
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
EXPLAIN SELECT a FROM t1 IGNORE INDEX FOR ORDER BY (PRIMARY)
IGNORE INDEX FOR GROUP BY (i2) GROUP BY a;
id select_type table type possible_keys key key_len ref rows Extra
@@ -1267,3 +1478,39 @@ NULL
1
2
DROP TABLE t1;
+CREATE TABLE t1 ( a INT, b INT );
+SELECT b c, (SELECT a FROM t1 WHERE b = c)
+FROM t1;
+c (SELECT a FROM t1 WHERE b = c)
+SELECT b c, (SELECT a FROM t1 WHERE b = c)
+FROM t1
+HAVING b = 10;
+c (SELECT a FROM t1 WHERE b = c)
+SELECT MAX(b) c, (SELECT a FROM t1 WHERE b = c)
+FROM t1
+HAVING b = 10;
+ERROR 42S22: Reference 'c' not supported (reference to group function)
+SET @old_sql_mode = @@sql_mode;
+SET @@sql_mode='ONLY_FULL_GROUP_BY';
+SELECT b c, (SELECT a FROM t1 WHERE b = c)
+FROM t1;
+c (SELECT a FROM t1 WHERE b = c)
+SELECT b c, (SELECT a FROM t1 WHERE b = c)
+FROM t1
+HAVING b = 10;
+ERROR 42000: non-grouping field 'b' is used in HAVING clause
+SELECT MAX(b) c, (SELECT a FROM t1 WHERE b = c)
+FROM t1
+HAVING b = 10;
+ERROR 42S22: Reference 'c' not supported (reference to group function)
+INSERT INTO t1 VALUES (1, 1);
+SELECT b c, (SELECT a FROM t1 WHERE b = c)
+FROM t1;
+c (SELECT a FROM t1 WHERE b = c)
+1 1
+INSERT INTO t1 VALUES (2, 1);
+SELECT b c, (SELECT a FROM t1 WHERE b = c)
+FROM t1;
+ERROR 21000: Subquery returns more than 1 row
+DROP TABLE t1;
+SET @@sql_mode = @old_sql_mode;
diff --git a/mysql-test/r/group_min_max.result b/mysql-test/r/group_min_max.result
index 02b1459afd0..103a7f5515a 100644
--- a/mysql-test/r/group_min_max.result
+++ b/mysql-test/r/group_min_max.result
@@ -2299,8 +2299,7 @@ Handler_read_next 0
FLUSH STATUS;
DELETE FROM t3 WHERE (SELECT (SELECT MAX(b) FROM t1 GROUP BY a HAVING a < 2) x
FROM t1) > 10000;
-Warnings:
-Error 1242 Subquery returns more than 1 row
+ERROR 21000: Subquery returns more than 1 row
SHOW STATUS LIKE 'handler_read__e%';
Variable_name Value
Handler_read_key 8
@@ -2327,3 +2326,49 @@ a
2
4
DROP TABLE t1;
+CREATE TABLE t1 (a INT, b INT);
+INSERT INTO t1 (a, b) VALUES (1,1), (1,2), (1,3);
+INSERT INTO t1 SELECT a + 1, b FROM t1;
+INSERT INTO t1 SELECT a + 2, b FROM t1;
+EXPLAIN
+SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a DESC;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 12 Using temporary; Using filesort
+SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a DESC;
+a MIN(b) MAX(b)
+4 1 3
+3 1 3
+2 1 3
+1 1 3
+CREATE INDEX break_it ON t1 (a, b);
+EXPLAIN
+SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 range NULL break_it 10 NULL 7 Using index for group-by
+SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a;
+a MIN(b) MAX(b)
+1 1 3
+2 1 3
+3 1 3
+4 1 3
+EXPLAIN
+SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a DESC;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 range NULL break_it 10 NULL 7 Using index for group-by; Using temporary; Using filesort
+SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a DESC;
+a MIN(b) MAX(b)
+4 1 3
+3 1 3
+2 1 3
+1 1 3
+EXPLAIN
+SELECT a, MIN(b), MAX(b), AVG(b) FROM t1 GROUP BY a ORDER BY a DESC;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 index NULL break_it 10 NULL 12 Using index
+SELECT a, MIN(b), MAX(b), AVG(b) FROM t1 GROUP BY a ORDER BY a DESC;
+a MIN(b) MAX(b) AVG(b)
+4 1 3 2.0000
+3 1 3 2.0000
+2 1 3 2.0000
+1 1 3 2.0000
+DROP TABLE t1;
diff --git a/mysql-test/r/handler_innodb.result b/mysql-test/r/handler_innodb.result
index e9e5c7dbdd5..9d269f78d10 100644
--- a/mysql-test/r/handler_innodb.result
+++ b/mysql-test/r/handler_innodb.result
@@ -575,3 +575,156 @@ ERROR 42S02: Table 'test.t1' doesn't exist
handler t1 close;
handler t2 close;
drop table t2;
+drop table if exists t1;
+create temporary table t1 (a int, b char(1), key a(a), key b(a,b));
+insert into t1 values (0,"a"),(1,"b"),(2,"c"),(3,"d"),(4,"e"),
+(5,"f"),(6,"g"),(7,"h"),(8,"i"),(9,"j");
+select a,b from t1;
+a b
+0 a
+1 b
+2 c
+3 d
+4 e
+5 f
+6 g
+7 h
+8 i
+9 j
+handler t1 open as a1;
+handler a1 read a first;
+a b
+0 a
+handler a1 read a next;
+a b
+1 b
+handler a1 read a next;
+a b
+2 c
+select a,b from t1;
+ERROR HY000: Can't reopen table: 'a1'
+handler a1 read a prev;
+a b
+1 b
+handler a1 read a prev;
+a b
+0 a
+handler a1 read a=(6) where b="g";
+a b
+6 g
+handler a1 close;
+select a,b from t1;
+a b
+0 a
+1 b
+2 c
+3 d
+4 e
+5 f
+6 g
+7 h
+8 i
+9 j
+handler t1 open as a2;
+handler a2 read a first;
+a b
+0 a
+handler a2 read a last;
+a b
+9 j
+handler a2 read a prev;
+a b
+8 i
+handler a2 close;
+drop table t1;
+drop table if exists t1,t2;
+create table t1 (a int);
+handler t1 open as t1_alias;
+drop table t1;
+create table t1 (a int);
+handler t1 open as t1_alias;
+flush tables;
+drop table t1;
+create table t1 (a int);
+handler t1 open as t1_alias;
+handler t1_alias close;
+drop table t1;
+create table t1 (a int);
+handler t1 open as t1_alias;
+handler t1_alias read first;
+a
+drop table t1;
+handler t1_alias read next;
+ERROR 42S02: Unknown table 't1_alias' in HANDLER
+create table t1 (a int);
+create temporary table t2 (a int, key(a));
+handler t1 open as a1;
+handler t2 open as a2;
+handler a2 read a first;
+a
+drop table t1, t2;
+handler a2 read a next;
+ERROR 42S02: Unknown table 'a2' in HANDLER
+handler a1 close;
+ERROR 42S02: Unknown table 'a1' in HANDLER
+create table t1 (a int, key(a));
+create table t2 like t1;
+handler t1 open as a1;
+handler t2 open as a2;
+handler a1 read a first;
+a
+handler a2 read a first;
+a
+alter table t1 add b int;
+handler a1 close;
+ERROR 42S02: Unknown table 'a1' in HANDLER
+handler a2 close;
+drop table t1, t2;
+create table t1 (a int, key(a));
+handler t1 open as a1;
+handler a1 read a first;
+a
+rename table t1 to t2;
+handler a1 read a first;
+ERROR 42S02: Unknown table 'a1' in HANDLER
+drop table t2;
+create table t1 (a int, key(a));
+create table t2 like t1;
+handler t1 open as a1;
+handler t2 open as a2;
+handler a1 read a first;
+a
+handler a2 read a first;
+a
+optimize table t1;
+Table Op Msg_type Msg_text
+test.t1 optimize status OK
+handler a1 close;
+ERROR 42S02: Unknown table 'a1' in HANDLER
+handler a2 close;
+drop table t1, t2;
+create table t1 (a int, b char(1), key a(a), key b(a,b));
+insert into t1 values (0,"a"),(1,"b"),(2,"c"),(3,"d"),(4,"e"),
+(5,"f"),(6,"g"),(7,"h"),(8,"i"),(9,"j");
+handler t1 open;
+handler t1 read a first;
+a b
+0 a
+handler t1 read a next;
+a b
+1 b
+flush tables;
+handler t1 read a next;
+a b
+0 a
+handler t1 read a next;
+a b
+1 b
+flush tables with read lock;
+handler t1 read a next;
+a b
+0 a
+unlock tables;
+drop table t1;
+handler t1 read a next;
+ERROR 42S02: Unknown table 't1' in HANDLER
diff --git a/mysql-test/r/handler_myisam.result b/mysql-test/r/handler_myisam.result
index 715e5ab03d6..0b27b07c4d2 100644
--- a/mysql-test/r/handler_myisam.result
+++ b/mysql-test/r/handler_myisam.result
@@ -575,3 +575,156 @@ ERROR 42S02: Table 'test.t1' doesn't exist
handler t1 close;
handler t2 close;
drop table t2;
+drop table if exists t1;
+create temporary table t1 (a int, b char(1), key a(a), key b(a,b));
+insert into t1 values (0,"a"),(1,"b"),(2,"c"),(3,"d"),(4,"e"),
+(5,"f"),(6,"g"),(7,"h"),(8,"i"),(9,"j");
+select a,b from t1;
+a b
+0 a
+1 b
+2 c
+3 d
+4 e
+5 f
+6 g
+7 h
+8 i
+9 j
+handler t1 open as a1;
+handler a1 read a first;
+a b
+0 a
+handler a1 read a next;
+a b
+1 b
+handler a1 read a next;
+a b
+2 c
+select a,b from t1;
+ERROR HY000: Can't reopen table: 'a1'
+handler a1 read a prev;
+a b
+1 b
+handler a1 read a prev;
+a b
+0 a
+handler a1 read a=(6) where b="g";
+a b
+6 g
+handler a1 close;
+select a,b from t1;
+a b
+0 a
+1 b
+2 c
+3 d
+4 e
+5 f
+6 g
+7 h
+8 i
+9 j
+handler t1 open as a2;
+handler a2 read a first;
+a b
+0 a
+handler a2 read a last;
+a b
+9 j
+handler a2 read a prev;
+a b
+8 i
+handler a2 close;
+drop table t1;
+drop table if exists t1,t2;
+create table t1 (a int);
+handler t1 open as t1_alias;
+drop table t1;
+create table t1 (a int);
+handler t1 open as t1_alias;
+flush tables;
+drop table t1;
+create table t1 (a int);
+handler t1 open as t1_alias;
+handler t1_alias close;
+drop table t1;
+create table t1 (a int);
+handler t1 open as t1_alias;
+handler t1_alias read first;
+a
+drop table t1;
+handler t1_alias read next;
+ERROR 42S02: Unknown table 't1_alias' in HANDLER
+create table t1 (a int);
+create temporary table t2 (a int, key(a));
+handler t1 open as a1;
+handler t2 open as a2;
+handler a2 read a first;
+a
+drop table t1, t2;
+handler a2 read a next;
+ERROR 42S02: Unknown table 'a2' in HANDLER
+handler a1 close;
+ERROR 42S02: Unknown table 'a1' in HANDLER
+create table t1 (a int, key(a));
+create table t2 like t1;
+handler t1 open as a1;
+handler t2 open as a2;
+handler a1 read a first;
+a
+handler a2 read a first;
+a
+alter table t1 add b int;
+handler a1 close;
+ERROR 42S02: Unknown table 'a1' in HANDLER
+handler a2 close;
+drop table t1, t2;
+create table t1 (a int, key(a));
+handler t1 open as a1;
+handler a1 read a first;
+a
+rename table t1 to t2;
+handler a1 read a first;
+ERROR 42S02: Unknown table 'a1' in HANDLER
+drop table t2;
+create table t1 (a int, key(a));
+create table t2 like t1;
+handler t1 open as a1;
+handler t2 open as a2;
+handler a1 read a first;
+a
+handler a2 read a first;
+a
+optimize table t1;
+Table Op Msg_type Msg_text
+test.t1 optimize status Table is already up to date
+handler a1 close;
+ERROR 42S02: Unknown table 'a1' in HANDLER
+handler a2 close;
+drop table t1, t2;
+create table t1 (a int, b char(1), key a(a), key b(a,b));
+insert into t1 values (0,"a"),(1,"b"),(2,"c"),(3,"d"),(4,"e"),
+(5,"f"),(6,"g"),(7,"h"),(8,"i"),(9,"j");
+handler t1 open;
+handler t1 read a first;
+a b
+0 a
+handler t1 read a next;
+a b
+1 b
+flush tables;
+handler t1 read a next;
+a b
+0 a
+handler t1 read a next;
+a b
+1 b
+flush tables with read lock;
+handler t1 read a next;
+a b
+0 a
+unlock tables;
+drop table t1;
+handler t1 read a next;
+ERROR 42S02: Unknown table 't1' in HANDLER
diff --git a/mysql-test/r/have_community_features.require b/mysql-test/r/have_community_features.require
new file mode 100644
index 00000000000..9233bba91e1
--- /dev/null
+++ b/mysql-test/r/have_community_features.require
@@ -0,0 +1,2 @@
+Variable_name Value
+have_community_features YES
diff --git a/mysql-test/r/have_local_infile.require b/mysql-test/r/have_local_infile.require
new file mode 100644
index 00000000000..124540f7b77
--- /dev/null
+++ b/mysql-test/r/have_local_infile.require
@@ -0,0 +1,2 @@
+Variable_name Value
+local_infile ON
diff --git a/mysql-test/r/index_merge_myisam.result b/mysql-test/r/index_merge_myisam.result
index 9d7d06f7f1b..1827871861e 100644
--- a/mysql-test/r/index_merge_myisam.result
+++ b/mysql-test/r/index_merge_myisam.result
@@ -342,6 +342,8 @@ create table t4 (a int);
insert into t4 values (1),(4),(3);
set @save_join_buffer_size=@@join_buffer_size;
set join_buffer_size= 4000;
+Warnings:
+Warning 1292 Truncated incorrect join_buffer_size value: '4000'
explain select max(A.key1 + B.key1 + A.key2 + B.key2 + A.key3 + B.key3 + A.key4 + B.key4 + A.key5 + B.key5)
from t0 as A force index(i1,i2), t0 as B force index (i1,i2)
where (A.key1 < 500000 or A.key2 < 3)
diff --git a/mysql-test/r/information_schema.result b/mysql-test/r/information_schema.result
index d1120d24884..ddc0e189cd2 100644
--- a/mysql-test/r/information_schema.result
+++ b/mysql-test/r/information_schema.result
@@ -50,6 +50,7 @@ KEY_COLUMN_USAGE
PARTITIONS
PLUGINS
PROCESSLIST
+PROFILING
REFERENTIAL_CONSTRAINTS
ROUTINES
SCHEMATA
@@ -387,10 +388,14 @@ Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_par
select * from information_schema.views where TABLE_NAME like "v%";
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION
NULL test v0 select schema_name from information_schema.schemata NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
-NULL test v1 select table_name from information_schema.tables NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
-NULL test v2 select column_name from information_schema.columns NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
-NULL test v3 select CHARACTER_SET_NAME from information_schema.character_sets NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
-NULL test v4 select COLLATION_NAME from information_schema.collations NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
+NULL test v1 select table_name from information_schema.tables
+where table_name="v1" NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
+NULL test v2 select column_name from information_schema.columns
+where table_name="v2" NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
+NULL test v3 select CHARACTER_SET_NAME from information_schema.character_sets
+where CHARACTER_SET_NAME like "latin1%" NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
+NULL test v4 select COLLATION_NAME from information_schema.collations
+where COLLATION_NAME like "latin1%" NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
drop view v0, v1, v2, v3, v4;
create table t1 (a int);
grant select,update,insert on t1 to mysqltest_1@localhost;
@@ -847,7 +852,7 @@ delete from mysql.db where user='mysqltest_4';
flush privileges;
SELECT table_schema, count(*) FROM information_schema.TABLES where table_name<>'ndb_binlog_index' AND table_name<>'ndb_apply_status' GROUP BY TABLE_SCHEMA;
table_schema count(*)
-information_schema 27
+information_schema 28
mysql 22
create table t1 (i int, j int);
create trigger trg1 before insert on t1 for each row
@@ -1137,11 +1142,13 @@ DROP FUNCTION func2;
select column_type, group_concat(table_schema, '.', table_name), count(*) as num
from information_schema.columns where
table_schema='information_schema' and
-(column_type = 'varchar(7)' or column_type = 'varchar(20)')
+(column_type = 'varchar(7)' or column_type = 'varchar(20)'
+ or column_type = 'varchar(27)')
group by column_type order by num;
column_type group_concat(table_schema, '.', table_name) num
+varchar(27) information_schema.COLUMNS 1
varchar(7) information_schema.ROUTINES,information_schema.VIEWS 2
-varchar(20) information_schema.COLUMNS,information_schema.FILES,information_schema.FILES,information_schema.PLUGINS,information_schema.PLUGINS,information_schema.PLUGINS 6
+varchar(20) information_schema.FILES,information_schema.FILES,information_schema.PLUGINS,information_schema.PLUGINS,information_schema.PLUGINS,information_schema.PROFILING 6
create table t1(f1 char(1) not null, f2 char(9) not null)
default character set utf8;
select CHARACTER_MAXIMUM_LENGTH, CHARACTER_OCTET_LENGTH from
@@ -1246,6 +1253,7 @@ KEY_COLUMN_USAGE CONSTRAINT_SCHEMA
PARTITIONS TABLE_SCHEMA
PLUGINS PLUGIN_NAME
PROCESSLIST ID
+PROFILING QUERY_ID
REFERENTIAL_CONSTRAINTS CONSTRAINT_SCHEMA
ROUTINES ROUTINE_SCHEMA
SCHEMATA SCHEMA_NAME
@@ -1288,6 +1296,7 @@ KEY_COLUMN_USAGE CONSTRAINT_SCHEMA
PARTITIONS TABLE_SCHEMA
PLUGINS PLUGIN_NAME
PROCESSLIST ID
+PROFILING QUERY_ID
REFERENTIAL_CONSTRAINTS CONSTRAINT_SCHEMA
ROUTINES ROUTINE_SCHEMA
SCHEMATA SCHEMA_NAME
@@ -1381,6 +1390,7 @@ KEY_COLUMN_USAGE information_schema.KEY_COLUMN_USAGE 1
PARTITIONS information_schema.PARTITIONS 1
PLUGINS information_schema.PLUGINS 1
PROCESSLIST information_schema.PROCESSLIST 1
+PROFILING information_schema.PROFILING 1
REFERENTIAL_CONSTRAINTS information_schema.REFERENTIAL_CONSTRAINTS 1
ROUTINES information_schema.ROUTINES 1
SCHEMATA information_schema.SCHEMATA 1
@@ -1466,6 +1476,10 @@ f7 datetime NO NULL
f8 datetime YES 2006-01-01 00:00:00
drop table t1;
End of 5.0 tests.
+show fields from information_schema.table_names;
+ERROR 42S02: Unknown table 'table_names' in information_schema
+show keys from information_schema.table_names;
+ERROR 42S02: Unknown table 'table_names' in information_schema
select * from information_schema.engines WHERE ENGINE="MyISAM";
ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS
MyISAM DEFAULT Default engine as of MySQL 3.23 with great performance NO NO NO
@@ -1540,4 +1554,73 @@ count(*)
select count(*) from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='' AND TABLE_NAME='nonexisting';
count(*)
0
+CREATE VIEW v1
+AS SELECT *
+FROM INFORMATION_SCHEMA.TABLES;
+SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS where TABLE_NAME = 'v1';
+VIEW_DEFINITION
+SELECT *
+FROM INFORMATION_SCHEMA.TABLES
+DROP VIEW v1;
+SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA
+WHERE SCHEMA_NAME ='information_schema';
+SCHEMA_NAME
+information_schema
+SELECT TABLE_COLLATION FROM INFORMATION_SCHEMA.TABLES
+WHERE TABLE_SCHEMA='mysql' and TABLE_NAME= 'db';
+TABLE_COLLATION
+utf8_bin
+select * from information_schema.columns where table_schema = NULL;
+TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION COLUMN_DEFAULT IS_NULLABLE DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE CHARACTER_SET_NAME COLLATION_NAME COLUMN_TYPE COLUMN_KEY EXTRA PRIVILEGES COLUMN_COMMENT
+select * from `information_schema`.`COLUMNS` where `TABLE_NAME` = NULL;
+TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION COLUMN_DEFAULT IS_NULLABLE DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE CHARACTER_SET_NAME COLLATION_NAME COLUMN_TYPE COLUMN_KEY EXTRA PRIVILEGES COLUMN_COMMENT
+select * from `information_schema`.`KEY_COLUMN_USAGE` where `TABLE_SCHEMA` = NULL;
+CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION POSITION_IN_UNIQUE_CONSTRAINT REFERENCED_TABLE_SCHEMA REFERENCED_TABLE_NAME REFERENCED_COLUMN_NAME
+select * from `information_schema`.`KEY_COLUMN_USAGE` where `TABLE_NAME` = NULL;
+CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION POSITION_IN_UNIQUE_CONSTRAINT REFERENCED_TABLE_SCHEMA REFERENCED_TABLE_NAME REFERENCED_COLUMN_NAME
+select * from `information_schema`.`PARTITIONS` where `TABLE_SCHEMA` = NULL;
+TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
+select * from `information_schema`.`PARTITIONS` where `TABLE_NAME` = NULL;
+TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
+select * from `information_schema`.`REFERENTIAL_CONSTRAINTS` where `CONSTRAINT_SCHEMA` = NULL;
+CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME UNIQUE_CONSTRAINT_CATALOG UNIQUE_CONSTRAINT_SCHEMA UNIQUE_CONSTRAINT_NAME MATCH_OPTION UPDATE_RULE DELETE_RULE TABLE_NAME REFERENCED_TABLE_NAME
+select * from `information_schema`.`REFERENTIAL_CONSTRAINTS` where `TABLE_NAME` = NULL;
+CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME UNIQUE_CONSTRAINT_CATALOG UNIQUE_CONSTRAINT_SCHEMA UNIQUE_CONSTRAINT_NAME MATCH_OPTION UPDATE_RULE DELETE_RULE TABLE_NAME REFERENCED_TABLE_NAME
+select * from information_schema.schemata where schema_name = NULL;
+CATALOG_NAME SCHEMA_NAME DEFAULT_CHARACTER_SET_NAME DEFAULT_COLLATION_NAME SQL_PATH
+select * from `information_schema`.`STATISTICS` where `TABLE_SCHEMA` = NULL;
+TABLE_CATALOG TABLE_SCHEMA TABLE_NAME NON_UNIQUE INDEX_SCHEMA INDEX_NAME SEQ_IN_INDEX COLUMN_NAME COLLATION CARDINALITY SUB_PART PACKED NULLABLE INDEX_TYPE COMMENT
+select * from `information_schema`.`STATISTICS` where `TABLE_NAME` = NULL;
+TABLE_CATALOG TABLE_SCHEMA TABLE_NAME NON_UNIQUE INDEX_SCHEMA INDEX_NAME SEQ_IN_INDEX COLUMN_NAME COLLATION CARDINALITY SUB_PART PACKED NULLABLE INDEX_TYPE COMMENT
+select * from information_schema.tables where table_schema = NULL;
+TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE ENGINE VERSION ROW_FORMAT TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE AUTO_INCREMENT CREATE_TIME UPDATE_TIME CHECK_TIME TABLE_COLLATION CHECKSUM CREATE_OPTIONS TABLE_COMMENT
+select * from information_schema.tables where table_catalog = NULL;
+TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE ENGINE VERSION ROW_FORMAT TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE AUTO_INCREMENT CREATE_TIME UPDATE_TIME CHECK_TIME TABLE_COLLATION CHECKSUM CREATE_OPTIONS TABLE_COMMENT
+select * from information_schema.tables where table_name = NULL;
+TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE ENGINE VERSION ROW_FORMAT TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE AUTO_INCREMENT CREATE_TIME UPDATE_TIME CHECK_TIME TABLE_COLLATION CHECKSUM CREATE_OPTIONS TABLE_COMMENT
+select * from `information_schema`.`TABLE_CONSTRAINTS` where `TABLE_SCHEMA` = NULL;
+CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_SCHEMA TABLE_NAME CONSTRAINT_TYPE
+select * from `information_schema`.`TABLE_CONSTRAINTS` where `TABLE_NAME` = NULL;
+CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_SCHEMA TABLE_NAME CONSTRAINT_TYPE
+select * from `information_schema`.`TRIGGERS` where `EVENT_OBJECT_SCHEMA` = NULL;
+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
+select * from `information_schema`.`TRIGGERS` where `EVENT_OBJECT_TABLE` = NULL;
+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
+select * from `information_schema`.`VIEWS` where `TABLE_SCHEMA` = NULL;
+TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION
+select * from `information_schema`.`VIEWS` where `TABLE_NAME` = NULL;
+TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION
+explain extended select 1 from information_schema.tables;
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE tables ALL NULL NULL NULL NULL NULL NULL Skip_open_table; Scanned all databases
+Warnings:
+Note 1003 select 1 AS `1` from `information_schema`.`tables`
+use information_schema;
+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
+show events from information_schema;
+Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator character_set_client collation_connection Database Collation
+show events where Db= 'information_schema';
+Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator character_set_client collation_connection Database Collation
+use test;
End of 5.1 tests.
diff --git a/mysql-test/r/information_schema_db.result b/mysql-test/r/information_schema_db.result
index 51f7694ab68..cb56fb3d5cc 100644
--- a/mysql-test/r/information_schema_db.result
+++ b/mysql-test/r/information_schema_db.result
@@ -19,6 +19,7 @@ KEY_COLUMN_USAGE
PARTITIONS
PLUGINS
PROCESSLIST
+PROFILING
REFERENTIAL_CONSTRAINTS
ROUTINES
SCHEMATA
@@ -141,7 +142,7 @@ Warnings:
Warning 1356 View 'testdb_1.v7' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
show fields from testdb_1.v7;
Field Type Null Key Default Extra
-f1 null YES NULL
+f1 char(4) YES NULL
Warnings:
Note 1449 There is no 'no_such_user'@'no_such_host' registered
create table t3 (f1 char(4), f2 char(4));
@@ -161,7 +162,7 @@ View Create View character_set_client collation_connection
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` latin1 latin1_swedish_ci
show fields from testdb_1.v7;
Field Type Null Key Default Extra
-f1 null YES NULL
+f1 char(4) YES NULL
Warnings:
Note 1449 There is no 'no_such_user'@'no_such_host' registered
show create view testdb_1.v7;
@@ -189,7 +190,7 @@ show create view v4;
ERROR HY000: EXPLAIN/SHOW can not be issued; lacking privileges for underlying table
show fields from v4;
Field Type Null Key Default Extra
-f1 null YES NULL
+f1 char(4) YES NULL
f2 char(4) YES NULL
show fields from v2;
Field Type Null Key Default Extra
diff --git a/mysql-test/r/innodb-semi-consistent.result b/mysql-test/r/innodb-semi-consistent.result
new file mode 100644
index 00000000000..f1139390f20
--- /dev/null
+++ b/mysql-test/r/innodb-semi-consistent.result
@@ -0,0 +1,37 @@
+drop table if exists t1;
+set session transaction isolation level read committed;
+create table t1(a int not null) engine=innodb DEFAULT CHARSET=latin1;
+insert into t1 values (1),(2),(3),(4),(5),(6),(7);
+set autocommit=0;
+select * from t1 where a=3 lock in share mode;
+a
+3
+set session transaction isolation level read committed;
+set autocommit=0;
+update t1 set a=10 where a=5;
+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
+commit;
+update t1 set a=10 where a=5;
+select * from t1 where a=2 for update;
+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
+select * from t1 where a=2 limit 1 for update;
+a
+2
+update t1 set a=11 where a=6;
+update t1 set a=12 where a=2;
+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
+update t1 set a=13 where a=1;
+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
+commit;
+update t1 set a=14 where a=1;
+commit;
+select * from t1;
+a
+14
+2
+3
+4
+10
+11
+7
+drop table t1;
diff --git a/mysql-test/r/innodb-ucs2.result b/mysql-test/r/innodb-ucs2.result
index a1c73c912b2..b6bff7d5f42 100644
--- a/mysql-test/r/innodb-ucs2.result
+++ b/mysql-test/r/innodb-ucs2.result
@@ -1,3 +1,4 @@
+drop table if exists t1, t2;
create table t1 (
a int, b char(10), c char(10), filler char(10), primary key(a, b(2)), unique key (a, c(2))
) character set utf8 engine = innodb;
diff --git a/mysql-test/r/innodb.result b/mysql-test/r/innodb.result
index d0b67e90afb..0a2cb61b18d 100644
--- a/mysql-test/r/innodb.result
+++ b/mysql-test/r/innodb.result
@@ -472,43 +472,6 @@ a b
3 3
drop table t1,t2;
CREATE TABLE t1 (
-id int(11) NOT NULL auto_increment,
-ggid varchar(32) binary DEFAULT '' NOT NULL,
-email varchar(64) DEFAULT '' NOT NULL,
-passwd varchar(32) binary DEFAULT '' NOT NULL,
-PRIMARY KEY (id),
-UNIQUE ggid (ggid)
-) ENGINE=innodb;
-insert into t1 (ggid,passwd) values ('test1','xxx');
-insert into t1 (ggid,passwd) values ('test2','yyy');
-insert into t1 (ggid,passwd) values ('test2','this will fail');
-ERROR 23000: Duplicate entry 'test2' for key 'ggid'
-insert into t1 (ggid,id) values ('this will fail',1);
-ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
-select * from t1 where ggid='test1';
-id ggid email passwd
-1 test1 xxx
-select * from t1 where passwd='xxx';
-id ggid email passwd
-1 test1 xxx
-select * from t1 where id=2;
-id ggid email passwd
-2 test2 yyy
-replace into t1 (ggid,id) values ('this will work',1);
-replace into t1 (ggid,passwd) values ('test2','this will work');
-update t1 set id=100,ggid='test2' where id=1;
-ERROR 23000: Duplicate entry 'test2' for key 'ggid'
-select * from t1;
-id ggid email passwd
-1 this will work
-4 test2 this will work
-select * from t1 where id=1;
-id ggid email passwd
-1 this will work
-select * from t1 where id=999;
-id ggid email passwd
-drop table t1;
-CREATE TABLE t1 (
user_name varchar(12),
password text,
subscribed char(1),
@@ -962,7 +925,7 @@ id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 index NULL b 4 NULL # Using index
explain select a,b from t1;
id select_type table type possible_keys key key_len ref rows Extra
-1 SIMPLE t1 index NULL b 4 NULL # Using index
+1 SIMPLE t1 index NULL PRIMARY 4 NULL #
explain select a,b,c from t1;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL #
@@ -1086,6 +1049,19 @@ n d
1 30
2 20
drop table t1,t2;
+drop table if exists t1, t2;
+CREATE TABLE t1 (a int, PRIMARY KEY (a));
+CREATE TABLE t2 (a int, PRIMARY KEY (a)) ENGINE=InnoDB;
+create trigger trg_del_t2 after delete on t2 for each row
+insert into t1 values (1);
+insert into t1 values (1);
+insert into t2 values (1),(2);
+delete t2 from t2;
+ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
+select count(*) from t2 /* must be 2 as restored after rollback caused by the error */;
+count(*)
+2
+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
@@ -1177,14 +1153,14 @@ UPDATE t1 set a=a+100 where b between 2 and 3 and a < 1000;
SELECT * from t1;
a b
1 1
-102 2
-103 3
4 4
5 5
6 6
7 7
8 8
9 9
+102 2
+103 3
drop table t1;
CREATE TABLE t1 (a int not null primary key, b int not null, key (b)) engine=innodb;
CREATE TABLE t2 (a int not null primary key, b int not null, key (b)) engine=innodb;
@@ -1208,7 +1184,6 @@ a b
update t1,t2 set t1.a=t1.a+100 where t1.a=101;
select * from t1;
a b
-201 1
102 2
103 3
104 4
@@ -1220,10 +1195,11 @@ a b
110 10
111 11
112 12
+201 1
update t1,t2 set t1.b=t1.b+10 where t1.b=2;
select * from t1;
a b
-201 1
+102 12
103 3
104 4
105 5
@@ -1233,34 +1209,34 @@ a b
109 9
110 10
111 11
-102 12
112 12
+201 1
update t1,t2 set t1.b=t1.b+2,t2.b=t1.b+10 where t1.b between 3 and 5 and t1.a=t2.a+100;
select * from t1;
a b
-201 1
+102 12
103 5
104 6
-106 6
105 7
+106 6
107 7
108 8
109 9
110 10
111 11
-102 12
112 12
+201 1
select * from t2;
a b
1 1
2 2
+3 13
+4 14
+5 15
6 6
7 7
8 8
9 9
-3 13
-4 14
-5 15
drop table t1,t2;
CREATE TABLE t2 ( NEXT_T BIGINT NOT NULL PRIMARY KEY) ENGINE=MyISAM;
CREATE TABLE t1 ( B_ID INTEGER NOT NULL PRIMARY KEY) ENGINE=InnoDB;
@@ -1311,11 +1287,11 @@ insert into t1 (id) values (null),(null),(null),(null),(null);
update t1 set fk=69 where fk is null order by id limit 1;
SELECT * from t1;
id fk
+1 69
2 NULL
3 NULL
4 NULL
5 NULL
-1 69
drop table t1;
create table t1 (a int not null, b int not null, key (a));
insert into t1 values (1,1),(1,2),(1,3),(3,1),(3,2),(3,3),(3,1),(3,2),(3,3),(2,1),(2,2),(2,3);
@@ -1754,10 +1730,10 @@ Variable_name Value
Innodb_rows_deleted 70
show status like "Innodb_rows_inserted";
Variable_name Value
-Innodb_rows_inserted 1083
+Innodb_rows_inserted 1082
show status like "Innodb_rows_updated";
Variable_name Value
-Innodb_rows_updated 886
+Innodb_rows_updated 885
show status like "Innodb_row_lock_waits";
Variable_name Value
Innodb_row_lock_waits 0
@@ -1792,6 +1768,8 @@ show variables like "innodb_thread_concurrency";
Variable_name Value
innodb_thread_concurrency 8
set global innodb_thread_concurrency=1001;
+Warnings:
+Warning 1292 Truncated incorrect thread_concurrency value: '1001'
show variables like "innodb_thread_concurrency";
Variable_name Value
innodb_thread_concurrency 1000
@@ -1811,6 +1789,8 @@ show variables like "innodb_concurrency_tickets";
Variable_name Value
innodb_concurrency_tickets 1000
set global innodb_concurrency_tickets=0;
+Warnings:
+Warning 1292 Truncated incorrect concurrency_tickets value: '0'
show variables like "innodb_concurrency_tickets";
Variable_name Value
innodb_concurrency_tickets 1
@@ -2444,8 +2424,8 @@ insert into t1 (b) values (1);
replace into t1 (b) values (2), (1), (3);
select * from t1;
a b
-3 1
2 2
+3 1
4 3
truncate table t1;
insert into t1 (b) values (1);
@@ -2454,8 +2434,8 @@ replace into t1 (b) values (1);
replace into t1 (b) values (3);
select * from t1;
a b
-3 1
2 2
+3 1
4 3
drop table t1;
create table t1 (rowid int not null auto_increment, val int not null,primary
@@ -3189,3 +3169,65 @@ c25 CHAR(255), c26 CHAR(255), c27 CHAR(255), c28 CHAR(255),
c29 CHAR(255), c30 CHAR(255), c31 CHAR(255), c32 CHAR(255)
) ENGINE = InnoDB;
ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. You have to change some columns to TEXT or BLOBs
+DROP TABLE IF EXISTS t1;
+Warnings:
+Note 1051 Unknown table 't1'
+CREATE TABLE t1(
+id BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY
+) ENGINE=InnoDB;
+INSERT INTO t1 VALUES(-10);
+SELECT * FROM t1;
+id
+-10
+INSERT INTO t1 VALUES(NULL);
+SELECT * FROM t1;
+id
+-10
+1
+DROP TABLE t1;
+SET TX_ISOLATION='read-committed';
+SET AUTOCOMMIT=0;
+DROP TABLE IF EXISTS t1, t2;
+Warnings:
+Note 1051 Unknown table 't1'
+Note 1051 Unknown table 't2'
+CREATE TABLE t1 ( a int ) ENGINE=InnoDB;
+CREATE TABLE t2 LIKE t1;
+SELECT * FROM t2;
+a
+SET TX_ISOLATION='read-committed';
+SET AUTOCOMMIT=0;
+INSERT INTO t1 VALUES (1);
+COMMIT;
+SELECT * FROM t1 WHERE a=1;
+a
+1
+SET TX_ISOLATION='read-committed';
+SET AUTOCOMMIT=0;
+SELECT * FROM t2;
+a
+SET TX_ISOLATION='read-committed';
+SET AUTOCOMMIT=0;
+INSERT INTO t1 VALUES (2);
+COMMIT;
+SELECT * FROM t1 WHERE a=2;
+a
+2
+SELECT * FROM t1 WHERE a=2;
+a
+2
+DROP TABLE t1;
+DROP TABLE t2;
+create table t1 (i int, j int) engine=innodb;
+insert into t1 (i, j) values (1, 1), (2, 2);
+update t1 set j = 2;
+affected rows: 1
+info: Rows matched: 2 Changed: 1 Warnings: 0
+drop table t1;
+create table t1 (id int) comment='this is a comment' engine=innodb;
+select table_comment, data_free > 0 as data_free_is_set
+from information_schema.tables
+where table_schema='test' and table_name = 't1';
+table_comment data_free_is_set
+this is a comment 1
+drop table t1;
diff --git a/mysql-test/r/innodb_autoinc_lock_mode_zero.result b/mysql-test/r/innodb_autoinc_lock_mode_zero.result
new file mode 100644
index 00000000000..3d016684338
--- /dev/null
+++ b/mysql-test/r/innodb_autoinc_lock_mode_zero.result
@@ -0,0 +1,39 @@
+drop table if exists t1;
+CREATE TABLE t1 (
+id int(11) NOT NULL auto_increment,
+ggid varchar(32) binary DEFAULT '' NOT NULL,
+email varchar(64) DEFAULT '' NOT NULL,
+passwd varchar(32) binary DEFAULT '' NOT NULL,
+PRIMARY KEY (id),
+UNIQUE ggid (ggid)
+) ENGINE=innodb;
+insert into t1 (ggid,passwd) values ('test1','xxx');
+insert into t1 (ggid,passwd) values ('test2','yyy');
+insert into t1 (ggid,passwd) values ('test2','this will fail');
+ERROR 23000: Duplicate entry 'test2' for key 'ggid'
+insert into t1 (ggid,id) values ('this will fail',1);
+ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
+select * from t1 where ggid='test1';
+id ggid email passwd
+1 test1 xxx
+select * from t1 where passwd='xxx';
+id ggid email passwd
+1 test1 xxx
+select * from t1 where id=2;
+id ggid email passwd
+2 test2 yyy
+replace into t1 (ggid,id) values ('this will work',1);
+replace into t1 (ggid,passwd) values ('test2','this will work');
+update t1 set id=100,ggid='test2' where id=1;
+ERROR 23000: Duplicate entry 'test2' for key 'ggid'
+select * from t1;
+id ggid email passwd
+1 this will work
+3 test2 this will work
+select * from t1 where id=1;
+id ggid email passwd
+1 this will work
+select * from t1 where id=999;
+id ggid email passwd
+drop table t1;
+End of tests
diff --git a/mysql-test/r/innodb_gis.result b/mysql-test/r/innodb_gis.result
index 7f54a78087b..ef8bdcc5f3e 100644
--- a/mysql-test/r/innodb_gis.result
+++ b/mysql-test/r/innodb_gis.result
@@ -546,5 +546,44 @@ Overlaps(@horiz1, @point2)
0
DROP TABLE t1;
End of 5.0 tests
+CREATE TABLE t1 (p POINT);
+CREATE TABLE t2 (p POINT, INDEX(p));
+INSERT INTO t1 VALUES (POINTFROMTEXT('POINT(1 2)'));
+INSERT INTO t2 VALUES (POINTFROMTEXT('POINT(1 2)'));
+SELECT COUNT(*) FROM t1 WHERE p=POINTFROMTEXT('POINT(1 2)');
+COUNT(*)
+1
+EXPLAIN
+SELECT COUNT(*) FROM t2 WHERE p=POINTFROMTEXT('POINT(1 2)');
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t2 ref p p 28 const 1 Using where
+SELECT COUNT(*) FROM t2 WHERE p=POINTFROMTEXT('POINT(1 2)');
+COUNT(*)
+1
+INSERT INTO t1 VALUES (POINTFROMTEXT('POINT(1 2)'));
+INSERT INTO t2 VALUES (POINTFROMTEXT('POINT(1 2)'));
+EXPLAIN
+SELECT COUNT(*) FROM t1 WHERE p=POINTFROMTEXT('POINT(1 2)');
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 Using where
+SELECT COUNT(*) FROM t1 WHERE p=POINTFROMTEXT('POINT(1 2)');
+COUNT(*)
+2
+EXPLAIN
+SELECT COUNT(*) FROM t2 WHERE p=POINTFROMTEXT('POINT(1 2)');
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t2 ref p p 28 const 1 Using where
+SELECT COUNT(*) FROM t2 WHERE p=POINTFROMTEXT('POINT(1 2)');
+COUNT(*)
+2
+EXPLAIN
+SELECT COUNT(*) FROM t2 IGNORE INDEX(p) WHERE p=POINTFROMTEXT('POINT(1 2)');
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t2 ALL NULL NULL NULL NULL 2 Using where
+SELECT COUNT(*) FROM t2 IGNORE INDEX(p) WHERE p=POINTFROMTEXT('POINT(1 2)');
+COUNT(*)
+2
+DROP TABLE t1, t2;
+End of 5.0 tests
create table t1 (g geometry not null, spatial gk(g)) engine=innodb;
ERROR HY000: The used table type doesn't support SPATIAL indexes
diff --git a/mysql-test/r/innodb_mysql.result b/mysql-test/r/innodb_mysql.result
index 3a6758b38f4..e9f00a667c0 100644
--- a/mysql-test/r/innodb_mysql.result
+++ b/mysql-test/r/innodb_mysql.result
@@ -1,5 +1,8 @@
+set global innodb_support_xa=default;
+set session innodb_support_xa=default;
SET SESSION STORAGE_ENGINE = InnoDB;
drop table if exists t1,t2,t3,t1m,t1i,t2m,t2i,t4;
+drop procedure if exists p1;
create table t1 (
c_id int(11) not null default '0',
org_id int(11) default null,
@@ -352,13 +355,13 @@ EXPLAIN
SELECT COUNT(*) FROM t2 LEFT JOIN t1 ON t2.fkey = t1.id
WHERE t1.name LIKE 'A%';
id select_type table type possible_keys key key_len ref rows Extra
-1 SIMPLE t1 index PRIMARY,name name 23 NULL 3 Using where; Using index
+1 SIMPLE t1 index PRIMARY,name PRIMARY 4 NULL 3 Using where
1 SIMPLE t2 ref fkey fkey 5 test.t1.id 1 Using where; Using index
EXPLAIN
SELECT COUNT(*) FROM t2 LEFT JOIN t1 ON t2.fkey = t1.id
WHERE t1.name LIKE 'A%' OR FALSE;
id select_type table type possible_keys key key_len ref rows Extra
-1 SIMPLE t2 index NULL fkey 5 NULL 5 Using index
+1 SIMPLE t2 index NULL PRIMARY 4 NULL 5
1 SIMPLE t1 eq_ref PRIMARY PRIMARY 4 test.t2.fkey 1 Using where
DROP TABLE t1,t2;
CREATE TABLE t1 (
@@ -388,6 +391,7 @@ id select_type table type possible_keys key key_len ref rows Extra
SELECT DISTINCT t1.name, t1.dept FROM t1 WHERE t1.name='rs5';
name dept
DROP TABLE t1;
+drop table if exists t1;
show variables like 'innodb_rollback_on_timeout';
Variable_name Value
innodb_rollback_on_timeout OFF
@@ -450,6 +454,7 @@ tes 1234
drop table test;
set global query_cache_type=@save_qcache_type;
set global query_cache_size=@save_qcache_size;
+drop table if exists t1;
show variables like 'innodb_rollback_on_timeout';
Variable_name Value
innodb_rollback_on_timeout OFF
@@ -672,6 +677,8 @@ INSERT INTO t1(b,c) SELECT b,c FROM t2;
UPDATE t2 SET c='2007-01-03';
INSERT INTO t1(b,c) SELECT b,c FROM t2;
set @@sort_buffer_size=8192;
+Warnings:
+Warning 1292 Truncated incorrect sort_buffer_size value: '8192'
SELECT COUNT(*) FROM t1;
COUNT(*)
3072
@@ -774,6 +781,7 @@ EXPLAIN SELECT SQL_BIG_RESULT b, SUM(c) FROM t1 GROUP BY b;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 128 Using filesort
DROP TABLE t1;
+drop table if exists t1;
show variables like 'innodb_rollback_on_timeout';
Variable_name Value
innodb_rollback_on_timeout OFF
@@ -1260,11 +1268,11 @@ select_type SIMPLE
table t1
type index
possible_keys NULL
-key b
-key_len 5
+key PRIMARY
+key_len 4
ref NULL
rows 3
-Extra Using index; Using filesort
+Extra Using filesort
SELECT * FROM t1 ORDER BY b ASC, a DESC;
a b
1 1
@@ -1276,17 +1284,78 @@ select_type SIMPLE
table t1
type index
possible_keys NULL
-key b
-key_len 5
+key PRIMARY
+key_len 4
ref NULL
rows 3
-Extra Using index; Using filesort
+Extra Using filesort
SELECT * FROM t1 ORDER BY b DESC, a ASC;
a b
2 2
3 2
1 1
DROP TABLE t1;
+
+#
+# Bug#27610: ALTER TABLE ROW_FORMAT=... does not rebuild the table.
+#
+
+# - prepare;
+
+DROP TABLE IF EXISTS t1;
+
+CREATE TABLE t1(c INT)
+ENGINE = InnoDB
+ROW_FORMAT = COMPACT;
+
+# - initial check;
+
+SELECT table_schema, table_name, row_format
+FROM INFORMATION_SCHEMA.TABLES
+WHERE table_schema = DATABASE() AND table_name = 't1';
+table_schema table_name row_format
+test t1 Compact
+
+# - change ROW_FORMAT and check;
+
+ALTER TABLE t1 ROW_FORMAT = REDUNDANT;
+
+SELECT table_schema, table_name, row_format
+FROM INFORMATION_SCHEMA.TABLES
+WHERE table_schema = DATABASE() AND table_name = 't1';
+table_schema table_name row_format
+test t1 Redundant
+
+# - that's it, cleanup.
+
+DROP TABLE t1;
+create table t1(a char(10) not null, unique key aa(a(1)),
+b char(4) not null, unique key bb(b(4))) engine=innodb;
+desc t1;
+Field Type Null Key Default Extra
+a char(10) NO UNI NULL
+b char(4) NO PRI NULL
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` char(10) NOT NULL,
+ `b` char(4) NOT NULL,
+ UNIQUE KEY `bb` (`b`),
+ UNIQUE KEY `aa` (`a`(1))
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+drop table t1;
+CREATE TABLE t1 (id int, type char(6), d int, INDEX idx(id,d)) ENGINE=InnoDB;
+INSERT INTO t1 VALUES
+(191, 'member', 1), (NULL, 'member', 3), (NULL, 'member', 4), (201, 'member', 2);
+EXPLAIN SELECT * FROM t1 WHERE id=191 OR id IS NULL ORDER BY d;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ALL idx NULL NULL NULL 4 Using where; Using filesort
+SELECT * FROM t1 WHERE id=191 OR id IS NULL ORDER BY d;
+id type d
+191 member 1
+NULL member 3
+NULL member 4
+DROP TABLE t1;
End of 5.0 tests
CREATE TABLE `t2` (
`k` int(11) NOT NULL auto_increment,
@@ -1419,6 +1488,86 @@ select if(@a=@b,"ok","wrong");
if(@a=@b,"ok","wrong")
ok
drop table t1;
+SET SESSION AUTOCOMMIT = 0;
+SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
+# Switch to connection con1
+CREATE TABLE t1 (a INT PRIMARY KEY, b VARCHAR(256))
+ENGINE = InnoDB;
+INSERT INTO t1 VALUES (1,2);
+# 1. test for locking:
+BEGIN;
+UPDATE t1 SET b = 12 WHERE a = 1;
+affected rows: 1
+info: Rows matched: 1 Changed: 1 Warnings: 0
+SELECT * FROM t1;
+a b
+1 12
+# Switch to connection con2
+UPDATE t1 SET b = 21 WHERE a = 1;
+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
+# Switch to connection con1
+SELECT * FROM t1;
+a b
+1 12
+ROLLBACK;
+# 2. test for serialized update:
+CREATE TABLE t2 (a INT);
+TRUNCATE t1;
+INSERT INTO t1 VALUES (1,'init');
+CREATE PROCEDURE p1()
+BEGIN
+UPDATE t1 SET b = CONCAT(b, '+con2') WHERE a = 1;
+INSERT INTO t2 VALUES ();
+END|
+BEGIN;
+UPDATE t1 SET b = CONCAT(b, '+con1') WHERE a = 1;
+affected rows: 1
+info: Rows matched: 1 Changed: 1 Warnings: 0
+SELECT * FROM t1;
+a b
+1 init+con1
+# Switch to connection con2
+CALL p1;;
+# Switch to connection con1
+SELECT * FROM t1;
+a b
+1 init+con1
+COMMIT;
+SELECT * FROM t1;
+a b
+1 init+con1
+# Switch to connection con2
+SELECT * FROM t1;
+a b
+1 init+con1+con2
+# Switch to connection con1
+# 3. test for updated key column:
+TRUNCATE t1;
+TRUNCATE t2;
+INSERT INTO t1 VALUES (1,'init');
+BEGIN;
+UPDATE t1 SET a = 2, b = CONCAT(b, '+con1') WHERE a = 1;
+affected rows: 1
+info: Rows matched: 1 Changed: 1 Warnings: 0
+SELECT * FROM t1;
+a b
+2 init+con1
+# Switch to connection con2
+CALL p1;;
+# Switch to connection con1
+SELECT * FROM t1;
+a b
+2 init+con1
+COMMIT;
+SELECT * FROM t1;
+a b
+2 init+con1
+# Switch to connection con2
+SELECT * FROM t1;
+a b
+2 init+con1
+DROP PROCEDURE p1;
+DROP TABLE t1, t2;
CREATE TABLE t1 (a INT NOT NULL, b INT NOT NULL, PRIMARY KEY (a,b)) engine=innodb;
CREATE TABLE t2 (c INT NOT NULL, d INT NOT NULL, PRIMARY KEY (c,d),
CONSTRAINT c2 FOREIGN KEY f2 (c) REFERENCES t1 (a,b) ON UPDATE NO ACTION) engine=innodb;
@@ -1455,4 +1604,34 @@ t2 CREATE TABLE `t2` (
) ENGINE=InnoDB DEFAULT CHARSET=latin1
DROP TABLE t2;
DROP TABLE t1;
+create table t1 (a int auto_increment primary key) engine=innodb;
+alter table t1 order by a;
+Warnings:
+Warning 1105 ORDER BY ignored as there is a user-defined clustered index in the table 't1'
+drop table t1;
+CREATE TABLE t1
+(vid integer NOT NULL,
+tid integer NOT NULL,
+idx integer NOT NULL,
+name varchar(128) NOT NULL,
+type varchar(128) NULL,
+PRIMARY KEY(idx, vid, tid),
+UNIQUE(vid, tid, name)
+) ENGINE=InnoDB;
+INSERT INTO t1 VALUES
+(1,1,1,'pk',NULL),(2,1,1,'pk',NULL),(3,1,1,'pk',NULL),(4,1,1,'c1',NULL),
+(5,1,1,'pk',NULL),(1,1,2,'c1',NULL),(2,1,2,'c1',NULL),(3,1,2,'c1',NULL),
+(4,1,2,'c2',NULL),(5,1,2,'c1',NULL),(2,1,3,'c2',NULL),(3,1,3,'c2',NULL),
+(4,1,3,'pk',NULL),(5,1,3,'c2',NULL),
+(2,1,4,'c_extra',NULL),(3,1,4,'c_extra',NULL);
+EXPLAIN SELECT * FROM t1 WHERE tid = 1 AND vid = 3 ORDER BY idx DESC;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 index vid PRIMARY 12 NULL 16 Using where
+SELECT * FROM t1 WHERE tid = 1 AND vid = 3 ORDER BY idx DESC;
+vid tid idx name type
+3 1 4 c_extra NULL
+3 1 3 c2 NULL
+3 1 2 c1 NULL
+3 1 1 pk NULL
+DROP TABLE t1;
End of 5.1 tests
diff --git a/mysql-test/r/innodb_timeout_rollback.result b/mysql-test/r/innodb_timeout_rollback.result
index b25a2bbd815..e2da6ba8af7 100644
--- a/mysql-test/r/innodb_timeout_rollback.result
+++ b/mysql-test/r/innodb_timeout_rollback.result
@@ -1,3 +1,4 @@
+drop table if exists t1;
show variables like 'innodb_rollback_on_timeout';
Variable_name Value
innodb_rollback_on_timeout ON
diff --git a/mysql-test/r/insert.result b/mysql-test/r/insert.result
index a884b51eada..919aff4bfb7 100644
--- a/mysql-test/r/insert.result
+++ b/mysql-test/r/insert.result
@@ -499,6 +499,126 @@ i
2
2
DROP TABLE t1, t2;
+CREATE TABLE t1 (
+a char(20) NOT NULL,
+b char(7) DEFAULT NULL,
+c char(4) DEFAULT NULL
+);
+INSERT INTO t1(a,b,c) VALUES (9.999999e+0, 9.999999e+0, 9.999e+0);
+INSERT INTO t1(a,b,c) VALUES (1.225e-05, 1.225e-05, 1.225e-05);
+Warnings:
+Warning 1265 Data truncated for column 'c' at row 1
+INSERT INTO t1(a,b) VALUES (1.225e-04, 1.225e-04);
+INSERT INTO t1(a,b) VALUES (1.225e-01, 1.225e-01);
+INSERT INTO t1(a,b) VALUES (1.225877e-01, 1.225877e-01);
+INSERT INTO t1(a,b) VALUES (1.225e+01, 1.225e+01);
+INSERT INTO t1(a,b,c) VALUES (1.225e+01, 1.225e+01, 1.225e+01);
+INSERT INTO t1(a,b) VALUES (1.225e+05, 1.225e+05);
+INSERT INTO t1(a,b) VALUES (1.225e+10, 1.225e+10);
+INSERT INTO t1(a,b) VALUES (1.225e+15, 1.225e+15);
+INSERT INTO t1(a,b) VALUES (5000000e+0, 5000000e+0);
+INSERT INTO t1(a,b) VALUES (1.25e+78, 1.25e+78);
+INSERT INTO t1(a,b) VALUES (1.25e-94, 1.25e-94);
+INSERT INTO t1(a,b) VALUES (1.25e+203, 1.25e+203);
+INSERT INTO t1(a,b) VALUES (1.25e-175, 1.25e-175);
+INSERT INTO t1(a,c) VALUES (1.225e+0, 1.225e+0);
+INSERT INTO t1(a,c) VALUES (1.37e+0, 1.37e+0);
+INSERT INTO t1(a,c) VALUES (-1.37e+0, -1.37e+0);
+Warnings:
+Warning 1265 Data truncated for column 'c' at row 1
+INSERT INTO t1(a,c) VALUES (1.87e-3, 1.87e-3);
+Warnings:
+Warning 1265 Data truncated for column 'c' at row 1
+INSERT INTO t1(a,c) VALUES (-1.87e-2, -1.87e-2);
+Warnings:
+Warning 1265 Data truncated for column 'c' at row 1
+INSERT INTO t1(a,c) VALUES (5000e+0, 5000e+0);
+INSERT INTO t1(a,c) VALUES (-5000e+0, -5000e+0);
+Warnings:
+Warning 1265 Data truncated for column 'c' at row 1
+SELECT * FROM t1;
+a b c
+9.999999 10 10
+1.225e-05 1.2e-05 1e-0
+0.0001225 0.00012 NULL
+0.1225 0.1225 NULL
+0.1225877 0.12259 NULL
+12.25 12.25 NULL
+12.25 12.25 12.2
+122500 122500 NULL
+12250000000 1.2e+10 NULL
+1.225e+15 1.2e+15 NULL
+5000000 5000000 NULL
+1.25e+78 1.2e+78 NULL
+1.25e-94 1.2e-94 NULL
+1.25e+203 1e+203 NULL
+1.25e-175 1e-175 NULL
+1.225 NULL 1.23
+1.37 NULL 1.37
+-1.37 NULL -1.3
+0.00187 NULL 0.00
+-0.0187 NULL -0.0
+5000 NULL 5000
+-5000 NULL -500
+DROP TABLE t1;
+CREATE TABLE t1 (
+a char(20) NOT NULL,
+b char(7) DEFAULT NULL,
+c char(5)
+);
+INSERT INTO t1(a,b,c) VALUES (9.999999e+0, 9.999999e+0, 9.999e+0);
+INSERT INTO t1(a,b,c) VALUES (1.225e-05, 1.225e-05, 1.225e-05);
+INSERT INTO t1(a,b) VALUES (1.225e-04, 1.225e-04);
+INSERT INTO t1(a,b) VALUES (1.225e-01, 1.225e-01);
+INSERT INTO t1(a,b) VALUES (1.225877e-01, 1.225877e-01);
+INSERT INTO t1(a,b) VALUES (1.225e+01, 1.225e+01);
+INSERT INTO t1(a,b,c) VALUES (1.225e+01, 1.225e+01, 1.225e+01);
+INSERT INTO t1(a,b) VALUES (1.225e+05, 1.225e+05);
+INSERT INTO t1(a,b) VALUES (1.225e+10, 1.225e+10);
+INSERT INTO t1(a,b) VALUES (1.225e+15, 1.225e+15);
+INSERT INTO t1(a,b) VALUES (5000000e+0, 5000000e+0);
+INSERT INTO t1(a,b) VALUES (1.25e+78, 1.25e+78);
+INSERT INTO t1(a,b) VALUES (1.25e-94, 1.25e-94);
+INSERT INTO t1(a,b) VALUES (1.25e+203, 1.25e+203);
+INSERT INTO t1(a,b) VALUES (1.25e-175, 1.25e-175);
+INSERT INTO t1(a,c) VALUES (1.225e+0, 1.225e+0);
+INSERT INTO t1(a,c) VALUES (1.37e+0, 1.37e+0);
+INSERT INTO t1(a,c) VALUES (-1.37e+0, -1.37e+0);
+INSERT INTO t1(a,c) VALUES (1.87e-3, 1.87e-3);
+INSERT INTO t1(a,c) VALUES (-1.87e-2, -1.87e-2);
+Warnings:
+Warning 1265 Data truncated for column 'c' at row 1
+INSERT INTO t1(a,c) VALUES (5000e+0, 5000e+0);
+INSERT INTO t1(a,c) VALUES (-5000e+0, -5000e+0);
+SELECT * FROM t1;
+a b c
+9.999999 10 9.999
+1.225e-05 1.2e-05 1e-05
+0.0001225 0.00012 NULL
+0.1225 0.1225 NULL
+0.1225877 0.12259 NULL
+12.25 12.25 NULL
+12.25 12.25 12.25
+122500 122500 NULL
+12250000000 1.2e+10 NULL
+1.225e+15 1.2e+15 NULL
+5000000 5000000 NULL
+1.25e+78 1.2e+78 NULL
+1.25e-94 1.2e-94 NULL
+1.25e+203 1e+203 NULL
+1.25e-175 1e-175 NULL
+1.225 NULL 1.225
+1.37 NULL 1.37
+-1.37 NULL -1.37
+0.00187 NULL 0.002
+-0.0187 NULL -0.01
+5000 NULL 5000
+-5000 NULL -5000
+DROP TABLE t1;
+CREATE TABLE t (a CHAR(10),b INT);
+INSERT INTO t VALUES (),(),();
+INSERT INTO t(a) SELECT rand() FROM t;
+DROP TABLE t;
CREATE TABLE t1 (c1 INT NOT NULL);
INSERT INTO t1 VALUES(4188.32999999999992724042385816574096679687500),
('4188.32999999999992724042385816574096679687500'), (4188);
diff --git a/mysql-test/r/insert_select.result b/mysql-test/r/insert_select.result
index 2604e4bf648..780e91ea73f 100644
--- a/mysql-test/r/insert_select.result
+++ b/mysql-test/r/insert_select.result
@@ -816,3 +816,15 @@ id prev_id join_id
3 2 0
4 3 0
DROP TABLE t1,t2;
+#
+# Bug#30384: Having SQL_BUFFER_RESULT option in the
+# CREATE .. KEY(..) .. SELECT led to creating corrupted index.
+#
+create table t1(f1 int);
+insert into t1 values(1),(2),(3);
+create table t2 (key(f1)) engine=myisam select sql_buffer_result f1 from t1;
+check table t2 extended;
+Table Op Msg_type Msg_text
+test.t2 check status OK
+drop table t1,t2;
+##################################################################
diff --git a/mysql-test/r/join.result b/mysql-test/r/join.result
index fcb141a3510..9b799fccf06 100644
--- a/mysql-test/r/join.result
+++ b/mysql-test/r/join.result
@@ -897,4 +897,168 @@ select '^^: The above should be ~= 20 + cost(select * from t1). Value less than
Z
^^: The above should be ~= 20 + cost(select * from t1). Value less than 20 is an error
drop table t1, t2;
+CREATE TABLE t1 (a INT PRIMARY KEY, b INT);
+CREATE TABLE t2 (c INT PRIMARY KEY, d INT);
+INSERT INTO t1 VALUES(1,NULL),(2,NULL),(3,NULL),(4,NULL);
+INSERT INTO t1 SELECT a + 4, b FROM t1;
+INSERT INTO t1 SELECT a + 8, b FROM t1;
+INSERT INTO t1 SELECT a + 16, b FROM t1;
+INSERT INTO t1 SELECT a + 32, b FROM t1;
+INSERT INTO t1 SELECT a + 64, b FROM t1;
+INSERT INTO t2 SELECT a, b FROM t1;
+EXPLAIN SELECT * FROM t1 JOIN t2 ON b=c ORDER BY a LIMIT 2;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 index NULL PRIMARY 4 NULL 2
+1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 test.t1.b 1
+EXPLAIN SELECT * FROM t1 JOIN t2 ON a=c ORDER BY a LIMIT 2;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 index PRIMARY PRIMARY 4 NULL 2
+1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 test.t1.a 1
+SELECT * FROM t1 JOIN t2 ON b=c ORDER BY a LIMIT 2;
+a b c d
+SELECT * FROM t1 JOIN t2 ON a=c ORDER BY a LIMIT 2;
+a b c d
+1 NULL 1 NULL
+2 NULL 2 NULL
+EXPLAIN SELECT * FROM t1 JOIN t2 ON b=c ORDER BY a;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 128 Using filesort
+1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 test.t1.b 1
+EXPLAIN SELECT * FROM t1 JOIN t2 ON a=c ORDER BY a;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ALL PRIMARY NULL NULL NULL 128 Using filesort
+1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 test.t1.a 1
+SELECT * FROM t1 JOIN t2 ON b=c ORDER BY a;
+a b c d
+SELECT * FROM t1 JOIN t2 ON a=c ORDER BY a;
+a b c d
+1 NULL 1 NULL
+2 NULL 2 NULL
+3 NULL 3 NULL
+4 NULL 4 NULL
+5 NULL 5 NULL
+6 NULL 6 NULL
+7 NULL 7 NULL
+8 NULL 8 NULL
+9 NULL 9 NULL
+10 NULL 10 NULL
+11 NULL 11 NULL
+12 NULL 12 NULL
+13 NULL 13 NULL
+14 NULL 14 NULL
+15 NULL 15 NULL
+16 NULL 16 NULL
+17 NULL 17 NULL
+18 NULL 18 NULL
+19 NULL 19 NULL
+20 NULL 20 NULL
+21 NULL 21 NULL
+22 NULL 22 NULL
+23 NULL 23 NULL
+24 NULL 24 NULL
+25 NULL 25 NULL
+26 NULL 26 NULL
+27 NULL 27 NULL
+28 NULL 28 NULL
+29 NULL 29 NULL
+30 NULL 30 NULL
+31 NULL 31 NULL
+32 NULL 32 NULL
+33 NULL 33 NULL
+34 NULL 34 NULL
+35 NULL 35 NULL
+36 NULL 36 NULL
+37 NULL 37 NULL
+38 NULL 38 NULL
+39 NULL 39 NULL
+40 NULL 40 NULL
+41 NULL 41 NULL
+42 NULL 42 NULL
+43 NULL 43 NULL
+44 NULL 44 NULL
+45 NULL 45 NULL
+46 NULL 46 NULL
+47 NULL 47 NULL
+48 NULL 48 NULL
+49 NULL 49 NULL
+50 NULL 50 NULL
+51 NULL 51 NULL
+52 NULL 52 NULL
+53 NULL 53 NULL
+54 NULL 54 NULL
+55 NULL 55 NULL
+56 NULL 56 NULL
+57 NULL 57 NULL
+58 NULL 58 NULL
+59 NULL 59 NULL
+60 NULL 60 NULL
+61 NULL 61 NULL
+62 NULL 62 NULL
+63 NULL 63 NULL
+64 NULL 64 NULL
+65 NULL 65 NULL
+66 NULL 66 NULL
+67 NULL 67 NULL
+68 NULL 68 NULL
+69 NULL 69 NULL
+70 NULL 70 NULL
+71 NULL 71 NULL
+72 NULL 72 NULL
+73 NULL 73 NULL
+74 NULL 74 NULL
+75 NULL 75 NULL
+76 NULL 76 NULL
+77 NULL 77 NULL
+78 NULL 78 NULL
+79 NULL 79 NULL
+80 NULL 80 NULL
+81 NULL 81 NULL
+82 NULL 82 NULL
+83 NULL 83 NULL
+84 NULL 84 NULL
+85 NULL 85 NULL
+86 NULL 86 NULL
+87 NULL 87 NULL
+88 NULL 88 NULL
+89 NULL 89 NULL
+90 NULL 90 NULL
+91 NULL 91 NULL
+92 NULL 92 NULL
+93 NULL 93 NULL
+94 NULL 94 NULL
+95 NULL 95 NULL
+96 NULL 96 NULL
+97 NULL 97 NULL
+98 NULL 98 NULL
+99 NULL 99 NULL
+100 NULL 100 NULL
+101 NULL 101 NULL
+102 NULL 102 NULL
+103 NULL 103 NULL
+104 NULL 104 NULL
+105 NULL 105 NULL
+106 NULL 106 NULL
+107 NULL 107 NULL
+108 NULL 108 NULL
+109 NULL 109 NULL
+110 NULL 110 NULL
+111 NULL 111 NULL
+112 NULL 112 NULL
+113 NULL 113 NULL
+114 NULL 114 NULL
+115 NULL 115 NULL
+116 NULL 116 NULL
+117 NULL 117 NULL
+118 NULL 118 NULL
+119 NULL 119 NULL
+120 NULL 120 NULL
+121 NULL 121 NULL
+122 NULL 122 NULL
+123 NULL 123 NULL
+124 NULL 124 NULL
+125 NULL 125 NULL
+126 NULL 126 NULL
+127 NULL 127 NULL
+128 NULL 128 NULL
+DROP TABLE IF EXISTS t1,t2;
End of 5.0 tests.
diff --git a/mysql-test/r/join_outer_innodb.result b/mysql-test/r/join_outer_innodb.result
index e8a2d6f668b..24a11b12b03 100644
--- a/mysql-test/r/join_outer_innodb.result
+++ b/mysql-test/r/join_outer_innodb.result
@@ -8,12 +8,12 @@ EXPLAIN
SELECT COUNT(*) FROM t2 LEFT JOIN t1 ON t2.fkey = t1.id
WHERE t1.name LIKE 'A%';
id select_type table type possible_keys key key_len ref rows Extra
-1 SIMPLE t1 index PRIMARY,name name 23 NULL 3 Using where; Using index
+1 SIMPLE t1 index PRIMARY,name PRIMARY 4 NULL 3 Using where
1 SIMPLE t2 ref fkey fkey 5 test.t1.id 1 Using where; Using index
EXPLAIN
SELECT COUNT(*) FROM t2 LEFT JOIN t1 ON t2.fkey = t1.id
WHERE t1.name LIKE 'A%' OR FALSE;
id select_type table type possible_keys key key_len ref rows Extra
-1 SIMPLE t2 index NULL fkey 5 NULL 5 Using index
+1 SIMPLE t2 index NULL PRIMARY 4 NULL 5
1 SIMPLE t1 eq_ref PRIMARY PRIMARY 4 test.t2.fkey 1 Using where
DROP TABLE t1,t2;
diff --git a/mysql-test/r/key.result b/mysql-test/r/key.result
index a2bed75a709..fcc09a0244d 100644
--- a/mysql-test/r/key.result
+++ b/mysql-test/r/key.result
@@ -530,3 +530,77 @@ ORDER BY c.b, c.d
a b c d e f g h i j a b c d
2 2 1 2004-11-30 12:00:00 1 0 0 0 0 0 2 3388000 -553000 NULL
DROP TABLE t1, t2;
+create table t1(a int not null, key aa(a),
+b char(10) not null, unique key bb(b(1)),
+c char(4) not null, unique key cc(c));
+desc t1;
+Field Type Null Key Default Extra
+a int(11) NO MUL NULL
+b char(10) NO UNI NULL
+c char(4) NO PRI NULL
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` int(11) NOT NULL,
+ `b` char(10) NOT NULL,
+ `c` char(4) NOT NULL,
+ UNIQUE KEY `cc` (`c`),
+ UNIQUE KEY `bb` (`b`(1)),
+ KEY `aa` (`a`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+drop table t1;
+create table t1(a int not null, key aa(a),
+b char(10) not null, unique key bb(b(1)),
+c char(4) not null);
+desc t1;
+Field Type Null Key Default Extra
+a int(11) NO MUL NULL
+b char(10) NO UNI NULL
+c char(4) NO NULL
+alter table t1 add unique key cc(c);
+desc t1;
+Field Type Null Key Default Extra
+a int(11) NO MUL NULL
+b char(10) NO UNI NULL
+c char(4) NO PRI NULL
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` int(11) NOT NULL,
+ `b` char(10) NOT NULL,
+ `c` char(4) NOT NULL,
+ UNIQUE KEY `cc` (`c`),
+ UNIQUE KEY `bb` (`b`(1)),
+ KEY `aa` (`a`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+drop table t1;
+End of 5.0 tests
+DROP TABLE IF EXISTS t1;
+CREATE TABLE t1 (a INT PRIMARY KEY AUTO_INCREMENT);
+INSERT INTO t1 VALUES (), (), ();
+SELECT 1 AS c1
+FROM t1
+ORDER BY (
+SELECT 1 AS c2
+FROM t1
+GROUP BY GREATEST(LAST_INSERT_ID(), t1.a) ASC
+LIMIT 1);
+c1
+1
+1
+1
+DROP TABLE t1;
+CREATE TABLE t1 (a INT, b INT, INDEX (a,b));
+INSERT INTO t1 (a, b)
+VALUES
+(1,1), (1,2), (1,3), (1,4), (1,5),
+(2,2), (2,3), (2,1), (3,1), (4,1), (4,2), (4,3), (4,4), (4,5), (4,6);
+EXPLAIN SELECT 1 FROM t1 AS t1_outer WHERE
+(SELECT max(b) FROM t1 GROUP BY a HAVING a < 2) > 12;
+id select_type table type possible_keys key key_len ref rows Extra
+1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
+2 SUBQUERY t1 range NULL a 5 NULL 8 Using index for group-by
+SELECT 1 as RES FROM t1 AS t1_outer WHERE
+(SELECT max(b) FROM t1 GROUP BY a HAVING a < 2) > 12;
+RES
+DROP TABLE t1;
diff --git a/mysql-test/r/key_cache.result b/mysql-test/r/key_cache.result
index 08d8059f61b..9ada5dc0784 100644
--- a/mysql-test/r/key_cache.result
+++ b/mysql-test/r/key_cache.result
@@ -276,6 +276,8 @@ Variable_name Value
Key_blocks_unused KEY_BLOCKS_UNUSED
set global keycache2.key_buffer_size=0;
set global keycache3.key_buffer_size=100;
+Warnings:
+Warning 1292 Truncated incorrect key_buffer_size value: '100'
set global keycache3.key_buffer_size=0;
create table t1 (mytext text, FULLTEXT (mytext));
insert t1 values ('aaabbb');
diff --git a/mysql-test/r/kill.result b/mysql-test/r/kill.result
index a08be429a83..3ea5bbd20bc 100644
--- a/mysql-test/r/kill.result
+++ b/mysql-test/r/kill.result
@@ -125,3 +125,14 @@ drop function bug27563;
drop procedure proc27563;
PREPARE stmt FROM 'EXPLAIN SELECT * FROM t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16,t17,t18,t19,t20,t21,t22,t23,t24,t25,t26,t27,t28,t29,t30,t31,t32,t33,t34,t35,t36,t37,t38,t39,t40 WHERE a1=a2 AND a2=a3 AND a3=a4 AND a4=a5 AND a5=a6 AND a6=a7 AND a7=a8 AND a8=a9 AND a9=a10 AND a10=a11 AND a11=a12 AND a12=a13 AND a13=a14 AND a14=a15 AND a15=a16 AND a16=a17 AND a17=a18 AND a18=a19 AND a19=a20 AND a20=a21 AND a21=a22 AND a22=a23 AND a23=a24 AND a24=a25 AND a25=a26 AND a26=a27 AND a27=a28 AND a28=a29 AND a29=a30 AND a30=a31 AND a31=a32 AND a32=a33 AND a33=a34 AND a34=a35 AND a35=a36 AND a36=a37 AND a37=a38 AND a38=a39 AND a39=a40 ';
EXECUTE stmt;
+#
+# Bug#19723: kill of active connection yields different error code
+# depending on platform.
+#
+
+# Connection: con2.
+KILL CONNECTION_ID();
+# CR_SERVER_LOST, CR_SERVER_GONE_ERROR, depending on the timing
+# of close of the connection socket
+SELECT 1;
+Got one of the listed errors
diff --git a/mysql-test/r/lock_multi.result b/mysql-test/r/lock_multi.result
index 4a0f70a7b88..9c4f1b17dcc 100644
--- a/mysql-test/r/lock_multi.result
+++ b/mysql-test/r/lock_multi.result
@@ -113,4 +113,34 @@ 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 (i int);
+connection: default
+lock tables t1 write;
+connection: flush
+flush tables with read lock;;
+connection: default
+alter table t1 add column j int;
+connection: insert
+insert into t1 values (1,2);;
+connection: default
+unlock tables;
+connection: flush
+select * from t1;
+i j
+unlock tables;
+select * from t1;
+i j
+1 2
+drop table t1;
+drop table if exists t1;
+create table t1 (i int);
+connection: default
+lock tables t1 write;
+connection: flush
+flush tables with read lock;;
+connection: default
+flush tables;
+unlock tables;
+drop table t1;
End of 5.1 tests
diff --git a/mysql-test/r/log_state.result b/mysql-test/r/log_state.result
index 407d93cf321..8ecfe3b2094 100644
--- a/mysql-test/r/log_state.result
+++ b/mysql-test/r/log_state.result
@@ -175,6 +175,68 @@ SET GLOBAL slow_query_log = ON;
SET GLOBAL READ_ONLY = OFF;
SET GLOBAL general_log = @old_general_log_state;
SET GLOBAL slow_query_log = @old_slow_log_state;
+SET @old_general_log_state = @@global.general_log;
+SET @old_slow_log_state = @@global.slow_query_log;
+SHOW VARIABLES LIKE 'general_log';
+Variable_name Value
+general_log ON
+SHOW VARIABLES LIKE 'log';
+Variable_name Value
+log ON
+SELECT @@general_log, @@log;
+@@general_log @@log
+1 1
+SET GLOBAL log = 0;
+SHOW VARIABLES LIKE 'general_log';
+Variable_name Value
+general_log OFF
+SHOW VARIABLES LIKE 'log';
+Variable_name Value
+log OFF
+SELECT @@general_log, @@log;
+@@general_log @@log
+0 0
+SET GLOBAL general_log = 1;
+SHOW VARIABLES LIKE 'general_log';
+Variable_name Value
+general_log ON
+SHOW VARIABLES LIKE 'log';
+Variable_name Value
+log ON
+SELECT @@general_log, @@log;
+@@general_log @@log
+1 1
+SHOW VARIABLES LIKE 'slow_query_log';
+Variable_name Value
+slow_query_log OFF
+SHOW VARIABLES LIKE 'log_slow_queries';
+Variable_name Value
+log_slow_queries OFF
+SELECT @@slow_query_log, @@log_slow_queries;
+@@slow_query_log @@log_slow_queries
+0 0
+SET GLOBAL log_slow_queries = 0;
+SHOW VARIABLES LIKE 'slow_query_log';
+Variable_name Value
+slow_query_log OFF
+SHOW VARIABLES LIKE 'log_slow_queries';
+Variable_name Value
+log_slow_queries OFF
+SELECT @@slow_query_log, @@log_slow_queries;
+@@slow_query_log @@log_slow_queries
+0 0
+SET GLOBAL slow_query_log = 1;
+SHOW VARIABLES LIKE 'slow_query_log';
+Variable_name Value
+slow_query_log ON
+SHOW VARIABLES LIKE 'log_slow_queries';
+Variable_name Value
+log_slow_queries ON
+SELECT @@slow_query_log, @@log_slow_queries;
+@@slow_query_log @@log_slow_queries
+1 1
+SET GLOBAL general_log = @old_general_log_state;
+SET GLOBAL slow_query_log = @old_slow_log_state;
set @old_general_log_file= @@global.general_log_file;
set @old_slow_query_log_file= @@global.slow_query_log_file;
set global general_log_file= concat('/not exiting path/log.maste', 'r');
diff --git a/mysql-test/r/log_tables.result b/mysql-test/r/log_tables.result
index 261e3292f4d..0a7634df85a 100644
--- a/mysql-test/r/log_tables.result
+++ b/mysql-test/r/log_tables.result
@@ -50,7 +50,7 @@ general_log CREATE TABLE `general_log` (
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='General log'
show fields from mysql.general_log;
Field Type Null Key Default Extra
-event_time timestamp NO CURRENT_TIMESTAMP
+event_time timestamp NO CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
user_host mediumtext NO NULL
thread_id int(11) NO NULL
server_id int(11) NO NULL
@@ -73,7 +73,7 @@ slow_log CREATE TABLE `slow_log` (
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log'
show fields from mysql.slow_log;
Field Type Null Key Default Extra
-start_time timestamp NO CURRENT_TIMESTAMP
+start_time timestamp NO CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
user_host mediumtext NO NULL
query_time time NO NULL
lock_time time NO NULL
@@ -605,6 +605,7 @@ DROP PROCEDURE IF EXISTS `db_17876.archiveGeneralLog`;
DROP DATABASE IF EXISTS `db_17876`;
SET GLOBAL general_log = @old_general_log_state;
SET GLOBAL slow_query_log = @old_slow_log_state;
+select CONNECTION_ID() into @thread_id;
truncate table mysql.general_log;
set @old_general_log_state = @@global.general_log;
set global general_log = on;
@@ -711,7 +712,7 @@ set @lparam = "000 001 002 003 004 005 006 007 008 009"
prepare long_query from "select ? as long_query";
execute long_query using @lparam;
set global general_log = off;
-select command_type, argument from mysql.general_log;
+select command_type, argument from mysql.general_log where thread_id = @thread_id;
command_type argument
Query set @lparam = "000 001 002 003 004 005 006 007 008 009"
"010 011 012 013 014 015 016 017 018 019"
@@ -820,3 +821,31 @@ Execute select '000 001 002 003 004 005 006 007 008 009010 011 012 013 014 015 0
Query set global general_log = off
deallocate prepare long_query;
set global general_log = @old_general_log_state;
+SET @old_slow_log_state = @@global.slow_query_log;
+SET SESSION long_query_time = 0;
+SET GLOBAL slow_query_log = ON;
+FLUSH LOGS;
+TRUNCATE TABLE mysql.slow_log;
+CREATE TABLE t1 (f1 SERIAL,f2 INT, f3 INT, PRIMARY KEY(f1), KEY(f2));
+INSERT INTO t1 VALUES (1,1,1);
+INSERT INTO t1 VALUES (2,2,2);
+INSERT INTO t1 VALUES (3,3,3);
+INSERT INTO t1 VALUES (4,4,4);
+SELECT SQL_NO_CACHE 'Bug#31700 - SCAN',f1,f2,f3,SLEEP(1.1) FROM t1 WHERE f3=4;
+Bug#31700 - SCAN f1 f2 f3 SLEEP(1.1)
+Bug#31700 - SCAN 4 4 4 0
+SELECT SQL_NO_CACHE 'Bug#31700 - KEY', f1,f2,f3,SLEEP(1.1) FROM t1 WHERE f2=3;
+Bug#31700 - KEY f1 f2 f3 SLEEP(1.1)
+Bug#31700 - KEY 3 3 3 0
+SELECT SQL_NO_CACHE 'Bug#31700 - PK', f1,f2,f3,SLEEP(1.1) FROM t1 WHERE f1=2;
+Bug#31700 - PK f1 f2 f3 SLEEP(1.1)
+Bug#31700 - PK 2 2 2 0
+SELECT start_time, rows_examined, rows_sent, sql_text FROM mysql.slow_log WHERE sql_text LIKE '%Bug#31700%' ORDER BY start_time;
+start_time rows_examined rows_sent sql_text
+TIMESTAMP 4 1 SELECT SQL_NO_CACHE 'Bug#31700 - SCAN',f1,f2,f3,SLEEP(1.1) FROM t1 WHERE f3=4
+TIMESTAMP 1 1 SELECT SQL_NO_CACHE 'Bug#31700 - KEY', f1,f2,f3,SLEEP(1.1) FROM t1 WHERE f2=3
+TIMESTAMP 1 1 SELECT SQL_NO_CACHE 'Bug#31700 - PK', f1,f2,f3,SLEEP(1.1) FROM t1 WHERE f1=2
+DROP TABLE t1;
+TRUNCATE TABLE mysql.slow_log;
+SET GLOBAL slow_query_log = @old_slow_log_state;
+SET SESSION long_query_time =@old_long_query_time;
diff --git a/mysql-test/r/lowercase_view.result b/mysql-test/r/lowercase_view.result
index 3653461c6b8..c37dc41c495 100644
--- a/mysql-test/r/lowercase_view.result
+++ b/mysql-test/r/lowercase_view.result
@@ -119,7 +119,7 @@ create table t1Aa (col1 int);
create view v1Aa as select col1 from t1Aa as AaA;
show create view v1AA;
View Create View character_set_client collation_connection
-v1aa CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1aa` AS select `aaa`.`col1` AS `col1` from `t1aa` `AaA` latin1 latin1_swedish_ci
+v1aa CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1aa` AS select `aaa`.`col1` AS `col1` from `t1aa` `aaa` latin1 latin1_swedish_ci
drop view v1AA;
select Aaa.col1 from t1Aa as AaA;
col1
@@ -128,6 +128,23 @@ drop view v1AA;
create view v1Aa as select AaA.col1 from t1Aa as AaA;
show create view v1AA;
View Create View character_set_client collation_connection
-v1aa CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1aa` AS select `aaa`.`col1` AS `col1` from `t1aa` `AaA` latin1 latin1_swedish_ci
+v1aa CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1aa` AS select `aaa`.`col1` AS `col1` from `t1aa` `aaa` latin1 latin1_swedish_ci
drop view v1AA;
drop table t1Aa;
+CREATE TABLE t1 (a int, b int);
+select X.a from t1 AS X group by X.b having (X.a = 1);
+a
+select X.a from t1 AS X group by X.b having (x.a = 1);
+a
+select X.a from t1 AS X group by X.b having (x.b = 1);
+a
+CREATE OR REPLACE VIEW v1 AS
+select X.a from t1 AS X group by X.b having (X.a = 1);
+SHOW CREATE VIEW v1;
+View Create View character_set_client collation_connection
+v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `x`.`a` AS `a` from `t1` `x` group by `x`.`b` having (`x`.`a` = 1) latin1 latin1_swedish_ci
+SELECT * FROM v1;
+a
+DROP VIEW v1;
+DROP TABLE t1;
+End of 5.0 tests.
diff --git a/mysql-test/r/merge-big.result b/mysql-test/r/merge-big.result
new file mode 100644
index 00000000000..82fedc1df73
--- /dev/null
+++ b/mysql-test/r/merge-big.result
@@ -0,0 +1,77 @@
+drop table if exists t1,t2,t3,t4,t5,t6;
+#
+# Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
+# corrupts a MERGE table
+# Problem #3
+#
+CREATE TABLE t1 (c1 INT) ENGINE= MyISAM;
+LOCK TABLE t1 WRITE;
+# connection con1
+SET SESSION debug="+d,sleep_open_and_lock_after_open";
+INSERT INTO t1 VALUES (1);
+# connection default
+# Let INSERT go into thr_multi_lock().
+# Kick INSERT out of thr_multi_lock().
+FLUSH TABLES;
+# Let INSERT go through open_tables() where it sleeps.
+# Unlock and close table and wait for con1 to close too.
+FLUSH TABLES;
+# This should give no result.
+SELECT * FROM t1;
+c1
+UNLOCK TABLES;
+# connection con1
+SET SESSION debug="-d,sleep_open_and_lock_after_open";
+# connection default
+DROP TABLE t1;
+#
+# Extra tests for Bug#26379 - Combination of FLUSH TABLE and
+# REPAIR TABLE corrupts a MERGE table
+#
+CREATE TABLE t1 (c1 INT);
+CREATE TABLE t2 (c1 INT);
+CREATE TABLE t3 (c1 INT);
+INSERT INTO t1 VALUES (1);
+INSERT INTO t2 VALUES (2);
+INSERT INTO t3 VALUES (3);
+#
+# CREATE ... SELECT
+# try to access parent from another thread.
+#
+# connection con1
+SET SESSION debug="+d,sleep_create_select_before_lock";
+CREATE TABLE t4 (c1 INT) ENGINE=MRG_MYISAM UNION=(t1,t2)
+INSERT_METHOD=FIRST SELECT * FROM t3;
+# connection default
+# Now try to access the parent.
+# If 3 is in table, SELECT had to wait.
+SELECT * FROM t4 ORDER BY c1;
+c1
+1
+2
+3
+# connection con1
+SET SESSION debug="-d,sleep_create_select_before_lock";
+# connection default
+# Cleanup for next test.
+DROP TABLE t4;
+DELETE FROM t1 WHERE c1 != 1;
+#
+# CREATE ... SELECT
+# try to access child from another thread.
+#
+# connection con1
+SET SESSION debug="+d,sleep_create_select_before_lock";
+CREATE TABLE t4 (c1 INT) ENGINE=MRG_MYISAM UNION=(t1,t2)
+INSERT_METHOD=FIRST SELECT * FROM t3;
+# connection default
+# Now try to access a child.
+# If 3 is in table, SELECT had to wait.
+SELECT * FROM t1 ORDER BY c1;
+c1
+1
+3
+# connection con1
+SET SESSION debug="-d,sleep_create_select_before_lock";
+# connection default
+DROP TABLE t1, t2, t3, t4;
diff --git a/mysql-test/r/merge.result b/mysql-test/r/merge.result
index d6e19107ec4..a709817b7ef 100644
--- a/mysql-test/r/merge.result
+++ b/mysql-test/r/merge.result
@@ -584,9 +584,7 @@ insert into t1 values (1);
insert into t2 values (2);
create temporary table t3 (a int not null) ENGINE=MERGE UNION=(t1,t2);
select * from t3;
-a
-1
-2
+ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
create temporary table t4 (a int not null);
create temporary table t5 (a int not null);
insert into t4 values (1);
@@ -597,6 +595,54 @@ a
1
2
drop table t6, t3, t1, t2, t4, t5;
+create temporary table t1 (a int not null);
+create temporary table t2 (a int not null);
+insert into t1 values (1);
+insert into t2 values (2);
+create table t3 (a int not null) ENGINE=MERGE UNION=(t1,t2);
+select * from t3;
+ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
+drop table t3, t2, t1;
+create table t1 (a int not null);
+create temporary table t2 (a int not null);
+insert into t1 values (1);
+insert into t2 values (2);
+create table t3 (a int not null) ENGINE=MERGE UNION=(t1,t2);
+select * from t3;
+ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
+drop table t3;
+create temporary table t3 (a int not null) ENGINE=MERGE UNION=(t1,t2);
+select * from t3;
+ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
+drop table t3, t2, t1;
+# CREATE...SELECT is not implemented for MERGE tables.
+CREATE TEMPORARY TABLE t1 (c1 INT NOT NULL);
+CREATE TEMPORARY TABLE t2 (c1 INT NOT NULL);
+CREATE TABLE t3 (c1 INT NOT NULL);
+INSERT INTO t3 VALUES (3), (33);
+LOCK TABLES t3 READ;
+CREATE TEMPORARY TABLE t4 (c1 INT NOT NULL) ENGINE=MERGE UNION=(t1,t2)
+INSERT_METHOD=LAST SELECT * FROM t3;
+ERROR HY000: 'test.t4' is not BASE TABLE
+SELECT * FROM t4;
+ERROR HY000: Table 't4' was not locked with LOCK TABLES
+UNLOCK TABLES;
+CREATE TEMPORARY TABLE t4 (c1 INT NOT NULL) ENGINE=MERGE UNION=(t1,t2)
+INSERT_METHOD=LAST;
+INSERT INTO t4 SELECT * FROM t3;
+# Alter temporary MERGE table.
+ALTER TABLE t4 UNION=(t1);
+LOCK TABLES t4 WRITE;
+# Alter temporary MERGE table under LOCk tables.
+ALTER TABLE t4 UNION=(t1,t2);
+UNLOCK TABLES;
+# MERGE table and function.
+CREATE FUNCTION f1 () RETURNS INT RETURN (SELECT max(c1) FROM t3);
+SELECT * FROM t4 WHERE c1 < f1();
+c1
+3
+DROP FUNCTION f1;
+DROP TABLE t4, t3, t2, t1;
CREATE TABLE t1 (
fileset_id tinyint(3) unsigned NOT NULL default '0',
file_code varchar(32) NOT NULL default '',
@@ -650,11 +696,11 @@ create table t2 (a int);
insert into t1 values (0);
insert into t2 values (1);
create table t3 engine=merge union=(t1, t2) select * from t1;
-ERROR HY000: You can't specify target table 't1' for update in FROM clause
+ERROR HY000: 'test.t3' is not BASE TABLE
create table t3 engine=merge union=(t1, t2) select * from t2;
-ERROR HY000: You can't specify target table 't2' for update in FROM clause
+ERROR HY000: 'test.t3' is not BASE TABLE
create table t3 engine=merge union=(t1, t2) select (select max(a) from t2);
-ERROR HY000: You can't specify target table 't2' for update in FROM clause
+ERROR HY000: 'test.t3' is not BASE TABLE
drop table t1, t2;
create table t1 (
a double(14,4),
@@ -784,7 +830,7 @@ ERROR HY000: Unable to open underlying table which is differently defined or of
DROP TABLE t1, t2;
CREATE TABLE t2(a INT) ENGINE=MERGE UNION=(t3);
SELECT * FROM t2;
-ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
+ERROR 42S02: Table 'test.t3' doesn't exist
DROP TABLE t2;
CREATE TABLE t1(a INT, b TEXT);
CREATE TABLE tm1(a TEXT, b INT) ENGINE=MERGE UNION=(t1);
@@ -849,20 +895,17 @@ drop table t2;
drop table t1;
CREATE TABLE tm1(a INT) ENGINE=MERGE UNION=(t1, t2);
SELECT * FROM tm1;
-ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
+ERROR 42S02: Table 'test.t1' doesn't exist
CHECK TABLE tm1;
Table Op Msg_type Msg_text
-test.tm1 check Error Table 'test.t1' is differently defined or of non-MyISAM type or doesn't exist
-test.tm1 check Error Table 'test.t2' is differently defined or of non-MyISAM type or doesn't exist
-test.tm1 check Error Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
+test.tm1 check Error Table 'test.t1' doesn't exist
test.tm1 check error Corrupt
CREATE TABLE t1(a INT);
SELECT * FROM tm1;
-ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
+ERROR 42S02: Table 'test.t2' doesn't exist
CHECK TABLE tm1;
Table Op Msg_type Msg_text
-test.tm1 check Error Table 'test.t2' is differently defined or of non-MyISAM type or doesn't exist
-test.tm1 check Error Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
+test.tm1 check Error Table 'test.t2' doesn't exist
test.tm1 check error Corrupt
CREATE TABLE t2(a BLOB);
SELECT * FROM tm1;
@@ -884,4 +927,1060 @@ CREATE TABLE t2 (c1 INT) ENGINE=MERGE UNION=(t1) INSERT_METHOD=FIRST;
CREATE TABLE IF NOT EXISTS t1 SELECT * FROM t2;
ERROR HY000: You can't specify target table 't1' for update in FROM clause
DROP TABLE t1, t2;
+CREATE TABLE t1 (id INT NOT NULL, ref INT NOT NULL, INDEX (id)) ENGINE=MyISAM;
+CREATE TABLE t2 LIKE t1;
+INSERT INTO t2 (id, ref) VALUES (1,3), (2,1), (3,2), (4,5), (4,4);
+INSERT INTO t1 SELECT * FROM t2;
+INSERT INTO t1 SELECT * FROM t2;
+CREATE TABLE t3 (id INT NOT NULL, ref INT NOT NULL, INDEX (id)) ENGINE=MERGE
+UNION(t1);
+SELECT * FROM t3 AS a INNER JOIN t3 AS b USING (id) WHERE a.ref < b.ref;
+id ref ref
+4 4 5
+4 4 5
+4 4 5
+4 4 5
+SELECT * FROM t3;
+id ref
+1 3
+2 1
+3 2
+4 5
+4 4
+1 3
+2 1
+3 2
+4 5
+4 4
+DELETE FROM a USING t3 AS a INNER JOIN t3 AS b USING (id) WHERE a.ref < b.ref;
+SELECT * FROM t3;
+id ref
+1 3
+2 1
+3 2
+4 5
+1 3
+2 1
+3 2
+4 5
+DROP TABLE t1, t2, t3;
End of 5.0 tests
+create table t1 (c1 int, index(c1));
+create table t2 (c1 int, index(c1)) engine=merge union=(t1);
+insert into t1 values (1);
+flush tables;
+select * from t2;
+c1
+1
+flush tables;
+truncate table t1;
+insert into t1 values (1);
+flush tables;
+select * from t2;
+c1
+1
+truncate table t1;
+insert into t1 values (1);
+drop table t1,t2;
+#
+# Extra tests for TRUNCATE.
+#
+# Truncate MERGE table.
+CREATE TABLE t1 (c1 INT, INDEX(c1));
+CREATE TABLE t2 (c1 INT, INDEX(c1));
+CREATE TABLE t3 (c1 INT, INDEX(c1)) ENGINE=MRG_MYISAM UNION=(t1,t2);
+INSERT INTO t1 VALUES (1);
+INSERT INTO t2 VALUES (2);
+SELECT * FROM t3;
+c1
+1
+2
+TRUNCATE TABLE t3;
+SELECT * FROM t3;
+c1
+#
+# Truncate child table.
+INSERT INTO t1 VALUES (1);
+INSERT INTO t2 VALUES (2);
+TRUNCATE TABLE t1;
+SELECT * FROM t3;
+c1
+2
+#
+# Truncate MERGE table under locked tables.
+LOCK TABLE t1 WRITE, t2 WRITE, t3 WRITE;
+INSERT INTO t1 VALUES (1);
+TRUNCATE TABLE t3;
+ERROR HY000: Can't execute the given command because you have active locked tables or an active transaction
+SELECT * FROM t3;
+c1
+1
+2
+#
+# Truncate child table under locked tables.
+TRUNCATE TABLE t1;
+ERROR HY000: Can't execute the given command because you have active locked tables or an active transaction
+SELECT * FROM t3;
+c1
+1
+2
+UNLOCK TABLES;
+DROP TABLE t1, t2, t3;
+#
+# Truncate temporary MERGE table.
+CREATE TEMPORARY TABLE t1 (c1 INT, INDEX(c1));
+CREATE TEMPORARY TABLE t2 (c1 INT, INDEX(c1));
+CREATE TEMPORARY TABLE t3 (c1 INT, INDEX(c1)) ENGINE=MRG_MYISAM UNION=(t1,t2);
+INSERT INTO t1 VALUES (1);
+INSERT INTO t2 VALUES (2);
+SELECT * FROM t3;
+c1
+1
+2
+TRUNCATE TABLE t3;
+SELECT * FROM t3;
+c1
+#
+# Truncate temporary child table.
+INSERT INTO t1 VALUES (1);
+INSERT INTO t2 VALUES (2);
+TRUNCATE TABLE t1;
+SELECT * FROM t3;
+c1
+2
+#
+# Truncate temporary MERGE table under locked tables.
+INSERT INTO t1 VALUES (1);
+CREATE TABLE t4 (c1 INT, INDEX(c1));
+LOCK TABLE t4 WRITE;
+TRUNCATE TABLE t3;
+ERROR HY000: Can't execute the given command because you have active locked tables or an active transaction
+SELECT * FROM t3;
+c1
+1
+2
+#
+# Truncate temporary child table under locked tables.
+TRUNCATE TABLE t1;
+ERROR HY000: Can't execute the given command because you have active locked tables or an active transaction
+SELECT * FROM t3;
+c1
+1
+2
+UNLOCK TABLES;
+DROP TABLE t1, t2, t3, t4;
+CREATE TABLE t1 (c1 INT) ENGINE= MyISAM;
+CREATE TABLE t2 (c1 INT) ENGINE= MRG_MYISAM UNION= (t1) INSERT_METHOD= LAST;
+REPAIR TABLE t1;
+INSERT INTO t2 VALUES (1);
+Table Op Msg_type Msg_text
+test.t1 repair status OK
+DROP TABLE t1, t2;
+CREATE TABLE t1 (c1 INT) ENGINE= MyISAM;
+CREATE TABLE t2 (c1 INT) ENGINE= MRG_MYISAM UNION= (t1) INSERT_METHOD= LAST;
+LOCK TABLE t1 WRITE;
+INSERT INTO t2 VALUES (1);
+REPAIR TABLE t1;
+Table Op Msg_type Msg_text
+test.t1 repair status OK
+UNLOCK TABLES;
+DROP TABLE t1, t2;
+CREATE TABLE t1 (c1 INT) ENGINE= MyISAM;
+LOCK TABLE t1 WRITE;
+INSERT INTO t1 VALUES (1);
+FLUSH TABLES;
+FLUSH TABLES;
+SELECT * FROM t1;
+c1
+UNLOCK TABLES;
+DROP TABLE t1;
+#
+# Extra tests for Bug#26379 - Combination of FLUSH TABLE and
+# REPAIR TABLE corrupts a MERGE table
+#
+# CREATE ... SELECT is disabled for MERGE tables.
+#
+CREATE TABLE t1(c1 INT);
+INSERT INTO t1 VALUES (1);
+CREATE TABLE t2 (c1 INT) ENGINE=MRG_MYISAM UNION=(t1) INSERT_METHOD=LAST;
+CREATE TABLE t3 ENGINE=MRG_MYISAM INSERT_METHOD=LAST SELECT * FROM t2;
+ERROR HY000: Table 't3' is read only
+SHOW CREATE TABLE t3;
+ERROR 42S02: Table 'test.t3' doesn't exist
+CREATE TABLE t3 ENGINE=MRG_MYISAM UNION=(t1) INSERT_METHOD=LAST
+SELECT * FROM t2;
+ERROR HY000: 'test.t3' is not BASE TABLE
+SHOW CREATE TABLE t3;
+ERROR 42S02: Table 'test.t3' doesn't exist
+DROP TABLE t1, t2;
+#
+# CREATE ... LIKE
+#
+# 1. Create like.
+CREATE TABLE t1 (c1 INT);
+CREATE TABLE t2 (c1 INT);
+CREATE TABLE t3 (c1 INT) ENGINE=MRG_MYISAM UNION=(t1,t2)
+INSERT_METHOD=LAST;
+INSERT INTO t1 VALUES (1);
+INSERT INTO t2 VALUES (2);
+INSERT INTO t3 VALUES (3);
+CREATE TABLE t4 LIKE t3;
+SHOW CREATE TABLE t4;
+Table Create Table
+t4 CREATE TABLE `t4` (
+ `c1` int(11) DEFAULT NULL
+) ENGINE=MRG_MyISAM DEFAULT CHARSET=latin1 UNION=()
+INSERT INTO t4 VALUES (4);
+ERROR HY000: Table 't4' is read only
+DROP TABLE t4;
+#
+# 1. Create like with locked tables.
+LOCK TABLES t3 WRITE, t2 WRITE, t1 WRITE;
+CREATE TABLE t4 LIKE t3;
+SHOW CREATE TABLE t4;
+ERROR HY000: Table 't4' was not locked with LOCK TABLES
+INSERT INTO t4 VALUES (4);
+ERROR HY000: Table 't4' was not locked with LOCK TABLES
+UNLOCK TABLES;
+SHOW CREATE TABLE t4;
+Table Create Table
+t4 CREATE TABLE `t4` (
+ `c1` int(11) DEFAULT NULL
+) ENGINE=MRG_MyISAM DEFAULT CHARSET=latin1 UNION=()
+INSERT INTO t4 VALUES (4);
+ERROR HY000: Table 't4' is read only
+DROP TABLE t4;
+#
+# Rename child.
+#
+# 1. Normal rename of non-MERGE table.
+CREATE TABLE t4 (c1 INT);
+INSERT INTO t4 VALUES (4);
+SELECT * FROM t4 ORDER BY c1;
+c1
+4
+RENAME TABLE t4 TO t5;
+SELECT * FROM t5 ORDER BY c1;
+c1
+4
+RENAME TABLE t5 TO t4;
+SELECT * FROM t4 ORDER BY c1;
+c1
+4
+DROP TABLE t4;
+#
+# 2. Normal rename.
+SELECT * FROM t3 ORDER BY c1;
+c1
+1
+2
+3
+RENAME TABLE t2 TO t5;
+SELECT * FROM t3 ORDER BY c1;
+ERROR 42S02: Table 'test.t2' doesn't exist
+RENAME TABLE t5 TO t2;
+SELECT * FROM t3 ORDER BY c1;
+c1
+1
+2
+3
+#
+# 3. Normal rename with locked tables.
+LOCK TABLES t1 WRITE, t2 WRITE, t3 WRITE;
+SELECT * FROM t3 ORDER BY c1;
+c1
+1
+2
+3
+RENAME TABLE t2 TO t5;
+ERROR HY000: Can't execute the given command because you have active locked tables or an active transaction
+SELECT * FROM t3 ORDER BY c1;
+c1
+1
+2
+3
+RENAME TABLE t5 TO t2;
+ERROR HY000: Can't execute the given command because you have active locked tables or an active transaction
+SELECT * FROM t3 ORDER BY c1;
+c1
+1
+2
+3
+UNLOCK TABLES;
+#
+# 4. Alter table rename.
+ALTER TABLE t2 RENAME TO t5;
+SELECT * FROM t3 ORDER BY c1;
+ERROR 42S02: Table 'test.t2' doesn't exist
+ALTER TABLE t5 RENAME TO t2;
+SELECT * FROM t3 ORDER BY c1;
+c1
+1
+2
+3
+#
+# 5. Alter table rename with locked tables.
+LOCK TABLES t1 WRITE, t2 WRITE, t3 WRITE;
+ALTER TABLE t2 RENAME TO t5;
+SELECT * FROM t3 ORDER BY c1;
+ERROR HY000: Table 't3' was not locked with LOCK TABLES
+ALTER TABLE t5 RENAME TO t2;
+ERROR HY000: Table 't5' was not locked with LOCK TABLES
+UNLOCK TABLES;
+ALTER TABLE t5 RENAME TO t2;
+SELECT * FROM t3 ORDER BY c1;
+c1
+1
+2
+3
+#
+# Rename parent.
+#
+# 1. Normal rename with locked tables.
+LOCK TABLES t1 WRITE, t2 WRITE, t3 WRITE;
+SELECT * FROM t3 ORDER BY c1;
+c1
+1
+2
+3
+RENAME TABLE t3 TO t5;
+ERROR HY000: Can't execute the given command because you have active locked tables or an active transaction
+SELECT * FROM t3 ORDER BY c1;
+c1
+1
+2
+3
+RENAME TABLE t5 TO t3;
+ERROR HY000: Can't execute the given command because you have active locked tables or an active transaction
+SELECT * FROM t3 ORDER BY c1;
+c1
+1
+2
+3
+#
+# 5. Alter table rename with locked tables.
+ALTER TABLE t3 RENAME TO t5;
+SELECT * FROM t5 ORDER BY c1;
+ERROR HY000: Table 't5' was not locked with LOCK TABLES
+ALTER TABLE t5 RENAME TO t3;
+ERROR HY000: Table 't5' was not locked with LOCK TABLES
+UNLOCK TABLES;
+ALTER TABLE t5 RENAME TO t3;
+SELECT * FROM t3 ORDER BY c1;
+c1
+1
+2
+3
+DROP TABLE t1, t2, t3;
+#
+# Drop locked tables.
+#
+# 1. Drop parent.
+CREATE TABLE t1 (c1 INT, INDEX(c1));
+CREATE TABLE t2 (c1 INT, INDEX(c1)) ENGINE=MRG_MYISAM UNION=(t1)
+INSERT_METHOD=LAST;
+LOCK TABLES t1 WRITE, t2 WRITE;
+INSERT INTO t1 VALUES (1);
+DROP TABLE t2;
+SELECT * FROM t2;
+ERROR HY000: Table 't2' was not locked with LOCK TABLES
+SELECT * FROM t1;
+c1
+1
+UNLOCK TABLES;
+# 2. Drop child.
+CREATE TABLE t2 (c1 INT, INDEX(c1)) ENGINE=MRG_MYISAM UNION=(t1)
+INSERT_METHOD=LAST;
+LOCK TABLES t1 WRITE, t2 WRITE;
+INSERT INTO t1 VALUES (1);
+DROP TABLE t1;
+SELECT * FROM t2;
+ERROR 42S02: Table 'test.t1' doesn't exist
+SELECT * FROM t1;
+ERROR 42S02: Table 'test.t1' doesn't exist
+UNLOCK TABLES;
+DROP TABLE t2;
+#
+# ALTER TABLE. Change child list.
+#
+CREATE TABLE t1 (c1 INT, INDEX(c1));
+CREATE TABLE t2 (c1 INT, INDEX(c1));
+CREATE TABLE t3 (c1 INT, INDEX(c1));
+INSERT INTO t1 VALUES (1);
+INSERT INTO t2 VALUES (2);
+INSERT INTO t3 VALUES (3);
+CREATE TABLE t4 (c1 INT, INDEX(c1)) ENGINE=MRG_MYISAM UNION=(t3,t2)
+INSERT_METHOD=LAST;
+# Shrink child list.
+ALTER TABLE t4 UNION=(t3);
+SHOW CREATE TABLE t4;
+Table Create Table
+t4 CREATE TABLE `t4` (
+ `c1` int(11) DEFAULT NULL,
+ KEY `c1` (`c1`)
+) ENGINE=MRG_MyISAM DEFAULT CHARSET=latin1 INSERT_METHOD=LAST UNION=(`t3`)
+SELECT * FROM t4 ORDER BY c1;
+c1
+3
+# Extend child list.
+ALTER TABLE t4 UNION=(t3,t2);
+SHOW CREATE TABLE t4;
+Table Create Table
+t4 CREATE TABLE `t4` (
+ `c1` int(11) DEFAULT NULL,
+ KEY `c1` (`c1`)
+) ENGINE=MRG_MyISAM DEFAULT CHARSET=latin1 INSERT_METHOD=LAST UNION=(`t3`,`t2`)
+SELECT * FROM t4 ORDER BY c1;
+c1
+2
+3
+#
+# ALTER TABLE under LOCK TABLES. Change child list.
+#
+LOCK TABLES t4 WRITE, t3 WRITE, t2 WRITE;
+# Shrink child list.
+ALTER TABLE t4 UNION=(t3);
+ERROR HY000: Can't execute the given command because you have active locked tables or an active transaction
+# Extend child list within locked tables.
+ALTER TABLE t4 UNION=(t3,t2);
+ERROR HY000: Can't execute the given command because you have active locked tables or an active transaction
+# Extend child list beyond locked tables.
+ALTER TABLE t4 UNION=(t3,t2,t1);
+ERROR HY000: Can't execute the given command because you have active locked tables or an active transaction
+SHOW CREATE TABLE t4;
+Table Create Table
+t4 CREATE TABLE `t4` (
+ `c1` int(11) DEFAULT NULL,
+ KEY `c1` (`c1`)
+) ENGINE=MRG_MyISAM DEFAULT CHARSET=latin1 INSERT_METHOD=LAST UNION=(`t3`,`t2`)
+SELECT * FROM t4 ORDER BY c1;
+c1
+2
+3
+UNLOCK TABLES;
+DROP TABLE t4;
+#
+# ALTER TABLE under LOCK TABLES. Grave change, table re-creation.
+#
+CREATE TABLE t4 (c1 INT, INDEX(c1)) ENGINE=MRG_MYISAM UNION=(t1,t2,t3)
+INSERT_METHOD=LAST;
+# Lock parent first and then children.
+LOCK TABLES t4 WRITE, t3 WRITE, t2 WRITE, t1 WRITE;
+ALTER TABLE t4 DROP INDEX c1, ADD UNIQUE INDEX (c1);
+SELECT * FROM t4 ORDER BY c1;
+c1
+1
+2
+3
+ALTER TABLE t2 DROP INDEX c1, ADD UNIQUE INDEX (c1);
+SELECT * FROM t4 ORDER BY c1;
+c1
+1
+2
+3
+UNLOCK TABLES;
+# Lock children first and then parent.
+LOCK TABLES t1 WRITE, t2 WRITE, t3 WRITE, t4 WRITE;
+ALTER TABLE t4 DROP INDEX c1, ADD UNIQUE INDEX (c1);
+SELECT * FROM t4 ORDER BY c1;
+c1
+1
+2
+3
+ALTER TABLE t2 DROP INDEX c1, ADD UNIQUE INDEX (c1);
+SELECT * FROM t4 ORDER BY c1;
+c1
+1
+2
+3
+UNLOCK TABLES;
+# Lock parent between children.
+LOCK TABLES t3 WRITE, t2 WRITE, t4 WRITE, t1 WRITE;
+ALTER TABLE t4 DROP INDEX c1, ADD UNIQUE INDEX (c1);
+SELECT * FROM t4 ORDER BY c1;
+c1
+1
+2
+3
+ALTER TABLE t2 DROP INDEX c1, ADD UNIQUE INDEX (c1);
+SELECT * FROM t4 ORDER BY c1;
+c1
+1
+2
+3
+UNLOCK TABLES;
+DROP TABLE t1, t2, t3, t4;
+#
+# ALTER TABLE under LOCK TABLES. Simple change, no re-creation.
+#
+CREATE TABLE t1 (c1 INT);
+CREATE TABLE t2 (c1 INT);
+CREATE TABLE t3 (c1 INT);
+CREATE TABLE t4 (c1 INT) ENGINE=MRG_MYISAM UNION=(t1,t2,t3)
+INSERT_METHOD=LAST;
+INSERT INTO t1 VALUES (1);
+INSERT INTO t2 VALUES (2);
+INSERT INTO t3 VALUES (3);
+# Lock parent first and then children.
+LOCK TABLES t4 WRITE, t3 WRITE, t2 WRITE, t1 WRITE;
+ALTER TABLE t4 ALTER COLUMN c1 SET DEFAULT 44;
+SELECT * FROM t4 ORDER BY c1;
+c1
+1
+2
+3
+ALTER TABLE t2 ALTER COLUMN c1 SET DEFAULT 22;
+SELECT * FROM t4 ORDER BY c1;
+c1
+1
+2
+3
+UNLOCK TABLES;
+# Lock children first and then parent.
+LOCK TABLES t1 WRITE, t2 WRITE, t3 WRITE, t4 WRITE;
+ALTER TABLE t4 ALTER COLUMN c1 SET DEFAULT 44;
+SELECT * FROM t4 ORDER BY c1;
+c1
+1
+2
+3
+ALTER TABLE t2 ALTER COLUMN c1 SET DEFAULT 22;
+SELECT * FROM t4 ORDER BY c1;
+c1
+1
+2
+3
+UNLOCK TABLES;
+# Lock parent between children.
+LOCK TABLES t3 WRITE, t2 WRITE, t4 WRITE, t1 WRITE;
+ALTER TABLE t4 ALTER COLUMN c1 SET DEFAULT 44;
+SELECT * FROM t4 ORDER BY c1;
+c1
+1
+2
+3
+ALTER TABLE t2 ALTER COLUMN c1 SET DEFAULT 22;
+SELECT * FROM t4 ORDER BY c1;
+c1
+1
+2
+3
+UNLOCK TABLES;
+#
+# FLUSH TABLE under LOCK TABLES.
+#
+# Lock parent first and then children.
+LOCK TABLES t4 WRITE, t3 WRITE, t2 WRITE, t1 WRITE;
+FLUSH TABLE t4;
+SELECT * FROM t4 ORDER BY c1;
+c1
+1
+2
+3
+FLUSH TABLE t2;
+SELECT * FROM t4 ORDER BY c1;
+c1
+1
+2
+3
+FLUSH TABLES;
+SELECT * FROM t4 ORDER BY c1;
+c1
+1
+2
+3
+UNLOCK TABLES;
+# Lock children first and then parent.
+LOCK TABLES t1 WRITE, t2 WRITE, t3 WRITE, t4 WRITE;
+FLUSH TABLE t4;
+SELECT * FROM t4 ORDER BY c1;
+c1
+1
+2
+3
+FLUSH TABLE t2;
+SELECT * FROM t4 ORDER BY c1;
+c1
+1
+2
+3
+FLUSH TABLES;
+SELECT * FROM t4 ORDER BY c1;
+c1
+1
+2
+3
+UNLOCK TABLES;
+# Lock parent between children.
+LOCK TABLES t3 WRITE, t2 WRITE, t4 WRITE, t1 WRITE;
+FLUSH TABLE t4;
+SELECT * FROM t4 ORDER BY c1;
+c1
+1
+2
+3
+FLUSH TABLE t2;
+SELECT * FROM t4 ORDER BY c1;
+c1
+1
+2
+3
+FLUSH TABLES;
+SELECT * FROM t4 ORDER BY c1;
+c1
+1
+2
+3
+UNLOCK TABLES;
+#
+# Triggers
+#
+# Trigger on parent
+DELETE FROM t4 WHERE c1 = 4;
+CREATE TRIGGER t4_ai AFTER INSERT ON t4 FOR EACH ROW SET @a=1;
+SET @a=0;
+INSERT INTO t4 VALUES (4);
+SELECT @a;
+@a
+1
+SELECT * FROM t4 ORDER BY c1;
+c1
+1
+2
+3
+4
+DROP TRIGGER t4_ai;
+# Trigger on parent under LOCK TABLES
+LOCK TABLES t3 WRITE, t2 WRITE, t4 WRITE, t1 WRITE;
+CREATE TRIGGER t4_ai AFTER INSERT ON t4 FOR EACH ROW SET @a=1;
+SET @a=0;
+INSERT INTO t4 VALUES (4);
+SELECT @a;
+@a
+1
+SELECT * FROM t4 ORDER BY c1;
+c1
+1
+2
+3
+4
+4
+DROP TRIGGER t4_ai;
+UNLOCK TABLES;
+#
+# Trigger on child
+DELETE FROM t4 WHERE c1 = 4;
+CREATE TRIGGER t3_ai AFTER INSERT ON t3 FOR EACH ROW SET @a=1;
+SET @a=0;
+INSERT INTO t4 VALUES (4);
+SELECT @a;
+@a
+0
+INSERT INTO t3 VALUES (33);
+SELECT @a;
+@a
+1
+SELECT * FROM t4 ORDER BY c1;
+c1
+1
+2
+3
+4
+33
+DROP TRIGGER t3_ai;
+# Trigger on child under LOCK TABLES
+LOCK TABLES t3 WRITE, t2 WRITE, t4 WRITE, t1 WRITE;
+CREATE TRIGGER t3_ai AFTER INSERT ON t3 FOR EACH ROW SET @a=1;
+SET @a=0;
+INSERT INTO t4 VALUES (4);
+SELECT @a;
+@a
+0
+INSERT INTO t3 VALUES (33);
+SELECT @a;
+@a
+1
+SELECT * FROM t4 ORDER BY c1;
+c1
+1
+2
+3
+4
+4
+33
+33
+DELETE FROM t4 WHERE c1 = 33;
+DROP TRIGGER t3_ai;
+#
+# Trigger with table use on child
+DELETE FROM t4 WHERE c1 = 4;
+CREATE TRIGGER t3_ai AFTER INSERT ON t3 FOR EACH ROW INSERT INTO t2 VALUES(22);
+INSERT INTO t4 VALUES (4);
+SELECT * FROM t4 ORDER BY c1;
+c1
+1
+2
+3
+4
+INSERT INTO t3 VALUES (33);
+SELECT * FROM t4 ORDER BY c1;
+c1
+1
+2
+3
+4
+22
+33
+DELETE FROM t4 WHERE c1 = 22;
+DELETE FROM t4 WHERE c1 = 33;
+DROP TRIGGER t3_ai;
+# Trigger with table use on child under LOCK TABLES
+LOCK TABLES t3 WRITE, t2 WRITE, t4 WRITE, t1 WRITE;
+CREATE TRIGGER t3_ai AFTER INSERT ON t3 FOR EACH ROW INSERT INTO t2 VALUES(22);
+INSERT INTO t4 VALUES (4);
+SELECT * FROM t4 ORDER BY c1;
+c1
+1
+2
+3
+4
+4
+INSERT INTO t3 VALUES (33);
+SELECT * FROM t4 ORDER BY c1;
+c1
+1
+2
+3
+4
+4
+22
+33
+DROP TRIGGER t3_ai;
+DELETE FROM t4 WHERE c1 = 22;
+DELETE FROM t4 WHERE c1 = 33;
+UNLOCK TABLES;
+#
+# Repair
+#
+REPAIR TABLE t4;
+Table Op Msg_type Msg_text
+test.t4 repair note The storage engine for the table doesn't support repair
+REPAIR TABLE t2;
+Table Op Msg_type Msg_text
+test.t2 repair status OK
+SELECT * FROM t4 ORDER BY c1;
+c1
+1
+2
+3
+4
+4
+LOCK TABLES t3 WRITE, t2 WRITE, t4 WRITE, t1 WRITE;
+REPAIR TABLE t4;
+Table Op Msg_type Msg_text
+test.t4 repair note The storage engine for the table doesn't support repair
+REPAIR TABLE t2;
+Table Op Msg_type Msg_text
+test.t2 repair status OK
+SELECT * FROM t4 ORDER BY c1;
+c1
+1
+2
+3
+4
+4
+UNLOCK TABLES;
+#
+# Optimize
+#
+OPTIMIZE TABLE t4;
+Table Op Msg_type Msg_text
+test.t4 optimize note The storage engine for the table doesn't support optimize
+OPTIMIZE TABLE t2;
+Table Op Msg_type Msg_text
+test.t2 optimize status OK
+SELECT * FROM t4 ORDER BY c1;
+c1
+1
+2
+3
+4
+4
+LOCK TABLES t3 WRITE, t2 WRITE, t4 WRITE, t1 WRITE;
+OPTIMIZE TABLE t4;
+Table Op Msg_type Msg_text
+test.t4 optimize note The storage engine for the table doesn't support optimize
+OPTIMIZE TABLE t2;
+Table Op Msg_type Msg_text
+test.t2 optimize status Table is already up to date
+SELECT * FROM t4 ORDER BY c1;
+c1
+1
+2
+3
+4
+4
+UNLOCK TABLES;
+#
+# Checksum
+#
+CHECKSUM TABLE t4;
+Table Checksum
+test.t4 46622073
+CHECKSUM TABLE t2;
+Table Checksum
+test.t2 3700403066
+SELECT * FROM t4 ORDER BY c1;
+c1
+1
+2
+3
+4
+4
+LOCK TABLES t3 WRITE, t2 WRITE, t4 WRITE, t1 WRITE;
+CHECKSUM TABLE t4;
+Table Checksum
+test.t4 46622073
+CHECKSUM TABLE t2;
+Table Checksum
+test.t2 3700403066
+SELECT * FROM t4 ORDER BY c1;
+c1
+1
+2
+3
+4
+4
+UNLOCK TABLES;
+#
+# Insert delayed
+#
+INSERT DELAYED INTO t4 VALUES(44);
+DELETE FROM t4 WHERE c1 = 44;
+INSERT DELAYED INTO t3 VALUES(33);
+SELECT * FROM t4 ORDER BY c1;
+c1
+1
+2
+3
+4
+4
+33
+LOCK TABLES t3 WRITE, t2 WRITE, t4 WRITE, t1 WRITE;
+INSERT DELAYED INTO t4 VALUES(444);
+Got one of the listed errors
+INSERT DELAYED INTO t3 VALUES(333);
+Got one of the listed errors
+SELECT * FROM t4 ORDER BY c1;
+c1
+1
+2
+3
+4
+4
+33
+UNLOCK TABLES;
+DROP TABLE t1, t2, t3, t4;
+#
+# Recursive inclusion of merge tables in their union clauses.
+#
+CREATE TABLE t1 (c1 INT, INDEX(c1));
+CREATE TABLE t2 (c1 INT, INDEX(c1)) ENGINE=MRG_MYISAM UNION=(t1)
+INSERT_METHOD=LAST;
+CREATE TABLE t3 (c1 INT, INDEX(c1)) ENGINE=MRG_MYISAM UNION=(t2,t1)
+INSERT_METHOD=LAST;
+ALTER TABLE t2 UNION=(t3,t1);
+SELECT * FROM t2;
+ERROR HY000: Table 't3' is differently defined or of non-MyISAM type or doesn't exist
+DROP TABLE t1, t2, t3;
+CREATE TABLE t1 (c1 INT) ENGINE= MyISAM;
+CREATE TABLE t2 (c1 INT) ENGINE= MyISAM;
+CREATE TABLE t3 (c1 INT) ENGINE= MRG_MYISAM UNION= (t1, t2);
+INSERT INTO t1 VALUES (1);
+INSERT INTO t2 VALUES (2);
+SELECT * FROM t3;
+c1
+1
+2
+TRUNCATE TABLE t1;
+SELECT * FROM t3;
+c1
+2
+DROP TABLE t1, t2, t3;
+CREATE TABLE t1 (id INTEGER, grp TINYINT, id_rev INTEGER);
+SET @rnd_max= 2147483647;
+SET @rnd= RAND();
+SET @id = CAST(@rnd * @rnd_max AS UNSIGNED);
+SET @id_rev= @rnd_max - @id;
+SET @grp= CAST(127.0 * @rnd AS UNSIGNED);
+INSERT INTO t1 (id, grp, id_rev) VALUES (@id, @grp, @id_rev);
+SET @rnd= RAND();
+SET @id = CAST(@rnd * @rnd_max AS UNSIGNED);
+SET @id_rev= @rnd_max - @id;
+SET @grp= CAST(127.0 * @rnd AS UNSIGNED);
+INSERT INTO t1 (id, grp, id_rev) VALUES (@id, @grp, @id_rev);
+SET @rnd= RAND();
+SET @id = CAST(@rnd * @rnd_max AS UNSIGNED);
+SET @id_rev= @rnd_max - @id;
+SET @grp= CAST(127.0 * @rnd AS UNSIGNED);
+INSERT INTO t1 (id, grp, id_rev) VALUES (@id, @grp, @id_rev);
+SET @rnd= RAND();
+SET @id = CAST(@rnd * @rnd_max AS UNSIGNED);
+SET @id_rev= @rnd_max - @id;
+SET @grp= CAST(127.0 * @rnd AS UNSIGNED);
+INSERT INTO t1 (id, grp, id_rev) VALUES (@id, @grp, @id_rev);
+SET @rnd= RAND();
+SET @id = CAST(@rnd * @rnd_max AS UNSIGNED);
+SET @id_rev= @rnd_max - @id;
+SET @grp= CAST(127.0 * @rnd AS UNSIGNED);
+INSERT INTO t1 (id, grp, id_rev) VALUES (@id, @grp, @id_rev);
+SET @rnd= RAND();
+SET @id = CAST(@rnd * @rnd_max AS UNSIGNED);
+SET @id_rev= @rnd_max - @id;
+SET @grp= CAST(127.0 * @rnd AS UNSIGNED);
+INSERT INTO t1 (id, grp, id_rev) VALUES (@id, @grp, @id_rev);
+SET @rnd= RAND();
+SET @id = CAST(@rnd * @rnd_max AS UNSIGNED);
+SET @id_rev= @rnd_max - @id;
+SET @grp= CAST(127.0 * @rnd AS UNSIGNED);
+INSERT INTO t1 (id, grp, id_rev) VALUES (@id, @grp, @id_rev);
+SET @rnd= RAND();
+SET @id = CAST(@rnd * @rnd_max AS UNSIGNED);
+SET @id_rev= @rnd_max - @id;
+SET @grp= CAST(127.0 * @rnd AS UNSIGNED);
+INSERT INTO t1 (id, grp, id_rev) VALUES (@id, @grp, @id_rev);
+SET @rnd= RAND();
+SET @id = CAST(@rnd * @rnd_max AS UNSIGNED);
+SET @id_rev= @rnd_max - @id;
+SET @grp= CAST(127.0 * @rnd AS UNSIGNED);
+INSERT INTO t1 (id, grp, id_rev) VALUES (@id, @grp, @id_rev);
+SET @rnd= RAND();
+SET @id = CAST(@rnd * @rnd_max AS UNSIGNED);
+SET @id_rev= @rnd_max - @id;
+SET @grp= CAST(127.0 * @rnd AS UNSIGNED);
+INSERT INTO t1 (id, grp, id_rev) VALUES (@id, @grp, @id_rev);
+set @@read_buffer_size=2*1024*1024;
+CREATE TABLE t2 SELECT * FROM t1;
+INSERT INTO t1 (id, grp, id_rev) SELECT id, grp, id_rev FROM t2;
+INSERT INTO t2 (id, grp, id_rev) SELECT id, grp, id_rev FROM t1;
+INSERT INTO t1 (id, grp, id_rev) SELECT id, grp, id_rev FROM t2;
+INSERT INTO t2 (id, grp, id_rev) SELECT id, grp, id_rev FROM t1;
+INSERT INTO t1 (id, grp, id_rev) SELECT id, grp, id_rev FROM t2;
+CREATE TABLE t3 (id INTEGER, grp TINYINT, id_rev INTEGER)
+ENGINE= MRG_MYISAM UNION= (t1, t2);
+SELECT COUNT(*) FROM t1;
+COUNT(*)
+130
+SELECT COUNT(*) FROM t2;
+COUNT(*)
+80
+SELECT COUNT(*) FROM t3;
+COUNT(*)
+210
+SELECT COUNT(DISTINCT a1.id) FROM t3 AS a1, t3 AS a2
+WHERE a1.id = a2.id GROUP BY a2.grp;
+TRUNCATE TABLE t1;
+SELECT COUNT(*) FROM t1;
+COUNT(*)
+0
+SELECT COUNT(*) FROM t2;
+COUNT(*)
+80
+SELECT COUNT(*) FROM t3;
+COUNT(*)
+80
+DROP TABLE t1, t2, t3;
+CREATE TABLE t1 (c1 INT) ENGINE=MyISAM;
+CREATE TABLE t2 (c1 INT) ENGINE=MRG_MYISAM UNION=(t1) INSERT_METHOD=LAST;
+INSERT INTO t2 VALUES (1);
+SELECT * FROM t2;
+c1
+1
+LOCK TABLES t2 WRITE, t1 WRITE;
+FLUSH TABLES;
+REPAIR TABLE t1;
+Table Op Msg_type Msg_text
+test.t1 repair status OK
+CHECK TABLE t1;
+Table Op Msg_type Msg_text
+test.t1 check status OK
+REPAIR TABLE t1;
+Table Op Msg_type Msg_text
+test.t1 repair status OK
+UNLOCK TABLES;
+CHECK TABLE t1 EXTENDED;
+Table Op Msg_type Msg_text
+test.t1 check status OK
+LOCK TABLES t2 WRITE, t1 WRITE;
+REPAIR TABLE t1;
+Table Op Msg_type Msg_text
+test.t1 repair status OK
+CHECK TABLE t1;
+Table Op Msg_type Msg_text
+test.t1 check status OK
+REPAIR TABLE t1;
+Table Op Msg_type Msg_text
+test.t1 repair status OK
+UNLOCK TABLES;
+CHECK TABLE t1 EXTENDED;
+Table Op Msg_type Msg_text
+test.t1 check status OK
+DROP TABLE t1, t2;
+CREATE TABLE t1 ( a INT ) ENGINE=MyISAM;
+CREATE TABLE m1 ( a INT ) ENGINE=MRG_MYISAM UNION=(t1);
+LOCK TABLES t1 WRITE, m1 WRITE;
+FLUSH TABLE t1;
+UNLOCK TABLES;
+DROP TABLE m1, t1;
+CREATE TABLE t1 ( a INT ) ENGINE=MyISAM;
+CREATE TABLE m1 ( a INT ) ENGINE=MRG_MYISAM UNION=(t1);
+LOCK TABLES m1 WRITE, t1 WRITE;
+FLUSH TABLE t1;
+UNLOCK TABLES;
+DROP TABLE m1, t1;
+CREATE TABLE t1 (c1 INT, c2 INT) ENGINE= MyISAM;
+CREATE TABLE t2 (c1 INT, c2 INT) ENGINE= MyISAM;
+CREATE TABLE t3 (c1 INT, c2 INT) ENGINE= MRG_MYISAM UNION(t1, t2);
+INSERT INTO t1 VALUES (1, 1);
+INSERT INTO t2 VALUES (2, 2);
+SELECT * FROM t3;
+c1 c2
+1 1
+2 2
+ALTER TABLE t1 ENGINE= MEMORY;
+INSERT INTO t1 VALUES (0, 0);
+SELECT * FROM t3;
+ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
+DROP TABLE t1, t2, t3;
+CREATE TABLE t1 (c1 INT, KEY(c1));
+CREATE TABLE t2 (c1 INT, KEY(c1)) ENGINE=MRG_MYISAM UNION=(t1)
+INSERT_METHOD=FIRST;
+LOCK TABLE t1 WRITE, t2 WRITE;
+FLUSH TABLES t2, t1;
+OPTIMIZE TABLE t1;
+Table Op Msg_type Msg_text
+test.t1 optimize status Table is already up to date
+FLUSH TABLES t1;
+UNLOCK TABLES;
+FLUSH TABLES;
+INSERT INTO t1 VALUES (1);
+LOCK TABLE t1 WRITE, t2 WRITE;
+FLUSH TABLES t2, t1;
+OPTIMIZE TABLE t1;
+Table Op Msg_type Msg_text
+test.t1 optimize status OK
+FLUSH TABLES t1;
+UNLOCK TABLES;
+DROP TABLE t1, t2;
+CREATE TABLE t1 (ID INT) ENGINE=MYISAM;
+CREATE TABLE m1 (ID INT) ENGINE=MRG_MYISAM UNION=(t1) INSERT_METHOD=FIRST;
+INSERT INTO t1 VALUES ();
+INSERT INTO m1 VALUES ();
+LOCK TABLE t1 WRITE, m1 WRITE;
+FLUSH TABLES m1, t1;
+OPTIMIZE TABLE t1;
+Table Op Msg_type Msg_text
+test.t1 optimize status OK
+FLUSH TABLES m1, t1;
+UNLOCK TABLES;
+DROP TABLE t1, m1;
diff --git a/mysql-test/r/merge_innodb.result b/mysql-test/r/merge_innodb.result
new file mode 100644
index 00000000000..f6057d279b1
--- /dev/null
+++ b/mysql-test/r/merge_innodb.result
@@ -0,0 +1,37 @@
+DROP TABLE IF EXISTS t1, t2, t3, t4, t5;
+CREATE TABLE t1 (c1 varchar(100)) ENGINE=MyISAM;
+CREATE TABLE t2 (c1 varchar(100)) ENGINE=MyISAM;
+CREATE TABLE t3 (c1 varchar(100)) ENGINE=InnoDB;
+INSERT INTO t1 VALUES ('Ann'), ('Alice');
+INSERT INTO t2 VALUES ('Bob'), ('Brian');
+INSERT INTO t3 VALUES ('Chris'), ('Charlie');
+CREATE TABLE t4 (c1 varchar(100)) ENGINE=MRG_MYISAM UNION=(t1,t2)
+INSERT_METHOD=LAST;
+CREATE TABLE t5 (c1 varchar(100)) ENGINE=MRG_MYISAM UNION=(t1,t3)
+INSERT_METHOD=LAST;
+SELECT * FROM t5;
+ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
+SELECT * FROM t4;
+c1
+Ann
+Alice
+Bob
+Brian
+ALTER TABLE t2 ENGINE=InnoDB;
+SELECT * FROM t4;
+ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
+DELETE FROM t2 LIMIT 1;
+SELECT * FROM t4;
+ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
+INSERT INTO t4 VALUES ('Beware');
+ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
+SELECT * FROM t4;
+ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
+SELECT * FROM t2;
+c1
+Brian
+SELECT * FROM t1;
+c1
+Ann
+Alice
+DROP TABLE t1, t2, t3, t4, t5;
diff --git a/mysql-test/r/metadata.result b/mysql-test/r/metadata.result
index 4a776b6a253..76c6ae7d034 100644
--- a/mysql-test/r/metadata.result
+++ b/mysql-test/r/metadata.result
@@ -21,7 +21,7 @@ def test t1 t1 g g 5 4 0 Y 32768 3 63
def test t1 t1 h h 246 7 0 Y 0 4 63
def test t1 t1 i i 13 4 0 Y 32864 0 63
def test t1 t1 j j 10 10 0 Y 128 0 63
-def test t1 t1 k k 7 19 0 N 1249 0 63
+def test t1 t1 k k 7 19 0 N 9441 0 63
def test t1 t1 l l 12 19 0 Y 128 0 63
def test t1 t1 m m 254 1 0 Y 256 0 8
def test t1 t1 n n 254 3 0 Y 2048 0 8
diff --git a/mysql-test/r/multi_update.result b/mysql-test/r/multi_update.result
index 55e47756312..d96927deed5 100644
--- a/mysql-test/r/multi_update.result
+++ b/mysql-test/r/multi_update.result
@@ -614,6 +614,7 @@ CREATE TABLE `t2` (
`b` int(11) default NULL,
PRIMARY KEY (`a`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ;
+set @sav_binlog_format= @@session.binlog_format;
set @@session.binlog_format= mixed;
insert into t1 values (1,1),(2,2);
insert into t2 values (1,1),(4,4);
@@ -626,7 +627,7 @@ a b
4 4
show master status /* there must be the UPDATE query event */;
File Position Binlog_Do_DB Binlog_Ignore_DB
-master-bin.000001 197
+master-bin.000001 336
delete from t1;
delete from t2;
insert into t1 values (1,2),(3,4),(4,4);
@@ -636,6 +637,24 @@ 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 the UPDATE query event */;
File Position Binlog_Do_DB Binlog_Ignore_DB
-master-bin.000001 212
+master-bin.000001 351
drop table t1, t2;
+set @@session.binlog_format= @sav_binlog_format;
+drop table if exists t1, t2, t3;
+CREATE TABLE t1 (a int, PRIMARY KEY (a));
+CREATE TABLE t2 (a int, PRIMARY KEY (a));
+CREATE TABLE t3 (a int, PRIMARY KEY (a)) ENGINE=MyISAM;
+create trigger trg_del_t3 before delete on t3 for each row insert into t1 values (1);
+insert into t2 values (1),(2);
+insert into t3 values (1),(2);
+reset master;
+delete t3.* from t2,t3 where t2.a=t3.a;
+ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
+select count(*) from t1 /* must be 1 */;
+count(*)
+1
+select count(*) from t3 /* must be 1 */;
+count(*)
+1
+drop table t1, t2, t3;
end of tests
diff --git a/mysql-test/r/myisam.result b/mysql-test/r/myisam.result
index 73661897ee1..1c8b5e9d7d9 100644
--- a/mysql-test/r/myisam.result
+++ b/mysql-test/r/myisam.result
@@ -606,24 +606,6 @@ select count(*) from t1 where a is null;
count(*)
2
drop table t1;
-create table t1 (c1 int, index(c1));
-create table t2 (c1 int, index(c1)) engine=merge union=(t1);
-insert into t1 values (1);
-flush tables;
-select * from t2;
-c1
-1
-flush tables;
-truncate table t1;
-insert into t1 values (1);
-flush tables;
-select * from t2;
-c1
-1
-truncate table t1;
-ERROR HY000: MyISAM table 't1' is in use (most likely by a MERGE table). Try FLUSH TABLES.
-insert into t1 values (1);
-drop table t1,t2;
create table t1 (c1 int, c2 varchar(4) not null default '',
key(c2(3))) default charset=utf8;
insert into t1 values (1,'A'), (2, 'B'), (3, 'A');
@@ -1794,6 +1776,61 @@ SELECT a FROM t1 FORCE INDEX (inx) WHERE a=1;
a
1
DROP TABLE t1;
+CREATE TABLE t1 (c1 INT, c2 INT, UNIQUE INDEX (c1), INDEX (c2)) ENGINE=MYISAM;
+SHOW TABLE STATUS LIKE 't1';
+Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
+t1 MyISAM 10 Fixed 0 # # # 1024 # # # # # # #
+INSERT INTO t1 VALUES (1,1);
+SHOW TABLE STATUS LIKE 't1';
+Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
+t1 MyISAM 10 Fixed 1 # # # 3072 # # # # # # #
+ALTER TABLE t1 DISABLE KEYS;
+SHOW TABLE STATUS LIKE 't1';
+Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
+t1 MyISAM 10 Fixed 1 # # # 3072 # # # # # # #
+ALTER TABLE t1 ENABLE KEYS;
+SHOW TABLE STATUS LIKE 't1';
+Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
+t1 MyISAM 10 Fixed 1 # # # 3072 # # # # # # #
+ALTER TABLE t1 DISABLE KEYS;
+SHOW TABLE STATUS LIKE 't1';
+Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
+t1 MyISAM 10 Fixed 1 # # # 3072 # # # # # # #
+ALTER TABLE t1 ENABLE KEYS;
+SHOW TABLE STATUS LIKE 't1';
+Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
+t1 MyISAM 10 Fixed 1 # # # 3072 # # # # # # #
+# Enable keys with parallel repair
+SET @@myisam_repair_threads=2;
+ALTER TABLE t1 DISABLE KEYS;
+ALTER TABLE t1 ENABLE KEYS;
+SET @@myisam_repair_threads=1;
+CHECK TABLE t1 EXTENDED;
+Table Op Msg_type Msg_text
+test.t1 check status OK
+DROP TABLE t1;
+CREATE TABLE t1 (id int NOT NULL, ref int NOT NULL, INDEX (id)) ENGINE=MyISAM;
+CREATE TABLE t2 LIKE t1;
+INSERT INTO t2 (id, ref) VALUES (1,3), (2,1), (3,2), (4,5), (4,4);
+INSERT INTO t1 SELECT * FROM t2;
+SELECT * FROM t1 AS a INNER JOIN t1 AS b USING (id) WHERE a.ref < b.ref;
+id ref ref
+4 4 5
+SELECT * FROM t1;
+id ref
+1 3
+2 1
+3 2
+4 5
+4 4
+DELETE FROM a USING t1 AS a INNER JOIN t1 AS b USING (id) WHERE a.ref < b.ref;
+SELECT * FROM t1;
+id ref
+1 3
+2 1
+3 2
+4 5
+DROP TABLE t1, t2;
End of 5.0 tests
create table t1 (a int not null, key `a` (a) key_block_size=1024);
show create table t1;
diff --git a/mysql-test/r/myisampack.result b/mysql-test/r/myisampack.result
new file mode 100644
index 00000000000..5f39d318234
--- /dev/null
+++ b/mysql-test/r/myisampack.result
@@ -0,0 +1,29 @@
+CREATE TABLE t1(c1 DOUBLE, c2 DOUBLE, c3 DOUBLE, c4 DOUBLE, c5 DOUBLE,
+c6 DOUBLE, c7 DOUBLE, c8 DOUBLE, c9 DOUBLE, a INT PRIMARY KEY);
+INSERT INTO t1 VALUES
+(-3.31168791059336e-06,-3.19054655887874e-06,-1.06528081684847e-05,-1.227278240089e-06,-1.66718069164799e-06,-2.59038972510885e-06,-2.83145227805303e-06,-4.09678491270648e-07,-2.22610091291797e-06,6),
+(0.0030743000272545,2.53222044316438e-05,2.78674650061845e-05,1.95914465544536e-05,1.7347572525984e-05,1.87513810069614e-05,1.69882826885005e-05,2.44449336987598e-05,1.89914629921774e-05,9),
+(2.85229319423495e-05,3.05970988282259e-05,3.77161100113133e-05,2.3055238978766e-05,2.08241267364615e-05,2.28009504270553e-05,2.12070165658947e-05,2.84350091565409e-05,2.3366822910704e-05,3),
+(0,0,0,0,0,0,0,0,0,12),
+(3.24544577570754e-05,3.44619021870993e-05,4.37561613201124e-05,2.57556808726748e-05,2.3195354640561e-05,2.58532400758869e-05,2.34934241667179e-05,3.1621640063232e-05,2.58229982746189e-05,19),
+(2.53222044316438e-05,0.00445071933455582,2.97447268116016e-05,2.12379514059868e-05,1.86777776502663e-05,2.0170058676712e-05,1.8946030385445e-05,2.66040037173511e-05,2.09161899668946e-05,20),
+(3.03462382611645e-05,3.26517930083994e-05,3.5242025468662e-05,2.53219745106391e-05,2.24384532945004e-05,2.4052346047657e-05,2.23865572957053e-05,3.1634313969082e-05,2.48285463481801e-05,21),
+(1.95914465544536e-05,2.12379514059868e-05,2.27808649037128e-05,0.000341724375366877,1.4512761275113e-05,1.56475828693953e-05,1.44372366441415e-05,2.07952121981765e-05,1.61488256935919e-05,28),
+(1.7347572525984e-05,1.86777776502663e-05,2.04116907052727e-05,1.4512761275113e-05,0.000432162526082388,1.38116514014465e-05,1.2712914948904e-05,1.82503165178506e-05,1.43043075345922e-05,30),
+(1.68339762136661e-05,1.77836497166611e-05,2.36328309295222e-05,1.30183423732016e-05,1.18674654241553e-05,1.32467273128652e-05,1.24581739117775e-05,1.55624190959406e-05,1.33010638508213e-05,31),
+(1.89643062824415e-05,2.06997140070717e-05,2.29045490159364e-05,1.57918175731019e-05,1.39864987449492e-05,1.50580274578455e-05,1.45908734129609e-05,1.95329296993327e-05,1.5814709481221e-05,32),
+(1.69882826885005e-05,1.8946030385445e-05,2.00820439721439e-05,1.44372366441415e-05,1.2712914948904e-05,1.35209686474184e-05,0.00261563314789896,1.78285095864627e-05,1.46699314500019e-05,34),
+(2.0278186540684e-05,2.18923409729654e-05,2.39981539939738e-05,1.71774589459438e-05,1.54654355357383e-05,1.62731485707636e-05,1.49253140625051e-05,2.18229800160297e-05,1.71923561673718e-05,35),
+(2.44449336987598e-05,2.66040037173511e-05,2.84860148925308e-05,2.07952121981765e-05,1.82503165178506e-05,1.97667730441441e-05,1.78285095864627e-05,0.00166478601822712,2.0299952103232e-05,36),
+(1.89914629921774e-05,2.09161899668946e-05,2.26026841007872e-05,1.61488256935919e-05,1.43043075345922e-05,1.52609063290127e-05,1.46699314500019e-05,2.0299952103232e-05,0.00306670170971682,39),
+(0,0,0,0,0,0,0,0,0,41),
+(0,0,0,0,0,0,0,0,0,17),
+(0,0,0,0,0,0,0,0,0,18),
+(2.51880677333017e-05,2.63051795435778e-05,2.79874748974906e-05,2.02888886670845e-05,1.8178636318197e-05,1.91308527003585e-05,1.83260023644133e-05,2.4422300558171e-05,1.96411467520551e-05,44),
+(2.22402118719591e-05,2.37546284320705e-05,2.58463051055541e-05,1.83391609130854e-05,1.6300720519646e-05,1.74559091886791e-05,1.63733785575587e-05,2.26616253279828e-05,1.79541237435621e-05,45),
+(3.01092775359837e-05,3.23865212934412e-05,4.09444584045994e-05,0,2.15470966302776e-05,2.39082636344032e-05,2.28296706429177e-05,2.9007671511595e-05,2.44201138973326e-05,46);
+FLUSH TABLES;
+CHECK TABLE t1 EXTENDED;
+Table Op Msg_type Msg_text
+test.t1 check status OK
+DROP TABLE t1;
diff --git a/mysql-test/r/mysql.result b/mysql-test/r/mysql.result
index 4e39fb28454..a4d96c1c243 100644
--- a/mysql-test/r/mysql.result
+++ b/mysql-test/r/mysql.result
@@ -178,5 +178,14 @@ ERROR at line 1: DELIMITER cannot contain a backslash character
1
1
1
+This is a file starting with UTF8 BOM 0xEFBBBF
+This is a file starting with UTF8 BOM 0xEFBBBF
End of 5.0 tests
WARNING: --server-arg option not supported in this configuration.
+Warning (Code 1286): Unknown table engine 'nonexistent'
+Warning (Code 1266): Using storage engine MyISAM for table 't2'
+Warning (Code 1286): Unknown table engine 'nonexistent2'
+Warning (Code 1266): Using storage engine MyISAM for table 't2'
+Error (Code 1050): Table 't2' already exists
+drop tables t1, t2;
+End of tests
diff --git a/mysql-test/r/mysql_comments.result b/mysql-test/r/mysql_comments.result
new file mode 100644
index 00000000000..7f1c0b50c5e
--- /dev/null
+++ b/mysql-test/r/mysql_comments.result
@@ -0,0 +1,62 @@
+drop table if exists t1;
+drop function if exists foofct;
+drop procedure if exists empty;
+drop procedure if exists foosp;
+drop procedure if exists nicesp;
+drop trigger if exists t1_empty;
+drop trigger if exists t1_bi;
+"Pass 1 : --disable-comments"
+1
+1
+2
+2
+foofct("call 1")
+call 1
+Function sql_mode Create Function character_set_client collation_connection Database Collation
+foofct CREATE DEFINER=`root`@`localhost` FUNCTION `foofct`(x char(20)) RETURNS char(20) CHARSET latin1\nreturn\n\n\n\nx latin1 latin1_swedish_ci latin1_swedish_ci
+foofct("call 2")
+call 2
+Function sql_mode Create Function character_set_client collation_connection Database Collation
+foofct CREATE DEFINER=`root`@`localhost` FUNCTION `foofct`(x char(20)) RETURNS char(20) CHARSET latin1\nbegin\n \n \n \n\n \n\n \n return x;\nend latin1 latin1_swedish_ci latin1_swedish_ci
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+empty CREATE DEFINER=`root`@`localhost` PROCEDURE `empty`()\nbegin\nend latin1 latin1_swedish_ci latin1_swedish_ci
+id data
+foo 42
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+foosp CREATE DEFINER=`root`@`localhost` PROCEDURE `foosp`()\ninsert into test.t1\n\n\n\n\n \n\n \n values ("foo", 42) latin1 latin1_swedish_ci latin1_swedish_ci
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+nicesp CREATE DEFINER=`root`@`localhost` PROCEDURE `nicesp`(a int)\nbegin\n \n declare b int;\n declare c float;\n\n \n \n\n \nend latin1 latin1_swedish_ci latin1_swedish_ci
+Trigger sql_mode SQL Original Statement character_set_client collation_connection Database Collation
+t1_empty CREATE DEFINER=`root`@`localhost` trigger t1_empty after delete on t1\nfor each row\nbegin\nend latin1 latin1_swedish_ci latin1_swedish_ci
+Trigger sql_mode SQL Original Statement character_set_client collation_connection Database Collation
+t1_bi CREATE DEFINER=`root`@`localhost` trigger t1_bi before insert on t1\nfor each row\nbegin\n\n\n\n \n declare b int;\n declare c float;\n\n \n \n\n \n set NEW.data := 12;\nend latin1 latin1_swedish_ci latin1_swedish_ci
+id data
+trig 12
+"Pass 2 : --enable-comments"
+1
+1
+2
+2
+foofct("call 1")
+call 1
+Function sql_mode Create Function character_set_client collation_connection Database Collation
+foofct CREATE DEFINER=`root`@`localhost` FUNCTION `foofct`(x char(20)) RETURNS char(20) CHARSET latin1\nreturn\n-- comment 1a\n# comment 1b\n/* comment 1c */\nx # after body, on same line latin1 latin1_swedish_ci latin1_swedish_ci
+foofct("call 2")
+call 2
+Function sql_mode Create Function character_set_client collation_connection Database Collation
+foofct CREATE DEFINER=`root`@`localhost` FUNCTION `foofct`(x char(20)) RETURNS char(20) CHARSET latin1\nbegin\n -- comment 1a\n # comment 1b\n /*\n comment 1c\n */\n\n -- empty line below\n\n -- empty line above\n return x;\nend latin1 latin1_swedish_ci latin1_swedish_ci
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+empty CREATE DEFINER=`root`@`localhost` PROCEDURE `empty`()\nbegin\nend latin1 latin1_swedish_ci latin1_swedish_ci
+id data
+foo 42
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+foosp CREATE DEFINER=`root`@`localhost` PROCEDURE `foosp`()\ninsert into test.t1\n## These comments are part of the procedure body, and should be kept.\n# Comment 2a\n-- Comment 2b\n/* Comment 2c */\n -- empty line below\n\n -- empty line above\n values ("foo", 42) # comment 3, still part of the body latin1 latin1_swedish_ci latin1_swedish_ci
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+nicesp CREATE DEFINER=`root`@`localhost` PROCEDURE `nicesp`(a int)\nbegin\n -- declare some variables here\n declare b int;\n declare c float;\n\n -- do more stuff here\n -- commented nicely and so on\n\n -- famous last words ...\nend latin1 latin1_swedish_ci latin1_swedish_ci
+Trigger sql_mode SQL Original Statement character_set_client collation_connection Database Collation
+t1_empty CREATE DEFINER=`root`@`localhost` trigger t1_empty after delete on t1\nfor each row\nbegin\nend latin1 latin1_swedish_ci latin1_swedish_ci
+Trigger sql_mode SQL Original Statement character_set_client collation_connection Database Collation
+t1_bi CREATE DEFINER=`root`@`localhost` trigger t1_bi before insert on t1\nfor each row\nbegin\n# comment 1a\n-- comment 1b\n/*\n comment 1c\n*/\n -- declare some variables here\n declare b int;\n declare c float;\n\n -- do more stuff here\n -- commented nicely and so on\n\n -- famous last words ...\n set NEW.data := 12;\nend latin1 latin1_swedish_ci latin1_swedish_ci
+id data
+trig 12
+End of 5.0 tests
diff --git a/mysql-test/r/mysqlbinlog.result b/mysql-test/r/mysqlbinlog.result
index f10ae4b4df5..4ffcb7cdeeb 100644
--- a/mysql-test/r/mysqlbinlog.result
+++ b/mysql-test/r/mysqlbinlog.result
@@ -23,24 +23,33 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
SET @@session.sql_mode=0/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
-drop table if exists t1,t2,t3,t4,t5,t03,t04/*!*/;
+drop table if exists t1,t2,t3,t4,t5,t03,t04
+/*!*/;
SET TIMESTAMP=1000000000/*!*/;
-create table t1 (word varchar(20))/*!*/;
+create table t1 (word varchar(20))
+/*!*/;
SET TIMESTAMP=1000000000/*!*/;
-create table t2 (id int auto_increment not null primary key)/*!*/;
+create table t2 (id int auto_increment not null primary key)
+/*!*/;
SET TIMESTAMP=1000000000/*!*/;
-insert into t1 values ("abirvalg")/*!*/;
+insert into t1 values ("abirvalg")
+/*!*/;
SET INSERT_ID=1/*!*/;
SET TIMESTAMP=1000000000/*!*/;
-insert into t2 values ()/*!*/;
+insert into t2 values ()
+/*!*/;
SET TIMESTAMP=1000000000/*!*/;
-load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-1-0' INTO table t1/*!*/;
+load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-#-#' INTO table t1
+/*!*/;
SET TIMESTAMP=1000000000/*!*/;
-load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-2-0' INTO table t1/*!*/;
+load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-#-#' INTO table t1
+/*!*/;
SET TIMESTAMP=1000000000/*!*/;
-load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-3-0' INTO table t1/*!*/;
+load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-#-#' INTO table t1
+/*!*/;
SET TIMESTAMP=1000000000/*!*/;
-load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-4-0' INTO table t1/*!*/;
+load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-#-#' INTO table t1
+/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
@@ -56,7 +65,8 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
SET @@session.sql_mode=0/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
-insert into t1 values ("Alas")/*!*/;
+insert into t1 values ("Alas")
+/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
@@ -83,7 +93,8 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
SET @@session.sql_mode=0/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
-insert into t1 values ("Alas")/*!*/;
+insert into t1 values ("Alas")
+/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
@@ -100,24 +111,33 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
SET @@session.sql_mode=0/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
-drop table if exists t1,t2,t3,t4,t5,t03,t04/*!*/;
+drop table if exists t1,t2,t3,t4,t5,t03,t04
+/*!*/;
SET TIMESTAMP=1000000000/*!*/;
-create table t1 (word varchar(20))/*!*/;
+create table t1 (word varchar(20))
+/*!*/;
SET TIMESTAMP=1000000000/*!*/;
-create table t2 (id int auto_increment not null primary key)/*!*/;
+create table t2 (id int auto_increment not null primary key)
+/*!*/;
SET TIMESTAMP=1000000000/*!*/;
-insert into t1 values ("abirvalg")/*!*/;
+insert into t1 values ("abirvalg")
+/*!*/;
SET INSERT_ID=1/*!*/;
SET TIMESTAMP=1000000000/*!*/;
-insert into t2 values ()/*!*/;
+insert into t2 values ()
+/*!*/;
SET TIMESTAMP=1000000000/*!*/;
-load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-1-2' INTO table t1/*!*/;
+load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-#-#' INTO table t1
+/*!*/;
SET TIMESTAMP=1000000000/*!*/;
-load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-2-2' INTO table t1/*!*/;
+load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-#-#' INTO table t1
+/*!*/;
SET TIMESTAMP=1000000000/*!*/;
-load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-3-2' INTO table t1/*!*/;
+load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-#-#' INTO table t1
+/*!*/;
SET TIMESTAMP=1000000000/*!*/;
-load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-4-2' INTO table t1/*!*/;
+load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-#-#' INTO table t1
+/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
@@ -133,7 +153,8 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
SET @@session.sql_mode=0/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
-insert into t1 values ("Alas")/*!*/;
+insert into t1 values ("Alas")
+/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
@@ -160,7 +181,8 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
SET @@session.sql_mode=0/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
-insert into t1 values ("Alas")/*!*/;
+insert into t1 values ("Alas")
+/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
@@ -173,9 +195,11 @@ DELIMITER /*!*/;
ROLLBACK/*!*/;
use test/*!*/;
SET TIMESTAMP=1108844556/*!*/;
-BEGIN/*!*/;
+BEGIN
+/*!*/;
SET TIMESTAMP=1108844555/*!*/;
-insert t1 values (1)/*!*/;
+insert t1 values (1)
+/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
@@ -185,9 +209,11 @@ ROLLBACK /* added by mysqlbinlog */;
DELIMITER /*!*/;
use test/*!*/;
SET TIMESTAMP=1108844556/*!*/;
-BEGIN/*!*/;
+BEGIN
+/*!*/;
SET TIMESTAMP=1108844555/*!*/;
-insert t1 values (1)/*!*/;
+insert t1 values (1)
+/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
@@ -246,7 +272,8 @@ SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.
CREATE DEFINER=`root`@`localhost` procedure p1()
begin
select 1;
-end/*!*/;
+end
+/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
@@ -288,27 +315,36 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
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 varchar(64) character set utf8)/*!*/;
+create table t1 (a varchar(64) character set utf8)
+/*!*/;
SET TIMESTAMP=1000000000/*!*/;
-load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-6-0' INTO table t1/*!*/;
+load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-#-#' INTO table t1
+/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.collation_database=7/*!*/;
-load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-7-0' INTO table t1/*!*/;
+load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-#-#' INTO table t1
+/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
-load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-8-0' INTO table t1/*!*/;
+load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-#-#' INTO table t1
+/*!*/;
SET TIMESTAMP=1000000000/*!*/;
-load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-9-0' INTO table t1/*!*/;
+load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-#-#' INTO table t1
+/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.collation_database=7/*!*/;
-load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-a-0' INTO table t1/*!*/;
+load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-a-0' INTO table t1
+/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
-load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-b-0' INTO table t1/*!*/;
+load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-b-0' INTO table t1
+/*!*/;
SET TIMESTAMP=1000000000/*!*/;
-load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-c-0' INTO table t1 character set koi8r/*!*/;
+load data LOCAL INFILE 'MYSQLTEST_VARDIR/tmp/SQL_LOAD_MB-c-0' INTO table t1 character set koi8r
+/*!*/;
SET TIMESTAMP=1000000000/*!*/;
-drop table t1/*!*/;
+drop table t1
+/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
@@ -326,6 +362,55 @@ flush logs;
drop table t1;
1
drop table t1;
+shell> mysqlbinlog std_data/corrupt-relay-bin.000624 > var/tmp/bug31793.sql
End of 5.0 tests
flush logs;
+BUG#31611: Security risk with BINLOG statement
+SET BINLOG_FORMAT=ROW;
+CREATE DATABASE mysqltest1;
+CREATE USER untrusted@localhost;
+GRANT SELECT ON mysqltest1.* TO untrusted@localhost;
+SHOW GRANTS FOR untrusted@localhost;
+Grants for untrusted@localhost
+GRANT USAGE ON *.* TO 'untrusted'@'localhost'
+GRANT SELECT ON `mysqltest1`.* TO 'untrusted'@'localhost'
+USE mysqltest1;
+CREATE TABLE t1 (a INT, b CHAR(64));
+flush logs;
+INSERT INTO t1 VALUES (1,USER());
+flush logs;
+mysqlbinlog var/log/master-bin.000017 > var/tmp/bug31611.sql
+mysql mysqltest1 -uuntrusted < var/tmp/bug31611.sql
+INSERT INTO t1 VALUES (1,USER());
+ERROR 42000: INSERT command denied to user 'untrusted'@'localhost' for table 't1'
+SELECT * FROM t1;
+a b
+1 root@localhost
+DROP DATABASE mysqltest1;
+DROP USER untrusted@localhost;
+BUG#32580: mysqlbinlog cannot read binlog event with user variables
+USE test;
+SET BINLOG_FORMAT = STATEMENT;
+FLUSH LOGS;
+CREATE TABLE t1 (a_real FLOAT, an_int INT, a_decimal DECIMAL(5,2), a_string CHAR(32));
+SET @a_real = rand(20) * 1000;
+SET @an_int = 1000;
+SET @a_decimal = CAST(rand(19) * 999 AS DECIMAL(5,2));
+SET @a_string = 'Just a test';
+INSERT INTO t1 VALUES (@a_real, @an_int, @a_decimal, @a_string);
+FLUSH LOGS;
+SELECT * FROM t1;
+a_real 158.883
+an_int 1000
+a_decimal 907.79
+a_string Just a test
+DROP TABLE t1;
+>> mysqlbinlog var/log/master-bin.000019 > var/tmp/bug32580.sql
+>> mysql test < var/tmp/bug32580.sql
+SELECT * FROM t1;
+a_real 158.883
+an_int 1000
+a_decimal 907.79
+a_string Just a test
+DROP TABLE t1;
End of 5.1 tests
diff --git a/mysql-test/r/mysqlbinlog2.result b/mysql-test/r/mysqlbinlog2.result
index 5347787d829..0c9ba34fc61 100644
--- a/mysql-test/r/mysqlbinlog2.result
+++ b/mysql-test/r/mysqlbinlog2.result
@@ -29,42 +29,48 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
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))/*!*/;
+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")/*!*/;
+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")/*!*/;
+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")/*!*/;
+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")/*!*/;
+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")/*!*/;
+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 ;
@@ -84,19 +90,24 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
SET @@session.sql_mode=0/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
-insert into t1 values(null, "a")/*!*/;
+insert into t1 values(null, "a")
+/*!*/;
SET INSERT_ID=2/*!*/;
SET TIMESTAMP=1579609942/*!*/;
-insert into t1 values(null, "b")/*!*/;
+insert into t1 values(null, "b")
+/*!*/;
SET INSERT_ID=3/*!*/;
SET TIMESTAMP=1579609944/*!*/;
-insert into t1 values(null, "c")/*!*/;
+insert into t1 values(null, "c")
+/*!*/;
SET INSERT_ID=4/*!*/;
SET TIMESTAMP=1579609946/*!*/;
-insert into t1 values(null, "d")/*!*/;
+insert into t1 values(null, "d")
+/*!*/;
SET INSERT_ID=5/*!*/;
SET TIMESTAMP=1579609946/*!*/;
-insert into t1 values(null, "e")/*!*/;
+insert into t1 values(null, "e")
+/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
@@ -106,6 +117,7 @@ ROLLBACK /* added by mysqlbinlog */;
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
+ROLLBACK/*!*/;
SET INSERT_ID=4/*!*/;
use test/*!*/;
SET TIMESTAMP=1579609946/*!*/;
@@ -113,10 +125,12 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
SET @@session.sql_mode=0/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
-insert into t1 values(null, "d")/*!*/;
+insert into t1 values(null, "d")
+/*!*/;
SET INSERT_ID=5/*!*/;
SET TIMESTAMP=1579609946/*!*/;
-insert into t1 values(null, "e")/*!*/;
+insert into t1 values(null, "e")
+/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
@@ -133,16 +147,20 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
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))/*!*/;
+create table t1 (a int auto_increment not null primary key, b char(3))
+/*!*/;
SET INSERT_ID=1/*!*/;
SET TIMESTAMP=1579609942/*!*/;
-insert into t1 values(null, "a")/*!*/;
+insert into t1 values(null, "a")
+/*!*/;
SET INSERT_ID=2/*!*/;
SET TIMESTAMP=1579609942/*!*/;
-insert into t1 values(null, "b")/*!*/;
+insert into t1 values(null, "b")
+/*!*/;
SET INSERT_ID=3/*!*/;
SET TIMESTAMP=1579609944/*!*/;
-insert into t1 values(null, "c")/*!*/;
+insert into t1 values(null, "c")
+/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
@@ -152,6 +170,7 @@ ROLLBACK /* added by mysqlbinlog */;
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
+ROLLBACK/*!*/;
SET INSERT_ID=4/*!*/;
use test/*!*/;
SET TIMESTAMP=1579609946/*!*/;
@@ -159,7 +178,8 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
SET @@session.sql_mode=0/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
-insert into t1 values(null, "d")/*!*/;
+insert into t1 values(null, "d")
+/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
@@ -177,13 +197,16 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
SET @@session.sql_mode=0/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
-insert into t1 values(null, "c")/*!*/;
+insert into t1 values(null, "c")
+/*!*/;
SET INSERT_ID=4/*!*/;
SET TIMESTAMP=1579609946/*!*/;
-insert into t1 values(null, "d")/*!*/;
+insert into t1 values(null, "d")
+/*!*/;
SET INSERT_ID=5/*!*/;
SET TIMESTAMP=1579609946/*!*/;
-insert into t1 values(null, "e")/*!*/;
+insert into t1 values(null, "e")
+/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
@@ -200,13 +223,16 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
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))/*!*/;
+create table t1 (a int auto_increment not null primary key, b char(3))
+/*!*/;
SET INSERT_ID=1/*!*/;
SET TIMESTAMP=1579609942/*!*/;
-insert into t1 values(null, "a")/*!*/;
+insert into t1 values(null, "a")
+/*!*/;
SET INSERT_ID=2/*!*/;
SET TIMESTAMP=1579609942/*!*/;
-insert into t1 values(null, "b")/*!*/;
+insert into t1 values(null, "b")
+/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
@@ -224,22 +250,28 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
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))/*!*/;
+create table t1 (a int auto_increment not null primary key, b char(3))
+/*!*/;
SET INSERT_ID=1/*!*/;
SET TIMESTAMP=1579609942/*!*/;
-insert into t1 values(null, "a")/*!*/;
+insert into t1 values(null, "a")
+/*!*/;
SET INSERT_ID=2/*!*/;
SET TIMESTAMP=1579609942/*!*/;
-insert into t1 values(null, "b")/*!*/;
+insert into t1 values(null, "b")
+/*!*/;
SET INSERT_ID=3/*!*/;
SET TIMESTAMP=1579609944/*!*/;
-insert into t1 values(null, "c")/*!*/;
+insert into t1 values(null, "c")
+/*!*/;
SET INSERT_ID=4/*!*/;
SET TIMESTAMP=1579609946/*!*/;
-insert into t1 values(null, "d")/*!*/;
+insert into t1 values(null, "d")
+/*!*/;
SET INSERT_ID=5/*!*/;
SET TIMESTAMP=1579609946/*!*/;
-insert into t1 values(null, "e")/*!*/;
+insert into t1 values(null, "e")
+/*!*/;
DELIMITER ;
DELIMITER /*!*/;
SET INSERT_ID=6/*!*/;
@@ -249,7 +281,8 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
SET @@session.sql_mode=0/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
-insert into t1 values(null, "f")/*!*/;
+insert into t1 values(null, "f")
+/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
@@ -267,19 +300,24 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
SET @@session.sql_mode=0/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
-insert into t1 values(null, "a")/*!*/;
+insert into t1 values(null, "a")
+/*!*/;
SET INSERT_ID=2/*!*/;
SET TIMESTAMP=1579609942/*!*/;
-insert into t1 values(null, "b")/*!*/;
+insert into t1 values(null, "b")
+/*!*/;
SET INSERT_ID=3/*!*/;
SET TIMESTAMP=1579609944/*!*/;
-insert into t1 values(null, "c")/*!*/;
+insert into t1 values(null, "c")
+/*!*/;
SET INSERT_ID=4/*!*/;
SET TIMESTAMP=1579609946/*!*/;
-insert into t1 values(null, "d")/*!*/;
+insert into t1 values(null, "d")
+/*!*/;
SET INSERT_ID=5/*!*/;
SET TIMESTAMP=1579609946/*!*/;
-insert into t1 values(null, "e")/*!*/;
+insert into t1 values(null, "e")
+/*!*/;
DELIMITER ;
DELIMITER /*!*/;
SET INSERT_ID=6/*!*/;
@@ -289,7 +327,8 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
SET @@session.sql_mode=0/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
-insert into t1 values(null, "f")/*!*/;
+insert into t1 values(null, "f")
+/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
@@ -299,6 +338,7 @@ ROLLBACK /* added by mysqlbinlog */;
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
+ROLLBACK/*!*/;
SET INSERT_ID=4/*!*/;
use test/*!*/;
SET TIMESTAMP=1579609946/*!*/;
@@ -306,10 +346,12 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
SET @@session.sql_mode=0/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
-insert into t1 values(null, "d")/*!*/;
+insert into t1 values(null, "d")
+/*!*/;
SET INSERT_ID=5/*!*/;
SET TIMESTAMP=1579609946/*!*/;
-insert into t1 values(null, "e")/*!*/;
+insert into t1 values(null, "e")
+/*!*/;
DELIMITER ;
DELIMITER /*!*/;
SET INSERT_ID=6/*!*/;
@@ -319,7 +361,8 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
SET @@session.sql_mode=0/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
-insert into t1 values(null, "f")/*!*/;
+insert into t1 values(null, "f")
+/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
@@ -336,22 +379,28 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
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))/*!*/;
+create table t1 (a int auto_increment not null primary key, b char(3))
+/*!*/;
SET INSERT_ID=1/*!*/;
SET TIMESTAMP=1579609942/*!*/;
-insert into t1 values(null, "a")/*!*/;
+insert into t1 values(null, "a")
+/*!*/;
SET INSERT_ID=2/*!*/;
SET TIMESTAMP=1579609942/*!*/;
-insert into t1 values(null, "b")/*!*/;
+insert into t1 values(null, "b")
+/*!*/;
SET INSERT_ID=3/*!*/;
SET TIMESTAMP=1579609944/*!*/;
-insert into t1 values(null, "c")/*!*/;
+insert into t1 values(null, "c")
+/*!*/;
SET INSERT_ID=4/*!*/;
SET TIMESTAMP=1579609946/*!*/;
-insert into t1 values(null, "d")/*!*/;
+insert into t1 values(null, "d")
+/*!*/;
SET INSERT_ID=5/*!*/;
SET TIMESTAMP=1579609946/*!*/;
-insert into t1 values(null, "e")/*!*/;
+insert into t1 values(null, "e")
+/*!*/;
DELIMITER ;
DELIMITER /*!*/;
SET INSERT_ID=6/*!*/;
@@ -372,13 +421,16 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
SET @@session.sql_mode=0/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
-insert into t1 values(null, "c")/*!*/;
+insert into t1 values(null, "c")
+/*!*/;
SET INSERT_ID=4/*!*/;
SET TIMESTAMP=1579609946/*!*/;
-insert into t1 values(null, "d")/*!*/;
+insert into t1 values(null, "d")
+/*!*/;
SET INSERT_ID=5/*!*/;
SET TIMESTAMP=1579609946/*!*/;
-insert into t1 values(null, "e")/*!*/;
+insert into t1 values(null, "e")
+/*!*/;
DELIMITER ;
DELIMITER /*!*/;
SET INSERT_ID=6/*!*/;
@@ -388,7 +440,8 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
SET @@session.sql_mode=0/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
-insert into t1 values(null, "f")/*!*/;
+insert into t1 values(null, "f")
+/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
@@ -405,13 +458,16 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
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))/*!*/;
+create table t1 (a int auto_increment not null primary key, b char(3))
+/*!*/;
SET INSERT_ID=1/*!*/;
SET TIMESTAMP=1579609942/*!*/;
-insert into t1 values(null, "a")/*!*/;
+insert into t1 values(null, "a")
+/*!*/;
SET INSERT_ID=2/*!*/;
SET TIMESTAMP=1579609942/*!*/;
-insert into t1 values(null, "b")/*!*/;
+insert into t1 values(null, "b")
+/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
@@ -428,22 +484,28 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
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))/*!*/;
+create table t1 (a int auto_increment not null primary key, b char(3))
+/*!*/;
SET INSERT_ID=1/*!*/;
SET TIMESTAMP=1579609942/*!*/;
-insert into t1 values(null, "a")/*!*/;
+insert into t1 values(null, "a")
+/*!*/;
SET INSERT_ID=2/*!*/;
SET TIMESTAMP=1579609942/*!*/;
-insert into t1 values(null, "b")/*!*/;
+insert into t1 values(null, "b")
+/*!*/;
SET INSERT_ID=3/*!*/;
SET TIMESTAMP=1579609944/*!*/;
-insert into t1 values(null, "c")/*!*/;
+insert into t1 values(null, "c")
+/*!*/;
SET INSERT_ID=4/*!*/;
SET TIMESTAMP=1579609946/*!*/;
-insert into t1 values(null, "d")/*!*/;
+insert into t1 values(null, "d")
+/*!*/;
SET INSERT_ID=5/*!*/;
SET TIMESTAMP=1579609946/*!*/;
-insert into t1 values(null, "e")/*!*/;
+insert into t1 values(null, "e")
+/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
@@ -461,19 +523,24 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
SET @@session.sql_mode=0/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
-insert into t1 values(null, "a")/*!*/;
+insert into t1 values(null, "a")
+/*!*/;
SET INSERT_ID=2/*!*/;
SET TIMESTAMP=1579609942/*!*/;
-insert into t1 values(null, "b")/*!*/;
+insert into t1 values(null, "b")
+/*!*/;
SET INSERT_ID=3/*!*/;
SET TIMESTAMP=1579609944/*!*/;
-insert into t1 values(null, "c")/*!*/;
+insert into t1 values(null, "c")
+/*!*/;
SET INSERT_ID=4/*!*/;
SET TIMESTAMP=1579609946/*!*/;
-insert into t1 values(null, "d")/*!*/;
+insert into t1 values(null, "d")
+/*!*/;
SET INSERT_ID=5/*!*/;
SET TIMESTAMP=1579609946/*!*/;
-insert into t1 values(null, "e")/*!*/;
+insert into t1 values(null, "e")
+/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
@@ -490,10 +557,12 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
SET @@session.sql_mode=0/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
-insert into t1 values(null, "d")/*!*/;
+insert into t1 values(null, "d")
+/*!*/;
SET INSERT_ID=5/*!*/;
SET TIMESTAMP=1579609946/*!*/;
-insert into t1 values(null, "e")/*!*/;
+insert into t1 values(null, "e")
+/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
@@ -510,16 +579,20 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
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))/*!*/;
+create table t1 (a int auto_increment not null primary key, b char(3))
+/*!*/;
SET INSERT_ID=1/*!*/;
SET TIMESTAMP=1579609942/*!*/;
-insert into t1 values(null, "a")/*!*/;
+insert into t1 values(null, "a")
+/*!*/;
SET INSERT_ID=2/*!*/;
SET TIMESTAMP=1579609942/*!*/;
-insert into t1 values(null, "b")/*!*/;
+insert into t1 values(null, "b")
+/*!*/;
SET INSERT_ID=3/*!*/;
SET TIMESTAMP=1579609944/*!*/;
-insert into t1 values(null, "c")/*!*/;
+insert into t1 values(null, "c")
+/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
@@ -536,7 +609,8 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
SET @@session.sql_mode=0/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
-insert into t1 values(null, "d")/*!*/;
+insert into t1 values(null, "d")
+/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
@@ -554,13 +628,16 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
SET @@session.sql_mode=0/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
-insert into t1 values(null, "c")/*!*/;
+insert into t1 values(null, "c")
+/*!*/;
SET INSERT_ID=4/*!*/;
SET TIMESTAMP=1579609946/*!*/;
-insert into t1 values(null, "d")/*!*/;
+insert into t1 values(null, "d")
+/*!*/;
SET INSERT_ID=5/*!*/;
SET TIMESTAMP=1579609946/*!*/;
-insert into t1 values(null, "e")/*!*/;
+insert into t1 values(null, "e")
+/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
@@ -577,13 +654,16 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
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))/*!*/;
+create table t1 (a int auto_increment not null primary key, b char(3))
+/*!*/;
SET INSERT_ID=1/*!*/;
SET TIMESTAMP=1579609942/*!*/;
-insert into t1 values(null, "a")/*!*/;
+insert into t1 values(null, "a")
+/*!*/;
SET INSERT_ID=2/*!*/;
SET TIMESTAMP=1579609942/*!*/;
-insert into t1 values(null, "b")/*!*/;
+insert into t1 values(null, "b")
+/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
@@ -600,22 +680,28 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
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))/*!*/;
+create table t1 (a int auto_increment not null primary key, b char(3))
+/*!*/;
SET INSERT_ID=1/*!*/;
SET TIMESTAMP=1579609942/*!*/;
-insert into t1 values(null, "a")/*!*/;
+insert into t1 values(null, "a")
+/*!*/;
SET INSERT_ID=2/*!*/;
SET TIMESTAMP=1579609942/*!*/;
-insert into t1 values(null, "b")/*!*/;
+insert into t1 values(null, "b")
+/*!*/;
SET INSERT_ID=3/*!*/;
SET TIMESTAMP=1579609944/*!*/;
-insert into t1 values(null, "c")/*!*/;
+insert into t1 values(null, "c")
+/*!*/;
SET INSERT_ID=4/*!*/;
SET TIMESTAMP=1579609946/*!*/;
-insert into t1 values(null, "d")/*!*/;
+insert into t1 values(null, "d")
+/*!*/;
SET INSERT_ID=5/*!*/;
SET TIMESTAMP=1579609946/*!*/;
-insert into t1 values(null, "e")/*!*/;
+insert into t1 values(null, "e")
+/*!*/;
DELIMITER ;
DELIMITER /*!*/;
SET INSERT_ID=6/*!*/;
@@ -625,7 +711,8 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
SET @@session.sql_mode=0/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
-insert into t1 values(null, "f")/*!*/;
+insert into t1 values(null, "f")
+/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
@@ -643,19 +730,24 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
SET @@session.sql_mode=0/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
-insert into t1 values(null, "a")/*!*/;
+insert into t1 values(null, "a")
+/*!*/;
SET INSERT_ID=2/*!*/;
SET TIMESTAMP=1579609942/*!*/;
-insert into t1 values(null, "b")/*!*/;
+insert into t1 values(null, "b")
+/*!*/;
SET INSERT_ID=3/*!*/;
SET TIMESTAMP=1579609944/*!*/;
-insert into t1 values(null, "c")/*!*/;
+insert into t1 values(null, "c")
+/*!*/;
SET INSERT_ID=4/*!*/;
SET TIMESTAMP=1579609946/*!*/;
-insert into t1 values(null, "d")/*!*/;
+insert into t1 values(null, "d")
+/*!*/;
SET INSERT_ID=5/*!*/;
SET TIMESTAMP=1579609946/*!*/;
-insert into t1 values(null, "e")/*!*/;
+insert into t1 values(null, "e")
+/*!*/;
DELIMITER ;
DELIMITER /*!*/;
SET INSERT_ID=6/*!*/;
@@ -665,7 +757,8 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
SET @@session.sql_mode=0/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
-insert into t1 values(null, "f")/*!*/;
+insert into t1 values(null, "f")
+/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
@@ -682,10 +775,12 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
SET @@session.sql_mode=0/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
-insert into t1 values(null, "d")/*!*/;
+insert into t1 values(null, "d")
+/*!*/;
SET INSERT_ID=5/*!*/;
SET TIMESTAMP=1579609946/*!*/;
-insert into t1 values(null, "e")/*!*/;
+insert into t1 values(null, "e")
+/*!*/;
DELIMITER ;
DELIMITER /*!*/;
SET INSERT_ID=6/*!*/;
@@ -695,7 +790,8 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
SET @@session.sql_mode=0/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
-insert into t1 values(null, "f")/*!*/;
+insert into t1 values(null, "f")
+/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
@@ -712,22 +808,28 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
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))/*!*/;
+create table t1 (a int auto_increment not null primary key, b char(3))
+/*!*/;
SET INSERT_ID=1/*!*/;
SET TIMESTAMP=1579609942/*!*/;
-insert into t1 values(null, "a")/*!*/;
+insert into t1 values(null, "a")
+/*!*/;
SET INSERT_ID=2/*!*/;
SET TIMESTAMP=1579609942/*!*/;
-insert into t1 values(null, "b")/*!*/;
+insert into t1 values(null, "b")
+/*!*/;
SET INSERT_ID=3/*!*/;
SET TIMESTAMP=1579609944/*!*/;
-insert into t1 values(null, "c")/*!*/;
+insert into t1 values(null, "c")
+/*!*/;
SET INSERT_ID=4/*!*/;
SET TIMESTAMP=1579609946/*!*/;
-insert into t1 values(null, "d")/*!*/;
+insert into t1 values(null, "d")
+/*!*/;
SET INSERT_ID=5/*!*/;
SET TIMESTAMP=1579609946/*!*/;
-insert into t1 values(null, "e")/*!*/;
+insert into t1 values(null, "e")
+/*!*/;
DELIMITER ;
DELIMITER /*!*/;
SET INSERT_ID=6/*!*/;
@@ -748,13 +850,16 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
SET @@session.sql_mode=0/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
-insert into t1 values(null, "c")/*!*/;
+insert into t1 values(null, "c")
+/*!*/;
SET INSERT_ID=4/*!*/;
SET TIMESTAMP=1579609946/*!*/;
-insert into t1 values(null, "d")/*!*/;
+insert into t1 values(null, "d")
+/*!*/;
SET INSERT_ID=5/*!*/;
SET TIMESTAMP=1579609946/*!*/;
-insert into t1 values(null, "e")/*!*/;
+insert into t1 values(null, "e")
+/*!*/;
DELIMITER ;
DELIMITER /*!*/;
SET INSERT_ID=6/*!*/;
@@ -764,7 +869,8 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
SET @@session.sql_mode=0/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
-insert into t1 values(null, "f")/*!*/;
+insert into t1 values(null, "f")
+/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
@@ -781,13 +887,16 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
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))/*!*/;
+create table t1 (a int auto_increment not null primary key, b char(3))
+/*!*/;
SET INSERT_ID=1/*!*/;
SET TIMESTAMP=1579609942/*!*/;
-insert into t1 values(null, "a")/*!*/;
+insert into t1 values(null, "a")
+/*!*/;
SET INSERT_ID=2/*!*/;
SET TIMESTAMP=1579609942/*!*/;
-insert into t1 values(null, "b")/*!*/;
+insert into t1 values(null, "b")
+/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
@@ -804,25 +913,32 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
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))/*!*/;
+create table t1 (a int auto_increment not null primary key, b char(3))
+/*!*/;
SET INSERT_ID=1/*!*/;
SET TIMESTAMP=1579609942/*!*/;
-insert into t1 values(null, "a")/*!*/;
+insert into t1 values(null, "a")
+/*!*/;
SET INSERT_ID=2/*!*/;
SET TIMESTAMP=1579609942/*!*/;
-insert into t1 values(null, "b")/*!*/;
+insert into t1 values(null, "b")
+/*!*/;
SET INSERT_ID=3/*!*/;
SET TIMESTAMP=1579609944/*!*/;
-insert into t1 values(null, "c")/*!*/;
+insert into t1 values(null, "c")
+/*!*/;
SET INSERT_ID=4/*!*/;
SET TIMESTAMP=1579609946/*!*/;
-insert into t1 values(null, "d")/*!*/;
+insert into t1 values(null, "d")
+/*!*/;
SET INSERT_ID=5/*!*/;
SET TIMESTAMP=1579609946/*!*/;
-insert into t1 values(null, "e")/*!*/;
+insert into t1 values(null, "e")
+/*!*/;
SET INSERT_ID=6/*!*/;
SET TIMESTAMP=1579609943/*!*/;
-insert into t1 values(null, "f")/*!*/;
+insert into t1 values(null, "f")
+/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
diff --git a/mysql-test/r/mysqlcheck.result b/mysql-test/r/mysqlcheck.result
index b8ada0adff9..b8fdd04d24a 100644
--- a/mysql-test/r/mysqlcheck.result
+++ b/mysql-test/r/mysqlcheck.result
@@ -1,4 +1,4 @@
-DROP TABLE IF EXISTS t1;
+DROP TABLE IF EXISTS t1, `t``1`, `t 1`;
drop view if exists v1;
drop database if exists client_test_db;
mysql.columns_priv OK
@@ -57,4 +57,63 @@ test.t1 OK
test.t1 OK
drop view v1;
drop table t1;
+create table `t``1`(a int);
+create table `t 1`(a int);
+test.t 1 OK
+test.t`1 OK
+drop table `t``1`, `t 1`;
+create database d_bug25347;
+use d_bug25347;
+create table t_bug25347 (a int);
+create view v_bug25347 as select * from t_bug25347;
+insert into t_bug25347 values (1),(2),(3);
+flush tables;
+removing and creating
+d_bug25347.t_bug25347
+Error : Incorrect file format 't_bug25347'
+error : Corrupt
+insert into t_bug25347 values (4),(5),(6);
+ERROR HY000: Incorrect file format 't_bug25347'
+d_bug25347.t_bug25347
+warning : Number of rows changed from 0 to 3
+status : OK
+insert into t_bug25347 values (7),(8),(9);
+select * from t_bug25347;
+a
+1
+2
+3
+7
+8
+9
+select * from v_bug25347;
+a
+1
+2
+3
+7
+8
+9
+drop view v_bug25347;
+drop table t_bug25347;
+drop database d_bug25347;
+use test;
End of 5.0 tests
+create table t1(a int);
+create view v1 as select * from t1;
+show tables;
+Tables_in_test
+t1
+v1
+show tables;
+Tables_in_test
+t1
+#mysql50#v-1
+v1
+show tables;
+Tables_in_test
+t1
+v1
+v-1
+drop view v1, `v-1`;
+drop table t1;
diff --git a/mysql-test/r/mysqldump.result b/mysql-test/r/mysqldump.result
index d8688ea5509..d07aed5317a 100644
--- a/mysql-test/r/mysqldump.result
+++ b/mysql-test/r/mysqldump.result
@@ -3805,6 +3805,28 @@ c1
2
DROP TABLE t1,t2;
#
+# Bug#29815: new option for suppressing last line of mysqldump:
+# "Dump completed on"
+#
+# --skip-dump-date:
+--
+
+
+
+-- Dump completed
+# --dump-date:
+--
+
+
+
+-- Dump completed on DATE
+# --dump-date (default):
+--
+
+
+
+-- Dump completed on DATE
+#
# End of 5.0 tests
#
drop table if exists t1;
@@ -4190,5 +4212,24 @@ TRUNCATE mysql.event;
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
#
+# Bug#31113 mysqldump 5.1 can't handle a dash ("-") in database names
+#
+create database `test-database`;
+use `test-database`;
+create table test (a int);
+DROP TABLE IF EXISTS `test`;
+SET @saved_cs_client = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `test` (
+ `a` int(11) DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+LOCK TABLES `test` WRITE;
+/*!40000 ALTER TABLE `test` DISABLE KEYS */;
+/*!40000 ALTER TABLE `test` ENABLE KEYS */;
+UNLOCK TABLES;
+drop database `test-database`;
+use test;
+#
# End of 5.1 tests
#
diff --git a/mysql-test/r/mysqlshow.result b/mysql-test/r/mysqlshow.result
index 14d8e4f464b..42081c309d0 100644
--- a/mysql-test/r/mysqlshow.result
+++ b/mysql-test/r/mysqlshow.result
@@ -93,6 +93,7 @@ Database: information_schema
| PARTITIONS |
| PLUGINS |
| PROCESSLIST |
+| PROFILING |
| REFERENTIAL_CONSTRAINTS |
| ROUTINES |
| SCHEMATA |
@@ -125,6 +126,7 @@ Database: INFORMATION_SCHEMA
| PARTITIONS |
| PLUGINS |
| PROCESSLIST |
+| PROFILING |
| REFERENTIAL_CONSTRAINTS |
| ROUTINES |
| SCHEMATA |
diff --git a/mysql-test/r/mysqlslap.result b/mysql-test/r/mysqlslap.result
index dfe721d10d2..4cb01490407 100644
--- a/mysql-test/r/mysqlslap.result
+++ b/mysql-test/r/mysqlslap.result
@@ -177,13 +177,17 @@ INSERT INTO t1 VALUES (1, 'This is a test');
insert into t2 values ('test', 'test2');
SET AUTOCOMMIT=0;
SHOW TABLES;
+SET AUTOCOMMIT=0;
select * from t1;
+COMMIT;
select * from t2;
COMMIT;
select * from t1;
+COMMIT;
select * from t2;
COMMIT;
select * from t1;
+COMMIT;
select * from t2;
COMMIT;
COMMIT;
@@ -199,15 +203,25 @@ INSERT INTO t1 VALUES (1, 'This is a test');
insert into t2 values ('test', 'test2');
SET AUTOCOMMIT=0;
SHOW TABLES;
+SET AUTOCOMMIT=0;
select * from t1;
+COMMIT;
select * from t2;
COMMIT;
select * from t1;
+COMMIT;
select * from t2;
COMMIT;
select * from t1;
+COMMIT;
select * from t2;
COMMIT;
COMMIT;
SHOW TABLES;
DROP SCHEMA IF EXISTS `mysqlslap`;
+#
+# Bug #29985: mysqlslap -- improper handling of resultsets in SPROCs
+#
+DROP PROCEDURE IF EXISTS p1;
+CREATE PROCEDURE p1() SELECT 1;
+DROP PROCEDURE p1;
diff --git a/mysql-test/r/named_pipe.result b/mysql-test/r/named_pipe.result
index 588b7570d8f..eb93c5f6344 100644
--- a/mysql-test/r/named_pipe.result
+++ b/mysql-test/r/named_pipe.result
@@ -605,11 +605,11 @@ id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t3 ref period period 4 test.t1.period 4181
explain select * from t3 as t1,t3 where t1.period=t3.period order by t3.period limit 10;
id select_type table type possible_keys key key_len ref rows Extra
-1 SIMPLE t3 ALL period NULL NULL NULL 41810 Using filesort
+1 SIMPLE t3 index period period 4 NULL 1
1 SIMPLE t1 ref period period 4 test.t3.period 4181
explain select * from t3 as t1,t3 where t1.period=t3.period order by t1.period limit 10;
id select_type table type possible_keys key key_len ref rows Extra
-1 SIMPLE t1 ALL period NULL NULL NULL 41810 Using filesort
+1 SIMPLE t1 index period period 4 NULL 1
1 SIMPLE t3 ref period period 4 test.t1.period 4181
select period from t1;
period
diff --git a/mysql-test/r/no-threads.result b/mysql-test/r/no-threads.result
index 50e52138be8..9bc2dad6e2a 100644
--- a/mysql-test/r/no-threads.result
+++ b/mysql-test/r/no-threads.result
@@ -4,3 +4,10 @@ select 1+1;
select 1+2;
1+2
3
+SHOW GLOBAL VARIABLES LIKE 'thread_handling';
+Variable_name Value
+thread_handling no-threads
+select @@session.thread_handling;
+ERROR HY000: Variable 'thread_handling' is a GLOBAL variable
+set GLOBAL thread_handling='one-thread';
+ERROR HY000: Variable 'thread_handling' is a read only variable
diff --git a/mysql-test/r/not_embedded_server.result b/mysql-test/r/not_embedded_server.result
index 63351d187b6..f2ffe28895d 100644
--- a/mysql-test/r/not_embedded_server.result
+++ b/mysql-test/r/not_embedded_server.result
@@ -1,5 +1,5 @@
prepare stmt1 from ' SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND!=\'Daemon\' ';
execute stmt1;
ID USER HOST DB COMMAND TIME STATE INFO
-number root localhost test Query time preparing SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND!='Daemon'
+number root localhost test Query time executing SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND!='Daemon'
deallocate prepare stmt1;
diff --git a/mysql-test/r/null.result b/mysql-test/r/null.result
index bf9d9764db2..5a2ebc37cc8 100644
--- a/mysql-test/r/null.result
+++ b/mysql-test/r/null.result
@@ -1,4 +1,4 @@
-drop table if exists t1;
+drop table if exists t1, t2;
select null,\N,isnull(null),isnull(1/0),isnull(1/0 = null),ifnull(null,1),ifnull(null,"TRUE"),ifnull("TRUE","ERROR"),1/0 is null,1 is not null;
NULL NULL isnull(null) isnull(1/0) isnull(1/0 = null) ifnull(null,1) ifnull(null,"TRUE") ifnull("TRUE","ERROR") 1/0 is null 1 is not null
NULL NULL 1 1 1 1 TRUE TRUE 1 1
@@ -93,11 +93,9 @@ INSERT INTO t1 SET a = "", d= "2003-01-14 03:54:55";
Warnings:
Warning 1265 Data truncated for column 'd' at row 1
UPDATE t1 SET d=1/NULL;
-Warnings:
-Warning 1265 Data truncated for column 'd' at row 1
+ERROR 23000: Column 'd' cannot be null
UPDATE t1 SET d=NULL;
-Warnings:
-Warning 1048 Column 'd' cannot be null
+ERROR 23000: Column 'd' cannot be null
INSERT INTO t1 (a) values (null);
ERROR 23000: Column 'a' cannot be null
INSERT INTO t1 (a) values (1/null);
@@ -132,7 +130,7 @@ Warning 1048 Column 'd' cannot be null
Warning 1048 Column 'd' cannot be null
select * from t1;
a b c d
- 0 0000-00-00 00:00:00 0
+ 0 0000-00-00 00:00:00 2003
0 0000-00-00 00:00:00 0
0 0000-00-00 00:00:00 0
0 0000-00-00 00:00:00 0
@@ -320,3 +318,26 @@ bug19145c CREATE TABLE `bug19145c` (
drop table bug19145a;
drop table bug19145b;
drop table bug19145c;
+# End of 4.1 tests
+#
+# Bug #31471: decimal_bin_size: Assertion `scale >= 0 &&
+# precision > 0 && scale <= precision'
+#
+CREATE TABLE t1 (a DECIMAL (1, 0) ZEROFILL, b DECIMAL (1, 0) ZEROFILL);
+INSERT INTO t1 (a, b) VALUES (0, 0);
+CREATE TABLE t2 SELECT IFNULL(a, b) FROM t1;
+DESCRIBE t2;
+Field Type Null Key Default Extra
+IFNULL(a, b) decimal(1,0) unsigned YES NULL
+DROP TABLE t2;
+CREATE TABLE t2 SELECT IFNULL(a, NULL) FROM t1;
+DESCRIBE t2;
+Field Type Null Key Default Extra
+IFNULL(a, NULL) decimal(1,0) YES NULL
+DROP TABLE t2;
+CREATE TABLE t2 SELECT IFNULL(NULL, b) FROM t1;
+DESCRIBE t2;
+Field Type Null Key Default Extra
+IFNULL(NULL, b) decimal(1,0) YES NULL
+DROP TABLE t1, t2;
+# End of 5.0 tests
diff --git a/mysql-test/r/olap.result b/mysql-test/r/olap.result
index 67c45b698ce..4540c9d5218 100644
--- a/mysql-test/r/olap.result
+++ b/mysql-test/r/olap.result
@@ -715,3 +715,22 @@ a SUM(a)
4 4
NULL 14
DROP TABLE t1;
+#
+# Bug#31095: Unexpected NULL constant caused server crash.
+#
+create table t1(a int);
+insert into t1 values (1),(2),(3);
+select count(a) from t1 group by null with rollup;
+count(a)
+3
+3
+drop table t1;
+##############################################################
+CREATE TABLE t1(a INT);
+INSERT INTO t1 VALUES(0);
+SELECT 1 FROM t1 GROUP BY (DATE(NULL)) WITH ROLLUP;
+1
+1
+1
+DROP TABLE t1;
+End of 5.0 tests
diff --git a/mysql-test/r/order_by.result b/mysql-test/r/order_by.result
index ff4882d6cd8..3d0f4915d0a 100644
--- a/mysql-test/r/order_by.result
+++ b/mysql-test/r/order_by.result
@@ -1131,3 +1131,288 @@ id c3
186 14
196 14
DROP TABLE t1,t2;
+CREATE TABLE t1 (
+a INT,
+b INT,
+PRIMARY KEY (a),
+KEY ab(a, b)
+);
+INSERT INTO t1 VALUES (1,1),(2,2),(3,3),(4,4);
+INSERT INTO t1 SELECT a + 4, b + 4 FROM t1;
+INSERT INTO t1 SELECT a + 8, b + 8 FROM t1;
+INSERT INTO t1 SELECT a +16, b +16 FROM t1;
+INSERT INTO t1 SELECT a +32, b +32 FROM t1;
+INSERT INTO t1 SELECT a +64, b +64 FROM t1;
+EXPLAIN SELECT a FROM t1 IGNORE INDEX FOR GROUP BY (a, ab) GROUP BY a;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 range NULL ab 4 NULL 10 Using index for group-by
+SELECT a FROM t1 IGNORE INDEX FOR GROUP BY (a, ab) GROUP BY a;
+a
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+SELECT @tmp_tables_after = @tmp_tables_before ;
+@tmp_tables_after = @tmp_tables_before
+1
+EXPLAIN SELECT a FROM t1 IGNORE INDEX FOR ORDER BY (a, ab) ORDER BY a;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 index NULL PRIMARY 4 NULL 128 Using index
+SELECT a FROM t1 IGNORE INDEX FOR ORDER BY (a, ab) ORDER BY a;
+a
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+SELECT @tmp_tables_after = @tmp_tables_before;
+@tmp_tables_after = @tmp_tables_before
+1
+DROP TABLE t1;
diff --git a/mysql-test/r/outfile_loaddata.result b/mysql-test/r/outfile_loaddata.result
new file mode 100644
index 00000000000..4a9bdcf412d
--- /dev/null
+++ b/mysql-test/r/outfile_loaddata.result
@@ -0,0 +1,103 @@
+DROP TABLE IF EXISTS t1, t2;
+#
+# Bug#31663 FIELDS TERMINATED BY special character
+#
+CREATE TABLE t1 (i1 int, i2 int, c1 VARCHAR(256), c2 VARCHAR(256));
+INSERT INTO t1 VALUES (101, 202, '-r-', '=raker=');
+# FIELDS TERMINATED BY 'raker', warning:
+SELECT * INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/bug31663.txt' FIELDS TERMINATED BY 'raker' FROM t1;
+Warnings:
+Warning 1475 First character of the FIELDS TERMINATED string is ambiguous; please use non-optional and non-empty FIELDS ENCLOSED BY
+SELECT LOAD_FILE('MYSQLTEST_VARDIR/tmp/bug31663.txt');
+LOAD_FILE('MYSQLTEST_VARDIR/tmp/bug31663.txt')
+101raker202raker-r-raker=raker=
+
+CREATE TABLE t2 SELECT * FROM t1;
+LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug31663.txt' INTO TABLE t2 FIELDS TERMINATED BY 'raker';
+Warnings:
+Warning 1262 Row 1 was truncated; it contained more data than there were input columns
+SELECT * FROM t2;
+i1 i2 c1 c2
+101 202 -r- =raker=
+101 202 -r- =
+DROP TABLE t2;
+# Only numeric fields, FIELDS TERMINATED BY 'r', no warnings:
+SELECT i1, i2 INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/bug31663.txt' FIELDS TERMINATED BY 'r' FROM t1;
+SELECT LOAD_FILE('MYSQLTEST_VARDIR/tmp/bug31663.txt');
+LOAD_FILE('MYSQLTEST_VARDIR/tmp/bug31663.txt')
+101r202
+
+CREATE TABLE t2 SELECT i1, i2 FROM t1;
+LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug31663.txt' INTO TABLE t2 FIELDS TERMINATED BY 'r';
+SELECT i1, i2 FROM t2;
+i1 i2
+101 202
+101 202
+DROP TABLE t2;
+# FIELDS TERMINATED BY '0', warning:
+SELECT * INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/bug31663.txt' FIELDS TERMINATED BY '0' FROM t1;
+Warnings:
+Warning 1475 First character of the FIELDS TERMINATED string is ambiguous; please use non-optional and non-empty FIELDS ENCLOSED BY
+SELECT LOAD_FILE('MYSQLTEST_VARDIR/tmp/bug31663.txt');
+LOAD_FILE('MYSQLTEST_VARDIR/tmp/bug31663.txt')
+10102020-r-0=raker=
+
+CREATE TABLE t2 SELECT * FROM t1;
+LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug31663.txt' INTO TABLE t2 FIELDS TERMINATED BY '0';
+Warnings:
+Warning 1262 Row 1 was truncated; it contained more data than there were input columns
+SELECT * FROM t2;
+i1 i2 c1 c2
+101 202 -r- =raker=
+1 1 2 2
+DROP TABLE t2;
+# FIELDS OPTIONALLY ENCLOSED BY '"' TERMINATED BY '0', warning:
+SELECT * INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/bug31663.txt' FIELDS OPTIONALLY ENCLOSED BY '"' TERMINATED BY '0' FROM t1;
+Warnings:
+Warning 1475 First character of the FIELDS TERMINATED string is ambiguous; please use non-optional and non-empty FIELDS ENCLOSED BY
+SELECT LOAD_FILE('MYSQLTEST_VARDIR/tmp/bug31663.txt');
+LOAD_FILE('MYSQLTEST_VARDIR/tmp/bug31663.txt')
+10102020"-r-"0"=raker="
+
+CREATE TABLE t2 SELECT * FROM t1;
+LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug31663.txt' INTO TABLE t2 FIELDS OPTIONALLY ENCLOSED BY '"' TERMINATED BY '0';
+Warnings:
+Warning 1262 Row 1 was truncated; it contained more data than there were input columns
+SELECT * FROM t2;
+i1 i2 c1 c2
+101 202 -r- =raker=
+1 1 2 2
+DROP TABLE t2;
+# Only string fields, FIELDS OPTIONALLY ENCLOSED BY '"' TERMINATED BY '0', no warnings:
+SELECT c1, c2 INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/bug31663.txt' FIELDS OPTIONALLY ENCLOSED BY '"' TERMINATED BY '0' FROM t1;
+SELECT LOAD_FILE('MYSQLTEST_VARDIR/tmp/bug31663.txt');
+LOAD_FILE('MYSQLTEST_VARDIR/tmp/bug31663.txt')
+"-r-"0"=raker="
+
+CREATE TABLE t2 SELECT c1, c2 FROM t1;
+LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug31663.txt' INTO TABLE t2 FIELDS OPTIONALLY ENCLOSED BY '"' TERMINATED BY '0';
+SELECT c1, c2 FROM t2;
+c1 c2
+-r- =raker=
+-r- =raker=
+DROP TABLE t2;
+DROP TABLE t1;
+#
+# Bug#32533: SELECT INTO OUTFILE never escapes multibyte character
+#
+CREATE TABLE t1 (c1 VARCHAR(256));
+INSERT INTO t1 VALUES (0xC3);
+SELECT HEX(c1) FROM t1;
+HEX(c1)
+C3
+SELECT * INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/bug32533.txt' FIELDS ENCLOSED BY 0xC3 FROM t1;
+TRUNCATE t1;
+SELECT HEX(LOAD_FILE('MYSQLTEST_VARDIR/tmp/bug32533.txt'));
+HEX(LOAD_FILE('MYSQLTEST_VARDIR/tmp/bug32533.txt'))
+C35CC3C30A
+LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug32533.txt' INTO TABLE t1 FIELDS ENCLOSED BY 0xC3;
+SELECT HEX(c1) FROM t1;
+HEX(c1)
+C3
+DROP TABLE t1;
+# End of 5.0 tests.
diff --git a/mysql-test/r/packet.result b/mysql-test/r/packet.result
index dfb5595e02d..df0d9ff9adc 100644
--- a/mysql-test/r/packet.result
+++ b/mysql-test/r/packet.result
@@ -1,7 +1,15 @@
set global max_allowed_packet=100;
+Warnings:
+Warning 1292 Truncated incorrect max_allowed_packet value: '100'
set max_allowed_packet=100;
+Warnings:
+Warning 1292 Truncated incorrect max_allowed_packet value: '100'
set global net_buffer_length=100;
+Warnings:
+Warning 1292 Truncated incorrect net_buffer_length value: '100'
set net_buffer_length=100;
+Warnings:
+Warning 1292 Truncated incorrect net_buffer_length value: '100'
SELECT length("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") as len;
len
1024
diff --git a/mysql-test/r/parser.result b/mysql-test/r/parser.result
index 76326f65f08..e10bcba36c2 100644
--- a/mysql-test/r/parser.result
+++ b/mysql-test/r/parser.result
@@ -484,3 +484,66 @@ select atan(10, 20 "p2");
ERROR 42000: Incorrect parameters in the call to native function 'atan'
select atan(10 AS p1, 20 AS p2);
ERROR 42000: Incorrect parameters in the call to native function 'atan'
+DROP TABLE IF EXISTS t1;
+SELECT STR_TO_DATE('10:00 PM', '%h:%i %p') + INTERVAL 10 MINUTE;
+STR_TO_DATE('10:00 PM', '%h:%i %p') + INTERVAL 10 MINUTE
+NULL
+SELECT STR_TO_DATE('10:00 PM', '%h:%i %p') + INTERVAL (INTERVAL(1,2,3) + 1) MINUTE;
+STR_TO_DATE('10:00 PM', '%h:%i %p') + INTERVAL (INTERVAL(1,2,3) + 1) MINUTE
+NULL
+SELECT "1997-12-31 23:59:59" + INTERVAL 1 SECOND;
+"1997-12-31 23:59:59" + INTERVAL 1 SECOND
+1998-01-01 00:00:00
+SELECT 1 + INTERVAL(1,0,1,2) + 1;
+1 + INTERVAL(1,0,1,2) + 1
+4
+SELECT INTERVAL(1^1,0,1,2) + 1;
+INTERVAL(1^1,0,1,2) + 1
+2
+SELECT INTERVAL(1,0+1,2,3) * 5.5;
+INTERVAL(1,0+1,2,3) * 5.5
+5.5
+SELECT INTERVAL(3,3,1+3,4+4) / 0.5;
+INTERVAL(3,3,1+3,4+4) / 0.5
+2.0000
+SELECT (INTERVAL(1,0,1,2) + 5) * 7 + INTERVAL(1,0,1,2) / 2;
+(INTERVAL(1,0,1,2) + 5) * 7 + INTERVAL(1,0,1,2) / 2
+50.0000
+SELECT INTERVAL(1,0,1,2) + 1, 5 * INTERVAL(1,0,1,2);
+INTERVAL(1,0,1,2) + 1 5 * INTERVAL(1,0,1,2)
+3 10
+SELECT INTERVAL(0,(1*5)/2) + INTERVAL(5,4,3);
+INTERVAL(0,(1*5)/2) + INTERVAL(5,4,3)
+2
+SELECT 1^1 + INTERVAL 1+1 SECOND & 1 + INTERVAL 1+1 SECOND;
+1^1 + INTERVAL 1+1 SECOND & 1 + INTERVAL 1+1 SECOND
+NULL
+SELECT 1%2 - INTERVAL 1^1 SECOND | 1%2 - INTERVAL 1^1 SECOND;
+1%2 - INTERVAL 1^1 SECOND | 1%2 - INTERVAL 1^1 SECOND
+NULL
+CREATE TABLE t1 (a INT, b DATETIME);
+INSERT INTO t1 VALUES (INTERVAL(3,2,1) + 1, "1997-12-31 23:59:59" + INTERVAL 1 SECOND);
+SELECT * FROM t1 WHERE a = INTERVAL(3,2,1) + 1;
+a b
+3 1998-01-01 00:00:00
+DROP TABLE t1;
+DROP TABLE IF EXISTS t1,t2,t3;
+CREATE TABLE t1 (a1 INT, a2 INT, a3 INT, a4 DATETIME);
+CREATE TABLE t2 LIKE t1;
+CREATE TABLE t3 LIKE t1;
+SELECT t1.* FROM t1 AS t0, { OJ t2 INNER JOIN t1 ON (t1.a1=t2.a1) } WHERE t0.a3=2;
+a1 a2 a3 a4
+SELECT t1.*,t2.* FROM { OJ ((t1 INNER JOIN t2 ON (t1.a1=t2.a2)) LEFT OUTER JOIN t3 ON t3.a3=t2.a1)};
+a1 a2 a3 a4 a1 a2 a3 a4
+SELECT t1.*,t2.* FROM { OJ ((t1 LEFT OUTER JOIN t2 ON t1.a3=t2.a2) INNER JOIN t3 ON (t3.a1=t2.a2))};
+a1 a2 a3 a4 a1 a2 a3 a4
+SELECT t1.*,t2.* FROM { OJ (t1 LEFT OUTER JOIN t2 ON t1.a1=t2.a2) CROSS JOIN t3 ON (t3.a2=t2.a3)};
+a1 a2 a3 a4 a1 a2 a3 a4
+SELECT * FROM {oj t1 LEFT OUTER JOIN t2 ON t1.a1=t2.a3} WHERE t1.a2 > 10;
+a1 a2 a3 a4 a1 a2 a3 a4
+SELECT {fn CONCAT(a1,a2)} FROM t1;
+{fn CONCAT(a1,a2)}
+UPDATE t3 SET a4={d '1789-07-14'} WHERE a1=0;
+SELECT a1, a4 FROM t2 WHERE a4 LIKE {fn UCASE('1789-07-14')};
+a1 a4
+DROP TABLE t1, t2, t3;
diff --git a/mysql-test/r/partition.result b/mysql-test/r/partition.result
index 4e4bd0bbc0a..a361a8f6bcc 100644
--- a/mysql-test/r/partition.result
+++ b/mysql-test/r/partition.result
@@ -1,4 +1,32 @@
drop table if exists t1;
+CREATE TABLE t1 (
+d DATE NOT NULL
+)
+PARTITION BY RANGE( YEAR(d) ) (
+PARTITION p0 VALUES LESS THAN (1960),
+PARTITION p1 VALUES LESS THAN (1970),
+PARTITION p2 VALUES LESS THAN (1980),
+PARTITION p3 VALUES LESS THAN (1990)
+);
+ALTER TABLE t1 ADD PARTITION (
+PARTITION `p5` VALUES LESS THAN (2010)
+COMMENT 'APSTART \' APEND'
+);
+SELECT * FROM t1 LIMIT 1;
+d
+DROP TABLE t1;
+create table t1 (id int auto_increment, s1 int, primary key (id));
+insert into t1 values (null,1);
+insert into t1 values (null,6);
+select * from t1;
+id s1
+1 1
+2 6
+alter table t1 partition by range (id) (
+partition p0 values less than (3),
+partition p1 values less than maxvalue
+);
+drop table t1;
create table t1 (a int)
partition by key(a)
partitions 0.2+e1;
@@ -33,11 +61,6 @@ call pz();
call pz();
drop procedure pz;
drop table t1;
-create table t1 (a int)
-engine = csv
-partition by list (a)
-(partition p0 values in (null));
-ERROR HY000: Engine cannot be used in partitioned tables
create table t1 (a bigint)
partition by range (a)
(partition p0 values less than (0xFFFFFFFFFFFFFFFF),
@@ -68,11 +91,6 @@ a
18446744073709551614
drop table t1;
create table t1 (a int)
-engine = csv
-partition by list (a)
-(partition p0 values in (null));
-ERROR HY000: Engine cannot be used in partitioned tables
-create table t1 (a int)
partition by key(a)
(partition p0 engine = MEMORY);
drop table t1;
@@ -271,6 +289,13 @@ select * from t1 where a = 4;
a b
4 4
drop table t1;
+CREATE TABLE t1 (c1 INT, c2 INT, PRIMARY KEY USING BTREE (c1,c2)) ENGINE=MEMORY
+PARTITION BY KEY(c2,c1) PARTITIONS 4;
+INSERT INTO t1 VALUES (0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6);
+SELECT * FROM t1 WHERE c1 = 4;
+c1 c2
+4 4
+DROP TABLE t1;
CREATE TABLE t1 (a int)
PARTITION BY LIST (a)
PARTITIONS 1
@@ -319,18 +344,6 @@ analyze table t1;
Table Op Msg_type Msg_text
test.t1 analyze status OK
drop table t1;
-CREATE TABLE `t1` (
-`id` int(11) default NULL
-) ENGINE=BLACKHOLE DEFAULT CHARSET=latin1 PARTITION BY HASH (id) ;
-SELECT * FROM t1;
-id
-drop table t1;
-CREATE TABLE `t1` (
-`id` int(11) default NULL
-) ENGINE=BLACKHOLE DEFAULT CHARSET=latin1 PARTITION BY HASH (id) ;
-SELECT * FROM t1;
-id
-drop table t1;
create table t1
(a int)
partition by range (a)
@@ -709,7 +722,7 @@ partition by range (a)
alter table t1 add partition (partition p1 values in (2));
ERROR HY000: Only LIST PARTITIONING can use VALUES IN in partition definition
alter table t1 add partition (partition p1);
-ERROR HY000: RANGE PARTITIONING requires definition of VALUES LESS THAN for each partition
+ERROR HY000: Syntax error: RANGE PARTITIONING requires definition of VALUES LESS THAN for each partition
drop table t1;
create table t1 (a int)
partition by list (a)
@@ -717,7 +730,7 @@ partition by list (a)
alter table t1 add partition (partition p1 values less than (2));
ERROR HY000: Only RANGE PARTITIONING can use VALUES LESS THAN in partition definition
alter table t1 add partition (partition p1);
-ERROR HY000: LIST PARTITIONING requires definition of VALUES IN for each partition
+ERROR HY000: Syntax error: LIST PARTITIONING requires definition of VALUES IN for each partition
drop table t1;
create table t1 (a int)
partition by hash (a)
@@ -1050,18 +1063,6 @@ OPTIMIZE TABLE t1;
Table Op Msg_type Msg_text
test.t1 optimize note The storage engine for the table doesn't support optimize
drop table t1;
-create database db99;
-use db99;
-create table t1 (a int not null)
-engine=archive
-partition by list (a)
-(partition p0 values in (1), partition p1 values in (2));
-insert into t1 values (1), (2);
-create index inx on t1 (a);
-alter table t1 add partition (partition p2 values in (3));
-alter table t1 drop partition p2;
-use test;
-drop database db99;
drop procedure if exists mysqltest_1;
create table t1 (a int)
partition by list (a)
@@ -1291,4 +1292,129 @@ t1 CREATE TABLE `t1` (
`b` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (b) (PARTITION p1 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION p2 VALUES LESS THAN (20) ENGINE = MyISAM) */
drop table t1, t2;
+create table t1
+(s1 timestamp on update current_timestamp, s2 int)
+partition by key(s1) partitions 3;
+insert into t1 values (null,null);
+drop table t1;
+create table t1 (
+c0 int,
+c1 bigint,
+c2 set('sweet'),
+key (c2,c1,c0),
+key(c0)
+) engine=myisam partition by hash (month(c0)) partitions 5;
+insert ignore into t1 set c0 = -6502262, c1 = 3992917, c2 = 35019;
+insert ignore into t1 set c0 = 241221, c1 = -6862346, c2 = 56644;
+select c1 from t1 group by (select c0 from t1 limit 1);
+c1
+-6862346
+drop table t1;
+CREATE TABLE t1(a int)
+PARTITION BY RANGE (a) (
+PARTITION p1 VALUES LESS THAN (10),
+PARTITION p2 VALUES LESS THAN (20)
+);
+ALTER TABLE t1 OPTIMIZE PARTITION p1 EXTENDED;
+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 'EXTENDED' at line 1
+ALTER TABLE t1 ANALYZE PARTITION p1 EXTENDED;
+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 'EXTENDED' at line 1
+DROP TABLE t1;
+CREATE TABLE t1 (s1 BIGINT UNSIGNED)
+PARTITION BY RANGE (s1) (
+PARTITION p0 VALUES LESS THAN (0),
+PARTITION p1 VALUES LESS THAN (1),
+PARTITION p2 VALUES LESS THAN (18446744073709551615)
+);
+INSERT INTO t1 VALUES (0), (18446744073709551614);
+INSERT INTO t1 VALUES (18446744073709551615);
+ERROR HY000: Table has no partition for value 18446744073709551615
+DROP TABLE t1;
+CREATE TABLE t1 (s1 BIGINT UNSIGNED)
+PARTITION BY RANGE (s1) (
+PARTITION p0 VALUES LESS THAN (0),
+PARTITION p1 VALUES LESS THAN (1),
+PARTITION p2 VALUES LESS THAN (18446744073709551614),
+PARTITION p3 VALUES LESS THAN MAXVALUE
+);
+INSERT INTO t1 VALUES (-1), (0), (18446744073709551613),
+(18446744073709551614), (18446744073709551615);
+Warnings:
+Warning 1264 Out of range value for column 's1' at row 1
+SELECT * FROM t1;
+s1
+0
+0
+18446744073709551613
+18446744073709551614
+18446744073709551615
+SELECT * FROM t1 WHERE s1 = 0;
+s1
+0
+0
+SELECT * FROM t1 WHERE s1 = 18446744073709551614;
+s1
+18446744073709551614
+SELECT * FROM t1 WHERE s1 = 18446744073709551615;
+s1
+18446744073709551615
+DROP TABLE t1;
+CREATE TABLE t1 (s1 BIGINT UNSIGNED)
+PARTITION BY RANGE (s1) (
+PARTITION p0 VALUES LESS THAN (0),
+PARTITION p1 VALUES LESS THAN (1),
+PARTITION p2 VALUES LESS THAN (18446744073709551615),
+PARTITION p3 VALUES LESS THAN MAXVALUE
+);
+DROP TABLE t1;
+CREATE TABLE t1
+(int_column INT, char_column CHAR(5),
+PRIMARY KEY(char_column,int_column))
+PARTITION BY KEY(char_column,int_column)
+PARTITIONS 101;
+INSERT INTO t1 (int_column, char_column) VALUES
+( 39868 ,'zZZRW'),
+( 545592 ,'zZzSD'),
+( 4936 ,'zzzsT'),
+( 9274 ,'ZzZSX'),
+( 970185 ,'ZZzTN'),
+( 786036 ,'zZzTO'),
+( 37240 ,'zZzTv'),
+( 313801 ,'zzzUM'),
+( 782427 ,'ZZZva'),
+( 907955 ,'zZZvP'),
+( 453491 ,'zzZWV'),
+( 756594 ,'ZZZXU'),
+( 718061 ,'ZZzZH');
+SELECT * FROM t1 ORDER BY char_column DESC;
+int_column char_column
+718061 ZZzZH
+756594 ZZZXU
+453491 zzZWV
+907955 zZZvP
+782427 ZZZva
+313801 zzzUM
+37240 zZzTv
+786036 zZzTO
+970185 ZZzTN
+9274 ZzZSX
+4936 zzzsT
+545592 zZzSD
+39868 zZZRW
+DROP TABLE t1;
+CREATE TABLE t1(id MEDIUMINT NOT NULL AUTO_INCREMENT,
+user CHAR(25), PRIMARY KEY(id))
+PARTITION BY RANGE(id)
+SUBPARTITION BY hash(id) subpartitions 2
+(PARTITION pa1 values less than (10),
+PARTITION pa2 values less than (20),
+PARTITION pa11 values less than MAXVALUE);
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `id` mediumint(9) NOT NULL AUTO_INCREMENT,
+ `user` char(25) DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM AUTO_INCREMENT=16 DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (id) SUBPARTITION BY HASH (id) SUBPARTITIONS 2 (PARTITION pa1 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION pa2 VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION pa11 VALUES LESS THAN MAXVALUE ENGINE = MyISAM) */
+drop table t1;
End of 5.1 tests
diff --git a/mysql-test/r/partition_02myisam.result b/mysql-test/r/partition_02myisam.result
deleted file mode 100644
index 55263e4f8ce..00000000000
--- a/mysql-test/r/partition_02myisam.result
+++ /dev/null
@@ -1,1725 +0,0 @@
-SET SESSION storage_engine='MYISAM';
-SET @max_row = 200;
-SET AUTOCOMMIT= 1;
-
-#------------------------------------------------------------------------
-# There are several testcases disabled because ouf the open bugs
-# #15407 , #15408 , #15890 , #15961 , #13447 , #15966 , #15968, #16370
-#------------------------------------------------------------------------
-
-#------------------------------------------------------------------------
-# 0. Setting of auxiliary variables + Creation of an auxiliary table
-# needed in all testcases
-#------------------------------------------------------------------------
-DROP TABLE IF EXISTS t0_template;
-CREATE TABLE t0_template ( f1 INTEGER, f2 char(20), PRIMARY KEY(f1))
-ENGINE = MEMORY;
-# Logging of <max_row> INSERTs into t0_template suppressed
-
-#------------------------------------------------------------------------
-# 1. Some syntax checks
-#------------------------------------------------------------------------
-# 1.1 Subpartioned table without subpartitioning rule must be rejected
-DROP TABLE IF EXISTS t1;
-# FIXME Implement testcases, where it is checked that all create and
-# alter table statements
-# - with missing mandatory parameters are rejected
-# - with optional parameters are accepted
-# - with wrong combinations of optional parameters are rejected
-# - ............
-
-#------------------------------------------------------------------------
-# 2. Checks where the engine is assigned on all supported (CREATE TABLE
-# statement) positions + basic operations on the tables
-# Storage engine mixups are currently (2005-12-23) not supported
-#------------------------------------------------------------------------
-DROP TABLE IF EXISTS t1;
-# 2.1 non partitioned table (for comparison)
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20)) ENGINE = 'MYISAM';
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) DEFAULT NULL,
- `f2` char(20) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-# 2.2 Assignment of storage engine just after column list only
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20)) ENGINE = 'MYISAM'
-PARTITION BY HASH(f1) PARTITIONS 2;
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) DEFAULT NULL,
- `f2` char(20) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f1) PARTITIONS 2 */
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-# 2.3 Assignment of storage engine just after partition or subpartition
-# name only
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1)
-( PARTITION part1 STORAGE ENGINE = 'MYISAM',
-PARTITION part2 STORAGE ENGINE = 'MYISAM'
-);
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) DEFAULT NULL,
- `f2` char(20) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f1) (PARTITION part1 ENGINE = MyISAM, PARTITION part2 ENGINE = MyISAM) */
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1)
-SUBPARTITION BY HASH(f1)
-( PARTITION part1 VALUES LESS THAN (100)
-(SUBPARTITION subpart11 STORAGE ENGINE = 'MYISAM',
-SUBPARTITION subpart12 STORAGE ENGINE = 'MYISAM'),
-PARTITION part2 VALUES LESS THAN (2147483647)
-(SUBPARTITION subpart21 STORAGE ENGINE = 'MYISAM',
-SUBPARTITION subpart22 STORAGE ENGINE = 'MYISAM')
-);
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) DEFAULT NULL,
- `f2` char(20) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f1) SUBPARTITION BY HASH (f1) (PARTITION part1 VALUES LESS THAN (100) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part2 VALUES LESS THAN (2147483647) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM)) */
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-# 2.4 Some but not all named partitions or subpartitions get a storage
-# engine assigned
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1)
-( PARTITION part1 STORAGE ENGINE = 'MYISAM',
-PARTITION part2
-);
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) DEFAULT NULL,
- `f2` char(20) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f1) (PARTITION part1 ENGINE = MyISAM, PARTITION part2 ENGINE = MyISAM) */
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1)
-( PARTITION part1 ,
-PARTITION part2 STORAGE ENGINE = 'MYISAM'
-);
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) DEFAULT NULL,
- `f2` char(20) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f1) (PARTITION part1 ENGINE = MyISAM, PARTITION part2 ENGINE = MyISAM) */
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1)
-SUBPARTITION BY HASH(f1)
-( PARTITION part1 VALUES LESS THAN (100)
-(SUBPARTITION subpart11,
-SUBPARTITION subpart12 STORAGE ENGINE = 'MYISAM'),
-PARTITION part2 VALUES LESS THAN (2147483647)
-(SUBPARTITION subpart21 STORAGE ENGINE = 'MYISAM',
-SUBPARTITION subpart22 STORAGE ENGINE = 'MYISAM')
-);
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) DEFAULT NULL,
- `f2` char(20) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f1) SUBPARTITION BY HASH (f1) (PARTITION part1 VALUES LESS THAN (100) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part2 VALUES LESS THAN (2147483647) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM)) */
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1)
-SUBPARTITION BY HASH(f1)
-( PARTITION part1 VALUES LESS THAN (100)
-(SUBPARTITION subpart11 STORAGE ENGINE = 'MYISAM',
-SUBPARTITION subpart12 STORAGE ENGINE = 'MYISAM'),
-PARTITION part2 VALUES LESS THAN (2147483647)
-(SUBPARTITION subpart21,
-SUBPARTITION subpart22 )
-);
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) DEFAULT NULL,
- `f2` char(20) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f1) SUBPARTITION BY HASH (f1) (PARTITION part1 VALUES LESS THAN (100) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part2 VALUES LESS THAN (2147483647) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM)) */
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-# 2.5 Storage engine assignment after partition name + after name of
-# subpartitions belonging to another partition
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1)
-SUBPARTITION BY HASH(f1)
-( PARTITION part1 VALUES LESS THAN (100) ENGINE = 'MYISAM'
-(SUBPARTITION subpart11,
-SUBPARTITION subpart12),
-PARTITION part2 VALUES LESS THAN (2147483647)
-(SUBPARTITION subpart21 STORAGE ENGINE = 'MYISAM',
-SUBPARTITION subpart22 STORAGE ENGINE = 'MYISAM')
-);
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) DEFAULT NULL,
- `f2` char(20) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f1) SUBPARTITION BY HASH (f1) (PARTITION part1 VALUES LESS THAN (100) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part2 VALUES LESS THAN (2147483647) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM)) */
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1)
-SUBPARTITION BY HASH(f1)
-( PARTITION part1 VALUES LESS THAN (100)
-(SUBPARTITION subpart11 STORAGE ENGINE = 'MYISAM',
-SUBPARTITION subpart12 STORAGE ENGINE = 'MYISAM'),
-PARTITION part2 VALUES LESS THAN (2147483647) ENGINE = 'MYISAM'
-(SUBPARTITION subpart21,
-SUBPARTITION subpart22)
-);
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) DEFAULT NULL,
- `f2` char(20) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f1) SUBPARTITION BY HASH (f1) (PARTITION part1 VALUES LESS THAN (100) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part2 VALUES LESS THAN (2147483647) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM)) */
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-# 2.6 Precedence of storage engine assignments
-# 2.6.1 Storage engine assignment after column list + after partition
-# or subpartition name
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20)) ENGINE = 'MYISAM'
-PARTITION BY HASH(f1)
-( PARTITION part1 STORAGE ENGINE = 'MYISAM',
-PARTITION part2 STORAGE ENGINE = 'MYISAM'
-);
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) DEFAULT NULL,
- `f2` char(20) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f1) (PARTITION part1 ENGINE = MyISAM, PARTITION part2 ENGINE = MyISAM) */
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20)) ENGINE = 'MYISAM'
-PARTITION BY RANGE(f1)
-SUBPARTITION BY HASH(f1)
-( PARTITION part1 VALUES LESS THAN (100)
-(SUBPARTITION subpart11 STORAGE ENGINE = 'MYISAM',
-SUBPARTITION subpart12 STORAGE ENGINE = 'MYISAM'),
-PARTITION part2 VALUES LESS THAN (2147483647)
-(SUBPARTITION subpart21 STORAGE ENGINE = 'MYISAM',
-SUBPARTITION subpart22 STORAGE ENGINE = 'MYISAM')
-);
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) DEFAULT NULL,
- `f2` char(20) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f1) SUBPARTITION BY HASH (f1) (PARTITION part1 VALUES LESS THAN (100) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part2 VALUES LESS THAN (2147483647) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM)) */
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-# 2.6.2 Storage engine assignment after partition name + after
-# subpartition name
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1)
-SUBPARTITION BY HASH(f1)
-( PARTITION part1 VALUES LESS THAN (100) STORAGE ENGINE = 'MYISAM'
-(SUBPARTITION subpart11 STORAGE ENGINE = 'MYISAM',
-SUBPARTITION subpart12 STORAGE ENGINE = 'MYISAM'),
-PARTITION part2 VALUES LESS THAN (2147483647)
-(SUBPARTITION subpart21 STORAGE ENGINE = 'MYISAM',
-SUBPARTITION subpart22 STORAGE ENGINE = 'MYISAM')
-);
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) DEFAULT NULL,
- `f2` char(20) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f1) SUBPARTITION BY HASH (f1) (PARTITION part1 VALUES LESS THAN (100) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part2 VALUES LESS THAN (2147483647) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM)) */
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-# 2.7 Session default engine differs from engine used within create table
-SET SESSION storage_engine='MEMORY';
-SET SESSION storage_engine='MYISAM';
-
-#------------------------------------------------------------------------
-# 3. Check assigning the number of partitions and subpartitions
-# with and without named partitions/subpartitions
-#------------------------------------------------------------------------
-DROP TABLE IF EXISTS t1;
-# 3.1 (positive) without partition/subpartition number assignment
-# 3.1.1 no partition number, no named partitions
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1);
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) DEFAULT NULL,
- `f2` char(20) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f1) */
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-# 3.1.2 no partition number, named partitions
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) (PARTITION part1, PARTITION part2);
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) DEFAULT NULL,
- `f2` char(20) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f1) (PARTITION part1 ENGINE = MyISAM, PARTITION part2 ENGINE = MyISAM) */
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-# 3.1.3 variations on no partition/subpartition number, named partitions,
-# different subpartitions are/are not named
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1) (PARTITION part1 VALUES LESS THAN (100), PARTITION part2 VALUES LESS THAN (200), PARTITION part3 VALUES LESS THAN (2147483647)) ;
-DROP TABLE t1;
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1) (PARTITION part1 VALUES LESS THAN (100)
-(SUBPARTITION subpart11 , SUBPARTITION subpart12 ), PARTITION part2 VALUES LESS THAN (200)
-(SUBPARTITION subpart21 , SUBPARTITION subpart22 ), PARTITION part3 VALUES LESS THAN (2147483647)
-(SUBPARTITION subpart31 , SUBPARTITION subpart32 )) ;
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) DEFAULT NULL,
- `f2` char(20) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f1) SUBPARTITION BY HASH (f1) (PARTITION part1 VALUES LESS THAN (100) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part2 VALUES LESS THAN (200) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM), PARTITION part3 VALUES LESS THAN (2147483647) (SUBPARTITION subpart31 ENGINE = MyISAM, SUBPARTITION subpart32 ENGINE = MyISAM)) */
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-# 3.2 partition/subpartition numbers good and bad values and notations
-DROP TABLE IF EXISTS t1;
-# 3.2.1 partition/subpartition numbers INTEGER notation
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS 2;
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) DEFAULT NULL,
- `f2` char(20) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f1) PARTITIONS 2 */
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1)
-SUBPARTITIONS 2
-(PARTITION part1 VALUES LESS THAN (100), PARTITION part2 VALUES LESS THAN (2147483647));
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) DEFAULT NULL,
- `f2` char(20) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f1) SUBPARTITION BY HASH (f1) SUBPARTITIONS 2 (PARTITION part1 VALUES LESS THAN (100) ENGINE = MyISAM, PARTITION part2 VALUES LESS THAN (2147483647) ENGINE = MyISAM) */
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS 1;
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) DEFAULT NULL,
- `f2` char(20) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f1) PARTITIONS 1 */
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1)
-SUBPARTITIONS 1
-(PARTITION part1 VALUES LESS THAN (100), PARTITION part2 VALUES LESS THAN (2147483647));
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) DEFAULT NULL,
- `f2` char(20) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f1) SUBPARTITION BY HASH (f1) SUBPARTITIONS 1 (PARTITION part1 VALUES LESS THAN (100) ENGINE = MyISAM, PARTITION part2 VALUES LESS THAN (2147483647) ENGINE = MyISAM) */
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS 0;
-ERROR HY000: Number of partitions = 0 is not an allowed value
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1)
-SUBPARTITIONS 0
-(PARTITION part1 VALUES LESS THAN (100), PARTITION part2 VALUES LESS THAN (2147483647));
-ERROR HY000: Number of subpartitions = 0 is not an allowed value
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS -1;
-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 '-1' at line 2
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1)
-SUBPARTITIONS -1
-(PARTITION part1 VALUES LESS THAN (100), PARTITION part2 VALUES LESS THAN (2147483647));
-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 '-1
-(PARTITION part1 VALUES LESS THAN (100), PARTITION part2 VALUES LESS THAN (21' at line 3
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS 1000000;
-ERROR HY000: Too many partitions (including subpartitions) were defined
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1)
-SUBPARTITIONS 1000000
-(PARTITION part1 VALUES LESS THAN (100), PARTITION part2 VALUES LESS THAN (2147483647));
-ERROR HY000: Too many partitions (including subpartitions) were defined
-# 3.2.4 partition/subpartition numbers STRING notation
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS '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 ''2'' at line 2
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1)
-SUBPARTITIONS '2'
-(PARTITION part1 VALUES LESS THAN (100), PARTITION part2 VALUES LESS THAN (2147483647));
-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 ''2'
-(PARTITION part1 VALUES LESS THAN (100), PARTITION part2 VALUES LESS THAN (2' at line 3
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS '2.0';
-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 ''2.0'' at line 2
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1)
-SUBPARTITIONS '2.0'
-(PARTITION part1 VALUES LESS THAN (100), PARTITION part2 VALUES LESS THAN (2147483647));
-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 ''2.0'
-(PARTITION part1 VALUES LESS THAN (100), PARTITION part2 VALUES LESS THAN ' at line 3
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS '0.2E+1';
-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 ''0.2E+1'' at line 2
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1)
-SUBPARTITIONS '0.2E+1'
-(PARTITION part1 VALUES LESS THAN (100), PARTITION part2 VALUES LESS THAN (2147483647));
-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 ''0.2E+1'
-(PARTITION part1 VALUES LESS THAN (100), PARTITION part2 VALUES LESS TH' at line 3
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS '2A';
-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 ''2A'' at line 2
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1)
-SUBPARTITIONS '2A'
-(PARTITION part1 VALUES LESS THAN (100), PARTITION part2 VALUES LESS THAN (2147483647));
-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 ''2A'
-(PARTITION part1 VALUES LESS THAN (100), PARTITION part2 VALUES LESS THAN (' at line 3
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS 'A2';
-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 ''A2'' at line 2
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1)
-SUBPARTITIONS 'A2'
-(PARTITION part1 VALUES LESS THAN (100), PARTITION part2 VALUES LESS THAN (2147483647));
-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 ''A2'
-(PARTITION part1 VALUES LESS THAN (100), PARTITION part2 VALUES LESS THAN (' at line 3
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS '';
-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 2
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1)
-SUBPARTITIONS ''
-(PARTITION part1 VALUES LESS THAN (100), PARTITION part2 VALUES LESS THAN (2147483647));
-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 '''
-(PARTITION part1 VALUES LESS THAN (100), PARTITION part2 VALUES LESS THAN (21' at line 3
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS 'GARBAGE';
-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 ''GARBAGE'' at line 2
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1)
-SUBPARTITIONS 'GARBAGE'
-(PARTITION part1 VALUES LESS THAN (100), PARTITION part2 VALUES LESS THAN (2147483647));
-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 ''GARBAGE'
-(PARTITION part1 VALUES LESS THAN (100), PARTITION part2 VALUES LESS T' at line 3
-# 3.2.5 partition/subpartition numbers other notations
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS 2A;
-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 '2A' at line 2
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1)
-SUBPARTITIONS 2A
-(PARTITION part1 VALUES LESS THAN (100), PARTITION part2 VALUES LESS THAN (2147483647));
-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 '2A
-(PARTITION part1 VALUES LESS THAN (100), PARTITION part2 VALUES LESS THAN (21' at line 3
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS A2;
-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 'A2' at line 2
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1)
-SUBPARTITIONS A2
-(PARTITION part1 VALUES LESS THAN (100), PARTITION part2 VALUES LESS THAN (2147483647));
-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 'A2
-(PARTITION part1 VALUES LESS THAN (100), PARTITION part2 VALUES LESS THAN (21' at line 3
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS GARBAGE;
-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 'GARBAGE' at line 2
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1)
-SUBPARTITIONS GARBAGE
-(PARTITION part1 VALUES LESS THAN (100), PARTITION part2 VALUES LESS THAN (2147483647));
-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 'GARBAGE
-(PARTITION part1 VALUES LESS THAN (100), PARTITION part2 VALUES LESS THA' at line 3
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS "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 '"2"' at line 2
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1)
-SUBPARTITIONS "2"
-(PARTITION part1 VALUES LESS THAN (100), PARTITION part2 VALUES LESS THAN (2147483647));
-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 '"2"
-(PARTITION part1 VALUES LESS THAN (100), PARTITION part2 VALUES LESS THAN (2' at line 3
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS "2A";
-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 '"2A"' at line 2
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1)
-SUBPARTITIONS "2A"
-(PARTITION part1 VALUES LESS THAN (100), PARTITION part2 VALUES LESS THAN (2147483647));
-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 '"2A"
-(PARTITION part1 VALUES LESS THAN (100), PARTITION part2 VALUES LESS THAN (' at line 3
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS "A2";
-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 '"A2"' at line 2
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1)
-SUBPARTITIONS "A2"
-(PARTITION part1 VALUES LESS THAN (100), PARTITION part2 VALUES LESS THAN (2147483647));
-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 '"A2"
-(PARTITION part1 VALUES LESS THAN (100), PARTITION part2 VALUES LESS THAN (' at line 3
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS "GARBAGE";
-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 '"GARBAGE"' at line 2
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1)
-SUBPARTITIONS "GARBAGE"
-(PARTITION part1 VALUES LESS THAN (100), PARTITION part2 VALUES LESS THAN (2147483647));
-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 '"GARBAGE"
-(PARTITION part1 VALUES LESS THAN (100), PARTITION part2 VALUES LESS T' at line 3
-# 3.3 Mixups of assigned partition/subpartition numbers and names
-# 3.3.1 (positive) number of partition/subpartition
-# = number of named partition/subpartition
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS 2 ( PARTITION part1, PARTITION part2 ) ;
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) DEFAULT NULL,
- `f2` char(20) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f1) (PARTITION part1 ENGINE = MyISAM, PARTITION part2 ENGINE = MyISAM) */
-DROP TABLE t1;
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) PARTITIONS 2
-SUBPARTITION BY HASH(f1) SUBPARTITIONS 2
-( PARTITION part1 VALUES LESS THAN (1000)
-(SUBPARTITION subpart11, SUBPARTITION subpart12),
-PARTITION part2 VALUES LESS THAN (2147483647)
-(SUBPARTITION subpart21, SUBPARTITION subpart22)
-);
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) DEFAULT NULL,
- `f2` char(20) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f1) SUBPARTITION BY HASH (f1) (PARTITION part1 VALUES LESS THAN (1000) (SUBPARTITION subpart11 ENGINE = MyISAM, SUBPARTITION subpart12 ENGINE = MyISAM), PARTITION part2 VALUES LESS THAN (2147483647) (SUBPARTITION subpart21 ENGINE = MyISAM, SUBPARTITION subpart22 ENGINE = MyISAM)) */
-DROP TABLE t1;
-# 3.3.2 (positive) number of partition/subpartition ,
-# 0 (= no) named partition/subpartition
-# already checked above
-# 3.3.3 (negative) number of partitions/subpartitions
-# > number of named partitions/subpartitions
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS 2 ( PARTITION part1 ) ;
-ERROR 42000: Wrong number of partitions defined, mismatch with previous setting near ')' at line 2
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1)
-SUBPARTITION BY HASH(f1) SUBPARTITIONS 2
-( PARTITION part1 VALUES LESS THAN (1000)
-(SUBPARTITION subpart11 ),
-PARTITION part2 VALUES LESS THAN (2147483647)
-(SUBPARTITION subpart21, SUBPARTITION subpart22)
-);
-ERROR 42000: Wrong number of subpartitions defined, mismatch with previous setting near '),
-PARTITION part2 VALUES LESS THAN (2147483647)
-(SUBPARTITION subpart21, SUBPAR' at line 5
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1)
-SUBPARTITION BY HASH(f1) SUBPARTITIONS 2
-( PARTITION part1 VALUES LESS THAN (1000)
-(SUBPARTITION subpart11, SUBPARTITION subpart12),
-PARTITION part2 VALUES LESS THAN (2000)
-(SUBPARTITION subpart21 ),
-PARTITION part3 VALUES LESS THAN (2147483647)
-(SUBPARTITION subpart31, SUBPARTITION subpart32)
-);
-ERROR 42000: Wrong number of subpartitions defined, mismatch with previous setting near '),
-PARTITION part3 VALUES LESS THAN (2147483647)
-(SUBPARTITION subpart31, SUBPAR' at line 7
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) PARTITIONS 2
-SUBPARTITION BY HASH(f1) SUBPARTITIONS 2
-( PARTITION part1 VALUES LESS THAN (1000)
-(SUBPARTITION subpart11, SUBPARTITION subpart12),
-PARTITION part2 VALUES LESS THAN (2147483647)
-(SUBPARTITION subpart21 )
-);
-ERROR 42000: Wrong number of subpartitions defined, mismatch with previous setting near ')
-)' at line 7
-# 3.3.4 (negative) number of partitions < number of named partitions
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS 1 ( PARTITION part1, PARTITION part2 ) ;
-ERROR 42000: Wrong number of partitions defined, mismatch with previous setting near ')' at line 2
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1)
-SUBPARTITION BY HASH(f1) SUBPARTITIONS 1
-( PARTITION part1 VALUES LESS THAN (1000)
-(SUBPARTITION subpart11, SUBPARTITION subpart12),
-PARTITION part2 VALUES LESS THAN (2147483647)
-(SUBPARTITION subpart21, SUBPARTITION subpart22)
-);
-ERROR 42000: Wrong number of subpartitions defined, mismatch with previous setting near '),
-PARTITION part2 VALUES LESS THAN (2147483647)
-(SUBPARTITION subpart21, SUBPAR' at line 5
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1)
-SUBPARTITION BY HASH(f1) SUBPARTITIONS 1
-( PARTITION part1 VALUES LESS THAN (1000)
-(SUBPARTITION subpart11, SUBPARTITION subpart12),
-PARTITION part2 VALUES LESS THAN (2000)
-(SUBPARTITION subpart21 ),
-PARTITION part3 VALUES LESS THAN (2147483647)
-(SUBPARTITION subpart31, SUBPARTITION subpart32)
-);
-ERROR 42000: Wrong number of subpartitions defined, mismatch with previous setting near '),
-PARTITION part2 VALUES LESS THAN (2000)
-(SUBPARTITION subpart21 ' at line 5
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1)
-SUBPARTITION BY HASH(f1) SUBPARTITIONS 1
-( PARTITION part1 VALUES LESS THAN (1000)
-(SUBPARTITION subpart11, SUBPARTITION subpart12),
-PARTITION part2 VALUES LESS THAN (2147483647)
-(SUBPARTITION subpart21, SUBPARTITION subpart22)
-);
-ERROR 42000: Wrong number of subpartitions defined, mismatch with previous setting near '),
-PARTITION part2 VALUES LESS THAN (2147483647)
-(SUBPARTITION subpart21, SUBPAR' at line 5
-
-#------------------------------------------------------------------------
-# 4. Checks of logical partition/subpartition name
-# file name clashes during CREATE TABLE
-#------------------------------------------------------------------------
-DROP TABLE IF EXISTS t1;
-# 4.1 (negative) A partition name used more than once
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) (PARTITION part1, PARTITION part1);
-ERROR HY000: Duplicate partition name part1
-# FIXME Implement testcases with filename problems
-# existing file of other table --- partition/subpartition file name
-# partition/subpartition file name --- file of the same table
-
-#------------------------------------------------------------------------
-# 5. Alter table experiments
-#------------------------------------------------------------------------
-DROP TABLE IF EXISTS t1;
-# 5.1 alter table add partition
-# 5.1.1 (negative) add partition to non partitioned table
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20));
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) DEFAULT NULL,
- `f2` char(20) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1
-ALTER TABLE t1 ADD PARTITION (PARTITION part1);
-Got one of the listed errors
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) DEFAULT NULL,
- `f2` char(20) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1
-DROP TABLE t1;
-# 5.1.2 Add one partition to a table with one partition
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1);
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) DEFAULT NULL,
- `f2` char(20) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f1) */
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 100 - 1;
-ALTER TABLE t1 ADD PARTITION (PARTITION part1);
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) DEFAULT NULL,
- `f2` char(20) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f1) (PARTITION p0 ENGINE = MyISAM, PARTITION part1 ENGINE = MyISAM) */
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 100 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-# 5.1.3 Several times add one partition to a table with some partitions
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) (PARTITION part1, PARTITION part3);
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) DEFAULT NULL,
- `f2` char(20) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f1) (PARTITION part1 ENGINE = MyISAM, PARTITION part3 ENGINE = MyISAM) */
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 100 - 1;
-ALTER TABLE t1 ADD PARTITION (PARTITION part0);
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) DEFAULT NULL,
- `f2` char(20) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f1) (PARTITION part1 ENGINE = MyISAM, PARTITION part3 ENGINE = MyISAM, PARTITION part0 ENGINE = MyISAM) */
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 100 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1;
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 100 - 1;
-ALTER TABLE t1 ADD PARTITION (PARTITION part2);
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) DEFAULT NULL,
- `f2` char(20) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f1) (PARTITION part1 ENGINE = MyISAM, PARTITION part3 ENGINE = MyISAM, PARTITION part0 ENGINE = MyISAM, PARTITION part2 ENGINE = MyISAM) */
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 100 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1;
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 100 - 1;
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) DEFAULT NULL,
- `f2` char(20) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f1) (PARTITION part1 ENGINE = MyISAM, PARTITION part3 ENGINE = MyISAM, PARTITION part0 ENGINE = MyISAM, PARTITION part2 ENGINE = MyISAM) */
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 100 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-# 5.1.4 Add several partitions to a table with some partitions
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) (PARTITION part1, PARTITION part3);
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) DEFAULT NULL,
- `f2` char(20) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f1) (PARTITION part1 ENGINE = MyISAM, PARTITION part3 ENGINE = MyISAM) */
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 100 - 1;
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) DEFAULT NULL,
- `f2` char(20) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f1) (PARTITION part1 ENGINE = MyISAM, PARTITION part3 ENGINE = MyISAM) */
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 100 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-# 5.1.5 (negative) Add partitions to a table with some partitions
-# clash on new and already existing partition names
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) (PARTITION part1, PARTITION part2, PARTITION part3);
-ALTER TABLE t1 ADD PARTITION (PARTITION part1);
-ERROR HY000: Duplicate partition name part1
-ALTER TABLE t1 ADD PARTITION (PARTITION part2);
-ERROR HY000: Duplicate partition name part2
-ALTER TABLE t1 ADD PARTITION (PARTITION part3);
-ERROR HY000: Duplicate partition name part3
-ALTER TABLE t1 ADD PARTITION (PARTITION part1, PARTITION part2, PARTITION part3);
-ERROR HY000: Duplicate partition name part1
-DROP TABLE t1;
-# 5.2 alter table add subpartition
-# 5.2.1 Add one subpartition to a table with subpartitioning rule and
-# no explicit defined subpartitions
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1)
-SUBPARTITION BY HASH(f1)
-(PARTITION part1 VALUES LESS THAN (100));
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 100 - 1;
-ALTER TABLE t1 ADD PARTITION (PARTITION part2 VALUES LESS THAN (2147483647)
-(SUBPARTITION subpart21));
-DROP TABLE t1;
-DROP TABLE if exists t0_template;
diff --git a/mysql-test/r/partition_archive.result b/mysql-test/r/partition_archive.result
new file mode 100644
index 00000000000..5c84b41e81b
--- /dev/null
+++ b/mysql-test/r/partition_archive.result
@@ -0,0 +1,91 @@
+drop database if exists db99;
+drop table if exists t1;
+create database db99;
+use db99;
+create table t1 (a int not null)
+engine=archive
+partition by list (a)
+(partition p0 values in (1), partition p1 values in (2));
+insert into t1 values (1), (2);
+create index inx on t1 (a);
+alter table t1 add partition (partition p2 values in (3));
+alter table t1 drop partition p2;
+use test;
+drop database db99;
+create table t1 (f1 integer) engine= ARCHIVE partition by list(f1)
+(
+partition p1 values in (1),
+partition p2 values in (NULL),
+partition p3 values in (2),
+partition p4 values in (3),
+partition p5 values in (4)
+);
+insert into t1 values (1),(2),(3),(4),(null);
+select * from t1;
+f1
+1
+NULL
+2
+3
+4
+select * from t1 where f1 < 3;
+f1
+1
+2
+drop table t1;
+CREATE TABLE t1 (
+a int not null,
+b int not null,
+c int not null) engine=ARCHIVE
+partition by hash (a + 2)
+partitions 3
+(partition x1 tablespace ts1,
+partition x2 tablespace ts2,
+partition x3 tablespace ts3);
+insert into t1 values (1,1,1);
+insert into t1 values (2,1,1);
+insert into t1 values (3,1,1);
+insert into t1 values (4,1,1);
+insert into t1 values (5,1,1);
+select * from t1;
+a b c
+1 1 1
+4 1 1
+2 1 1
+5 1 1
+3 1 1
+drop table t1;
+create table t1 (a int) engine=archive partition by hash(a);
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` int(11) DEFAULT NULL
+) ENGINE=ARCHIVE DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (a) */
+drop table t1;
+CREATE TABLE t1(id MEDIUMINT NOT NULL AUTO_INCREMENT,
+f1 VARCHAR(25),
+PRIMARY KEY(id)) ENGINE=ARCHIVE
+PARTITION BY RANGE(id)
+SUBPARTITION BY hash(id) subpartitions 2
+(PARTITION pa1 values less than (10),
+PARTITION pa2 values less than (20),
+PARTITION pa3 values less than (30),
+PARTITION pa4 values less than (40),
+PARTITION pa5 values less than (50),
+PARTITION pa6 values less than (60),
+PARTITION pa7 values less than (70),
+PARTITION pa8 values less than (80),
+PARTITION pa9 values less than (90),
+PARTITION pa10 values less than (100),
+PARTITION pa11 values less than MAXVALUE);
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `id` mediumint(9) NOT NULL AUTO_INCREMENT,
+ `f1` varchar(25) DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=ARCHIVE AUTO_INCREMENT=101 DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (id) SUBPARTITION BY HASH (id) SUBPARTITIONS 2 (PARTITION pa1 VALUES LESS THAN (10) ENGINE = ARCHIVE, PARTITION pa2 VALUES LESS THAN (20) ENGINE = ARCHIVE, PARTITION pa3 VALUES LESS THAN (30) ENGINE = ARCHIVE, PARTITION pa4 VALUES LESS THAN (40) ENGINE = ARCHIVE, PARTITION pa5 VALUES LESS THAN (50) ENGINE = ARCHIVE, PARTITION pa6 VALUES LESS THAN (60) ENGINE = ARCHIVE, PARTITION pa7 VALUES LESS THAN (70) ENGINE = ARCHIVE, PARTITION pa8 VALUES LESS THAN (80) ENGINE = ARCHIVE, PARTITION pa9 VALUES LESS THAN (90) ENGINE = ARCHIVE, PARTITION pa10 VALUES LESS THAN (100) ENGINE = ARCHIVE, PARTITION pa11 VALUES LESS THAN MAXVALUE ENGINE = ARCHIVE) */
+select count(*) from t1;
+count(*)
+100
+drop table t1;
diff --git a/mysql-test/r/partition_blackhole.result b/mysql-test/r/partition_blackhole.result
new file mode 100644
index 00000000000..225cc1886fd
--- /dev/null
+++ b/mysql-test/r/partition_blackhole.result
@@ -0,0 +1,7 @@
+DROP TABLE IF EXISTS t1;
+CREATE TABLE `t1` (
+`id` int(11) default NULL
+) ENGINE=BLACKHOLE DEFAULT CHARSET=latin1 PARTITION BY HASH (id) ;
+SELECT * FROM t1;
+id
+DROP TABLE t1;
diff --git a/mysql-test/r/partition_csv.result b/mysql-test/r/partition_csv.result
new file mode 100644
index 00000000000..b5e1dcd9541
--- /dev/null
+++ b/mysql-test/r/partition_csv.result
@@ -0,0 +1,15 @@
+drop table if exists t1;
+create table t1 (a int)
+engine = csv
+partition by list (a)
+(partition p0 values in (null));
+ERROR HY000: Engine cannot be used in partitioned tables
+USE mysql;
+SET GLOBAL general_log = 0;
+ALTER TABLE general_log ENGINE = MyISAM;
+ALTER TABLE general_log PARTITION BY RANGE (TO_DAYS(event_time))
+(PARTITION p0 VALUES LESS THAN (733144),
+PARTITION p1 VALUES LESS THAN (3000000));
+ERROR HY000: Incorrect usage of PARTITION and log table
+ALTER TABLE general_log ENGINE = CSV;
+SET GLOBAL general_log = 1;
diff --git a/mysql-test/r/partition_datatype.result b/mysql-test/r/partition_datatype.result
new file mode 100644
index 00000000000..c6506178b03
--- /dev/null
+++ b/mysql-test/r/partition_datatype.result
@@ -0,0 +1,282 @@
+drop table if exists t1;
+create table t1 (a tinyint not null) partition by key (a);
+insert into t1 values (2);
+select * from t1 where a = 2;
+a
+2
+drop table t1;
+create table t1 (a smallint not null) partition by key (a);
+insert into t1 values (2);
+select * from t1 where a = 2;
+a
+2
+drop table t1;
+create table t1 (a mediumint not null) partition by key (a);
+insert into t1 values (2);
+select * from t1 where a = 2;
+a
+2
+drop table t1;
+create table t1 (a int not null) partition by key (a);
+insert into t1 values (2);
+select * from t1 where a = 2;
+a
+2
+drop table t1;
+create table t1 (a bigint not null) partition by key (a);
+insert into t1 values (2);
+select * from t1 where a = 2;
+a
+2
+drop table t1;
+create table t1 (a float not null) partition by key (a);
+insert into t1 values (2.1);
+select * from t1 where a = 2.1;
+a
+drop table t1;
+create table t1 (a double not null) partition by key (a);
+insert into t1 values (2.1);
+select * from t1 where a = 2.1;
+a
+2.1
+drop table t1;
+create table t1 (a decimal not null) partition by key (a);
+insert into t1 values (2.1);
+Warnings:
+Note 1265 Data truncated for column 'a' at row 1
+select * from t1 where a = 2.1;
+a
+drop table t1;
+create table t1 (a date not null) partition by key (a);
+insert into t1 values ('2001-01-01');
+select * from t1 where a = '2001-01-01';
+a
+2001-01-01
+drop table t1;
+create table t1 (a datetime not null) partition by key (a);
+insert into t1 values ('2001-01-01 01:02:03');
+select * from t1 where a = '2001-01-01 01:02:03';
+a
+2001-01-01 01:02:03
+drop table t1;
+create table t1 (a timestamp not null) partition by key (a);
+insert into t1 values ('2001-01-01 01:02:03');
+select * from t1 where a = '2001-01-01 01:02:03';
+a
+2001-01-01 01:02:03
+drop table t1;
+create table t1 (a time not null) partition by key (a);
+insert into t1 values ('01:02:03');
+select * from t1 where a = '01:02:03';
+a
+01:02:03
+drop table t1;
+create table t1 (a year not null) partition by key (a);
+insert into t1 values ('2001');
+select * from t1 where a = '2001';
+a
+2001
+drop table t1;
+create table t1 (a varchar(10) character set utf8 not null) partition by key (a);
+insert into t1 values ('abc');
+select * from t1 where a = 'abc';
+a
+abc
+drop table t1;
+create table t1 (a varchar(300) character set utf8 not null) partition by key (a);
+insert into t1 values ('abc');
+select * from t1 where a = 'abc';
+a
+abc
+drop table t1;
+create table t1 (a varchar(10) character set latin1 not null) partition by key (a);
+insert into t1 values ('abc');
+select * from t1 where a = 'abc';
+a
+abc
+drop table t1;
+create table t1 (a varchar(300) character set latin1 not null) partition by key (a);
+insert into t1 values ('abc');
+select * from t1 where a = 'abc';
+a
+abc
+drop table t1;
+create table t1 (a char(10) character set utf8 not null) partition by key (a);
+insert into t1 values ('abc');
+select * from t1 where a = 'abc';
+a
+abc
+drop table t1;
+create table t1 (a char(10) character set latin1 not null) partition by key (a);
+insert into t1 values ('abc');
+select * from t1 where a = 'abc';
+a
+abc
+drop table t1;
+create table t1 (a enum('y','n') not null) partition by key (a);
+insert into t1 values ('y');
+select * from t1 where a = 'y';
+a
+y
+drop table t1;
+create table t1 (a set('y','n') not null) partition by key (a);
+insert into t1 values ('y');
+select * from t1 where a = 'y';
+a
+y
+drop table t1;
+create table t1 (a tinyint) partition by key (a);
+insert into t1 values (2);
+select * from t1 where a = 2;
+a
+2
+drop table t1;
+create table t1 (a smallint) partition by key (a);
+insert into t1 values (2);
+select * from t1 where a = 2;
+a
+2
+drop table t1;
+create table t1 (a mediumint) partition by key (a);
+insert into t1 values (2);
+select * from t1 where a = 2;
+a
+2
+drop table t1;
+create table t1 (a int) partition by key (a);
+insert into t1 values (2);
+select * from t1 where a = 2;
+a
+2
+drop table t1;
+create table t1 (a bigint) partition by key (a);
+insert into t1 values (2);
+select * from t1 where a = 2;
+a
+2
+drop table t1;
+create table t1 (a float) partition by key (a);
+insert into t1 values (2.1);
+select * from t1 where a = 2.1;
+a
+drop table t1;
+create table t1 (a double) partition by key (a);
+insert into t1 values (2.1);
+select * from t1 where a = 2.1;
+a
+2.1
+drop table t1;
+create table t1 (a decimal) partition by key (a);
+insert into t1 values (2.1);
+Warnings:
+Note 1265 Data truncated for column 'a' at row 1
+select * from t1 where a = 2.1;
+a
+drop table t1;
+create table t1 (a date) partition by key (a);
+insert into t1 values ('2001-01-01');
+select * from t1 where a = '2001-01-01';
+a
+2001-01-01
+drop table t1;
+create table t1 (a datetime) partition by key (a);
+insert into t1 values ('2001-01-01 01:02:03');
+select * from t1 where a = '2001-01-01 01:02:03';
+a
+2001-01-01 01:02:03
+drop table t1;
+create table t1 (a timestamp null) partition by key (a);
+insert into t1 values ('2001-01-01 01:02:03');
+select * from t1 where a = '2001-01-01 01:02:03';
+a
+2001-01-01 01:02:03
+drop table t1;
+create table t1 (a time) partition by key (a);
+insert into t1 values ('01:02:03');
+select * from t1 where a = '01:02:03';
+a
+01:02:03
+drop table t1;
+create table t1 (a year) partition by key (a);
+insert into t1 values ('2001');
+select * from t1 where a = '2001';
+a
+2001
+drop table t1;
+create table t1 (a varchar(10) character set utf8) partition by key (a);
+insert into t1 values ('abc');
+select * from t1 where a = 'abc';
+a
+abc
+drop table t1;
+create table t1 (a varchar(300) character set utf8) partition by key (a);
+insert into t1 values ('abc');
+select * from t1 where a = 'abc';
+a
+abc
+drop table t1;
+create table t1 (a varchar(10) character set latin1) partition by key (a);
+insert into t1 values ('abc');
+select * from t1 where a = 'abc';
+a
+abc
+drop table t1;
+create table t1 (a varchar(300) character set latin1) partition by key (a);
+insert into t1 values ('abc');
+select * from t1 where a = 'abc';
+a
+abc
+drop table t1;
+create table t1 (a char(10) character set utf8) partition by key (a);
+insert into t1 values ('abc');
+select * from t1 where a = 'abc';
+a
+abc
+drop table t1;
+create table t1 (a char(10) character set latin1) partition by key (a);
+insert into t1 values ('abc');
+select * from t1 where a = 'abc';
+a
+abc
+drop table t1;
+create table t1 (a enum('y','n')) partition by key (a);
+insert into t1 values ('y');
+select * from t1 where a = 'y';
+a
+y
+drop table t1;
+create table t1 (a set('y','n')) partition by key (a);
+insert into t1 values ('y');
+select * from t1 where a = 'y';
+a
+y
+drop table t1;
+create table t1 (a varchar(65531)) partition by key (a);
+insert into t1 values ('bbbb');
+insert into t1 values ('aaaa');
+select * from t1 where a = 'aaa%';
+a
+select * from t1 where a like 'aaa%';
+a
+aaaa
+drop table t1;
+create table t1 (a varchar(65532)) partition by key (a);
+insert into t1 values ('bbbb');
+insert into t1 values ('aaaa');
+select * from t1 where a = 'aaa%';
+a
+select * from t1 where a like 'aaa%';
+a
+aaaa
+drop table t1;
+create table t1 (a varchar(65533) not null) partition by key (a);
+insert into t1 values ('aaaa');
+select * from t1 where a = 'aaa%';
+a
+drop table t1;
+create table t1 (a varchar(65533)) partition by key (a);
+ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs
+create table t1 (a varchar(65534) not null) partition by key (a);
+ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs
+create table t1 (a varchar(65535)) partition by key (a);
+ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs
diff --git a/mysql-test/r/partition_error.result b/mysql-test/r/partition_error.result
index 7952c8df609..46532cb32ab 100644
--- a/mysql-test/r/partition_error.result
+++ b/mysql-test/r/partition_error.result
@@ -1,4 +1,13 @@
drop table if exists t1;
+CREATE TABLE t1 (
+a int
+)
+PARTITION BY RANGE (a)
+(
+PARTITION p0 VALUES LESS THAN (1),
+PARTITION p1 VALU ES LESS THAN (2)
+);
+ERROR HY000: Syntax error: RANGE PARTITIONING requires definition of VALUES LESS THAN for each partition
partition by list (a)
partitions 3
(partition x1 values in (1,2,9,4) tablespace ts1,
@@ -351,7 +360,7 @@ partition by range (a)
partitions 2
(partition x1 values less than (4),
partition x2);
-ERROR HY000: RANGE PARTITIONING requires definition of VALUES LESS THAN for each partition
+ERROR HY000: Syntax error: RANGE PARTITIONING requires definition of VALUES LESS THAN for each partition
CREATE TABLE t1 (
a int not null,
b int not null,
@@ -531,7 +540,7 @@ partition by list (a)
partitions 2
(partition x1 values in (4),
partition x2);
-ERROR HY000: LIST PARTITIONING requires definition of VALUES IN for each partition
+ERROR HY000: Syntax error: LIST PARTITIONING requires definition of VALUES IN for each partition
CREATE TABLE t1 (
a int not null,
b int not null,
@@ -551,7 +560,7 @@ partition by list (a)
partitions 2
(partition x1 values in (4,6),
partition x2);
-ERROR HY000: LIST PARTITIONING requires definition of VALUES IN for each partition
+ERROR HY000: Syntax error: LIST PARTITIONING requires definition of VALUES IN for each partition
CREATE TABLE t1 (
a int not null,
b int not null,
diff --git a/mysql-test/r/partition_hash.result b/mysql-test/r/partition_hash.result
index 9a82a36d902..94fefe77a77 100644
--- a/mysql-test/r/partition_hash.result
+++ b/mysql-test/r/partition_hash.result
@@ -1,4 +1,16 @@
drop table if exists t1;
+CREATE TABLE t1 (c1 INT)
+PARTITION BY HASH (c1)
+PARTITIONS 15;
+INSERT INTO t1 VALUES (1), (2), (3), (4), (5);
+ALTER TABLE t1 COALESCE PARTITION 13;
+DROP TABLE t1;
+CREATE TABLE t1 (c1 INT)
+PARTITION BY LINEAR HASH (c1)
+PARTITIONS 5;
+INSERT INTO t1 VALUES (1), (2), (3), (4), (5);
+ALTER TABLE t1 COALESCE PARTITION 3;
+DROP TABLE t1;
create table t1 (a int unsigned)
partition by hash(a div 2)
partitions 4;
@@ -183,3 +195,6 @@ c1 c2 c3
182 abc 2002-11-09
184 abc 2002-11-22
drop table t1;
+CREATE TABLE t1 (c1 INT) ENGINE=MyISAM PARTITION BY HASH(c1) PARTITIONS 1;
+INSERT DELAYED INTO t1 VALUES (1);
+DROP TABLE t1;
diff --git a/mysql-test/r/partition_innodb.result b/mysql-test/r/partition_innodb.result
index 5b755b6bfd5..8cb8bc7c13f 100644
--- a/mysql-test/r/partition_innodb.result
+++ b/mysql-test/r/partition_innodb.result
@@ -1,33 +1,45 @@
+# Bug#32948
+CREATE TABLE t1 (c1 INT, PRIMARY KEY (c1)) ENGINE=INNODB;
+CREATE TABLE t2 (c1 INT, PRIMARY KEY (c1),
+FOREIGN KEY (c1) REFERENCES t1 (c1)
+ON DELETE CASCADE)
+ENGINE=INNODB;
+ALTER TABLE t1 PARTITION BY HASH(c1) PARTITIONS 5;
+ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails
+ALTER TABLE t1 ENGINE=MyISAM;
+ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails
+DROP TABLE t2;
+DROP TABLE t1;
create table t1 (a int) engine=innodb partition by hash(a) ;
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 InnoDB 10 Compact 2 8192 16384 0 0 0 NULL NULL NULL NULL latin1_swedish_ci NULL partitioned
+t1 InnoDB 10 Compact 2 8192 16384 0 0 # NULL NULL NULL NULL latin1_swedish_ci NULL partitioned
drop table t1;
create table t1 (a int)
engine = innodb
partition by key (a);
show table status;
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 InnoDB 10 Compact 2 8192 16384 0 0 0 NULL NULL NULL NULL latin1_swedish_ci NULL partitioned
+t1 InnoDB 10 Compact 2 8192 16384 0 0 # NULL NULL NULL NULL latin1_swedish_ci NULL partitioned
insert into t1 values (0), (1), (2), (3);
show table status;
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 InnoDB 10 Compact 4 4096 16384 0 0 0 NULL NULL NULL NULL latin1_swedish_ci NULL partitioned
+t1 InnoDB 10 Compact 4 4096 16384 0 0 # NULL NULL NULL NULL latin1_swedish_ci NULL partitioned
drop table t1;
create table t1 (a int auto_increment primary key)
engine = innodb
partition by key (a);
show table status;
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 InnoDB 10 Compact 2 8192 16384 0 0 0 1 NULL NULL NULL latin1_swedish_ci NULL partitioned
+t1 InnoDB 10 Compact 2 8192 16384 0 0 # 1 NULL NULL NULL latin1_swedish_ci NULL partitioned
insert into t1 values (NULL), (NULL), (NULL), (NULL);
show table status;
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 InnoDB 10 Compact 4 4096 16384 0 0 0 5 NULL NULL NULL latin1_swedish_ci NULL partitioned
+t1 InnoDB 10 Compact 4 4096 16384 0 0 # 5 NULL NULL NULL latin1_swedish_ci NULL partitioned
insert into t1 values (NULL), (NULL), (NULL), (NULL);
show table status;
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 InnoDB 10 Compact 8 2048 16384 0 0 0 9 NULL NULL NULL latin1_swedish_ci NULL partitioned
+t1 InnoDB 10 Compact 8 2048 16384 0 0 # 9 NULL NULL NULL latin1_swedish_ci NULL partitioned
drop table t1;
create table t1 (a int)
partition by key (a)
@@ -136,3 +148,16 @@ SELECT COUNT(*) FROM t1;
COUNT(*)
2
DROP TABLE t1;
+create table t1 (int_column int, char_column char(5))
+PARTITION BY RANGE (int_column) subpartition by key (char_column) subpartitions 2
+(PARTITION p1 VALUES LESS THAN (5) ENGINE = InnoDB);
+alter table t1 PARTITION BY RANGE (int_column)
+subpartition by key (char_column) subpartitions 2
+(PARTITION p1 VALUES LESS THAN (5) ENGINE = myisam);
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `int_column` int(11) DEFAULT NULL,
+ `char_column` char(5) DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (int_column) SUBPARTITION BY KEY (char_column) SUBPARTITIONS 2 (PARTITION p1 VALUES LESS THAN (5) ENGINE = MyISAM) */
+drop table t1;
diff --git a/mysql-test/r/partition_mgm.result b/mysql-test/r/partition_mgm.result
index 04ac603fea7..9ef220028b3 100644
--- a/mysql-test/r/partition_mgm.result
+++ b/mysql-test/r/partition_mgm.result
@@ -17,12 +17,6 @@ t1 CREATE TABLE `t1` (
`f_date` date DEFAULT NULL,
`f_varchar` varchar(30) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (YEAR(f_date)) PARTITIONS 2 */
-hello/master-data/test/t1#P#p0.MYD
-hello/master-data/test/t1#P#p0.MYI
-hello/master-data/test/t1#P#p1.MYD
-hello/master-data/test/t1#P#p1.MYI
-hello/master-data/test/t1.frm
-hello/master-data/test/t1.par
ALTER TABLE t1 COALESCE PARTITION 1;
SHOW CREATE TABLE t1;
Table Create Table
@@ -30,10 +24,6 @@ t1 CREATE TABLE `t1` (
`f_date` date DEFAULT NULL,
`f_varchar` varchar(30) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (YEAR(f_date)) PARTITIONS 1 */
-hello/master-data/test/t1#P#p0.MYD
-hello/master-data/test/t1#P#p0.MYI
-hello/master-data/test/t1.frm
-hello/master-data/test/t1.par
drop table t1;
create table t1 (a int)
partition by list (a)
diff --git a/mysql-test/r/partition_range.result b/mysql-test/r/partition_range.result
index a61006e87a4..4da79704ec3 100644
--- a/mysql-test/r/partition_range.result
+++ b/mysql-test/r/partition_range.result
@@ -1,4 +1,4 @@
-drop table if exists t1;
+drop table if exists t1, t2;
create table t1 (a int unsigned)
partition by range (a)
(partition pnull values less than (0),
diff --git a/mysql-test/r/partition_symlink.result b/mysql-test/r/partition_symlink.result
new file mode 100644
index 00000000000..20e841d2e0e
--- /dev/null
+++ b/mysql-test/r/partition_symlink.result
@@ -0,0 +1,83 @@
+DROP TABLE IF EXISTS t1;
+DROP DATABASE IF EXISTS mysqltest2;
+# Creating two non colliding tables mysqltest2.t1 and test.t1
+# test.t1 have partitions in mysqltest2-directory!
+# user root:
+CREATE USER mysqltest_1@localhost;
+CREATE DATABASE mysqltest2;
+USE mysqltest2;
+CREATE TABLE t1 (a INT);
+INSERT INTO t1 VALUES (0);
+# user mysqltest_1:
+USE test;
+CREATE TABLE t1 (a INT)
+PARTITION BY LIST (a) (
+PARTITION p0 VALUES IN (0)
+DATA DIRECTORY 'MYSQLTEST_VARDIR/master-data/mysqltest2'
+ INDEX DIRECTORY 'MYSQLTEST_VARDIR/master-data/mysqltest2',
+PARTITION p1 VALUES IN (1)
+DATA DIRECTORY 'MYSQLTEST_VARDIR/master-data/test'
+ INDEX DIRECTORY 'MYSQLTEST_VARDIR/master-data/test',
+PARTITION p2 VALUES IN (2)
+);
+# without the patch for bug#32091 this would create
+# files mysqltest2/t1.MYD + .MYI and possible overwrite
+# the mysqltest2.t1 table (depending on bug#32111)
+ALTER TABLE t1 REMOVE PARTITIONING;
+INSERT INTO t1 VALUES (1);
+SELECT * FROM t1;
+a
+1
+# user root:
+USE mysqltest2;
+FLUSH TABLES;
+# if the patch works, this should be different
+# and before the patch they were the same!
+SELECT * FROM t1;
+a
+0
+USE test;
+SELECT * FROM t1;
+a
+1
+DROP TABLE t1;
+DROP DATABASE mysqltest2;
+# test that symlinks can not overwrite files when CREATE TABLE
+# user root:
+CREATE DATABASE mysqltest2;
+USE mysqltest2;
+CREATE TABLE t1 (a INT)
+PARTITION BY LIST (a) (
+PARTITION p0 VALUES IN (0)
+DATA DIRECTORY 'MYSQLTEST_VARDIR/master-data/mysqltest2'
+ INDEX DIRECTORY 'MYSQLTEST_VARDIR/master-data/mysqltest2',
+PARTITION p1 VALUES IN (1)
+DATA DIRECTORY 'MYSQLTEST_VARDIR/master-data/test'
+ INDEX DIRECTORY 'MYSQLTEST_VARDIR/master-data/test'
+ );
+# user mysqltest_1:
+USE test;
+CREATE TABLE t1 (a INT)
+PARTITION BY LIST (a) (
+PARTITION p0 VALUES IN (0)
+DATA DIRECTORY 'MYSQLTEST_VARDIR/master-data/mysqltest2'
+ INDEX DIRECTORY 'MYSQLTEST_VARDIR/master-data/mysqltest2',
+PARTITION p1 VALUES IN (1)
+DATA DIRECTORY 'MYSQLTEST_VARDIR/master-data/test'
+ INDEX DIRECTORY 'MYSQLTEST_VARDIR/master-data/test'
+ );
+Got one of the listed errors
+CREATE TABLE t1 (a INT)
+PARTITION BY LIST (a) (
+PARTITION p0 VALUES IN (0)
+DATA DIRECTORY 'MYSQLTEST_VARDIR/master-data/test'
+ INDEX DIRECTORY 'MYSQLTEST_VARDIR/master-data/test',
+PARTITION p1 VALUES IN (1)
+DATA DIRECTORY 'MYSQLTEST_VARDIR/master-data/mysqltest2'
+ INDEX DIRECTORY 'MYSQLTEST_VARDIR/master-data/mysqltest2'
+ );
+Got one of the listed errors
+# user root (cleanup):
+DROP DATABASE mysqltest2;
+USE test;
+DROP USER mysqltest_1@localhost;
diff --git a/mysql-test/r/plugin.result b/mysql-test/r/plugin.result
index 8628acecf55..e4af1535775 100644
--- a/mysql-test/r/plugin.result
+++ b/mysql-test/r/plugin.result
@@ -17,3 +17,13 @@ UNINSTALL PLUGIN EXAMPLE;
ERROR 42000: PLUGIN EXAMPLE does not exist
UNINSTALL PLUGIN non_exist;
ERROR 42000: PLUGIN non_exist does not exist
+#
+# Bug#32034: check_func_enum() does not check correct values but set it
+# to impossible int val
+#
+INSTALL PLUGIN example SONAME 'ha_example.so';
+SET GLOBAL example_enum_var= e1;
+SET GLOBAL example_enum_var= e2;
+SET GLOBAL example_enum_var= impossible;
+ERROR 42000: Variable 'enum_var' can't be set to the value of 'impossible'
+UNINSTALL PLUGIN example;
diff --git a/mysql-test/r/profiling.result b/mysql-test/r/profiling.result
new file mode 100644
index 00000000000..a9ada576b4b
--- /dev/null
+++ b/mysql-test/r/profiling.result
@@ -0,0 +1,415 @@
+show profiles;
+Query_ID Duration Query
+show profile all;
+Status Duration CPU_user CPU_system Context_voluntary Context_involuntary Block_ops_in Block_ops_out Messages_sent Messages_received Page_faults_major Page_faults_minor Swaps Source_function Source_file Source_line
+show session variables like 'profil%';
+Variable_name Value
+profiling OFF
+profiling_history_size 15
+select @@profiling;
+@@profiling
+0
+set global profiling = ON;
+ERROR HY000: Variable 'profiling' is a SESSION variable and can't be used with SET GLOBAL
+set global profiling_history_size=100;
+show global variables like 'profil%';
+Variable_name Value
+profiling OFF
+profiling_history_size 100
+set session profiling = ON;
+set session profiling_history_size=30;
+show session variables like 'profil%';
+Variable_name Value
+profiling ON
+profiling_history_size 30
+select @@profiling;
+@@profiling
+1
+create table t1 (
+a int,
+b int
+);
+insert into t1 values (1,1), (2,null), (3, 4);
+insert into t1 values (5,1), (6,null), (7, 4);
+insert into t1 values (1,1), (2,null), (3, 4);
+insert into t1 values (5,1), (6,null), (7, 4);
+select max(x) from (select sum(a) as x from t1 group by b) as teeone;
+max(x)
+20
+insert into t1 select * from t1;
+select count(*) from t1;
+count(*)
+24
+insert into t1 select * from t1;
+insert into t1 select * from t1;
+insert into t1 select * from t1;
+select count(*) from t1;
+count(*)
+192
+insert into t1 select * from t1;
+insert into t1 select * from t1;
+insert into t1 select * from t1;
+select count(*) from t1;
+count(*)
+1536
+select sum(a) from t1;
+sum(a)
+6144
+select sum(a) from t1 group by b;
+sum(a)
+2048
+1536
+2560
+select sum(a) + sum(b) from t1 group by b;
+sum(a) + sum(b)
+NULL
+2048
+4608
+select max(x) from (select sum(a) as x from t1 group by b) as teeone;
+max(x)
+2560
+select '012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890' as big_string;
+big_string
+012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890
+show profiles;
+Query_ID Duration Query
+1 # set session profiling_history_size=30
+2 # show session variables like 'profil%'
+3 # select @@profiling
+4 # create table t1 (
+a int,
+b int
+)
+5 # insert into t1 values (1,1), (2,null), (3, 4)
+6 # insert into t1 values (5,1), (6,null), (7, 4)
+7 # insert into t1 values (1,1), (2,null), (3, 4)
+8 # insert into t1 values (5,1), (6,null), (7, 4)
+9 # select max(x) from (select sum(a) as x from t1 group by b) as teeone
+10 # insert into t1 select * from t1
+11 # select count(*) from t1
+12 # insert into t1 select * from t1
+13 # insert into t1 select * from t1
+14 # insert into t1 select * from t1
+15 # select count(*) from t1
+16 # insert into t1 select * from t1
+17 # insert into t1 select * from t1
+18 # insert into t1 select * from t1
+19 # select count(*) from t1
+20 # select sum(a) from t1
+21 # select sum(a) from t1 group by b
+22 # select sum(a) + sum(b) from t1 group by b
+23 # select max(x) from (select sum(a) as x from t1 group by b) as teeone
+24 # select '0123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345
+show profile for query 15;
+show profile cpu for query 15;
+show profile cpu, block io for query 15;
+show profile cpu for query 9 limit 2 offset 2;
+show profile cpu for query 10 limit 0;
+show profile cpu for query 65534;
+show profile memory;
+show profile block io;
+show profile context switches;
+show profile page faults;
+show profile ipc;
+show profile swaps limit 1 offset 2;
+show profile source;
+show profile all for query 0 limit 0;
+show profile all for query 15;
+select * from information_schema.profiling;
+select query_id, state, duration from information_schema.profiling;
+select query_id, sum(duration) from information_schema.profiling group by query_id;
+select query_id, count(*) from information_schema.profiling group by query_id;
+select sum(duration) from information_schema.profiling;
+select query_id, count(*), sum(duration) from information_schema.profiling group by query_id;
+select CPU_user, CPU_system, Context_voluntary, Context_involuntary, Block_ops_in, Block_ops_out, Messages_sent, Messages_received, Page_faults_major, Page_faults_minor, Swaps, Source_function, Source_file, Source_line from information_schema.profiling;
+drop table if exists t1, t2, t3;
+Warnings:
+Note 1051 Unknown table 't2'
+Note 1051 Unknown table 't3'
+create table t1 (id int );
+create table t2 (id int not null);
+create table t3 (id int not null primary key);
+insert into t1 values (1), (2), (3);
+insert into t2 values (1), (2), (3);
+insert into t3 values (1), (2), (3);
+show profiles;
+Query_ID Duration Query
+10 # insert into t1 select * from t1
+11 # select count(*) from t1
+12 # insert into t1 select * from t1
+13 # insert into t1 select * from t1
+14 # insert into t1 select * from t1
+15 # select count(*) from t1
+16 # insert into t1 select * from t1
+17 # insert into t1 select * from t1
+18 # insert into t1 select * from t1
+19 # select count(*) from t1
+20 # select sum(a) from t1
+21 # select sum(a) from t1 group by b
+22 # select sum(a) + sum(b) from t1 group by b
+23 # select max(x) from (select sum(a) as x from t1 group by b) as teeone
+24 # select '0123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345
+25 # select * from information_schema.profiling
+26 # select query_id, state, duration from information_schema.profiling
+27 # select query_id, sum(duration) from information_schema.profiling group by query_id
+28 # select query_id, count(*) from information_schema.profiling group by query_id
+29 # select sum(duration) from information_schema.profiling
+30 # select query_id, count(*), sum(duration) from information_schema.profiling group by query_id
+31 # select CPU_user, CPU_system, Context_voluntary, Context_involuntary, Block_ops_in, Block_ops_out, Messages_sent, Messages_received, Page_faults_major, Page_faults_minor, Swaps, Source_function, Source_file, Source_line from information_schema.profiling
+32 # drop table if exists t1, t2, t3
+33 # SHOW WARNINGS
+34 # create table t1 (id int )
+35 # create table t2 (id int not null)
+36 # create table t3 (id int not null primary key)
+37 # insert into t1 values (1), (2), (3)
+38 # insert into t2 values (1), (2), (3)
+39 # insert into t3 values (1), (2), (3)
+select * from t1;
+id
+1
+2
+3
+show profiles;
+Query_ID Duration Query
+11 # select count(*) from t1
+12 # insert into t1 select * from t1
+13 # insert into t1 select * from t1
+14 # insert into t1 select * from t1
+15 # select count(*) from t1
+16 # insert into t1 select * from t1
+17 # insert into t1 select * from t1
+18 # insert into t1 select * from t1
+19 # select count(*) from t1
+20 # select sum(a) from t1
+21 # select sum(a) from t1 group by b
+22 # select sum(a) + sum(b) from t1 group by b
+23 # select max(x) from (select sum(a) as x from t1 group by b) as teeone
+24 # select '0123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345
+25 # select * from information_schema.profiling
+26 # select query_id, state, duration from information_schema.profiling
+27 # select query_id, sum(duration) from information_schema.profiling group by query_id
+28 # select query_id, count(*) from information_schema.profiling group by query_id
+29 # select sum(duration) from information_schema.profiling
+30 # select query_id, count(*), sum(duration) from information_schema.profiling group by query_id
+31 # select CPU_user, CPU_system, Context_voluntary, Context_involuntary, Block_ops_in, Block_ops_out, Messages_sent, Messages_received, Page_faults_major, Page_faults_minor, Swaps, Source_function, Source_file, Source_line from information_schema.profiling
+32 # drop table if exists t1, t2, t3
+33 # SHOW WARNINGS
+34 # create table t1 (id int )
+35 # create table t2 (id int not null)
+36 # create table t3 (id int not null primary key)
+37 # insert into t1 values (1), (2), (3)
+38 # insert into t2 values (1), (2), (3)
+39 # insert into t3 values (1), (2), (3)
+40 # select * from t1
+This ^^ should end in "select * from t1;"
+delete from t1;
+insert into t1 values (1), (2), (3);
+insert into t1 values (1), (2), (3);
+select * from t1;
+id
+1
+2
+3
+1
+2
+3
+show profiles;
+Query_ID Duration Query
+15 # select count(*) from t1
+16 # insert into t1 select * from t1
+17 # insert into t1 select * from t1
+18 # insert into t1 select * from t1
+19 # select count(*) from t1
+20 # select sum(a) from t1
+21 # select sum(a) from t1 group by b
+22 # select sum(a) + sum(b) from t1 group by b
+23 # select max(x) from (select sum(a) as x from t1 group by b) as teeone
+24 # select '0123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345
+25 # select * from information_schema.profiling
+26 # select query_id, state, duration from information_schema.profiling
+27 # select query_id, sum(duration) from information_schema.profiling group by query_id
+28 # select query_id, count(*) from information_schema.profiling group by query_id
+29 # select sum(duration) from information_schema.profiling
+30 # select query_id, count(*), sum(duration) from information_schema.profiling group by query_id
+31 # select CPU_user, CPU_system, Context_voluntary, Context_involuntary, Block_ops_in, Block_ops_out, Messages_sent, Messages_received, Page_faults_major, Page_faults_minor, Swaps, Source_function, Source_file, Source_line from information_schema.profiling
+32 # drop table if exists t1, t2, t3
+33 # SHOW WARNINGS
+34 # create table t1 (id int )
+35 # create table t2 (id int not null)
+36 # create table t3 (id int not null primary key)
+37 # insert into t1 values (1), (2), (3)
+38 # insert into t2 values (1), (2), (3)
+39 # insert into t3 values (1), (2), (3)
+40 # select * from t1
+41 # delete from t1
+42 # insert into t1 values (1), (2), (3)
+43 # insert into t1 values (1), (2), (3)
+44 # select * from t1
+set session profiling = OFF;
+select sum(id) from t1;
+sum(id)
+12
+show profiles;
+Query_ID Duration Query
+15 # select count(*) from t1
+16 # insert into t1 select * from t1
+17 # insert into t1 select * from t1
+18 # insert into t1 select * from t1
+19 # select count(*) from t1
+20 # select sum(a) from t1
+21 # select sum(a) from t1 group by b
+22 # select sum(a) + sum(b) from t1 group by b
+23 # select max(x) from (select sum(a) as x from t1 group by b) as teeone
+24 # select '0123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345
+25 # select * from information_schema.profiling
+26 # select query_id, state, duration from information_schema.profiling
+27 # select query_id, sum(duration) from information_schema.profiling group by query_id
+28 # select query_id, count(*) from information_schema.profiling group by query_id
+29 # select sum(duration) from information_schema.profiling
+30 # select query_id, count(*), sum(duration) from information_schema.profiling group by query_id
+31 # select CPU_user, CPU_system, Context_voluntary, Context_involuntary, Block_ops_in, Block_ops_out, Messages_sent, Messages_received, Page_faults_major, Page_faults_minor, Swaps, Source_function, Source_file, Source_line from information_schema.profiling
+32 # drop table if exists t1, t2, t3
+33 # SHOW WARNINGS
+34 # create table t1 (id int )
+35 # create table t2 (id int not null)
+36 # create table t3 (id int not null primary key)
+37 # insert into t1 values (1), (2), (3)
+38 # insert into t2 values (1), (2), (3)
+39 # insert into t3 values (1), (2), (3)
+40 # select * from t1
+41 # delete from t1
+42 # insert into t1 values (1), (2), (3)
+43 # insert into t1 values (1), (2), (3)
+44 # select * from t1
+set session profiling = ON;
+select @@profiling;
+@@profiling
+1
+create function f1() returns varchar(50) return 'hello';
+select @@profiling;
+@@profiling
+1
+select * from t1 where id <> f1();
+id
+1
+2
+3
+1
+2
+3
+select @@profiling;
+@@profiling
+1
+set session profiling = OFF;
+drop table if exists profile_log;
+Warnings:
+Note 1051 Unknown table 'profile_log'
+create table profile_log (how_many int);
+drop procedure if exists p1;
+drop procedure if exists p2;
+drop procedure if exists p3;
+create procedure p1 ()
+modifies sql data
+begin
+set profiling = ON;
+select 'This p1 should show up in profiling';
+insert into profile_log select count(*) from information_schema.profiling;
+end//
+create procedure p2()
+deterministic
+begin
+set profiling = ON;
+call p1();
+select 'This p2 should show up in profiling';
+end//
+create procedure p3 ()
+reads sql data
+begin
+set profiling = ON;
+select 'This p3 should show up in profiling';
+show profile;
+end//
+first call to p1
+call p1;
+select * from profile_log;
+second call to p1
+call p1;
+select * from profile_log;
+third call to p1
+call p1;
+select * from profile_log;
+set session profiling = OFF;
+call p2;
+set session profiling = OFF;
+call p3;
+show profiles;
+drop procedure if exists p1;
+drop procedure if exists p2;
+drop procedure if exists p3;
+drop table if exists profile_log;
+set session profiling = ON;
+drop table if exists t2;
+create table t2 (id int not null);
+create trigger t2_bi before insert on t2 for each row set @x=0;
+select @@profiling;
+@@profiling
+1
+insert into t2 values (1), (2), (3);
+select @@profiling;
+@@profiling
+1
+set session profiling = ON;
+drop table if exists t1, t2;
+create table t1 (id int not null primary key);
+create table t2 (id int not null primary key, id1 int not null);
+select @@profiling;
+@@profiling
+1
+alter table t2 add foreign key (id1) references t1 (id) on delete cascade;
+select @@profiling;
+@@profiling
+1
+lock table t1 write;
+select @@profiling;
+@@profiling
+1
+unlock table;
+select @@profiling;
+@@profiling
+1
+set autocommit=0;
+select @@profiling, @@autocommit;
+@@profiling @@autocommit
+1 0
+begin;
+select @@profiling;
+@@profiling
+1
+insert into t1 values (1);
+insert into t2 values (1,1);
+testing referential integrity cascade
+delete from t1 where id = 1;
+select @@profiling;
+@@profiling
+1
+testing rollback
+rollback;
+select @@profiling;
+@@profiling
+1
+testing commit
+begin;
+select @@profiling;
+@@profiling
+1
+commit;
+select @@profiling;
+@@profiling
+1
+drop table if exists t1, t2, t3;
+drop view if exists v1;
+Warnings:
+Note 1051 Unknown table 'test.v1'
+drop function if exists f1;
+set session profiling = OFF;
+End of 5.0 tests
diff --git a/mysql-test/r/ps.result b/mysql-test/r/ps.result
index edac68a88d6..a6b07bfc127 100644
--- a/mysql-test/r/ps.result
+++ b/mysql-test/r/ps.result
@@ -807,6 +807,8 @@ select @@max_prepared_stmt_count;
@@max_prepared_stmt_count
0
set global max_prepared_stmt_count=10000000000000000;
+Warnings:
+Warning 1292 Truncated incorrect max_prepared_stmt_count value: '10000000000000000'
select @@max_prepared_stmt_count;
@@max_prepared_stmt_count
1048576
@@ -1143,6 +1145,11 @@ a
13
DEALLOCATE PREPARE st1;
DROP TABLE t1;
+create table t1 (a int, b tinyint);
+prepare st1 from 'update t1 set b= (str_to_date(a, a))';
+execute st1;
+deallocate prepare st1;
+drop table t1;
End of 4.1 tests.
create table t1 (a varchar(20));
insert into t1 values ('foo');
@@ -2680,4 +2687,21 @@ t1 CREATE TABLE `t1` (
KEY `c` (`c`(10))
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
+drop table if exists t1, t2;
+create table t1 (a int, b int);
+create table t2 like t1;
+insert into t1 (a, b) values (1,1), (1,2), (1,3), (1,4), (1,5),
+(2,2), (2,3), (2,1), (3,1), (4,1), (4,2), (4,3), (4,4), (4,5), (4,6);
+insert into t2 select a, max(b) from t1 group by a;
+prepare stmt from "delete from t2 where (select (select max(b) from t1 group
+by a having a < 2) x from t1) > 10000";
+delete from t2 where (select (select max(b) from t1 group
+by a having a < 2) x from t1) > 10000;
+ERROR 21000: Subquery returns more than 1 row
+execute stmt;
+ERROR 21000: Subquery returns more than 1 row
+execute stmt;
+ERROR 21000: Subquery returns more than 1 row
+deallocate prepare stmt;
+drop table t1, t2;
End of 5.1 tests.
diff --git a/mysql-test/r/ps_2myisam.result b/mysql-test/r/ps_2myisam.result
index afc248c027e..06bfd78a351 100644
--- a/mysql-test/r/ps_2myisam.result
+++ b/mysql-test/r/ps_2myisam.result
@@ -63,7 +63,7 @@ def test t9 t9 c11 c11 246 9 6 Y 0 4 63
def test t9 t9 c12 c12 246 10 6 Y 0 4 63
def test t9 t9 c13 c13 10 10 10 Y 128 0 63
def test t9 t9 c14 c14 12 19 19 Y 128 0 63
-def test t9 t9 c15 c15 7 19 19 N 1249 0 63
+def test t9 t9 c15 c15 7 19 19 N 9441 0 63
def test t9 t9 c16 c16 11 8 8 Y 128 0 63
def test t9 t9 c17 c17 13 4 4 Y 32864 0 63
def test t9 t9 c18 c18 1 4 1 Y 32768 0 63
@@ -783,20 +783,20 @@ a b
2 two
3 three
4 four
-prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
- (SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
+prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
+ (SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
execute stmt1 ;
ccc
1
deallocate prepare stmt1 ;
-prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
- (SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
+prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
+ (SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
execute stmt1 ;
ccc
1
deallocate prepare stmt1 ;
-prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
- (SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
+prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
+ (SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
execute stmt1 ;
ccc
1
@@ -1303,12 +1303,11 @@ a b
set @arg00=NULL;
set @arg01=2;
execute stmt1 using @arg00, @arg01;
-Warnings:
-Warning 1048 Column 'a' cannot be null
+ERROR 23000: Column 'a' cannot be null
select a,b from t1 order by a;
a b
-0 two
1 one
+2 two
3 three
4 four
set @arg00=0;
@@ -2973,11 +2972,13 @@ Warnings:
Note 1265 Data truncated for column 'c13' at row 1
Warning 1265 Data truncated for column 'c17' at row 1
Warnings:
+Note 1265 Data truncated for column 'c13' at row 1
Warning 1265 Data truncated for column 'c17' at row 1
Warnings:
Note 1265 Data truncated for column 'c13' at row 1
Warning 1265 Data truncated for column 'c17' at row 1
Warnings:
+Note 1265 Data truncated for column 'c13' at row 1
Warning 1265 Data truncated for column 'c17' at row 1
Warnings:
Note 1265 Data truncated for column 'c13' at row 1
@@ -3011,7 +3012,6 @@ Warning 1265 Data truncated for column 'c15' at row 1
Warning 1264 Out of range value for column 'c16' at row 1
Warning 1264 Out of range value for column 'c17' at row 1
Warnings:
-Note 1265 Data truncated for column 'c13' at row 1
Warning 1265 Data truncated for column 'c15' at row 1
Warning 1264 Out of range value for column 'c16' at row 1
Warning 1264 Out of range value for column 'c17' at row 1
diff --git a/mysql-test/r/ps_3innodb.result b/mysql-test/r/ps_3innodb.result
index e3f55cee898..f56b1d37a2c 100644
--- a/mysql-test/r/ps_3innodb.result
+++ b/mysql-test/r/ps_3innodb.result
@@ -63,7 +63,7 @@ def test t9 t9 c11 c11 246 9 6 Y 0 4 63
def test t9 t9 c12 c12 246 10 6 Y 0 4 63
def test t9 t9 c13 c13 10 10 10 Y 128 0 63
def test t9 t9 c14 c14 12 19 19 Y 128 0 63
-def test t9 t9 c15 c15 7 19 19 N 1249 0 63
+def test t9 t9 c15 c15 7 19 19 N 9441 0 63
def test t9 t9 c16 c16 11 8 8 Y 128 0 63
def test t9 t9 c17 c17 13 4 4 Y 32864 0 63
def test t9 t9 c18 c18 1 4 1 Y 32768 0 63
@@ -783,20 +783,20 @@ a b
2 two
3 three
4 four
-prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
- (SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
+prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
+ (SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
execute stmt1 ;
ccc
1
deallocate prepare stmt1 ;
-prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
- (SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
+prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
+ (SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
execute stmt1 ;
ccc
1
deallocate prepare stmt1 ;
-prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
- (SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
+prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
+ (SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
execute stmt1 ;
ccc
1
@@ -1286,12 +1286,11 @@ a b
set @arg00=NULL;
set @arg01=2;
execute stmt1 using @arg00, @arg01;
-Warnings:
-Warning 1048 Column 'a' cannot be null
+ERROR 23000: Column 'a' cannot be null
select a,b from t1 order by a;
a b
-0 two
1 one
+2 two
3 three
4 four
set @arg00=0;
@@ -2956,11 +2955,13 @@ Warnings:
Note 1265 Data truncated for column 'c13' at row 1
Warning 1265 Data truncated for column 'c17' at row 1
Warnings:
+Note 1265 Data truncated for column 'c13' at row 1
Warning 1265 Data truncated for column 'c17' at row 1
Warnings:
Note 1265 Data truncated for column 'c13' at row 1
Warning 1265 Data truncated for column 'c17' at row 1
Warnings:
+Note 1265 Data truncated for column 'c13' at row 1
Warning 1265 Data truncated for column 'c17' at row 1
Warnings:
Note 1265 Data truncated for column 'c13' at row 1
@@ -2994,7 +2995,6 @@ Warning 1265 Data truncated for column 'c15' at row 1
Warning 1264 Out of range value for column 'c16' at row 1
Warning 1264 Out of range value for column 'c17' at row 1
Warnings:
-Note 1265 Data truncated for column 'c13' at row 1
Warning 1265 Data truncated for column 'c15' at row 1
Warning 1264 Out of range value for column 'c16' at row 1
Warning 1264 Out of range value for column 'c17' at row 1
diff --git a/mysql-test/r/ps_4heap.result b/mysql-test/r/ps_4heap.result
index fa33dcc395a..0c643facf72 100644
--- a/mysql-test/r/ps_4heap.result
+++ b/mysql-test/r/ps_4heap.result
@@ -64,7 +64,7 @@ def test t9 t9 c11 c11 246 9 6 Y 0 4 63
def test t9 t9 c12 c12 246 10 6 Y 0 4 63
def test t9 t9 c13 c13 10 10 10 Y 128 0 63
def test t9 t9 c14 c14 12 19 19 Y 128 0 63
-def test t9 t9 c15 c15 7 19 19 N 1249 0 63
+def test t9 t9 c15 c15 7 19 19 N 9441 0 63
def test t9 t9 c16 c16 11 8 8 Y 128 0 63
def test t9 t9 c17 c17 13 4 4 Y 32864 0 63
def test t9 t9 c18 c18 1 4 1 Y 32768 0 63
@@ -784,20 +784,20 @@ a b
2 two
3 three
4 four
-prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
- (SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
+prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
+ (SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
execute stmt1 ;
ccc
1
deallocate prepare stmt1 ;
-prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
- (SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
+prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
+ (SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
execute stmt1 ;
ccc
1
deallocate prepare stmt1 ;
-prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
- (SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
+prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
+ (SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
execute stmt1 ;
ccc
1
@@ -1287,12 +1287,11 @@ a b
set @arg00=NULL;
set @arg01=2;
execute stmt1 using @arg00, @arg01;
-Warnings:
-Warning 1048 Column 'a' cannot be null
+ERROR 23000: Column 'a' cannot be null
select a,b from t1 order by a;
a b
-0 two
1 one
+2 two
3 three
4 four
set @arg00=0;
@@ -2957,11 +2956,13 @@ Warnings:
Note 1265 Data truncated for column 'c13' at row 1
Warning 1265 Data truncated for column 'c17' at row 1
Warnings:
+Note 1265 Data truncated for column 'c13' at row 1
Warning 1265 Data truncated for column 'c17' at row 1
Warnings:
Note 1265 Data truncated for column 'c13' at row 1
Warning 1265 Data truncated for column 'c17' at row 1
Warnings:
+Note 1265 Data truncated for column 'c13' at row 1
Warning 1265 Data truncated for column 'c17' at row 1
Warnings:
Note 1265 Data truncated for column 'c13' at row 1
@@ -2995,7 +2996,6 @@ Warning 1265 Data truncated for column 'c15' at row 1
Warning 1264 Out of range value for column 'c16' at row 1
Warning 1264 Out of range value for column 'c17' at row 1
Warnings:
-Note 1265 Data truncated for column 'c13' at row 1
Warning 1265 Data truncated for column 'c15' at row 1
Warning 1264 Out of range value for column 'c16' at row 1
Warning 1264 Out of range value for column 'c17' at row 1
diff --git a/mysql-test/r/ps_5merge.result b/mysql-test/r/ps_5merge.result
index 968342c8a93..bd3cd4ac1fc 100644
--- a/mysql-test/r/ps_5merge.result
+++ b/mysql-test/r/ps_5merge.result
@@ -106,7 +106,7 @@ def test t9 t9 c11 c11 246 9 6 Y 0 4 63
def test t9 t9 c12 c12 246 10 6 Y 0 4 63
def test t9 t9 c13 c13 10 10 10 Y 128 0 63
def test t9 t9 c14 c14 12 19 19 Y 128 0 63
-def test t9 t9 c15 c15 7 19 19 N 1249 0 63
+def test t9 t9 c15 c15 7 19 19 N 9441 0 63
def test t9 t9 c16 c16 11 8 8 Y 128 0 63
def test t9 t9 c17 c17 13 4 4 Y 32864 0 63
def test t9 t9 c18 c18 1 4 1 Y 32768 0 63
@@ -826,20 +826,20 @@ a b
2 two
3 three
4 four
-prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
- (SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
+prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
+ (SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
execute stmt1 ;
ccc
1
deallocate prepare stmt1 ;
-prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
- (SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
+prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
+ (SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
execute stmt1 ;
ccc
1
deallocate prepare stmt1 ;
-prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
- (SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
+prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
+ (SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
execute stmt1 ;
ccc
1
@@ -1329,12 +1329,11 @@ a b
set @arg00=NULL;
set @arg01=2;
execute stmt1 using @arg00, @arg01;
-Warnings:
-Warning 1048 Column 'a' cannot be null
+ERROR 23000: Column 'a' cannot be null
select a,b from t1 order by a;
a b
-0 two
1 one
+2 two
3 three
4 four
set @arg00=0;
@@ -2893,11 +2892,13 @@ Warnings:
Note 1265 Data truncated for column 'c13' at row 1
Warning 1265 Data truncated for column 'c17' at row 1
Warnings:
+Note 1265 Data truncated for column 'c13' at row 1
Warning 1265 Data truncated for column 'c17' at row 1
Warnings:
Note 1265 Data truncated for column 'c13' at row 1
Warning 1265 Data truncated for column 'c17' at row 1
Warnings:
+Note 1265 Data truncated for column 'c13' at row 1
Warning 1265 Data truncated for column 'c17' at row 1
Warnings:
Note 1265 Data truncated for column 'c13' at row 1
@@ -2931,7 +2932,6 @@ Warning 1265 Data truncated for column 'c15' at row 1
Warning 1264 Out of range value for column 'c16' at row 1
Warning 1264 Out of range value for column 'c17' at row 1
Warnings:
-Note 1265 Data truncated for column 'c13' at row 1
Warning 1265 Data truncated for column 'c15' at row 1
Warning 1264 Out of range value for column 'c16' at row 1
Warning 1264 Out of range value for column 'c17' at row 1
@@ -3127,7 +3127,7 @@ def test t9 t9 c11 c11 246 9 6 Y 0 4 63
def test t9 t9 c12 c12 246 10 6 Y 0 4 63
def test t9 t9 c13 c13 10 10 10 Y 128 0 63
def test t9 t9 c14 c14 12 19 19 Y 128 0 63
-def test t9 t9 c15 c15 7 19 19 N 1249 0 63
+def test t9 t9 c15 c15 7 19 19 N 9441 0 63
def test t9 t9 c16 c16 11 8 8 Y 128 0 63
def test t9 t9 c17 c17 13 4 4 Y 32864 0 63
def test t9 t9 c18 c18 1 4 1 Y 32768 0 63
@@ -3847,20 +3847,20 @@ a b
2 two
3 three
4 four
-prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
- (SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
+prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
+ (SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
execute stmt1 ;
ccc
1
deallocate prepare stmt1 ;
-prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
- (SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
+prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
+ (SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
execute stmt1 ;
ccc
1
deallocate prepare stmt1 ;
-prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
- (SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
+prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
+ (SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
execute stmt1 ;
ccc
1
@@ -4350,12 +4350,11 @@ a b
set @arg00=NULL;
set @arg01=2;
execute stmt1 using @arg00, @arg01;
-Warnings:
-Warning 1048 Column 'a' cannot be null
+ERROR 23000: Column 'a' cannot be null
select a,b from t1 order by a;
a b
-0 two
1 one
+2 two
3 three
4 four
set @arg00=0;
@@ -5914,11 +5913,13 @@ Warnings:
Note 1265 Data truncated for column 'c13' at row 1
Warning 1265 Data truncated for column 'c17' at row 1
Warnings:
+Note 1265 Data truncated for column 'c13' at row 1
Warning 1265 Data truncated for column 'c17' at row 1
Warnings:
Note 1265 Data truncated for column 'c13' at row 1
Warning 1265 Data truncated for column 'c17' at row 1
Warnings:
+Note 1265 Data truncated for column 'c13' at row 1
Warning 1265 Data truncated for column 'c17' at row 1
Warnings:
Note 1265 Data truncated for column 'c13' at row 1
@@ -5952,7 +5953,6 @@ Warning 1265 Data truncated for column 'c15' at row 1
Warning 1264 Out of range value for column 'c16' at row 1
Warning 1264 Out of range value for column 'c17' at row 1
Warnings:
-Note 1265 Data truncated for column 'c13' at row 1
Warning 1265 Data truncated for column 'c15' at row 1
Warning 1264 Out of range value for column 'c16' at row 1
Warning 1264 Out of range value for column 'c17' at row 1
diff --git a/mysql-test/r/ps_ddl.result b/mysql-test/r/ps_ddl.result
new file mode 100644
index 00000000000..0987e765265
--- /dev/null
+++ b/mysql-test/r/ps_ddl.result
@@ -0,0 +1,2329 @@
+=====================================================================
+Testing 1: NOTHING -> TABLE transitions
+=====================================================================
+drop table if exists t1;
+SELECT VARIABLE_VALUE from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
+into @base_count ;
+prepare stmt from 'select * from t1';
+ERROR 42S02: Table 'test.t1' doesn't exist
+=====================================================================
+Testing 2: NOTHING -> TEMPORARY TABLE transitions
+=====================================================================
+=====================================================================
+Testing 3: NOTHING -> VIEW transitions
+=====================================================================
+=====================================================================
+Testing 4: TABLE -> NOTHING transitions
+=====================================================================
+drop table if exists t4;
+SELECT VARIABLE_VALUE from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
+into @base_count ;
+create table t4(a int);
+prepare stmt from 'select * from t4';
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop table t4;
+execute stmt;
+ERROR 42S02: Table 'test.t4' doesn't exist
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt;
+ERROR 42S02: Table 'test.t4' doesn't exist
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+=====================================================================
+Testing 5: TABLE -> TABLE (DDL) transitions
+=====================================================================
+drop table if exists t5;
+SELECT VARIABLE_VALUE from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
+into @base_count ;
+create table t5(a int);
+prepare stmt from 'select * from t5';
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+alter table t5 add column (b int);
+execute stmt;
+a b
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+execute stmt;
+a b
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+drop table t5;
+=====================================================================
+Testing 6: TABLE -> TABLE (TRIGGER) transitions
+=====================================================================
+drop table if exists t6;
+SELECT VARIABLE_VALUE from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
+into @base_count ;
+create table t6(a int);
+prepare stmt from 'insert into t6(a) value (?)';
+set @val=1;
+execute stmt using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+set @val=2;
+execute stmt using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+create trigger t6_bi before insert on t6 for each row
+begin
+set @message= "t6_bi";
+end
+$$
+set @message="none";
+set @val=3;
+execute stmt using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+select @message;
+@message
+t6_bi
+set @val=4;
+execute stmt using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+select @message;
+@message
+t6_bi
+prepare stmt from 'insert into t6(a) value (?)';
+set @message="none";
+set @val=5;
+execute stmt using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+select @message;
+@message
+t6_bi
+set @message="none";
+set @val=6;
+execute stmt using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+select @message;
+@message
+t6_bi
+create trigger t6_bd before delete on t6 for each row
+begin
+set @message= "t6_bd";
+end
+$$
+set @message="none";
+set @val=7;
+execute stmt using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+select @message;
+@message
+t6_bi
+set @message="none";
+set @val=8;
+execute stmt using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+select @message;
+@message
+t6_bi
+prepare stmt from 'insert into t6(a) value (?)';
+set @message="none";
+set @val=9;
+execute stmt using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+select @message;
+@message
+t6_bi
+set @message="none";
+set @val=10;
+execute stmt using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+select @message;
+@message
+t6_bi
+drop trigger t6_bi;
+create trigger t6_bi before insert on t6 for each row
+begin
+set @message= "t6_bi (2)";
+end
+$$
+set @message="none";
+set @val=11;
+execute stmt using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+2
+select @message;
+@message
+t6_bi (2)
+set @val=12;
+execute stmt using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+2
+select @message;
+@message
+t6_bi (2)
+prepare stmt from 'insert into t6(a) value (?)';
+set @message="none";
+set @val=13;
+execute stmt using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+2
+select @message;
+@message
+t6_bi (2)
+set @message="none";
+set @val=14;
+execute stmt using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+2
+select @message;
+@message
+t6_bi (2)
+drop trigger t6_bd;
+create trigger t6_bd before delete on t6 for each row
+begin
+set @message= "t6_bd (2)";
+end
+$$
+set @message="none";
+set @val=15;
+execute stmt using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+2
+select @message;
+@message
+t6_bi (2)
+set @message="none";
+set @val=16;
+execute stmt using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+2
+select @message;
+@message
+t6_bi (2)
+prepare stmt from 'insert into t6(a) value (?)';
+set @message="none";
+set @val=17;
+execute stmt using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+2
+select @message;
+@message
+t6_bi (2)
+set @message="none";
+set @val=18;
+execute stmt using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+2
+select @message;
+@message
+t6_bi (2)
+drop trigger t6_bi;
+set @message="none";
+set @val=19;
+execute stmt using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+2
+select @message;
+@message
+none
+set @val=20;
+execute stmt using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+2
+select @message;
+@message
+none
+prepare stmt from 'insert into t6(a) value (?)';
+set @message="none";
+set @val=21;
+execute stmt using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+2
+select @message;
+@message
+none
+set @val=22;
+execute stmt using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+2
+select @message;
+@message
+none
+drop trigger t6_bd;
+set @val=23;
+execute stmt using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+2
+select @message;
+@message
+none
+set @val=24;
+execute stmt using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+2
+select @message;
+@message
+none
+select * from t6 order by a;
+a
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+drop table t6;
+=====================================================================
+Testing 7: TABLE -> TABLE (TRIGGER dependencies) transitions
+=====================================================================
+drop table if exists t7_proc;
+drop table if exists t7_func;
+drop table if exists t7_view;
+drop table if exists t7_table;
+drop table if exists t7_dependent_table;
+drop table if exists t7_table_trigger;
+drop table if exists t7_audit;
+drop procedure if exists audit_proc;
+drop function if exists audit_func;
+drop view if exists audit_view;
+SELECT VARIABLE_VALUE from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
+into @base_count ;
+create table t7_proc(a int);
+create table t7_func(a int);
+create table t7_view(a int);
+create table t7_table(a int);
+create table t7_table_trigger(a int);
+create table t7_audit(old_a int, new_a int, reason varchar(50));
+create table t7_dependent_table(old_a int, new_a int, reason varchar(50));
+create procedure audit_proc(a int)
+insert into t7_audit values (NULL, a, "proc v1");
+create function audit_func() returns varchar(50)
+return "func v1";
+create view audit_view as select "view v1" as reason from dual;
+create trigger t7_proc_bi before insert on t7_proc for each row
+call audit_proc(NEW.a);
+create trigger t7_func_bi before insert on t7_func for each row
+insert into t7_audit values (NULL, NEW.a, audit_func());
+create trigger t7_view_bi before insert on t7_view for each row
+insert into t7_audit values (NULL, NEW.a, (select reason from audit_view));
+create trigger t7_table_bi before insert on t7_table for each row
+insert into t7_dependent_table values (NULL, NEW.a, "dependent table");
+create trigger t7_table_trigger_bi before insert on t7_dependent_table
+for each row set NEW.reason="trigger v1";
+prepare stmt_proc from 'insert into t7_proc(a) value (?)';
+set @val=101;
+execute stmt_proc using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+set @val=102;
+execute stmt_proc using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop procedure audit_proc;
+create procedure audit_proc(a int)
+insert into t7_audit values (NULL, a, "proc v2");
+set @val=103;
+execute stmt_proc using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+set @val=104;
+execute stmt_proc using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+prepare stmt_func from 'insert into t7_func(a) value (?)';
+set @val=201;
+execute stmt_func using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+set @val=202;
+execute stmt_func using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop function audit_func;
+create function audit_func() returns varchar(50)
+return "func v2";
+set @val=203;
+execute stmt_func using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+set @val=204;
+execute stmt_func using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+prepare stmt_view from 'insert into t7_view(a) value (?)';
+set @val=301;
+execute stmt_view using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+set @val=302;
+execute stmt_view using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop view audit_view;
+create view audit_view as select "view v2" as reason from dual;
+set @val=303;
+execute stmt_view using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+set @val=304;
+execute stmt_view using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+prepare stmt_table from 'insert into t7_table(a) value (?)';
+set @val=401;
+execute stmt_table using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+set @val=402;
+execute stmt_table using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+alter table t7_dependent_table add column comments varchar(100) default NULL;
+set @val=403;
+execute stmt_table using @val;
+ERROR 21S01: Column count doesn't match value count at row 1
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+2
+set @val=404;
+execute stmt_table using @val;
+ERROR 21S01: Column count doesn't match value count at row 1
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+2
+alter table t7_dependent_table drop column comments;
+set @val=405;
+execute stmt_table using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+3
+set @val=406;
+execute stmt_table using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+3
+prepare stmt_table_trigger from 'insert into t7_table(a) value (?)';
+set @val=501;
+execute stmt_table_trigger using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+3
+set @val=502;
+execute stmt_table_trigger using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+3
+drop trigger t7_table_trigger_bi;
+create trigger t7_table_trigger_bi before insert on t7_dependent_table
+for each row set NEW.reason="trigger v2";
+set @val=503;
+execute stmt_table_trigger using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+4
+set @val=504;
+execute stmt_table_trigger using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+4
+select * from t7_audit order by new_a;
+old_a new_a reason
+NULL 101 proc v1
+NULL 102 proc v1
+NULL 103 proc v2
+NULL 104 proc v2
+NULL 201 func v1
+NULL 202 func v1
+NULL 203 func v2
+NULL 204 func v2
+NULL 301 view v1
+NULL 302 view v1
+NULL 303 view v1
+NULL 304 view v1
+select * from t7_dependent_table order by new_a;
+old_a new_a reason
+NULL 401 trigger v1
+NULL 402 trigger v1
+NULL 405 trigger v1
+NULL 406 trigger v1
+NULL 501 trigger v1
+NULL 502 trigger v1
+NULL 503 trigger v2
+NULL 504 trigger v2
+drop table t7_proc;
+drop table t7_func;
+drop table t7_view;
+drop table t7_table;
+drop table t7_dependent_table;
+drop table t7_table_trigger;
+drop table t7_audit;
+drop procedure audit_proc;
+drop function audit_func;
+drop view audit_view;
+=====================================================================
+Testing 8: TABLE -> TEMPORARY TABLE transitions
+=====================================================================
+drop table if exists t8;
+SELECT VARIABLE_VALUE from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
+into @base_count ;
+create table t8(a int);
+prepare stmt from 'select * from t8';
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop table t8;
+create temporary table t8(a int);
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+drop table t8;
+=====================================================================
+Testing 9: TABLE -> VIEW transitions
+=====================================================================
+drop table if exists t9;
+drop table if exists t9_b;
+SELECT VARIABLE_VALUE from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
+into @base_count ;
+create table t9(a int);
+create table t9_b(a int);
+prepare stmt from 'select * from t9';
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop table t9;
+create view t9 as select * from t9_b;
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+drop view t9;
+drop table t9_b;
+=====================================================================
+Testing 10: TEMPORARY TABLE -> NOTHING transitions
+=====================================================================
+drop temporary table if exists t10;
+SELECT VARIABLE_VALUE from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
+into @base_count ;
+create temporary table t10(a int);
+prepare stmt from 'select * from t10';
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop temporary table t10;
+execute stmt;
+ERROR 42S02: Table 'test.t10' doesn't exist
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt;
+ERROR 42S02: Table 'test.t10' doesn't exist
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+=====================================================================
+Testing 11: TEMPORARY TABLE -> TABLE transitions
+=====================================================================
+drop table if exists t11;
+drop temporary table if exists t11;
+SELECT VARIABLE_VALUE from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
+into @base_count ;
+create table t11(a int);
+insert into t11(a) value (1);
+create temporary table t11(a int);
+prepare stmt from 'select * from t11';
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop temporary table t11;
+execute stmt;
+a
+1
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+execute stmt;
+a
+1
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+select * from t11;
+a
+1
+drop table t11;
+=====================================================================
+Testing 12: TEMPORARY TABLE -> TEMPORARY TABLE (DDL) transitions
+=====================================================================
+drop temporary table if exists t12;
+SELECT VARIABLE_VALUE from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
+into @base_count ;
+create temporary table t12(a int);
+prepare stmt from 'select * from t12';
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop temporary table t12;
+create temporary table t12(a int, b int);
+execute stmt;
+a b
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+execute stmt;
+a b
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+select * from t12;
+a b
+drop table t12;
+=====================================================================
+Testing 13: TEMPORARY TABLE -> VIEW transitions
+=====================================================================
+drop temporary table if exists t13;
+drop table if exists t13_b;
+SELECT VARIABLE_VALUE from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
+into @base_count ;
+create temporary table t13(a int);
+create table t13_b(a int);
+prepare stmt from 'select * from t13';
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop temporary table t13;
+create view t13 as select * from t13_b;
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+drop view t13;
+drop table t13_b;
+=====================================================================
+Testing 14: VIEW -> NOTHING transitions
+=====================================================================
+drop view if exists t14;
+drop table if exists t14_b;
+SELECT VARIABLE_VALUE from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
+into @base_count ;
+create table t14_b(a int);
+create view t14 as select * from t14_b;
+prepare stmt from 'select * from t14';
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop view t14;
+execute stmt;
+ERROR 42S02: Table 'test.t14' doesn't exist
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+execute stmt;
+ERROR 42S02: Table 'test.t14' doesn't exist
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+drop table t14_b;
+=====================================================================
+Testing 15: VIEW -> TABLE transitions
+=====================================================================
+drop view if exists t15;
+drop table if exists t15_b;
+SELECT VARIABLE_VALUE from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
+into @base_count ;
+create table t15_b(a int);
+create view t15 as select * from t15_b;
+prepare stmt from 'select * from t15';
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop view t15;
+create table t15(a int);
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+drop table t15_b;
+drop table t15;
+=====================================================================
+Testing 16: VIEW -> TEMPORARY TABLE transitions
+=====================================================================
+drop view if exists t16;
+drop table if exists t16_b;
+SELECT VARIABLE_VALUE from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
+into @base_count ;
+create table t16_b(a int);
+create view t16 as select * from t16_b;
+prepare stmt from 'select * from t16';
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop view t16;
+create temporary table t16(a int);
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+drop table t16_b;
+drop temporary table t16;
+=====================================================================
+Testing 17: VIEW -> VIEW (DDL) transitions
+=====================================================================
+drop view if exists t17;
+drop table if exists t17_b;
+SELECT VARIABLE_VALUE from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
+into @base_count ;
+create table t17_b(a int);
+insert into t17_b values (10), (20), (30);
+create view t17 as select a, 2*a as b, 3*a as c from t17_b;
+select * from t17;
+a b c
+10 20 30
+20 40 60
+30 60 90
+prepare stmt from 'select * from t17';
+execute stmt;
+a b c
+10 20 30
+20 40 60
+30 60 90
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt;
+a b c
+10 20 30
+20 40 60
+30 60 90
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop view t17;
+create view t17 as select a, 2*a as b, 10*a as c from t17_b;
+select * from t17;
+a b c
+10 20 100
+20 40 200
+30 60 300
+execute stmt;
+a b c
+10 20 100
+20 40 200
+30 60 300
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+execute stmt;
+a b c
+10 20 100
+20 40 200
+30 60 300
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+drop table t17_b;
+drop view t17;
+=====================================================================
+Testing 18: VIEW -> VIEW (VIEW dependencies) transitions
+=====================================================================
+drop table if exists t18;
+drop table if exists t18_dependent_table;
+drop view if exists t18_func;
+drop view if exists t18_view;
+drop view if exists t18_table;
+drop function if exists view_func;
+drop view if exists view_view;
+SELECT VARIABLE_VALUE from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
+into @base_count ;
+create table t18(a int);
+insert into t18 values (1), (2), (3);
+create function view_func(x int) returns int
+return x+1;
+create view view_view as select "view v1" as reason from dual;
+create table t18_dependent_table(a int);
+create view t18_func as select a, view_func(a) as b from t18;
+create view t18_view as select a, reason as b from t18, view_view;
+create view t18_table as select * from t18;
+prepare stmt_func from 'select * from t18_func';
+execute stmt_func;
+a b
+1 2
+2 3
+3 4
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt_func;
+a b
+1 2
+2 3
+3 4
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop function view_func;
+create function view_func(x int) returns int
+return x*x;
+execute stmt_func;
+a b
+1 1
+2 4
+3 9
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt_func;
+a b
+1 1
+2 4
+3 9
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+prepare stmt_view from 'select * from t18_view';
+execute stmt_view;
+a b
+1 view v1
+2 view v1
+3 view v1
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt_view;
+a b
+1 view v1
+2 view v1
+3 view v1
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop view view_view;
+create view view_view as select "view v2" as reason from dual;
+execute stmt_view;
+a b
+1 view v2
+2 view v2
+3 view v2
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+execute stmt_view;
+a b
+1 view v2
+2 view v2
+3 view v2
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+prepare stmt_table from 'select * from t18_table';
+execute stmt_table;
+a
+1
+2
+3
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+execute stmt_table;
+a
+1
+2
+3
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+alter table t18 add column comments varchar(50) default NULL;
+execute stmt_table;
+a
+1
+2
+3
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+2
+execute stmt_table;
+a
+1
+2
+3
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+2
+drop table t18;
+drop table t18_dependent_table;
+drop view t18_func;
+drop view t18_view;
+drop view t18_table;
+drop function view_func;
+drop view view_view;
+=====================================================================
+Testing 19: Special tables (INFORMATION_SCHEMA)
+=====================================================================
+drop procedure if exists proc_19;
+SELECT VARIABLE_VALUE from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
+into @base_count ;
+prepare stmt from
+'select ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_TYPE
+ from INFORMATION_SCHEMA.ROUTINES where
+ routine_name=\'proc_19\'';
+create procedure proc_19() select "hi there";
+execute stmt;
+ROUTINE_SCHEMA ROUTINE_NAME ROUTINE_TYPE
+test proc_19 PROCEDURE
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt;
+ROUTINE_SCHEMA ROUTINE_NAME ROUTINE_TYPE
+test proc_19 PROCEDURE
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop procedure proc_19;
+create procedure proc_19() select "hi there, again";
+execute stmt;
+ROUTINE_SCHEMA ROUTINE_NAME ROUTINE_TYPE
+test proc_19 PROCEDURE
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt;
+ROUTINE_SCHEMA ROUTINE_NAME ROUTINE_TYPE
+test proc_19 PROCEDURE
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop procedure proc_19;
+=====================================================================
+Testing 20: Special tables (log tables)
+=====================================================================
+SELECT VARIABLE_VALUE from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
+into @base_count ;
+prepare stmt from
+'select * from mysql.general_log where argument=\'IMPOSSIBLE QUERY STRING\'';
+execute stmt;
+event_time user_host thread_id server_id command_type argument
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt;
+event_time user_host thread_id server_id command_type argument
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt;
+event_time user_host thread_id server_id command_type argument
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt;
+event_time user_host thread_id server_id command_type argument
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+=====================================================================
+Testing 21: Special tables (system tables)
+=====================================================================
+drop procedure if exists proc_21;
+SELECT VARIABLE_VALUE from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
+into @base_count ;
+prepare stmt from
+'select type, db, name from mysql.proc where name=\'proc_21\'';
+create procedure proc_21() select "hi there";
+execute stmt;
+type db name
+PROCEDURE test proc_21
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt;
+type db name
+PROCEDURE test proc_21
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop procedure proc_21;
+create procedure proc_21() select "hi there, again";
+execute stmt;
+type db name
+PROCEDURE test proc_21
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt;
+type db name
+PROCEDURE test proc_21
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop procedure proc_21;
+=====================================================================
+Testing 22: Special tables (views temp tables)
+=====================================================================
+drop table if exists t22_b;
+drop view if exists t22;
+SELECT VARIABLE_VALUE from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
+into @base_count ;
+create table t22_b(a int);
+create algorithm=temptable view t22 as select a*a as a2 from t22_b;
+show create view t22;
+View Create View character_set_client collation_connection
+t22 CREATE ALGORITHM=TEMPTABLE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `t22` AS select (`t22_b`.`a` * `t22_b`.`a`) AS `a2` from `t22_b` latin1 latin1_swedish_ci
+prepare stmt from 'select * from t22';
+insert into t22_b values (1), (2), (3);
+execute stmt;
+a2
+1
+4
+9
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt;
+a2
+1
+4
+9
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+insert into t22_b values (4), (5), (6);
+execute stmt;
+a2
+1
+4
+9
+16
+25
+36
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt;
+a2
+1
+4
+9
+16
+25
+36
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop table t22_b;
+drop view t22;
+=====================================================================
+Testing 23: Special tables (internal join tables)
+=====================================================================
+drop table if exists t23_a;
+drop table if exists t23_b;
+SELECT VARIABLE_VALUE from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
+into @base_count ;
+create table t23_a(a int);
+create table t23_b(b int);
+prepare stmt from 'select * from t23_a join t23_b';
+insert into t23_a values (1), (2), (3);
+insert into t23_b values (10), (20), (30);
+execute stmt;
+a b
+1 10
+2 10
+3 10
+1 20
+2 20
+3 20
+1 30
+2 30
+3 30
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt;
+a b
+1 10
+2 10
+3 10
+1 20
+2 20
+3 20
+1 30
+2 30
+3 30
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+insert into t23_a values (4);
+insert into t23_b values (40);
+execute stmt;
+a b
+1 10
+2 10
+3 10
+4 10
+1 20
+2 20
+3 20
+4 20
+1 30
+2 30
+3 30
+4 30
+1 40
+2 40
+3 40
+4 40
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt;
+a b
+1 10
+2 10
+3 10
+4 10
+1 20
+2 20
+3 20
+4 20
+1 30
+2 30
+3 30
+4 30
+1 40
+2 40
+3 40
+4 40
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop table t23_a;
+drop table t23_b;
+=====================================================================
+Testing 24: Special statements
+=====================================================================
+drop table if exists t24_alter;
+SELECT VARIABLE_VALUE from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
+into @base_count ;
+create table t24_alter(a int);
+prepare stmt from 'alter table t24_alter add column b int';
+execute stmt;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop table t24_alter;
+create table t24_alter(a1 int, a2 int);
+execute stmt;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+alter table t24_alter drop column b;
+execute stmt;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+alter table t24_alter drop column b;
+execute stmt;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop table t24_alter;
+drop table if exists t24_repair;
+create table t24_repair(a int);
+insert into t24_repair values (1), (2), (3);
+prepare stmt from 'repair table t24_repair';
+execute stmt;
+Table Op Msg_type Msg_text
+test.t24_repair repair status OK
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop table t24_repair;
+create table t24_repair(a1 int, a2 int);
+insert into t24_repair values (1, 10), (2, 20), (3, 30);
+execute stmt;
+Table Op Msg_type Msg_text
+test.t24_repair repair status OK
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+alter table t24_repair add column b varchar(50) default NULL;
+execute stmt;
+Table Op Msg_type Msg_text
+test.t24_repair repair status OK
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+alter table t24_repair drop column b;
+execute stmt;
+Table Op Msg_type Msg_text
+test.t24_repair repair status OK
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop table t24_repair;
+drop table if exists t24_analyze;
+create table t24_analyze(a int);
+insert into t24_analyze values (1), (2), (3);
+prepare stmt from 'analyze table t24_analyze';
+execute stmt;
+Table Op Msg_type Msg_text
+test.t24_analyze analyze status OK
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop table t24_analyze;
+create table t24_analyze(a1 int, a2 int);
+insert into t24_analyze values (1, 10), (2, 20), (3, 30);
+execute stmt;
+Table Op Msg_type Msg_text
+test.t24_analyze analyze status OK
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+alter table t24_analyze add column b varchar(50) default NULL;
+execute stmt;
+Table Op Msg_type Msg_text
+test.t24_analyze analyze status OK
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+alter table t24_analyze drop column b;
+execute stmt;
+Table Op Msg_type Msg_text
+test.t24_analyze analyze status OK
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop table t24_analyze;
+drop table if exists t24_optimize;
+create table t24_optimize(a int);
+insert into t24_optimize values (1), (2), (3);
+prepare stmt from 'optimize table t24_optimize';
+execute stmt;
+Table Op Msg_type Msg_text
+test.t24_optimize optimize status OK
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop table t24_optimize;
+create table t24_optimize(a1 int, a2 int);
+insert into t24_optimize values (1, 10), (2, 20), (3, 30);
+execute stmt;
+Table Op Msg_type Msg_text
+test.t24_optimize optimize status OK
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+alter table t24_optimize add column b varchar(50) default NULL;
+execute stmt;
+Table Op Msg_type Msg_text
+test.t24_optimize optimize status OK
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+alter table t24_optimize drop column b;
+execute stmt;
+Table Op Msg_type Msg_text
+test.t24_optimize optimize status OK
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop table t24_optimize;
+drop procedure if exists changing_proc;
+prepare stmt from 'show create procedure changing_proc';
+execute stmt;
+ERROR 42000: PROCEDURE changing_proc does not exist
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt;
+ERROR 42000: PROCEDURE changing_proc does not exist
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+create procedure changing_proc() begin end;
+execute stmt;
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+changing_proc CREATE DEFINER=`root`@`localhost` PROCEDURE `changing_proc`()
+begin end latin1 latin1_swedish_ci latin1_swedish_ci
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt;
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+changing_proc CREATE DEFINER=`root`@`localhost` PROCEDURE `changing_proc`()
+begin end latin1 latin1_swedish_ci latin1_swedish_ci
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop procedure changing_proc;
+create procedure changing_proc(x int, y int) begin end;
+execute stmt;
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+changing_proc CREATE DEFINER=`root`@`localhost` PROCEDURE `changing_proc`(x int, y int)
+begin end latin1 latin1_swedish_ci latin1_swedish_ci
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt;
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+changing_proc CREATE DEFINER=`root`@`localhost` PROCEDURE `changing_proc`(x int, y int)
+begin end latin1 latin1_swedish_ci latin1_swedish_ci
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop procedure changing_proc;
+execute stmt;
+ERROR 42000: PROCEDURE changing_proc does not exist
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt;
+ERROR 42000: PROCEDURE changing_proc does not exist
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop function if exists changing_func;
+prepare stmt from 'show create function changing_func';
+execute stmt;
+ERROR 42000: FUNCTION changing_func does not exist
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt;
+ERROR 42000: FUNCTION changing_func does not exist
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+create function changing_func() returns int return 0;
+execute stmt;
+Function sql_mode Create Function character_set_client collation_connection Database Collation
+changing_func CREATE DEFINER=`root`@`localhost` FUNCTION `changing_func`() RETURNS int(11)
+return 0 latin1 latin1_swedish_ci latin1_swedish_ci
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt;
+Function sql_mode Create Function character_set_client collation_connection Database Collation
+changing_func CREATE DEFINER=`root`@`localhost` FUNCTION `changing_func`() RETURNS int(11)
+return 0 latin1 latin1_swedish_ci latin1_swedish_ci
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop function changing_func;
+create function changing_func(x int, y int) returns int return x+y;
+execute stmt;
+Function sql_mode Create Function character_set_client collation_connection Database Collation
+changing_func CREATE DEFINER=`root`@`localhost` FUNCTION `changing_func`(x int, y int) RETURNS int(11)
+return x+y latin1 latin1_swedish_ci latin1_swedish_ci
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt;
+Function sql_mode Create Function character_set_client collation_connection Database Collation
+changing_func CREATE DEFINER=`root`@`localhost` FUNCTION `changing_func`(x int, y int) RETURNS int(11)
+return x+y latin1 latin1_swedish_ci latin1_swedish_ci
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop function changing_func;
+execute stmt;
+ERROR 42000: FUNCTION changing_func does not exist
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt;
+ERROR 42000: FUNCTION changing_func does not exist
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop table if exists t24_trigger;
+create table t24_trigger(a int);
+prepare stmt from 'show create trigger t24_bi;';
+execute stmt;
+ERROR HY000: Trigger does not exist
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt;
+ERROR HY000: Trigger does not exist
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+create trigger t24_bi before insert on t24_trigger for each row
+begin
+set @message= "t24_bi";
+end
+$$
+execute stmt;
+Trigger sql_mode SQL Original Statement character_set_client collation_connection Database Collation
+t24_bi CREATE DEFINER=`root`@`localhost` trigger t24_bi before insert on t24_trigger for each row
+begin
+set @message= "t24_bi";
+end latin1 latin1_swedish_ci latin1_swedish_ci
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt;
+Trigger sql_mode SQL Original Statement character_set_client collation_connection Database Collation
+t24_bi CREATE DEFINER=`root`@`localhost` trigger t24_bi before insert on t24_trigger for each row
+begin
+set @message= "t24_bi";
+end latin1 latin1_swedish_ci latin1_swedish_ci
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop trigger t24_bi;
+create trigger t24_bi before insert on t24_trigger for each row
+begin
+set @message= "t24_bi (2)";
+end
+$$
+execute stmt;
+Trigger sql_mode SQL Original Statement character_set_client collation_connection Database Collation
+t24_bi CREATE DEFINER=`root`@`localhost` trigger t24_bi before insert on t24_trigger for each row
+begin
+set @message= "t24_bi (2)";
+end latin1 latin1_swedish_ci latin1_swedish_ci
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt;
+Trigger sql_mode SQL Original Statement character_set_client collation_connection Database Collation
+t24_bi CREATE DEFINER=`root`@`localhost` trigger t24_bi before insert on t24_trigger for each row
+begin
+set @message= "t24_bi (2)";
+end latin1 latin1_swedish_ci latin1_swedish_ci
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop trigger t24_bi;
+execute stmt;
+ERROR HY000: Trigger does not exist
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt;
+ERROR HY000: Trigger does not exist
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop table t24_trigger;
+=====================================================================
+Testing 25: Testing the strength of TABLE_SHARE version
+=====================================================================
+drop table if exists t25_num_col;
+SELECT VARIABLE_VALUE from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
+into @base_count ;
+create table t25_num_col(a int);
+prepare stmt from 'select * from t25_num_col';
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+alter table t25_num_col add column b varchar(50) default NULL;
+execute stmt;
+a b
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+execute stmt;
+a b
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+drop table t25_num_col;
+drop table if exists t25_col_name;
+create table t25_col_name(a int);
+prepare stmt from 'select * from t25_col_name';
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+alter table t25_col_name change a b int;
+execute stmt;
+b
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+2
+execute stmt;
+b
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+2
+drop table t25_col_name;
+drop table if exists t25_col_type;
+create table t25_col_type(a int);
+prepare stmt from 'select * from t25_col_type';
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+2
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+2
+alter table t25_col_type change a a varchar(10);
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+3
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+3
+drop table t25_col_type;
+drop table if exists t25_col_type_length;
+create table t25_col_type_length(a varchar(10));
+prepare stmt from 'select * from t25_col_type_length';
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+3
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+3
+alter table t25_col_type_length change a a varchar(20);
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+4
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+4
+drop table t25_col_type_length;
+drop table if exists t25_col_null;
+create table t25_col_null(a varchar(10));
+prepare stmt from 'select * from t25_col_null';
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+4
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+4
+alter table t25_col_null change a a varchar(10) NOT NULL;
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+5
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+5
+drop table t25_col_null;
+drop table if exists t25_col_default;
+create table t25_col_default(a int, b int DEFAULT 10);
+prepare stmt from 'insert into t25_col_default(a) values (?)';
+set @val=1;
+execute stmt using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+5
+set @val=2;
+execute stmt using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+5
+alter table t25_col_default change b b int DEFAULT 20;
+set @val=3;
+execute stmt using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+5
+set @val=4;
+execute stmt using @val;
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+5
+select * from t25_col_default;
+a b
+1 10
+2 10
+3 20
+4 20
+drop table t25_col_default;
+drop table if exists t25_index;
+create table t25_index(a varchar(10));
+prepare stmt from 'select * from t25_index';
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+5
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+5
+create index i1 on t25_index(a);
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+6
+execute stmt;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+6
+drop table t25_index;
+drop table if exists t25_index_unique;
+create table t25_index_unique(a varchar(10), b varchar(10));
+create index i1 on t25_index_unique(a, b);
+show create table t25_index_unique;
+Table Create Table
+t25_index_unique CREATE TABLE `t25_index_unique` (
+ `a` varchar(10) DEFAULT NULL,
+ `b` varchar(10) DEFAULT NULL,
+ KEY `i1` (`a`,`b`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+prepare stmt from 'select * from t25_index_unique';
+execute stmt;
+a b
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+6
+execute stmt;
+a b
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+6
+alter table t25_index_unique drop index i1;
+create unique index i1 on t25_index_unique(a, b);
+show create table t25_index_unique;
+Table Create Table
+t25_index_unique CREATE TABLE `t25_index_unique` (
+ `a` varchar(10) DEFAULT NULL,
+ `b` varchar(10) DEFAULT NULL,
+ UNIQUE KEY `i1` (`a`,`b`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+execute stmt;
+a b
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+7
+execute stmt;
+a b
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+7
+drop table t25_index_unique;
+=====================================================================
+Testing reported bugs
+=====================================================================
+drop table if exists table_12093;
+drop function if exists func_12093;
+drop function if exists func_12093_unrelated;
+drop procedure if exists proc_12093;
+SELECT VARIABLE_VALUE from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
+into @base_count ;
+create table table_12093(a int);
+create function func_12093()
+returns int
+begin
+return (select count(*) from table_12093);
+end//
+create procedure proc_12093(a int)
+begin
+select * from table_12093;
+end//
+create function func_12093_unrelated() returns int return 2;
+create procedure proc_12093_unrelated() begin end;
+prepare stmt_sf from 'select func_12093();';
+prepare stmt_sp from 'call proc_12093(func_12093())';
+execute stmt_sf;
+func_12093()
+0
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt_sp;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop function func_12093_unrelated;
+drop procedure proc_12093_unrelated;
+execute stmt_sf;
+func_12093()
+0
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt_sp;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt_sf;
+func_12093()
+0
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt_sp;
+a
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+deallocate prepare stmt_sf;
+deallocate prepare stmt_sp;
+drop table table_12093;
+drop function func_12093;
+drop procedure proc_12093;
+drop function if exists func_21294;
+SELECT VARIABLE_VALUE from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
+into @base_count ;
+create function func_21294() returns int return 10;
+prepare stmt from "select func_21294()";
+execute stmt;
+func_21294()
+10
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop function func_21294;
+create function func_21294() returns int return 10;
+execute stmt;
+func_21294()
+10
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop function func_21294;
+create function func_21294() returns int return 20;
+execute stmt;
+func_21294()
+20
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+deallocate prepare stmt;
+drop function func_21294;
+drop table if exists t_27420_100;
+drop table if exists t_27420_101;
+drop view if exists v_27420;
+SELECT VARIABLE_VALUE from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
+into @base_count ;
+create table t_27420_100(a int);
+insert into t_27420_100 values (1), (2);
+create table t_27420_101(a int);
+insert into t_27420_101 values (1), (2);
+create view v_27420 as select t_27420_100.a X, t_27420_101.a Y
+from t_27420_100, t_27420_101
+where t_27420_100.a=t_27420_101.a;
+prepare stmt from 'select * from v_27420';
+execute stmt;
+X Y
+1 1
+2 2
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop view v_27420;
+create table v_27420(X int, Y int);
+execute stmt;
+X Y
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+drop table v_27420;
+create table v_27420 (a int, b int, filler char(200));
+execute stmt;
+a b filler
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+2
+deallocate prepare stmt;
+drop table t_27420_100;
+drop table t_27420_101;
+drop table v_27420;
+drop table if exists t_27430_1;
+drop table if exists t_27430_2;
+SELECT VARIABLE_VALUE from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
+into @base_count ;
+create table t_27430_1 (a int not null, oref int not null, key(a));
+insert into t_27430_1 values
+(1, 1),
+(1, 1234),
+(2, 3),
+(2, 1234),
+(3, 1234);
+create table t_27430_2 (a int not null, oref int not null);
+insert into t_27430_2 values
+(1, 1),
+(2, 2),
+(1234, 3),
+(1234, 4);
+prepare stmt from
+'select oref, a, a in (select a from t_27430_1 where oref=t_27430_2.oref) Z from t_27430_2';
+execute stmt;
+oref a Z
+1 1 1
+2 2 0
+3 1234 0
+4 1234 0
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt;
+oref a Z
+1 1 1
+2 2 0
+3 1234 0
+4 1234 0
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop table t_27430_1, t_27430_2;
+create table t_27430_1 (a int, oref int, key(a));
+insert into t_27430_1 values
+(1, 1),
+(1, NULL),
+(2, 3),
+(2, NULL),
+(3, NULL);
+create table t_27430_2 (a int, oref int);
+insert into t_27430_2 values
+(1, 1),
+(2,2),
+(NULL, 3),
+(NULL, 4);
+execute stmt;
+oref a Z
+1 1 1
+2 2 0
+3 NULL NULL
+4 NULL 0
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+execute stmt;
+oref a Z
+1 1 1
+2 2 0
+3 NULL NULL
+4 NULL 0
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+deallocate prepare stmt;
+drop table t_27430_1;
+drop table t_27430_2;
+drop table if exists t_27690_1;
+drop view if exists v_27690_1;
+drop table if exists v_27690_2;
+SELECT VARIABLE_VALUE from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
+into @base_count ;
+create table t_27690_1 (a int, b int);
+insert into t_27690_1 values (1,1),(2,2);
+create table v_27690_1 as select * from t_27690_1;
+create table v_27690_2 as select * from t_27690_1;
+prepare stmt from 'select * from v_27690_1, v_27690_2';
+execute stmt;
+a b a b
+1 1 1 1
+2 2 1 1
+1 1 2 2
+2 2 2 2
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt;
+a b a b
+1 1 1 1
+2 2 1 1
+1 1 2 2
+2 2 2 2
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+drop table v_27690_1;
+execute stmt;
+ERROR 42S02: Table 'test.v_27690_1' doesn't exist
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+execute stmt;
+ERROR 42S02: Table 'test.v_27690_1' doesn't exist
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+0
+create view v_27690_1 as select A.a, A.b from t_27690_1 A, t_27690_1 B;
+execute stmt;
+a b a b
+1 1 1 1
+2 2 1 1
+1 1 1 1
+2 2 1 1
+1 1 2 2
+2 2 2 2
+1 1 2 2
+2 2 2 2
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+execute stmt;
+a b a b
+1 1 1 1
+2 2 1 1
+1 1 1 1
+2 2 1 1
+1 1 2 2
+2 2 2 2
+1 1 2 2
+2 2 2 2
+SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+REPREPARED
+1
+deallocate prepare stmt;
+drop table t_27690_1;
+drop view v_27690_1;
+drop table v_27690_2;
diff --git a/mysql-test/r/query_cache.result b/mysql-test/r/query_cache.result
index 73436dc392f..1a728354c7b 100644
--- a/mysql-test/r/query_cache.result
+++ b/mysql-test/r/query_cache.result
@@ -1650,8 +1650,23 @@ a (select count(*) from t2)
3 0
4 0
drop table t1,t2;
-End of 5.0 tests
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
+CREATE TABLE t1 (a ENUM('rainbow'));
+INSERT INTO t1 VALUES (),(),(),(),();
+SELECT 1 FROM t1 GROUP BY (SELECT 1 FROM t1 ORDER BY AVG(LAST_INSERT_ID()));
+1
+1
+DROP TABLE t1;
+CREATE TABLE t1 (a LONGBLOB);
+INSERT INTO t1 SET a = 'aaaa';
+INSERT INTO t1 SET a = 'aaaa';
+SELECT 1 FROM t1 GROUP BY
+(SELECT LAST_INSERT_ID() FROM t1 ORDER BY MIN(a) ASC LIMIT 1);
+1
+1
+DROP TABLE t1;
+End of 5.1 tests
diff --git a/mysql-test/r/query_cache_debug.result b/mysql-test/r/query_cache_debug.result
new file mode 100644
index 00000000000..f177bfac836
--- /dev/null
+++ b/mysql-test/r/query_cache_debug.result
@@ -0,0 +1,24 @@
+flush status;
+set query_cache_type=DEMAND;
+set global query_cache_size= 1024*1024*512;
+drop table if exists t1;
+create table t1 (a varchar(100));
+insert into t1 values ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'),('bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb');
+Activate debug hook and attempt to retrieve the statement from the cache.
+set session debug='+d,wait_in_query_cache_insert';
+select SQL_CACHE * from t1;;
+On a second connection; clear the query cache.
+show status like 'Qcache_queries_in_cache';
+Variable_name Value
+Qcache_queries_in_cache 1
+set global query_cache_size= 0;
+Signal the debug hook to release the lock.
+select id from information_schema.processlist where state='wait_in_query_cache_insert' into @thread_id;
+kill query @thread_id;
+Show query cache status.
+show status like 'Qcache_queries_in_cache';
+Variable_name Value
+Qcache_queries_in_cache 0
+set global query_cache_size= 0;
+use test;
+drop table t1;
diff --git a/mysql-test/r/range.result b/mysql-test/r/range.result
index 108264b3bf2..92db6d8429f 100644
--- a/mysql-test/r/range.result
+++ b/mysql-test/r/range.result
@@ -1135,6 +1135,24 @@ item started price
A1 2005-11-01 08:00:00 1000.000
A1 2005-11-15 00:00:00 2000.000
DROP TABLE t1;
+
+BUG#32198 "Comparison of DATE with DATETIME still not using indexes correctly"
+
+CREATE TABLE t1 (
+id int(11) NOT NULL auto_increment,
+dateval date default NULL,
+PRIMARY KEY (id),
+KEY dateval (dateval)
+) AUTO_INCREMENT=173;
+INSERT INTO t1 VALUES
+(1,'2007-01-01'),(2,'2007-01-02'),(3,'2007-01-03'),(4,'2007-01-04'),
+(5,'2007-01-05'),(6,'2007-01-06'),(7,'2007-01-07'),(8,'2007-01-08'),
+(9,'2007-01-09'),(10,'2007-01-10'),(11,'2007-01-11');
+This must use range access:
+explain select * from t1 where dateval >= '2007-01-01 00:00:00' and dateval <= '2007-01-02 23:59:59';
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 range dateval dateval 4 NULL 2 Using where
+drop table t1;
create table t1 (a int);
insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
create table t2 (a int, b int, filler char(100));
diff --git a/mysql-test/r/read_only.result b/mysql-test/r/read_only.result
index f270f1ed5ad..cf81566f4e5 100644
--- a/mysql-test/r/read_only.result
+++ b/mysql-test/r/read_only.result
@@ -97,3 +97,31 @@ Note 1051 Unknown table 'ttt'
set global read_only=0;
drop table t1,t2;
drop user test@localhost;
+#
+# Bug #27440 read_only allows create and drop database
+#
+set global read_only= 1;
+drop database if exists mysqltest_db1;
+drop database if exists mysqltest_db2;
+delete from mysql.user where User like 'mysqltest_%';
+delete from mysql.db where User like 'mysqltest_%';
+delete from mysql.tables_priv where User like 'mysqltest_%';
+delete from mysql.columns_priv where User like 'mysqltest_%';
+flush privileges;
+grant all on mysqltest_db2.* to `mysqltest_u1`@`%`;
+create database mysqltest_db1;
+grant all on mysqltest_db1.* to `mysqltest_u1`@`%`;
+flush privileges;
+create database mysqltest_db2;
+ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
+show databases like '%mysqltest_db2%';
+Database (%mysqltest_db2%)
+drop database mysqltest_db1;
+ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
+delete from mysql.user where User like 'mysqltest_%';
+delete from mysql.db where User like 'mysqltest_%';
+delete from mysql.tables_priv where User like 'mysqltest_%';
+delete from mysql.columns_priv where User like 'mysqltest_%';
+flush privileges;
+drop database mysqltest_db1;
+set global read_only=0;
diff --git a/mysql-test/r/select.result b/mysql-test/r/select.result
index ed61cfffa6b..2f305f6ec5d 100644
--- a/mysql-test/r/select.result
+++ b/mysql-test/r/select.result
@@ -607,11 +607,11 @@ id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t3 ref period period 4 test.t1.period 4181
explain select * from t3 as t1,t3 where t1.period=t3.period order by t3.period limit 10;
id select_type table type possible_keys key key_len ref rows Extra
-1 SIMPLE t3 ALL period NULL NULL NULL 41810 Using filesort
+1 SIMPLE t3 index period period 4 NULL 1
1 SIMPLE t1 ref period period 4 test.t3.period 4181
explain select * from t3 as t1,t3 where t1.period=t3.period order by t1.period limit 10;
id select_type table type possible_keys key key_len ref rows Extra
-1 SIMPLE t1 ALL period NULL NULL NULL 41810 Using filesort
+1 SIMPLE t1 index period period 4 NULL 1
1 SIMPLE t3 ref period period 4 test.t1.period 4181
select period from t1;
period
@@ -2827,6 +2827,14 @@ FFFFFFFFFFFFFFFF 7FFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFF 7FFFFFFFFFFFFFFF
8FFFFFFFFFFFFFFF 7FFFFFFFFFFFFFFF
drop table t1;
+CREATE TABLE t1 (c0 int);
+CREATE TABLE t2 (c0 int);
+INSERT INTO t1 VALUES(@@connect_timeout);
+INSERT INTO t2 VALUES(@@connect_timeout);
+SELECT * FROM t1 JOIN t2 ON t1.c0 = t2.c0 WHERE (t1.c0 <=> @@connect_timeout);
+c0 c0
+X X
+DROP TABLE t1, t2;
End of 4.1 tests
CREATE TABLE t1 (
K2C4 varchar(4) character set latin1 collate latin1_bin NOT NULL default '',
@@ -3233,40 +3241,40 @@ drop table t1, t2 ,t3;
create table t1(f1 int, f2 date);
insert into t1 values(1,'2005-01-01'),(2,'2005-09-01'),(3,'2005-09-30'),
(4,'2005-10-01'),(5,'2005-12-30');
-select * from t1 where f2 >= 0;
+select * from t1 where f2 >= 0 order by f2;
f1 f2
1 2005-01-01
2 2005-09-01
3 2005-09-30
4 2005-10-01
5 2005-12-30
-select * from t1 where f2 >= '0000-00-00';
+select * from t1 where f2 >= '0000-00-00' order by f2;
f1 f2
1 2005-01-01
2 2005-09-01
3 2005-09-30
4 2005-10-01
5 2005-12-30
-select * from t1 where f2 >= '2005-09-31';
+select * from t1 where f2 >= '2005-09-31' order by f2;
f1 f2
4 2005-10-01
5 2005-12-30
-select * from t1 where f2 >= '2005-09-3a';
+select * from t1 where f2 >= '2005-09-3a' order by f2;
f1 f2
+3 2005-09-30
4 2005-10-01
5 2005-12-30
Warnings:
Warning 1292 Incorrect date value: '2005-09-3a' for column 'f2' at row 1
-select * from t1 where f2 <= '2005-09-31';
+select * from t1 where f2 <= '2005-09-31' order by f2;
f1 f2
1 2005-01-01
2 2005-09-01
3 2005-09-30
-select * from t1 where f2 <= '2005-09-3a';
+select * from t1 where f2 <= '2005-09-3a' order by f2;
f1 f2
1 2005-01-01
2 2005-09-01
-3 2005-09-30
Warnings:
Warning 1292 Incorrect date value: '2005-09-3a' for column 'f2' at row 1
drop table t1;
@@ -4062,25 +4070,249 @@ x
1
Warnings:
Warning 1466 Leading spaces are removed from name ' x'
+CREATE VIEW v1 AS SELECT 1 AS ``;
+ERROR 42000: Incorrect column name ''
CREATE VIEW v1 AS SELECT 1 AS ` `;
+ERROR 42000: Incorrect column name ' '
+CREATE VIEW v1 AS SELECT 1 AS ` `;
+ERROR 42000: Incorrect column name ' '
+CREATE VIEW v1 AS SELECT (SELECT 1 AS ` `);
+ERROR 42000: Incorrect column name ' '
+CREATE VIEW v1 AS SELECT 1 AS ` x`;
Warnings:
-Warning 1474 Name ' ' has become ''
-SELECT `` FROM v1;
-
+Warning 1466 Leading spaces are removed from name ' x'
+SELECT `x` FROM v1;
+x
+1
+ALTER VIEW v1 AS SELECT 1 AS ` `;
+ERROR 42000: Incorrect column name ' '
+DROP VIEW v1;
+select str_to_date('2007-10-09','%Y-%m-%d') between '2007/10/01 00:00:00 GMT'
+ and '2007/10/20 00:00:00 GMT';
+str_to_date('2007-10-09','%Y-%m-%d') between '2007/10/01 00:00:00 GMT'
+ and '2007/10/20 00:00:00 GMT'
1
-CREATE VIEW v2 AS SELECT 1 AS ` `;
Warnings:
-Warning 1474 Name ' ' has become ''
-SELECT `` FROM v2;
-
+Warning 1292 Truncated incorrect datetime value: '2007/10/01 00:00:00 GMT'
+Warning 1292 Truncated incorrect datetime value: '2007/10/20 00:00:00 GMT'
+select str_to_date('2007-10-09','%Y-%m-%d') > '2007/10/01 00:00:00 GMT-6';
+str_to_date('2007-10-09','%Y-%m-%d') > '2007/10/01 00:00:00 GMT-6'
1
-CREATE VIEW v3 AS SELECT 1 AS ` x`;
Warnings:
-Warning 1466 Leading spaces are removed from name ' x'
-SELECT `x` FROM v3;
-x
+Warning 1292 Truncated incorrect date value: '2007/10/01 00:00:00 GMT-6'
+select str_to_date('2007-10-09','%Y-%m-%d') <= '2007/10/2000:00:00 GMT-6';
+str_to_date('2007-10-09','%Y-%m-%d') <= '2007/10/2000:00:00 GMT-6'
+1
+Warnings:
+Warning 1292 Truncated incorrect date value: '2007/10/2000:00:00 GMT-6'
+select str_to_date('2007-10-01','%Y-%m-%d') = '2007-10-1 00:00:00 GMT-6';
+str_to_date('2007-10-01','%Y-%m-%d') = '2007-10-1 00:00:00 GMT-6'
+1
+Warnings:
+Warning 1292 Truncated incorrect date value: '2007-10-1 00:00:00 GMT-6'
+select str_to_date('2007-10-01','%Y-%m-%d') = '2007-10-01 x00:00:00 GMT-6';
+str_to_date('2007-10-01','%Y-%m-%d') = '2007-10-01 x00:00:00 GMT-6'
+1
+Warnings:
+Warning 1292 Truncated incorrect date value: '2007-10-01 x00:00:00 GMT-6'
+select str_to_date('2007-10-01','%Y-%m-%d %H:%i:%s') = '2007-10-01 00:00:00 GMT-6';
+str_to_date('2007-10-01','%Y-%m-%d %H:%i:%s') = '2007-10-01 00:00:00 GMT-6'
+1
+Warnings:
+Warning 1292 Truncated incorrect datetime value: '2007-10-01 00:00:00 GMT-6'
+select str_to_date('2007-10-01','%Y-%m-%d %H:%i:%s') = '2007-10-01 00:x00:00 GMT-6';
+str_to_date('2007-10-01','%Y-%m-%d %H:%i:%s') = '2007-10-01 00:x00:00 GMT-6'
+1
+Warnings:
+Warning 1292 Truncated incorrect datetime value: '2007-10-01 00:x00:00 GMT-6'
+select str_to_date('2007-10-01','%Y-%m-%d %H:%i:%s') = '2007-10-01 x12:34:56 GMT-6';
+str_to_date('2007-10-01','%Y-%m-%d %H:%i:%s') = '2007-10-01 x12:34:56 GMT-6'
1
-DROP VIEW v1, v2, v3;
+Warnings:
+Warning 1292 Truncated incorrect datetime value: '2007-10-01 x12:34:56 GMT-6'
+select str_to_date('2007-10-01 12:34:00','%Y-%m-%d %H:%i:%s') = '2007-10-01 12:34x:56 GMT-6';
+str_to_date('2007-10-01 12:34:00','%Y-%m-%d %H:%i:%s') = '2007-10-01 12:34x:56 GMT-6'
+1
+Warnings:
+Warning 1292 Truncated incorrect datetime value: '2007-10-01 12:34x:56 GMT-6'
+select str_to_date('2007-10-01 12:34:56','%Y-%m-%d %H:%i:%s') = '2007-10-01 12:34x:56 GMT-6';
+str_to_date('2007-10-01 12:34:56','%Y-%m-%d %H:%i:%s') = '2007-10-01 12:34x:56 GMT-6'
+0
+Warnings:
+Warning 1292 Truncated incorrect datetime value: '2007-10-01 12:34x:56 GMT-6'
+select str_to_date('2007-10-01 12:34:56','%Y-%m-%d %H:%i:%s') = '2007-10-01 12:34:56';
+str_to_date('2007-10-01 12:34:56','%Y-%m-%d %H:%i:%s') = '2007-10-01 12:34:56'
+1
+select str_to_date('2007-10-01','%Y-%m-%d') = '2007-10-01 12:00:00';
+str_to_date('2007-10-01','%Y-%m-%d') = '2007-10-01 12:00:00'
+0
+select str_to_date('2007-10-01 12','%Y-%m-%d %H') = '2007-10-01 12:00:00';
+str_to_date('2007-10-01 12','%Y-%m-%d %H') = '2007-10-01 12:00:00'
+1
+select str_to_date('2007-10-01 12:34','%Y-%m-%d %H') = '2007-10-01 12:00:00';
+str_to_date('2007-10-01 12:34','%Y-%m-%d %H') = '2007-10-01 12:00:00'
+1
+Warnings:
+Warning 1292 Truncated incorrect datetime value: '2007-10-01 12:34'
+select str_to_date('2007-02-30 12:34','%Y-%m-%d %H:%i') = '2007-02-30 12:34';
+str_to_date('2007-02-30 12:34','%Y-%m-%d %H:%i') = '2007-02-30 12:34'
+1
+select str_to_date('2007-10-00 12:34','%Y-%m-%d %H:%i') = '2007-10-00 12:34';
+str_to_date('2007-10-00 12:34','%Y-%m-%d %H:%i') = '2007-10-00 12:34'
+1
+select str_to_date('2007-10-00','%Y-%m-%d') between '2007/09/01 00:00:00'
+ and '2007/10/20 00:00:00';
+str_to_date('2007-10-00','%Y-%m-%d') between '2007/09/01 00:00:00'
+ and '2007/10/20 00:00:00'
+1
+set SQL_MODE=TRADITIONAL;
+select str_to_date('2007-10-00 12:34','%Y-%m-%d %H:%i') = '2007-10-00 12:34';
+str_to_date('2007-10-00 12:34','%Y-%m-%d %H:%i') = '2007-10-00 12:34'
+0
+Warnings:
+Warning 1292 Truncated incorrect datetime value: '2007-10-00 12:34'
+select str_to_date('2007-10-01 12:34','%Y-%m-%d %H:%i') = '2007-10-00 12:34';
+str_to_date('2007-10-01 12:34','%Y-%m-%d %H:%i') = '2007-10-00 12:34'
+0
+Warnings:
+Warning 1292 Truncated incorrect datetime value: '2007-10-00 12:34'
+select str_to_date('2007-10-00 12:34','%Y-%m-%d %H:%i') = '2007-10-01 12:34';
+str_to_date('2007-10-00 12:34','%Y-%m-%d %H:%i') = '2007-10-01 12:34'
+0
+Warnings:
+Warning 1292 Truncated incorrect datetime value: '2007-10-00 12:34:00'
+select str_to_date('2007-10-00','%Y-%m-%d') between '2007/09/01'
+ and '2007/10/20';
+str_to_date('2007-10-00','%Y-%m-%d') between '2007/09/01'
+ and '2007/10/20'
+0
+Warnings:
+Warning 1292 Incorrect datetime value: '2007-10-00' for column '2007/09/01' at row 1
+Warning 1292 Incorrect datetime value: '2007-10-00' for column '2007/10/20' at row 1
+set SQL_MODE=DEFAULT;
+select str_to_date('2007-10-00','%Y-%m-%d') between '' and '2007/10/20';
+str_to_date('2007-10-00','%Y-%m-%d') between '' and '2007/10/20'
+1
+Warnings:
+Warning 1292 Truncated incorrect datetime value: ''
+select str_to_date('','%Y-%m-%d') between '2007/10/01' and '2007/10/20';
+str_to_date('','%Y-%m-%d') between '2007/10/01' and '2007/10/20'
+0
+select str_to_date('','%Y-%m-%d %H:%i') = '2007-10-01 12:34';
+str_to_date('','%Y-%m-%d %H:%i') = '2007-10-01 12:34'
+0
+select str_to_date(NULL,'%Y-%m-%d %H:%i') = '2007-10-01 12:34';
+str_to_date(NULL,'%Y-%m-%d %H:%i') = '2007-10-01 12:34'
+NULL
+select str_to_date('2007-10-00 12:34','%Y-%m-%d %H:%i') = '';
+str_to_date('2007-10-00 12:34','%Y-%m-%d %H:%i') = ''
+0
+Warnings:
+Warning 1292 Truncated incorrect datetime value: ''
+select str_to_date('1','%Y-%m-%d') = '1';
+str_to_date('1','%Y-%m-%d') = '1'
+0
+Warnings:
+Warning 1292 Truncated incorrect date value: '1'
+select str_to_date('1','%Y-%m-%d') = '1';
+str_to_date('1','%Y-%m-%d') = '1'
+0
+Warnings:
+Warning 1292 Truncated incorrect date value: '1'
+select str_to_date('','%Y-%m-%d') = '';
+str_to_date('','%Y-%m-%d') = ''
+0
+Warnings:
+Warning 1292 Truncated incorrect date value: ''
+select str_to_date('1000-01-01','%Y-%m-%d') between '0000-00-00' and NULL;
+str_to_date('1000-01-01','%Y-%m-%d') between '0000-00-00' and NULL
+0
+select str_to_date('1000-01-01','%Y-%m-%d') between NULL and '2000-00-00';
+str_to_date('1000-01-01','%Y-%m-%d') between NULL and '2000-00-00'
+0
+select str_to_date('1000-01-01','%Y-%m-%d') between NULL and NULL;
+str_to_date('1000-01-01','%Y-%m-%d') between NULL and NULL
+0
+CREATE TABLE t1 (c11 INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY);
+CREATE TABLE t2 (c21 INT UNSIGNED NOT NULL,
+c22 INT DEFAULT NULL,
+KEY(c21, c22));
+CREATE TABLE t3 (c31 INT UNSIGNED NOT NULL DEFAULT 0,
+c32 INT DEFAULT NULL,
+c33 INT NOT NULL,
+c34 INT UNSIGNED DEFAULT 0,
+KEY (c33, c34, c32));
+INSERT INTO t1 values (),(),(),(),();
+INSERT INTO t2 SELECT a.c11, b.c11 FROM t1 a, t1 b;
+INSERT INTO t3 VALUES (1, 1, 1, 0),
+(2, 2, 0, 0),
+(3, 3, 1, 0),
+(4, 4, 0, 0),
+(5, 5, 1, 0);
+SELECT c32 FROM t1, t2, t3 WHERE t1.c11 IN (1, 3, 5) AND
+t3.c31 = t1.c11 AND t2.c21 = t1.c11 AND
+t3.c33 = 1 AND t2.c22 in (1, 3)
+ORDER BY c32;
+c32
+1
+1
+3
+3
+5
+5
+SELECT c32 FROM t1, t2, t3 WHERE t1.c11 IN (1, 3, 5) AND
+t3.c31 = t1.c11 AND t2.c21 = t1.c11 AND
+t3.c33 = 1 AND t2.c22 in (1, 3)
+ORDER BY c32 DESC;
+c32
+5
+5
+3
+3
+1
+1
+DROP TABLE t1, t2, t3;
+
+#
+# Bug#30736: Row Size Too Large Error Creating a Table and
+# Inserting Data.
+#
+DROP TABLE IF EXISTS t1;
+DROP TABLE IF EXISTS t2;
+
+CREATE TABLE t1(
+c1 DECIMAL(10, 2),
+c2 FLOAT);
+
+INSERT INTO t1 VALUES (0, 1), (2, 3), (4, 5);
+
+CREATE TABLE t2(
+c3 DECIMAL(10, 2))
+SELECT
+c1 * c2 AS c3
+FROM t1;
+
+SELECT * FROM t1;
+c1 c2
+0.00 1
+2.00 3
+4.00 5
+
+SELECT * FROM t2;
+c3
+0.00
+6.00
+20.00
+
+DROP TABLE t1;
+DROP TABLE t2;
+
+CREATE TABLE t1 (c1 BIGINT NOT NULL);
+INSERT INTO t1 (c1) VALUES (1);
+SELECT * FROM t1 WHERE c1 > NULL + 1;
+c1
+DROP TABLE t1;
+
End of 5.0 tests
create table t1(a INT, KEY (a));
INSERT INTO t1 VALUES (1),(2),(3),(4),(5);
diff --git a/mysql-test/r/shm.result b/mysql-test/r/shm.result
index a99a8b0df5d..b42de1e0f70 100644
--- a/mysql-test/r/shm.result
+++ b/mysql-test/r/shm.result
@@ -605,11 +605,11 @@ id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t3 ref period period 4 test.t1.period 4181
explain select * from t3 as t1,t3 where t1.period=t3.period order by t3.period limit 10;
id select_type table type possible_keys key key_len ref rows Extra
-1 SIMPLE t3 ALL period NULL NULL NULL 41810 Using filesort
+1 SIMPLE t3 index period period 4 NULL 1
1 SIMPLE t1 ref period period 4 test.t3.period 4181
explain select * from t3 as t1,t3 where t1.period=t3.period order by t1.period limit 10;
id select_type table type possible_keys key key_len ref rows Extra
-1 SIMPLE t1 ALL period NULL NULL NULL 41810 Using filesort
+1 SIMPLE t1 index period period 4 NULL 1
1 SIMPLE t3 ref period period 4 test.t1.period 4181
select period from t1;
period
diff --git a/mysql-test/r/show_check.result b/mysql-test/r/show_check.result
index 04a5253e6a8..ff32d2a1512 100644
--- a/mysql-test/r/show_check.result
+++ b/mysql-test/r/show_check.result
@@ -979,7 +979,7 @@ def COLUMNS CHARACTER_SET_NAME CHARACTER_SET_NAME 253 192 0 Y 0 0 33
def COLUMNS COLLATION_NAME COLLATION_NAME 253 192 0 Y 0 0 33
def COLUMNS COLUMN_TYPE COLUMN_TYPE 252 589815 7 N 17 0 33
def COLUMNS COLUMN_KEY COLUMN_KEY 253 9 3 N 1 0 33
-def COLUMNS EXTRA EXTRA 253 60 0 N 1 0 33
+def COLUMNS EXTRA EXTRA 253 81 0 N 1 0 33
def COLUMNS PRIVILEGES PRIVILEGES 253 240 31 N 1 0 33
def COLUMNS COLUMN_COMMENT COLUMN_COMMENT 253 765 0 N 1 0 33
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME COLUMN_DEFAULT IS_NULLABLE DATA_TYPE CHARACTER_SET_NAME COLLATION_NAME COLUMN_TYPE COLUMN_KEY EXTRA PRIVILEGES COLUMN_COMMENT
@@ -998,7 +998,7 @@ def COLUMNS COLUMN_TYPE Type 252 589815 7 N 17 0 33
def COLUMNS IS_NULLABLE Null 253 9 2 N 1 0 33
def COLUMNS COLUMN_KEY Key 253 9 3 N 1 0 33
def COLUMNS COLUMN_DEFAULT Default 252 589815 0 Y 16 0 33
-def COLUMNS EXTRA Extra 253 60 0 N 1 0 33
+def COLUMNS EXTRA Extra 253 81 0 N 1 0 33
Field Type Null Key Default Extra
c int(11) NO PRI NULL
----------------------------------------------------------------
diff --git a/mysql-test/r/skip_grants.result b/mysql-test/r/skip_grants.result
index 6bb8cbea2f1..b523f2edc9f 100644
--- a/mysql-test/r/skip_grants.result
+++ b/mysql-test/r/skip_grants.result
@@ -72,3 +72,11 @@ count(*)
select count(*) from information_schema.USER_PRIVILEGES;
count(*)
0
+End of 5.0 tests
+#
+# Bug#29817 Queries with UDF fail with non-descriptive error
+# if mysql.proc is missing
+#
+select no_such_function(1);
+ERROR 42000: FUNCTION test.no_such_function does not exist
+End of 5.1 tests
diff --git a/mysql-test/r/sp-code.result b/mysql-test/r/sp-code.result
index 018173e723d..ca5c5b42102 100644
--- a/mysql-test/r/sp-code.result
+++ b/mysql-test/r/sp-code.result
@@ -733,6 +733,115 @@ optimizer: keep hreturn
drop table t1;
drop procedure proc_26977_broken;
drop procedure proc_26977_works;
+drop procedure if exists proc_33618_h;
+drop procedure if exists proc_33618_c;
+create procedure proc_33618_h(num int)
+begin
+declare count1 int default '0';
+declare vb varchar(30);
+declare last_row int;
+while(num>=1) do
+set num=num-1;
+begin
+declare cur1 cursor for select `a` from t_33618;
+declare continue handler for not found set last_row = 1;
+set last_row:=0;
+open cur1;
+rep1:
+repeat
+begin
+declare exit handler for 1062 begin end;
+fetch cur1 into vb;
+if (last_row = 1) then
+## should generate a hpop instruction here
+leave rep1;
+end if;
+end;
+until last_row=1
+end repeat;
+close cur1;
+end;
+end while;
+end//
+create procedure proc_33618_c(num int)
+begin
+declare count1 int default '0';
+declare vb varchar(30);
+declare last_row int;
+while(num>=1) do
+set num=num-1;
+begin
+declare cur1 cursor for select `a` from t_33618;
+declare continue handler for not found set last_row = 1;
+set last_row:=0;
+open cur1;
+rep1:
+repeat
+begin
+declare cur2 cursor for select `b` from t_33618;
+fetch cur1 into vb;
+if (last_row = 1) then
+## should generate a cpop instruction here
+leave rep1;
+end if;
+end;
+until last_row=1
+end repeat;
+close cur1;
+end;
+end while;
+end//
+show procedure code proc_33618_h;
+Pos Instruction
+0 set count1@1 _latin1'0'
+1 set vb@2 NULL
+2 set last_row@3 NULL
+3 jump_if_not 24(24) (num@0 >= 1)
+4 set num@0 (num@0 - 1)
+5 cpush cur1@0
+6 hpush_jump 9 4 CONTINUE
+7 set last_row@3 1
+8 hreturn 4
+9 set last_row@3 0
+10 copen cur1@0
+11 hpush_jump 13 4 EXIT
+12 hreturn 0 17
+13 cfetch cur1@0 vb@2
+14 jump_if_not 17(17) (last_row@3 = 1)
+15 hpop 1
+16 jump 19
+17 hpop 1
+18 jump_if_not 11(19) (last_row@3 = 1)
+19 cclose cur1@0
+20 hpop 1
+21 cpop 1
+22 jump 3
+show procedure code proc_33618_c;
+Pos Instruction
+0 set count1@1 _latin1'0'
+1 set vb@2 NULL
+2 set last_row@3 NULL
+3 jump_if_not 23(23) (num@0 >= 1)
+4 set num@0 (num@0 - 1)
+5 cpush cur1@0
+6 hpush_jump 9 4 CONTINUE
+7 set last_row@3 1
+8 hreturn 4
+9 set last_row@3 0
+10 copen cur1@0
+11 cpush cur2@1
+12 cfetch cur1@0 vb@2
+13 jump_if_not 16(16) (last_row@3 = 1)
+14 cpop 1
+15 jump 18
+16 cpop 1
+17 jump_if_not 11(18) (last_row@3 = 1)
+18 cclose cur1@0
+19 hpop 1
+20 cpop 1
+21 jump 3
+drop procedure proc_33618_h;
+drop procedure proc_33618_c;
End of 5.0 tests.
CREATE PROCEDURE p1()
BEGIN
diff --git a/mysql-test/r/sp-error.result b/mysql-test/r/sp-error.result
index 1b14d75cd9c..c33c378340e 100644
--- a/mysql-test/r/sp-error.result
+++ b/mysql-test/r/sp-error.result
@@ -1428,7 +1428,6 @@ create function bug20701() returns varchar(25) binary return "test";
ERROR 42000: This version of MySQL doesn't yet support 'return value collation'
create function bug20701() returns varchar(25) return "test";
drop function bug20701;
-End of 5.1 tests
create procedure proc_26503_error_1()
begin
retry:
@@ -1523,3 +1522,108 @@ ERROR 42000: You have an error in your SQL syntax; check the manual that corresp
SELECT ..inexistent();
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 '.inexistent()' at line 1
USE test;
+create function f1() returns int
+begin
+set @test = 1, password = password('foo');
+return 1;
+end|
+ERROR HY000: Not allowed to set autocommit from a stored function or trigger
+create trigger t1
+before insert on t2 for each row set password = password('foo');|
+ERROR HY000: Not allowed to set autocommit from a stored function or trigger
+drop function if exists f1;
+drop function if exists f2;
+drop table if exists t1, t2;
+create function f1() returns int
+begin
+drop temporary table t1;
+return 1;
+end|
+create temporary table t1 as select f1();
+ERROR HY000: Can't reopen table: 't1'
+create function f2() returns int
+begin
+create temporary table t2 as select f1();
+return 1;
+end|
+create temporary table t1 as select f2();
+ERROR HY000: Can't reopen table: 't1'
+drop function f1;
+drop function f2;
+create function f1() returns int
+begin
+drop temporary table t2,t1;
+return 1;
+end|
+create function f2() returns int
+begin
+create temporary table t2 as select f1();
+return 1;
+end|
+create temporary table t1 as select f2();
+ERROR HY000: Can't reopen table: 't2'
+drop function f1;
+drop function f2;
+create temporary table t2(a int);
+select * from t2;
+a
+create function f2() returns int
+begin
+drop temporary table t2;
+return 1;
+end|
+select f2();
+f2()
+1
+drop function f2;
+drop table t2;
+ERROR 42S02: Unknown table 't2'
+End of 5.1 tests
+drop procedure if exists proc_33983_a;
+drop procedure if exists proc_33983_b;
+drop procedure if exists proc_33983_c;
+drop procedure if exists proc_33983_d;
+create procedure proc_33983_a()
+begin
+label1:
+begin
+label2:
+begin
+select 1;
+end label1;
+end;
+end|
+ERROR 42000: End-label label1 without match
+create procedure proc_33983_b()
+begin
+label1:
+repeat
+label2:
+repeat
+select 1;
+until FALSE end repeat label1;
+until FALSE end repeat;
+end|
+ERROR 42000: End-label label1 without match
+create procedure proc_33983_c()
+begin
+label1:
+while TRUE do
+label2:
+while TRUE do
+select 1;
+end while label1;
+end while;
+end|
+ERROR 42000: End-label label1 without match
+create procedure proc_33983_d()
+begin
+label1:
+loop
+label2:
+loop
+select 1;
+end loop label1;
+end loop;
+end|
+ERROR 42000: End-label label1 without match
diff --git a/mysql-test/r/sp.result b/mysql-test/r/sp.result
index 412f6b94fa2..50ece83b258 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 1584 This function 'pi' has the same name as a native function
+Note 1585 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 1584 This function 'database' has the same name as a native function
+Note 1585 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 1584 This function 'current_user' has the same name as a native function
+Note 1585 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 1584 This function 'md5' has the same name as a native function
+Note 1585 This function 'md5' has the same name as a native function
SET SQL_MODE='IGNORE_SPACE';
select database(), database ();
database() database ()
@@ -6812,7 +6812,59 @@ DROP PROCEDURE db28318_b.t2;
DROP DATABASE db28318_a;
DROP DATABASE db28318_b;
use test;
-End of 5.0 tests
+DROP TABLE IF EXISTS t1;
+DROP PROCEDURE IF EXISTS bug29770;
+CREATE TABLE t1(a int);
+CREATE PROCEDURE bug29770()
+BEGIN
+DECLARE CONTINUE HANDLER FOR SQLSTATE '42S22' SET @state:= 'run';
+DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET @exception:= 'run';
+SELECT x FROM t1;
+END|
+CALL bug29770();
+SELECT @state, @exception;
+@state @exception
+run NULL
+DROP TABLE t1;
+DROP PROCEDURE bug29770;
+use test;
+drop table if exists t_33618;
+drop procedure if exists proc_33618;
+create table t_33618 (`a` int, unique(`a`), `b` varchar(30)) engine=myisam;
+insert into t_33618 (`a`,`b`) values (1,'1'),(2,'2');
+create procedure proc_33618(num int)
+begin
+declare count1 int default '0';
+declare vb varchar(30);
+declare last_row int;
+while(num>=1) do
+set num=num-1;
+begin
+declare cur1 cursor for select `a` from t_33618;
+declare continue handler for not found set last_row = 1;
+set last_row:=0;
+open cur1;
+rep1:
+repeat
+begin
+declare exit handler for 1062 begin end;
+fetch cur1 into vb;
+if (last_row = 1) then
+leave rep1;
+end if;
+end;
+until last_row=1
+end repeat;
+close cur1;
+end;
+end while;
+end//
+call proc_33618(20);
+drop table t_33618;
+drop procedure proc_33618;
+# ------------------------------------------------------------------
+# -- End of 5.0 tests
+# ------------------------------------------------------------------
#
# Bug#20550.
@@ -6911,4 +6963,6 @@ END latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION f1;
-End of 5.1 tests
+# ------------------------------------------------------------------
+# -- End of 5.1 tests
+# ------------------------------------------------------------------
diff --git a/mysql-test/r/sp_gis.result b/mysql-test/r/sp_gis.result
index b0960dec647..7a76507754f 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 1584 This function 'x' has the same name as a native function
+Note 1585 This function 'x' has the same name as a native function
create function y() returns int
return 3;
Warnings:
-Note 1584 This function 'y' has the same name as a native function
+Note 1585 This function 'y' has the same name as a native function
select a();
a()
1
diff --git a/mysql-test/r/sp_trans_log.result b/mysql-test/r/sp_trans_log.result
index a835b06858b..7a6173b89e2 100644
--- a/mysql-test/r/sp_trans_log.result
+++ b/mysql-test/r/sp_trans_log.result
@@ -16,6 +16,7 @@ insert into t2 values (bug23333(),1)|
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
show binlog events from 106 /* with fixes for #23333 will show there is the query */|
Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query 1 # #
master-bin.000001 # Table_map 1 # #
master-bin.000001 # Table_map 1 # #
master-bin.000001 # Write_rows 1 # #
diff --git a/mysql-test/r/ssl.result b/mysql-test/r/ssl.result
index 1f1a6ec9e22..3622fb51c99 100644
--- a/mysql-test/r/ssl.result
+++ b/mysql-test/r/ssl.result
@@ -608,11 +608,11 @@ id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t3 ref period period 4 test.t1.period 4181
explain select * from t3 as t1,t3 where t1.period=t3.period order by t3.period limit 10;
id select_type table type possible_keys key key_len ref rows Extra
-1 SIMPLE t3 ALL period NULL NULL NULL 41810 Using filesort
+1 SIMPLE t3 index period period 4 NULL 1
1 SIMPLE t1 ref period period 4 test.t3.period 4181
explain select * from t3 as t1,t3 where t1.period=t3.period order by t1.period limit 10;
id select_type table type possible_keys key key_len ref rows Extra
-1 SIMPLE t1 ALL period NULL NULL NULL 41810 Using filesort
+1 SIMPLE t1 index period period 4 NULL 1
1 SIMPLE t3 ref period period 4 test.t1.period 4181
select period from t1;
period
diff --git a/mysql-test/r/ssl_compress.result b/mysql-test/r/ssl_compress.result
index e77fcefeafd..3018fce5cad 100644
--- a/mysql-test/r/ssl_compress.result
+++ b/mysql-test/r/ssl_compress.result
@@ -611,11 +611,11 @@ id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t3 ref period period 4 test.t1.period 4181
explain select * from t3 as t1,t3 where t1.period=t3.period order by t3.period limit 10;
id select_type table type possible_keys key key_len ref rows Extra
-1 SIMPLE t3 ALL period NULL NULL NULL 41810 Using filesort
+1 SIMPLE t3 index period period 4 NULL 1
1 SIMPLE t1 ref period period 4 test.t3.period 4181
explain select * from t3 as t1,t3 where t1.period=t3.period order by t1.period limit 10;
id select_type table type possible_keys key key_len ref rows Extra
-1 SIMPLE t1 ALL period NULL NULL NULL 41810 Using filesort
+1 SIMPLE t1 index period period 4 NULL 1
1 SIMPLE t3 ref period period 4 test.t1.period 4181
select period from t1;
period
diff --git a/mysql-test/r/status.result b/mysql-test/r/status.result
index c95b09597fc..fc78f4ad40f 100644
--- a/mysql-test/r/status.result
+++ b/mysql-test/r/status.result
@@ -162,3 +162,24 @@ Variable_name Value
Com_show_status 8
rnd_diff tmp_table_diff
20 8
+show global status like 'Com%function%';
+Variable_name Value
+Com_alter_function 0
+Com_create_function 0
+Com_drop_function 0
+Com_show_function_code 0
+Com_show_function_status 0
+create function f1 (x INTEGER) returns integer
+begin
+declare ret integer;
+set ret = x * 10;
+return ret;
+end //
+drop function f1;
+show global status like 'Com%function%';
+Variable_name Value
+Com_alter_function 0
+Com_create_function 1
+Com_drop_function 1
+Com_show_function_code 0
+Com_show_function_status 0
diff --git a/mysql-test/r/strict_autoinc_4bdb.result b/mysql-test/r/strict_autoinc_4bdb.result
deleted file mode 100644
index 2e8980e435b..00000000000
--- a/mysql-test/r/strict_autoinc_4bdb.result
+++ /dev/null
@@ -1,28 +0,0 @@
-drop table if exists t1;
-set @org_mode=@@sql_mode;
-create table t1
-(
-`a` tinyint(4) NOT NULL auto_increment,
-primary key (`a`)
-) engine = 'BDB' ;
-set @@sql_mode='strict_all_tables';
-insert into t1 values(1000);
-ERROR 22003: Out of range value for column 'a' at row 1
-select count(*) from t1;
-count(*)
-0
-set auto_increment_increment=1000;
-set auto_increment_offset=700;
-insert into t1 values(null);
-ERROR 22003: Out of range value for column 'a' at row 1
-select count(*) from t1;
-count(*)
-0
-set @@sql_mode=@org_mode;
-insert into t1 values(null);
-Warnings:
-Warning 1264 Out of range value for column 'a' at row 1
-select * from t1;
-a
-127
-drop table t1;
diff --git a/mysql-test/r/subselect.result b/mysql-test/r/subselect.result
index a25183a0e6d..20d44933128 100644
--- a/mysql-test/r/subselect.result
+++ b/mysql-test/r/subselect.result
@@ -77,10 +77,9 @@ ERROR HY000: Incorrect usage of PROCEDURE and subquery
SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE((SELECT 1));
ERROR HY000: Incorrect parameters to procedure 'ANALYSE'
SELECT (SELECT 1) as a FROM (SELECT 1) b WHERE (SELECT a) IS NULL;
-a
+ERROR 42S22: Unknown column 'a' in 'field list'
SELECT (SELECT 1) as a FROM (SELECT 1) b WHERE (SELECT a) IS NOT NULL;
-a
-1
+ERROR 42S22: Unknown column 'a' in 'field list'
SELECT (SELECT 1,2,3) = ROW(1,2,3);
(SELECT 1,2,3) = ROW(1,2,3)
1
@@ -1307,7 +1306,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
1 PRIMARY t2 index NULL PRIMARY 4 NULL 4 100.00 Using where; Using index
2 DEPENDENT SUBQUERY t1 unique_subquery PRIMARY PRIMARY 4 func 1 100.00 Using where
Warnings:
-Note 1003 select `test`.`t2`.`a` AS `a` from `test`.`t2` where <in_optimizer>(`test`.`t2`.`a`,<exists>(<primary_index_lookup>(<cache>(`test`.`t2`.`a`) in t1 on PRIMARY where (`test`.`t1`.`b` <> 30))))
+Note 1003 select `test`.`t2`.`a` AS `a` from `test`.`t2` where <in_optimizer>(`test`.`t2`.`a`,<exists>(<primary_index_lookup>(<cache>(`test`.`t2`.`a`) in t1 on PRIMARY where ((`test`.`t1`.`b` <> 30) and (<cache>(`test`.`t2`.`a`) = `test`.`t1`.`a`)))))
select * from t2 where t2.a in (select t1.a from t1,t3 where t1.b=t3.a);
a
2
@@ -1315,8 +1314,8 @@ a
explain extended select * from t2 where t2.a in (select t1.a from t1,t3 where t1.b=t3.a);
id select_type table type possible_keys key key_len ref rows filtered Extra
1 PRIMARY t2 index NULL PRIMARY 4 NULL 4 100.00 Using where; Using index
-2 DEPENDENT SUBQUERY t1 eq_ref PRIMARY PRIMARY 4 func 1 100.00 Using where
-2 DEPENDENT SUBQUERY t3 eq_ref PRIMARY PRIMARY 4 test.t1.b 1 100.00 Using where; Using index
+2 DEPENDENT SUBQUERY t1 eq_ref PRIMARY PRIMARY 4 func 1 100.00
+2 DEPENDENT SUBQUERY t3 eq_ref PRIMARY PRIMARY 4 test.t1.b 1 100.00 Using index
Warnings:
Note 1003 select `test`.`t2`.`a` AS `a` from `test`.`t2` where <in_optimizer>(`test`.`t2`.`a`,<exists>(select 1 AS `Not_used` from `test`.`t1` join `test`.`t3` where ((`test`.`t3`.`a` = `test`.`t1`.`b`) and (<cache>(`test`.`t2`.`a`) = `test`.`t1`.`a`))))
drop table t1, t2, t3;
@@ -1334,9 +1333,9 @@ a
explain extended select * from t2 where t2.a in (select a from t1);
id select_type table type possible_keys key key_len ref rows filtered Extra
1 PRIMARY t2 index NULL a 5 NULL 4 100.00 Using where; Using index
-2 DEPENDENT SUBQUERY t1 index_subquery a a 5 func 1001 100.00 Using index
+2 DEPENDENT SUBQUERY t1 index_subquery a a 5 func 1001 100.00 Using index; Using where
Warnings:
-Note 1003 select `test`.`t2`.`a` AS `a` from `test`.`t2` where <in_optimizer>(`test`.`t2`.`a`,<exists>(<index_lookup>(<cache>(`test`.`t2`.`a`) in t1 on a)))
+Note 1003 select `test`.`t2`.`a` AS `a` from `test`.`t2` where <in_optimizer>(`test`.`t2`.`a`,<exists>(<index_lookup>(<cache>(`test`.`t2`.`a`) in t1 on a where (<cache>(`test`.`t2`.`a`) = `test`.`t1`.`a`))))
select * from t2 where t2.a in (select a from t1 where t1.b <> 30);
a
2
@@ -1346,7 +1345,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
1 PRIMARY t2 index NULL a 5 NULL 4 100.00 Using where; Using index
2 DEPENDENT SUBQUERY t1 index_subquery a a 5 func 1001 100.00 Using index; Using where
Warnings:
-Note 1003 select `test`.`t2`.`a` AS `a` from `test`.`t2` where <in_optimizer>(`test`.`t2`.`a`,<exists>(<index_lookup>(<cache>(`test`.`t2`.`a`) in t1 on a where (`test`.`t1`.`b` <> 30))))
+Note 1003 select `test`.`t2`.`a` AS `a` from `test`.`t2` where <in_optimizer>(`test`.`t2`.`a`,<exists>(<index_lookup>(<cache>(`test`.`t2`.`a`) in t1 on a where ((`test`.`t1`.`b` <> 30) and (<cache>(`test`.`t2`.`a`) = `test`.`t1`.`a`)))))
select * from t2 where t2.a in (select t1.a from t1,t3 where t1.b=t3.a);
a
2
@@ -1373,7 +1372,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
1 PRIMARY t2 index NULL a 5 NULL 4 100.00 Using where; Using index
2 DEPENDENT SUBQUERY t1 index_subquery a a 5 func 1001 100.00 Using index; Using where
Warnings:
-Note 1003 select `test`.`t2`.`a` AS `a` from `test`.`t2` where <in_optimizer>(`test`.`t2`.`a`,<exists>(<index_lookup>(<cache>(`test`.`t2`.`a`) in t1 on a where (`test`.`t1`.`b` <> 30))))
+Note 1003 select `test`.`t2`.`a` AS `a` from `test`.`t2` where <in_optimizer>(`test`.`t2`.`a`,<exists>(<index_lookup>(<cache>(`test`.`t2`.`a`) in t1 on a where ((`test`.`t1`.`b` <> 30) and (<cache>(`test`.`t2`.`a`) = `test`.`t1`.`a`)))))
drop table t1, t2, t3;
create table t1 (a int, b int);
create table t2 (a int, b int);
@@ -1737,7 +1736,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 12 100.00 Using where
2 DEPENDENT SUBQUERY t1 unique_subquery PRIMARY PRIMARY 4 func 1 100.00 Using index; Using where
Warnings:
-Note 1003 select `test`.`t1`.`id` AS `id`,`test`.`t1`.`text` AS `text` from `test`.`t1` where (not(<in_optimizer>(`test`.`t1`.`id`,<exists>(<primary_index_lookup>(<cache>(`test`.`t1`.`id`) in t1 on PRIMARY where (`test`.`t1`.`id` < 8))))))
+Note 1003 select `test`.`t1`.`id` AS `id`,`test`.`t1`.`text` AS `text` from `test`.`t1` where (not(<in_optimizer>(`test`.`t1`.`id`,<exists>(<primary_index_lookup>(<cache>(`test`.`t1`.`id`) in t1 on PRIMARY where ((`test`.`t1`.`id` < 8) and (<cache>(`test`.`t1`.`id`) = `test`.`t1`.`id`)))))))
explain extended select * from t1 as tt where not exists (select id from t1 where id < 8 and (id = tt.id or id is null) having id is not null);
id select_type table type possible_keys key key_len ref rows filtered Extra
1 PRIMARY tt ALL NULL NULL NULL NULL 12 100.00 Using where
@@ -2304,24 +2303,27 @@ drop table t1,t2;
CREATE TABLE t1 ( a int, b int );
CREATE TABLE t2 ( c int, d int );
INSERT INTO t1 VALUES (1,2), (2,3), (3,4);
-SELECT a AS abc, b FROM t1 WHERE b = (SELECT MIN(b) FROM t1 WHERE a=abc);
+SELECT a AS abc, b FROM t1 outr WHERE b =
+(SELECT MIN(b) FROM t1 WHERE a=outr.a);
abc b
1 2
2 3
3 4
-INSERT INTO t2 SELECT a AS abc, b FROM t1 WHERE b = (SELECT MIN(b) FROM t1 WHERE a=abc);
+INSERT INTO t2 SELECT a AS abc, b FROM t1 outr WHERE b =
+(SELECT MIN(b) FROM t1 WHERE a=outr.a);
select * from t2;
c d
1 2
2 3
3 4
-CREATE TABLE t3 SELECT a AS abc, b FROM t1 WHERE b = (SELECT MIN(b) FROM t1 WHERE a=abc);
+CREATE TABLE t3 SELECT a AS abc, b FROM t1 outr WHERE b =
+(SELECT MIN(b) FROM t1 WHERE a=outr.a);
select * from t3;
abc b
1 2
2 3
3 4
-prepare stmt1 from "INSERT INTO t2 SELECT a AS abc, b FROM t1 WHERE b = (SELECT MIN(b) FROM t1 WHERE a=abc);";
+prepare stmt1 from "INSERT INTO t2 SELECT a AS abc, b FROM t1 outr WHERE b = (SELECT MIN(b) FROM t1 WHERE a=outr.a);";
execute stmt1;
deallocate prepare stmt1;
select * from t2;
@@ -2333,7 +2335,7 @@ c d
2 3
3 4
drop table t3;
-prepare stmt1 from "CREATE TABLE t3 SELECT a AS abc, b FROM t1 WHERE b = (SELECT MIN(b) FROM t1 WHERE a=abc);";
+prepare stmt1 from "CREATE TABLE t3 SELECT a AS abc, b FROM t1 outr WHERE b = (SELECT MIN(b) FROM t1 WHERE a=outr.a);";
execute stmt1;
select * from t3;
abc b
@@ -2515,7 +2517,9 @@ INSERT INTO t1 VALUES ('ASM','American Samoa','Oceania','Polynesia',199.00,0,680
INSERT INTO t1 VALUES ('ATF','French Southern territories','Antarctica','Antarctica',7780.00,0,0,NULL,0.00,NULL,'Terres australes françaises','Nonmetropolitan Territory of France','Jacques Chirac',NULL,'TF');
INSERT INTO t1 VALUES ('UMI','United States Minor Outlying Islands','Oceania','Micronesia/Caribbean',16.00,0,0,NULL,0.00,NULL,'United States Minor Outlying Islands','Dependent Territory of the US','George W. Bush',NULL,'UM');
/*!40000 ALTER TABLE t1 ENABLE KEYS */;
-SELECT DISTINCT Continent AS c FROM t1 WHERE Code <> SOME ( SELECT Code FROM t1 WHERE Continent = c AND Population < 200);
+SELECT DISTINCT Continent AS c FROM t1 outr WHERE
+Code <> SOME ( SELECT Code FROM t1 WHERE Continent = outr.Continent AND
+Population < 200);
c
Oceania
drop table t1;
@@ -3558,22 +3562,19 @@ SELECT sql_no_cache * FROM t1 WHERE NOT EXISTS
(SELECT i FROM t1) UNION
(SELECT i FROM t1)
);
-i
+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 'UNION
+(SELECT i FROM t1)
+)' at line 3
SELECT * FROM t1
WHERE NOT EXISTS (((SELECT i FROM t1) UNION (SELECT i FROM t1)));
-i
+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 'UNION (SELECT i FROM t1)))' at line 2
explain select ((select t11.i from t1 t11) union (select t12.i from t1 t12))
from t1;
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'union (select t12.i from t1 t12))
from t1' at line 1
explain select * from t1 where not exists
((select t11.i from t1 t11) union (select t12.i from t1 t12));
-id select_type table type possible_keys key key_len ref rows Extra
-1 PRIMARY t1 system NULL NULL NULL NULL 0 const row not found
-2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL No tables used
-3 SUBQUERY NULL NULL NULL NULL NULL NULL NULL no matching row in const table
-4 UNION t12 system NULL NULL NULL NULL 0 const row not found
-NULL UNION RESULT <union2,4> ALL NULL NULL NULL NULL NULL
+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 'union (select t12.i from t1 t12))' at line 2
DROP TABLE t1;
CREATE TABLE t1 (a VARCHAR(250), b INT auto_increment, PRIMARY KEY (b));
insert into t1 (a) values (FLOOR(rand() * 100));
@@ -3666,6 +3667,8 @@ CREATE TABLE t1 (a int, b int auto_increment, PRIMARY KEY (b));
CREATE TABLE t2 (x int auto_increment, y int, z int,
PRIMARY KEY (x), FOREIGN KEY (y) REFERENCES t1 (b));
SET SESSION sort_buffer_size = 32 * 1024;
+Warnings:
+Warning 1292 Truncated incorrect sort_buffer_size value: '32768'
SELECT SQL_NO_CACHE COUNT(*)
FROM (SELECT a, b, (SELECT x FROM t2 WHERE y=b ORDER BY z DESC LIMIT 1) c
FROM t1) t;
@@ -4101,6 +4104,8 @@ INSERT INTO `t1` VALUES ('asdf','2007-02-08 01:11:26');
INSERT INTO `t2` VALUES ('abcdefghijk');
INSERT INTO `t2` VALUES ('asdf');
SET session sort_buffer_size=8192;
+Warnings:
+Warning 1292 Truncated incorrect sort_buffer_size value: '8192'
SELECT (SELECT 1 FROM t1 WHERE t1.a=t2.a ORDER BY t1.b LIMIT 1) AS d1 FROM t2;
d1
1
@@ -4139,6 +4144,201 @@ SELECT (SELECT SUM(t1.a) FROM t2 WHERE a=1) FROM t1;
(SELECT SUM(t1.a) FROM t2 WHERE a=1)
3
DROP TABLE t1,t2;
+CREATE TABLE t1 (a1 INT, a2 INT);
+CREATE TABLE t2 (b1 INT, b2 INT);
+INSERT INTO t1 VALUES (100, 200);
+INSERT INTO t1 VALUES (101, 201);
+INSERT INTO t2 VALUES (101, 201);
+INSERT INTO t2 VALUES (103, 203);
+SELECT ((a1,a2) IN (SELECT * FROM t2 WHERE b2 > 0)) IS NULL FROM t1;
+((a1,a2) IN (SELECT * FROM t2 WHERE b2 > 0)) IS NULL
+0
+0
+DROP TABLE t1, t2;
+CREATE TABLE t1 (s1 BINARY(5), s2 VARBINARY(5));
+INSERT INTO t1 VALUES (0x41,0x41), (0x42,0x42), (0x43,0x43);
+SELECT s1, s2 FROM t1 WHERE s2 IN (SELECT s1 FROM t1);
+s1 s2
+SELECT s1, s2 FROM t1 WHERE (s2, 10) IN (SELECT s1, 10 FROM t1);
+s1 s2
+CREATE INDEX I1 ON t1 (s1);
+CREATE INDEX I2 ON t1 (s2);
+SELECT s1, s2 FROM t1 WHERE s2 IN (SELECT s1 FROM t1);
+s1 s2
+SELECT s1, s2 FROM t1 WHERE (s2, 10) IN (SELECT s1, 10 FROM t1);
+s1 s2
+TRUNCATE t1;
+INSERT INTO t1 VALUES (0x41,0x41);
+SELECT * FROM t1 WHERE s1 = (SELECT s2 FROM t1);
+s1 s2
+DROP TABLE t1;
+CREATE TABLE t1 (a1 VARBINARY(2) NOT NULL DEFAULT '0', PRIMARY KEY (a1));
+CREATE TABLE t2 (a2 BINARY(2) default '0', INDEX (a2));
+CREATE TABLE t3 (a3 BINARY(2) default '0');
+INSERT INTO t1 VALUES (1),(2),(3),(4);
+INSERT INTO t2 VALUES (1),(2),(3);
+INSERT INTO t3 VALUES (1),(2),(3);
+SELECT LEFT(t2.a2, 1) FROM t2,t3 WHERE t3.a3=t2.a2;
+LEFT(t2.a2, 1)
+1
+2
+3
+SELECT t1.a1, t1.a1 in (SELECT t2.a2 FROM t2,t3 WHERE t3.a3=t2.a2) FROM t1;
+a1 t1.a1 in (SELECT t2.a2 FROM t2,t3 WHERE t3.a3=t2.a2)
+1 0
+2 0
+3 0
+4 0
+DROP TABLE t1,t2,t3;
+CREATE TABLE t1 (a1 BINARY(3) PRIMARY KEY, b1 VARBINARY(3));
+CREATE TABLE t2 (a2 VARBINARY(3) PRIMARY KEY);
+CREATE TABLE t3 (a3 VARBINARY(3) PRIMARY KEY);
+INSERT INTO t1 VALUES (1,10), (2,20), (3,30), (4,40);
+INSERT INTO t2 VALUES (2), (3), (4), (5);
+INSERT INTO t3 VALUES (10), (20), (30);
+SELECT LEFT(t1.a1,1) FROM t1,t3 WHERE t1.b1=t3.a3;
+LEFT(t1.a1,1)
+1
+2
+3
+SELECT a2 FROM t2 WHERE t2.a2 IN (SELECT t1.a1 FROM t1,t3 WHERE t1.b1=t3.a3);
+a2
+DROP TABLE t1, t2, t3;
+CREATE TABLE t1 (a CHAR(1), b VARCHAR(10));
+INSERT INTO t1 VALUES ('a', 'aa');
+INSERT INTO t1 VALUES ('a', 'aaa');
+SELECT a,b FROM t1 WHERE b IN (SELECT a FROM t1);
+a b
+CREATE INDEX I1 ON t1 (a);
+CREATE INDEX I2 ON t1 (b);
+EXPLAIN SELECT a,b FROM t1 WHERE b IN (SELECT a FROM t1);
+id select_type table type possible_keys key key_len ref rows Extra
+1 PRIMARY t1 ALL NULL NULL NULL NULL 2 Using where
+2 DEPENDENT SUBQUERY t1 index_subquery I1 I1 2 func 2 Using index; Using where
+SELECT a,b FROM t1 WHERE b IN (SELECT a FROM t1);
+a b
+CREATE TABLE t2 (a VARCHAR(1), b VARCHAR(10));
+INSERT INTO t2 SELECT * FROM t1;
+CREATE INDEX I1 ON t2 (a);
+CREATE INDEX I2 ON t2 (b);
+EXPLAIN SELECT a,b FROM t2 WHERE b IN (SELECT a FROM t2);
+id select_type table type possible_keys key key_len ref rows Extra
+1 PRIMARY t2 ALL NULL NULL NULL NULL 2 Using where
+2 DEPENDENT SUBQUERY t2 index_subquery I1 I1 4 func 2 Using index; Using where
+SELECT a,b FROM t2 WHERE b IN (SELECT a FROM t2);
+a b
+EXPLAIN
+SELECT a,b FROM t1 WHERE b IN (SELECT a FROM t1 WHERE LENGTH(a)<500);
+id select_type table type possible_keys key key_len ref rows Extra
+1 PRIMARY t1 ALL NULL NULL NULL NULL 2 Using where
+2 DEPENDENT SUBQUERY t1 index_subquery I1 I1 2 func 2 Using index; Using where
+SELECT a,b FROM t1 WHERE b IN (SELECT a FROM t1 WHERE LENGTH(a)<500);
+a b
+DROP TABLE t1,t2;
+CREATE TABLE t1(a INT, b INT);
+INSERT INTO t1 VALUES (1,1), (1,2), (2,3), (2,4);
+EXPLAIN
+SELECT a AS out_a, MIN(b) FROM t1
+WHERE b > (SELECT MIN(b) FROM t1 WHERE a = out_a)
+GROUP BY a;
+ERROR 42S22: Unknown column 'out_a' in 'where clause'
+SELECT a AS out_a, MIN(b) FROM t1
+WHERE b > (SELECT MIN(b) FROM t1 WHERE a = out_a)
+GROUP BY a;
+ERROR 42S22: Unknown column 'out_a' in 'where clause'
+EXPLAIN
+SELECT a AS out_a, MIN(b) FROM t1 t1_outer
+WHERE b > (SELECT MIN(b) FROM t1 WHERE a = t1_outer.a)
+GROUP BY a;
+id select_type table type possible_keys key key_len ref rows Extra
+1 PRIMARY t1_outer ALL NULL NULL NULL NULL 4 Using where; Using temporary; Using filesort
+2 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 4 Using where
+SELECT a AS out_a, MIN(b) FROM t1 t1_outer
+WHERE b > (SELECT MIN(b) FROM t1 WHERE a = t1_outer.a)
+GROUP BY a;
+out_a MIN(b)
+1 2
+2 4
+DROP TABLE t1;
+CREATE TABLE t1 (a INT);
+CREATE TABLE t2 (a INT);
+INSERT INTO t1 VALUES (1),(2);
+INSERT INTO t2 VALUES (1),(2);
+SELECT 2 FROM t1 WHERE EXISTS ((SELECT 1 FROM t2 WHERE t1.a=t2.a));
+2
+2
+2
+EXPLAIN EXTENDED
+SELECT 2 FROM t1 WHERE EXISTS ((SELECT 1 FROM t2 WHERE t1.a=t2.a));
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 PRIMARY t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1276 Field or reference 'test.t1.a' of SELECT #2 was resolved in SELECT #1
+Note 1003 select 2 AS `2` from `test`.`t1` where exists(select 1 AS `1` from `test`.`t2` where (`test`.`t1`.`a` = `test`.`t2`.`a`))
+EXPLAIN EXTENDED
+SELECT 2 FROM t1 WHERE EXISTS ((SELECT 1 FROM t2 WHERE t1.a=t2.a) UNION
+(SELECT 1 FROM t2 WHERE t1.a = t2.a));
+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 'UNION
+(SELECT 1 FROM t2 WHERE t1.a = t2.a))' at line 2
+DROP TABLE t1,t2;
+create table t1(f11 int, f12 int);
+create table t2(f21 int unsigned not null, f22 int, f23 varchar(10));
+insert into t1 values(1,1),(2,2), (3, 3);
+set session sort_buffer_size= 33*1024;
+select count(*) from t1 where f12 =
+(select f22 from t2 where f22 = f12 order by f21 desc, f22, f23 limit 1);
+count(*)
+3
+drop table t1,t2;
+CREATE TABLE t4 (
+f7 varchar(32) collate utf8_bin NOT NULL default '',
+f10 varchar(32) collate utf8_bin default NULL,
+PRIMARY KEY (f7)
+);
+INSERT INTO t4 VALUES(1,1), (2,null);
+CREATE TABLE t2 (
+f4 varchar(32) collate utf8_bin NOT NULL default '',
+f2 varchar(50) collate utf8_bin default NULL,
+f3 varchar(10) collate utf8_bin default NULL,
+PRIMARY KEY (f4),
+UNIQUE KEY uk1 (f2)
+);
+INSERT INTO t2 VALUES(1,1,null), (2,2,null);
+CREATE TABLE t1 (
+f8 varchar(32) collate utf8_bin NOT NULL default '',
+f1 varchar(10) collate utf8_bin default NULL,
+f9 varchar(32) collate utf8_bin default NULL,
+PRIMARY KEY (f8)
+);
+INSERT INTO t1 VALUES (1,'P',1), (2,'P',1), (3,'R',2);
+CREATE TABLE t3 (
+f6 varchar(32) collate utf8_bin NOT NULL default '',
+f5 varchar(50) collate utf8_bin default NULL,
+PRIMARY KEY (f6)
+);
+INSERT INTO t3 VALUES (1,null), (2,null);
+SELECT
+IF(t1.f1 = 'R', a1.f2, t2.f2) AS a4,
+IF(t1.f1 = 'R', a1.f3, t2.f3) AS f3,
+SUM(
+IF(
+(SELECT VPC.f2
+FROM t2 VPC, t4 a2, t2 a3
+WHERE
+VPC.f4 = a2.f10 AND a3.f2 = a4
+LIMIT 1) IS NULL,
+0,
+t3.f5
+)
+) AS a6
+FROM
+t2, t3, t1 JOIN t2 a1 ON t1.f9 = a1.f4
+GROUP BY a4;
+a4 f3 a6
+1 NULL NULL
+2 NULL NULL
+DROP TABLE t1, t2, t3, t4;
End of 5.0 tests.
CREATE TABLE t1 (a int, b int);
INSERT INTO t1 VALUES (2,22),(1,11),(2,22);
diff --git a/mysql-test/r/subselect3.result b/mysql-test/r/subselect3.result
index 2f3ea31a2a4..ac492caf89a 100644
--- a/mysql-test/r/subselect3.result
+++ b/mysql-test/r/subselect3.result
@@ -757,6 +757,6 @@ a
EXPLAIN SELECT a FROM t1 WHERE a NOT IN (SELECT a FROM t2);
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 4 Using where
-2 DEPENDENT SUBQUERY t2 unique_subquery PRIMARY PRIMARY 4 func 1 Using index
+2 DEPENDENT SUBQUERY t2 unique_subquery PRIMARY PRIMARY 4 func 1 Using index; Using where
DROP TABLE t1;
End of 5.0 tests
diff --git a/mysql-test/r/subselect_notembedded.result b/mysql-test/r/subselect_notembedded.result
index 44ae055425e..90aadcae398 100644
--- a/mysql-test/r/subselect_notembedded.result
+++ b/mysql-test/r/subselect_notembedded.result
@@ -1,3 +1,104 @@
purge master logs before (select adddate(current_timestamp(), interval -4 day));
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 'select adddate(current_timestamp(), interval -4 day))' at line 1
purge master logs before adddate(current_timestamp(), interval -4 day);
+create table t1(a int,b int,key(a),key(b));
+insert into t1(a,b) values (1,2),(2,1),(2,3),(3,4),(5,4),(5,5),
+(6,7),(7,4),(5,3);
+select sum(a),a from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1
+)group by b limit 1)group by b limit 1
+)group by b limit 1)group by b limit 1)group by b limit 1
+)group by b limit 1)group by b limit 1)group by b limit 1
+)group by b limit 1)group by b limit 1)group by b limit 1)
+group by a;
+sum(a) a
+select sum(a),a from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+select sum(a) from t1
+)group by b limit 1)group by b limit 1)group by b limit 1
+)group by b limit 1)group by b limit 1)group by b limit 1
+)group by b limit 1)group by b limit 1)group by b limit 1
+)group by b limit 1)group by b limit 1)group by b limit 1
+)group by b limit 1)group by b limit 1)group by b limit 1
+)group by b limit 1)group by b limit 1)group by b limit 1
+)group by b limit 1)group by b limit 1)group by b limit 1
+)group by b limit 1)group by b limit 1)group by b limit 1
+)group by b limit 1)group by b limit 1)group by b limit 1
+)group by b limit 1)group by b limit 1)group by b limit 1)
+group by a;
+ERROR HY000: Thread stack overrun detected
+explain select sum(a),a from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1
+)group by b limit 1)group by b limit 1
+)group by b limit 1)group by b limit 1)group by b limit 1
+)group by b limit 1)group by b limit 1)group by b limit 1
+)group by b limit 1)group by b limit 1)group by b limit 1)
+group by a;
+id select_type table type possible_keys key key_len ref rows Extra
+1 PRIMARY t1 index a a 5 NULL 9 Using where; Using index
+2 SUBQUERY t1 index a b 5 NULL 9 Using where; Using filesort
+3 SUBQUERY t1 index a b 5 NULL 9 Using where; Using filesort
+4 SUBQUERY t1 index a b 5 NULL 9 Using where; Using filesort
+5 SUBQUERY t1 index a b 5 NULL 9 Using where; Using filesort
+6 SUBQUERY t1 index a b 5 NULL 9 Using where; Using filesort
+7 SUBQUERY t1 index a b 5 NULL 9 Using where; Using filesort
+8 SUBQUERY t1 index a b 5 NULL 9 Using where; Using filesort
+9 SUBQUERY t1 index a b 5 NULL 9 Using where; Using filesort
+10 SUBQUERY t1 index a b 5 NULL 9 Using where; Using filesort
+11 SUBQUERY t1 index a b 5 NULL 9 Using where; Using filesort
+12 SUBQUERY t1 range a a 5 NULL 1 Using where; Using temporary; Using filesort
+13 SUBQUERY t1 index NULL a 5 NULL 9 Using index
+explain select sum(a),a from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+select sum(a) from t1
+)group by b limit 1)group by b limit 1)group by b limit 1
+)group by b limit 1)group by b limit 1)group by b limit 1
+)group by b limit 1)group by b limit 1)group by b limit 1
+)group by b limit 1)group by b limit 1)group by b limit 1
+)group by b limit 1)group by b limit 1)group by b limit 1
+)group by b limit 1)group by b limit 1)group by b limit 1
+)group by b limit 1)group by b limit 1)group by b limit 1
+)group by b limit 1)group by b limit 1)group by b limit 1
+)group by b limit 1)group by b limit 1)group by b limit 1
+)group by b limit 1)group by b limit 1)group by b limit 1)
+group by a;
+ERROR HY000: Thread stack overrun detected
+drop table t1;
diff --git a/mysql-test/r/symlink.result b/mysql-test/r/symlink.result
index aba60f757c6..4eece9d5b5a 100644
--- a/mysql-test/r/symlink.result
+++ b/mysql-test/r/symlink.result
@@ -99,6 +99,12 @@ t1 CREATE TABLE `t1` (
`b` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
+CREATE TABLE t1(a INT)
+DATA DIRECTORY='TEST_DIR/master-data/mysql'
+INDEX DIRECTORY='TEST_DIR/master-data/mysql';
+RENAME TABLE t1 TO user;
+ERROR HY000: Can't create/write to file 'TEST_DIR/master-data/mysql/user.MYI' (Errcode: 17)
+DROP TABLE t1;
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
diff --git a/mysql-test/r/trigger.result b/mysql-test/r/trigger.result
index 189722bfe9b..8b384dfdc4e 100644
--- a/mysql-test/r/trigger.result
+++ b/mysql-test/r/trigger.result
@@ -1978,3 +1978,42 @@ a
1
drop table table_25411_a;
drop table table_25411_b;
+DROP TRIGGER IF EXISTS trg;
+SHOW CREATE TRIGGER trg;
+ERROR HY000: Trigger does not exist
+drop table if exists t1;
+create table t1 (i int, j int);
+create trigger t1_bi before insert on t1 for each row begin end;
+create trigger t1_bi before insert on t1 for each row begin end;
+ERROR 42000: This version of MySQL doesn't yet support 'multiple triggers with the same action time and event for one table'
+drop trigger t1_bi;
+drop trigger t1_bi;
+ERROR HY000: Trigger does not exist
+lock tables t1 read;
+create trigger t1_bi before insert on t1 for each row begin end;
+ERROR HY000: Table 't1' was locked with a READ lock and can't be updated
+create trigger t1_bi before insert on t1 for each row begin end;
+ERROR HY000: Table 't1' was locked with a READ lock and can't be updated
+drop trigger t1_bi;
+ERROR HY000: Trigger does not exist
+unlock tables;
+create trigger t1_bi before insert on t1 for each row begin end;
+lock tables t1 read;
+create trigger t1_bi before insert on t1 for each row begin end;
+ERROR HY000: Table 't1' was locked with a READ lock and can't be updated
+drop trigger t1_bi;
+ERROR HY000: Table 't1' was locked with a READ lock and can't be updated
+unlock tables;
+drop trigger t1_bi;
+lock tables t1 write;
+create trigger b1_bi before insert on t1 for each row set new.i = new.i + 10;
+insert into t1 values (10, 10);
+drop trigger b1_bi;
+insert into t1 values (10, 10);
+select * from t1;
+i j
+20 10
+10 10
+unlock tables;
+drop table t1;
+End of 5.1 tests.
diff --git a/mysql-test/r/trigger-grant.result b/mysql-test/r/trigger_notembedded.result
index 14b8c98f2fa..87e8f68da38 100644
--- a/mysql-test/r/trigger-grant.result
+++ b/mysql-test/r/trigger_notembedded.result
@@ -448,3 +448,18 @@ DROP TABLE t1;
DROP DATABASE mysqltest_db1;
USE test;
End of 5.0 tests.
+drop table if exists t1;
+create table t1 (i int);
+connection: default
+lock tables t1 write;
+connection: flush
+flush tables with read lock;;
+connection: default
+create trigger t1_bi before insert on t1 for each row begin end;
+unlock tables;
+connection: flush
+unlock tables;
+select * from t1;
+i
+drop table t1;
+End of 5.1 tests.
diff --git a/mysql-test/r/type_bit.result b/mysql-test/r/type_bit.result
index dc8ab079ad8..fee0df9ab02 100644
--- a/mysql-test/r/type_bit.result
+++ b/mysql-test/r/type_bit.result
@@ -269,6 +269,8 @@ a+0 b+0
56 379
68 454
set @@max_length_for_sort_data=0;
+Warnings:
+Warning 1292 Truncated incorrect max_length_for_sort_data value: '0'
select a+0, b+0 from t1 where a > 40 and a < 70 order by 2;
a+0 b+0
57 135
@@ -672,6 +674,16 @@ COUNT(DISTINCT b,c)
2
2
DROP TABLE t2;
+CREATE TABLE t1(a BIT(13), KEY(a));
+INSERT INTO t1(a) VALUES
+(65535),(65525),(65535),(65535),(65535),(65535),(65535),(65535),(65535),(65535);
+EXPLAIN SELECT 1 FROM t1 GROUP BY a;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 range NULL a 3 NULL 6 Using index for group-by
+SELECT 1 FROM t1 GROUP BY a;
+1
+1
+DROP TABLE t1;
End of 5.0 tests
create table t1(a bit(7));
insert into t1 values(0x40);
diff --git a/mysql-test/r/type_bit_innodb.result b/mysql-test/r/type_bit_innodb.result
index 97331408b40..a9c3cae1770 100644
--- a/mysql-test/r/type_bit_innodb.result
+++ b/mysql-test/r/type_bit_innodb.result
@@ -269,6 +269,8 @@ a+0 b+0
56 379
68 454
set @@max_length_for_sort_data=0;
+Warnings:
+Warning 1292 Truncated incorrect max_length_for_sort_data value: '0'
select a+0, b+0 from t1 where a > 40 and a < 70 order by 2;
a+0 b+0
57 135
diff --git a/mysql-test/r/type_blob.result b/mysql-test/r/type_blob.result
index 869efb535e6..c98c8c5b68c 100644
--- a/mysql-test/r/type_blob.result
+++ b/mysql-test/r/type_blob.result
@@ -807,4 +807,18 @@ set @@sql_mode='TRADITIONAL';
create table t1 (a text default '');
ERROR 42000: BLOB/TEXT column 'a' can't have a default value
set @@sql_mode='';
+CREATE TABLE t (c TEXT CHARSET ASCII);
+INSERT INTO t (c) VALUES (REPEAT('1',65537));
+Warnings:
+Warning 1265 Data truncated for column 'c' at row 1
+INSERT INTO t (c) VALUES (REPEAT('2',65536));
+Warnings:
+Warning 1265 Data truncated for column 'c' at row 1
+INSERT INTO t (c) VALUES (REPEAT('3',65535));
+SELECT LENGTH(c), CHAR_LENGTH(c) FROM t;
+LENGTH(c) CHAR_LENGTH(c)
+65535 65535
+65535 65535
+65535 65535
+DROP TABLE t;
End of 5.0 tests
diff --git a/mysql-test/r/type_date.result b/mysql-test/r/type_date.result
index d6a01727813..7cb71831bce 100644
--- a/mysql-test/r/type_date.result
+++ b/mysql-test/r/type_date.result
@@ -145,3 +145,131 @@ d dt ts
0000-00-00 0000-00-00 00:00:00 0000-00-00 00:00:00
2001-11-11 2001-11-11 00:00:00 2001-11-11 00:00:00
drop table t1;
+CREATE TABLE t1 (
+a INT
+);
+INSERT INTO t1 VALUES (1);
+INSERT INTO t1 VALUES (NULL);
+SELECT str_to_date( '', a ) FROM t1;
+str_to_date( '', a )
+0000-00-00 00:00:00
+NULL
+DROP TABLE t1;
+CREATE TABLE t1 (a DATE, b int, PRIMARY KEY (a,b));
+INSERT INTO t1 VALUES (DATE(NOW()), 1);
+SELECT COUNT(*) FROM t1 WHERE a = NOW();
+COUNT(*)
+0
+EXPLAIN SELECT COUNT(*) FROM t1 WHERE a = NOW();
+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
+INSERT INTO t1 VALUES (DATE(NOW()), 2);
+SELECT COUNT(*) FROM t1 WHERE a = NOW();
+COUNT(*)
+0
+EXPLAIN SELECT COUNT(*) FROM t1 WHERE a = NOW();
+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
+SELECT COUNT(*) FROM t1 WHERE a = NOW() AND b = 1;
+COUNT(*)
+0
+EXPLAIN SELECT COUNT(*) FROM t1 WHERE a = NOW() AND b = 1;
+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
+ALTER TABLE t1 DROP PRIMARY KEY;
+SELECT COUNT(*) FROM t1 WHERE a = NOW();
+COUNT(*)
+0
+EXPLAIN SELECT COUNT(*) FROM t1 WHERE a = NOW();
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 Using where
+DROP TABLE t1;
+CREATE TABLE t1 (a DATE);
+CREATE TABLE t2 (a DATE);
+CREATE INDEX i ON t1 (a);
+INSERT INTO t1 VALUES ('0000-00-00'),('0000-00-00');
+INSERT INTO t2 VALUES ('0000-00-00'),('0000-00-00');
+SELECT * FROM t1 WHERE a = '0000-00-00';
+a
+0000-00-00
+0000-00-00
+SELECT * FROM t2 WHERE a = '0000-00-00';
+a
+0000-00-00
+0000-00-00
+SET SQL_MODE=TRADITIONAL;
+EXPLAIN SELECT * FROM t1 WHERE a = '0000-00-00';
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ref i i 4 const 1 Using where; Using index
+Warnings:
+Warning 1292 Incorrect date value: '0000-00-00' for column 'a' at row 1
+Warning 1292 Incorrect date value: '0000-00-00' for column 'a' at row 1
+SELECT * FROM t1 WHERE a = '0000-00-00';
+a
+0000-00-00
+0000-00-00
+Warnings:
+Warning 1292 Incorrect date value: '0000-00-00' for column 'a' at row 1
+Warning 1292 Incorrect date value: '0000-00-00' for column 'a' at row 1
+SELECT * FROM t2 WHERE a = '0000-00-00';
+a
+0000-00-00
+0000-00-00
+Warnings:
+Warning 1292 Incorrect date value: '0000-00-00' for column 'a' at row 1
+Warning 1292 Incorrect date value: '0000-00-00' for column 'a' at row 1
+INSERT INTO t1 VALUES ('0000-00-00');
+ERROR 22007: Incorrect date value: '0000-00-00' for column 'a' at row 1
+SET SQL_MODE=DEFAULT;
+DROP TABLE t1,t2;
+CREATE TABLE t1 (a DATE);
+CREATE TABLE t2 (a DATE);
+CREATE INDEX i ON t1 (a);
+INSERT INTO t1 VALUES ('1000-00-00'),('1000-00-00');
+INSERT INTO t2 VALUES ('1000-00-00'),('1000-00-00');
+SELECT * FROM t1 WHERE a = '1000-00-00';
+a
+1000-00-00
+1000-00-00
+SELECT * FROM t2 WHERE a = '1000-00-00';
+a
+1000-00-00
+1000-00-00
+SET SQL_MODE=TRADITIONAL;
+EXPLAIN SELECT * FROM t1 WHERE a = '1000-00-00';
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ref i i 4 const 1 Using where; Using index
+Warnings:
+Warning 1292 Incorrect date value: '1000-00-00' for column 'a' at row 1
+Warning 1292 Incorrect date value: '1000-00-00' for column 'a' at row 1
+SELECT * FROM t1 WHERE a = '1000-00-00';
+a
+1000-00-00
+1000-00-00
+Warnings:
+Warning 1292 Incorrect date value: '1000-00-00' for column 'a' at row 1
+Warning 1292 Incorrect date value: '1000-00-00' for column 'a' at row 1
+SELECT * FROM t2 WHERE a = '1000-00-00';
+a
+1000-00-00
+1000-00-00
+Warnings:
+Warning 1292 Incorrect date value: '1000-00-00' for column 'a' at row 1
+Warning 1292 Incorrect date value: '1000-00-00' for column 'a' at row 1
+INSERT INTO t1 VALUES ('1000-00-00');
+ERROR 22007: Incorrect date value: '1000-00-00' for column 'a' at row 1
+SET SQL_MODE=DEFAULT;
+DROP TABLE t1,t2;
+CREATE TABLE t1 SELECT curdate() AS f1;
+SELECT hour(f1), minute(f1), second(f1) FROM t1;
+hour(f1) minute(f1) second(f1)
+0 0 0
+DROP TABLE t1;
+End of 5.0 tests
+create table t1 (a date, primary key (a))engine=memory;
+insert into t1 values ('0000-01-01'), ('0000-00-01'), ('0001-01-01');
+select * from t1 where a between '0000-00-01' and '0000-00-02';
+a
+0000-00-01
+drop table t1;
+End of 5.1 tests
diff --git a/mysql-test/r/type_datetime.result b/mysql-test/r/type_datetime.result
index 432fe1e6c4a..d485c468a39 100644
--- a/mysql-test/r/type_datetime.result
+++ b/mysql-test/r/type_datetime.result
@@ -59,6 +59,8 @@ t
drop table t1;
CREATE TABLE t1 (a timestamp, b date, c time, d datetime);
insert into t1 (b,c,d) values(now(),curtime(),now());
+Warnings:
+Note 1265 Data truncated for column 'b' at row 1
select date_format(a,"%Y-%m-%d")=b,right(a+0,6)=c+0,a=d+0 from t1;
date_format(a,"%Y-%m-%d")=b right(a+0,6)=c+0 a=d+0
1 1 1
@@ -427,6 +429,67 @@ f1
Warnings:
Warning 1292 Incorrect datetime value: '2007010100000' for column 'f1' at row 1
drop table t1;
+#
+# Bug#27216: functions with parameters of different date types may
+# return wrong type of the result.
+#
+create table t1 (f1 date, f2 datetime, f3 varchar(20));
+create table t2 as select coalesce(f1,f1) as f4 from t1;
+desc t2;
+Field Type Null Key Default Extra
+f4 date YES NULL
+create table t3 as select coalesce(f1,f2) as f4 from t1;
+desc t3;
+Field Type Null Key Default Extra
+f4 datetime YES NULL
+create table t4 as select coalesce(f2,f2) as f4 from t1;
+desc t4;
+Field Type Null Key Default Extra
+f4 datetime YES NULL
+create table t5 as select coalesce(f1,f3) as f4 from t1;
+desc t5;
+Field Type Null Key Default Extra
+f4 varbinary(20) YES NULL
+create table t6 as select coalesce(f2,f3) as f4 from t1;
+desc t6;
+Field Type Null Key Default Extra
+f4 varbinary(20) YES NULL
+create table t7 as select coalesce(makedate(1997,1),f2) as f4 from t1;
+desc t7;
+Field Type Null Key Default Extra
+f4 datetime YES NULL
+create table t8 as select coalesce(cast('01-01-01' as datetime),f2) as f4
+from t1;
+desc t8;
+Field Type Null Key Default Extra
+f4 datetime YES NULL
+create table t9 as select case when 1 then cast('01-01-01' as date)
+when 0 then cast('01-01-01' as date) end as f4 from t1;
+desc t9;
+Field Type Null Key Default Extra
+f4 date YES NULL
+create table t10 as select case when 1 then cast('01-01-01' as datetime)
+when 0 then cast('01-01-01' as datetime) end as f4 from t1;
+desc t10;
+Field Type Null Key Default Extra
+f4 datetime YES NULL
+create table t11 as select if(1, cast('01-01-01' as datetime),
+cast('01-01-01' as date)) as f4 from t1;
+desc t11;
+Field Type Null Key Default Extra
+f4 datetime YES NULL
+create table t12 as select least(cast('01-01-01' as datetime),
+cast('01-01-01' as date)) as f4 from t1;
+desc t12;
+Field Type Null Key Default Extra
+f4 datetime YES NULL
+create table t13 as select ifnull(cast('01-01-01' as datetime),
+cast('01-01-01' as date)) as f4 from t1;
+desc t13;
+Field Type Null Key Default Extra
+f4 datetime YES NULL
+drop tables t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13;
+###################################################################
create table t1 (f1 time);
insert into t1 set f1 = '45:44:44';
insert into t1 set f1 = '15:44:44';
@@ -442,6 +505,61 @@ select sum(a) from t1 group by convert(a, datetime);
sum(a)
NULL
drop table t1;
+create table t1 (id int(10) not null, cur_date datetime not null);
+create table t2 (id int(10) not null, cur_date date not null);
+insert into t1 (id, cur_date) values (1, '2007-04-25 18:30:22');
+insert into t2 (id, cur_date) values (1, '2007-04-25');
+explain extended
+select * from t1
+where id in (select id from t1 as x1 where (t1.cur_date is null));
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 PRIMARY NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
+2 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
+Warnings:
+Note 1276 Field or reference 'test.t1.cur_date' of SELECT #2 was resolved in SELECT #1
+Note 1003 select '1' AS `id`,'2007-04-25 18:30:22' AS `cur_date` from `test`.`t1` where <in_optimizer>('1',<exists>(select 1 AS `Not_used` from `test`.`t1` `x1` where 0))
+select * from t1
+where id in (select id from t1 as x1 where (t1.cur_date is null));
+id cur_date
+explain extended
+select * from t2
+where id in (select id from t2 as x1 where (t2.cur_date is null));
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 PRIMARY NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
+2 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
+Warnings:
+Note 1276 Field or reference 'test.t2.cur_date' of SELECT #2 was resolved in SELECT #1
+Note 1003 select '1' AS `id`,'2007-04-25' AS `cur_date` from `test`.`t2` where <in_optimizer>('1',<exists>(select 1 AS `Not_used` from `test`.`t2` `x1` where 0))
+select * from t2
+where id in (select id from t2 as x1 where (t2.cur_date is null));
+id cur_date
+insert into t1 (id, cur_date) values (2, '2007-04-26 18:30:22');
+insert into t2 (id, cur_date) values (2, '2007-04-26');
+explain extended
+select * from t1
+where id in (select id from t1 as x1 where (t1.cur_date is null));
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 PRIMARY t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+2 DEPENDENT SUBQUERY x1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1276 Field or reference 'test.t1.cur_date' of SELECT #2 was resolved in SELECT #1
+Note 1003 select `test`.`t1`.`id` AS `id`,`test`.`t1`.`cur_date` AS `cur_date` from `test`.`t1` where <in_optimizer>(`test`.`t1`.`id`,<exists>(select 1 AS `Not_used` from `test`.`t1` `x1` where ((`test`.`t1`.`cur_date` = 0) and (<cache>(`test`.`t1`.`id`) = `test`.`x1`.`id`))))
+select * from t1
+where id in (select id from t1 as x1 where (t1.cur_date is null));
+id cur_date
+explain extended
+select * from t2
+where id in (select id from t2 as x1 where (t2.cur_date is null));
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 PRIMARY t2 ALL NULL NULL NULL NULL 2 100.00 Using where
+2 DEPENDENT SUBQUERY x1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1276 Field or reference 'test.t2.cur_date' of SELECT #2 was resolved in SELECT #1
+Note 1003 select `test`.`t2`.`id` AS `id`,`test`.`t2`.`cur_date` AS `cur_date` from `test`.`t2` where <in_optimizer>(`test`.`t2`.`id`,<exists>(select 1 AS `Not_used` from `test`.`t2` `x1` where ((`test`.`t2`.`cur_date` = 0) and (<cache>(`test`.`t2`.`id`) = `test`.`x1`.`id`))))
+select * from t2
+where id in (select id from t2 as x1 where (t2.cur_date is null));
+id cur_date
+drop table t1,t2;
End of 5.0 tests
set @org_mode=@@sql_mode;
create table t1 (da date default '1962-03-03 23:33:34', dt datetime default '1962-03-03');
diff --git a/mysql-test/r/type_decimal.result b/mysql-test/r/type_decimal.result
index fa7bf91b113..3e5f6a9b504 100644
--- a/mysql-test/r/type_decimal.result
+++ b/mysql-test/r/type_decimal.result
@@ -786,10 +786,6 @@ from (select 1 as s,'t' as t union select null, null ) as sub1;
select group_concat(t) from t1 group by week(date)/10;
group_concat(t)
t
-Warnings:
-Warning 1292 Incorrect datetime value: '0000-00-00'
-Warning 1292 Incorrect datetime value: '0000-00-00'
-Warning 1292 Incorrect datetime value: '0000-00-00'
drop table t1;
CREATE TABLE t1 (
qty decimal(16,6) default NULL,
@@ -798,12 +794,156 @@ dps tinyint(3) unsigned default NULL
INSERT INTO t1 VALUES (1.1325,3);
SELECT ROUND(qty,3), dps, ROUND(qty,dps) FROM t1;
ROUND(qty,3) dps ROUND(qty,dps)
-1.133 3 1.133
+1.133 3 1.133000
DROP TABLE t1;
+SELECT 1 % .123456789123456789123456789123456789123456789123456789123456789123456789123456789 AS '%';
+%
+0.012345687012345687012345687012345687012345687012345687012345687012345687000000000
+SELECT MOD(1, .123456789123456789123456789123456789123456789123456789123456789123456789123456789) AS 'MOD()';
+MOD()
+0.012345687012345687012345687012345687012345687012345687012345687012345687000000000
create table t1 (f1 decimal(6,6),f2 decimal(6,6) zerofill);
insert into t1 values (-0.123456,0.123456);
select group_concat(f1),group_concat(f2) from t1;
group_concat(f1) group_concat(f2)
-0.123456 0.123456
drop table t1;
+create table t1 (
+ua_id decimal(22,0) not null,
+ua_invited_by_id decimal(22,0) default NULL,
+primary key(ua_id)
+);
+insert into t1 values (123, NULL), (456, NULL);
+this must not produce error 1048:
+select * from t1 where ua_invited_by_id not in (select ua_id from t1);
+ua_id ua_invited_by_id
+drop table t1;
+DROP TABLE IF EXISTS t3;
+DROP TABLE IF EXISTS t4;
+CREATE TABLE t1( a NUMERIC, b INT );
+INSERT INTO t1 VALUES (123456, 40), (123456, 40);
+SELECT TRUNCATE( a, b ) AS c FROM t1 ORDER BY c;
+c
+123456
+123456
+SELECT ROUND( a, b ) AS c FROM t1 ORDER BY c;
+c
+123456
+123456
+SELECT ROUND( a, 100 ) AS c FROM t1 ORDER BY c;
+c
+123456.000000000000000000000000000000
+123456.000000000000000000000000000000
+CREATE TABLE t2( a NUMERIC, b INT );
+INSERT INTO t2 VALUES (123456, 100);
+SELECT TRUNCATE( a, b ) AS c FROM t2 ORDER BY c;
+c
+123456
+SELECT ROUND( a, b ) AS c FROM t2 ORDER BY c;
+c
+123456
+CREATE TABLE t3( a DECIMAL, b INT );
+INSERT INTO t3 VALUES (123456, 40), (123456, 40);
+SELECT TRUNCATE( a, b ) AS c FROM t3 ORDER BY c;
+c
+123456
+123456
+SELECT ROUND( a, b ) AS c FROM t3 ORDER BY c;
+c
+123456
+123456
+SELECT ROUND( a, 100 ) AS c FROM t3 ORDER BY c;
+c
+123456.000000000000000000000000000000
+123456.000000000000000000000000000000
+CREATE TABLE t4( a DECIMAL, b INT );
+INSERT INTO t4 VALUES (123456, 40), (123456, 40);
+SELECT TRUNCATE( a, b ) AS c FROM t4 ORDER BY c;
+c
+123456
+123456
+SELECT ROUND( a, b ) AS c FROM t4 ORDER BY c;
+c
+123456
+123456
+SELECT ROUND( a, 100 ) AS c FROM t4 ORDER BY c;
+c
+123456.000000000000000000000000000000
+123456.000000000000000000000000000000
+delete from t1;
+INSERT INTO t1 VALUES (1234567890, 20), (999.99, 5);
+Warnings:
+Note 1265 Data truncated for column 'a' at row 2
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` decimal(10,0) DEFAULT NULL,
+ `b` int(11) DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+select round(a,b) as c from t1 order by c;
+c
+1000
+1234567890
+DROP TABLE t1, t2, t3, t4;
+CREATE TABLE t1( a DECIMAL(4, 3), b INT );
+INSERT INTO t1 VALUES ( 1, 5 ), ( 2, 4 ), ( 3, 3 ), ( 4, 2 ), ( 5, 1 );
+SELECT a, b, ROUND( a, b ) AS c FROM t1 ORDER BY c;
+a b c
+1.000 5 1.000
+2.000 4 2.000
+3.000 3 3.000
+4.000 2 4.000
+5.000 1 5.000
+SELECT a, b, ROUND( a, b ) AS c FROM t1 ORDER BY c DESC;
+a b c
+5.000 1 5.000
+4.000 2 4.000
+3.000 3 3.000
+2.000 4 2.000
+1.000 5 1.000
+CREATE TABLE t2 ( a INT, b INT, c DECIMAL(5, 4) );
+INSERT INTO t2 VALUES ( 0, 1, 1.2345 ), ( 1, 2, 1.2345 ),
+( 3, 3, 1.2345 ), ( 2, 4, 1.2345 );
+SELECT a, b, MAX(ROUND(c, a))
+FROM t2
+GROUP BY a, b
+ORDER BY b;
+a b MAX(ROUND(c, a))
+0 1 1.0000
+1 2 1.2000
+3 3 1.2350
+2 4 1.2300
+SELECT a, b, ROUND(c, a)
+FROM t2;
+a b ROUND(c, a)
+0 1 1.0000
+1 2 1.2000
+3 3 1.2350
+2 4 1.2300
+CREATE TABLE t3( a INT, b DECIMAL(6, 3) );
+INSERT INTO t3 VALUES( 0, 1.5 );
+SELECT ROUND( b, a ) FROM t3;
+ROUND( b, a )
+2.000
+CREATE TABLE t4( a INT, b DECIMAL( 12, 0) );
+INSERT INTO t4 VALUES( -9, 1.5e9 );
+SELECT ROUND( b, a ) FROM t4;
+ROUND( b, a )
+2000000000
+CREATE TABLE t5( a INT, b DECIMAL( 13, 12 ) );
+INSERT INTO t5 VALUES( 0, 1.5 );
+INSERT INTO t5 VALUES( 9, 1.5e-9 );
+SELECT ROUND( b, a ) FROM t5;
+ROUND( b, a )
+2.000000000000
+0.000000002000
+CREATE TABLE t6( a INT );
+INSERT INTO t6 VALUES( 6 / 8 );
+SELECT * FROM t6;
+a
+1
+SELECT ROUND(20061108085411.000002);
+ROUND(20061108085411.000002)
+20061108085411
+DROP TABLE t1, t2, t3, t4, t5, t6;
End of 5.0 tests
diff --git a/mysql-test/r/type_newdecimal.result b/mysql-test/r/type_newdecimal.result
index 24be10a7a29..71be41b106f 100644
--- a/mysql-test/r/type_newdecimal.result
+++ b/mysql-test/r/type_newdecimal.result
@@ -1509,6 +1509,26 @@ SELECT 1 FROM t1 GROUP BY @b := @a, @b;
1
1
DROP TABLE t1;
+CREATE TABLE t1 SELECT 0.123456789012345678901234567890123456 AS f1;
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+DESC t1;
+Field Type Null Key Default Extra
+f1 decimal(31,30) NO 0.000000000000000000000000000000
+SELECT f1 FROM t1;
+f1
+0.123456789012345678901234567890
+DROP TABLE t1;
+CREATE TABLE t1 SELECT 123451234512345123451234512345123451234512345.678906789067890678906789067890678906789067890 AS f1;
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+DESC t1;
+Field Type Null Key Default Extra
+f1 decimal(59,30) NO 0.000000000000000000000000000000
+SELECT f1 FROM t1;
+f1
+99999999999999999999999999999.999999999999999999999999999999
+DROP TABLE t1;
End of 5.0 tests
select cast(143.481 as decimal(4,1));
cast(143.481 as decimal(4,1))
diff --git a/mysql-test/r/type_ranges.result b/mysql-test/r/type_ranges.result
index 149f0d2dca5..6e08067d8a4 100644
--- a/mysql-test/r/type_ranges.result
+++ b/mysql-test/r/type_ranges.result
@@ -57,7 +57,7 @@ ushort smallint(5) unsigned zerofill NULL NO MUL 00000 #
umedium mediumint(8) unsigned NULL NO MUL 0 #
ulong int(11) unsigned NULL NO MUL 0 #
ulonglong bigint(13) unsigned NULL NO MUL 0 #
-time_stamp timestamp NULL NO CURRENT_TIMESTAMP #
+time_stamp timestamp NULL NO CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP #
date_field date NULL YES NULL #
time_field time NULL YES NULL #
date_time datetime NULL YES NULL #
@@ -225,7 +225,7 @@ ushort smallint(5) unsigned zerofill NULL NO 00000 #
umedium mediumint(8) unsigned NULL NO MUL 0 #
ulong int(11) unsigned NULL NO MUL 0 #
ulonglong bigint(13) unsigned NULL NO MUL 0 #
-time_stamp timestamp NULL NO CURRENT_TIMESTAMP #
+time_stamp timestamp NULL NO CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP #
date_field char(10) latin1_swedish_ci YES NULL #
time_field time NULL YES NULL #
date_time datetime NULL YES NULL #
diff --git a/mysql-test/r/type_timestamp.result b/mysql-test/r/type_timestamp.result
index 7caf7e78fe9..596dcbf432c 100644
--- a/mysql-test/r/type_timestamp.result
+++ b/mysql-test/r/type_timestamp.result
@@ -251,7 +251,7 @@ t1 CREATE TABLE `t1` (
) ENGINE=MyISAM DEFAULT CHARSET=latin1
show columns from t1;
Field Type Null Key Default Extra
-t1 timestamp NO 2003-01-01 00:00:00
+t1 timestamp NO 2003-01-01 00:00:00 on update CURRENT_TIMESTAMP
t2 datetime YES NULL
drop table t1;
create table t1 (t1 timestamp default now() on update now(), t2 datetime);
@@ -276,7 +276,7 @@ t1 CREATE TABLE `t1` (
) ENGINE=MyISAM DEFAULT CHARSET=latin1
show columns from t1;
Field Type Null Key Default Extra
-t1 timestamp NO CURRENT_TIMESTAMP
+t1 timestamp NO CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
t2 datetime YES NULL
drop table t1;
create table t1 (t1 timestamp, t2 datetime, t3 timestamp);
@@ -302,7 +302,7 @@ t1 CREATE TABLE `t1` (
) ENGINE=MyISAM DEFAULT CHARSET=latin1
show columns from t1;
Field Type Null Key Default Extra
-t1 timestamp NO CURRENT_TIMESTAMP
+t1 timestamp NO CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
t2 datetime YES NULL
t3 timestamp NO 0000-00-00 00:00:00
drop table t1;
@@ -328,7 +328,7 @@ t1 CREATE TABLE `t1` (
) ENGINE=MyISAM DEFAULT CHARSET=latin1
show columns from t1;
Field Type Null Key Default Extra
-t1 timestamp NO CURRENT_TIMESTAMP
+t1 timestamp NO CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
t2 datetime YES NULL
truncate table t1;
insert into t1 values ('2004-04-01 00:00:00', '2004-04-01 00:00:00');
diff --git a/mysql-test/r/udf.result b/mysql-test/r/udf.result
index da27a71c1a1..15410ac2039 100644
--- a/mysql-test/r/udf.result
+++ b/mysql-test/r/udf.result
@@ -11,7 +11,7 @@ RETURNS STRING SONAME "UDF_EXAMPLE_LIB";
CREATE AGGREGATE FUNCTION avgcost
RETURNS REAL SONAME "UDF_EXAMPLE_LIB";
select myfunc_double();
-ERROR HY000: myfunc_double must have at least one argument
+ERROR HY000: Can't initialize function 'myfunc_double'; myfunc_double must have at least one argument
select myfunc_double(1);
myfunc_double(1)
49.00
@@ -24,26 +24,26 @@ select myfunc_int();
myfunc_int()
0
select lookup();
-ERROR HY000: Wrong arguments to lookup; Use the source
+ERROR HY000: Can't initialize function 'lookup'; Wrong arguments to lookup; Use the source
select lookup("127.0.0.1");
lookup("127.0.0.1")
127.0.0.1
select lookup(127,0,0,1);
-ERROR HY000: Wrong arguments to lookup; Use the source
+ERROR HY000: Can't initialize function 'lookup'; Wrong arguments to lookup; Use the source
select lookup("localhost");
lookup("localhost")
127.0.0.1
select reverse_lookup();
-ERROR HY000: Wrong number of arguments to reverse_lookup; Use the source
+ERROR HY000: Can't initialize function 'reverse_lookup'; Wrong number of arguments to reverse_lookup; Use the source
select reverse_lookup("127.0.0.1");
select reverse_lookup(127,0,0,1);
select reverse_lookup("localhost");
reverse_lookup("localhost")
NULL
select avgcost();
-ERROR HY000: wrong number of arguments: AVGCOST() requires two arguments
+ERROR HY000: Can't initialize function 'avgcost'; wrong number of arguments: AVGCOST() requires two arguments
select avgcost(100,23.76);
-ERROR HY000: wrong argument type: AVGCOST() requires an INT and a REAL
+ERROR HY000: Can't initialize function 'avgcost'; wrong argument type: AVGCOST() requires an INT and a REAL
create table t1(sum int, price float(24));
insert into t1 values(100, 50.00), (100, 100.00);
select avgcost(sum, price) from t1;
@@ -365,4 +365,31 @@ DROP FUNCTION check_const_len;
DROP PROCEDURE check_const_len_sp;
DROP TRIGGER check_const_len_trigger;
DROP TABLE const_len_bug;
+CREATE FUNCTION sequence RETURNS INTEGER SONAME "UDF_EXAMPLE_LIB";
+CREATE TABLE t1 (a INT);
+CREATE TABLE t2 (a INT PRIMARY KEY);
+INSERT INTO t1 VALUES (4),(3),(2),(1);
+INSERT INTO t2 SELECT * FROM t1;
+SELECT sequence() AS seq, a FROM t1 ORDER BY seq ASC;
+seq a
+1 4
+2 3
+3 2
+4 1
+SELECT sequence() AS seq, a FROM t1 ORDER BY seq DESC;
+seq a
+4 1
+3 2
+2 3
+1 4
+SELECT * FROM t1 WHERE a = sequence();
+a
+SELECT * FROM t2 WHERE a = sequence();
+a
+1
+2
+3
+4
+DROP FUNCTION sequence;
+DROP TABLE t1,t2;
End of 5.0 tests.
diff --git a/mysql-test/r/udf_skip_grants.result b/mysql-test/r/udf_skip_grants.result
new file mode 100644
index 00000000000..8d7081ebf6f
--- /dev/null
+++ b/mysql-test/r/udf_skip_grants.result
@@ -0,0 +1,5 @@
+CREATE FUNCTION a RETURNS STRING SONAME '';
+ERROR HY000: Can't initialize function 'a'; UDFs are unavailable with the --skip-grant-tables option
+DROP FUNCTION a;
+ERROR 42000: FUNCTION test.a does not exist
+End of 5.0 tests
diff --git a/mysql-test/r/union.result b/mysql-test/r/union.result
index 6fc630ec33c..295451867c8 100644
--- a/mysql-test/r/union.result
+++ b/mysql-test/r/union.result
@@ -1445,4 +1445,79 @@ select @var;
1
(select 2) union (select 1 into @var);
ERROR 42000: Result consisted of more than one row
+CREATE TABLE t1 (a int);
+INSERT INTO t1 VALUES (10), (20);
+CREATE TABLE t2 (b int);
+INSERT INTO t2 VALUES (10), (50), (50);
+SELECT a,1 FROM t1
+UNION
+SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP
+ORDER BY a;
+a 1
+NULL 3
+10 1
+20 1
+50 2
+SELECT a,1 FROM t1
+UNION
+SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP
+ORDER BY a DESC;
+a 1
+50 2
+20 1
+10 1
+NULL 3
+SELECT a,1 FROM t1
+UNION
+SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP
+ORDER BY a ASC LIMIT 3;
+a 1
+NULL 3
+10 1
+20 1
+SELECT a,1 FROM t1
+UNION ALL
+SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP
+ORDER BY a DESC;
+a 1
+50 2
+20 1
+10 1
+10 1
+NULL 3
+SELECT a,1 FROM t1
+UNION
+(SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP ORDER BY a);
+ERROR HY000: Incorrect usage of CUBE/ROLLUP and ORDER BY
+SELECT a,1 FROM t1
+UNION ALL
+SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP ORDER BY a
+UNION
+SELECT 1,1;
+ERROR HY000: Incorrect usage of UNION and ORDER BY
+DROP TABLE t1,t2;
+CREATE TABLE t1 (a INT);
+INSERT INTO t1 VALUES (1), (2), (3);
+CREATE TABLE t2 SELECT * FROM (SELECT NULL) a UNION SELECT a FROM t1;
+DESC t2;
+Field Type Null Key Default Extra
+NULL int(11) YES NULL
+CREATE TABLE t3 SELECT a FROM t1 UNION SELECT * FROM (SELECT NULL) a;
+DESC t3;
+Field Type Null Key Default Extra
+a int(11) YES NULL
+CREATE TABLE t4 SELECT NULL;
+DESC t4;
+Field Type Null Key Default Extra
+NULL binary(0) YES NULL
+CREATE TABLE t5 SELECT NULL UNION SELECT NULL;
+DESC t5;
+Field Type Null Key Default Extra
+NULL binary(0) YES NULL
+CREATE TABLE t6
+SELECT * FROM (SELECT * FROM (SELECT NULL)a) b UNION SELECT a FROM t1;
+DESC t6;
+Field Type Null Key Default Extra
+NULL int(11) YES NULL
+DROP TABLE t1, t2, t3, t4, t5, t6;
End of 5.0 tests
diff --git a/mysql-test/r/user_var-binlog.result b/mysql-test/r/user_var-binlog.result
index b76b399c9e2..44fcfc0c478 100644
--- a/mysql-test/r/user_var-binlog.result
+++ b/mysql-test/r/user_var-binlog.result
@@ -25,11 +25,13 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
SET @@session.sql_mode=0/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
-INSERT INTO t1 VALUES(@`a b`)/*!*/;
+INSERT INTO t1 VALUES(@`a b`)
+/*!*/;
SET @`var1`:=_latin1 0x273B616161 COLLATE `latin1_swedish_ci`/*!*/;
SET @`var2`:=_binary 0x61 COLLATE `binary`/*!*/;
SET TIMESTAMP=10000/*!*/;
-insert into t1 values (@var1),(@var2)/*!*/;
+insert into t1 values (@var1),(@var2)
+/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
diff --git a/mysql-test/r/user_var.result b/mysql-test/r/user_var.result
index 6fd7b39f226..2cd132ce03c 100644
--- a/mysql-test/r/user_var.result
+++ b/mysql-test/r/user_var.result
@@ -353,3 +353,21 @@ select @a:=f4, count(f4) from t1 group by 1 desc;
2.6 1
1.6 4
drop table t1;
+create table t1 (f1 int);
+insert into t1 values (2), (1);
+select @i := f1 as j from t1 order by 1;
+j
+1
+2
+drop table t1;
+create table t1(a int);
+insert into t1 values(5),(4),(4),(3),(2),(2),(2),(1);
+set @rownum := 0;
+set @rank := 0;
+set @prev_score := NULL;
+select @rownum := @rownum + 1 as row,
+@rank := IF(@prev_score!=a, @rownum, @rank) as rank,
+@prev_score := a as score
+from t1 order by score desc;
+drop table t1;
+End of 5.1 tests
diff --git a/mysql-test/r/variables+c.result b/mysql-test/r/variables+c.result
new file mode 100644
index 00000000000..7a2976d1267
--- /dev/null
+++ b/mysql-test/r/variables+c.result
@@ -0,0 +1,7 @@
+show global status like "Uptime_%";
+Variable_name Value
+Uptime_since_flush_status #
+flush status;
+show global status like "Uptime_%";
+Variable_name Value
+Uptime_since_flush_status #
diff --git a/mysql-test/r/variables.result b/mysql-test/r/variables.result
index 638d71c6940..e5c3c860c93 100644
--- a/mysql-test/r/variables.result
+++ b/mysql-test/r/variables.result
@@ -220,10 +220,10 @@ select * from information_schema.global_variables where variable_name like 'myis
VARIABLE_NAME VARIABLE_VALUE
MYISAM_MAX_SORT_FILE_SIZE 1048576
set GLOBAL myisam_max_sort_file_size=default;
-show variables like 'myisam_max_sort_file_size';
+show global variables like 'myisam_max_sort_file_size';
Variable_name Value
myisam_max_sort_file_size FILE_SIZE
-select * from information_schema.session_variables where variable_name like 'myisam_max_sort_file_size';
+select * from information_schema.global_variables where variable_name like 'myisam_max_sort_file_size';
VARIABLE_NAME VARIABLE_VALUE
MYISAM_MAX_SORT_FILE_SIZE FILE_SIZE
set global net_retry_count=10, session net_retry_count=10;
@@ -279,6 +279,8 @@ NET_READ_TIMEOUT 600
NET_RETRY_COUNT 10
NET_WRITE_TIMEOUT 500
set net_buffer_length=1;
+Warnings:
+Warning 1292 Truncated incorrect net_buffer_length value: '1'
show variables like 'net_buffer_length';
Variable_name Value
net_buffer_length 1024
@@ -312,14 +314,14 @@ show variables like '%alloc%';
Variable_name Value
query_alloc_block_size 8192
query_prealloc_size 8192
-range_alloc_block_size 2048
+range_alloc_block_size 4096
transaction_alloc_block_size 8192
transaction_prealloc_size 4096
select * from information_schema.session_variables where variable_name like '%alloc%' order by 1;
VARIABLE_NAME VARIABLE_VALUE
QUERY_ALLOC_BLOCK_SIZE 8192
QUERY_PREALLOC_SIZE 8192
-RANGE_ALLOC_BLOCK_SIZE 2048
+RANGE_ALLOC_BLOCK_SIZE 4096
TRANSACTION_ALLOC_BLOCK_SIZE 8192
TRANSACTION_PREALLOC_SIZE 4096
set @@range_alloc_block_size=1024*16;
@@ -351,14 +353,14 @@ show variables like '%alloc%';
Variable_name Value
query_alloc_block_size 8192
query_prealloc_size 8192
-range_alloc_block_size 2048
+range_alloc_block_size 4096
transaction_alloc_block_size 8192
transaction_prealloc_size 4096
select * from information_schema.session_variables where variable_name like '%alloc%' order by 1;
VARIABLE_NAME VARIABLE_VALUE
QUERY_ALLOC_BLOCK_SIZE 8192
QUERY_PREALLOC_SIZE 8192
-RANGE_ALLOC_BLOCK_SIZE 2048
+RANGE_ALLOC_BLOCK_SIZE 4096
TRANSACTION_ALLOC_BLOCK_SIZE 8192
TRANSACTION_PREALLOC_SIZE 4096
SELECT @@version LIKE 'non-existent';
@@ -416,6 +418,8 @@ select @@autocommit, @@big_tables;
@@autocommit @@big_tables
1 1
set global binlog_cache_size=100;
+Warnings:
+Warning 1292 Truncated incorrect binlog_cache_size value: '100'
set bulk_insert_buffer_size=100;
set character set cp1251_koi8;
set character set default;
@@ -444,6 +448,8 @@ set global flush_time=100;
set insert_id=1;
set interactive_timeout=100;
set join_buffer_size=100;
+Warnings:
+Warning 1292 Truncated incorrect join_buffer_size value: '100'
set last_insert_id=1;
set global local_infile=1;
set long_query_time=0.000001;
@@ -456,12 +462,20 @@ select @@long_query_time;
100.000001
set low_priority_updates=1;
set max_allowed_packet=100;
+Warnings:
+Warning 1292 Truncated incorrect max_allowed_packet value: '100'
set global max_binlog_cache_size=100;
+Warnings:
+Warning 1292 Truncated incorrect max_binlog_cache_size value: '100'
set global max_binlog_size=100;
+Warnings:
+Warning 1292 Truncated incorrect max_binlog_size value: '100'
set global max_connect_errors=100;
set global max_connections=100;
set global max_delayed_threads=100;
set max_heap_table_size=100;
+Warnings:
+Warning 1292 Truncated incorrect max_heap_table_size value: '100'
set max_join_size=100;
set max_sort_length=100;
set max_tmp_tables=100;
@@ -472,17 +486,25 @@ select @@max_user_connections;
set global max_write_lock_count=100;
set myisam_sort_buffer_size=100;
set net_buffer_length=100;
+Warnings:
+Warning 1292 Truncated incorrect net_buffer_length value: '100'
set net_read_timeout=100;
set net_write_timeout=100;
set global query_cache_limit=100;
set global query_cache_size=100;
set global query_cache_type=demand;
set read_buffer_size=100;
+Warnings:
+Warning 1292 Truncated incorrect read_buffer_size value: '100'
set read_rnd_buffer_size=100;
+Warnings:
+Warning 1292 Truncated incorrect read_rnd_buffer_size value: '100'
set global rpl_recovery_rank=100;
set global server_id=100;
set global slow_launch_time=100;
set sort_buffer_size=100;
+Warnings:
+Warning 1292 Truncated incorrect sort_buffer_size value: '100'
set @@max_sp_recursion_depth=10;
select @@max_sp_recursion_depth;
@@max_sp_recursion_depth
@@ -522,6 +544,8 @@ set storage_engine=myisam;
set global thread_cache_size=100;
set timestamp=1, timestamp=default;
set tmp_table_size=100;
+Warnings:
+Warning 1292 Truncated incorrect tmp_table_size value: '100'
set tx_isolation="READ-COMMITTED";
set wait_timeout=100;
set log_warnings=1;
@@ -691,6 +715,8 @@ SELECT * FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME LIKE 'MYI
VARIABLE_NAME VARIABLE_VALUE
MYISAM_DATA_POINTER_SIZE 7
SET GLOBAL table_open_cache=-1;
+Warnings:
+Warning 1292 Truncated incorrect table_open_cache value: '0'
SHOW VARIABLES LIKE 'table_open_cache';
Variable_name Value
table_open_cache 1
@@ -799,6 +825,9 @@ set @@query_prealloc_size = @test;
select @@query_prealloc_size = @test;
@@query_prealloc_size = @test
1
+set global sql_mode=repeat('a',80);
+ERROR 42000: Variable 'sql_mode' can't be set to the value of 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
+End of 4.1 tests
create table t1 (a int);
select a into @x from t1;
Warnings:
diff --git a/mysql-test/r/view.result b/mysql-test/r/view.result
index 8a926d44f5f..09b997797b4 100644
--- a/mysql-test/r/view.result
+++ b/mysql-test/r/view.result
@@ -625,7 +625,7 @@ drop table t1;
create table t1 (a int, b int);
create view v1 as select a, sum(b) from t1 group by a;
select b from v1 use index (some_index) where b=1;
-ERROR 42000: Key 'some_index' doesn't exist in table 'v1'
+ERROR HY000: Incorrect usage of index hints and VIEW
drop view v1;
drop table t1;
create table t1 (col1 char(5),col2 char(5));
@@ -2701,27 +2701,26 @@ CREATE TABLE t1(
fName varchar(25) NOT NULL,
lName varchar(25) NOT NULL,
DOB date NOT NULL,
+test_date date NOT NULL,
uID int unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY);
-INSERT INTO t1(fName, lName, DOB) VALUES
-('Hank', 'Hill', '1964-09-29'),
-('Tom', 'Adams', '1908-02-14'),
-('Homer', 'Simpson', '1968-03-05');
+INSERT INTO t1(fName, lName, DOB, test_date) VALUES
+('Hank', 'Hill', '1964-09-29', '2007-01-01'),
+('Tom', 'Adams', '1908-02-14', '2007-01-01'),
+('Homer', 'Simpson', '1968-03-05', '2007-01-01');
CREATE VIEW v1 AS
-SELECT (year(now())-year(DOB)) AS Age
+SELECT (year(test_date)-year(DOB)) AS Age
FROM t1 HAVING Age < 75;
SHOW CREATE VIEW v1;
View Create View character_set_client collation_connection
-v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select (year(now()) - year(`t1`.`DOB`)) AS `Age` from `t1` having (`Age` < 75) latin1 latin1_swedish_ci
-set timestamp=1136066400;
-SELECT (year(now())-year(DOB)) AS Age FROM t1 HAVING Age < 75;
+v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select (year(`t1`.`test_date`) - year(`t1`.`DOB`)) AS `Age` from `t1` having (`Age` < 75) latin1 latin1_swedish_ci
+SELECT (year(test_date)-year(DOB)) AS Age FROM t1 HAVING Age < 75;
Age
-42
-38
-set timestamp=1136066400;
+43
+39
SELECT * FROM v1;
Age
-42
-38
+43
+39
DROP VIEW v1;
DROP TABLE t1;
CREATE TABLE t1 (id int NOT NULL PRIMARY KEY, a char(6) DEFAULT 'xxx');
@@ -3559,6 +3558,61 @@ table_name is_updatable
v1 NO
drop view v1;
drop table t1;
+CREATE TABLE t1 (a INT);
+INSERT INTO t1 VALUES (1),(2);
+CREATE VIEW v1 AS SELECT * FROM t1;
+SELECT * FROM v1 USE KEY(non_existant);
+ERROR HY000: Incorrect usage of index hints and VIEW
+SELECT * FROM v1 FORCE KEY(non_existant);
+ERROR HY000: Incorrect usage of index hints and VIEW
+SELECT * FROM v1 IGNORE KEY(non_existant);
+ERROR HY000: Incorrect usage of index hints and VIEW
+DROP VIEW v1;
+DROP TABLE t1;
+CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT, b INT NOT NULL DEFAULT 0,
+PRIMARY KEY(a), KEY (b));
+INSERT INTO t1 VALUES (),(),(),(),(),(),(),(),(),(),(),(),(),(),();
+CREATE VIEW v1 AS SELECT * FROM t1 FORCE KEY (PRIMARY,b) ORDER BY a;
+SHOW CREATE VIEW v1;
+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` FORCE INDEX (PRIMARY) FORCE INDEX (`b`) order by `t1`.`a` latin1 latin1_swedish_ci
+EXPLAIN SELECT * FROM v1;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 index NULL PRIMARY 4 NULL 15
+CREATE VIEW v2 AS SELECT * FROM t1 USE KEY () ORDER BY a;
+SHOW CREATE VIEW v2;
+View Create View character_set_client collation_connection
+v2 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v2` AS select `t1`.`a` AS `a`,`t1`.`b` AS `b` from `t1` USE INDEX () order by `t1`.`a` latin1 latin1_swedish_ci
+EXPLAIN SELECT * FROM v2;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 15 Using filesort
+CREATE VIEW v3 AS SELECT * FROM t1 IGNORE KEY (b) ORDER BY a;
+SHOW CREATE VIEW v3;
+View Create View character_set_client collation_connection
+v3 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v3` AS select `t1`.`a` AS `a`,`t1`.`b` AS `b` from `t1` IGNORE INDEX (`b`) order by `t1`.`a` latin1 latin1_swedish_ci
+EXPLAIN SELECT * FROM v3;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 15 Using filesort
+DROP VIEW v1;
+DROP VIEW v2;
+DROP VIEW v3;
+DROP TABLE t1;
+#
+# Bug#29477: Not all fields of the target table were checked to have
+# a default value when inserting into a view.
+#
+create table t1(f1 int, f2 int not null);
+create view v1 as select f1 from t1;
+insert into v1 values(1);
+Warnings:
+Warning 1423 Field of view 'test.v1' underlying table doesn't have a default value
+set @old_mode=@@sql_mode;
+set @@sql_mode=traditional;
+insert into v1 values(1);
+ERROR HY000: Field of view 'test.v1' underlying table doesn't have a default value
+set @@sql_mode=@old_mode;
+drop view v1;
+drop table t1;
End of 5.0 tests.
DROP DATABASE IF EXISTS `d-1`;
CREATE DATABASE `d-1`;
@@ -3579,4 +3633,47 @@ DROP TABLE `t-2`;
DROP VIEW `v-2`;
DROP DATABASE `d-1`;
USE test;
+
+#
+# Bug#26676: VIEW using old table schema in a session.
+#
+
+DROP VIEW IF EXISTS v1;
+DROP TABLE IF EXISTS t1;
+CREATE TABLE t1(c1 INT, c2 INT);
+INSERT INTO t1 VALUES (1, 2), (3, 4);
+
+SELECT * FROM t1;
+c1 c2
+1 2
+3 4
+
+CREATE VIEW v1 AS SELECT * FROM t1;
+
+SELECT * FROM v1;
+c1 c2
+1 2
+3 4
+
+ALTER TABLE t1 ADD COLUMN c3 INT AFTER c2;
+
+SELECT * FROM t1;
+c1 c2 c3
+1 2 NULL
+3 4 NULL
+
+SELECT * FROM v1;
+c1 c2
+1 2
+3 4
+
+SHOW CREATE VIEW v1;
+View Create View character_set_client collation_connection
+v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`c1` AS `c1`,`t1`.`c2` AS `c2` from `t1` latin1 latin1_swedish_ci
+
+DROP VIEW v1;
+DROP TABLE t1;
+
+# End of test case for Bug#26676.
+
End of 5.1 tests.
diff --git a/mysql-test/r/view_grant.result b/mysql-test/r/view_grant.result
index 49c98d8e03f..c301953f508 100644
--- a/mysql-test/r/view_grant.result
+++ b/mysql-test/r/view_grant.result
@@ -778,15 +778,60 @@ GRANT CREATE VIEW ON db26813.v2 TO u26813@localhost;
GRANT DROP, CREATE VIEW ON db26813.v3 TO u26813@localhost;
GRANT SELECT ON db26813.t1 TO u26813@localhost;
ALTER VIEW v1 AS SELECT f2 FROM t1;
-ERROR 42000: CREATE VIEW command denied to user 'u26813'@'localhost' for table 'v1'
+ERROR 42000: Access denied; you need the SUPER privilege for this operation
ALTER VIEW v2 AS SELECT f2 FROM t1;
-ERROR 42000: DROP command denied to user 'u26813'@'localhost' for table 'v2'
+ERROR 42000: Access denied; you need the SUPER privilege for this operation
ALTER VIEW v3 AS SELECT f2 FROM t1;
+ERROR 42000: Access denied; you need the SUPER privilege for this operation
SHOW CREATE VIEW v3;
View Create View character_set_client collation_connection
-v3 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v3` AS select `t1`.`f2` AS `f2` from `t1` latin1 latin1_swedish_ci
+v3 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v3` AS select `t1`.`f1` AS `f1` from `t1` latin1 latin1_swedish_ci
DROP USER u26813@localhost;
DROP DATABASE db26813;
+#
+# Bug#29908: A user can gain additional access through the ALTER VIEW.
+#
+CREATE DATABASE mysqltest_29908;
+USE mysqltest_29908;
+CREATE TABLE t1(f1 INT, f2 INT);
+CREATE USER u29908_1@localhost;
+CREATE DEFINER = u29908_1@localhost VIEW v1 AS SELECT f1 FROM t1;
+CREATE DEFINER = u29908_1@localhost SQL SECURITY INVOKER VIEW v2 AS
+SELECT f1 FROM t1;
+GRANT DROP, CREATE VIEW, SHOW VIEW ON mysqltest_29908.v1 TO u29908_1@localhost;
+GRANT DROP, CREATE VIEW, SHOW VIEW ON mysqltest_29908.v2 TO u29908_1@localhost;
+GRANT SELECT ON mysqltest_29908.t1 TO u29908_1@localhost;
+CREATE USER u29908_2@localhost;
+GRANT DROP, CREATE VIEW ON mysqltest_29908.v1 TO u29908_2@localhost;
+GRANT DROP, CREATE VIEW, SHOW VIEW ON mysqltest_29908.v2 TO u29908_2@localhost;
+GRANT SELECT ON mysqltest_29908.t1 TO u29908_2@localhost;
+ALTER VIEW v1 AS SELECT f2 FROM t1;
+ERROR 42000: Access denied; you need the SUPER privilege for this operation
+ALTER VIEW v2 AS SELECT f2 FROM t1;
+ERROR 42000: Access denied; you need the SUPER privilege for this operation
+SHOW CREATE VIEW v2;
+View Create View character_set_client collation_connection
+v2 CREATE ALGORITHM=UNDEFINED DEFINER=`u29908_1`@`localhost` SQL SECURITY INVOKER VIEW `v2` AS select `t1`.`f1` AS `f1` from `t1` latin1 latin1_swedish_ci
+ALTER VIEW v1 AS SELECT f2 FROM t1;
+SHOW CREATE VIEW v1;
+View Create View character_set_client collation_connection
+v1 CREATE ALGORITHM=UNDEFINED DEFINER=`u29908_1`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`f2` AS `f2` from `t1` latin1 latin1_swedish_ci
+ALTER VIEW v2 AS SELECT f2 FROM t1;
+SHOW CREATE VIEW v2;
+View Create View character_set_client collation_connection
+v2 CREATE ALGORITHM=UNDEFINED DEFINER=`u29908_1`@`localhost` SQL SECURITY INVOKER VIEW `v2` AS select `t1`.`f2` AS `f2` from `t1` latin1 latin1_swedish_ci
+ALTER VIEW v1 AS SELECT f1 FROM t1;
+SHOW CREATE VIEW v1;
+View Create View character_set_client collation_connection
+v1 CREATE ALGORITHM=UNDEFINED DEFINER=`u29908_1`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`f1` AS `f1` from `t1` latin1 latin1_swedish_ci
+ALTER VIEW v2 AS SELECT f1 FROM t1;
+SHOW CREATE VIEW v2;
+View Create View character_set_client collation_connection
+v2 CREATE ALGORITHM=UNDEFINED DEFINER=`u29908_1`@`localhost` SQL SECURITY INVOKER VIEW `v2` AS select `t1`.`f1` AS `f1` from `t1` latin1 latin1_swedish_ci
+DROP USER u29908_1@localhost;
+DROP USER u29908_2@localhost;
+DROP DATABASE mysqltest_29908;
+#######################################################################
DROP DATABASE IF EXISTS mysqltest1;
DROP DATABASE IF EXISTS mysqltest2;
CREATE DATABASE mysqltest1;
@@ -893,6 +938,8 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`no_such`@`user_1` SQL SECURITY DEFINER VI
Warnings:
Warning 1356 View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
ALTER ALGORITHM=MERGE VIEW v1 AS SELECT * FROM t1;
+Warnings:
+Note 1449 There is no 'no_such'@'user_1' registered
SHOW CREATE VIEW v1;
View Create View character_set_client collation_connection
v1 CREATE ALGORITHM=MERGE DEFINER=`no_such`@`user_1` SQL SECURITY DEFINER VIEW `v1` AS select `test`.`t1`.`i` AS `i` from `t1` latin1 latin1_swedish_ci
diff --git a/mysql-test/r/warnings.result b/mysql-test/r/warnings.result
index 2929328a9b1..249cd583345 100644
--- a/mysql-test/r/warnings.result
+++ b/mysql-test/r/warnings.result
@@ -98,8 +98,7 @@ Warning 1265 Data truncated for column 'c' at row 1
Warning 1265 Data truncated for column 'c' at row 2
alter table t1 add d char(2);
update t1 set a=NULL where a=10;
-Warnings:
-Warning 1048 Column 'a' cannot be null
+ERROR 23000: Column 'a' cannot be null
update t1 set c='mysql ab' where c='test';
Warnings:
Warning 1265 Data truncated for column 'c' at row 4
diff --git a/mysql-test/r/windows.result b/mysql-test/r/windows.result
index c97d3dd8867..e58a891838a 100644
--- a/mysql-test/r/windows.result
+++ b/mysql-test/r/windows.result
@@ -19,6 +19,7 @@ id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL No tables used
End of 5.0 tests.
+drop procedure if exists proc_1;
create procedure proc_1() install plugin my_plug soname '\\root\\some_plugin.dll';
call proc_1();
ERROR HY000: No paths allowed for shared library
diff --git a/mysql-test/r/xml.result b/mysql-test/r/xml.result
index 552f4896698..56c884343e3 100644
--- a/mysql-test/r/xml.result
+++ b/mysql-test/r/xml.result
@@ -647,32 +647,32 @@ select extractValue('<a>a','/a');
extractValue('<a>a','/a')
NULL
Warnings:
-Warning 1524 Incorrect XML value: 'parse error at line 1 pos 5: unexpected END-OF-INPUT'
+Warning 1525 Incorrect XML value: 'parse error at line 1 pos 5: unexpected END-OF-INPUT'
select extractValue('<a>a<','/a');
extractValue('<a>a<','/a')
NULL
Warnings:
-Warning 1524 Incorrect XML value: 'parse error at line 1 pos 6: END-OF-INPUT unexpected (ident or '/' wanted)'
+Warning 1525 Incorrect XML value: 'parse error at line 1 pos 6: END-OF-INPUT unexpected (ident or '/' wanted)'
select extractValue('<a>a</','/a');
extractValue('<a>a</','/a')
NULL
Warnings:
-Warning 1524 Incorrect XML value: 'parse error at line 1 pos 7: END-OF-INPUT unexpected (ident wanted)'
+Warning 1525 Incorrect XML value: 'parse error at line 1 pos 7: END-OF-INPUT unexpected (ident wanted)'
select extractValue('<a>a</a','/a');
extractValue('<a>a</a','/a')
NULL
Warnings:
-Warning 1524 Incorrect XML value: 'parse error at line 1 pos 8: END-OF-INPUT unexpected ('>' wanted)'
+Warning 1525 Incorrect XML value: 'parse error at line 1 pos 8: END-OF-INPUT unexpected ('>' wanted)'
select extractValue('<a>a</a></b>','/a');
extractValue('<a>a</a></b>','/a')
NULL
Warnings:
-Warning 1524 Incorrect XML value: 'parse error at line 1 pos 12: '</b>' unexpected (END-OF-INPUT wanted)'
+Warning 1525 Incorrect XML value: 'parse error at line 1 pos 12: '</b>' unexpected (END-OF-INPUT wanted)'
select extractValue('<a b=>a</a>','/a');
extractValue('<a b=>a</a>','/a')
NULL
Warnings:
-Warning 1524 Incorrect XML value: 'parse error at line 1 pos 7: '>' unexpected (ident or string wanted)'
+Warning 1525 Incorrect XML value: 'parse error at line 1 pos 7: '>' unexpected (ident or string wanted)'
select extractValue('<e>1</e>','position()');
ERROR HY000: XPATH syntax error: ''
select extractValue('<e>1</e>','last()');
@@ -723,17 +723,17 @@ select extractValue('<zot><tim0><01>10:39:15</01><02>140</02></tim0></zot>','//*
extractValue('<zot><tim0><01>10:39:15</01><02>140</02></tim0></zot>','//*')
NULL
Warnings:
-Warning 1524 Incorrect XML value: 'parse error at line 1 pos 13: unknown token unexpected (ident or '/' wanted)'
+Warning 1525 Incorrect XML value: 'parse error at line 1 pos 13: unknown token unexpected (ident or '/' wanted)'
select extractValue('<.>test</.>','//*');
extractValue('<.>test</.>','//*')
NULL
Warnings:
-Warning 1524 Incorrect XML value: 'parse error at line 1 pos 2: unknown token unexpected (ident or '/' wanted)'
+Warning 1525 Incorrect XML value: 'parse error at line 1 pos 2: unknown token unexpected (ident or '/' wanted)'
select extractValue('<->test</->','//*');
extractValue('<->test</->','//*')
NULL
Warnings:
-Warning 1524 Incorrect XML value: 'parse error at line 1 pos 2: unknown token unexpected (ident or '/' wanted)'
+Warning 1525 Incorrect XML value: 'parse error at line 1 pos 2: unknown token unexpected (ident or '/' wanted)'
select extractValue('<:>test</:>','//*');
extractValue('<:>test</:>','//*')
test
@@ -1022,4 +1022,11 @@ NULL NULL NULL
select updatexml(NULL, NULL, NULL);
updatexml(NULL, NULL, NULL)
NULL
+CREATE TABLE t1(a INT NOT NULL);
+INSERT INTO t1 VALUES (0), (0);
+SELECT 1 FROM t1 ORDER BY(UPDATEXML(a, '1', '1'));
+1
+1
+1
+DROP TABLE t1;
End of 5.1 tests
diff --git a/mysql-test/std_data/bug30435_10k_items.txt b/mysql-test/std_data/bug30435_10k_items.txt
new file mode 100644
index 00000000000..9812045fd89
--- /dev/null
+++ b/mysql-test/std_data/bug30435_10k_items.txt
@@ -0,0 +1,10000 @@
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+662
+663
+664
+665
+666
+667
+668
+669
+670
+671
+672
+673
+674
+675
+676
+677
+678
+679
+680
+681
+682
+683
+684
+685
+686
+687
+688
+689
+690
+691
+692
+693
+694
+695
+696
+697
+698
+699
+700
+701
+702
+703
+704
+705
+706
+707
+708
+709
+710
+711
+712
+713
+714
+715
+716
+717
+718
+719
+720
+721
+722
+723
+724
+725
+726
+727
+728
+729
+730
+731
+732
+733
+734
+735
+736
+737
+738
+739
+740
+741
+742
+743
+744
+745
+746
+747
+748
+749
+750
+751
+752
+753
+754
+755
+756
+757
+758
+759
+760
+761
+762
+763
+764
+765
+766
+767
+768
+769
+770
+771
+772
+773
+774
+775
+776
+777
+778
+779
+780
+781
+782
+783
+784
+785
+786
+787
+788
+789
+790
+791
+792
+793
+794
+795
+796
+797
+798
+799
+800
+801
+802
+803
+804
+805
+806
+807
+808
+809
+810
+811
+812
+813
+814
+815
+816
+817
+818
+819
+820
+821
+822
+823
+824
+825
+826
+827
+828
+829
+830
+831
+832
+833
+834
+835
+836
+837
+838
+839
+840
+841
+842
+843
+844
+845
+846
+847
+848
+849
+850
+851
+852
+853
+854
+855
+856
+857
+858
+859
+860
+861
+862
+863
+864
+865
+866
+867
+868
+869
+870
+871
+872
+873
+874
+875
+876
+877
+878
+879
+880
+881
+882
+883
+884
+885
+886
+887
+888
+889
+890
+891
+892
+893
+894
+895
+896
+897
+898
+899
+900
+901
+902
+903
+904
+905
+906
+907
+908
+909
+910
+911
+912
+913
+914
+915
+916
+917
+918
+919
+920
+921
+922
+923
+924
+925
+926
+927
+928
+929
+930
+931
+932
+933
+934
+935
+936
+937
+938
+939
+940
+941
+942
+943
+944
+945
+946
+947
+948
+949
+950
+951
+952
+953
+954
+955
+956
+957
+958
+959
+960
+961
+962
+963
+964
+965
+966
+967
+968
+969
+970
+971
+972
+973
+974
+975
+976
+977
+978
+979
+980
+981
+982
+983
+984
+985
+986
+987
+988
+989
+990
+991
+992
+993
+994
+995
+996
+997
+998
+999
+1000
+1001
+1002
+1003
+1004
+1005
+1006
+1007
+1008
+1009
+1010
+1011
+1012
+1013
+1014
+1015
+1016
+1017
+1018
+1019
+1020
+1021
+1022
+1023
+1024
+1025
+1026
+1027
+1028
+1029
+1030
+1031
+1032
+1033
+1034
+1035
+1036
+1037
+1038
+1039
+1040
+1041
+1042
+1043
+1044
+1045
+1046
+1047
+1048
+1049
+1050
+1051
+1052
+1053
+1054
+1055
+1056
+1057
+1058
+1059
+1060
+1061
+1062
+1063
+1064
+1065
+1066
+1067
+1068
+1069
+1070
+1071
+1072
+1073
+1074
+1075
+1076
+1077
+1078
+1079
+1080
+1081
+1082
+1083
+1084
+1085
+1086
+1087
+1088
+1089
+1090
+1091
+1092
+1093
+1094
+1095
+1096
+1097
+1098
+1099
+1100
+1101
+1102
+1103
+1104
+1105
+1106
+1107
+1108
+1109
+1110
+1111
+1112
+1113
+1114
+1115
+1116
+1117
+1118
+1119
+1120
+1121
+1122
+1123
+1124
+1125
+1126
+1127
+1128
+1129
+1130
+1131
+1132
+1133
+1134
+1135
+1136
+1137
+1138
+1139
+1140
+1141
+1142
+1143
+1144
+1145
+1146
+1147
+1148
+1149
+1150
+1151
+1152
+1153
+1154
+1155
+1156
+1157
+1158
+1159
+1160
+1161
+1162
+1163
+1164
+1165
+1166
+1167
+1168
+1169
+1170
+1171
+1172
+1173
+1174
+1175
+1176
+1177
+1178
+1179
+1180
+1181
+1182
+1183
+1184
+1185
+1186
+1187
+1188
+1189
+1190
+1191
+1192
+1193
+1194
+1195
+1196
+1197
+1198
+1199
+1200
+1201
+1202
+1203
+1204
+1205
+1206
+1207
+1208
+1209
+1210
+1211
+1212
+1213
+1214
+1215
+1216
+1217
+1218
+1219
+1220
+1221
+1222
+1223
+1224
+1225
+1226
+1227
+1228
+1229
+1230
+1231
+1232
+1233
+1234
+1235
+1236
+1237
+1238
+1239
+1240
+1241
+1242
+1243
+1244
+1245
+1246
+1247
+1248
+1249
+1250
+1251
+1252
+1253
+1254
+1255
+1256
+1257
+1258
+1259
+1260
+1261
+1262
+1263
+1264
+1265
+1266
+1267
+1268
+1269
+1270
+1271
+1272
+1273
+1274
+1275
+1276
+1277
+1278
+1279
+1280
+1281
+1282
+1283
+1284
+1285
+1286
+1287
+1288
+1289
+1290
+1291
+1292
+1293
+1294
+1295
+1296
+1297
+1298
+1299
+1300
+1301
+1302
+1303
+1304
+1305
+1306
+1307
+1308
+1309
+1310
+1311
+1312
+1313
+1314
+1315
+1316
+1317
+1318
+1319
+1320
+1321
+1322
+1323
+1324
+1325
+1326
+1327
+1328
+1329
+1330
+1331
+1332
+1333
+1334
+1335
+1336
+1337
+1338
+1339
+1340
+1341
+1342
+1343
+1344
+1345
+1346
+1347
+1348
+1349
+1350
+1351
+1352
+1353
+1354
+1355
+1356
+1357
+1358
+1359
+1360
+1361
+1362
+1363
+1364
+1365
+1366
+1367
+1368
+1369
+1370
+1371
+1372
+1373
+1374
+1375
+1376
+1377
+1378
+1379
+1380
+1381
+1382
+1383
+1384
+1385
+1386
+1387
+1388
+1389
+1390
+1391
+1392
+1393
+1394
+1395
+1396
+1397
+1398
+1399
+1400
+1401
+1402
+1403
+1404
+1405
+1406
+1407
+1408
+1409
+1410
+1411
+1412
+1413
+1414
+1415
+1416
+1417
+1418
+1419
+1420
+1421
+1422
+1423
+1424
+1425
+1426
+1427
+1428
+1429
+1430
+1431
+1432
+1433
+1434
+1435
+1436
+1437
+1438
+1439
+1440
+1441
+1442
+1443
+1444
+1445
+1446
+1447
+1448
+1449
+1450
+1451
+1452
+1453
+1454
+1455
+1456
+1457
+1458
+1459
+1460
+1461
+1462
+1463
+1464
+1465
+1466
+1467
+1468
+1469
+1470
+1471
+1472
+1473
+1474
+1475
+1476
+1477
+1478
+1479
+1480
+1481
+1482
+1483
+1484
+1485
+1486
+1487
+1488
+1489
+1490
+1491
+1492
+1493
+1494
+1495
+1496
+1497
+1498
+1499
+1500
+1501
+1502
+1503
+1504
+1505
+1506
+1507
+1508
+1509
+1510
+1511
+1512
+1513
+1514
+1515
+1516
+1517
+1518
+1519
+1520
+1521
+1522
+1523
+1524
+1525
+1526
+1527
+1528
+1529
+1530
+1531
+1532
+1533
+1534
+1535
+1536
+1537
+1538
+1539
+1540
+1541
+1542
+1543
+1544
+1545
+1546
+1547
+1548
+1549
+1550
+1551
+1552
+1553
+1554
+1555
+1556
+1557
+1558
+1559
+1560
+1561
+1562
+1563
+1564
+1565
+1566
+1567
+1568
+1569
+1570
+1571
+1572
+1573
+1574
+1575
+1576
+1577
+1578
+1579
+1580
+1581
+1582
+1583
+1584
+1585
+1586
+1587
+1588
+1589
+1590
+1591
+1592
+1593
+1594
+1595
+1596
+1597
+1598
+1599
+1600
+1601
+1602
+1603
+1604
+1605
+1606
+1607
+1608
+1609
+1610
+1611
+1612
+1613
+1614
+1615
+1616
+1617
+1618
+1619
+1620
+1621
+1622
+1623
+1624
+1625
+1626
+1627
+1628
+1629
+1630
+1631
+1632
+1633
+1634
+1635
+1636
+1637
+1638
+1639
+1640
+1641
+1642
+1643
+1644
+1645
+1646
+1647
+1648
+1649
+1650
+1651
+1652
+1653
+1654
+1655
+1656
+1657
+1658
+1659
+1660
+1661
+1662
+1663
+1664
+1665
+1666
+1667
+1668
+1669
+1670
+1671
+1672
+1673
+1674
+1675
+1676
+1677
+1678
+1679
+1680
+1681
+1682
+1683
+1684
+1685
+1686
+1687
+1688
+1689
+1690
+1691
+1692
+1693
+1694
+1695
+1696
+1697
+1698
+1699
+1700
+1701
+1702
+1703
+1704
+1705
+1706
+1707
+1708
+1709
+1710
+1711
+1712
+1713
+1714
+1715
+1716
+1717
+1718
+1719
+1720
+1721
+1722
+1723
+1724
+1725
+1726
+1727
+1728
+1729
+1730
+1731
+1732
+1733
+1734
+1735
+1736
+1737
+1738
+1739
+1740
+1741
+1742
+1743
+1744
+1745
+1746
+1747
+1748
+1749
+1750
+1751
+1752
+1753
+1754
+1755
+1756
+1757
+1758
+1759
+1760
+1761
+1762
+1763
+1764
+1765
+1766
+1767
+1768
+1769
+1770
+1771
+1772
+1773
+1774
+1775
+1776
+1777
+1778
+1779
+1780
+1781
+1782
+1783
+1784
+1785
+1786
+1787
+1788
+1789
+1790
+1791
+1792
+1793
+1794
+1795
+1796
+1797
+1798
+1799
+1800
+1801
+1802
+1803
+1804
+1805
+1806
+1807
+1808
+1809
+1810
+1811
+1812
+1813
+1814
+1815
+1816
+1817
+1818
+1819
+1820
+1821
+1822
+1823
+1824
+1825
+1826
+1827
+1828
+1829
+1830
+1831
+1832
+1833
+1834
+1835
+1836
+1837
+1838
+1839
+1840
+1841
+1842
+1843
+1844
+1845
+1846
+1847
+1848
+1849
+1850
+1851
+1852
+1853
+1854
+1855
+1856
+1857
+1858
+1859
+1860
+1861
+1862
+1863
+1864
+1865
+1866
+1867
+1868
+1869
+1870
+1871
+1872
+1873
+1874
+1875
+1876
+1877
+1878
+1879
+1880
+1881
+1882
+1883
+1884
+1885
+1886
+1887
+1888
+1889
+1890
+1891
+1892
+1893
+1894
+1895
+1896
+1897
+1898
+1899
+1900
+1901
+1902
+1903
+1904
+1905
+1906
+1907
+1908
+1909
+1910
+1911
+1912
+1913
+1914
+1915
+1916
+1917
+1918
+1919
+1920
+1921
+1922
+1923
+1924
+1925
+1926
+1927
+1928
+1929
+1930
+1931
+1932
+1933
+1934
+1935
+1936
+1937
+1938
+1939
+1940
+1941
+1942
+1943
+1944
+1945
+1946
+1947
+1948
+1949
+1950
+1951
+1952
+1953
+1954
+1955
+1956
+1957
+1958
+1959
+1960
+1961
+1962
+1963
+1964
+1965
+1966
+1967
+1968
+1969
+1970
+1971
+1972
+1973
+1974
+1975
+1976
+1977
+1978
+1979
+1980
+1981
+1982
+1983
+1984
+1985
+1986
+1987
+1988
+1989
+1990
+1991
+1992
+1993
+1994
+1995
+1996
+1997
+1998
+1999
+2000
+2001
+2002
+2003
+2004
+2005
+2006
+2007
+2008
+2009
+2010
+2011
+2012
+2013
+2014
+2015
+2016
+2017
+2018
+2019
+2020
+2021
+2022
+2023
+2024
+2025
+2026
+2027
+2028
+2029
+2030
+2031
+2032
+2033
+2034
+2035
+2036
+2037
+2038
+2039
+2040
+2041
+2042
+2043
+2044
+2045
+2046
+2047
+2048
+2049
+2050
+2051
+2052
+2053
+2054
+2055
+2056
+2057
+2058
+2059
+2060
+2061
+2062
+2063
+2064
+2065
+2066
+2067
+2068
+2069
+2070
+2071
+2072
+2073
+2074
+2075
+2076
+2077
+2078
+2079
+2080
+2081
+2082
+2083
+2084
+2085
+2086
+2087
+2088
+2089
+2090
+2091
+2092
+2093
+2094
+2095
+2096
+2097
+2098
+2099
+2100
+2101
+2102
+2103
+2104
+2105
+2106
+2107
+2108
+2109
+2110
+2111
+2112
+2113
+2114
+2115
+2116
+2117
+2118
+2119
+2120
+2121
+2122
+2123
+2124
+2125
+2126
+2127
+2128
+2129
+2130
+2131
+2132
+2133
+2134
+2135
+2136
+2137
+2138
+2139
+2140
+2141
+2142
+2143
+2144
+2145
+2146
+2147
+2148
+2149
+2150
+2151
+2152
+2153
+2154
+2155
+2156
+2157
+2158
+2159
+2160
+2161
+2162
+2163
+2164
+2165
+2166
+2167
+2168
+2169
+2170
+2171
+2172
+2173
+2174
+2175
+2176
+2177
+2178
+2179
+2180
+2181
+2182
+2183
+2184
+2185
+2186
+2187
+2188
+2189
+2190
+2191
+2192
+2193
+2194
+2195
+2196
+2197
+2198
+2199
+2200
+2201
+2202
+2203
+2204
+2205
+2206
+2207
+2208
+2209
+2210
+2211
+2212
+2213
+2214
+2215
+2216
+2217
+2218
+2219
+2220
+2221
+2222
+2223
+2224
+2225
+2226
+2227
+2228
+2229
+2230
+2231
+2232
+2233
+2234
+2235
+2236
+2237
+2238
+2239
+2240
+2241
+2242
+2243
+2244
+2245
+2246
+2247
+2248
+2249
+2250
+2251
+2252
+2253
+2254
+2255
+2256
+2257
+2258
+2259
+2260
+2261
+2262
+2263
+2264
+2265
+2266
+2267
+2268
+2269
+2270
+2271
+2272
+2273
+2274
+2275
+2276
+2277
+2278
+2279
+2280
+2281
+2282
+2283
+2284
+2285
+2286
+2287
+2288
+2289
+2290
+2291
+2292
+2293
+2294
+2295
+2296
+2297
+2298
+2299
+2300
+2301
+2302
+2303
+2304
+2305
+2306
+2307
+2308
+2309
+2310
+2311
+2312
+2313
+2314
+2315
+2316
+2317
+2318
+2319
+2320
+2321
+2322
+2323
+2324
+2325
+2326
+2327
+2328
+2329
+2330
+2331
+2332
+2333
+2334
+2335
+2336
+2337
+2338
+2339
+2340
+2341
+2342
+2343
+2344
+2345
+2346
+2347
+2348
+2349
+2350
+2351
+2352
+2353
+2354
+2355
+2356
+2357
+2358
+2359
+2360
+2361
+2362
+2363
+2364
+2365
+2366
+2367
+2368
+2369
+2370
+2371
+2372
+2373
+2374
+2375
+2376
+2377
+2378
+2379
+2380
+2381
+2382
+2383
+2384
+2385
+2386
+2387
+2388
+2389
+2390
+2391
+2392
+2393
+2394
+2395
+2396
+2397
+2398
+2399
+2400
+2401
+2402
+2403
+2404
+2405
+2406
+2407
+2408
+2409
+2410
+2411
+2412
+2413
+2414
+2415
+2416
+2417
+2418
+2419
+2420
+2421
+2422
+2423
+2424
+2425
+2426
+2427
+2428
+2429
+2430
+2431
+2432
+2433
+2434
+2435
+2436
+2437
+2438
+2439
+2440
+2441
+2442
+2443
+2444
+2445
+2446
+2447
+2448
+2449
+2450
+2451
+2452
+2453
+2454
+2455
+2456
+2457
+2458
+2459
+2460
+2461
+2462
+2463
+2464
+2465
+2466
+2467
+2468
+2469
+2470
+2471
+2472
+2473
+2474
+2475
+2476
+2477
+2478
+2479
+2480
+2481
+2482
+2483
+2484
+2485
+2486
+2487
+2488
+2489
+2490
+2491
+2492
+2493
+2494
+2495
+2496
+2497
+2498
+2499
+2500
+2501
+2502
+2503
+2504
+2505
+2506
+2507
+2508
+2509
+2510
+2511
+2512
+2513
+2514
+2515
+2516
+2517
+2518
+2519
+2520
+2521
+2522
+2523
+2524
+2525
+2526
+2527
+2528
+2529
+2530
+2531
+2532
+2533
+2534
+2535
+2536
+2537
+2538
+2539
+2540
+2541
+2542
+2543
+2544
+2545
+2546
+2547
+2548
+2549
+2550
+2551
+2552
+2553
+2554
+2555
+2556
+2557
+2558
+2559
+2560
+2561
+2562
+2563
+2564
+2565
+2566
+2567
+2568
+2569
+2570
+2571
+2572
+2573
+2574
+2575
+2576
+2577
+2578
+2579
+2580
+2581
+2582
+2583
+2584
+2585
+2586
+2587
+2588
+2589
+2590
+2591
+2592
+2593
+2594
+2595
+2596
+2597
+2598
+2599
+2600
+2601
+2602
+2603
+2604
+2605
+2606
+2607
+2608
+2609
+2610
+2611
+2612
+2613
+2614
+2615
+2616
+2617
+2618
+2619
+2620
+2621
+2622
+2623
+2624
+2625
+2626
+2627
+2628
+2629
+2630
+2631
+2632
+2633
+2634
+2635
+2636
+2637
+2638
+2639
+2640
+2641
+2642
+2643
+2644
+2645
+2646
+2647
+2648
+2649
+2650
+2651
+2652
+2653
+2654
+2655
+2656
+2657
+2658
+2659
+2660
+2661
+2662
+2663
+2664
+2665
+2666
+2667
+2668
+2669
+2670
+2671
+2672
+2673
+2674
+2675
+2676
+2677
+2678
+2679
+2680
+2681
+2682
+2683
+2684
+2685
+2686
+2687
+2688
+2689
+2690
+2691
+2692
+2693
+2694
+2695
+2696
+2697
+2698
+2699
+2700
+2701
+2702
+2703
+2704
+2705
+2706
+2707
+2708
+2709
+2710
+2711
+2712
+2713
+2714
+2715
+2716
+2717
+2718
+2719
+2720
+2721
+2722
+2723
+2724
+2725
+2726
+2727
+2728
+2729
+2730
+2731
+2732
+2733
+2734
+2735
+2736
+2737
+2738
+2739
+2740
+2741
+2742
+2743
+2744
+2745
+2746
+2747
+2748
+2749
+2750
+2751
+2752
+2753
+2754
+2755
+2756
+2757
+2758
+2759
+2760
+2761
+2762
+2763
+2764
+2765
+2766
+2767
+2768
+2769
+2770
+2771
+2772
+2773
+2774
+2775
+2776
+2777
+2778
+2779
+2780
+2781
+2782
+2783
+2784
+2785
+2786
+2787
+2788
+2789
+2790
+2791
+2792
+2793
+2794
+2795
+2796
+2797
+2798
+2799
+2800
+2801
+2802
+2803
+2804
+2805
+2806
+2807
+2808
+2809
+2810
+2811
+2812
+2813
+2814
+2815
+2816
+2817
+2818
+2819
+2820
+2821
+2822
+2823
+2824
+2825
+2826
+2827
+2828
+2829
+2830
+2831
+2832
+2833
+2834
+2835
+2836
+2837
+2838
+2839
+2840
+2841
+2842
+2843
+2844
+2845
+2846
+2847
+2848
+2849
+2850
+2851
+2852
+2853
+2854
+2855
+2856
+2857
+2858
+2859
+2860
+2861
+2862
+2863
+2864
+2865
+2866
+2867
+2868
+2869
+2870
+2871
+2872
+2873
+2874
+2875
+2876
+2877
+2878
+2879
+2880
+2881
+2882
+2883
+2884
+2885
+2886
+2887
+2888
+2889
+2890
+2891
+2892
+2893
+2894
+2895
+2896
+2897
+2898
+2899
+2900
+2901
+2902
+2903
+2904
+2905
+2906
+2907
+2908
+2909
+2910
+2911
+2912
+2913
+2914
+2915
+2916
+2917
+2918
+2919
+2920
+2921
+2922
+2923
+2924
+2925
+2926
+2927
+2928
+2929
+2930
+2931
+2932
+2933
+2934
+2935
+2936
+2937
+2938
+2939
+2940
+2941
+2942
+2943
+2944
+2945
+2946
+2947
+2948
+2949
+2950
+2951
+2952
+2953
+2954
+2955
+2956
+2957
+2958
+2959
+2960
+2961
+2962
+2963
+2964
+2965
+2966
+2967
+2968
+2969
+2970
+2971
+2972
+2973
+2974
+2975
+2976
+2977
+2978
+2979
+2980
+2981
+2982
+2983
+2984
+2985
+2986
+2987
+2988
+2989
+2990
+2991
+2992
+2993
+2994
+2995
+2996
+2997
+2998
+2999
+3000
+3001
+3002
+3003
+3004
+3005
+3006
+3007
+3008
+3009
+3010
+3011
+3012
+3013
+3014
+3015
+3016
+3017
+3018
+3019
+3020
+3021
+3022
+3023
+3024
+3025
+3026
+3027
+3028
+3029
+3030
+3031
+3032
+3033
+3034
+3035
+3036
+3037
+3038
+3039
+3040
+3041
+3042
+3043
+3044
+3045
+3046
+3047
+3048
+3049
+3050
+3051
+3052
+3053
+3054
+3055
+3056
+3057
+3058
+3059
+3060
+3061
+3062
+3063
+3064
+3065
+3066
+3067
+3068
+3069
+3070
+3071
+3072
+3073
+3074
+3075
+3076
+3077
+3078
+3079
+3080
+3081
+3082
+3083
+3084
+3085
+3086
+3087
+3088
+3089
+3090
+3091
+3092
+3093
+3094
+3095
+3096
+3097
+3098
+3099
+3100
+3101
+3102
+3103
+3104
+3105
+3106
+3107
+3108
+3109
+3110
+3111
+3112
+3113
+3114
+3115
+3116
+3117
+3118
+3119
+3120
+3121
+3122
+3123
+3124
+3125
+3126
+3127
+3128
+3129
+3130
+3131
+3132
+3133
+3134
+3135
+3136
+3137
+3138
+3139
+3140
+3141
+3142
+3143
+3144
+3145
+3146
+3147
+3148
+3149
+3150
+3151
+3152
+3153
+3154
+3155
+3156
+3157
+3158
+3159
+3160
+3161
+3162
+3163
+3164
+3165
+3166
+3167
+3168
+3169
+3170
+3171
+3172
+3173
+3174
+3175
+3176
+3177
+3178
+3179
+3180
+3181
+3182
+3183
+3184
+3185
+3186
+3187
+3188
+3189
+3190
+3191
+3192
+3193
+3194
+3195
+3196
+3197
+3198
+3199
+3200
+3201
+3202
+3203
+3204
+3205
+3206
+3207
+3208
+3209
+3210
+3211
+3212
+3213
+3214
+3215
+3216
+3217
+3218
+3219
+3220
+3221
+3222
+3223
+3224
+3225
+3226
+3227
+3228
+3229
+3230
+3231
+3232
+3233
+3234
+3235
+3236
+3237
+3238
+3239
+3240
+3241
+3242
+3243
+3244
+3245
+3246
+3247
+3248
+3249
+3250
+3251
+3252
+3253
+3254
+3255
+3256
+3257
+3258
+3259
+3260
+3261
+3262
+3263
+3264
+3265
+3266
+3267
+3268
+3269
+3270
+3271
+3272
+3273
+3274
+3275
+3276
+3277
+3278
+3279
+3280
+3281
+3282
+3283
+3284
+3285
+3286
+3287
+3288
+3289
+3290
+3291
+3292
+3293
+3294
+3295
+3296
+3297
+3298
+3299
+3300
+3301
+3302
+3303
+3304
+3305
+3306
+3307
+3308
+3309
+3310
+3311
+3312
+3313
+3314
+3315
+3316
+3317
+3318
+3319
+3320
+3321
+3322
+3323
+3324
+3325
+3326
+3327
+3328
+3329
+3330
+3331
+3332
+3333
+3334
+3335
+3336
+3337
+3338
+3339
+3340
+3341
+3342
+3343
+3344
+3345
+3346
+3347
+3348
+3349
+3350
+3351
+3352
+3353
+3354
+3355
+3356
+3357
+3358
+3359
+3360
+3361
+3362
+3363
+3364
+3365
+3366
+3367
+3368
+3369
+3370
+3371
+3372
+3373
+3374
+3375
+3376
+3377
+3378
+3379
+3380
+3381
+3382
+3383
+3384
+3385
+3386
+3387
+3388
+3389
+3390
+3391
+3392
+3393
+3394
+3395
+3396
+3397
+3398
+3399
+3400
+3401
+3402
+3403
+3404
+3405
+3406
+3407
+3408
+3409
+3410
+3411
+3412
+3413
+3414
+3415
+3416
+3417
+3418
+3419
+3420
+3421
+3422
+3423
+3424
+3425
+3426
+3427
+3428
+3429
+3430
+3431
+3432
+3433
+3434
+3435
+3436
+3437
+3438
+3439
+3440
+3441
+3442
+3443
+3444
+3445
+3446
+3447
+3448
+3449
+3450
+3451
+3452
+3453
+3454
+3455
+3456
+3457
+3458
+3459
+3460
+3461
+3462
+3463
+3464
+3465
+3466
+3467
+3468
+3469
+3470
+3471
+3472
+3473
+3474
+3475
+3476
+3477
+3478
+3479
+3480
+3481
+3482
+3483
+3484
+3485
+3486
+3487
+3488
+3489
+3490
+3491
+3492
+3493
+3494
+3495
+3496
+3497
+3498
+3499
+3500
+3501
+3502
+3503
+3504
+3505
+3506
+3507
+3508
+3509
+3510
+3511
+3512
+3513
+3514
+3515
+3516
+3517
+3518
+3519
+3520
+3521
+3522
+3523
+3524
+3525
+3526
+3527
+3528
+3529
+3530
+3531
+3532
+3533
+3534
+3535
+3536
+3537
+3538
+3539
+3540
+3541
+3542
+3543
+3544
+3545
+3546
+3547
+3548
+3549
+3550
+3551
+3552
+3553
+3554
+3555
+3556
+3557
+3558
+3559
+3560
+3561
+3562
+3563
+3564
+3565
+3566
+3567
+3568
+3569
+3570
+3571
+3572
+3573
+3574
+3575
+3576
+3577
+3578
+3579
+3580
+3581
+3582
+3583
+3584
+3585
+3586
+3587
+3588
+3589
+3590
+3591
+3592
+3593
+3594
+3595
+3596
+3597
+3598
+3599
+3600
+3601
+3602
+3603
+3604
+3605
+3606
+3607
+3608
+3609
+3610
+3611
+3612
+3613
+3614
+3615
+3616
+3617
+3618
+3619
+3620
+3621
+3622
+3623
+3624
+3625
+3626
+3627
+3628
+3629
+3630
+3631
+3632
+3633
+3634
+3635
+3636
+3637
+3638
+3639
+3640
+3641
+3642
+3643
+3644
+3645
+3646
+3647
+3648
+3649
+3650
+3651
+3652
+3653
+3654
+3655
+3656
+3657
+3658
+3659
+3660
+3661
+3662
+3663
+3664
+3665
+3666
+3667
+3668
+3669
+3670
+3671
+3672
+3673
+3674
+3675
+3676
+3677
+3678
+3679
+3680
+3681
+3682
+3683
+3684
+3685
+3686
+3687
+3688
+3689
+3690
+3691
+3692
+3693
+3694
+3695
+3696
+3697
+3698
+3699
+3700
+3701
+3702
+3703
+3704
+3705
+3706
+3707
+3708
+3709
+3710
+3711
+3712
+3713
+3714
+3715
+3716
+3717
+3718
+3719
+3720
+3721
+3722
+3723
+3724
+3725
+3726
+3727
+3728
+3729
+3730
+3731
+3732
+3733
+3734
+3735
+3736
+3737
+3738
+3739
+3740
+3741
+3742
+3743
+3744
+3745
+3746
+3747
+3748
+3749
+3750
+3751
+3752
+3753
+3754
+3755
+3756
+3757
+3758
+3759
+3760
+3761
+3762
+3763
+3764
+3765
+3766
+3767
+3768
+3769
+3770
+3771
+3772
+3773
+3774
+3775
+3776
+3777
+3778
+3779
+3780
+3781
+3782
+3783
+3784
+3785
+3786
+3787
+3788
+3789
+3790
+3791
+3792
+3793
+3794
+3795
+3796
+3797
+3798
+3799
+3800
+3801
+3802
+3803
+3804
+3805
+3806
+3807
+3808
+3809
+3810
+3811
+3812
+3813
+3814
+3815
+3816
+3817
+3818
+3819
+3820
+3821
+3822
+3823
+3824
+3825
+3826
+3827
+3828
+3829
+3830
+3831
+3832
+3833
+3834
+3835
+3836
+3837
+3838
+3839
+3840
+3841
+3842
+3843
+3844
+3845
+3846
+3847
+3848
+3849
+3850
+3851
+3852
+3853
+3854
+3855
+3856
+3857
+3858
+3859
+3860
+3861
+3862
+3863
+3864
+3865
+3866
+3867
+3868
+3869
+3870
+3871
+3872
+3873
+3874
+3875
+3876
+3877
+3878
+3879
+3880
+3881
+3882
+3883
+3884
+3885
+3886
+3887
+3888
+3889
+3890
+3891
+3892
+3893
+3894
+3895
+3896
+3897
+3898
+3899
+3900
+3901
+3902
+3903
+3904
+3905
+3906
+3907
+3908
+3909
+3910
+3911
+3912
+3913
+3914
+3915
+3916
+3917
+3918
+3919
+3920
+3921
+3922
+3923
+3924
+3925
+3926
+3927
+3928
+3929
+3930
+3931
+3932
+3933
+3934
+3935
+3936
+3937
+3938
+3939
+3940
+3941
+3942
+3943
+3944
+3945
+3946
+3947
+3948
+3949
+3950
+3951
+3952
+3953
+3954
+3955
+3956
+3957
+3958
+3959
+3960
+3961
+3962
+3963
+3964
+3965
+3966
+3967
+3968
+3969
+3970
+3971
+3972
+3973
+3974
+3975
+3976
+3977
+3978
+3979
+3980
+3981
+3982
+3983
+3984
+3985
+3986
+3987
+3988
+3989
+3990
+3991
+3992
+3993
+3994
+3995
+3996
+3997
+3998
+3999
+4000
+4001
+4002
+4003
+4004
+4005
+4006
+4007
+4008
+4009
+4010
+4011
+4012
+4013
+4014
+4015
+4016
+4017
+4018
+4019
+4020
+4021
+4022
+4023
+4024
+4025
+4026
+4027
+4028
+4029
+4030
+4031
+4032
+4033
+4034
+4035
+4036
+4037
+4038
+4039
+4040
+4041
+4042
+4043
+4044
+4045
+4046
+4047
+4048
+4049
+4050
+4051
+4052
+4053
+4054
+4055
+4056
+4057
+4058
+4059
+4060
+4061
+4062
+4063
+4064
+4065
+4066
+4067
+4068
+4069
+4070
+4071
+4072
+4073
+4074
+4075
+4076
+4077
+4078
+4079
+4080
+4081
+4082
+4083
+4084
+4085
+4086
+4087
+4088
+4089
+4090
+4091
+4092
+4093
+4094
+4095
+4096
+4097
+4098
+4099
+4100
+4101
+4102
+4103
+4104
+4105
+4106
+4107
+4108
+4109
+4110
+4111
+4112
+4113
+4114
+4115
+4116
+4117
+4118
+4119
+4120
+4121
+4122
+4123
+4124
+4125
+4126
+4127
+4128
+4129
+4130
+4131
+4132
+4133
+4134
+4135
+4136
+4137
+4138
+4139
+4140
+4141
+4142
+4143
+4144
+4145
+4146
+4147
+4148
+4149
+4150
+4151
+4152
+4153
+4154
+4155
+4156
+4157
+4158
+4159
+4160
+4161
+4162
+4163
+4164
+4165
+4166
+4167
+4168
+4169
+4170
+4171
+4172
+4173
+4174
+4175
+4176
+4177
+4178
+4179
+4180
+4181
+4182
+4183
+4184
+4185
+4186
+4187
+4188
+4189
+4190
+4191
+4192
+4193
+4194
+4195
+4196
+4197
+4198
+4199
+4200
+4201
+4202
+4203
+4204
+4205
+4206
+4207
+4208
+4209
+4210
+4211
+4212
+4213
+4214
+4215
+4216
+4217
+4218
+4219
+4220
+4221
+4222
+4223
+4224
+4225
+4226
+4227
+4228
+4229
+4230
+4231
+4232
+4233
+4234
+4235
+4236
+4237
+4238
+4239
+4240
+4241
+4242
+4243
+4244
+4245
+4246
+4247
+4248
+4249
+4250
+4251
+4252
+4253
+4254
+4255
+4256
+4257
+4258
+4259
+4260
+4261
+4262
+4263
+4264
+4265
+4266
+4267
+4268
+4269
+4270
+4271
+4272
+4273
+4274
+4275
+4276
+4277
+4278
+4279
+4280
+4281
+4282
+4283
+4284
+4285
+4286
+4287
+4288
+4289
+4290
+4291
+4292
+4293
+4294
+4295
+4296
+4297
+4298
+4299
+4300
+4301
+4302
+4303
+4304
+4305
+4306
+4307
+4308
+4309
+4310
+4311
+4312
+4313
+4314
+4315
+4316
+4317
+4318
+4319
+4320
+4321
+4322
+4323
+4324
+4325
+4326
+4327
+4328
+4329
+4330
+4331
+4332
+4333
+4334
+4335
+4336
+4337
+4338
+4339
+4340
+4341
+4342
+4343
+4344
+4345
+4346
+4347
+4348
+4349
+4350
+4351
+4352
+4353
+4354
+4355
+4356
+4357
+4358
+4359
+4360
+4361
+4362
+4363
+4364
+4365
+4366
+4367
+4368
+4369
+4370
+4371
+4372
+4373
+4374
+4375
+4376
+4377
+4378
+4379
+4380
+4381
+4382
+4383
+4384
+4385
+4386
+4387
+4388
+4389
+4390
+4391
+4392
+4393
+4394
+4395
+4396
+4397
+4398
+4399
+4400
+4401
+4402
+4403
+4404
+4405
+4406
+4407
+4408
+4409
+4410
+4411
+4412
+4413
+4414
+4415
+4416
+4417
+4418
+4419
+4420
+4421
+4422
+4423
+4424
+4425
+4426
+4427
+4428
+4429
+4430
+4431
+4432
+4433
+4434
+4435
+4436
+4437
+4438
+4439
+4440
+4441
+4442
+4443
+4444
+4445
+4446
+4447
+4448
+4449
+4450
+4451
+4452
+4453
+4454
+4455
+4456
+4457
+4458
+4459
+4460
+4461
+4462
+4463
+4464
+4465
+4466
+4467
+4468
+4469
+4470
+4471
+4472
+4473
+4474
+4475
+4476
+4477
+4478
+4479
+4480
+4481
+4482
+4483
+4484
+4485
+4486
+4487
+4488
+4489
+4490
+4491
+4492
+4493
+4494
+4495
+4496
+4497
+4498
+4499
+4500
+4501
+4502
+4503
+4504
+4505
+4506
+4507
+4508
+4509
+4510
+4511
+4512
+4513
+4514
+4515
+4516
+4517
+4518
+4519
+4520
+4521
+4522
+4523
+4524
+4525
+4526
+4527
+4528
+4529
+4530
+4531
+4532
+4533
+4534
+4535
+4536
+4537
+4538
+4539
+4540
+4541
+4542
+4543
+4544
+4545
+4546
+4547
+4548
+4549
+4550
+4551
+4552
+4553
+4554
+4555
+4556
+4557
+4558
+4559
+4560
+4561
+4562
+4563
+4564
+4565
+4566
+4567
+4568
+4569
+4570
+4571
+4572
+4573
+4574
+4575
+4576
+4577
+4578
+4579
+4580
+4581
+4582
+4583
+4584
+4585
+4586
+4587
+4588
+4589
+4590
+4591
+4592
+4593
+4594
+4595
+4596
+4597
+4598
+4599
+4600
+4601
+4602
+4603
+4604
+4605
+4606
+4607
+4608
+4609
+4610
+4611
+4612
+4613
+4614
+4615
+4616
+4617
+4618
+4619
+4620
+4621
+4622
+4623
+4624
+4625
+4626
+4627
+4628
+4629
+4630
+4631
+4632
+4633
+4634
+4635
+4636
+4637
+4638
+4639
+4640
+4641
+4642
+4643
+4644
+4645
+4646
+4647
+4648
+4649
+4650
+4651
+4652
+4653
+4654
+4655
+4656
+4657
+4658
+4659
+4660
+4661
+4662
+4663
+4664
+4665
+4666
+4667
+4668
+4669
+4670
+4671
+4672
+4673
+4674
+4675
+4676
+4677
+4678
+4679
+4680
+4681
+4682
+4683
+4684
+4685
+4686
+4687
+4688
+4689
+4690
+4691
+4692
+4693
+4694
+4695
+4696
+4697
+4698
+4699
+4700
+4701
+4702
+4703
+4704
+4705
+4706
+4707
+4708
+4709
+4710
+4711
+4712
+4713
+4714
+4715
+4716
+4717
+4718
+4719
+4720
+4721
+4722
+4723
+4724
+4725
+4726
+4727
+4728
+4729
+4730
+4731
+4732
+4733
+4734
+4735
+4736
+4737
+4738
+4739
+4740
+4741
+4742
+4743
+4744
+4745
+4746
+4747
+4748
+4749
+4750
+4751
+4752
+4753
+4754
+4755
+4756
+4757
+4758
+4759
+4760
+4761
+4762
+4763
+4764
+4765
+4766
+4767
+4768
+4769
+4770
+4771
+4772
+4773
+4774
+4775
+4776
+4777
+4778
+4779
+4780
+4781
+4782
+4783
+4784
+4785
+4786
+4787
+4788
+4789
+4790
+4791
+4792
+4793
+4794
+4795
+4796
+4797
+4798
+4799
+4800
+4801
+4802
+4803
+4804
+4805
+4806
+4807
+4808
+4809
+4810
+4811
+4812
+4813
+4814
+4815
+4816
+4817
+4818
+4819
+4820
+4821
+4822
+4823
+4824
+4825
+4826
+4827
+4828
+4829
+4830
+4831
+4832
+4833
+4834
+4835
+4836
+4837
+4838
+4839
+4840
+4841
+4842
+4843
+4844
+4845
+4846
+4847
+4848
+4849
+4850
+4851
+4852
+4853
+4854
+4855
+4856
+4857
+4858
+4859
+4860
+4861
+4862
+4863
+4864
+4865
+4866
+4867
+4868
+4869
+4870
+4871
+4872
+4873
+4874
+4875
+4876
+4877
+4878
+4879
+4880
+4881
+4882
+4883
+4884
+4885
+4886
+4887
+4888
+4889
+4890
+4891
+4892
+4893
+4894
+4895
+4896
+4897
+4898
+4899
+4900
+4901
+4902
+4903
+4904
+4905
+4906
+4907
+4908
+4909
+4910
+4911
+4912
+4913
+4914
+4915
+4916
+4917
+4918
+4919
+4920
+4921
+4922
+4923
+4924
+4925
+4926
+4927
+4928
+4929
+4930
+4931
+4932
+4933
+4934
+4935
+4936
+4937
+4938
+4939
+4940
+4941
+4942
+4943
+4944
+4945
+4946
+4947
+4948
+4949
+4950
+4951
+4952
+4953
+4954
+4955
+4956
+4957
+4958
+4959
+4960
+4961
+4962
+4963
+4964
+4965
+4966
+4967
+4968
+4969
+4970
+4971
+4972
+4973
+4974
+4975
+4976
+4977
+4978
+4979
+4980
+4981
+4982
+4983
+4984
+4985
+4986
+4987
+4988
+4989
+4990
+4991
+4992
+4993
+4994
+4995
+4996
+4997
+4998
+4999
+5000
+5001
+5002
+5003
+5004
+5005
+5006
+5007
+5008
+5009
+5010
+5011
+5012
+5013
+5014
+5015
+5016
+5017
+5018
+5019
+5020
+5021
+5022
+5023
+5024
+5025
+5026
+5027
+5028
+5029
+5030
+5031
+5032
+5033
+5034
+5035
+5036
+5037
+5038
+5039
+5040
+5041
+5042
+5043
+5044
+5045
+5046
+5047
+5048
+5049
+5050
+5051
+5052
+5053
+5054
+5055
+5056
+5057
+5058
+5059
+5060
+5061
+5062
+5063
+5064
+5065
+5066
+5067
+5068
+5069
+5070
+5071
+5072
+5073
+5074
+5075
+5076
+5077
+5078
+5079
+5080
+5081
+5082
+5083
+5084
+5085
+5086
+5087
+5088
+5089
+5090
+5091
+5092
+5093
+5094
+5095
+5096
+5097
+5098
+5099
+5100
+5101
+5102
+5103
+5104
+5105
+5106
+5107
+5108
+5109
+5110
+5111
+5112
+5113
+5114
+5115
+5116
+5117
+5118
+5119
+5120
+5121
+5122
+5123
+5124
+5125
+5126
+5127
+5128
+5129
+5130
+5131
+5132
+5133
+5134
+5135
+5136
+5137
+5138
+5139
+5140
+5141
+5142
+5143
+5144
+5145
+5146
+5147
+5148
+5149
+5150
+5151
+5152
+5153
+5154
+5155
+5156
+5157
+5158
+5159
+5160
+5161
+5162
+5163
+5164
+5165
+5166
+5167
+5168
+5169
+5170
+5171
+5172
+5173
+5174
+5175
+5176
+5177
+5178
+5179
+5180
+5181
+5182
+5183
+5184
+5185
+5186
+5187
+5188
+5189
+5190
+5191
+5192
+5193
+5194
+5195
+5196
+5197
+5198
+5199
+5200
+5201
+5202
+5203
+5204
+5205
+5206
+5207
+5208
+5209
+5210
+5211
+5212
+5213
+5214
+5215
+5216
+5217
+5218
+5219
+5220
+5221
+5222
+5223
+5224
+5225
+5226
+5227
+5228
+5229
+5230
+5231
+5232
+5233
+5234
+5235
+5236
+5237
+5238
+5239
+5240
+5241
+5242
+5243
+5244
+5245
+5246
+5247
+5248
+5249
+5250
+5251
+5252
+5253
+5254
+5255
+5256
+5257
+5258
+5259
+5260
+5261
+5262
+5263
+5264
+5265
+5266
+5267
+5268
+5269
+5270
+5271
+5272
+5273
+5274
+5275
+5276
+5277
+5278
+5279
+5280
+5281
+5282
+5283
+5284
+5285
+5286
+5287
+5288
+5289
+5290
+5291
+5292
+5293
+5294
+5295
+5296
+5297
+5298
+5299
+5300
+5301
+5302
+5303
+5304
+5305
+5306
+5307
+5308
+5309
+5310
+5311
+5312
+5313
+5314
+5315
+5316
+5317
+5318
+5319
+5320
+5321
+5322
+5323
+5324
+5325
+5326
+5327
+5328
+5329
+5330
+5331
+5332
+5333
+5334
+5335
+5336
+5337
+5338
+5339
+5340
+5341
+5342
+5343
+5344
+5345
+5346
+5347
+5348
+5349
+5350
+5351
+5352
+5353
+5354
+5355
+5356
+5357
+5358
+5359
+5360
+5361
+5362
+5363
+5364
+5365
+5366
+5367
+5368
+5369
+5370
+5371
+5372
+5373
+5374
+5375
+5376
+5377
+5378
+5379
+5380
+5381
+5382
+5383
+5384
+5385
+5386
+5387
+5388
+5389
+5390
+5391
+5392
+5393
+5394
+5395
+5396
+5397
+5398
+5399
+5400
+5401
+5402
+5403
+5404
+5405
+5406
+5407
+5408
+5409
+5410
+5411
+5412
+5413
+5414
+5415
+5416
+5417
+5418
+5419
+5420
+5421
+5422
+5423
+5424
+5425
+5426
+5427
+5428
+5429
+5430
+5431
+5432
+5433
+5434
+5435
+5436
+5437
+5438
+5439
+5440
+5441
+5442
+5443
+5444
+5445
+5446
+5447
+5448
+5449
+5450
+5451
+5452
+5453
+5454
+5455
+5456
+5457
+5458
+5459
+5460
+5461
+5462
+5463
+5464
+5465
+5466
+5467
+5468
+5469
+5470
+5471
+5472
+5473
+5474
+5475
+5476
+5477
+5478
+5479
+5480
+5481
+5482
+5483
+5484
+5485
+5486
+5487
+5488
+5489
+5490
+5491
+5492
+5493
+5494
+5495
+5496
+5497
+5498
+5499
+5500
+5501
+5502
+5503
+5504
+5505
+5506
+5507
+5508
+5509
+5510
+5511
+5512
+5513
+5514
+5515
+5516
+5517
+5518
+5519
+5520
+5521
+5522
+5523
+5524
+5525
+5526
+5527
+5528
+5529
+5530
+5531
+5532
+5533
+5534
+5535
+5536
+5537
+5538
+5539
+5540
+5541
+5542
+5543
+5544
+5545
+5546
+5547
+5548
+5549
+5550
+5551
+5552
+5553
+5554
+5555
+5556
+5557
+5558
+5559
+5560
+5561
+5562
+5563
+5564
+5565
+5566
+5567
+5568
+5569
+5570
+5571
+5572
+5573
+5574
+5575
+5576
+5577
+5578
+5579
+5580
+5581
+5582
+5583
+5584
+5585
+5586
+5587
+5588
+5589
+5590
+5591
+5592
+5593
+5594
+5595
+5596
+5597
+5598
+5599
+5600
+5601
+5602
+5603
+5604
+5605
+5606
+5607
+5608
+5609
+5610
+5611
+5612
+5613
+5614
+5615
+5616
+5617
+5618
+5619
+5620
+5621
+5622
+5623
+5624
+5625
+5626
+5627
+5628
+5629
+5630
+5631
+5632
+5633
+5634
+5635
+5636
+5637
+5638
+5639
+5640
+5641
+5642
+5643
+5644
+5645
+5646
+5647
+5648
+5649
+5650
+5651
+5652
+5653
+5654
+5655
+5656
+5657
+5658
+5659
+5660
+5661
+5662
+5663
+5664
+5665
+5666
+5667
+5668
+5669
+5670
+5671
+5672
+5673
+5674
+5675
+5676
+5677
+5678
+5679
+5680
+5681
+5682
+5683
+5684
+5685
+5686
+5687
+5688
+5689
+5690
+5691
+5692
+5693
+5694
+5695
+5696
+5697
+5698
+5699
+5700
+5701
+5702
+5703
+5704
+5705
+5706
+5707
+5708
+5709
+5710
+5711
+5712
+5713
+5714
+5715
+5716
+5717
+5718
+5719
+5720
+5721
+5722
+5723
+5724
+5725
+5726
+5727
+5728
+5729
+5730
+5731
+5732
+5733
+5734
+5735
+5736
+5737
+5738
+5739
+5740
+5741
+5742
+5743
+5744
+5745
+5746
+5747
+5748
+5749
+5750
+5751
+5752
+5753
+5754
+5755
+5756
+5757
+5758
+5759
+5760
+5761
+5762
+5763
+5764
+5765
+5766
+5767
+5768
+5769
+5770
+5771
+5772
+5773
+5774
+5775
+5776
+5777
+5778
+5779
+5780
+5781
+5782
+5783
+5784
+5785
+5786
+5787
+5788
+5789
+5790
+5791
+5792
+5793
+5794
+5795
+5796
+5797
+5798
+5799
+5800
+5801
+5802
+5803
+5804
+5805
+5806
+5807
+5808
+5809
+5810
+5811
+5812
+5813
+5814
+5815
+5816
+5817
+5818
+5819
+5820
+5821
+5822
+5823
+5824
+5825
+5826
+5827
+5828
+5829
+5830
+5831
+5832
+5833
+5834
+5835
+5836
+5837
+5838
+5839
+5840
+5841
+5842
+5843
+5844
+5845
+5846
+5847
+5848
+5849
+5850
+5851
+5852
+5853
+5854
+5855
+5856
+5857
+5858
+5859
+5860
+5861
+5862
+5863
+5864
+5865
+5866
+5867
+5868
+5869
+5870
+5871
+5872
+5873
+5874
+5875
+5876
+5877
+5878
+5879
+5880
+5881
+5882
+5883
+5884
+5885
+5886
+5887
+5888
+5889
+5890
+5891
+5892
+5893
+5894
+5895
+5896
+5897
+5898
+5899
+5900
+5901
+5902
+5903
+5904
+5905
+5906
+5907
+5908
+5909
+5910
+5911
+5912
+5913
+5914
+5915
+5916
+5917
+5918
+5919
+5920
+5921
+5922
+5923
+5924
+5925
+5926
+5927
+5928
+5929
+5930
+5931
+5932
+5933
+5934
+5935
+5936
+5937
+5938
+5939
+5940
+5941
+5942
+5943
+5944
+5945
+5946
+5947
+5948
+5949
+5950
+5951
+5952
+5953
+5954
+5955
+5956
+5957
+5958
+5959
+5960
+5961
+5962
+5963
+5964
+5965
+5966
+5967
+5968
+5969
+5970
+5971
+5972
+5973
+5974
+5975
+5976
+5977
+5978
+5979
+5980
+5981
+5982
+5983
+5984
+5985
+5986
+5987
+5988
+5989
+5990
+5991
+5992
+5993
+5994
+5995
+5996
+5997
+5998
+5999
+6000
+6001
+6002
+6003
+6004
+6005
+6006
+6007
+6008
+6009
+6010
+6011
+6012
+6013
+6014
+6015
+6016
+6017
+6018
+6019
+6020
+6021
+6022
+6023
+6024
+6025
+6026
+6027
+6028
+6029
+6030
+6031
+6032
+6033
+6034
+6035
+6036
+6037
+6038
+6039
+6040
+6041
+6042
+6043
+6044
+6045
+6046
+6047
+6048
+6049
+6050
+6051
+6052
+6053
+6054
+6055
+6056
+6057
+6058
+6059
+6060
+6061
+6062
+6063
+6064
+6065
+6066
+6067
+6068
+6069
+6070
+6071
+6072
+6073
+6074
+6075
+6076
+6077
+6078
+6079
+6080
+6081
+6082
+6083
+6084
+6085
+6086
+6087
+6088
+6089
+6090
+6091
+6092
+6093
+6094
+6095
+6096
+6097
+6098
+6099
+6100
+6101
+6102
+6103
+6104
+6105
+6106
+6107
+6108
+6109
+6110
+6111
+6112
+6113
+6114
+6115
+6116
+6117
+6118
+6119
+6120
+6121
+6122
+6123
+6124
+6125
+6126
+6127
+6128
+6129
+6130
+6131
+6132
+6133
+6134
+6135
+6136
+6137
+6138
+6139
+6140
+6141
+6142
+6143
+6144
+6145
+6146
+6147
+6148
+6149
+6150
+6151
+6152
+6153
+6154
+6155
+6156
+6157
+6158
+6159
+6160
+6161
+6162
+6163
+6164
+6165
+6166
+6167
+6168
+6169
+6170
+6171
+6172
+6173
+6174
+6175
+6176
+6177
+6178
+6179
+6180
+6181
+6182
+6183
+6184
+6185
+6186
+6187
+6188
+6189
+6190
+6191
+6192
+6193
+6194
+6195
+6196
+6197
+6198
+6199
+6200
+6201
+6202
+6203
+6204
+6205
+6206
+6207
+6208
+6209
+6210
+6211
+6212
+6213
+6214
+6215
+6216
+6217
+6218
+6219
+6220
+6221
+6222
+6223
+6224
+6225
+6226
+6227
+6228
+6229
+6230
+6231
+6232
+6233
+6234
+6235
+6236
+6237
+6238
+6239
+6240
+6241
+6242
+6243
+6244
+6245
+6246
+6247
+6248
+6249
+6250
+6251
+6252
+6253
+6254
+6255
+6256
+6257
+6258
+6259
+6260
+6261
+6262
+6263
+6264
+6265
+6266
+6267
+6268
+6269
+6270
+6271
+6272
+6273
+6274
+6275
+6276
+6277
+6278
+6279
+6280
+6281
+6282
+6283
+6284
+6285
+6286
+6287
+6288
+6289
+6290
+6291
+6292
+6293
+6294
+6295
+6296
+6297
+6298
+6299
+6300
+6301
+6302
+6303
+6304
+6305
+6306
+6307
+6308
+6309
+6310
+6311
+6312
+6313
+6314
+6315
+6316
+6317
+6318
+6319
+6320
+6321
+6322
+6323
+6324
+6325
+6326
+6327
+6328
+6329
+6330
+6331
+6332
+6333
+6334
+6335
+6336
+6337
+6338
+6339
+6340
+6341
+6342
+6343
+6344
+6345
+6346
+6347
+6348
+6349
+6350
+6351
+6352
+6353
+6354
+6355
+6356
+6357
+6358
+6359
+6360
+6361
+6362
+6363
+6364
+6365
+6366
+6367
+6368
+6369
+6370
+6371
+6372
+6373
+6374
+6375
+6376
+6377
+6378
+6379
+6380
+6381
+6382
+6383
+6384
+6385
+6386
+6387
+6388
+6389
+6390
+6391
+6392
+6393
+6394
+6395
+6396
+6397
+6398
+6399
+6400
+6401
+6402
+6403
+6404
+6405
+6406
+6407
+6408
+6409
+6410
+6411
+6412
+6413
+6414
+6415
+6416
+6417
+6418
+6419
+6420
+6421
+6422
+6423
+6424
+6425
+6426
+6427
+6428
+6429
+6430
+6431
+6432
+6433
+6434
+6435
+6436
+6437
+6438
+6439
+6440
+6441
+6442
+6443
+6444
+6445
+6446
+6447
+6448
+6449
+6450
+6451
+6452
+6453
+6454
+6455
+6456
+6457
+6458
+6459
+6460
+6461
+6462
+6463
+6464
+6465
+6466
+6467
+6468
+6469
+6470
+6471
+6472
+6473
+6474
+6475
+6476
+6477
+6478
+6479
+6480
+6481
+6482
+6483
+6484
+6485
+6486
+6487
+6488
+6489
+6490
+6491
+6492
+6493
+6494
+6495
+6496
+6497
+6498
+6499
+6500
+6501
+6502
+6503
+6504
+6505
+6506
+6507
+6508
+6509
+6510
+6511
+6512
+6513
+6514
+6515
+6516
+6517
+6518
+6519
+6520
+6521
+6522
+6523
+6524
+6525
+6526
+6527
+6528
+6529
+6530
+6531
+6532
+6533
+6534
+6535
+6536
+6537
+6538
+6539
+6540
+6541
+6542
+6543
+6544
+6545
+6546
+6547
+6548
+6549
+6550
+6551
+6552
+6553
+6554
+6555
+6556
+6557
+6558
+6559
+6560
+6561
+6562
+6563
+6564
+6565
+6566
+6567
+6568
+6569
+6570
+6571
+6572
+6573
+6574
+6575
+6576
+6577
+6578
+6579
+6580
+6581
+6582
+6583
+6584
+6585
+6586
+6587
+6588
+6589
+6590
+6591
+6592
+6593
+6594
+6595
+6596
+6597
+6598
+6599
+6600
+6601
+6602
+6603
+6604
+6605
+6606
+6607
+6608
+6609
+6610
+6611
+6612
+6613
+6614
+6615
+6616
+6617
+6618
+6619
+6620
+6621
+6622
+6623
+6624
+6625
+6626
+6627
+6628
+6629
+6630
+6631
+6632
+6633
+6634
+6635
+6636
+6637
+6638
+6639
+6640
+6641
+6642
+6643
+6644
+6645
+6646
+6647
+6648
+6649
+6650
+6651
+6652
+6653
+6654
+6655
+6656
+6657
+6658
+6659
+6660
+6661
+6662
+6663
+6664
+6665
+6666
+6667
+6668
+6669
+6670
+6671
+6672
+6673
+6674
+6675
+6676
+6677
+6678
+6679
+6680
+6681
+6682
+6683
+6684
+6685
+6686
+6687
+6688
+6689
+6690
+6691
+6692
+6693
+6694
+6695
+6696
+6697
+6698
+6699
+6700
+6701
+6702
+6703
+6704
+6705
+6706
+6707
+6708
+6709
+6710
+6711
+6712
+6713
+6714
+6715
+6716
+6717
+6718
+6719
+6720
+6721
+6722
+6723
+6724
+6725
+6726
+6727
+6728
+6729
+6730
+6731
+6732
+6733
+6734
+6735
+6736
+6737
+6738
+6739
+6740
+6741
+6742
+6743
+6744
+6745
+6746
+6747
+6748
+6749
+6750
+6751
+6752
+6753
+6754
+6755
+6756
+6757
+6758
+6759
+6760
+6761
+6762
+6763
+6764
+6765
+6766
+6767
+6768
+6769
+6770
+6771
+6772
+6773
+6774
+6775
+6776
+6777
+6778
+6779
+6780
+6781
+6782
+6783
+6784
+6785
+6786
+6787
+6788
+6789
+6790
+6791
+6792
+6793
+6794
+6795
+6796
+6797
+6798
+6799
+6800
+6801
+6802
+6803
+6804
+6805
+6806
+6807
+6808
+6809
+6810
+6811
+6812
+6813
+6814
+6815
+6816
+6817
+6818
+6819
+6820
+6821
+6822
+6823
+6824
+6825
+6826
+6827
+6828
+6829
+6830
+6831
+6832
+6833
+6834
+6835
+6836
+6837
+6838
+6839
+6840
+6841
+6842
+6843
+6844
+6845
+6846
+6847
+6848
+6849
+6850
+6851
+6852
+6853
+6854
+6855
+6856
+6857
+6858
+6859
+6860
+6861
+6862
+6863
+6864
+6865
+6866
+6867
+6868
+6869
+6870
+6871
+6872
+6873
+6874
+6875
+6876
+6877
+6878
+6879
+6880
+6881
+6882
+6883
+6884
+6885
+6886
+6887
+6888
+6889
+6890
+6891
+6892
+6893
+6894
+6895
+6896
+6897
+6898
+6899
+6900
+6901
+6902
+6903
+6904
+6905
+6906
+6907
+6908
+6909
+6910
+6911
+6912
+6913
+6914
+6915
+6916
+6917
+6918
+6919
+6920
+6921
+6922
+6923
+6924
+6925
+6926
+6927
+6928
+6929
+6930
+6931
+6932
+6933
+6934
+6935
+6936
+6937
+6938
+6939
+6940
+6941
+6942
+6943
+6944
+6945
+6946
+6947
+6948
+6949
+6950
+6951
+6952
+6953
+6954
+6955
+6956
+6957
+6958
+6959
+6960
+6961
+6962
+6963
+6964
+6965
+6966
+6967
+6968
+6969
+6970
+6971
+6972
+6973
+6974
+6975
+6976
+6977
+6978
+6979
+6980
+6981
+6982
+6983
+6984
+6985
+6986
+6987
+6988
+6989
+6990
+6991
+6992
+6993
+6994
+6995
+6996
+6997
+6998
+6999
+7000
+7001
+7002
+7003
+7004
+7005
+7006
+7007
+7008
+7009
+7010
+7011
+7012
+7013
+7014
+7015
+7016
+7017
+7018
+7019
+7020
+7021
+7022
+7023
+7024
+7025
+7026
+7027
+7028
+7029
+7030
+7031
+7032
+7033
+7034
+7035
+7036
+7037
+7038
+7039
+7040
+7041
+7042
+7043
+7044
+7045
+7046
+7047
+7048
+7049
+7050
+7051
+7052
+7053
+7054
+7055
+7056
+7057
+7058
+7059
+7060
+7061
+7062
+7063
+7064
+7065
+7066
+7067
+7068
+7069
+7070
+7071
+7072
+7073
+7074
+7075
+7076
+7077
+7078
+7079
+7080
+7081
+7082
+7083
+7084
+7085
+7086
+7087
+7088
+7089
+7090
+7091
+7092
+7093
+7094
+7095
+7096
+7097
+7098
+7099
+7100
+7101
+7102
+7103
+7104
+7105
+7106
+7107
+7108
+7109
+7110
+7111
+7112
+7113
+7114
+7115
+7116
+7117
+7118
+7119
+7120
+7121
+7122
+7123
+7124
+7125
+7126
+7127
+7128
+7129
+7130
+7131
+7132
+7133
+7134
+7135
+7136
+7137
+7138
+7139
+7140
+7141
+7142
+7143
+7144
+7145
+7146
+7147
+7148
+7149
+7150
+7151
+7152
+7153
+7154
+7155
+7156
+7157
+7158
+7159
+7160
+7161
+7162
+7163
+7164
+7165
+7166
+7167
+7168
+7169
+7170
+7171
+7172
+7173
+7174
+7175
+7176
+7177
+7178
+7179
+7180
+7181
+7182
+7183
+7184
+7185
+7186
+7187
+7188
+7189
+7190
+7191
+7192
+7193
+7194
+7195
+7196
+7197
+7198
+7199
+7200
+7201
+7202
+7203
+7204
+7205
+7206
+7207
+7208
+7209
+7210
+7211
+7212
+7213
+7214
+7215
+7216
+7217
+7218
+7219
+7220
+7221
+7222
+7223
+7224
+7225
+7226
+7227
+7228
+7229
+7230
+7231
+7232
+7233
+7234
+7235
+7236
+7237
+7238
+7239
+7240
+7241
+7242
+7243
+7244
+7245
+7246
+7247
+7248
+7249
+7250
+7251
+7252
+7253
+7254
+7255
+7256
+7257
+7258
+7259
+7260
+7261
+7262
+7263
+7264
+7265
+7266
+7267
+7268
+7269
+7270
+7271
+7272
+7273
+7274
+7275
+7276
+7277
+7278
+7279
+7280
+7281
+7282
+7283
+7284
+7285
+7286
+7287
+7288
+7289
+7290
+7291
+7292
+7293
+7294
+7295
+7296
+7297
+7298
+7299
+7300
+7301
+7302
+7303
+7304
+7305
+7306
+7307
+7308
+7309
+7310
+7311
+7312
+7313
+7314
+7315
+7316
+7317
+7318
+7319
+7320
+7321
+7322
+7323
+7324
+7325
+7326
+7327
+7328
+7329
+7330
+7331
+7332
+7333
+7334
+7335
+7336
+7337
+7338
+7339
+7340
+7341
+7342
+7343
+7344
+7345
+7346
+7347
+7348
+7349
+7350
+7351
+7352
+7353
+7354
+7355
+7356
+7357
+7358
+7359
+7360
+7361
+7362
+7363
+7364
+7365
+7366
+7367
+7368
+7369
+7370
+7371
+7372
+7373
+7374
+7375
+7376
+7377
+7378
+7379
+7380
+7381
+7382
+7383
+7384
+7385
+7386
+7387
+7388
+7389
+7390
+7391
+7392
+7393
+7394
+7395
+7396
+7397
+7398
+7399
+7400
+7401
+7402
+7403
+7404
+7405
+7406
+7407
+7408
+7409
+7410
+7411
+7412
+7413
+7414
+7415
+7416
+7417
+7418
+7419
+7420
+7421
+7422
+7423
+7424
+7425
+7426
+7427
+7428
+7429
+7430
+7431
+7432
+7433
+7434
+7435
+7436
+7437
+7438
+7439
+7440
+7441
+7442
+7443
+7444
+7445
+7446
+7447
+7448
+7449
+7450
+7451
+7452
+7453
+7454
+7455
+7456
+7457
+7458
+7459
+7460
+7461
+7462
+7463
+7464
+7465
+7466
+7467
+7468
+7469
+7470
+7471
+7472
+7473
+7474
+7475
+7476
+7477
+7478
+7479
+7480
+7481
+7482
+7483
+7484
+7485
+7486
+7487
+7488
+7489
+7490
+7491
+7492
+7493
+7494
+7495
+7496
+7497
+7498
+7499
+7500
+7501
+7502
+7503
+7504
+7505
+7506
+7507
+7508
+7509
+7510
+7511
+7512
+7513
+7514
+7515
+7516
+7517
+7518
+7519
+7520
+7521
+7522
+7523
+7524
+7525
+7526
+7527
+7528
+7529
+7530
+7531
+7532
+7533
+7534
+7535
+7536
+7537
+7538
+7539
+7540
+7541
+7542
+7543
+7544
+7545
+7546
+7547
+7548
+7549
+7550
+7551
+7552
+7553
+7554
+7555
+7556
+7557
+7558
+7559
+7560
+7561
+7562
+7563
+7564
+7565
+7566
+7567
+7568
+7569
+7570
+7571
+7572
+7573
+7574
+7575
+7576
+7577
+7578
+7579
+7580
+7581
+7582
+7583
+7584
+7585
+7586
+7587
+7588
+7589
+7590
+7591
+7592
+7593
+7594
+7595
+7596
+7597
+7598
+7599
+7600
+7601
+7602
+7603
+7604
+7605
+7606
+7607
+7608
+7609
+7610
+7611
+7612
+7613
+7614
+7615
+7616
+7617
+7618
+7619
+7620
+7621
+7622
+7623
+7624
+7625
+7626
+7627
+7628
+7629
+7630
+7631
+7632
+7633
+7634
+7635
+7636
+7637
+7638
+7639
+7640
+7641
+7642
+7643
+7644
+7645
+7646
+7647
+7648
+7649
+7650
+7651
+7652
+7653
+7654
+7655
+7656
+7657
+7658
+7659
+7660
+7661
+7662
+7663
+7664
+7665
+7666
+7667
+7668
+7669
+7670
+7671
+7672
+7673
+7674
+7675
+7676
+7677
+7678
+7679
+7680
+7681
+7682
+7683
+7684
+7685
+7686
+7687
+7688
+7689
+7690
+7691
+7692
+7693
+7694
+7695
+7696
+7697
+7698
+7699
+7700
+7701
+7702
+7703
+7704
+7705
+7706
+7707
+7708
+7709
+7710
+7711
+7712
+7713
+7714
+7715
+7716
+7717
+7718
+7719
+7720
+7721
+7722
+7723
+7724
+7725
+7726
+7727
+7728
+7729
+7730
+7731
+7732
+7733
+7734
+7735
+7736
+7737
+7738
+7739
+7740
+7741
+7742
+7743
+7744
+7745
+7746
+7747
+7748
+7749
+7750
+7751
+7752
+7753
+7754
+7755
+7756
+7757
+7758
+7759
+7760
+7761
+7762
+7763
+7764
+7765
+7766
+7767
+7768
+7769
+7770
+7771
+7772
+7773
+7774
+7775
+7776
+7777
+7778
+7779
+7780
+7781
+7782
+7783
+7784
+7785
+7786
+7787
+7788
+7789
+7790
+7791
+7792
+7793
+7794
+7795
+7796
+7797
+7798
+7799
+7800
+7801
+7802
+7803
+7804
+7805
+7806
+7807
+7808
+7809
+7810
+7811
+7812
+7813
+7814
+7815
+7816
+7817
+7818
+7819
+7820
+7821
+7822
+7823
+7824
+7825
+7826
+7827
+7828
+7829
+7830
+7831
+7832
+7833
+7834
+7835
+7836
+7837
+7838
+7839
+7840
+7841
+7842
+7843
+7844
+7845
+7846
+7847
+7848
+7849
+7850
+7851
+7852
+7853
+7854
+7855
+7856
+7857
+7858
+7859
+7860
+7861
+7862
+7863
+7864
+7865
+7866
+7867
+7868
+7869
+7870
+7871
+7872
+7873
+7874
+7875
+7876
+7877
+7878
+7879
+7880
+7881
+7882
+7883
+7884
+7885
+7886
+7887
+7888
+7889
+7890
+7891
+7892
+7893
+7894
+7895
+7896
+7897
+7898
+7899
+7900
+7901
+7902
+7903
+7904
+7905
+7906
+7907
+7908
+7909
+7910
+7911
+7912
+7913
+7914
+7915
+7916
+7917
+7918
+7919
+7920
+7921
+7922
+7923
+7924
+7925
+7926
+7927
+7928
+7929
+7930
+7931
+7932
+7933
+7934
+7935
+7936
+7937
+7938
+7939
+7940
+7941
+7942
+7943
+7944
+7945
+7946
+7947
+7948
+7949
+7950
+7951
+7952
+7953
+7954
+7955
+7956
+7957
+7958
+7959
+7960
+7961
+7962
+7963
+7964
+7965
+7966
+7967
+7968
+7969
+7970
+7971
+7972
+7973
+7974
+7975
+7976
+7977
+7978
+7979
+7980
+7981
+7982
+7983
+7984
+7985
+7986
+7987
+7988
+7989
+7990
+7991
+7992
+7993
+7994
+7995
+7996
+7997
+7998
+7999
+8000
+8001
+8002
+8003
+8004
+8005
+8006
+8007
+8008
+8009
+8010
+8011
+8012
+8013
+8014
+8015
+8016
+8017
+8018
+8019
+8020
+8021
+8022
+8023
+8024
+8025
+8026
+8027
+8028
+8029
+8030
+8031
+8032
+8033
+8034
+8035
+8036
+8037
+8038
+8039
+8040
+8041
+8042
+8043
+8044
+8045
+8046
+8047
+8048
+8049
+8050
+8051
+8052
+8053
+8054
+8055
+8056
+8057
+8058
+8059
+8060
+8061
+8062
+8063
+8064
+8065
+8066
+8067
+8068
+8069
+8070
+8071
+8072
+8073
+8074
+8075
+8076
+8077
+8078
+8079
+8080
+8081
+8082
+8083
+8084
+8085
+8086
+8087
+8088
+8089
+8090
+8091
+8092
+8093
+8094
+8095
+8096
+8097
+8098
+8099
+8100
+8101
+8102
+8103
+8104
+8105
+8106
+8107
+8108
+8109
+8110
+8111
+8112
+8113
+8114
+8115
+8116
+8117
+8118
+8119
+8120
+8121
+8122
+8123
+8124
+8125
+8126
+8127
+8128
+8129
+8130
+8131
+8132
+8133
+8134
+8135
+8136
+8137
+8138
+8139
+8140
+8141
+8142
+8143
+8144
+8145
+8146
+8147
+8148
+8149
+8150
+8151
+8152
+8153
+8154
+8155
+8156
+8157
+8158
+8159
+8160
+8161
+8162
+8163
+8164
+8165
+8166
+8167
+8168
+8169
+8170
+8171
+8172
+8173
+8174
+8175
+8176
+8177
+8178
+8179
+8180
+8181
+8182
+8183
+8184
+8185
+8186
+8187
+8188
+8189
+8190
+8191
+8192
+8193
+8194
+8195
+8196
+8197
+8198
+8199
+8200
+8201
+8202
+8203
+8204
+8205
+8206
+8207
+8208
+8209
+8210
+8211
+8212
+8213
+8214
+8215
+8216
+8217
+8218
+8219
+8220
+8221
+8222
+8223
+8224
+8225
+8226
+8227
+8228
+8229
+8230
+8231
+8232
+8233
+8234
+8235
+8236
+8237
+8238
+8239
+8240
+8241
+8242
+8243
+8244
+8245
+8246
+8247
+8248
+8249
+8250
+8251
+8252
+8253
+8254
+8255
+8256
+8257
+8258
+8259
+8260
+8261
+8262
+8263
+8264
+8265
+8266
+8267
+8268
+8269
+8270
+8271
+8272
+8273
+8274
+8275
+8276
+8277
+8278
+8279
+8280
+8281
+8282
+8283
+8284
+8285
+8286
+8287
+8288
+8289
+8290
+8291
+8292
+8293
+8294
+8295
+8296
+8297
+8298
+8299
+8300
+8301
+8302
+8303
+8304
+8305
+8306
+8307
+8308
+8309
+8310
+8311
+8312
+8313
+8314
+8315
+8316
+8317
+8318
+8319
+8320
+8321
+8322
+8323
+8324
+8325
+8326
+8327
+8328
+8329
+8330
+8331
+8332
+8333
+8334
+8335
+8336
+8337
+8338
+8339
+8340
+8341
+8342
+8343
+8344
+8345
+8346
+8347
+8348
+8349
+8350
+8351
+8352
+8353
+8354
+8355
+8356
+8357
+8358
+8359
+8360
+8361
+8362
+8363
+8364
+8365
+8366
+8367
+8368
+8369
+8370
+8371
+8372
+8373
+8374
+8375
+8376
+8377
+8378
+8379
+8380
+8381
+8382
+8383
+8384
+8385
+8386
+8387
+8388
+8389
+8390
+8391
+8392
+8393
+8394
+8395
+8396
+8397
+8398
+8399
+8400
+8401
+8402
+8403
+8404
+8405
+8406
+8407
+8408
+8409
+8410
+8411
+8412
+8413
+8414
+8415
+8416
+8417
+8418
+8419
+8420
+8421
+8422
+8423
+8424
+8425
+8426
+8427
+8428
+8429
+8430
+8431
+8432
+8433
+8434
+8435
+8436
+8437
+8438
+8439
+8440
+8441
+8442
+8443
+8444
+8445
+8446
+8447
+8448
+8449
+8450
+8451
+8452
+8453
+8454
+8455
+8456
+8457
+8458
+8459
+8460
+8461
+8462
+8463
+8464
+8465
+8466
+8467
+8468
+8469
+8470
+8471
+8472
+8473
+8474
+8475
+8476
+8477
+8478
+8479
+8480
+8481
+8482
+8483
+8484
+8485
+8486
+8487
+8488
+8489
+8490
+8491
+8492
+8493
+8494
+8495
+8496
+8497
+8498
+8499
+8500
+8501
+8502
+8503
+8504
+8505
+8506
+8507
+8508
+8509
+8510
+8511
+8512
+8513
+8514
+8515
+8516
+8517
+8518
+8519
+8520
+8521
+8522
+8523
+8524
+8525
+8526
+8527
+8528
+8529
+8530
+8531
+8532
+8533
+8534
+8535
+8536
+8537
+8538
+8539
+8540
+8541
+8542
+8543
+8544
+8545
+8546
+8547
+8548
+8549
+8550
+8551
+8552
+8553
+8554
+8555
+8556
+8557
+8558
+8559
+8560
+8561
+8562
+8563
+8564
+8565
+8566
+8567
+8568
+8569
+8570
+8571
+8572
+8573
+8574
+8575
+8576
+8577
+8578
+8579
+8580
+8581
+8582
+8583
+8584
+8585
+8586
+8587
+8588
+8589
+8590
+8591
+8592
+8593
+8594
+8595
+8596
+8597
+8598
+8599
+8600
+8601
+8602
+8603
+8604
+8605
+8606
+8607
+8608
+8609
+8610
+8611
+8612
+8613
+8614
+8615
+8616
+8617
+8618
+8619
+8620
+8621
+8622
+8623
+8624
+8625
+8626
+8627
+8628
+8629
+8630
+8631
+8632
+8633
+8634
+8635
+8636
+8637
+8638
+8639
+8640
+8641
+8642
+8643
+8644
+8645
+8646
+8647
+8648
+8649
+8650
+8651
+8652
+8653
+8654
+8655
+8656
+8657
+8658
+8659
+8660
+8661
+8662
+8663
+8664
+8665
+8666
+8667
+8668
+8669
+8670
+8671
+8672
+8673
+8674
+8675
+8676
+8677
+8678
+8679
+8680
+8681
+8682
+8683
+8684
+8685
+8686
+8687
+8688
+8689
+8690
+8691
+8692
+8693
+8694
+8695
+8696
+8697
+8698
+8699
+8700
+8701
+8702
+8703
+8704
+8705
+8706
+8707
+8708
+8709
+8710
+8711
+8712
+8713
+8714
+8715
+8716
+8717
+8718
+8719
+8720
+8721
+8722
+8723
+8724
+8725
+8726
+8727
+8728
+8729
+8730
+8731
+8732
+8733
+8734
+8735
+8736
+8737
+8738
+8739
+8740
+8741
+8742
+8743
+8744
+8745
+8746
+8747
+8748
+8749
+8750
+8751
+8752
+8753
+8754
+8755
+8756
+8757
+8758
+8759
+8760
+8761
+8762
+8763
+8764
+8765
+8766
+8767
+8768
+8769
+8770
+8771
+8772
+8773
+8774
+8775
+8776
+8777
+8778
+8779
+8780
+8781
+8782
+8783
+8784
+8785
+8786
+8787
+8788
+8789
+8790
+8791
+8792
+8793
+8794
+8795
+8796
+8797
+8798
+8799
+8800
+8801
+8802
+8803
+8804
+8805
+8806
+8807
+8808
+8809
+8810
+8811
+8812
+8813
+8814
+8815
+8816
+8817
+8818
+8819
+8820
+8821
+8822
+8823
+8824
+8825
+8826
+8827
+8828
+8829
+8830
+8831
+8832
+8833
+8834
+8835
+8836
+8837
+8838
+8839
+8840
+8841
+8842
+8843
+8844
+8845
+8846
+8847
+8848
+8849
+8850
+8851
+8852
+8853
+8854
+8855
+8856
+8857
+8858
+8859
+8860
+8861
+8862
+8863
+8864
+8865
+8866
+8867
+8868
+8869
+8870
+8871
+8872
+8873
+8874
+8875
+8876
+8877
+8878
+8879
+8880
+8881
+8882
+8883
+8884
+8885
+8886
+8887
+8888
+8889
+8890
+8891
+8892
+8893
+8894
+8895
+8896
+8897
+8898
+8899
+8900
+8901
+8902
+8903
+8904
+8905
+8906
+8907
+8908
+8909
+8910
+8911
+8912
+8913
+8914
+8915
+8916
+8917
+8918
+8919
+8920
+8921
+8922
+8923
+8924
+8925
+8926
+8927
+8928
+8929
+8930
+8931
+8932
+8933
+8934
+8935
+8936
+8937
+8938
+8939
+8940
+8941
+8942
+8943
+8944
+8945
+8946
+8947
+8948
+8949
+8950
+8951
+8952
+8953
+8954
+8955
+8956
+8957
+8958
+8959
+8960
+8961
+8962
+8963
+8964
+8965
+8966
+8967
+8968
+8969
+8970
+8971
+8972
+8973
+8974
+8975
+8976
+8977
+8978
+8979
+8980
+8981
+8982
+8983
+8984
+8985
+8986
+8987
+8988
+8989
+8990
+8991
+8992
+8993
+8994
+8995
+8996
+8997
+8998
+8999
+9000
+9001
+9002
+9003
+9004
+9005
+9006
+9007
+9008
+9009
+9010
+9011
+9012
+9013
+9014
+9015
+9016
+9017
+9018
+9019
+9020
+9021
+9022
+9023
+9024
+9025
+9026
+9027
+9028
+9029
+9030
+9031
+9032
+9033
+9034
+9035
+9036
+9037
+9038
+9039
+9040
+9041
+9042
+9043
+9044
+9045
+9046
+9047
+9048
+9049
+9050
+9051
+9052
+9053
+9054
+9055
+9056
+9057
+9058
+9059
+9060
+9061
+9062
+9063
+9064
+9065
+9066
+9067
+9068
+9069
+9070
+9071
+9072
+9073
+9074
+9075
+9076
+9077
+9078
+9079
+9080
+9081
+9082
+9083
+9084
+9085
+9086
+9087
+9088
+9089
+9090
+9091
+9092
+9093
+9094
+9095
+9096
+9097
+9098
+9099
+9100
+9101
+9102
+9103
+9104
+9105
+9106
+9107
+9108
+9109
+9110
+9111
+9112
+9113
+9114
+9115
+9116
+9117
+9118
+9119
+9120
+9121
+9122
+9123
+9124
+9125
+9126
+9127
+9128
+9129
+9130
+9131
+9132
+9133
+9134
+9135
+9136
+9137
+9138
+9139
+9140
+9141
+9142
+9143
+9144
+9145
+9146
+9147
+9148
+9149
+9150
+9151
+9152
+9153
+9154
+9155
+9156
+9157
+9158
+9159
+9160
+9161
+9162
+9163
+9164
+9165
+9166
+9167
+9168
+9169
+9170
+9171
+9172
+9173
+9174
+9175
+9176
+9177
+9178
+9179
+9180
+9181
+9182
+9183
+9184
+9185
+9186
+9187
+9188
+9189
+9190
+9191
+9192
+9193
+9194
+9195
+9196
+9197
+9198
+9199
+9200
+9201
+9202
+9203
+9204
+9205
+9206
+9207
+9208
+9209
+9210
+9211
+9212
+9213
+9214
+9215
+9216
+9217
+9218
+9219
+9220
+9221
+9222
+9223
+9224
+9225
+9226
+9227
+9228
+9229
+9230
+9231
+9232
+9233
+9234
+9235
+9236
+9237
+9238
+9239
+9240
+9241
+9242
+9243
+9244
+9245
+9246
+9247
+9248
+9249
+9250
+9251
+9252
+9253
+9254
+9255
+9256
+9257
+9258
+9259
+9260
+9261
+9262
+9263
+9264
+9265
+9266
+9267
+9268
+9269
+9270
+9271
+9272
+9273
+9274
+9275
+9276
+9277
+9278
+9279
+9280
+9281
+9282
+9283
+9284
+9285
+9286
+9287
+9288
+9289
+9290
+9291
+9292
+9293
+9294
+9295
+9296
+9297
+9298
+9299
+9300
+9301
+9302
+9303
+9304
+9305
+9306
+9307
+9308
+9309
+9310
+9311
+9312
+9313
+9314
+9315
+9316
+9317
+9318
+9319
+9320
+9321
+9322
+9323
+9324
+9325
+9326
+9327
+9328
+9329
+9330
+9331
+9332
+9333
+9334
+9335
+9336
+9337
+9338
+9339
+9340
+9341
+9342
+9343
+9344
+9345
+9346
+9347
+9348
+9349
+9350
+9351
+9352
+9353
+9354
+9355
+9356
+9357
+9358
+9359
+9360
+9361
+9362
+9363
+9364
+9365
+9366
+9367
+9368
+9369
+9370
+9371
+9372
+9373
+9374
+9375
+9376
+9377
+9378
+9379
+9380
+9381
+9382
+9383
+9384
+9385
+9386
+9387
+9388
+9389
+9390
+9391
+9392
+9393
+9394
+9395
+9396
+9397
+9398
+9399
+9400
+9401
+9402
+9403
+9404
+9405
+9406
+9407
+9408
+9409
+9410
+9411
+9412
+9413
+9414
+9415
+9416
+9417
+9418
+9419
+9420
+9421
+9422
+9423
+9424
+9425
+9426
+9427
+9428
+9429
+9430
+9431
+9432
+9433
+9434
+9435
+9436
+9437
+9438
+9439
+9440
+9441
+9442
+9443
+9444
+9445
+9446
+9447
+9448
+9449
+9450
+9451
+9452
+9453
+9454
+9455
+9456
+9457
+9458
+9459
+9460
+9461
+9462
+9463
+9464
+9465
+9466
+9467
+9468
+9469
+9470
+9471
+9472
+9473
+9474
+9475
+9476
+9477
+9478
+9479
+9480
+9481
+9482
+9483
+9484
+9485
+9486
+9487
+9488
+9489
+9490
+9491
+9492
+9493
+9494
+9495
+9496
+9497
+9498
+9499
+9500
+9501
+9502
+9503
+9504
+9505
+9506
+9507
+9508
+9509
+9510
+9511
+9512
+9513
+9514
+9515
+9516
+9517
+9518
+9519
+9520
+9521
+9522
+9523
+9524
+9525
+9526
+9527
+9528
+9529
+9530
+9531
+9532
+9533
+9534
+9535
+9536
+9537
+9538
+9539
+9540
+9541
+9542
+9543
+9544
+9545
+9546
+9547
+9548
+9549
+9550
+9551
+9552
+9553
+9554
+9555
+9556
+9557
+9558
+9559
+9560
+9561
+9562
+9563
+9564
+9565
+9566
+9567
+9568
+9569
+9570
+9571
+9572
+9573
+9574
+9575
+9576
+9577
+9578
+9579
+9580
+9581
+9582
+9583
+9584
+9585
+9586
+9587
+9588
+9589
+9590
+9591
+9592
+9593
+9594
+9595
+9596
+9597
+9598
+9599
+9600
+9601
+9602
+9603
+9604
+9605
+9606
+9607
+9608
+9609
+9610
+9611
+9612
+9613
+9614
+9615
+9616
+9617
+9618
+9619
+9620
+9621
+9622
+9623
+9624
+9625
+9626
+9627
+9628
+9629
+9630
+9631
+9632
+9633
+9634
+9635
+9636
+9637
+9638
+9639
+9640
+9641
+9642
+9643
+9644
+9645
+9646
+9647
+9648
+9649
+9650
+9651
+9652
+9653
+9654
+9655
+9656
+9657
+9658
+9659
+9660
+9661
+9662
+9663
+9664
+9665
+9666
+9667
+9668
+9669
+9670
+9671
+9672
+9673
+9674
+9675
+9676
+9677
+9678
+9679
+9680
+9681
+9682
+9683
+9684
+9685
+9686
+9687
+9688
+9689
+9690
+9691
+9692
+9693
+9694
+9695
+9696
+9697
+9698
+9699
+9700
+9701
+9702
+9703
+9704
+9705
+9706
+9707
+9708
+9709
+9710
+9711
+9712
+9713
+9714
+9715
+9716
+9717
+9718
+9719
+9720
+9721
+9722
+9723
+9724
+9725
+9726
+9727
+9728
+9729
+9730
+9731
+9732
+9733
+9734
+9735
+9736
+9737
+9738
+9739
+9740
+9741
+9742
+9743
+9744
+9745
+9746
+9747
+9748
+9749
+9750
+9751
+9752
+9753
+9754
+9755
+9756
+9757
+9758
+9759
+9760
+9761
+9762
+9763
+9764
+9765
+9766
+9767
+9768
+9769
+9770
+9771
+9772
+9773
+9774
+9775
+9776
+9777
+9778
+9779
+9780
+9781
+9782
+9783
+9784
+9785
+9786
+9787
+9788
+9789
+9790
+9791
+9792
+9793
+9794
+9795
+9796
+9797
+9798
+9799
+9800
+9801
+9802
+9803
+9804
+9805
+9806
+9807
+9808
+9809
+9810
+9811
+9812
+9813
+9814
+9815
+9816
+9817
+9818
+9819
+9820
+9821
+9822
+9823
+9824
+9825
+9826
+9827
+9828
+9829
+9830
+9831
+9832
+9833
+9834
+9835
+9836
+9837
+9838
+9839
+9840
+9841
+9842
+9843
+9844
+9845
+9846
+9847
+9848
+9849
+9850
+9851
+9852
+9853
+9854
+9855
+9856
+9857
+9858
+9859
+9860
+9861
+9862
+9863
+9864
+9865
+9866
+9867
+9868
+9869
+9870
+9871
+9872
+9873
+9874
+9875
+9876
+9877
+9878
+9879
+9880
+9881
+9882
+9883
+9884
+9885
+9886
+9887
+9888
+9889
+9890
+9891
+9892
+9893
+9894
+9895
+9896
+9897
+9898
+9899
+9900
+9901
+9902
+9903
+9904
+9905
+9906
+9907
+9908
+9909
+9910
+9911
+9912
+9913
+9914
+9915
+9916
+9917
+9918
+9919
+9920
+9921
+9922
+9923
+9924
+9925
+9926
+9927
+9928
+9929
+9930
+9931
+9932
+9933
+9934
+9935
+9936
+9937
+9938
+9939
+9940
+9941
+9942
+9943
+9944
+9945
+9946
+9947
+9948
+9949
+9950
+9951
+9952
+9953
+9954
+9955
+9956
+9957
+9958
+9959
+9960
+9961
+9962
+9963
+9964
+9965
+9966
+9967
+9968
+9969
+9970
+9971
+9972
+9973
+9974
+9975
+9976
+9977
+9978
+9979
+9980
+9981
+9982
+9983
+9984
+9985
+9986
+9987
+9988
+9989
+9990
+9991
+9992
+9993
+9994
+9995
+9996
+9997
+9998
+9999
+10000
diff --git a/mysql-test/std_data/bug30435_5k.txt b/mysql-test/std_data/bug30435_5k.txt
new file mode 100644
index 00000000000..7d1714969fc
--- /dev/null
+++ b/mysql-test/std_data/bug30435_5k.txt
@@ -0,0 +1,5000 @@
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+662
+663
+664
+665
+666
+667
+668
+669
+670
+671
+672
+673
+674
+675
+676
+677
+678
+679
+680
+681
+682
+683
+684
+685
+686
+687
+688
+689
+690
+691
+692
+693
+694
+695
+696
+697
+698
+699
+700
+701
+702
+703
+704
+705
+706
+707
+708
+709
+710
+711
+712
+713
+714
+715
+716
+717
+718
+719
+720
+721
+722
+723
+724
+725
+726
+727
+728
+729
+730
+731
+732
+733
+734
+735
+736
+737
+738
+739
+740
+741
+742
+743
+744
+745
+746
+747
+748
+749
+750
+751
+752
+753
+754
+755
+756
+757
+758
+759
+760
+761
+762
+763
+764
+765
+766
+767
+768
+769
+770
+771
+772
+773
+774
+775
+776
+777
+778
+779
+780
+781
+782
+783
+784
+785
+786
+787
+788
+789
+790
+791
+792
+793
+794
+795
+796
+797
+798
+799
+800
+801
+802
+803
+804
+805
+806
+807
+808
+809
+810
+811
+812
+813
+814
+815
+816
+817
+818
+819
+820
+821
+822
+823
+824
+825
+826
+827
+828
+829
+830
+831
+832
+833
+834
+835
+836
+837
+838
+839
+840
+841
+842
+843
+844
+845
+846
+847
+848
+849
+850
+851
+852
+853
+854
+855
+856
+857
+858
+859
+860
+861
+862
+863
+864
+865
+866
+867
+868
+869
+870
+871
+872
+873
+874
+875
+876
+877
+878
+879
+880
+881
+882
+883
+884
+885
+886
+887
+888
+889
+890
+891
+892
+893
+894
+895
+896
+897
+898
+899
+900
+901
+902
+903
+904
+905
+906
+907
+908
+909
+910
+911
+912
+913
+914
+915
+916
+917
+918
+919
+920
+921
+922
+923
+924
+925
+926
+927
+928
+929
+930
+931
+932
+933
+934
+935
+936
+937
+938
+939
+940
+941
+942
+943
+944
+945
+946
+947
+948
+949
+950
+951
+952
+953
+954
+955
+956
+957
+958
+959
+960
+961
+962
+963
+964
+965
+966
+967
+968
+969
+970
+971
+972
+973
+974
+975
+976
+977
+978
+979
+980
+981
+982
+983
+984
+985
+986
+987
+988
+989
+990
+991
+992
+993
+994
+995
+996
+997
+998
+999
+1000
+1001
+1002
+1003
+1004
+1005
+1006
+1007
+1008
+1009
+1010
+1011
+1012
+1013
+1014
+1015
+1016
+1017
+1018
+1019
+1020
+1021
+1022
+1023
+1024
+1025
+1026
+1027
+1028
+1029
+1030
+1031
+1032
+1033
+1034
+1035
+1036
+1037
+1038
+1039
+1040
+1041
+1042
+1043
+1044
+1045
+1046
+1047
+1048
+1049
+1050
+1051
+1052
+1053
+1054
+1055
+1056
+1057
+1058
+1059
+1060
+1061
+1062
+1063
+1064
+1065
+1066
+1067
+1068
+1069
+1070
+1071
+1072
+1073
+1074
+1075
+1076
+1077
+1078
+1079
+1080
+1081
+1082
+1083
+1084
+1085
+1086
+1087
+1088
+1089
+1090
+1091
+1092
+1093
+1094
+1095
+1096
+1097
+1098
+1099
+1100
+1101
+1102
+1103
+1104
+1105
+1106
+1107
+1108
+1109
+1110
+1111
+1112
+1113
+1114
+1115
+1116
+1117
+1118
+1119
+1120
+1121
+1122
+1123
+1124
+1125
+1126
+1127
+1128
+1129
+1130
+1131
+1132
+1133
+1134
+1135
+1136
+1137
+1138
+1139
+1140
+1141
+1142
+1143
+1144
+1145
+1146
+1147
+1148
+1149
+1150
+1151
+1152
+1153
+1154
+1155
+1156
+1157
+1158
+1159
+1160
+1161
+1162
+1163
+1164
+1165
+1166
+1167
+1168
+1169
+1170
+1171
+1172
+1173
+1174
+1175
+1176
+1177
+1178
+1179
+1180
+1181
+1182
+1183
+1184
+1185
+1186
+1187
+1188
+1189
+1190
+1191
+1192
+1193
+1194
+1195
+1196
+1197
+1198
+1199
+1200
+1201
+1202
+1203
+1204
+1205
+1206
+1207
+1208
+1209
+1210
+1211
+1212
+1213
+1214
+1215
+1216
+1217
+1218
+1219
+1220
+1221
+1222
+1223
+1224
+1225
+1226
+1227
+1228
+1229
+1230
+1231
+1232
+1233
+1234
+1235
+1236
+1237
+1238
+1239
+1240
+1241
+1242
+1243
+1244
+1245
+1246
+1247
+1248
+1249
+1250
+1251
+1252
+1253
+1254
+1255
+1256
+1257
+1258
+1259
+1260
+1261
+1262
+1263
+1264
+1265
+1266
+1267
+1268
+1269
+1270
+1271
+1272
+1273
+1274
+1275
+1276
+1277
+1278
+1279
+1280
+1281
+1282
+1283
+1284
+1285
+1286
+1287
+1288
+1289
+1290
+1291
+1292
+1293
+1294
+1295
+1296
+1297
+1298
+1299
+1300
+1301
+1302
+1303
+1304
+1305
+1306
+1307
+1308
+1309
+1310
+1311
+1312
+1313
+1314
+1315
+1316
+1317
+1318
+1319
+1320
+1321
+1322
+1323
+1324
+1325
+1326
+1327
+1328
+1329
+1330
+1331
+1332
+1333
+1334
+1335
+1336
+1337
+1338
+1339
+1340
+1341
+1342
+1343
+1344
+1345
+1346
+1347
+1348
+1349
+1350
+1351
+1352
+1353
+1354
+1355
+1356
+1357
+1358
+1359
+1360
+1361
+1362
+1363
+1364
+1365
+1366
+1367
+1368
+1369
+1370
+1371
+1372
+1373
+1374
+1375
+1376
+1377
+1378
+1379
+1380
+1381
+1382
+1383
+1384
+1385
+1386
+1387
+1388
+1389
+1390
+1391
+1392
+1393
+1394
+1395
+1396
+1397
+1398
+1399
+1400
+1401
+1402
+1403
+1404
+1405
+1406
+1407
+1408
+1409
+1410
+1411
+1412
+1413
+1414
+1415
+1416
+1417
+1418
+1419
+1420
+1421
+1422
+1423
+1424
+1425
+1426
+1427
+1428
+1429
+1430
+1431
+1432
+1433
+1434
+1435
+1436
+1437
+1438
+1439
+1440
+1441
+1442
+1443
+1444
+1445
+1446
+1447
+1448
+1449
+1450
+1451
+1452
+1453
+1454
+1455
+1456
+1457
+1458
+1459
+1460
+1461
+1462
+1463
+1464
+1465
+1466
+1467
+1468
+1469
+1470
+1471
+1472
+1473
+1474
+1475
+1476
+1477
+1478
+1479
+1480
+1481
+1482
+1483
+1484
+1485
+1486
+1487
+1488
+1489
+1490
+1491
+1492
+1493
+1494
+1495
+1496
+1497
+1498
+1499
+1500
+1501
+1502
+1503
+1504
+1505
+1506
+1507
+1508
+1509
+1510
+1511
+1512
+1513
+1514
+1515
+1516
+1517
+1518
+1519
+1520
+1521
+1522
+1523
+1524
+1525
+1526
+1527
+1528
+1529
+1530
+1531
+1532
+1533
+1534
+1535
+1536
+1537
+1538
+1539
+1540
+1541
+1542
+1543
+1544
+1545
+1546
+1547
+1548
+1549
+1550
+1551
+1552
+1553
+1554
+1555
+1556
+1557
+1558
+1559
+1560
+1561
+1562
+1563
+1564
+1565
+1566
+1567
+1568
+1569
+1570
+1571
+1572
+1573
+1574
+1575
+1576
+1577
+1578
+1579
+1580
+1581
+1582
+1583
+1584
+1585
+1586
+1587
+1588
+1589
+1590
+1591
+1592
+1593
+1594
+1595
+1596
+1597
+1598
+1599
+1600
+1601
+1602
+1603
+1604
+1605
+1606
+1607
+1608
+1609
+1610
+1611
+1612
+1613
+1614
+1615
+1616
+1617
+1618
+1619
+1620
+1621
+1622
+1623
+1624
+1625
+1626
+1627
+1628
+1629
+1630
+1631
+1632
+1633
+1634
+1635
+1636
+1637
+1638
+1639
+1640
+1641
+1642
+1643
+1644
+1645
+1646
+1647
+1648
+1649
+1650
+1651
+1652
+1653
+1654
+1655
+1656
+1657
+1658
+1659
+1660
+1661
+1662
+1663
+1664
+1665
+1666
+1667
+1668
+1669
+1670
+1671
+1672
+1673
+1674
+1675
+1676
+1677
+1678
+1679
+1680
+1681
+1682
+1683
+1684
+1685
+1686
+1687
+1688
+1689
+1690
+1691
+1692
+1693
+1694
+1695
+1696
+1697
+1698
+1699
+1700
+1701
+1702
+1703
+1704
+1705
+1706
+1707
+1708
+1709
+1710
+1711
+1712
+1713
+1714
+1715
+1716
+1717
+1718
+1719
+1720
+1721
+1722
+1723
+1724
+1725
+1726
+1727
+1728
+1729
+1730
+1731
+1732
+1733
+1734
+1735
+1736
+1737
+1738
+1739
+1740
+1741
+1742
+1743
+1744
+1745
+1746
+1747
+1748
+1749
+1750
+1751
+1752
+1753
+1754
+1755
+1756
+1757
+1758
+1759
+1760
+1761
+1762
+1763
+1764
+1765
+1766
+1767
+1768
+1769
+1770
+1771
+1772
+1773
+1774
+1775
+1776
+1777
+1778
+1779
+1780
+1781
+1782
+1783
+1784
+1785
+1786
+1787
+1788
+1789
+1790
+1791
+1792
+1793
+1794
+1795
+1796
+1797
+1798
+1799
+1800
+1801
+1802
+1803
+1804
+1805
+1806
+1807
+1808
+1809
+1810
+1811
+1812
+1813
+1814
+1815
+1816
+1817
+1818
+1819
+1820
+1821
+1822
+1823
+1824
+1825
+1826
+1827
+1828
+1829
+1830
+1831
+1832
+1833
+1834
+1835
+1836
+1837
+1838
+1839
+1840
+1841
+1842
+1843
+1844
+1845
+1846
+1847
+1848
+1849
+1850
+1851
+1852
+1853
+1854
+1855
+1856
+1857
+1858
+1859
+1860
+1861
+1862
+1863
+1864
+1865
+1866
+1867
+1868
+1869
+1870
+1871
+1872
+1873
+1874
+1875
+1876
+1877
+1878
+1879
+1880
+1881
+1882
+1883
+1884
+1885
+1886
+1887
+1888
+1889
+1890
+1891
+1892
+1893
+1894
+1895
+1896
+1897
+1898
+1899
+1900
+1901
+1902
+1903
+1904
+1905
+1906
+1907
+1908
+1909
+1910
+1911
+1912
+1913
+1914
+1915
+1916
+1917
+1918
+1919
+1920
+1921
+1922
+1923
+1924
+1925
+1926
+1927
+1928
+1929
+1930
+1931
+1932
+1933
+1934
+1935
+1936
+1937
+1938
+1939
+1940
+1941
+1942
+1943
+1944
+1945
+1946
+1947
+1948
+1949
+1950
+1951
+1952
+1953
+1954
+1955
+1956
+1957
+1958
+1959
+1960
+1961
+1962
+1963
+1964
+1965
+1966
+1967
+1968
+1969
+1970
+1971
+1972
+1973
+1974
+1975
+1976
+1977
+1978
+1979
+1980
+1981
+1982
+1983
+1984
+1985
+1986
+1987
+1988
+1989
+1990
+1991
+1992
+1993
+1994
+1995
+1996
+1997
+1998
+1999
+2000
+2001
+2002
+2003
+2004
+2005
+2006
+2007
+2008
+2009
+2010
+2011
+2012
+2013
+2014
+2015
+2016
+2017
+2018
+2019
+2020
+2021
+2022
+2023
+2024
+2025
+2026
+2027
+2028
+2029
+2030
+2031
+2032
+2033
+2034
+2035
+2036
+2037
+2038
+2039
+2040
+2041
+2042
+2043
+2044
+2045
+2046
+2047
+2048
+2049
+2050
+2051
+2052
+2053
+2054
+2055
+2056
+2057
+2058
+2059
+2060
+2061
+2062
+2063
+2064
+2065
+2066
+2067
+2068
+2069
+2070
+2071
+2072
+2073
+2074
+2075
+2076
+2077
+2078
+2079
+2080
+2081
+2082
+2083
+2084
+2085
+2086
+2087
+2088
+2089
+2090
+2091
+2092
+2093
+2094
+2095
+2096
+2097
+2098
+2099
+2100
+2101
+2102
+2103
+2104
+2105
+2106
+2107
+2108
+2109
+2110
+2111
+2112
+2113
+2114
+2115
+2116
+2117
+2118
+2119
+2120
+2121
+2122
+2123
+2124
+2125
+2126
+2127
+2128
+2129
+2130
+2131
+2132
+2133
+2134
+2135
+2136
+2137
+2138
+2139
+2140
+2141
+2142
+2143
+2144
+2145
+2146
+2147
+2148
+2149
+2150
+2151
+2152
+2153
+2154
+2155
+2156
+2157
+2158
+2159
+2160
+2161
+2162
+2163
+2164
+2165
+2166
+2167
+2168
+2169
+2170
+2171
+2172
+2173
+2174
+2175
+2176
+2177
+2178
+2179
+2180
+2181
+2182
+2183
+2184
+2185
+2186
+2187
+2188
+2189
+2190
+2191
+2192
+2193
+2194
+2195
+2196
+2197
+2198
+2199
+2200
+2201
+2202
+2203
+2204
+2205
+2206
+2207
+2208
+2209
+2210
+2211
+2212
+2213
+2214
+2215
+2216
+2217
+2218
+2219
+2220
+2221
+2222
+2223
+2224
+2225
+2226
+2227
+2228
+2229
+2230
+2231
+2232
+2233
+2234
+2235
+2236
+2237
+2238
+2239
+2240
+2241
+2242
+2243
+2244
+2245
+2246
+2247
+2248
+2249
+2250
+2251
+2252
+2253
+2254
+2255
+2256
+2257
+2258
+2259
+2260
+2261
+2262
+2263
+2264
+2265
+2266
+2267
+2268
+2269
+2270
+2271
+2272
+2273
+2274
+2275
+2276
+2277
+2278
+2279
+2280
+2281
+2282
+2283
+2284
+2285
+2286
+2287
+2288
+2289
+2290
+2291
+2292
+2293
+2294
+2295
+2296
+2297
+2298
+2299
+2300
+2301
+2302
+2303
+2304
+2305
+2306
+2307
+2308
+2309
+2310
+2311
+2312
+2313
+2314
+2315
+2316
+2317
+2318
+2319
+2320
+2321
+2322
+2323
+2324
+2325
+2326
+2327
+2328
+2329
+2330
+2331
+2332
+2333
+2334
+2335
+2336
+2337
+2338
+2339
+2340
+2341
+2342
+2343
+2344
+2345
+2346
+2347
+2348
+2349
+2350
+2351
+2352
+2353
+2354
+2355
+2356
+2357
+2358
+2359
+2360
+2361
+2362
+2363
+2364
+2365
+2366
+2367
+2368
+2369
+2370
+2371
+2372
+2373
+2374
+2375
+2376
+2377
+2378
+2379
+2380
+2381
+2382
+2383
+2384
+2385
+2386
+2387
+2388
+2389
+2390
+2391
+2392
+2393
+2394
+2395
+2396
+2397
+2398
+2399
+2400
+2401
+2402
+2403
+2404
+2405
+2406
+2407
+2408
+2409
+2410
+2411
+2412
+2413
+2414
+2415
+2416
+2417
+2418
+2419
+2420
+2421
+2422
+2423
+2424
+2425
+2426
+2427
+2428
+2429
+2430
+2431
+2432
+2433
+2434
+2435
+2436
+2437
+2438
+2439
+2440
+2441
+2442
+2443
+2444
+2445
+2446
+2447
+2448
+2449
+2450
+2451
+2452
+2453
+2454
+2455
+2456
+2457
+2458
+2459
+2460
+2461
+2462
+2463
+2464
+2465
+2466
+2467
+2468
+2469
+2470
+2471
+2472
+2473
+2474
+2475
+2476
+2477
+2478
+2479
+2480
+2481
+2482
+2483
+2484
+2485
+2486
+2487
+2488
+2489
+2490
+2491
+2492
+2493
+2494
+2495
+2496
+2497
+2498
+2499
+2500
+2501
+2502
+2503
+2504
+2505
+2506
+2507
+2508
+2509
+2510
+2511
+2512
+2513
+2514
+2515
+2516
+2517
+2518
+2519
+2520
+2521
+2522
+2523
+2524
+2525
+2526
+2527
+2528
+2529
+2530
+2531
+2532
+2533
+2534
+2535
+2536
+2537
+2538
+2539
+2540
+2541
+2542
+2543
+2544
+2545
+2546
+2547
+2548
+2549
+2550
+2551
+2552
+2553
+2554
+2555
+2556
+2557
+2558
+2559
+2560
+2561
+2562
+2563
+2564
+2565
+2566
+2567
+2568
+2569
+2570
+2571
+2572
+2573
+2574
+2575
+2576
+2577
+2578
+2579
+2580
+2581
+2582
+2583
+2584
+2585
+2586
+2587
+2588
+2589
+2590
+2591
+2592
+2593
+2594
+2595
+2596
+2597
+2598
+2599
+2600
+2601
+2602
+2603
+2604
+2605
+2606
+2607
+2608
+2609
+2610
+2611
+2612
+2613
+2614
+2615
+2616
+2617
+2618
+2619
+2620
+2621
+2622
+2623
+2624
+2625
+2626
+2627
+2628
+2629
+2630
+2631
+2632
+2633
+2634
+2635
+2636
+2637
+2638
+2639
+2640
+2641
+2642
+2643
+2644
+2645
+2646
+2647
+2648
+2649
+2650
+2651
+2652
+2653
+2654
+2655
+2656
+2657
+2658
+2659
+2660
+2661
+2662
+2663
+2664
+2665
+2666
+2667
+2668
+2669
+2670
+2671
+2672
+2673
+2674
+2675
+2676
+2677
+2678
+2679
+2680
+2681
+2682
+2683
+2684
+2685
+2686
+2687
+2688
+2689
+2690
+2691
+2692
+2693
+2694
+2695
+2696
+2697
+2698
+2699
+2700
+2701
+2702
+2703
+2704
+2705
+2706
+2707
+2708
+2709
+2710
+2711
+2712
+2713
+2714
+2715
+2716
+2717
+2718
+2719
+2720
+2721
+2722
+2723
+2724
+2725
+2726
+2727
+2728
+2729
+2730
+2731
+2732
+2733
+2734
+2735
+2736
+2737
+2738
+2739
+2740
+2741
+2742
+2743
+2744
+2745
+2746
+2747
+2748
+2749
+2750
+2751
+2752
+2753
+2754
+2755
+2756
+2757
+2758
+2759
+2760
+2761
+2762
+2763
+2764
+2765
+2766
+2767
+2768
+2769
+2770
+2771
+2772
+2773
+2774
+2775
+2776
+2777
+2778
+2779
+2780
+2781
+2782
+2783
+2784
+2785
+2786
+2787
+2788
+2789
+2790
+2791
+2792
+2793
+2794
+2795
+2796
+2797
+2798
+2799
+2800
+2801
+2802
+2803
+2804
+2805
+2806
+2807
+2808
+2809
+2810
+2811
+2812
+2813
+2814
+2815
+2816
+2817
+2818
+2819
+2820
+2821
+2822
+2823
+2824
+2825
+2826
+2827
+2828
+2829
+2830
+2831
+2832
+2833
+2834
+2835
+2836
+2837
+2838
+2839
+2840
+2841
+2842
+2843
+2844
+2845
+2846
+2847
+2848
+2849
+2850
+2851
+2852
+2853
+2854
+2855
+2856
+2857
+2858
+2859
+2860
+2861
+2862
+2863
+2864
+2865
+2866
+2867
+2868
+2869
+2870
+2871
+2872
+2873
+2874
+2875
+2876
+2877
+2878
+2879
+2880
+2881
+2882
+2883
+2884
+2885
+2886
+2887
+2888
+2889
+2890
+2891
+2892
+2893
+2894
+2895
+2896
+2897
+2898
+2899
+2900
+2901
+2902
+2903
+2904
+2905
+2906
+2907
+2908
+2909
+2910
+2911
+2912
+2913
+2914
+2915
+2916
+2917
+2918
+2919
+2920
+2921
+2922
+2923
+2924
+2925
+2926
+2927
+2928
+2929
+2930
+2931
+2932
+2933
+2934
+2935
+2936
+2937
+2938
+2939
+2940
+2941
+2942
+2943
+2944
+2945
+2946
+2947
+2948
+2949
+2950
+2951
+2952
+2953
+2954
+2955
+2956
+2957
+2958
+2959
+2960
+2961
+2962
+2963
+2964
+2965
+2966
+2967
+2968
+2969
+2970
+2971
+2972
+2973
+2974
+2975
+2976
+2977
+2978
+2979
+2980
+2981
+2982
+2983
+2984
+2985
+2986
+2987
+2988
+2989
+2990
+2991
+2992
+2993
+2994
+2995
+2996
+2997
+2998
+2999
+3000
+3001
+3002
+3003
+3004
+3005
+3006
+3007
+3008
+3009
+3010
+3011
+3012
+3013
+3014
+3015
+3016
+3017
+3018
+3019
+3020
+3021
+3022
+3023
+3024
+3025
+3026
+3027
+3028
+3029
+3030
+3031
+3032
+3033
+3034
+3035
+3036
+3037
+3038
+3039
+3040
+3041
+3042
+3043
+3044
+3045
+3046
+3047
+3048
+3049
+3050
+3051
+3052
+3053
+3054
+3055
+3056
+3057
+3058
+3059
+3060
+3061
+3062
+3063
+3064
+3065
+3066
+3067
+3068
+3069
+3070
+3071
+3072
+3073
+3074
+3075
+3076
+3077
+3078
+3079
+3080
+3081
+3082
+3083
+3084
+3085
+3086
+3087
+3088
+3089
+3090
+3091
+3092
+3093
+3094
+3095
+3096
+3097
+3098
+3099
+3100
+3101
+3102
+3103
+3104
+3105
+3106
+3107
+3108
+3109
+3110
+3111
+3112
+3113
+3114
+3115
+3116
+3117
+3118
+3119
+3120
+3121
+3122
+3123
+3124
+3125
+3126
+3127
+3128
+3129
+3130
+3131
+3132
+3133
+3134
+3135
+3136
+3137
+3138
+3139
+3140
+3141
+3142
+3143
+3144
+3145
+3146
+3147
+3148
+3149
+3150
+3151
+3152
+3153
+3154
+3155
+3156
+3157
+3158
+3159
+3160
+3161
+3162
+3163
+3164
+3165
+3166
+3167
+3168
+3169
+3170
+3171
+3172
+3173
+3174
+3175
+3176
+3177
+3178
+3179
+3180
+3181
+3182
+3183
+3184
+3185
+3186
+3187
+3188
+3189
+3190
+3191
+3192
+3193
+3194
+3195
+3196
+3197
+3198
+3199
+3200
+3201
+3202
+3203
+3204
+3205
+3206
+3207
+3208
+3209
+3210
+3211
+3212
+3213
+3214
+3215
+3216
+3217
+3218
+3219
+3220
+3221
+3222
+3223
+3224
+3225
+3226
+3227
+3228
+3229
+3230
+3231
+3232
+3233
+3234
+3235
+3236
+3237
+3238
+3239
+3240
+3241
+3242
+3243
+3244
+3245
+3246
+3247
+3248
+3249
+3250
+3251
+3252
+3253
+3254
+3255
+3256
+3257
+3258
+3259
+3260
+3261
+3262
+3263
+3264
+3265
+3266
+3267
+3268
+3269
+3270
+3271
+3272
+3273
+3274
+3275
+3276
+3277
+3278
+3279
+3280
+3281
+3282
+3283
+3284
+3285
+3286
+3287
+3288
+3289
+3290
+3291
+3292
+3293
+3294
+3295
+3296
+3297
+3298
+3299
+3300
+3301
+3302
+3303
+3304
+3305
+3306
+3307
+3308
+3309
+3310
+3311
+3312
+3313
+3314
+3315
+3316
+3317
+3318
+3319
+3320
+3321
+3322
+3323
+3324
+3325
+3326
+3327
+3328
+3329
+3330
+3331
+3332
+3333
+3334
+3335
+3336
+3337
+3338
+3339
+3340
+3341
+3342
+3343
+3344
+3345
+3346
+3347
+3348
+3349
+3350
+3351
+3352
+3353
+3354
+3355
+3356
+3357
+3358
+3359
+3360
+3361
+3362
+3363
+3364
+3365
+3366
+3367
+3368
+3369
+3370
+3371
+3372
+3373
+3374
+3375
+3376
+3377
+3378
+3379
+3380
+3381
+3382
+3383
+3384
+3385
+3386
+3387
+3388
+3389
+3390
+3391
+3392
+3393
+3394
+3395
+3396
+3397
+3398
+3399
+3400
+3401
+3402
+3403
+3404
+3405
+3406
+3407
+3408
+3409
+3410
+3411
+3412
+3413
+3414
+3415
+3416
+3417
+3418
+3419
+3420
+3421
+3422
+3423
+3424
+3425
+3426
+3427
+3428
+3429
+3430
+3431
+3432
+3433
+3434
+3435
+3436
+3437
+3438
+3439
+3440
+3441
+3442
+3443
+3444
+3445
+3446
+3447
+3448
+3449
+3450
+3451
+3452
+3453
+3454
+3455
+3456
+3457
+3458
+3459
+3460
+3461
+3462
+3463
+3464
+3465
+3466
+3467
+3468
+3469
+3470
+3471
+3472
+3473
+3474
+3475
+3476
+3477
+3478
+3479
+3480
+3481
+3482
+3483
+3484
+3485
+3486
+3487
+3488
+3489
+3490
+3491
+3492
+3493
+3494
+3495
+3496
+3497
+3498
+3499
+3500
+3501
+3502
+3503
+3504
+3505
+3506
+3507
+3508
+3509
+3510
+3511
+3512
+3513
+3514
+3515
+3516
+3517
+3518
+3519
+3520
+3521
+3522
+3523
+3524
+3525
+3526
+3527
+3528
+3529
+3530
+3531
+3532
+3533
+3534
+3535
+3536
+3537
+3538
+3539
+3540
+3541
+3542
+3543
+3544
+3545
+3546
+3547
+3548
+3549
+3550
+3551
+3552
+3553
+3554
+3555
+3556
+3557
+3558
+3559
+3560
+3561
+3562
+3563
+3564
+3565
+3566
+3567
+3568
+3569
+3570
+3571
+3572
+3573
+3574
+3575
+3576
+3577
+3578
+3579
+3580
+3581
+3582
+3583
+3584
+3585
+3586
+3587
+3588
+3589
+3590
+3591
+3592
+3593
+3594
+3595
+3596
+3597
+3598
+3599
+3600
+3601
+3602
+3603
+3604
+3605
+3606
+3607
+3608
+3609
+3610
+3611
+3612
+3613
+3614
+3615
+3616
+3617
+3618
+3619
+3620
+3621
+3622
+3623
+3624
+3625
+3626
+3627
+3628
+3629
+3630
+3631
+3632
+3633
+3634
+3635
+3636
+3637
+3638
+3639
+3640
+3641
+3642
+3643
+3644
+3645
+3646
+3647
+3648
+3649
+3650
+3651
+3652
+3653
+3654
+3655
+3656
+3657
+3658
+3659
+3660
+3661
+3662
+3663
+3664
+3665
+3666
+3667
+3668
+3669
+3670
+3671
+3672
+3673
+3674
+3675
+3676
+3677
+3678
+3679
+3680
+3681
+3682
+3683
+3684
+3685
+3686
+3687
+3688
+3689
+3690
+3691
+3692
+3693
+3694
+3695
+3696
+3697
+3698
+3699
+3700
+3701
+3702
+3703
+3704
+3705
+3706
+3707
+3708
+3709
+3710
+3711
+3712
+3713
+3714
+3715
+3716
+3717
+3718
+3719
+3720
+3721
+3722
+3723
+3724
+3725
+3726
+3727
+3728
+3729
+3730
+3731
+3732
+3733
+3734
+3735
+3736
+3737
+3738
+3739
+3740
+3741
+3742
+3743
+3744
+3745
+3746
+3747
+3748
+3749
+3750
+3751
+3752
+3753
+3754
+3755
+3756
+3757
+3758
+3759
+3760
+3761
+3762
+3763
+3764
+3765
+3766
+3767
+3768
+3769
+3770
+3771
+3772
+3773
+3774
+3775
+3776
+3777
+3778
+3779
+3780
+3781
+3782
+3783
+3784
+3785
+3786
+3787
+3788
+3789
+3790
+3791
+3792
+3793
+3794
+3795
+3796
+3797
+3798
+3799
+3800
+3801
+3802
+3803
+3804
+3805
+3806
+3807
+3808
+3809
+3810
+3811
+3812
+3813
+3814
+3815
+3816
+3817
+3818
+3819
+3820
+3821
+3822
+3823
+3824
+3825
+3826
+3827
+3828
+3829
+3830
+3831
+3832
+3833
+3834
+3835
+3836
+3837
+3838
+3839
+3840
+3841
+3842
+3843
+3844
+3845
+3846
+3847
+3848
+3849
+3850
+3851
+3852
+3853
+3854
+3855
+3856
+3857
+3858
+3859
+3860
+3861
+3862
+3863
+3864
+3865
+3866
+3867
+3868
+3869
+3870
+3871
+3872
+3873
+3874
+3875
+3876
+3877
+3878
+3879
+3880
+3881
+3882
+3883
+3884
+3885
+3886
+3887
+3888
+3889
+3890
+3891
+3892
+3893
+3894
+3895
+3896
+3897
+3898
+3899
+3900
+3901
+3902
+3903
+3904
+3905
+3906
+3907
+3908
+3909
+3910
+3911
+3912
+3913
+3914
+3915
+3916
+3917
+3918
+3919
+3920
+3921
+3922
+3923
+3924
+3925
+3926
+3927
+3928
+3929
+3930
+3931
+3932
+3933
+3934
+3935
+3936
+3937
+3938
+3939
+3940
+3941
+3942
+3943
+3944
+3945
+3946
+3947
+3948
+3949
+3950
+3951
+3952
+3953
+3954
+3955
+3956
+3957
+3958
+3959
+3960
+3961
+3962
+3963
+3964
+3965
+3966
+3967
+3968
+3969
+3970
+3971
+3972
+3973
+3974
+3975
+3976
+3977
+3978
+3979
+3980
+3981
+3982
+3983
+3984
+3985
+3986
+3987
+3988
+3989
+3990
+3991
+3992
+3993
+3994
+3995
+3996
+3997
+3998
+3999
+4000
+4001
+4002
+4003
+4004
+4005
+4006
+4007
+4008
+4009
+4010
+4011
+4012
+4013
+4014
+4015
+4016
+4017
+4018
+4019
+4020
+4021
+4022
+4023
+4024
+4025
+4026
+4027
+4028
+4029
+4030
+4031
+4032
+4033
+4034
+4035
+4036
+4037
+4038
+4039
+4040
+4041
+4042
+4043
+4044
+4045
+4046
+4047
+4048
+4049
+4050
+4051
+4052
+4053
+4054
+4055
+4056
+4057
+4058
+4059
+4060
+4061
+4062
+4063
+4064
+4065
+4066
+4067
+4068
+4069
+4070
+4071
+4072
+4073
+4074
+4075
+4076
+4077
+4078
+4079
+4080
+4081
+4082
+4083
+4084
+4085
+4086
+4087
+4088
+4089
+4090
+4091
+4092
+4093
+4094
+4095
+4096
+4097
+4098
+4099
+4100
+4101
+4102
+4103
+4104
+4105
+4106
+4107
+4108
+4109
+4110
+4111
+4112
+4113
+4114
+4115
+4116
+4117
+4118
+4119
+4120
+4121
+4122
+4123
+4124
+4125
+4126
+4127
+4128
+4129
+4130
+4131
+4132
+4133
+4134
+4135
+4136
+4137
+4138
+4139
+4140
+4141
+4142
+4143
+4144
+4145
+4146
+4147
+4148
+4149
+4150
+4151
+4152
+4153
+4154
+4155
+4156
+4157
+4158
+4159
+4160
+4161
+4162
+4163
+4164
+4165
+4166
+4167
+4168
+4169
+4170
+4171
+4172
+4173
+4174
+4175
+4176
+4177
+4178
+4179
+4180
+4181
+4182
+4183
+4184
+4185
+4186
+4187
+4188
+4189
+4190
+4191
+4192
+4193
+4194
+4195
+4196
+4197
+4198
+4199
+4200
+4201
+4202
+4203
+4204
+4205
+4206
+4207
+4208
+4209
+4210
+4211
+4212
+4213
+4214
+4215
+4216
+4217
+4218
+4219
+4220
+4221
+4222
+4223
+4224
+4225
+4226
+4227
+4228
+4229
+4230
+4231
+4232
+4233
+4234
+4235
+4236
+4237
+4238
+4239
+4240
+4241
+4242
+4243
+4244
+4245
+4246
+4247
+4248
+4249
+4250
+4251
+4252
+4253
+4254
+4255
+4256
+4257
+4258
+4259
+4260
+4261
+4262
+4263
+4264
+4265
+4266
+4267
+4268
+4269
+4270
+4271
+4272
+4273
+4274
+4275
+4276
+4277
+4278
+4279
+4280
+4281
+4282
+4283
+4284
+4285
+4286
+4287
+4288
+4289
+4290
+4291
+4292
+4293
+4294
+4295
+4296
+4297
+4298
+4299
+4300
+4301
+4302
+4303
+4304
+4305
+4306
+4307
+4308
+4309
+4310
+4311
+4312
+4313
+4314
+4315
+4316
+4317
+4318
+4319
+4320
+4321
+4322
+4323
+4324
+4325
+4326
+4327
+4328
+4329
+4330
+4331
+4332
+4333
+4334
+4335
+4336
+4337
+4338
+4339
+4340
+4341
+4342
+4343
+4344
+4345
+4346
+4347
+4348
+4349
+4350
+4351
+4352
+4353
+4354
+4355
+4356
+4357
+4358
+4359
+4360
+4361
+4362
+4363
+4364
+4365
+4366
+4367
+4368
+4369
+4370
+4371
+4372
+4373
+4374
+4375
+4376
+4377
+4378
+4379
+4380
+4381
+4382
+4383
+4384
+4385
+4386
+4387
+4388
+4389
+4390
+4391
+4392
+4393
+4394
+4395
+4396
+4397
+4398
+4399
+4400
+4401
+4402
+4403
+4404
+4405
+4406
+4407
+4408
+4409
+4410
+4411
+4412
+4413
+4414
+4415
+4416
+4417
+4418
+4419
+4420
+4421
+4422
+4423
+4424
+4425
+4426
+4427
+4428
+4429
+4430
+4431
+4432
+4433
+4434
+4435
+4436
+4437
+4438
+4439
+4440
+4441
+4442
+4443
+4444
+4445
+4446
+4447
+4448
+4449
+4450
+4451
+4452
+4453
+4454
+4455
+4456
+4457
+4458
+4459
+4460
+4461
+4462
+4463
+4464
+4465
+4466
+4467
+4468
+4469
+4470
+4471
+4472
+4473
+4474
+4475
+4476
+4477
+4478
+4479
+4480
+4481
+4482
+4483
+4484
+4485
+4486
+4487
+4488
+4489
+4490
+4491
+4492
+4493
+4494
+4495
+4496
+4497
+4498
+4499
+4500
+4501
+4502
+4503
+4504
+4505
+4506
+4507
+4508
+4509
+4510
+4511
+4512
+4513
+4514
+4515
+4516
+4517
+4518
+4519
+4520
+4521
+4522
+4523
+4524
+4525
+4526
+4527
+4528
+4529
+4530
+4531
+4532
+4533
+4534
+4535
+4536
+4537
+4538
+4539
+4540
+4541
+4542
+4543
+4544
+4545
+4546
+4547
+4548
+4549
+4550
+4551
+4552
+4553
+4554
+4555
+4556
+4557
+4558
+4559
+4560
+4561
+4562
+4563
+4564
+4565
+4566
+4567
+4568
+4569
+4570
+4571
+4572
+4573
+4574
+4575
+4576
+4577
+4578
+4579
+4580
+4581
+4582
+4583
+4584
+4585
+4586
+4587
+4588
+4589
+4590
+4591
+4592
+4593
+4594
+4595
+4596
+4597
+4598
+4599
+4600
+4601
+4602
+4603
+4604
+4605
+4606
+4607
+4608
+4609
+4610
+4611
+4612
+4613
+4614
+4615
+4616
+4617
+4618
+4619
+4620
+4621
+4622
+4623
+4624
+4625
+4626
+4627
+4628
+4629
+4630
+4631
+4632
+4633
+4634
+4635
+4636
+4637
+4638
+4639
+4640
+4641
+4642
+4643
+4644
+4645
+4646
+4647
+4648
+4649
+4650
+4651
+4652
+4653
+4654
+4655
+4656
+4657
+4658
+4659
+4660
+4661
+4662
+4663
+4664
+4665
+4666
+4667
+4668
+4669
+4670
+4671
+4672
+4673
+4674
+4675
+4676
+4677
+4678
+4679
+4680
+4681
+4682
+4683
+4684
+4685
+4686
+4687
+4688
+4689
+4690
+4691
+4692
+4693
+4694
+4695
+4696
+4697
+4698
+4699
+4700
+4701
+4702
+4703
+4704
+4705
+4706
+4707
+4708
+4709
+4710
+4711
+4712
+4713
+4714
+4715
+4716
+4717
+4718
+4719
+4720
+4721
+4722
+4723
+4724
+4725
+4726
+4727
+4728
+4729
+4730
+4731
+4732
+4733
+4734
+4735
+4736
+4737
+4738
+4739
+4740
+4741
+4742
+4743
+4744
+4745
+4746
+4747
+4748
+4749
+4750
+4751
+4752
+4753
+4754
+4755
+4756
+4757
+4758
+4759
+4760
+4761
+4762
+4763
+4764
+4765
+4766
+4767
+4768
+4769
+4770
+4771
+4772
+4773
+4774
+4775
+4776
+4777
+4778
+4779
+4780
+4781
+4782
+4783
+4784
+4785
+4786
+4787
+4788
+4789
+4790
+4791
+4792
+4793
+4794
+4795
+4796
+4797
+4798
+4799
+4800
+4801
+4802
+4803
+4804
+4805
+4806
+4807
+4808
+4809
+4810
+4811
+4812
+4813
+4814
+4815
+4816
+4817
+4818
+4819
+4820
+4821
+4822
+4823
+4824
+4825
+4826
+4827
+4828
+4829
+4830
+4831
+4832
+4833
+4834
+4835
+4836
+4837
+4838
+4839
+4840
+4841
+4842
+4843
+4844
+4845
+4846
+4847
+4848
+4849
+4850
+4851
+4852
+4853
+4854
+4855
+4856
+4857
+4858
+4859
+4860
+4861
+4862
+4863
+4864
+4865
+4866
+4867
+4868
+4869
+4870
+4871
+4872
+4873
+4874
+4875
+4876
+4877
+4878
+4879
+4880
+4881
+4882
+4883
+4884
+4885
+4886
+4887
+4888
+4889
+4890
+4891
+4892
+4893
+4894
+4895
+4896
+4897
+4898
+4899
+4900
+4901
+4902
+4903
+4904
+4905
+4906
+4907
+4908
+4909
+4910
+4911
+4912
+4913
+4914
+4915
+4916
+4917
+4918
+4919
+4920
+4921
+4922
+4923
+4924
+4925
+4926
+4927
+4928
+4929
+4930
+4931
+4932
+4933
+4934
+4935
+4936
+4937
+4938
+4939
+4940
+4941
+4942
+4943
+4944
+4945
+4946
+4947
+4948
+4949
+4950
+4951
+4952
+4953
+4954
+4955
+4956
+4957
+4958
+4959
+4960
+4961
+4962
+4963
+4964
+4965
+4966
+4967
+4968
+4969
+4970
+4971
+4972
+4973
+4974
+4975
+4976
+4977
+4978
+4979
+4980
+4981
+4982
+4983
+4984
+4985
+4986
+4987
+4988
+4989
+4990
+4991
+4992
+4993
+4994
+4995
+4996
+4997
+4998
+4999
+5000
diff --git a/mysql-test/std_data/corrupt-relay-bin.000624 b/mysql-test/std_data/corrupt-relay-bin.000624
new file mode 100644
index 00000000000..21b4901211c
--- /dev/null
+++ b/mysql-test/std_data/corrupt-relay-bin.000624
Binary files differ
diff --git a/mysql-test/suite/binlog/r/binlog_base64_flag.result b/mysql-test/suite/binlog/r/binlog_base64_flag.result
new file mode 100644
index 00000000000..aa801346d9f
--- /dev/null
+++ b/mysql-test/suite/binlog/r/binlog_base64_flag.result
@@ -0,0 +1,60 @@
+==== Test BUG#32407 ====
+select * from t1;
+a
+1
+1
+==== Test BINLOG statement w/o FD event ====
+BINLOG '
+SVtYRxMBAAAAKQAAADQBAAAAABAAAAAAAAAABHRlc3QAAnQxAAEDAAE=
+SVtYRxcBAAAAIgAAAFYBAAAQABAAAAAAAAEAAf/+AgAAAA==
+';
+ERROR HY000: The BINLOG statement of type `Table_map` was not preceded by a format description BINLOG statement.
+select * from t1;
+a
+1
+1
+==== Test BINLOG statement with FD event ====
+BINLOG '
+ODdYRw8BAAAAZgAAAGoAAAABAAQANS4xLjIzLXJjLWRlYnVnLWxvZwAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAA4N1hHEzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC
+';
+BINLOG '
+TFtYRxMBAAAAKQAAAH8BAAAAABAAAAAAAAAABHRlc3QAAnQxAAEDAAE=
+TFtYRxcBAAAAIgAAAKEBAAAQABAAAAAAAAEAAf/+AwAAAA==
+';
+select * from t1;
+a
+1
+1
+3
+==== Test --base64-output=never on a binlog with row events ====
+/*!40019 SET @@session.max_insert_delayed_threads=0*/;
+/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
+DELIMITER /*!*/;
+# at 4
+#ROLLBACK/*!*/;
+# at 102
+#use test/*!*/;
+SET TIMESTAMP=1196959712/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1/*!*/;
+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) engine= myisam/*!*/;
+# at 203
+==== Test non-matching FD event and Row event ====
+BINLOG '
+4CdYRw8BAAAAYgAAAGYAAAAAAAQANS4xLjE1LW5kYi02LjEuMjQtZGVidWctbG9nAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAADgJ1hHEzgNAAgAEgAEBAQEEgAATwAEGggICAg=
+';
+BINLOG '
+Dl1YRxMBAAAAKQAAADQBAAAAABAAAAAAAAAABHRlc3QAAnQxAAEDAAE=
+Dl1YRxcBAAAAIgAAAFYBAAAQABAAAAAAAAEAAf/+BQAAAA==
+';
+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
+select * from t1;
+a
+1
+1
+3
+drop table t1;
diff --git a/mysql-test/suite/binlog/r/binlog_database.result b/mysql-test/suite/binlog/r/binlog_database.result
new file mode 100644
index 00000000000..7deffb86244
--- /dev/null
+++ b/mysql-test/suite/binlog/r/binlog_database.result
@@ -0,0 +1,56 @@
+set binlog_format=statement;
+reset master;
+create database testing_1;
+use testing_1;
+create table t1 (a int);
+create function sf1 (a int) returns int return a+1;
+create trigger tr1 before insert on t1 for each row insert into t2 values (2*new.a);
+create procedure sp1 (a int) insert into t1 values(a);
+drop database testing_1;
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # create database testing_1
+master-bin.000001 # Query # # use `testing_1`; create table t1 (a int)
+master-bin.000001 # Query # # use `testing_1`; CREATE DEFINER=`root`@`localhost` function sf1 (a int) returns int return a+1
+master-bin.000001 # Query # # use `testing_1`; CREATE DEFINER=`root`@`localhost` trigger tr1 before insert on t1 for each row insert into t2 values (2*new.a)
+master-bin.000001 # Query # # use `testing_1`; CREATE DEFINER=`root`@`localhost` procedure sp1 (a int) insert into t1 values(a)
+master-bin.000001 # Query # # drop database testing_1
+set binlog_format=mixed;
+reset master;
+create database testing_1;
+use testing_1;
+create table t1 (a int);
+create function sf1 (a int) returns int return a+1;
+create trigger tr1 before insert on t1 for each row insert into t2 values (2*new.a);
+create procedure sp1 (a int) insert into t1 values(a);
+drop database testing_1;
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # create database testing_1
+master-bin.000001 # Query # # use `testing_1`; create table t1 (a int)
+master-bin.000001 # Query # # use `testing_1`; CREATE DEFINER=`root`@`localhost` function sf1 (a int) returns int return a+1
+master-bin.000001 # Query # # use `testing_1`; CREATE DEFINER=`root`@`localhost` trigger tr1 before insert on t1 for each row insert into t2 values (2*new.a)
+master-bin.000001 # Query # # use `testing_1`; CREATE DEFINER=`root`@`localhost` procedure sp1 (a int) insert into t1 values(a)
+master-bin.000001 # Query # # drop database testing_1
+set binlog_format=row;
+reset master;
+create database testing_1;
+use testing_1;
+create table t1 (a int);
+create function sf1 (a int) returns int return a+1;
+create trigger tr1 before insert on t1 for each row insert into t2 values (2*new.a);
+create procedure sp1 (a int) insert into t1 values(a);
+drop database testing_1;
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # create database testing_1
+master-bin.000001 # Query # # use `testing_1`; create table t1 (a int)
+master-bin.000001 # Query # # use `testing_1`; CREATE DEFINER=`root`@`localhost` function sf1 (a int) returns int return a+1
+master-bin.000001 # Query # # use `testing_1`; CREATE DEFINER=`root`@`localhost` trigger tr1 before insert on t1 for each row insert into t2 values (2*new.a)
+master-bin.000001 # Query # # use `testing_1`; CREATE DEFINER=`root`@`localhost` procedure sp1 (a int) insert into t1 values(a)
+master-bin.000001 # Query # # drop database testing_1
+show databases;
+Database
+information_schema
+mysql
+test
diff --git a/mysql-test/suite/binlog/r/binlog_innodb.result b/mysql-test/suite/binlog/r/binlog_innodb.result
index 34538eb5215..896d8f734fc 100644
--- a/mysql-test/suite/binlog/r/binlog_innodb.result
+++ b/mysql-test/suite/binlog/r/binlog_innodb.result
@@ -66,6 +66,7 @@ COMMIT;
show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT PRIMARY KEY, b INT) ENGINE=INNODB
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6)
master-bin.000001 # Xid # # COMMIT /* XID */
master-bin.000001 # Query # # use `test`; BEGIN
diff --git a/mysql-test/suite/binlog/r/binlog_killed.result b/mysql-test/suite/binlog/r/binlog_killed.result
index ba4f38fb4c1..72fda535b6f 100644
--- a/mysql-test/suite/binlog/r/binlog_killed.result
+++ b/mysql-test/suite/binlog/r/binlog_killed.result
@@ -9,4 +9,135 @@ insert into t2 values (null, null), (null, get_lock("a", 10));
select @result /* must be zero either way */;
@result
0
+select RELEASE_LOCK("a");
+RELEASE_LOCK("a")
+1
+delete from t1;
+delete from t2;
+insert into t1 values (1,1),(2,2);
+begin;
+update t1 set b=11 where a=2;
+begin;
+update t1 set b=b+10;
+kill query ID;
+rollback;
+rollback;
+select * from t1 order by a /* must be the same as before (1,1),(2,2) */;
+a b
+1 1
+2 2
+begin;
+delete from t1 where a=2;
+begin;
+delete from t1 where a=2;
+kill query ID;
+rollback;
+rollback;
+select * from t1 order by a /* must be the same as before (1,1),(2,2) */;
+a b
+1 1
+2 2
+drop table if exists t4;
+create table t4 (a int, b int) engine=innodb;
+insert into t4 values (3, 3);
+begin;
+insert into t1 values (3, 3);
+begin;
+insert into t1 select * from t4 for update;
+kill query ID;
+rollback;
+rollback;
+select * from t1 /* must be the same as before (1,1),(2,2) */;
+a b
+1 1
+2 2
+drop table t4;
+create table t4 (a int, b int) ENGINE=MyISAM /* for killing update and delete */;
+create function bug27563(n int)
+RETURNS int(11)
+DETERMINISTIC
+begin
+if @b > 0 then
+select get_lock("a", 20) into @a;
+else
+set @b= 1;
+end if;
+return n;
+end|
+delete from t4;
+insert into t4 values (1,1), (1,1);
+reset master;
+select get_lock("a", 20);
+get_lock("a", 20)
+1
+set @b= 0;
+update t4 set b=b + bug27563(b);
+select count(*) FROM INFORMATION_SCHEMA.PROCESSLIST where state='User lock';
+count(*)
+1
+kill query ID;
+ERROR 70100: Query execution was interrupted
+select * from t4 order by b /* must be (1,1), (1,2) */;
+a b
+1 1
+1 2
+select @b /* must be 1 at the end of a stmt calling bug27563() */;
+@b
+1
+must have the update query event more to FD
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # User var # # @`b`=0
+master-bin.000001 # Query # # use `test`; update t4 set b=b + bug27563(b)
+select
+(@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
+is not null;
+(@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
+is not null
+1
+select 0 /* must return 0 to mean the killed query is in */;
+0
+0
+select RELEASE_LOCK("a");
+RELEASE_LOCK("a")
+1
+delete from t4;
+insert into t4 values (1,1), (2,2);
+reset master;
+select get_lock("a", 20);
+get_lock("a", 20)
+1
+set @b= 0;
+delete from t4 where b=bug27563(1) or b=bug27563(2);
+select count(*) FROM INFORMATION_SCHEMA.PROCESSLIST where state='User lock';
+count(*)
+1
+kill query ID;
+ERROR 70100: Query execution was interrupted
+select count(*) from t4 /* must be 1 */;
+count(*)
+1
+select @b /* must be 1 at the end of a stmt calling bug27563() */;
+@b
+1
+must have the delete query event more to FD
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # User var # # @`b`=0
+master-bin.000001 # Query # # use `test`; delete from t4 where b=bug27563(1) or b=bug27563(2)
+select
+(@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
+is not null;
+(@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
+is not null
+1
+select 0 /* must return 0 to mean the killed query is in */;
+0
+0
+select RELEASE_LOCK("a");
+RELEASE_LOCK("a")
+1
+drop table t4;
+drop function bug27563;
drop table t1,t2,t3;
+end of the tests
diff --git a/mysql-test/suite/binlog/r/binlog_killed_simulate.result b/mysql-test/suite/binlog/r/binlog_killed_simulate.result
new file mode 100644
index 00000000000..c0087316420
--- /dev/null
+++ b/mysql-test/suite/binlog/r/binlog_killed_simulate.result
@@ -0,0 +1,33 @@
+drop table if exists t1,t2;
+create table t1 (a int) engine=MyISAM;
+insert into t1 set a=1;
+reset master;
+update t1 set a=2 /* will be "killed" after work has been done */;
+select
+(@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
+is not null;
+(@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
+is not null
+1
+select 1 /* must return 1 as query completed before got killed*/;
+1
+1
+create table t2 (a int, b int) ENGINE=MyISAM;
+reset master;
+load data infile '../std_data_ln/rpl_loaddata.dat' into table t2 /* will be "killed" in the middle */;
+ERROR 70100: Query execution was interrupted
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=12
+master-bin.000001 # Execute_load_query # # use `test`; load data infile '../std_data_ln/rpl_loaddata.dat' into table t2 /* will be "killed" in the middle */ ;file_id=#
+select
+(@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
+is not null;
+(@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
+is not null
+1
+select 0 /* must return 0 to mean the killed query is in */;
+0
+0
+drop table t1,t2;
+end of the tests
diff --git a/mysql-test/suite/binlog/r/binlog_multi_engine.result b/mysql-test/suite/binlog/r/binlog_multi_engine.result
index 67c3412ec15..13227c5ecb1 100644
--- a/mysql-test/suite/binlog/r/binlog_multi_engine.result
+++ b/mysql-test/suite/binlog/r/binlog_multi_engine.result
@@ -18,8 +18,12 @@ TRUNCATE t1n;
show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Query # # use `test`; INSERT INTO t1m VALUES (1,1), (1,2), (2,1), (2,2)
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Query # # use `test`; INSERT INTO t1b VALUES (1,1), (1,2), (2,1), (2,2)
+master-bin.000001 # Query # # use `test`; COMMIT
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Query # # use `test`; UPDATE t1m, t1b SET m = 2, b = 3 WHERE n = c
+master-bin.000001 # Query # # use `test`; COMMIT
master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Query # # use `test`; INSERT INTO t1n VALUES (1,1), (1,2), (2,1), (2,2)
master-bin.000001 # Query # # use `test`; UPDATE t1m, t1n SET m = 2, e = 3 WHERE n = f
@@ -49,8 +53,12 @@ TRUNCATE t1n;
show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Query # # use `test`; INSERT INTO t1m VALUES (1,1), (1,2), (2,1), (2,2)
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Query # # use `test`; INSERT INTO t1b VALUES (1,1), (1,2), (2,1), (2,2)
+master-bin.000001 # Query # # use `test`; COMMIT
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Query # # use `test`; UPDATE t1m, t1b SET m = 2, b = 3 WHERE n = c
+master-bin.000001 # Query # # use `test`; COMMIT
master-bin.000001 # Query # # use `test`; TRUNCATE t1m
master-bin.000001 # Query # # use `test`; TRUNCATE t1b
master-bin.000001 # Query # # BEGIN
diff --git a/mysql-test/suite/binlog/r/binlog_old_versions.result b/mysql-test/suite/binlog/r/binlog_old_versions.result
new file mode 100644
index 00000000000..a514f9278a6
--- /dev/null
+++ b/mysql-test/suite/binlog/r/binlog_old_versions.result
@@ -0,0 +1,61 @@
+DROP TABLE IF EXISTS t1, t2, t3;
+==== Read modern binlog (version 5.1.23) ====
+SELECT * FROM t1 ORDER BY a;
+a b
+0 last_insert_id
+1 one
+3 last stm in trx: next event should be xid
+4 four
+674568 random
+SELECT * FROM t2 ORDER BY a;
+a b
+3 first stm in trx
+SELECT COUNT(*) FROM t3;
+COUNT(*)
+17920
+DROP TABLE t1, t2, t3;
+==== Read binlog from version 5.1.17 ====
+SELECT * FROM t1 ORDER BY a;
+a b
+0 last_insert_id
+1 one
+3 last stm in trx: next event should be xid
+4 four
+764247 random
+SELECT * FROM t2 ORDER BY a;
+a b
+3 first stm in trx
+SELECT COUNT(*) FROM t3;
+COUNT(*)
+17920
+DROP TABLE t1, t2, t3;
+==== Read binlog from alcatel tree (mysql-5.1-wl2325-5.0-drop6) ====
+SELECT * FROM t1 ORDER BY a;
+a b
+0 last_insert_id
+1 one
+3 last stm in trx: next event should be xid
+4 four
+781729 random
+SELECT * FROM t2 ORDER BY a;
+a b
+3 first stm in trx
+SELECT COUNT(*) FROM t3;
+COUNT(*)
+17920
+DROP TABLE t1, t2, t3;
+==== Read binlog from ndb tree (mysql-5.1-telco-6.1) ====
+SELECT * FROM t1 ORDER BY a;
+a b
+0 last_insert_id
+1 one
+3 last stm in trx: next event should be xid
+4 four
+703356 random
+SELECT * FROM t2 ORDER BY a;
+a b
+3 first stm in trx
+SELECT COUNT(*) FROM t3;
+COUNT(*)
+17920
+DROP TABLE t1, t2, t3;
diff --git a/mysql-test/suite/binlog/r/binlog_row_binlog.result b/mysql-test/suite/binlog/r/binlog_row_binlog.result
index fd91f65bbb5..6c5c149d48e 100644
--- a/mysql-test/suite/binlog/r/binlog_row_binlog.result
+++ b/mysql-test/suite/binlog/r/binlog_row_binlog.result
@@ -1099,9 +1099,11 @@ master-bin.000001 # Table_map # # table_id: # (test.t1)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
master-bin.000001 # Query # # use `test`; drop table t1
master-bin.000001 # Query # # use `test`; create table t1 (a int)
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Query # # use `test`; CREATE TABLE IF NOT EXISTS `t2` (
`a` int(11) DEFAULT NULL
)
+master-bin.000001 # Query # # use `test`; COMMIT
master-bin.000001 # Query # # use `test`; CREATE TABLE IF NOT EXISTS `t3` (
`a` int(11) DEFAULT NULL
)
@@ -1124,9 +1126,11 @@ master-bin.000001 # Table_map # # table_id: # (test.t1)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
master-bin.000001 # Query # # use `test`; drop table t1
master-bin.000001 # Query # # use `test`; create table t1 (a int)
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Query # # use `test`; CREATE TABLE IF NOT EXISTS `t2` (
`a` int(11) DEFAULT NULL
)
+master-bin.000001 # Query # # use `test`; COMMIT
master-bin.000001 # Query # # use `test`; CREATE TABLE IF NOT EXISTS `t3` (
`a` int(11) DEFAULT NULL
)
diff --git a/mysql-test/suite/binlog/r/binlog_row_ctype_cp932.result b/mysql-test/suite/binlog/r/binlog_row_ctype_cp932.result
index ef9f76b7d9c..655100203b5 100644
--- a/mysql-test/suite/binlog/r/binlog_row_ctype_cp932.result
+++ b/mysql-test/suite/binlog/r/binlog_row_ctype_cp932.result
@@ -2,6 +2,80 @@ drop table if exists t1;
drop table if exists t2;
drop table if exists t3;
drop table if exists t4;
+SET @test_character_set= 'cp932';
+SET @test_collation= 'cp932_japanese_ci';
+SET @safe_character_set_server= @@character_set_server;
+SET @safe_collation_server= @@collation_server;
+SET character_set_server= @test_character_set;
+SET collation_server= @test_collation;
+CREATE DATABASE d1;
+USE d1;
+CREATE TABLE t1 (c CHAR(10), KEY(c));
+SHOW FULL COLUMNS FROM t1;
+Field Type Collation Null Key Default Extra Privileges Comment
+c char(10) cp932_japanese_ci YES MUL NULL
+INSERT INTO t1 VALUES ('aaa'),('aaaa'),('aaaaa');
+SELECT c as want3results FROM t1 WHERE c LIKE 'aaa%';
+want3results
+aaa
+aaaa
+aaaaa
+DROP TABLE t1;
+CREATE TABLE t1 (c1 varchar(15), KEY c1 (c1(2)));
+SHOW FULL COLUMNS FROM t1;
+Field Type Collation Null Key Default Extra Privileges Comment
+c1 varchar(15) cp932_japanese_ci YES MUL NULL
+INSERT INTO t1 VALUES ('location'),('loberge'),('lotre'),('boabab');
+SELECT c1 as want3results from t1 where c1 like 'l%';
+want3results
+location
+loberge
+lotre
+SELECT c1 as want3results from t1 where c1 like 'lo%';
+want3results
+location
+loberge
+lotre
+SELECT c1 as want1result from t1 where c1 like 'loc%';
+want1result
+location
+SELECT c1 as want1result from t1 where c1 like 'loca%';
+want1result
+location
+SELECT c1 as want1result from t1 where c1 like 'locat%';
+want1result
+location
+SELECT c1 as want1result from t1 where c1 like 'locati%';
+want1result
+location
+SELECT c1 as want1result from t1 where c1 like 'locatio%';
+want1result
+location
+SELECT c1 as want1result from t1 where c1 like 'location%';
+want1result
+location
+DROP TABLE t1;
+create table t1 (a set('a') not null);
+insert into t1 values (),();
+Warnings:
+Warning 1364 Field 'a' doesn't have a default value
+select cast(a as char(1)) from t1;
+cast(a as char(1))
+
+
+select a sounds like a from t1;
+a sounds like a
+1
+1
+select 1 from t1 order by cast(a as char(1));
+1
+1
+1
+drop table t1;
+DROP DATABASE d1;
+USE test;
+SET character_set_server= @safe_character_set_server;
+SET collation_server= @safe_collation_server;
set names cp932;
set character_set_database = cp932;
CREATE TABLE t1(c1 CHAR(1)) DEFAULT CHARACTER SET = cp932;
diff --git a/mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result b/mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result
index 6ac942176c7..63bab2c1169 100644
--- a/mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result
+++ b/mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result
@@ -113,6 +113,7 @@ insert into t1 values(9);
insert into t2 select * from t1;
show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Table_map # # table_id: # (test.t1)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
master-bin.000001 # Xid # # COMMIT /* XID */
@@ -126,6 +127,7 @@ begin;
insert into t2 select * from t1;
show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Table_map # # table_id: # (test.t1)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
master-bin.000001 # Xid # # COMMIT /* XID */
@@ -135,6 +137,7 @@ insert into t1 values(11);
commit;
show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Table_map # # table_id: # (test.t1)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
master-bin.000001 # Xid # # COMMIT /* XID */
@@ -260,10 +263,12 @@ master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
master-bin.000001 # Table_map # # table_id: # (test.t1)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
master-bin.000001 # Xid # # COMMIT /* XID */
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Table_map # # table_id: # (test.t1)
master-bin.000001 # Delete_rows # # table_id: # flags: STMT_END_F
master-bin.000001 # Xid # # COMMIT /* XID */
master-bin.000001 # Query # # use `test`; alter table t2 engine=MyISAM
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Table_map # # table_id: # (test.t1)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
master-bin.000001 # Xid # # COMMIT /* XID */
@@ -366,6 +371,7 @@ master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS t2
master-bin.000001 # Query # # use `test`; CREATE TABLE t2 (a int, b int, primary key (a)) engine=innodb
master-bin.000001 # Table_map # # table_id: # (test.t1)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Query # # use `test`; TRUNCATE table t2
master-bin.000001 # Xid # # COMMIT /* XID */
master-bin.000001 # Table_map # # table_id: # (test.t1)
@@ -383,6 +389,7 @@ master-bin.000001 # Table_map # # table_id: # (test.t1)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
master-bin.000001 # Table_map # # table_id: # (test.t1)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Query # # use `test`; TRUNCATE table t2
master-bin.000001 # Xid # # COMMIT /* XID */
master-bin.000001 # Table_map # # table_id: # (test.t1)
@@ -408,8 +415,492 @@ is not null;
is not null
1
select
-@a like "%#%error_code=0%ROLLBACK/*!*/;%ROLLBACK /* added by mysqlbinlog */;%",
+@a like "%#%error_code=0%ROLLBACK\n/*!*/;%ROLLBACK /* added by mysqlbinlog */;%" OR
+@a like "%#%error_code=0%ROLLBACK\r\n/*!*/;%ROLLBACK /* added by mysqlbinlog */;%",
@a not like "%#%error_code=%error_code=%";
-@a like "%#%error_code=0%ROLLBACK/*!*/;%ROLLBACK /* added by mysqlbinlog */;%" @a not like "%#%error_code=%error_code=%"
+@a like "%#%error_code=0%ROLLBACK\n/*!*/;%ROLLBACK /* added by mysqlbinlog */;%" OR
+@a like "%#%error_code=0%ROLLBACK\r\n/*!*/;%ROLLBACK /* added by mysqlbinlog */;%" @a not like "%#%error_code=%error_code=%"
1 1
drop table t1, t2;
+create temporary table tt (a int unique);
+create table ti (a int) engine=innodb;
+reset master;
+begin;
+insert into ti values (1);
+insert into ti values (2) ;
+insert into tt select * from ti;
+rollback;
+Warnings:
+Warning 1196 Some non-transactional changed tables couldn't be rolled back
+select count(*) from tt /* 2 */;
+count(*)
+2
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; BEGIN
+master-bin.000001 # Table_map # # table_id: # (test.ti)
+master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Table_map # # table_id: # (test.ti)
+master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # use `test`; ROLLBACK
+select count(*) from ti /* zero */;
+count(*)
+0
+insert into ti select * from tt;
+select * from ti /* that is what slave would miss - a bug */;
+a
+1
+2
+delete from ti;
+delete from tt where a=1;
+reset master;
+begin;
+insert into ti values (1);
+insert into ti values (2) /* to make the dup error in the following */;
+insert into tt select * from ti /* one affected and error */;
+ERROR 23000: Duplicate entry '2' for key 'a'
+rollback;
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+select count(*) from ti /* zero */;
+count(*)
+0
+insert into ti select * from tt;
+select * from tt /* that is what otherwise slave missed - the bug */;
+a
+1
+2
+drop table ti, tt;
+drop function if exists bug27417;
+drop table if exists t1,t2;
+CREATE TABLE t1 (a int NOT NULL auto_increment primary key) ENGINE=MyISAM;
+CREATE TABLE t2 (a int NOT NULL auto_increment, PRIMARY KEY (a));
+create function bug27417(n int)
+RETURNS int(11)
+begin
+insert into t1 values (null);
+return n;
+end|
+reset master;
+insert into t2 values (bug27417(1));
+insert into t2 select bug27417(2);
+reset master;
+insert into t2 values (bug27417(2));
+ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Table_map # # table_id: # (test.t2)
+master-bin.000001 # Table_map # # table_id: # (test.t1)
+master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+/* only (!) with fixes for #23333 will show there is the query */;
+select count(*) from t1 /* must be 3 */;
+count(*)
+3
+reset master;
+select count(*) from t2;
+count(*)
+2
+delete from t2 where a=bug27417(3);
+select count(*) from t2 /* nothing got deleted */;
+count(*)
+2
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Table_map # # table_id: # (test.t2)
+master-bin.000001 # Table_map # # table_id: # (test.t1)
+master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+/* the query must be in regardless of #23333 */;
+select count(*) from t1 /* must be 5 */;
+count(*)
+5
+delete t2 from t2 where t2.a=bug27417(100) /* must not affect t2 */;
+affected rows: 0
+select count(*) from t1 /* must be 7 */;
+count(*)
+7
+drop table t1,t2;
+CREATE TABLE t1 (a int NOT NULL auto_increment primary key) ENGINE=MyISAM;
+CREATE TABLE t2 (a int, PRIMARY KEY (a)) ENGINE=InnoDB;
+CREATE TABLE t3 (a int, PRIMARY KEY (a), b int unique) ENGINE=MyISAM;
+CREATE TABLE t4 (a int, PRIMARY KEY (a), b int unique) ENGINE=Innodb;
+CREATE TABLE t5 (a int, PRIMARY KEY (a)) ENGINE=InnoDB;
+insert into t2 values (1);
+reset master;
+insert into t2 values (bug27417(1));
+ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; BEGIN
+master-bin.000001 # Table_map # # table_id: # (test.t2)
+master-bin.000001 # Table_map # # table_id: # (test.t1)
+master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # use `test`; ROLLBACK
+/* the output must denote there is the query */;
+select count(*) from t1 /* must be 1 */;
+count(*)
+1
+delete from t1;
+delete from t2;
+insert into t2 values (2);
+reset master;
+insert into t2 select bug27417(1) union select bug27417(2);
+ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; BEGIN
+master-bin.000001 # Table_map # # table_id: # (test.t2)
+master-bin.000001 # Table_map # # table_id: # (test.t1)
+master-bin.000001 # Write_rows # # table_id: #
+master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # use `test`; ROLLBACK
+/* the output must denote there is the query */;
+select count(*) from t1 /* must be 2 */;
+count(*)
+2
+delete from t1;
+insert into t3 values (1,1),(2,3),(3,4);
+reset master;
+update t3 set b=b+bug27417(1);
+ERROR 23000: Duplicate entry '4' for key 'b'
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Table_map # # table_id: # (test.t3)
+master-bin.000001 # Table_map # # table_id: # (test.t1)
+master-bin.000001 # Write_rows # # table_id: #
+master-bin.000001 # Update_rows # # table_id: #
+master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+/* the output must denote there is the query */;
+select count(*) from t1 /* must be 2 */;
+count(*)
+2
+delete from t3;
+delete from t4;
+insert into t3 values (1,1);
+insert into t4 values (1,1),(2,2);
+reset master;
+UPDATE t4,t3 SET t4.a=t3.a + bug27417(1) /* top level non-ta table */;
+ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; BEGIN
+master-bin.000001 # Table_map # # table_id: # (test.t4)
+master-bin.000001 # Table_map # # table_id: # (test.t1)
+master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # use `test`; ROLLBACK
+/* the output must denote there is the query */;
+select count(*) from t1 /* must be 4 */;
+count(*)
+4
+delete from t1;
+delete from t3;
+delete from t4;
+insert into t3 values (1,1),(2,2);
+insert into t4 values (1,1),(2,2);
+reset master;
+UPDATE t3,t4 SET t3.a=t4.a + bug27417(1);
+ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
+select count(*) from t1 /* must be 1 */;
+count(*)
+2
+drop table t4;
+delete from t1;
+delete from t2;
+delete from t3;
+insert into t2 values (1);
+insert into t3 values (1,1);
+create trigger trg_del before delete on t2 for each row
+insert into t3 values (bug27417(1), 2);
+reset master;
+delete from t2;
+ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; BEGIN
+master-bin.000001 # Table_map # # table_id: # (test.t2)
+master-bin.000001 # Table_map # # table_id: # (test.t3)
+master-bin.000001 # Table_map # # table_id: # (test.t1)
+master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # use `test`; ROLLBACK
+/* the output must denote there is the query */;
+select count(*) from t1 /* must be 1 */;
+count(*)
+1
+drop trigger trg_del;
+delete from t1;
+delete from t2;
+delete from t5;
+create trigger trg_del_t2 after delete on t2 for each row
+insert into t1 values (1);
+insert into t2 values (2),(3);
+insert into t5 values (1),(2);
+reset master;
+delete t2.* from t2,t5 where t2.a=t5.a + 1;
+ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; BEGIN
+master-bin.000001 # Table_map # # table_id: # (test.t2)
+master-bin.000001 # Table_map # # table_id: # (test.t1)
+master-bin.000001 # Delete_rows # # table_id: #
+master-bin.000001 # Write_rows # # table_id: #
+master-bin.000001 # Delete_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # use `test`; ROLLBACK
+/* the output must denote there is the query */;
+select count(*) from t1 /* must be 1 */;
+count(*)
+1
+delete from t1;
+create table t4 (a int default 0, b int primary key) engine=innodb;
+insert into t4 values (0, 17);
+reset master;
+load data infile '../std_data_ln/rpl_loaddata.dat' into table t4 (a, @b) set b= @b + bug27417(2);
+ERROR 23000: Duplicate entry '17' for key 'PRIMARY'
+select * from t4;
+a b
+0 17
+select count(*) from t1 /* must be 2 */;
+count(*)
+2
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; BEGIN
+master-bin.000001 # Table_map # # table_id: # (test.t4)
+master-bin.000001 # Table_map # # table_id: # (test.t1)
+master-bin.000001 # Write_rows # # table_id: #
+master-bin.000001 # Write_rows # # table_id: #
+master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # use `test`; ROLLBACK
+/* the output must denote there is the query */;
+drop trigger trg_del_t2;
+drop table t1,t2,t3,t4,t5;
+drop function bug27417;
+end of tests
+create temporary table tt (a int unique);
+create table ti (a int) engine=innodb;
+reset master;
+begin;
+insert into ti values (1);
+insert into ti values (2) ;
+insert into tt select * from ti;
+rollback;
+Warnings:
+Warning 1196 Some non-transactional changed tables couldn't be rolled back
+select count(*) from tt /* 2 */;
+count(*)
+2
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; BEGIN
+master-bin.000001 # Table_map # # table_id: # (test.ti)
+master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Table_map # # table_id: # (test.ti)
+master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # use `test`; ROLLBACK
+select count(*) from ti /* zero */;
+count(*)
+0
+insert into ti select * from tt;
+select * from ti /* that is what slave would miss - bug#28960 */;
+a
+1
+2
+delete from ti;
+delete from tt where a=1;
+reset master;
+begin;
+insert into ti values (1);
+insert into ti values (2) /* to make the dup error in the following */;
+insert into tt select * from ti /* one affected and error */;
+ERROR 23000: Duplicate entry '2' for key 'a'
+rollback;
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+select count(*) from ti /* zero */;
+count(*)
+0
+insert into ti select * from tt;
+select * from tt /* that is what otherwise slave missed - the bug */;
+a
+1
+2
+drop table ti;
+drop function if exists bug27417;
+drop table if exists t1,t2;
+CREATE TABLE t1 (a int NOT NULL auto_increment primary key) ENGINE=MyISAM;
+CREATE TABLE t2 (a int NOT NULL auto_increment, PRIMARY KEY (a));
+create function bug27417(n int)
+RETURNS int(11)
+begin
+insert into t1 values (null);
+return n;
+end|
+reset master;
+insert into t2 values (bug27417(1));
+insert into t2 select bug27417(2);
+reset master;
+insert into t2 values (bug27417(2));
+ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Intvar # # INSERT_ID=3
+master-bin.000001 # Query # # use `test`; insert into t2 values (bug27417(2))
+select count(*) from t1 /* must be 3 */;
+count(*)
+3
+reset master;
+select count(*) from t2;
+count(*)
+2
+delete from t2 where a=bug27417(3);
+select count(*) from t2 /* nothing got deleted */;
+count(*)
+2
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Intvar # # INSERT_ID=4
+master-bin.000001 # Query # # use `test`; delete from t2 where a=bug27417(3)
+select count(*) from t1 /* must be 5 */;
+count(*)
+5
+delete t2 from t2 where t2.a=bug27417(100) /* must not affect t2 */;
+affected rows: 0
+select count(*) from t1 /* must be 7 */;
+count(*)
+7
+drop table t1,t2;
+CREATE TABLE t1 (a int NOT NULL auto_increment primary key) ENGINE=MyISAM;
+CREATE TABLE t2 (a int, PRIMARY KEY (a)) ENGINE=InnoDB;
+CREATE TABLE t3 (a int, PRIMARY KEY (a), b int unique) ENGINE=MyISAM;
+CREATE TABLE t4 (a int, PRIMARY KEY (a), b int unique) ENGINE=Innodb;
+CREATE TABLE t5 (a int, PRIMARY KEY (a)) ENGINE=InnoDB;
+insert into t2 values (1);
+reset master;
+insert into t2 values (bug27417(1));
+ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; BEGIN
+master-bin.000001 # Intvar # # INSERT_ID=1
+master-bin.000001 # Query # # use `test`; insert into t2 values (bug27417(1))
+master-bin.000001 # Query # # use `test`; ROLLBACK
+select count(*) from t1 /* must be 1 */;
+count(*)
+1
+delete from t1;
+delete from t2;
+insert into t2 values (2);
+reset master;
+insert into t2 select bug27417(1) union select bug27417(2);
+ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; BEGIN
+master-bin.000001 # Intvar # # INSERT_ID=2
+master-bin.000001 # Query # # use `test`; insert into t2 select bug27417(1) union select bug27417(2)
+master-bin.000001 # Query # # use `test`; ROLLBACK
+select count(*) from t1 /* must be 2 */;
+count(*)
+2
+delete from t1;
+insert into t3 values (1,1),(2,3),(3,4);
+reset master;
+update t3 set b=b+bug27417(1);
+ERROR 23000: Duplicate entry '4' for key 'b'
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Intvar # # INSERT_ID=4
+master-bin.000001 # Query # # use `test`; update t3 set b=b+bug27417(1)
+select count(*) from t1 /* must be 2 */;
+count(*)
+2
+delete from t3;
+delete from t4;
+insert into t3 values (1,1);
+insert into t4 values (1,1),(2,2);
+reset master;
+UPDATE t4,t3 SET t4.a=t3.a + bug27417(1) /* top level non-ta table */;
+ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; BEGIN
+master-bin.000001 # Intvar # # INSERT_ID=6
+master-bin.000001 # Query # # use `test`; UPDATE t4,t3 SET t4.a=t3.a + bug27417(1) /* top level non-ta table */
+master-bin.000001 # Query # # use `test`; ROLLBACK
+select count(*) from t1 /* must be 4 */;
+count(*)
+4
+delete from t1;
+delete from t3;
+delete from t4;
+insert into t3 values (1,1),(2,2);
+insert into t4 values (1,1),(2,2);
+reset master;
+UPDATE t3,t4 SET t3.a=t4.a + bug27417(1);
+ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
+select count(*) from t1 /* must be 1 */;
+count(*)
+1
+drop table t4;
+delete from t1;
+delete from t2;
+delete from t3;
+insert into t2 values (1);
+insert into t3 values (1,1);
+create trigger trg_del before delete on t2 for each row
+insert into t3 values (bug27417(1), 2);
+reset master;
+delete from t2;
+ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; BEGIN
+master-bin.000001 # Intvar # # INSERT_ID=9
+master-bin.000001 # Query # # use `test`; delete from t2
+master-bin.000001 # Query # # use `test`; ROLLBACK
+select count(*) from t1 /* must be 1 */;
+count(*)
+1
+drop trigger trg_del;
+delete from t1;
+delete from t2;
+delete from t5;
+create trigger trg_del_t2 after delete on t2 for each row
+insert into t1 values (1);
+insert into t2 values (2),(3);
+insert into t5 values (1),(2);
+reset master;
+delete t2.* from t2,t5 where t2.a=t5.a + 1;
+ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; BEGIN
+master-bin.000001 # Query # # use `test`; delete t2.* from t2,t5 where t2.a=t5.a + 1
+master-bin.000001 # Query # # use `test`; ROLLBACK
+select count(*) from t1 /* must be 1 */;
+count(*)
+1
+delete from t1;
+create table t4 (a int default 0, b int primary key) engine=innodb;
+insert into t4 values (0, 17);
+reset master;
+load data infile '../std_data_ln/rpl_loaddata.dat' into table t4 (a, @b) set b= @b + bug27417(2);
+ERROR 23000: Duplicate entry '17' for key 'PRIMARY'
+select * from t4;
+a b
+0 17
+select count(*) from t1 /* must be 2 */;
+count(*)
+2
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; BEGIN
+master-bin.000001 # Intvar # # INSERT_ID=10
+master-bin.000001 # User var # # @`b`=_latin1 0x3135 COLLATE latin1_swedish_ci
+master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=12
+master-bin.000001 # Intvar # # INSERT_ID=10
+master-bin.000001 # User var # # @`b`=_latin1 0x3135 COLLATE latin1_swedish_ci
+master-bin.000001 # Execute_load_query # # use `test`; load data infile '../std_data_ln/rpl_loaddata.dat' into table t4 (a, @b) set b= @b + bug27417(2) ;file_id=#
+master-bin.000001 # Query # # use `test`; ROLLBACK
+drop trigger trg_del_t2;
+drop table t1,t2,t3,t4,t5;
+drop function bug27417;
diff --git a/mysql-test/suite/binlog/r/binlog_start_comment.result b/mysql-test/suite/binlog/r/binlog_start_comment.result
new file mode 100644
index 00000000000..162968195f2
--- /dev/null
+++ b/mysql-test/suite/binlog/r/binlog_start_comment.result
@@ -0,0 +1,15 @@
+reset master;
+drop table if exists t1,t2;
+create table t1 (word varchar(20)) -- create table t1;
+create table t2 (word varchar(20)) -- create table t2;
+load data infile '../std_data_ln/words.dat' into table t1 -- load data to t1;
+insert into t2 values ("Ada");
+flush logs;
+select * from t2;
+word
+Ada
+flush logs;
+select * from t2;
+word
+Ada
+drop table t1,t2;
diff --git a/mysql-test/suite/binlog/r/binlog_stm_blackhole.result b/mysql-test/suite/binlog/r/binlog_stm_blackhole.result
index a1c83ffc73d..20e9bf6283e 100644
--- a/mysql-test/suite/binlog/r/binlog_stm_blackhole.result
+++ b/mysql-test/suite/binlog/r/binlog_stm_blackhole.result
@@ -104,26 +104,44 @@ select * from t2;
a
select * from t3;
a
-show binlog events from <binlog_start>;
+show binlog events;
Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Format_desc # # Server ver: VERSION, Binlog ver: 4
master-bin.000001 # Query # # use `test`; drop table t1,t2
master-bin.000001 # Query # # use `test`; create table t1 (a int) engine=blackhole
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Query # # use `test`; delete from t1 where a=10
+master-bin.000001 # Query # # use `test`; COMMIT
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Query # # use `test`; update t1 set a=11 where a=15
+master-bin.000001 # Query # # use `test`; COMMIT
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Query # # use `test`; insert into t1 values(1)
+master-bin.000001 # Query # # use `test`; COMMIT
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Query # # use `test`; insert ignore into t1 values(1)
+master-bin.000001 # Query # # use `test`; COMMIT
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Query # # use `test`; replace into t1 values(100)
+master-bin.000001 # Query # # use `test`; COMMIT
master-bin.000001 # Query # # use `test`; create table t2 (a varchar(200)) engine=blackhole
-master-bin.000001 # Begin_load_query # # ;file_id=1;block_len=581
-master-bin.000001 # Execute_load_query # # use `test`; load data infile '../std_data_ln/words.dat' into table t2 ;file_id=1
+master-bin.000001 # Query # # use `test`; BEGIN
+master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=581
+master-bin.000001 # Execute_load_query # # use `test`; load data infile '../std_data_ln/words.dat' into table t2 ;file_id=#
+master-bin.000001 # Query # # use `test`; COMMIT
master-bin.000001 # Query # # use `test`; alter table t1 add b int
master-bin.000001 # Query # # use `test`; alter table t1 drop b
master-bin.000001 # Query # # use `test`; create table t3 like t1
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Query # # use `test`; insert into t1 select * from t3
+master-bin.000001 # Query # # use `test`; COMMIT
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Query # # use `test`; replace into t1 select * from t3
+master-bin.000001 # Query # # use `test`; COMMIT
drop table t1,t2,t3;
CREATE TABLE t1(a INT) ENGINE=BLACKHOLE;
INSERT DELAYED INTO t1 VALUES(1);
+ERROR HY000: Binary logging not possible. Message: Row-based format required for this statement, but not allowed by this combination of engines
DROP TABLE t1;
CREATE TABLE t1(a INT, b INT) ENGINE=BLACKHOLE;
DELETE FROM t1 WHERE a=10;
@@ -146,8 +164,9 @@ start transaction;
insert into t1 values(2);
rollback;
set autocommit=1;
-show binlog events from <binlog_start>;
+show binlog events;
Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Format_desc # # Server ver: VERSION, Binlog ver: 4
master-bin.000001 # Query # # use `test`; create table t1 (a int) engine=blackhole
master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Query # # use `test`; insert into t1 values(1)
diff --git a/mysql-test/suite/binlog/r/binlog_stm_ctype_cp932.result b/mysql-test/suite/binlog/r/binlog_stm_ctype_cp932.result
index ef9f76b7d9c..655100203b5 100755
--- a/mysql-test/suite/binlog/r/binlog_stm_ctype_cp932.result
+++ b/mysql-test/suite/binlog/r/binlog_stm_ctype_cp932.result
@@ -2,6 +2,80 @@ drop table if exists t1;
drop table if exists t2;
drop table if exists t3;
drop table if exists t4;
+SET @test_character_set= 'cp932';
+SET @test_collation= 'cp932_japanese_ci';
+SET @safe_character_set_server= @@character_set_server;
+SET @safe_collation_server= @@collation_server;
+SET character_set_server= @test_character_set;
+SET collation_server= @test_collation;
+CREATE DATABASE d1;
+USE d1;
+CREATE TABLE t1 (c CHAR(10), KEY(c));
+SHOW FULL COLUMNS FROM t1;
+Field Type Collation Null Key Default Extra Privileges Comment
+c char(10) cp932_japanese_ci YES MUL NULL
+INSERT INTO t1 VALUES ('aaa'),('aaaa'),('aaaaa');
+SELECT c as want3results FROM t1 WHERE c LIKE 'aaa%';
+want3results
+aaa
+aaaa
+aaaaa
+DROP TABLE t1;
+CREATE TABLE t1 (c1 varchar(15), KEY c1 (c1(2)));
+SHOW FULL COLUMNS FROM t1;
+Field Type Collation Null Key Default Extra Privileges Comment
+c1 varchar(15) cp932_japanese_ci YES MUL NULL
+INSERT INTO t1 VALUES ('location'),('loberge'),('lotre'),('boabab');
+SELECT c1 as want3results from t1 where c1 like 'l%';
+want3results
+location
+loberge
+lotre
+SELECT c1 as want3results from t1 where c1 like 'lo%';
+want3results
+location
+loberge
+lotre
+SELECT c1 as want1result from t1 where c1 like 'loc%';
+want1result
+location
+SELECT c1 as want1result from t1 where c1 like 'loca%';
+want1result
+location
+SELECT c1 as want1result from t1 where c1 like 'locat%';
+want1result
+location
+SELECT c1 as want1result from t1 where c1 like 'locati%';
+want1result
+location
+SELECT c1 as want1result from t1 where c1 like 'locatio%';
+want1result
+location
+SELECT c1 as want1result from t1 where c1 like 'location%';
+want1result
+location
+DROP TABLE t1;
+create table t1 (a set('a') not null);
+insert into t1 values (),();
+Warnings:
+Warning 1364 Field 'a' doesn't have a default value
+select cast(a as char(1)) from t1;
+cast(a as char(1))
+
+
+select a sounds like a from t1;
+a sounds like a
+1
+1
+select 1 from t1 order by cast(a as char(1));
+1
+1
+1
+drop table t1;
+DROP DATABASE d1;
+USE test;
+SET character_set_server= @safe_character_set_server;
+SET collation_server= @safe_collation_server;
set names cp932;
set character_set_database = cp932;
CREATE TABLE t1(c1 CHAR(1)) DEFAULT CHARACTER SET = cp932;
diff --git a/mysql-test/suite/binlog/r/binlog_stm_ctype_ucs.result b/mysql-test/suite/binlog/r/binlog_stm_ctype_ucs.result
index c789c618876..3030af7bd68 100644
--- a/mysql-test/suite/binlog/r/binlog_stm_ctype_ucs.result
+++ b/mysql-test/suite/binlog/r/binlog_stm_ctype_ucs.result
@@ -19,7 +19,8 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
SET @@session.sql_mode=0/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
-insert into t2 values (@v)/*!*/;
+insert into t2 values (@v)
+/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
diff --git a/mysql-test/suite/binlog/r/binlog_stm_mix_innodb_myisam.result b/mysql-test/suite/binlog/r/binlog_stm_mix_innodb_myisam.result
index 5ef36861c30..39927a8d866 100644
--- a/mysql-test/suite/binlog/r/binlog_stm_mix_innodb_myisam.result
+++ b/mysql-test/suite/binlog/r/binlog_stm_mix_innodb_myisam.result
@@ -100,6 +100,7 @@ insert into t1 values(9);
insert into t2 select * from t1;
show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Query # # use `test`; insert into t1 values(9)
master-bin.000001 # Xid # # COMMIT /* XID */
master-bin.000001 # Query # # use `test`; insert into t2 select * from t1
@@ -111,6 +112,7 @@ begin;
insert into t2 select * from t1;
show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Query # # use `test`; insert into t1 values(10)
master-bin.000001 # Xid # # COMMIT /* XID */
master-bin.000001 # Query # # use `test`; insert into t2 select * from t1
@@ -118,6 +120,7 @@ insert into t1 values(11);
commit;
show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Query # # use `test`; insert into t1 values(10)
master-bin.000001 # Xid # # COMMIT /* XID */
master-bin.000001 # Query # # use `test`; insert into t2 select * from t1
@@ -233,16 +236,20 @@ master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Query # # use `test`; insert into t1 values(16)
master-bin.000001 # Query # # use `test`; insert into t1 values(18)
master-bin.000001 # Xid # # COMMIT /* XID */
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Query # # use `test`; delete from t1
master-bin.000001 # Xid # # COMMIT /* XID */
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Query # # use `test`; delete from t2
master-bin.000001 # Xid # # COMMIT /* XID */
master-bin.000001 # Query # # use `test`; alter table t2 engine=MyISAM
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Query # # use `test`; insert into t1 values (1)
master-bin.000001 # Xid # # COMMIT /* XID */
master-bin.000001 # Query # # use `test`; insert into t2 values (20)
master-bin.000001 # Query # # use `test`; drop table t1,t2
master-bin.000001 # Query # # use `test`; create temporary table ti (a int) engine=innodb
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Query # # use `test`; insert into ti values(1)
master-bin.000001 # Xid # # COMMIT /* XID */
master-bin.000001 # Query # # use `test`; create temporary table t1 (a int) engine=myisam
@@ -339,6 +346,7 @@ master-bin.000001 # Query # # use `test`; INSERT INTO t1 values (3,3)
master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS t2
master-bin.000001 # Query # # use `test`; CREATE TABLE t2 (a int, b int, primary key (a)) engine=innodb
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (4,4)
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Query # # use `test`; TRUNCATE table t2
master-bin.000001 # Xid # # COMMIT /* XID */
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (5,5)
@@ -348,6 +356,7 @@ master-bin.000001 # Query # # use `test`; CREATE TEMPORARY TABLE t2 (a int, b in
master-bin.000001 # Query # # use `test`; INSERT INTO t1 values (7,7)
master-bin.000001 # Query # # use `test`; INSERT INTO t1 values (8,8)
master-bin.000001 # Query # # use `test`; INSERT INTO t1 values (9,9)
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Query # # use `test`; TRUNCATE table t2
master-bin.000001 # Xid # # COMMIT /* XID */
master-bin.000001 # Query # # use `test`; INSERT INTO t1 values (10,10)
@@ -375,17 +384,16 @@ is not null;
is not null
1
select
-@a like "%#%error_code=0%ROLLBACK/*!*/;%ROLLBACK /* added by mysqlbinlog */;%",
+@a like "%#%error_code=0%ROLLBACK\n/*!*/;%ROLLBACK /* added by mysqlbinlog */;%" OR
+@a like "%#%error_code=0%ROLLBACK\r\n/*!*/;%ROLLBACK /* added by mysqlbinlog */;%",
@a not like "%#%error_code=%error_code=%";
-@a like "%#%error_code=0%ROLLBACK/*!*/;%ROLLBACK /* added by mysqlbinlog */;%" @a not like "%#%error_code=%error_code=%"
+@a like "%#%error_code=0%ROLLBACK\n/*!*/;%ROLLBACK /* added by mysqlbinlog */;%" OR
+@a like "%#%error_code=0%ROLLBACK\r\n/*!*/;%ROLLBACK /* added by mysqlbinlog */;%" @a not like "%#%error_code=%error_code=%"
1 1
drop table t1, t2;
-create table tt (a int unique);
+create temporary table tt (a int unique);
create table ti (a int) engine=innodb;
reset master;
-show master status;
-File Position Binlog_Do_DB Binlog_Ignore_DB
-master-bin.000001 106
begin;
insert into ti values (1);
insert into ti values (2) ;
@@ -396,16 +404,13 @@ Warning 1196 Some non-transactional changed tables couldn't be rolled back
select count(*) from tt /* 2 */;
count(*)
2
-show master status;
-File Position Binlog_Do_DB Binlog_Ignore_DB
-master-bin.000001 515
-show binlog events from 106;
-Log_name Pos Event_type Server_id End_log_pos Info
-master-bin.000001 # Query 1 # use `test`; BEGIN
-master-bin.000001 # Query 1 # use `test`; insert into ti values (1)
-master-bin.000001 # Query 1 # use `test`; insert into ti values (2)
-master-bin.000001 # Query 1 # use `test`; insert into tt select * from ti
-master-bin.000001 # Query 1 # use `test`; ROLLBACK
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; BEGIN
+master-bin.000001 # Query # # use `test`; insert into ti values (1)
+master-bin.000001 # Query # # use `test`; insert into ti values (2)
+master-bin.000001 # Query # # use `test`; insert into tt select * from ti
+master-bin.000001 # Query # # use `test`; ROLLBACK
select count(*) from ti /* zero */;
count(*)
0
@@ -417,9 +422,6 @@ a
delete from ti;
delete from tt where a=1;
reset master;
-show master status;
-File Position Binlog_Do_DB Binlog_Ignore_DB
-master-bin.000001 106
begin;
insert into ti values (1);
insert into ti values (2) /* to make the dup error in the following */;
@@ -428,16 +430,13 @@ ERROR 23000: Duplicate entry '2' for key 'a'
rollback;
Warnings:
Warning 1196 Some non-transactional changed tables couldn't be rolled back
-show master status;
-File Position Binlog_Do_DB Binlog_Ignore_DB
-master-bin.000001 589
-show binlog events from 106;
-Log_name Pos Event_type Server_id End_log_pos Info
-master-bin.000001 # Query 1 # use `test`; BEGIN
-master-bin.000001 # Query 1 # use `test`; insert into ti values (1)
-master-bin.000001 # Query 1 # use `test`; insert into ti values (2) /* to make the dup error in the following */
-master-bin.000001 # Query 1 # use `test`; insert into tt select * from ti /* one affected and error */
-master-bin.000001 # Query 1 # use `test`; ROLLBACK
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; BEGIN
+master-bin.000001 # Query # # use `test`; insert into ti values (1)
+master-bin.000001 # Query # # use `test`; insert into ti values (2) /* to make the dup error in the following */
+master-bin.000001 # Query # # use `test`; insert into tt select * from ti /* one affected and error */
+master-bin.000001 # Query # # use `test`; ROLLBACK
select count(*) from ti /* zero */;
count(*)
0
@@ -446,12 +445,12 @@ select * from tt /* that is what otherwise slave missed - the bug */;
a
1
2
-drop table ti,tt;
+drop table ti, tt;
drop function if exists bug27417;
drop table if exists t1,t2;
CREATE TABLE t1 (a int NOT NULL auto_increment primary key) ENGINE=MyISAM;
CREATE TABLE t2 (a int NOT NULL auto_increment, PRIMARY KEY (a));
-create function bug27417(n int)
+create function bug27417(n int)
RETURNS int(11)
begin
insert into t1 values (null);
@@ -463,6 +462,11 @@ insert into t2 select bug27417(2);
reset master;
insert into t2 values (bug27417(2));
ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Intvar # # INSERT_ID=3
+master-bin.000001 # Query # # use `test`; insert into t2 values (bug27417(2))
+/* only (!) with fixes for #23333 will show there is the query */;
select count(*) from t1 /* must be 3 */;
count(*)
3
@@ -474,6 +478,11 @@ delete from t2 where a=bug27417(3);
select count(*) from t2 /* nothing got deleted */;
count(*)
2
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Intvar # # INSERT_ID=4
+master-bin.000001 # Query # # use `test`; delete from t2 where a=bug27417(3)
+/* the query must be in regardless of #23333 */;
select count(*) from t1 /* must be 5 */;
count(*)
5
@@ -482,6 +491,384 @@ affected rows: 0
select count(*) from t1 /* must be 7 */;
count(*)
7
+drop table t1,t2;
+CREATE TABLE t1 (a int NOT NULL auto_increment primary key) ENGINE=MyISAM;
+CREATE TABLE t2 (a int, PRIMARY KEY (a)) ENGINE=InnoDB;
+CREATE TABLE t3 (a int, PRIMARY KEY (a), b int unique) ENGINE=MyISAM;
+CREATE TABLE t4 (a int, PRIMARY KEY (a), b int unique) ENGINE=Innodb;
+CREATE TABLE t5 (a int, PRIMARY KEY (a)) ENGINE=InnoDB;
+insert into t2 values (1);
+reset master;
+insert into t2 values (bug27417(1));
+ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; BEGIN
+master-bin.000001 # Intvar # # INSERT_ID=1
+master-bin.000001 # Query # # use `test`; insert into t2 values (bug27417(1))
+master-bin.000001 # Query # # use `test`; ROLLBACK
+/* the output must denote there is the query */;
+select count(*) from t1 /* must be 1 */;
+count(*)
+1
+delete from t1;
+delete from t2;
+insert into t2 values (2);
+reset master;
+insert into t2 select bug27417(1) union select bug27417(2);
+ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; BEGIN
+master-bin.000001 # Intvar # # INSERT_ID=2
+master-bin.000001 # Query # # use `test`; insert into t2 select bug27417(1) union select bug27417(2)
+master-bin.000001 # Query # # use `test`; ROLLBACK
+/* the output must denote there is the query */;
+select count(*) from t1 /* must be 2 */;
+count(*)
+2
+delete from t1;
+insert into t3 values (1,1),(2,3),(3,4);
+reset master;
+update t3 set b=b+bug27417(1);
+ERROR 23000: Duplicate entry '4' for key 'b'
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Intvar # # INSERT_ID=4
+master-bin.000001 # Query # # use `test`; update t3 set b=b+bug27417(1)
+/* the output must denote there is the query */;
+select count(*) from t1 /* must be 2 */;
+count(*)
+2
+delete from t3;
+delete from t4;
+insert into t3 values (1,1);
+insert into t4 values (1,1),(2,2);
+reset master;
+UPDATE t4,t3 SET t4.a=t3.a + bug27417(1) /* top level non-ta table */;
+ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; BEGIN
+master-bin.000001 # Intvar # # INSERT_ID=6
+master-bin.000001 # Query # # use `test`; UPDATE t4,t3 SET t4.a=t3.a + bug27417(1) /* top level non-ta table */
+master-bin.000001 # Query # # use `test`; ROLLBACK
+/* the output must denote there is the query */;
+select count(*) from t1 /* must be 4 */;
+count(*)
+4
+delete from t1;
+delete from t3;
+delete from t4;
+insert into t3 values (1,1),(2,2);
+insert into t4 values (1,1),(2,2);
+reset master;
+UPDATE t3,t4 SET t3.a=t4.a + bug27417(1);
+ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
+select count(*) from t1 /* must be 1 */;
+count(*)
+1
+drop table t4;
+delete from t1;
+delete from t2;
+delete from t3;
+insert into t2 values (1);
+insert into t3 values (1,1);
+create trigger trg_del before delete on t2 for each row
+insert into t3 values (bug27417(1), 2);
+reset master;
+delete from t2;
+ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; BEGIN
+master-bin.000001 # Intvar # # INSERT_ID=9
+master-bin.000001 # Query # # use `test`; delete from t2
+master-bin.000001 # Query # # use `test`; ROLLBACK
+/* the output must denote there is the query */;
+select count(*) from t1 /* must be 1 */;
+count(*)
+1
+drop trigger trg_del;
+delete from t1;
+delete from t2;
+delete from t5;
+create trigger trg_del_t2 after delete on t2 for each row
+insert into t1 values (1);
+insert into t2 values (2),(3);
+insert into t5 values (1),(2);
+reset master;
+delete t2.* from t2,t5 where t2.a=t5.a + 1;
+ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; BEGIN
+master-bin.000001 # Query # # use `test`; delete t2.* from t2,t5 where t2.a=t5.a + 1
+master-bin.000001 # Query # # use `test`; ROLLBACK
+/* the output must denote there is the query */;
+select count(*) from t1 /* must be 1 */;
+count(*)
+1
+delete from t1;
+create table t4 (a int default 0, b int primary key) engine=innodb;
+insert into t4 values (0, 17);
+reset master;
+load data infile '../std_data_ln/rpl_loaddata.dat' into table t4 (a, @b) set b= @b + bug27417(2);
+ERROR 23000: Duplicate entry '17' for key 'PRIMARY'
+select * from t4;
+a b
+0 17
+select count(*) from t1 /* must be 2 */;
+count(*)
+2
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; BEGIN
+master-bin.000001 # Intvar # # INSERT_ID=10
+master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=12
+master-bin.000001 # Intvar # # INSERT_ID=10
+master-bin.000001 # Execute_load_query # # use `test`; load data infile '../std_data_ln/rpl_loaddata.dat' into table t4 (a, @b) set b= @b + bug27417(2) ;file_id=#
+master-bin.000001 # Query # # use `test`; ROLLBACK
+/* the output must denote there is the query */;
+drop trigger trg_del_t2;
+drop table t1,t2,t3,t4,t5;
drop function bug27417;
+end of tests
+set @@session.binlog_format=statement;
+create temporary table tt (a int unique);
+create table ti (a int) engine=innodb;
+reset master;
+begin;
+insert into ti values (1);
+insert into ti values (2) ;
+insert into tt select * from ti;
+rollback;
+Warnings:
+Warning 1196 Some non-transactional changed tables couldn't be rolled back
+select count(*) from tt /* 2 */;
+count(*)
+2
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; BEGIN
+master-bin.000001 # Query # # use `test`; insert into ti values (1)
+master-bin.000001 # Query # # use `test`; insert into ti values (2)
+master-bin.000001 # Query # # use `test`; insert into tt select * from ti
+master-bin.000001 # Query # # use `test`; ROLLBACK
+select count(*) from ti /* zero */;
+count(*)
+0
+insert into ti select * from tt;
+select * from ti /* that is what slave would miss - bug#28960 */;
+a
+1
+2
+delete from ti;
+delete from tt where a=1;
+reset master;
+begin;
+insert into ti values (1);
+insert into ti values (2) /* to make the dup error in the following */;
+insert into tt select * from ti /* one affected and error */;
+ERROR 23000: Duplicate entry '2' for key 'a'
+rollback;
+Warnings:
+Warning 1196 Some non-transactional changed tables couldn't be rolled back
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; BEGIN
+master-bin.000001 # Query # # use `test`; insert into ti values (1)
+master-bin.000001 # Query # # use `test`; insert into ti values (2) /* to make the dup error in the following */
+master-bin.000001 # Query # # use `test`; insert into tt select * from ti /* one affected and error */
+master-bin.000001 # Query # # use `test`; ROLLBACK
+select count(*) from ti /* zero */;
+count(*)
+0
+insert into ti select * from tt;
+select * from tt /* that is what otherwise slave missed - the bug */;
+a
+1
+2
+drop table ti;
+drop function if exists bug27417;
+drop table if exists t1,t2;
+CREATE TABLE t1 (a int NOT NULL auto_increment primary key) ENGINE=MyISAM;
+CREATE TABLE t2 (a int NOT NULL auto_increment, PRIMARY KEY (a));
+create function bug27417(n int)
+RETURNS int(11)
+begin
+insert into t1 values (null);
+return n;
+end|
+reset master;
+insert into t2 values (bug27417(1));
+insert into t2 select bug27417(2);
+reset master;
+insert into t2 values (bug27417(2));
+ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Intvar # # INSERT_ID=3
+master-bin.000001 # Query # # use `test`; insert into t2 values (bug27417(2))
+select count(*) from t1 /* must be 3 */;
+count(*)
+3
+reset master;
+select count(*) from t2;
+count(*)
+2
+delete from t2 where a=bug27417(3);
+select count(*) from t2 /* nothing got deleted */;
+count(*)
+2
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Intvar # # INSERT_ID=4
+master-bin.000001 # Query # # use `test`; delete from t2 where a=bug27417(3)
+select count(*) from t1 /* must be 5 */;
+count(*)
+5
+delete t2 from t2 where t2.a=bug27417(100) /* must not affect t2 */;
+affected rows: 0
+select count(*) from t1 /* must be 7 */;
+count(*)
+7
drop table t1,t2;
+CREATE TABLE t1 (a int NOT NULL auto_increment primary key) ENGINE=MyISAM;
+CREATE TABLE t2 (a int, PRIMARY KEY (a)) ENGINE=InnoDB;
+CREATE TABLE t3 (a int, PRIMARY KEY (a), b int unique) ENGINE=MyISAM;
+CREATE TABLE t4 (a int, PRIMARY KEY (a), b int unique) ENGINE=Innodb;
+CREATE TABLE t5 (a int, PRIMARY KEY (a)) ENGINE=InnoDB;
+insert into t2 values (1);
+reset master;
+insert into t2 values (bug27417(1));
+ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; BEGIN
+master-bin.000001 # Intvar # # INSERT_ID=1
+master-bin.000001 # Query # # use `test`; insert into t2 values (bug27417(1))
+master-bin.000001 # Query # # use `test`; ROLLBACK
+select count(*) from t1 /* must be 1 */;
+count(*)
+1
+delete from t1;
+delete from t2;
+insert into t2 values (2);
+reset master;
+insert into t2 select bug27417(1) union select bug27417(2);
+ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; BEGIN
+master-bin.000001 # Intvar # # INSERT_ID=2
+master-bin.000001 # Query # # use `test`; insert into t2 select bug27417(1) union select bug27417(2)
+master-bin.000001 # Query # # use `test`; ROLLBACK
+select count(*) from t1 /* must be 2 */;
+count(*)
+2
+delete from t1;
+insert into t3 values (1,1),(2,3),(3,4);
+reset master;
+update t3 set b=b+bug27417(1);
+ERROR 23000: Duplicate entry '4' for key 'b'
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Intvar # # INSERT_ID=4
+master-bin.000001 # Query # # use `test`; update t3 set b=b+bug27417(1)
+select count(*) from t1 /* must be 2 */;
+count(*)
+2
+delete from t3;
+delete from t4;
+insert into t3 values (1,1);
+insert into t4 values (1,1),(2,2);
+reset master;
+UPDATE t4,t3 SET t4.a=t3.a + bug27417(1) /* top level non-ta table */;
+ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; BEGIN
+master-bin.000001 # Intvar # # INSERT_ID=6
+master-bin.000001 # Query # # use `test`; UPDATE t4,t3 SET t4.a=t3.a + bug27417(1) /* top level non-ta table */
+master-bin.000001 # Query # # use `test`; ROLLBACK
+select count(*) from t1 /* must be 4 */;
+count(*)
+4
+delete from t1;
+delete from t3;
+delete from t4;
+insert into t3 values (1,1),(2,2);
+insert into t4 values (1,1),(2,2);
+reset master;
+UPDATE t3,t4 SET t3.a=t4.a + bug27417(1);
+ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
+select count(*) from t1 /* must be 1 */;
+count(*)
+1
+drop table t4;
+delete from t1;
+delete from t2;
+delete from t3;
+insert into t2 values (1);
+insert into t3 values (1,1);
+create trigger trg_del before delete on t2 for each row
+insert into t3 values (bug27417(1), 2);
+reset master;
+delete from t2;
+ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; BEGIN
+master-bin.000001 # Intvar # # INSERT_ID=9
+master-bin.000001 # Query # # use `test`; delete from t2
+master-bin.000001 # Query # # use `test`; ROLLBACK
+select count(*) from t1 /* must be 1 */;
+count(*)
+1
+drop trigger trg_del;
+delete from t1;
+delete from t2;
+delete from t5;
+create trigger trg_del_t2 after delete on t2 for each row
+insert into t1 values (1);
+insert into t2 values (2),(3);
+insert into t5 values (1),(2);
+reset master;
+delete t2.* from t2,t5 where t2.a=t5.a + 1;
+ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; BEGIN
+master-bin.000001 # Query # # use `test`; delete t2.* from t2,t5 where t2.a=t5.a + 1
+master-bin.000001 # Query # # use `test`; ROLLBACK
+select count(*) from t1 /* must be 1 */;
+count(*)
+1
+delete from t1;
+create table t4 (a int default 0, b int primary key) engine=innodb;
+insert into t4 values (0, 17);
+reset master;
+load data infile '../std_data_ln/rpl_loaddata.dat' into table t4 (a, @b) set b= @b + bug27417(2);
+ERROR 23000: Duplicate entry '17' for key 'PRIMARY'
+select * from t4;
+a b
+0 17
+select count(*) from t1 /* must be 2 */;
+count(*)
+2
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; BEGIN
+master-bin.000001 # Intvar # # INSERT_ID=10
+master-bin.000001 # User var # # @`b`=_latin1 0x3135 COLLATE latin1_swedish_ci
+master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=12
+master-bin.000001 # Intvar # # INSERT_ID=10
+master-bin.000001 # User var # # @`b`=_latin1 0x3135 COLLATE latin1_swedish_ci
+master-bin.000001 # Execute_load_query # # use `test`; load data infile '../std_data_ln/rpl_loaddata.dat' into table t4 (a, @b) set b= @b + bug27417(2) ;file_id=#
+master-bin.000001 # Query # # use `test`; ROLLBACK
+drop trigger trg_del_t2;
+drop table t1,t2,t3,t4,t5;
+drop function bug27417;
+set @@session.binlog_format=@@global.binlog_format;
end of tests
diff --git a/mysql-test/r/binlog_unsafe.result b/mysql-test/suite/binlog/r/binlog_unsafe.result
index 281bb475944..47284ed8bc3 100644
--- a/mysql-test/r/binlog_unsafe.result
+++ b/mysql-test/suite/binlog/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 1591 Statement is not safe to log in statement format.
+Warning 1592 Statement is not safe to log in statement format.
SHOW WARNINGS;
Level Warning
-Code 1591
+Code 1592
Message Statement is not safe to log in statement format.
DROP TABLE t1,t2,t3;
diff --git a/mysql-test/suite/binlog/std_data/binlog-bug32407.000001 b/mysql-test/suite/binlog/std_data/binlog-bug32407.000001
new file mode 100644
index 00000000000..c73243707ef
--- /dev/null
+++ b/mysql-test/suite/binlog/std_data/binlog-bug32407.000001
Binary files differ
diff --git a/mysql-test/suite/binlog/std_data/binlog_old_version_5_1-telco.000001 b/mysql-test/suite/binlog/std_data/binlog_old_version_5_1-telco.000001
new file mode 100644
index 00000000000..76856cb04a2
--- /dev/null
+++ b/mysql-test/suite/binlog/std_data/binlog_old_version_5_1-telco.000001
Binary files differ
diff --git a/mysql-test/suite/binlog/std_data/binlog_old_version_5_1-wl2325_row.000001 b/mysql-test/suite/binlog/std_data/binlog_old_version_5_1-wl2325_row.000001
new file mode 100644
index 00000000000..47071c011f9
--- /dev/null
+++ b/mysql-test/suite/binlog/std_data/binlog_old_version_5_1-wl2325_row.000001
Binary files differ
diff --git a/mysql-test/suite/binlog/std_data/binlog_old_version_5_1-wl2325_stm.000001 b/mysql-test/suite/binlog/std_data/binlog_old_version_5_1-wl2325_stm.000001
new file mode 100644
index 00000000000..4302bfed879
--- /dev/null
+++ b/mysql-test/suite/binlog/std_data/binlog_old_version_5_1-wl2325_stm.000001
Binary files differ
diff --git a/mysql-test/suite/binlog/std_data/binlog_old_version_5_1_17.000001 b/mysql-test/suite/binlog/std_data/binlog_old_version_5_1_17.000001
new file mode 100644
index 00000000000..9b6e200e492
--- /dev/null
+++ b/mysql-test/suite/binlog/std_data/binlog_old_version_5_1_17.000001
Binary files differ
diff --git a/mysql-test/suite/binlog/std_data/binlog_old_version_5_1_23.000001 b/mysql-test/suite/binlog/std_data/binlog_old_version_5_1_23.000001
new file mode 100644
index 00000000000..0e9a9d1470a
--- /dev/null
+++ b/mysql-test/suite/binlog/std_data/binlog_old_version_5_1_23.000001
Binary files differ
diff --git a/mysql-test/suite/binlog/t/binlog_base64_flag.test b/mysql-test/suite/binlog/t/binlog_base64_flag.test
new file mode 100644
index 00000000000..32319460ab8
--- /dev/null
+++ b/mysql-test/suite/binlog/t/binlog_base64_flag.test
@@ -0,0 +1,102 @@
+# This test case verifies that the mysqlbinlog --base64-output=X flags
+# work as expected, and that BINLOG statements with row events fail if
+# they are not preceded by BINLOG statements with Format description
+# events.
+#
+# See also BUG#32407.
+
+
+# Test to show BUG#32407. This reads a binlog created with the
+# mysql-5.1-telco-6.1 tree, specifically at the tag
+# mysql-5.1.15-ndb-6.1.23, and applies it to the database. The test
+# should fail before BUG#32407 was fixed and succeed afterwards.
+--echo ==== Test BUG#32407 ====
+
+# The binlog contains row events equivalent to:
+# CREATE TABLE t1 (a int) engine = myisam
+# INSERT INTO t1 VALUES (1), (1)
+exec $MYSQL_BINLOG suite/binlog/std_data/binlog-bug32407.000001 | $MYSQL;
+# The above line should succeed and t1 should contain two ones
+select * from t1;
+
+
+# Test that a BINLOG statement encoding a row event fails unless a
+# Format_description_event as been supplied with an earlier BINLOG
+# statement.
+--echo ==== Test BINLOG statement w/o FD event ====
+
+# This is a binlog statement consisting of one Table_map_log_event and
+# one Write_rows_log_event. Together, they correspond to the
+# following query:
+# INSERT INTO TABLE test.t1 VALUES (2)
+
+error ER_NO_FORMAT_DESCRIPTION_EVENT_BEFORE_BINLOG_STATEMENT;
+BINLOG '
+SVtYRxMBAAAAKQAAADQBAAAAABAAAAAAAAAABHRlc3QAAnQxAAEDAAE=
+SVtYRxcBAAAAIgAAAFYBAAAQABAAAAAAAAEAAf/+AgAAAA==
+';
+# The above line should fail and 2 should not be in the table
+select * from t1;
+
+
+# Test that it works to read a Format_description_log_event with a
+# BINLOG statement, followed by a row-event in base64 from the same
+# version.
+--echo ==== Test BINLOG statement with FD event ====
+
+# This is a binlog statement containing a Format_description_log_event
+# from the same version as the Table_map and Write_rows_log_event.
+BINLOG '
+ODdYRw8BAAAAZgAAAGoAAAABAAQANS4xLjIzLXJjLWRlYnVnLWxvZwAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAA4N1hHEzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC
+';
+
+# This is a Table_map_log_event+Write_rows_log_event corresponding to:
+# INSERT INTO TABLE test.t1 VALUES (3)
+BINLOG '
+TFtYRxMBAAAAKQAAAH8BAAAAABAAAAAAAAAABHRlc3QAAnQxAAEDAAE=
+TFtYRxcBAAAAIgAAAKEBAAAQABAAAAAAAAEAAf/+AwAAAA==
+';
+# The above line should succeed and 3 should be in the table
+select * from t1;
+
+
+# Test that mysqlbinlog stops with an error message when the
+# --base64-output=never flag is used on a binlog with base64 events.
+--echo ==== Test --base64-output=never on a binlog with row events ====
+
+# mysqlbinlog should fail
+--replace_regex /#[0-9][0-9][0-9][0-9][0-9][0-9] .*/#/
+error 1;
+exec $MYSQL_BINLOG --base64-output=never suite/binlog/std_data/binlog-bug32407.000001;
+# the above line should output the query log event and then stop
+
+
+# Test that the following fails cleanly: "First, read a
+# Format_description event which has N event types. Then, read an
+# event of type M>N"
+--echo ==== Test non-matching FD event and Row event ====
+
+# This is the Format_description_log_event from
+# binlog-bug32407.000001, encoded in base64. It contains only the old
+# row events (number of event types is 22)
+BINLOG '
+4CdYRw8BAAAAYgAAAGYAAAAAAAQANS4xLjE1LW5kYi02LjEuMjQtZGVidWctbG9nAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAADgJ1hHEzgNAAgAEgAEBAQEEgAATwAEGggICAg=
+';
+
+# The following is a Write_rows_log_event with event type 23, i.e.,
+# not supported by the Format_description_log_event above. It
+# corresponds to the following query:
+# INSERT INTO t1 VALUES (5)
+error 1149;
+BINLOG '
+Dl1YRxMBAAAAKQAAADQBAAAAABAAAAAAAAAABHRlc3QAAnQxAAEDAAE=
+Dl1YRxcBAAAAIgAAAFYBAAAQABAAAAAAAAEAAf/+BQAAAA==
+';
+# the above line should fail and 5 should not be in the binlog.
+select * from t1;
+
+
+# clean up
+drop table t1;
diff --git a/mysql-test/suite/binlog/t/binlog_database.test b/mysql-test/suite/binlog/t/binlog_database.test
new file mode 100644
index 00000000000..ee236b4e5ea
--- /dev/null
+++ b/mysql-test/suite/binlog/t/binlog_database.test
@@ -0,0 +1,12 @@
+# A wrapper to test that dropping a database is binlogged
+# correctly. We test all three modes in the same file to avoid
+# unecessary server restarts.
+
+set binlog_format=statement;
+source extra/binlog_tests/database.test;
+set binlog_format=mixed;
+source extra/binlog_tests/database.test;
+set binlog_format=row;
+source extra/binlog_tests/database.test;
+
+show databases;
diff --git a/mysql-test/suite/binlog/t/binlog_killed.test b/mysql-test/suite/binlog/t/binlog_killed.test
index 6c0b4b46a4e..e5f7288b17c 100644
--- a/mysql-test/suite/binlog/t/binlog_killed.test
+++ b/mysql-test/suite/binlog/t/binlog_killed.test
@@ -55,194 +55,277 @@ enable_result_log;
select @result /* must be zero either way */;
-# the functions are either *insensitive* to killing or killing can cause
-# strange problmes with the error propagation out of SF's stack
-# Bug#27563, Bug#27565, BUG#24971
-#
-# TODO: use if's block as regression test for the bugs or remove
-#
-if (0)
-{
-delimiter |;
-create function bug27563()
-RETURNS int(11)
-DETERMINISTIC
-begin
- select get_lock("a", 10) into @a;
- return 1;
-end|
-delimiter ;|
-# the function is sensitive to killing requiring innodb though with wrong client error
-# TO FIX in BUG#27565; TODO: remove --error 1105 afterwards
-delimiter |;
-create function bug27565()
-RETURNS int(11)
-DETERMINISTIC
-begin
- select a from t1 where a=1 into @a for update;
- return 1;
-end|
-delimiter ;|
+--remove_file $MYSQLTEST_VARDIR/tmp/kill_query_calling_sp.binlog
+connection con1;
+select RELEASE_LOCK("a");
-reset master;
+#
+# bug#27571 asynchronous setting mysql_`query`::error and Query_log_e::error_code
+#
+# checking that killing inside of select loops is safe as before
+# killing after the loop can be only simulated - another test
-### ta table case: killing causes rollback
+delete from t1;
+delete from t2;
+insert into t1 values (1,1),(2,2);
-# A. autocommit ON
+#
+# simple update
+#
connection con1;
-select get_lock("a", 20);
+begin; update t1 set b=11 where a=2;
connection con2;
let $ID= `select connection_id()`;
-send insert into t1 values (bug27563(),1);
+begin;
+send update t1 set b=b+10;
connection con1;
+--replace_result $ID ID
eval kill query $ID;
+rollback;
+
+# Bug #32148 killi query may be ineffective
+# forced to comment out the test's outcome
+# and mask out ineffective ER_QUERY_INTERRUPTED
+# todo1: revert back upon fixing bug#32148
+# todo2: the tests need refining in that
+# killing should wait till the victim requested
+# its lock (wait_condition available in 5.1 tests)
connection con2;
-# todo (re-record test): after bugs 27563,27565 got fixed affected rows will report zero
---enable_info
-# todo: remove 0 return after fixing Bug#27563
--error 0,ER_QUERY_INTERRUPTED
-reap; ### pb: wrong error
---disable_info
-###--replace_column 2 # 5 #
-### show binlog events from 98 /* nothing in binlog unless Bug#27563 */;
-show master status /* must be only FD event unless Bug#27563 */;
-select count(*) from t1 /* must be zero unless Bug#27563 */;
-
-# M. multi-statement-ta
+reap;
+rollback;
+select * from t1 order by a /* must be the same as before (1,1),(2,2) */;
+
+#
+# multi update
+# commented out as Bug #31807 multi-update,delete killing does not report with ER_QUERY_INTERRUPTED
+# in the way
+#
+# connection con1;
+# begin; update t1 set b=b+10;
+
+# connection con2;
+# send update t1 as t_1,t1 as t_2 set t_1.b=11 where t_2.a=2;
+
+# connection con1;
+# --replace_result $ID ID
+# eval kill query $ID;
+# rollback;
+
+# disable_abort_on_error;
+
+# connection con2;
+# --error HY000,ER_QUERY_INTERRUPTED
+# reap;
+# select * from t1 /* must be the same as before (1,1),(2,2) */;
+
+# enable_abort_on_error;
+#
+# simple delete
+#
+connection con1;
+begin; delete from t1 where a=2;
+
connection con2;
let $ID= `select connection_id()`;
begin;
-send insert into t1 values (bug27563(),1);
+send delete from t1 where a=2;
connection con1;
+--replace_result $ID ID
eval kill query $ID;
+rollback;
+
connection con2;
-# todo (re-record test): after bugs 27563,27565 got fixed affected rows will report zero
---enable_info
-# todo: remove 0 return after fixing Bug#27563
--error 0,ER_QUERY_INTERRUPTED
reap;
---disable_info
-select count(*) from t1 /* must be zero unless Bug#27563 */;
-commit;
+rollback;
+# todo1,2 above
+select * from t1 order by a /* must be the same as before (1,1),(2,2) */;
-### non-ta table case: killing must be recorded in binlog
+#
+# multi delete
+# the same as for multi-update
+#
+# connection con1;
+# begin; delete from t1 where a=2;
-reset master;
+# connection con2;
+# send delete t1 from t1 where t1.a=2;
+
+# connection con1;
+# --replace_result $ID ID
+# eval kill query $ID;
+# rollback;
+
+# connection con2;
+# --error 0,ER_QUERY_INTERRUPTED
+# reap;
+# select * from t1 /* must be the same as before (1,1),(2,2) */;
+#
+# insert select
+#
+connection con1;
+--disable_warnings
+drop table if exists t4;
+--enable_warnings
+create table t4 (a int, b int) engine=innodb;
+insert into t4 values (3, 3);
+begin; insert into t1 values (3, 3);
connection con2;
let $ID= `select connection_id()`;
-send insert into t2 values (bug27563(),1);
+begin;
+send insert into t1 select * from t4 for update;
connection con1;
+--replace_result $ID ID
eval kill query $ID;
+rollback;
connection con2;
-# todo: remove 0 return after fixing Bug#27563
--error 0,ER_QUERY_INTERRUPTED
reap;
-select count(*) from t2 /* must be one */;
-#show binlog events from 98 /* must have the insert on non-ta table */;
-show master status /* must have the insert event more to FD */;
-# the value of the error flag of KILLED_QUERY is tested further
+# todo 1,2 above
+rollback;
+select * from t1 /* must be the same as before (1,1),(2,2) */;
-connection con1;
-select RELEASE_LOCK("a");
+drop table t4; # cleanup for the sub-case
-### test with effective killing of SF()
+###
+## non-ta table case: killing must be recorded in binlog
+###
+create table t4 (a int, b int) ENGINE=MyISAM /* for killing update and delete */;
-delete from t1;
-delete from t2;
-insert into t1 values (1,1);
-insert into t2 values (1,1);
+delimiter |;
+create function bug27563(n int)
+RETURNS int(11)
+DETERMINISTIC
+begin
+ if @b > 0 then
+ select get_lock("a", 20) into @a;
+ else
+ set @b= 1;
+ end if;
+ return n;
+end|
+delimiter ;|
+
+#
+# update
+#
-#
-# Bug#27565
-# test where KILL is propagated as error to the top level
-# still another bug with the error message to the user
-# todo: fix reexecute the result file after fixing
-#
-begin; update t1 set b=0 where a=1;
+delete from t4;
+insert into t4 values (1,1), (1,1);
+reset master;
+connection con1;
+select get_lock("a", 20);
connection con2;
let $ID= `select connection_id()`;
-send update t2 set b=bug27565()-1 where a=1;
+set @b= 0;
+send update t4 set b=b + bug27563(b);
connection con1;
+let $wait_condition= select count(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST where state='User lock';
+source include/wait_condition.inc;
+select count(*) FROM INFORMATION_SCHEMA.PROCESSLIST where state='User lock';
+
+--replace_result $ID ID
eval kill query $ID;
-commit;
connection con2;
-# todo: fix Bug #27565 killed query of SF() is not reported correctly and
-# remove 1105 (wrong)
-#--error ER_QUERY_INTERRUPTED
---error 1105,ER_QUERY_INTERRUPTED
-reap; ### pb: wrong error
-select * from t1 /* must be: (1,0) */;
-select * from t2 /* must be as before: (1,1) */;
+--error ER_QUERY_INTERRUPTED
+reap;
+select * from t4 order by b /* must be (1,1), (1,2) */;
+select @b /* must be 1 at the end of a stmt calling bug27563() */;
+--echo must have the update query event more to FD
+source include/show_binlog_events.inc;
-## bug#22725 with effective and propagating killing
-#
-# top-level ta-table
+# a proof the query is binlogged with an error
+
+--exec $MYSQL_BINLOG --start-position=106 $MYSQLTEST_VARDIR/log/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+eval select
+(@a:=load_file("$MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
+is not null;
+--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
+let $error_code= `select @a like "%#%error_code=0%" /* must return 0*/`;
+eval select $error_code /* must return 0 to mean the killed query is in */;
+
+# cleanup for the sub-case
connection con1;
-delete from t3;
+select RELEASE_LOCK("a");
+--remove_file $MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog
+
+#
+# delete
+#
+
+delete from t4;
+insert into t4 values (1,1), (2,2);
reset master;
-begin; update t1 set b=0 where a=1;
+connection con1;
+select get_lock("a", 20);
connection con2;
let $ID= `select connection_id()`;
-# the query won't perform completely since the function gets interrupted
-send insert into t3 values (0,0),(1,bug27565());
+set @b= 0;
+send delete from t4 where b=bug27563(1) or b=bug27563(2);
connection con1;
+let $wait_condition= select count(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST where state='User lock';
+source include/wait_condition.inc;
+select count(*) FROM INFORMATION_SCHEMA.PROCESSLIST where state='User lock';
+--replace_result $ID ID
eval kill query $ID;
-rollback;
connection con2;
-# todo: fix Bug #27565 killed query of SF() is not reported correctly and
-# remove 1105 (wrong)
-#--error ER_QUERY_INTERRUPTED
---error 1105,ER_QUERY_INTERRUPTED
-reap; ### pb: wrong error
-select count(*) from t3 /* must be zero */;
-show master status /* nothing in binlog */;
-
-# top-level non-ta-table
-connection con1;
-delete from t2;
-reset master;
-begin; update t1 set b=0 where a=1;
+--error ER_QUERY_INTERRUPTED
+reap;
+select count(*) from t4 /* must be 1 */;
+select @b /* must be 1 at the end of a stmt calling bug27563() */;
+--echo must have the delete query event more to FD
+source include/show_binlog_events.inc;
-connection con2;
-let $ID= `select connection_id()`;
-# the query won't perform completely since the function gets intrurrupted
-send insert into t2 values (0,0),(1,bug27565()) /* non-ta t2 */;
+# a proof the query is binlogged with an error
+
+--exec $MYSQL_BINLOG --start-position=106 $MYSQLTEST_VARDIR/log/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+eval select
+(@a:=load_file("$MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
+is not null;
+--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
+let $error_code= `select @a like "%#%error_code=0%" /* must return 0*/`;
+eval select $error_code /* must return 0 to mean the killed query is in */;
+# cleanup for the sub-case
connection con1;
-eval kill query $ID;
-rollback;
+select RELEASE_LOCK("a");
+--remove_file $MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog
-connection con2;
-# todo: fix Bug #27565 killed query of SF() is not reported correctly and
-# remove 1105 (wrong)
-#--error ER_QUERY_INTERRUPTED
---error 1105,ER_QUERY_INTERRUPTED
-reap; ### pb: wrong error
+drop table t4;
-select count(*) from t2 /* count must be one */;
-show master status /* insert into non-ta must be in binlog */;
+#
+# load data - see simulation tests
+#
+
+
+# bug#27571 cleanup
drop function bug27563;
-drop function bug27565;
-}
-system rm $MYSQLTEST_VARDIR/tmp/kill_query_calling_sp.binlog ;
+
+#
+# common cleanup
+#
drop table t1,t2,t3;
+--echo end of the tests
diff --git a/mysql-test/suite/binlog/t/binlog_killed_simulate-master.opt b/mysql-test/suite/binlog/t/binlog_killed_simulate-master.opt
new file mode 100644
index 00000000000..90c70ecee29
--- /dev/null
+++ b/mysql-test/suite/binlog/t/binlog_killed_simulate-master.opt
@@ -0,0 +1 @@
+--loose-debug=d,simulate_kill_bug27571
diff --git a/mysql-test/suite/binlog/t/binlog_killed_simulate.test b/mysql-test/suite/binlog/t/binlog_killed_simulate.test
new file mode 100644
index 00000000000..2121a90dc8c
--- /dev/null
+++ b/mysql-test/suite/binlog/t/binlog_killed_simulate.test
@@ -0,0 +1,69 @@
+-- source include/have_debug.inc
+-- source include/have_binlog_format_mixed_or_statement.inc
+#
+# bug#27571 asynchronous setting mysql_$query()'s local error and
+# Query_log_event::error_code
+#
+
+--disable_warnings
+drop table if exists t1,t2;
+--enable_warnings
+
+#
+# Checking that killing upon successful row-loop does not affect binlogging
+#
+
+create table t1 (a int) engine=MyISAM;
+insert into t1 set a=1;
+reset master;
+
+update t1 set a=2 /* will be "killed" after work has been done */;
+
+# a proof the query is binlogged with no error
+#todo: introduce a suite private macro that provides numeric values
+# for some constants like the offset of the first real event
+# that is different between severs versions.
+--exec $MYSQL_BINLOG --start-position=106 $MYSQLTEST_VARDIR/log/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+eval select
+(@a:=load_file("$MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
+is not null;
+--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
+let $error_code= `select @a like "%#%error_code=0%" /* must return 1 */`;
+eval select $error_code /* must return 1 as query completed before got killed*/;
+
+# cleanup for the sub-case
+system rm $MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog;
+
+
+#
+# Checking that killing inside of row-loop for LOAD DATA into
+# non-transactional table affects binlogging
+#
+
+create table t2 (a int, b int) ENGINE=MyISAM;
+reset master;
+--error ER_QUERY_INTERRUPTED
+load data infile '../std_data_ln/rpl_loaddata.dat' into table t2 /* will be "killed" in the middle */;
+
+
+# a proof the query is binlogged with an error
+
+source include/show_binlog_events.inc;
+
+--exec $MYSQL_BINLOG --start-position=98 $MYSQLTEST_VARDIR/log/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+eval select
+(@a:=load_file("$MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
+is not null;
+--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
+let $error_code= `select @a like "%#%error_code=0%" /* must return 0*/`;
+eval select $error_code /* must return 0 to mean the killed query is in */;
+
+# cleanup for the sub-case
+system rm $MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog;
+
+
+drop table t1,t2;
+
+--echo end of the tests
diff --git a/mysql-test/suite/binlog/t/binlog_old_versions.test b/mysql-test/suite/binlog/t/binlog_old_versions.test
new file mode 100644
index 00000000000..2d56ebd588d
--- /dev/null
+++ b/mysql-test/suite/binlog/t/binlog_old_versions.test
@@ -0,0 +1,148 @@
+# Test that old binlog formats can be read.
+
+# Some previous versions of MySQL use their own binlog format,
+# especially in row-based replication. This test uses saved binlogs
+# from those old versions to test that we can replicate from old
+# versions to the present version.
+
+# Replicating from old versions to new versions is necessary in an
+# online upgrade scenario, where the .
+
+# The previous versions we currently test are:
+# - version 5.1.17 and earlier trees
+# - mysql-5.1-wl2325-xxx trees (AKA alcatel trees)
+# - mysql-5.1-telco-6.1 trees (AKA ndb trees)
+# For completeness, we also test mysql-5.1-new_rpl, which is supposed
+# to be the "correct" version.
+
+# All binlogs were generated with the same commands (listed at the end
+# of this test for reference). The binlogs contain the following
+# events: Table_map, Write_rows, Update_rows, Delete_rows Query, Xid,
+# User_var, Int_var, Rand, Begin_load, Append_file, Execute_load.
+
+# Related bugs: BUG#27779, BUG#31581, BUG#31582, BUG#31583, BUG#32407
+
+source include/not_embedded.inc;
+
+--disable_warnings
+DROP TABLE IF EXISTS t1, t2, t3;
+
+
+--echo ==== Read modern binlog (version 5.1.23) ====
+
+# Read binlog.
+--exec $MYSQL_BINLOG --local-load=$MYSQLTEST_VARDIR/tmp/ suite/binlog/std_data/binlog_old_version_5_1_23.000001 | $MYSQL --local-infile=1
+# Show result.
+SELECT * FROM t1 ORDER BY a;
+SELECT * FROM t2 ORDER BY a;
+SELECT COUNT(*) FROM t3;
+# Reset.
+DROP TABLE t1, t2, t3;
+
+
+--echo ==== Read binlog from version 5.1.17 ====
+
+# Read binlog.
+--exec $MYSQL_BINLOG --local-load=$MYSQLTEST_VARDIR/tmp/ suite/binlog/std_data/binlog_old_version_5_1_17.000001 | $MYSQL --local-infile=1
+# Show result.
+SELECT * FROM t1 ORDER BY a;
+SELECT * FROM t2 ORDER BY a;
+SELECT COUNT(*) FROM t3;
+# Reset.
+DROP TABLE t1, t2, t3;
+
+
+--echo ==== Read binlog from alcatel tree (mysql-5.1-wl2325-5.0-drop6) ====
+
+# In this version, it was not possible to switch between row-based and
+# statement-based binlogging without restarting the server. So, we
+# have two binlogs; one for row based and one for statement based
+# replication.
+
+# Read rbr binlog.
+--exec $MYSQL_BINLOG --local-load=$MYSQLTEST_VARDIR/tmp/ suite/binlog/std_data/binlog_old_version_5_1-wl2325_row.000001 | $MYSQL --local-infile=1
+# Read stm binlog.
+--exec $MYSQL_BINLOG --local-load=$MYSQLTEST_VARDIR/tmp/ suite/binlog/std_data/binlog_old_version_5_1-wl2325_stm.000001 | $MYSQL --local-infile=1
+# Show result.
+SELECT * FROM t1 ORDER BY a;
+SELECT * FROM t2 ORDER BY a;
+SELECT COUNT(*) FROM t3;
+# Reset.
+DROP TABLE t1, t2, t3;
+
+
+--echo ==== Read binlog from ndb tree (mysql-5.1-telco-6.1) ====
+
+# Read binlog.
+--exec $MYSQL_BINLOG --local-load=$MYSQLTEST_VARDIR/tmp/ suite/binlog/std_data/binlog_old_version_5_1-telco.000001 | $MYSQL --local-infile=1
+# Show resulting tablea.
+SELECT * FROM t1 ORDER BY a;
+SELECT * FROM t2 ORDER BY a;
+SELECT COUNT(*) FROM t3;
+# Reset.
+DROP TABLE t1, t2, t3;
+
+
+#### The following commands were used to generate the binlogs ####
+#
+#source include/master-slave.inc;
+#
+## ==== initialize ====
+#USE test;
+#CREATE TABLE t1 (a int, b char(50)) ENGINE = MyISAM;
+#CREATE TABLE t2 (a int, b char(50)) ENGINE = InnoDB;
+#CREATE TABLE t3 (a char(20));
+#
+#
+## ==== row based tests ====
+#SET BINLOG_FORMAT='row';
+#
+## ---- get write, update, and delete rows events ----
+#INSERT INTO t1 VALUES (0, 'one'), (1, 'two');
+#UPDATE t1 SET a=a+1;
+#DELETE FROM t1 WHERE a=2;
+#
+#
+## ==== statement based tests ====
+#SET BINLOG_FORMAT = 'statement';
+#
+## ---- get xid events ----
+#BEGIN;
+#INSERT INTO t2 VALUES (3, 'first stm in trx');
+#INSERT INTO t1 VALUES (3, 'last stm in trx: next event should be xid');
+#COMMIT;
+#
+## ---- get user var events ----
+#SET @x = 4;
+#INSERT INTO t1 VALUES (@x, 'four');
+#
+## ---- get rand event ----
+#INSERT INTO t1 VALUES (RAND() * 1000000, 'random');
+#
+## ---- get intvar event ----
+#INSERT INTO t1 VALUES (LAST_INSERT_ID(), 'last_insert_id');
+#
+## ---- get begin, append and execute load events ----
+## double the file until we have more than 2^17 bytes, so that the
+## event has to be split and we can use Append_file_log_event.
+#
+#SET SQL_LOG_BIN=0;
+#CREATE TABLE temp (a char(20));
+#LOAD DATA INFILE '../std_data_ln/words.dat' INTO TABLE temp;
+#INSERT INTO temp SELECT * FROM temp;
+#INSERT INTO temp SELECT * FROM temp;
+#INSERT INTO temp SELECT * FROM temp;
+#INSERT INTO temp SELECT * FROM temp;
+#INSERT INTO temp SELECT * FROM temp;
+#INSERT INTO temp SELECT * FROM temp;
+#INSERT INTO temp SELECT * FROM temp;
+#INSERT INTO temp SELECT * FROM temp;
+#SELECT a FROM temp INTO OUTFILE 'big_file.dat';
+#DROP TABLE temp;
+#SET SQL_LOG_BIN=1;
+#
+#LOAD DATA INFILE 'big_file.dat' INTO TABLE t3;
+#
+#SELECT * FROM t1 ORDER BY a;
+#SELECT * FROM t2 ORDER BY a;
+#SELECT COUNT(*) FROM t3;
diff --git a/mysql-test/suite/binlog/t/binlog_row_mix_innodb_myisam.test b/mysql-test/suite/binlog/t/binlog_row_mix_innodb_myisam.test
index 7b7753a487e..a7722075d6e 100644
--- a/mysql-test/suite/binlog/t/binlog_row_mix_innodb_myisam.test
+++ b/mysql-test/suite/binlog/t/binlog_row_mix_innodb_myisam.test
@@ -12,22 +12,4 @@
--enable_ps_protocol
-# This piece below cannot be put into
-# extra/binlog_tests/mix_innodb_myisam_binlog.test
-# because the argument of --start-position differs between statement-
-# and row-based (and "eval --exec" doesn't work).
-# we check that the error code of the "ROLLBACK" event is 0 and not
-# ER_SERVER_SHUTDOWN (i.e. disconnection just rolls back transaction
-# and does not make slave to stop)
-flush logs;
---exec $MYSQL_BINLOG --start-position=524 $MYSQLTEST_VARDIR/log/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/mix_innodb_myisam_binlog.output
---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
-eval select
-(@a:=load_file("$MYSQLTEST_VARDIR/tmp/mix_innodb_myisam_binlog.output"))
-is not null;
-
---replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
-eval select
-@a like "%#%error_code=0%ROLLBACK/*!*/;%ROLLBACK /* added by mysqlbinlog */;%",
-@a not like "%#%error_code=%error_code=%";
-drop table t1, t2;
+-- source extra/binlog_tests/mix_innodb_myisam_side_effects.test
diff --git a/mysql-test/suite/binlog/t/binlog_start_comment.test b/mysql-test/suite/binlog/t/binlog_start_comment.test
new file mode 100644
index 00000000000..a5817eb69b7
--- /dev/null
+++ b/mysql-test/suite/binlog/t/binlog_start_comment.test
@@ -0,0 +1,24 @@
+# Test case for bug#32205 Replaying statements from mysqlbinlog fails
+# with a syntax error, replicates fine
+
+source include/have_log_bin.inc;
+source include/have_local_infile.inc;
+
+reset master;
+--disable_warnings
+drop table if exists t1,t2;
+--enable_warnings
+create table t1 (word varchar(20)) -- create table t1;
+create table t2 (word varchar(20)) -- create table t2;
+load data infile '../std_data_ln/words.dat' into table t1 -- load data to t1;
+insert into t2 values ("Ada");
+flush logs;
+select * from t2;
+--exec $MYSQL_BINLOG --local-load=$MYSQLTEST_VARDIR/tmp/ $MYSQLTEST_VARDIR/log/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/binlog_start_comment.binlog
+--exec $MYSQL --local-infile=1 < $MYSQLTEST_VARDIR/tmp/binlog_start_comment.binlog
+flush logs;
+select * from t2;
+
+# clean up
+drop table t1,t2;
+#--system rm $MYSQLTEST_VARDIR/tmp/binlog_start_comment.binlog
diff --git a/mysql-test/suite/binlog/t/binlog_stm_mix_innodb_myisam.test b/mysql-test/suite/binlog/t/binlog_stm_mix_innodb_myisam.test
index 1815f3deb34..e4661526982 100644
--- a/mysql-test/suite/binlog/t/binlog_stm_mix_innodb_myisam.test
+++ b/mysql-test/suite/binlog/t/binlog_stm_mix_innodb_myisam.test
@@ -1,146 +1,12 @@
# This is a wrapper for binlog.test so that the same test case can be used
# For both statement and row based bin logs 9/19/2005 [jbm]
--- source include/have_binlog_format_mixed_or_statement.inc
+-- source include/have_binlog_format_statement.inc
-- source extra/binlog_tests/mix_innodb_myisam_binlog.test
-# This piece below cannot be put into
-# extra/binlog_tests/mix_innodb_myisam_binlog.test
-# because the argument of --start-position differs between statement-
-# and row-based (and "eval --exec" doesn't work).
-# we check that the error code of the "ROLLBACK" event is 0 and not
-# ER_SERVER_SHUTDOWN (i.e. disconnection just rolls back transaction
-# and does not make slave to stop)
-flush logs;
---exec $MYSQL_BINLOG --start-position=555 $MYSQLTEST_VARDIR/log/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/mix_innodb_myisam_binlog.output
---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
-eval select
-(@a:=load_file("$MYSQLTEST_VARDIR/tmp/mix_innodb_myisam_binlog.output"))
-is not null;
---replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
-eval select
-@a like "%#%error_code=0%ROLLBACK/*!*/;%ROLLBACK /* added by mysqlbinlog */;%",
-@a not like "%#%error_code=%error_code=%";
+set @@session.binlog_format=statement;
+-- source extra/binlog_tests/mix_innodb_myisam_side_effects.test
+set @@session.binlog_format=@@global.binlog_format;
-drop table t1, t2;
-
-#
-# Bug #27417 thd->no_trans_update.stmt lost value inside of SF-exec-stack
-# bug #28960 non-trans temp table changes with insert .. select
-# not binlogged after rollback
-#
-# testing appearence of insert into temp_table in binlog.
-# There are two branches of execution that require different setup.
-
-## send_eof() branch
-
-# prepare
-
-create table tt (a int unique);
-create table ti (a int) engine=innodb;
-reset master;
-show master status;
-
-# action
-
-begin;
-insert into ti values (1);
-insert into ti values (2) ;
-insert into tt select * from ti;
-rollback;
-
-# check
-
-select count(*) from tt /* 2 */;
-show master status;
---replace_column 2 # 5 #
-show binlog events from 106;
-select count(*) from ti /* zero */;
-insert into ti select * from tt;
-select * from ti /* that is what slave would miss - a bug */;
-
-
-## send_error() branch
-delete from ti;
-delete from tt where a=1;
-reset master;
-show master status;
-
-# action
-
-begin;
-insert into ti values (1);
-insert into ti values (2) /* to make the dup error in the following */;
---error ER_DUP_ENTRY
-insert into tt select * from ti /* one affected and error */;
-rollback;
-
-# check
-
-show master status;
---replace_column 2 # 5 #
-show binlog events from 106;
-select count(*) from ti /* zero */;
-insert into ti select * from tt;
-select * from tt /* that is what otherwise slave missed - the bug */;
-
-drop table ti,tt;
-
-
-#
-# Bug #27417 thd->no_trans_update.stmt lost value inside of SF-exec-stack
-#
-# Testing asserts: if there is a side effect of modifying non-transactional
-# table thd->no_trans_update.stmt must be TRUE;
-# the assert is active with debug build
-#
-
---disable_warnings
-drop function if exists bug27417;
-drop table if exists t1,t2;
---enable_warnings
-# side effect table
-CREATE TABLE t1 (a int NOT NULL auto_increment primary key) ENGINE=MyISAM;
-# target tables
-CREATE TABLE t2 (a int NOT NULL auto_increment, PRIMARY KEY (a));
-
-delimiter |;
-create function bug27417(n int)
-RETURNS int(11)
-begin
- insert into t1 values (null);
- return n;
-end|
-delimiter ;|
-
-reset master;
-
-# execute
-
-insert into t2 values (bug27417(1));
-insert into t2 select bug27417(2);
-reset master;
-
---error ER_DUP_ENTRY
-insert into t2 values (bug27417(2));
-#TODO: Andrei: enable this test after 23333 is pushed
-#show master status; /* only (!) with fixes for #23333 will show there is the query */;
-select count(*) from t1 /* must be 3 */;
-
-reset master;
-select count(*) from t2;
-delete from t2 where a=bug27417(3);
-select count(*) from t2 /* nothing got deleted */;
-#TODO: Andrei: enable this test after 23333 is pushed
-#show master status; /* the query must be in regardless of #23333 */;
-select count(*) from t1 /* must be 5 */;
-
---enable_info
-delete t2 from t2 where t2.a=bug27417(100) /* must not affect t2 */;
---disable_info
-select count(*) from t1 /* must be 7 */;
-
-drop function bug27417;
-drop table t1,t2;
--echo end of tests
diff --git a/mysql-test/t/binlog_unsafe.test b/mysql-test/suite/binlog/t/binlog_unsafe.test
index f34c22dc5f7..f34c22dc5f7 100644
--- a/mysql-test/t/binlog_unsafe.test
+++ b/mysql-test/suite/binlog/t/binlog_unsafe.test
diff --git a/mysql-test/suite/binlog/t/disabled.def b/mysql-test/suite/binlog/t/disabled.def
index 888298bbb09..c93bc2a158e 100644
--- a/mysql-test/suite/binlog/t/disabled.def
+++ b/mysql-test/suite/binlog/t/disabled.def
@@ -9,3 +9,5 @@
# Do not use any TAB characters for whitespace.
#
##############################################################################
+binlog_multi_engine : Bug#32663 binlog_multi_engine.test fails randomly
+binlog_base64_flag : BUG#33247 2007-12-14 Sven: mysqlbinlog does not clean up after itself on termination. When compiled in debug mode, this test generates lots of warnings for memory leaks.
diff --git a/mysql-test/suite/bugs/r/rpl_bug31582.result b/mysql-test/suite/bugs/r/rpl_bug31582.result
new file mode 100644
index 00000000000..1f71fbf8fe7
--- /dev/null
+++ b/mysql-test/suite/bugs/r/rpl_bug31582.result
@@ -0,0 +1,16 @@
+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;
+CREATE TABLE t1 (a VARCHAR(10) PRIMARY KEY) ENGINE=MyISAM;
+INSERT INTO t1 VALUES ('a');
+UPDATE t1 SET a = 'MyISAM';
+SELECT * FROM t1 ORDER BY a;
+a
+MyISAM
+SELECT * FROM t1 ORDER BY a;
+a
+MyISAM
+DROP TABLE t1;
diff --git a/mysql-test/suite/bugs/r/rpl_bug31583.result b/mysql-test/suite/bugs/r/rpl_bug31583.result
new file mode 100644
index 00000000000..a5e38e9b2d8
--- /dev/null
+++ b/mysql-test/suite/bugs/r/rpl_bug31583.result
@@ -0,0 +1,15 @@
+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;
+CREATE TABLE t1 ( a INT, b INT DEFAULT -3 );
+INSERT INTO t1 VALUES (1, DEFAULT);
+UPDATE t1 SET a = 3;
+SELECT * FROM t1 ORDER BY a;
+a b
+3 -3
+SELECT * FROM t1 ORDER BY a;
+a b
+3 -3
diff --git a/mysql-test/suite/bugs/t/rpl_bug31582.test b/mysql-test/suite/bugs/t/rpl_bug31582.test
new file mode 100644
index 00000000000..7ba15eec8ce
--- /dev/null
+++ b/mysql-test/suite/bugs/t/rpl_bug31582.test
@@ -0,0 +1,25 @@
+
+# BUG#31582: 5.1-telco-6.1 -> 5.1.22. Slave crashes when reading
+# UPDATE for VARCHAR
+
+# This is a problem for any update statement replicating from an old
+# server to a new server. The bug consisted of a new slave trying to
+# read two column bitmaps, but there is only one available in the old
+# format.
+
+# This test case should be executed replicating from an old server to
+# a new server, so make sure you have one handy.
+
+source include/master-slave.inc;
+
+CREATE TABLE t1 (a VARCHAR(10) PRIMARY KEY) ENGINE=MyISAM;
+INSERT INTO t1 VALUES ('a');
+UPDATE t1 SET a = 'MyISAM';
+SELECT * FROM t1 ORDER BY a;
+sync_slave_with_master;
+SELECT * FROM t1 ORDER BY a;
+
+connection master;
+DROP TABLE t1;
+sync_slave_with_master;
+
diff --git a/mysql-test/suite/bugs/t/rpl_bug31583.test b/mysql-test/suite/bugs/t/rpl_bug31583.test
new file mode 100644
index 00000000000..657e4984b77
--- /dev/null
+++ b/mysql-test/suite/bugs/t/rpl_bug31583.test
@@ -0,0 +1,25 @@
+#
+# BUG#31583: 5.1-telco-6.1 -> 5.1.22. Slave returns Error in unknown event
+
+# This is a problem for any update statement replicating from an old
+# server to a new server. The bug consisted of a new slave trying to
+# read two column bitmaps, but there is only one available in the old
+# format.
+
+# This test case should be executed replicating from an old server to
+# a new server, so make sure you have one handy.
+
+source include/master-slave.inc;
+
+CREATE TABLE t1 ( a INT, b INT DEFAULT -3 );
+
+INSERT INTO t1 VALUES (1, DEFAULT);
+UPDATE t1 SET a = 3;
+SELECT * FROM t1 ORDER BY a;
+sync_slave_with_master;
+SELECT * FROM t1 ORDER BY a;
+
+connection master;
+DROP TABLE t1;
+sync_slave_with_master;
+
diff --git a/mysql-test/suite/funcs_1/datadict/datadict_master.inc b/mysql-test/suite/funcs_1/datadict/datadict_master.inc
index ee94f7cb318..73a23d6d377 100644
--- a/mysql-test/suite/funcs_1/datadict/datadict_master.inc
+++ b/mysql-test/suite/funcs_1/datadict/datadict_master.inc
@@ -199,7 +199,7 @@ select s.catalog_name, s.schema_name, s.default_character_set_name,
--source suite/funcs_1/datadict/datadict_bug_12777.inc
select * from columns;
select * from character_sets;
-select sum(id) from collations;
+select sum(id) from collations where collation_name <> 'utf8_general_cs';
select collation_name, character_set_name into @x,@y
from collation_character_set_applicability limit 1;
select @x, @y;
@@ -1660,13 +1660,14 @@ connect (u_6_401017, localhost, u_6_401017, , test);
use information_schema;
-select * from collation_character_set_applicability;
+select * from collation_character_set_applicability
+where collation_name <> 'utf8_general_cs';
select * from schemata;
select table_name from tables;
--source suite/funcs_1/datadict/datadict_bug_12777.inc
select table_name, column_name, column_type from columns;
select character_set_name from character_sets;
-select collation_name from collations;
+select collation_name from collations where collation_name <> 'utf8_general_cs';
select routine_name, routine_type from routines;
select table_name, index_name from statistics;
select table_name from views;
@@ -1926,7 +1927,7 @@ let $message= Testcase 3.2.3.2:;
# the USAGE privilege.
################################################################################
-SELECT * FROM collations;
+SELECT * FROM collations where collation_name <> 'utf8_general_cs';
# -------------------------------------------------------------------------------------------------------
let $message= Testcase 3.2.3.3:;
@@ -1973,7 +1974,8 @@ let $message= Testcase 3.2.4.2:;
# and update with expected results afterwards.
################################################################################
-SELECT * FROM collation_character_set_applicability;
+SELECT * FROM collation_character_set_applicability
+where collation_name <> 'utf8_general_cs';
# -------------------------------------------------------------------------------------------------------
let $message= Testcase 3.2.4.3:;
diff --git a/mysql-test/suite/funcs_1/datadict/datadict_priv.inc b/mysql-test/suite/funcs_1/datadict/datadict_priv.inc
index 36143e1526e..8256b51949e 100644
--- a/mysql-test/suite/funcs_1/datadict/datadict_priv.inc
+++ b/mysql-test/suite/funcs_1/datadict/datadict_priv.inc
@@ -103,5 +103,8 @@ eval CREATE TABLE new_$table AS SELECT * FROM $table;
--error ER_DBACCESS_DENIED_ERROR
DROP DATABASE information_schema;
---error ER_DBACCESS_DENIED_ERROR
+--error ER_PARSE_ERROR
RENAME DATABASE information_schema TO info_schema;
+
+--error ER_DBACCESS_DENIED_ERROR
+ALTER DATABASE information_schema UPGRADE DATA DIRECTORY NAME;
diff --git a/mysql-test/suite/funcs_1/datadict/datadict_show_schema.inc b/mysql-test/suite/funcs_1/datadict/datadict_show_schema.inc
index 260119f030f..35060cefbf8 100644
--- a/mysql-test/suite/funcs_1/datadict/datadict_show_schema.inc
+++ b/mysql-test/suite/funcs_1/datadict/datadict_show_schema.inc
@@ -35,8 +35,9 @@ eval select table_name, index_schema, index_name, index_type
where table_schema like '$dbname%';
--replace_result $SERVER_NAME <SERVER_NAME>
+--sorted_result
eval select *
- from information_schema.user_privileges order by grantee, privilege_type;
+ from information_schema.user_privileges;
# where grantee="'u_6_401013'@'%'";
eval select *
diff --git a/mysql-test/suite/funcs_1/datadict/datadict_tables.inc b/mysql-test/suite/funcs_1/datadict/datadict_tables.inc
index 14e39c083b0..9712f0a9c1c 100644
--- a/mysql-test/suite/funcs_1/datadict/datadict_tables.inc
+++ b/mysql-test/suite/funcs_1/datadict/datadict_tables.inc
@@ -28,8 +28,8 @@ eval $dd_part1 tables $dd_part2;
--source suite/funcs_1/datadict/datadict_bug_12777.inc
eval $dd_part1 columns $dd_part2;
eval $dd_part1 character_sets $dd_part2;
-eval $dd_part1 collations $dd_part2;
-eval $dd_part1 collation_character_set_applicability $dd_part2;
+eval $dd_part1 collations where collation_name <> 'utf8_general_cs' $dd_part2;
+eval $dd_part1 collation_character_set_applicability where collation_name <> 'utf8_general_cs' $dd_part2;
--replace_column 16 <Created> 17 <Last_Altered>
eval $dd_part1 routines $dd_part2;
eval $dd_part1 statistics $dd_part2;
diff --git a/mysql-test/suite/funcs_1/datadict/processlist_val.inc b/mysql-test/suite/funcs_1/datadict/processlist_val.inc
index da2c2950095..62e5d95f875 100644
--- a/mysql-test/suite/funcs_1/datadict/processlist_val.inc
+++ b/mysql-test/suite/funcs_1/datadict/processlist_val.inc
@@ -94,14 +94,25 @@ connect (ddicttestuser1,localhost,ddicttestuser1,ddictpass,information_schema);
--echo ----- switch to connection default (user = root) -----
connection default;
# - We have now a second connection.
-# - important values in second connection
+# First working phase for this connection is "Connect".
+# This is a very short phase and the likelihood to meet it is
+# - nearly zero on average boxes with low parallel load
+# - around some percent on weak or overloaded boxes
+# (Bug#32153 Status output differs - scheduling ?)
+# Therefore we poll till we reach the long lasting phase with:
# - USER = ddicttestuser1
# - HOST = 'localhost'
# - DB = 'information_schema'
# - Command = 'Sleep'
-# - TIME = 0, I hope the testing machines are all time fast enough
+# - TIME >= 0 Overloaded boxes can cause that we do not hit TIME = 0.
# - State IS NULL
# - INFO must be empty
+#
+let $wait_condition= SELECT COUNT(*) FROM INFORMATION_SCHEMA.PROCESSLIST
+ WHERE COMMAND = 'Sleep' AND TIME > 0;
+--source include/wait_condition.inc
+#
+# Expect to hit TIME = 1.
--replace_column 1 <ID>
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST;
# Change the SQL command (affects content of INFO)
@@ -109,25 +120,19 @@ SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST;
SHOW FULL PROCESSLIST;
#
--echo # Sleep some time
-# The value of TIME must increase after some sleeps.
-# So poll till TIME changes.
-let $run= 10;
-while ($run)
-{
- dec $run;
- if (`SELECT COUNT(*) FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE ID = @my_proclist_id + 1 AND TIME > 0`)
- {
- let $run= 0;
- }
- --real_sleep 0.2
-}
-# Either we have now reached TIME = 1 or we fail with unexpected result.
-# Expect to see now TIME = 1
+# The value of TIME must increase and reach 2 after some sleeps.
+let $wait_timeout= 2;
+let $wait_condition= SELECT COUNT(*) FROM INFORMATION_SCHEMA.PROCESSLIST
+ WHERE TIME > 1;
+--source include/wait_condition.inc
+#
+# Expect to hit TIME = 2.
--replace_column 1 <ID>
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST;
--replace_column 1 <ID>
SHOW FULL PROCESSLIST;
+#
+#
# The second connection must have an ID = my ID + 1;
SELECT ID = @my_proclist_id + 1 FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE USER = 'ddicttestuser1';
@@ -150,6 +155,12 @@ SHOW FULL PROCESSLIST;
--echo
--echo ----- establish connection con2 (user = ddicttestuser1) ------
connect (con2,localhost,ddicttestuser1,ddictpass,information_schema);
+#
+# If the testing box is under heavy load we might see connection ddicttestuser1
+# within the short phase INFO = 'SHOW FULL PROCESSLIST' and STATE = 'Writing to net'.
+let $wait_condition= SELECT COUNT(*) FROM INFORMATION_SCHEMA.PROCESSLIST
+ WHERE COMMAND = 'Sleep';
+--source include/wait_condition.inc
--replace_column 1 <ID> 6 <TIME>
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST;
--replace_column 1 <ID> 6 <TIME>
@@ -183,24 +194,17 @@ connection default;
# - USER = ddicttestuser1
# - HOST = 'localhost'
# - DB = 'information_schema'
-# - Command = 'Query'
+# - Command = 'Query'(run without --ps-protocol)/'Execute' (run --ps-protocol)
# - TIME = 1, Attention: check with TIME = 0 is not stable
# - State IS NULL
# - INFO = "SELECT sleep(2.5),'Command time'"
--echo # Sleep some time
-# The command must be at some time in work by the server.
+# The command must be after some time in work by the server.
# So poll till INFO is no more NULL and TIME > 0.
-let $run= 10;
-while ($run)
-{
- dec $run;
- if (`SELECT COUNT(*) FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE INFO IS NOT NULL AND TIME > 0`)
- {
- let $run= 0;
- }
- --real_sleep 0.2
-}
+let $wait_condition= SELECT COUNT(*) FROM INFORMATION_SCHEMA.PROCESSLIST
+ WHERE INFO IS NOT NULL AND TIME > 0;
+--source include/wait_condition.inc
+#
# Expect to see TIME = 1
--replace_column 1 <ID>
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST;
@@ -208,20 +212,13 @@ SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST;
SHOW FULL PROCESSLIST;
#
--echo # Sleep some time
-# The value of TIME must increase after some sleeps therefore
-# poll till TIME changes
-let $run= 10;
-while ($run)
-{
- dec $run;
- if (`SELECT COUNT(*) FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE ID = @my_proclist_id + 1 AND TIME > 1`)
- {
- let $run= 0;
- }
- --real_sleep 0.2
-}
-# Either we have now reached TIME = 2 or we fail with unexpected result.
+# The value of TIME must increase and reach 2 after some sleeps.
+let $wait_timeout= 2;
+let $wait_condition= SELECT COUNT(*) FROM INFORMATION_SCHEMA.PROCESSLIST
+ WHERE TIME > 1;
+--source include/wait_condition.inc
+#
+# Expect to see TIME = 2
--replace_column 1 <ID>
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST;
--replace_column 1 <ID>
@@ -248,19 +245,14 @@ send SELECT sleep(2),'BEGIN this is the representative of a very long statement.
--echo ----- switch to connection default (user = root) -----
connection default;
--echo # Sleep some time
-# The command must be at some time in work by the server.
-# So poll till INFO is no more NULL.
-let $run= 10;
-while ($run)
-{
- dec $run;
- if (`SELECT COUNT(*) FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE INFO IS NOT NULL`)
- {
- let $run= 0;
- }
- --real_sleep 0.2
-}
+# The command must be after some time in work by the server.
+# There is a short phase with STATE IS NULL followed by a longer phase
+# with STATE = 'init'.
+# So poll till INFO is no more NULL AND STATE = 'init'.
+let $wait_condition= SELECT COUNT(*) FROM INFORMATION_SCHEMA.PROCESSLIST
+ WHERE INFO IS NOT NULL AND STATE = 'init';
+--source include/wait_condition.inc
+#
# Expect to see that SELECT/SHOW PROCESSLIST can handle my statement monster.
--replace_column 1 <ID> 6 <TIME>
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST;
@@ -295,19 +287,12 @@ send SELECT COUNT(*) FROM test.t1;
--echo ----- switch to connection default (user = root) -----
connection default;
--echo # Sleep some time
-# The command must be at some time in work by the server.
+# The command must be after some time in work by the server.
# So poll till INFO is no more NULL.
-let $run= 10;
-while ($run)
-{
- dec $run;
- if (`SELECT COUNT(*) FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE INFO IS NOT NULL`)
- {
- let $run= 0;
- }
- --real_sleep 0.2
-}
+let $wait_condition= SELECT COUNT(*) FROM INFORMATION_SCHEMA.PROCESSLIST
+ WHERE INFO IS NOT NULL AND STATE = 'Locked';
+--source include/wait_condition.inc
+#
# Expect to see the state 'Locked' for the second connection because the SELECT
# collides with the WRITE TABLE LOCK.
--replace_column 1 <ID> 6 <TIME>
diff --git a/mysql-test/suite/funcs_1/r/a_processlist_priv_no_prot.result b/mysql-test/suite/funcs_1/r/a_processlist_priv_no_prot.result
index 13055b5543b..233544ec134 100644
--- a/mysql-test/suite/funcs_1/r/a_processlist_priv_no_prot.result
+++ b/mysql-test/suite/funcs_1/r/a_processlist_priv_no_prot.result
@@ -84,6 +84,8 @@ ERROR 42S02: Unknown table 'new_processlist' in information_schema
DROP DATABASE information_schema;
ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_schema'
RENAME DATABASE information_schema TO info_schema;
+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 'DATABASE information_schema TO info_schema' at line 1
+ALTER DATABASE information_schema UPGRADE DATA DIRECTORY NAME;
ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_schema'
####################################################################################
3 Switch to connection con100 (user=ddicttestuser1 with no PROCESS privilege):
@@ -149,6 +151,8 @@ ERROR 42S02: Unknown table 'new_processlist' in information_schema
DROP DATABASE information_schema;
ERROR 42000: Access denied for user 'ddicttestuser1'@'localhost' to database 'information_schema'
RENAME DATABASE information_schema TO info_schema;
+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 'DATABASE information_schema TO info_schema' at line 1
+ALTER DATABASE information_schema UPGRADE DATA DIRECTORY NAME;
ERROR 42000: Access denied for user 'ddicttestuser1'@'localhost' to database 'information_schema'
####################################################################################
4 Grant PROCESS privilege to ddicttestuser1
diff --git a/mysql-test/suite/funcs_1/r/a_processlist_val_no_prot.result b/mysql-test/suite/funcs_1/r/a_processlist_val_no_prot.result
index 9a7c9805b66..967c157f535 100644
--- a/mysql-test/suite/funcs_1/r/a_processlist_val_no_prot.result
+++ b/mysql-test/suite/funcs_1/r/a_processlist_val_no_prot.result
@@ -45,21 +45,21 @@ SELECT ID INTO @my_proclist_id FROM INFORMATION_SCHEMA.PROCESSLIST;
----- switch to connection default (user = root) -----
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST;
ID USER HOST DB COMMAND TIME STATE INFO
-<ID> ddicttestuser1 localhost information_schema Sleep 0 NULL
+<ID> ddicttestuser1 localhost information_schema Sleep 1 NULL
<ID> root localhost information_schema Query 0 preparing SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST
SHOW FULL PROCESSLIST;
Id User Host db Command Time State Info
<ID> root localhost information_schema Query 0 NULL SHOW FULL PROCESSLIST
-<ID> ddicttestuser1 localhost information_schema Sleep 0 NULL
+<ID> ddicttestuser1 localhost information_schema Sleep 1 NULL
# Sleep some time
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST;
ID USER HOST DB COMMAND TIME STATE INFO
-<ID> ddicttestuser1 localhost information_schema Sleep 1 NULL
+<ID> ddicttestuser1 localhost information_schema Sleep 2 NULL
<ID> root localhost information_schema Query 0 preparing SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST
SHOW FULL PROCESSLIST;
Id User Host db Command Time State Info
<ID> root localhost information_schema Query 0 NULL SHOW FULL PROCESSLIST
-<ID> ddicttestuser1 localhost information_schema Sleep 1 NULL
+<ID> ddicttestuser1 localhost information_schema Sleep 2 NULL
SELECT ID = @my_proclist_id + 1 FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE USER = 'ddicttestuser1';
ID = @my_proclist_id + 1
diff --git a/mysql-test/suite/funcs_1/r/b_processlist_priv_ps.result b/mysql-test/suite/funcs_1/r/b_processlist_priv_ps.result
index b10a6c1a5d2..c37d47eaf97 100644
--- a/mysql-test/suite/funcs_1/r/b_processlist_priv_ps.result
+++ b/mysql-test/suite/funcs_1/r/b_processlist_priv_ps.result
@@ -84,6 +84,8 @@ ERROR 42S02: Unknown table 'new_processlist' in information_schema
DROP DATABASE information_schema;
ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_schema'
RENAME DATABASE information_schema TO info_schema;
+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 'DATABASE information_schema TO info_schema' at line 1
+ALTER DATABASE information_schema UPGRADE DATA DIRECTORY NAME;
ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_schema'
####################################################################################
3 Switch to connection con100 (user=ddicttestuser1 with no PROCESS privilege):
@@ -149,6 +151,8 @@ ERROR 42S02: Unknown table 'new_processlist' in information_schema
DROP DATABASE information_schema;
ERROR 42000: Access denied for user 'ddicttestuser1'@'localhost' to database 'information_schema'
RENAME DATABASE information_schema TO info_schema;
+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 'DATABASE information_schema TO info_schema' at line 1
+ALTER DATABASE information_schema UPGRADE DATA DIRECTORY NAME;
ERROR 42000: Access denied for user 'ddicttestuser1'@'localhost' to database 'information_schema'
####################################################################################
4 Grant PROCESS privilege to ddicttestuser1
diff --git a/mysql-test/suite/funcs_1/r/b_processlist_val_ps.result b/mysql-test/suite/funcs_1/r/b_processlist_val_ps.result
index db0a7750077..b4d8095125a 100644
--- a/mysql-test/suite/funcs_1/r/b_processlist_val_ps.result
+++ b/mysql-test/suite/funcs_1/r/b_processlist_val_ps.result
@@ -45,21 +45,21 @@ SELECT ID INTO @my_proclist_id FROM INFORMATION_SCHEMA.PROCESSLIST;
----- switch to connection default (user = root) -----
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST;
ID USER HOST DB COMMAND TIME STATE INFO
-<ID> ddicttestuser1 localhost information_schema Sleep 0 NULL
+<ID> ddicttestuser1 localhost information_schema Sleep 1 NULL
<ID> root localhost information_schema Execute 0 preparing SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST
SHOW FULL PROCESSLIST;
Id User Host db Command Time State Info
<ID> root localhost information_schema Query 0 NULL SHOW FULL PROCESSLIST
-<ID> ddicttestuser1 localhost information_schema Sleep 0 NULL
+<ID> ddicttestuser1 localhost information_schema Sleep 1 NULL
# Sleep some time
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST;
ID USER HOST DB COMMAND TIME STATE INFO
-<ID> ddicttestuser1 localhost information_schema Sleep 1 NULL
+<ID> ddicttestuser1 localhost information_schema Sleep 2 NULL
<ID> root localhost information_schema Execute 0 preparing SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST
SHOW FULL PROCESSLIST;
Id User Host db Command Time State Info
<ID> root localhost information_schema Query 0 NULL SHOW FULL PROCESSLIST
-<ID> ddicttestuser1 localhost information_schema Sleep 1 NULL
+<ID> ddicttestuser1 localhost information_schema Sleep 2 NULL
SELECT ID = @my_proclist_id + 1 FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE USER = 'ddicttestuser1';
ID = @my_proclist_id + 1
diff --git a/mysql-test/suite/funcs_1/r/innodb__datadict.result b/mysql-test/suite/funcs_1/r/innodb__datadict.result
index 4ac0f2e16ea..76e699614c8 100644
--- a/mysql-test/suite/funcs_1/r/innodb__datadict.result
+++ b/mysql-test/suite/funcs_1/r/innodb__datadict.result
@@ -10,8 +10,9 @@
. *__datadict.test are started. This can be a result of showing e.g. maximum
. values of the number of rows of tables.
.
-. This .result file has been checked OK with Linux 5.0.23-bk,
-. ChangeSet@1.2211, 2006-06-28 10:11:43-07:00.
+. This .result file has been checked OK with Linux 5.0.48,
+. build tree ChangeSet@1.2477.6.3, 2007-07-30
+. except that the not fixed Bug#30020 causes a difference.
.
--------------------------------------------------------------------------------
@@ -20,11 +21,21 @@ FIXME: There are subtests that are switched off due to known bugs:
SELECT 1 AS "have_bug_11589";
have_bug_11589
1
+SELECT 1 AS "have_bug_30689";
+have_bug_30689
+1
There are some statements where the ps-protocol is switched off.
This may come from the bug listed below, ir from other problems.
Bug#11589: mysqltest, --ps-protocol, strange output, float/double/real with zerofill
--------------------------------------------------------------------------------
+
+Selects on INFORMATION_SCHEMA.VIEWS present incomplete
+content for the column VIEW_DEFINITION in cases where
+the view selects(=is based) on an INFORMATION_SCHEMA table.
+---> VIEWS vu and vu1
+Bug#30689 Wrong content in I_S.VIEWS.VIEW_DEFINITION if VIEW is based on I_S
+--------------------------------------------------------------------------------
SET @NO_REFRESH = IF( '' = '', 0, 1);
DROP DATABASE IF EXISTS test1;
CREATE DATABASE test1;
@@ -1035,7 +1046,8 @@ CHECKSUM NULL
CREATE_OPTIONS #CO#
TABLE_COMMENT
SELECT * FROM tables
-WHERE NOT( table_schema = 'information_schema');
+WHERE NOT( table_schema = 'information_schema')
+AND NOT (table_schema = 'mysql' AND table_name LIKE 'help_%');
TABLE_CATALOG NULL
TABLE_SCHEMA db_datadict
TABLE_NAME v1
@@ -1206,90 +1218,6 @@ CREATE_OPTIONS
TABLE_COMMENT General log
TABLE_CATALOG NULL
TABLE_SCHEMA mysql
-TABLE_NAME help_category
-TABLE_TYPE BASE TABLE
-ENGINE MyISAM
-VERSION 10
-ROW_FORMAT Fixed
-TABLE_ROWS 37
-AVG_ROW_LENGTH #ARL#
-DATA_LENGTH #DL#
-MAX_DATA_LENGTH #MDL#
-INDEX_LENGTH #IL#
-DATA_FREE #DF#
-AUTO_INCREMENT NULL
-CREATE_TIME YYYY-MM-DD hh:mm:ss
-UPDATE_TIME YYYY-MM-DD hh:mm:ss
-CHECK_TIME YYYY-MM-DD hh:mm:ss
-TABLE_COLLATION utf8_general_ci
-CHECKSUM NULL
-CREATE_OPTIONS
-TABLE_COMMENT help categories
-TABLE_CATALOG NULL
-TABLE_SCHEMA mysql
-TABLE_NAME help_keyword
-TABLE_TYPE BASE TABLE
-ENGINE MyISAM
-VERSION 10
-ROW_FORMAT Fixed
-TABLE_ROWS 424
-AVG_ROW_LENGTH #ARL#
-DATA_LENGTH #DL#
-MAX_DATA_LENGTH #MDL#
-INDEX_LENGTH #IL#
-DATA_FREE #DF#
-AUTO_INCREMENT NULL
-CREATE_TIME YYYY-MM-DD hh:mm:ss
-UPDATE_TIME YYYY-MM-DD hh:mm:ss
-CHECK_TIME YYYY-MM-DD hh:mm:ss
-TABLE_COLLATION utf8_general_ci
-CHECKSUM NULL
-CREATE_OPTIONS
-TABLE_COMMENT help keywords
-TABLE_CATALOG NULL
-TABLE_SCHEMA mysql
-TABLE_NAME help_relation
-TABLE_TYPE BASE TABLE
-ENGINE MyISAM
-VERSION 10
-ROW_FORMAT Fixed
-TABLE_ROWS 901
-AVG_ROW_LENGTH #ARL#
-DATA_LENGTH #DL#
-MAX_DATA_LENGTH #MDL#
-INDEX_LENGTH #IL#
-DATA_FREE #DF#
-AUTO_INCREMENT NULL
-CREATE_TIME YYYY-MM-DD hh:mm:ss
-UPDATE_TIME YYYY-MM-DD hh:mm:ss
-CHECK_TIME YYYY-MM-DD hh:mm:ss
-TABLE_COLLATION utf8_general_ci
-CHECKSUM NULL
-CREATE_OPTIONS
-TABLE_COMMENT keyword-topic relation
-TABLE_CATALOG NULL
-TABLE_SCHEMA mysql
-TABLE_NAME help_topic
-TABLE_TYPE BASE TABLE
-ENGINE MyISAM
-VERSION 10
-ROW_FORMAT Dynamic
-TABLE_ROWS 479
-AVG_ROW_LENGTH #ARL#
-DATA_LENGTH #DL#
-MAX_DATA_LENGTH #MDL#
-INDEX_LENGTH #IL#
-DATA_FREE #DF#
-AUTO_INCREMENT NULL
-CREATE_TIME YYYY-MM-DD hh:mm:ss
-UPDATE_TIME YYYY-MM-DD hh:mm:ss
-CHECK_TIME YYYY-MM-DD hh:mm:ss
-TABLE_COLLATION utf8_general_ci
-CHECKSUM NULL
-CREATE_OPTIONS
-TABLE_COMMENT help topics
-TABLE_CATALOG NULL
-TABLE_SCHEMA mysql
TABLE_NAME host
TABLE_TYPE BASE TABLE
ENGINE MyISAM
@@ -2338,9 +2266,9 @@ NULL information_schema COLUMNS NUMERIC_PRECISION 11 NULL YES bigint NULL NULL 1
NULL information_schema COLUMNS NUMERIC_SCALE 12 NULL YES bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned select
NULL information_schema COLUMNS CHARACTER_SET_NAME 13 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema COLUMNS COLLATION_NAME 14 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
-NULL information_schema COLUMNS COLUMN_TYPE 15 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema COLUMNS COLUMN_TYPE 15 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema COLUMNS COLUMN_KEY 16 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
-NULL information_schema COLUMNS EXTRA 17 NO varchar 20 60 NULL NULL utf8 utf8_general_ci varchar(20) select
+NULL information_schema COLUMNS EXTRA 17 NO varchar 27 81 NULL NULL utf8 utf8_general_ci varchar(27) select
NULL information_schema COLUMNS PRIVILEGES 18 NO varchar 80 240 NULL NULL utf8 utf8_general_ci varchar(80) select
NULL information_schema COLUMNS COLUMN_COMMENT 19 NO varchar 255 765 NULL NULL utf8 utf8_general_ci varchar(255) select
NULL information_schema COLUMN_PRIVILEGES GRANTEE 1 NO varchar 81 243 NULL NULL utf8 utf8_general_ci varchar(81) select
@@ -2362,12 +2290,12 @@ NULL information_schema EVENTS EVENT_NAME 3 NO varchar 64 192 NULL NULL utf8 ut
NULL information_schema EVENTS DEFINER 4 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
NULL information_schema EVENTS TIME_ZONE 5 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema EVENTS EVENT_BODY 6 NO varchar 8 24 NULL NULL utf8 utf8_general_ci varchar(8) select
-NULL information_schema EVENTS EVENT_DEFINITION 7 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema EVENTS EVENT_DEFINITION 7 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema EVENTS EVENT_TYPE 8 NO varchar 9 27 NULL NULL utf8 utf8_general_ci varchar(9) select
NULL information_schema EVENTS EXECUTE_AT 9 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS INTERVAL_VALUE 10 NULL YES varchar 256 768 NULL NULL utf8 utf8_general_ci varchar(256) select
NULL information_schema EVENTS INTERVAL_FIELD 11 NULL YES varchar 18 54 NULL NULL utf8 utf8_general_ci varchar(18) select
-NULL information_schema EVENTS SQL_MODE 12 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema EVENTS SQL_MODE 12 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema EVENTS STARTS 13 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS ENDS 14 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS STATUS 15 NO varchar 18 54 NULL NULL utf8 utf8_general_ci varchar(18) select
@@ -2505,7 +2433,7 @@ NULL information_schema ROUTINES SQL_PATH 14 NULL YES varchar 64 192 NULL NULL u
NULL information_schema ROUTINES SECURITY_TYPE 15 NO varchar 7 21 NULL NULL utf8 utf8_general_ci varchar(7) select
NULL information_schema ROUTINES CREATED 16 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema ROUTINES LAST_ALTERED 17 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime select
-NULL information_schema ROUTINES SQL_MODE 18 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema ROUTINES SQL_MODE 18 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema ROUTINES ROUTINE_COMMENT 19 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema ROUTINES DEFINER 20 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
NULL information_schema ROUTINES CHARACTER_SET_CLIENT 21 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
@@ -2582,7 +2510,7 @@ NULL information_schema TRIGGERS EVENT_OBJECT_SCHEMA 6 NO varchar 64 192 NULL N
NULL information_schema TRIGGERS EVENT_OBJECT_TABLE 7 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema TRIGGERS ACTION_ORDER 8 0 NO bigint NULL NULL 19 0 NULL NULL bigint(4) select
NULL information_schema TRIGGERS ACTION_CONDITION 9 NULL YES longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
-NULL information_schema TRIGGERS ACTION_STATEMENT 10 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS ACTION_STATEMENT 10 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema TRIGGERS ACTION_ORIENTATION 11 NO varchar 9 27 NULL NULL utf8 utf8_general_ci varchar(9) select
NULL information_schema TRIGGERS ACTION_TIMING 12 NO varchar 6 18 NULL NULL utf8 utf8_general_ci varchar(6) select
NULL information_schema TRIGGERS ACTION_REFERENCE_OLD_TABLE 13 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
@@ -2590,8 +2518,8 @@ NULL information_schema TRIGGERS ACTION_REFERENCE_NEW_TABLE 14 NULL YES varchar
NULL information_schema TRIGGERS ACTION_REFERENCE_OLD_ROW 15 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema TRIGGERS ACTION_REFERENCE_NEW_ROW 16 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema TRIGGERS CREATED 17 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
-NULL information_schema TRIGGERS SQL_MODE 18 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
-NULL information_schema TRIGGERS DEFINER 19 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS SQL_MODE 18 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS DEFINER 19 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema TRIGGERS CHARACTER_SET_CLIENT 20 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
NULL information_schema TRIGGERS COLLATION_CONNECTION 21 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
NULL information_schema TRIGGERS DATABASE_COLLATION 22 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
@@ -2602,7 +2530,7 @@ NULL information_schema USER_PRIVILEGES IS_GRANTABLE 4 NO varchar 3 9 NULL NULL
NULL information_schema VIEWS TABLE_CATALOG 1 NULL YES varchar 4096 12288 NULL NULL utf8 utf8_general_ci varchar(4096) select
NULL information_schema VIEWS TABLE_SCHEMA 2 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema VIEWS TABLE_NAME 3 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
-NULL information_schema VIEWS VIEW_DEFINITION 4 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema VIEWS VIEW_DEFINITION 4 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema VIEWS CHECK_OPTION 5 NO varchar 8 24 NULL NULL utf8 utf8_general_ci varchar(8) select
NULL information_schema VIEWS IS_UPDATABLE 6 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema VIEWS DEFINER 7 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
@@ -2639,7 +2567,7 @@ NULL mysql columns_priv Db 2 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PR
NULL mysql columns_priv User 3 NO char 16 48 NULL NULL utf8 utf8_bin char(16) PRI select,insert,update,references
NULL mysql columns_priv Table_name 4 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PRI select,insert,update,references
NULL mysql columns_priv Column_name 5 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PRI select,insert,update,references
-NULL mysql columns_priv Timestamp 6 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL mysql columns_priv Timestamp 6 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL mysql columns_priv Column_priv 7 NO set 31 93 NULL NULL utf8 utf8_general_ci set('Select','Insert','Update','References') select,insert,update,references
NULL mysql db Host 1 NO char 60 180 NULL NULL utf8 utf8_bin char(60) PRI select,insert,update,references
NULL mysql db Db 2 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PRI select,insert,update,references
@@ -2670,7 +2598,7 @@ NULL mysql event definer 4 NO char 77 231 NULL NULL utf8 utf8_bin char(77) se
NULL mysql event execute_at 5 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select,insert,update,references
NULL mysql event interval_value 6 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
NULL mysql event interval_field 7 NULL YES enum 18 54 NULL NULL utf8 utf8_general_ci enum('YEAR','QUARTER','MONTH','DAY','HOUR','MINUTE','WEEK','SECOND','MICROSECOND','YEAR_MONTH','DAY_HOUR','DAY_MINUTE','DAY_SECOND','HOUR_MINUTE','HOUR_SECOND','MINUTE_SECOND','DAY_MICROSECOND','HOUR_MICROSECOND','MINUTE_MICROSECOND','SECOND_MICROSECOND') select,insert,update,references
-NULL mysql event created 8 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL mysql event created 8 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL mysql event modified 9 0000-00-00 00:00:00 NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
NULL mysql event last_executed 10 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select,insert,update,references
NULL mysql event starts 11 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select,insert,update,references
@@ -2689,12 +2617,12 @@ NULL mysql func name 1 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PRI sel
NULL mysql func ret 2 0 NO tinyint NULL NULL 3 0 NULL NULL tinyint(1) select,insert,update,references
NULL mysql func dl 3 NO char 128 384 NULL NULL utf8 utf8_bin char(128) select,insert,update,references
NULL mysql func type 4 NULL NO enum 9 27 NULL NULL utf8 utf8_general_ci enum('function','aggregate') select,insert,update,references
-NULL mysql general_log event_time 1 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
-NULL mysql general_log user_host 2 NULL YES mediumtext 16777215 16777215 NULL NULL utf8 utf8_general_ci mediumtext select,insert,update,references
-NULL mysql general_log thread_id 3 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
-NULL mysql general_log server_id 4 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
-NULL mysql general_log command_type 5 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references
-NULL mysql general_log argument 6 NULL YES mediumtext 16777215 16777215 NULL NULL utf8 utf8_general_ci mediumtext select,insert,update,references
+NULL mysql general_log event_time 1 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
+NULL mysql general_log user_host 2 NULL NO mediumtext 16777215 16777215 NULL NULL utf8 utf8_general_ci mediumtext select,insert,update,references
+NULL mysql general_log thread_id 3 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
+NULL mysql general_log server_id 4 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
+NULL mysql general_log command_type 5 NULL NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references
+NULL mysql general_log argument 6 NULL NO mediumtext 16777215 16777215 NULL NULL utf8 utf8_general_ci mediumtext select,insert,update,references
NULL mysql help_category help_category_id 1 NULL NO smallint NULL NULL 5 0 NULL NULL smallint(5) unsigned PRI select,insert,update,references
NULL mysql help_category name 2 NULL NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) UNI select,insert,update,references
NULL mysql help_category parent_category_id 3 NULL YES smallint NULL NULL 5 0 NULL NULL smallint(5) unsigned select,insert,update,references
@@ -2747,10 +2675,10 @@ NULL mysql proc sql_data_access 6 CONTAINS_SQL NO enum 17 51 NULL NULL utf8 utf8
NULL mysql proc is_deterministic 7 NO NO enum 3 9 NULL NULL utf8 utf8_general_ci enum('YES','NO') select,insert,update,references
NULL mysql proc security_type 8 DEFINER NO enum 7 21 NULL NULL utf8 utf8_general_ci enum('INVOKER','DEFINER') select,insert,update,references
NULL mysql proc param_list 9 NULL NO blob 65535 65535 NULL NULL NULL NULL blob select,insert,update,references
-NULL mysql proc returns 10 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
+NULL mysql proc returns 10 NULL NO longblob 4294967295 4294967295 NULL NULL NULL NULL longblob select,insert,update,references
NULL mysql proc body 11 NULL NO longblob 4294967295 4294967295 NULL NULL NULL NULL longblob select,insert,update,references
NULL mysql proc definer 12 NO char 77 231 NULL NULL utf8 utf8_bin char(77) select,insert,update,references
-NULL mysql proc created 13 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL mysql proc created 13 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL mysql proc modified 14 0000-00-00 00:00:00 NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
NULL mysql proc sql_mode 15 NO set 431 1293 NULL NULL utf8 utf8_general_ci set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','NOT_USED','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE') select,insert,update,references
NULL mysql proc comment 16 NO char 64 192 NULL NULL utf8 utf8_bin char(64) select,insert,update,references
@@ -2765,7 +2693,7 @@ NULL mysql procs_priv Routine_name 4 NO char 64 192 NULL NULL utf8 utf8_bin cha
NULL mysql procs_priv Routine_type 5 NULL NO enum 9 27 NULL NULL utf8 utf8_bin enum('FUNCTION','PROCEDURE') PRI select,insert,update,references
NULL mysql procs_priv Grantor 6 NO char 77 231 NULL NULL utf8 utf8_bin char(77) MUL select,insert,update,references
NULL mysql procs_priv Proc_priv 7 NO set 27 81 NULL NULL utf8 utf8_general_ci set('Execute','Alter Routine','Grant') select,insert,update,references
-NULL mysql procs_priv Timestamp 8 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL mysql procs_priv Timestamp 8 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL mysql servers Server_name 1 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) PRI select,insert,update,references
NULL mysql servers Host 2 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
NULL mysql servers Db 3 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
@@ -2775,23 +2703,23 @@ NULL mysql servers Port 6 0 NO int NULL NULL 10 0 NULL NULL int(4) select,inse
NULL mysql servers Socket 7 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
NULL mysql servers Wrapper 8 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
NULL mysql servers Owner 9 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
-NULL mysql slow_log start_time 1 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL mysql slow_log start_time 1 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL mysql slow_log user_host 2 NULL NO mediumtext 16777215 16777215 NULL NULL utf8 utf8_general_ci mediumtext select,insert,update,references
NULL mysql slow_log query_time 3 NULL NO time NULL NULL NULL NULL NULL NULL time select,insert,update,references
NULL mysql slow_log lock_time 4 NULL NO time NULL NULL NULL NULL NULL NULL time select,insert,update,references
NULL mysql slow_log rows_sent 5 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
NULL mysql slow_log rows_examined 6 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
-NULL mysql slow_log db 7 NULL YES varchar 4096 12288 NULL NULL utf8 utf8_general_ci varchar(4096) select,insert,update,references
-NULL mysql slow_log last_insert_id 8 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
-NULL mysql slow_log insert_id 9 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
-NULL mysql slow_log server_id 10 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
+NULL mysql slow_log db 7 NULL NO varchar 4096 12288 NULL NULL utf8 utf8_general_ci varchar(4096) select,insert,update,references
+NULL mysql slow_log last_insert_id 8 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
+NULL mysql slow_log insert_id 9 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
+NULL mysql slow_log server_id 10 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
NULL mysql slow_log sql_text 11 NULL NO mediumtext 16777215 16777215 NULL NULL utf8 utf8_general_ci mediumtext select,insert,update,references
NULL mysql tables_priv Host 1 NO char 60 180 NULL NULL utf8 utf8_bin char(60) PRI select,insert,update,references
NULL mysql tables_priv Db 2 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PRI select,insert,update,references
NULL mysql tables_priv User 3 NO char 16 48 NULL NULL utf8 utf8_bin char(16) PRI select,insert,update,references
NULL mysql tables_priv Table_name 4 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PRI select,insert,update,references
NULL mysql tables_priv Grantor 5 NO char 77 231 NULL NULL utf8 utf8_bin char(77) MUL select,insert,update,references
-NULL mysql tables_priv Timestamp 6 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL mysql tables_priv Timestamp 6 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL mysql tables_priv Table_priv 7 NO set 98 294 NULL NULL utf8 utf8_general_ci set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter','Create View','Show view','Trigger') select,insert,update,references
NULL mysql tables_priv Column_priv 8 NO set 31 93 NULL NULL utf8 utf8_general_ci set('Select','Insert','Update','References') select,insert,update,references
NULL mysql time_zone Time_zone_id 1 NULL NO int NULL NULL 10 0 NULL NULL int(10) unsigned PRI auto_increment select,insert,update,references
@@ -3103,7 +3031,7 @@ NULL test tb4 f217 42 NULL YES double unsigned zerofill NULL NULL 22 NULL NULL N
NULL test tb4 f218 43 NULL YES date NULL NULL NULL NULL NULL NULL date select,insert,update,references
NULL test tb4 f219 44 NULL YES time NULL NULL NULL NULL NULL NULL time select,insert,update,references
NULL test tb4 f220 45 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select,insert,update,references
-NULL test tb4 f221 46 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL test tb4 f221 46 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL test tb4 f222 47 NULL YES year NULL NULL NULL NULL NULL NULL year(4) select,insert,update,references
NULL test tb4 f223 48 NULL YES year NULL NULL NULL NULL NULL NULL year(4) select,insert,update,references
NULL test tb4 f224 49 NULL YES year NULL NULL NULL NULL NULL NULL year(4) select,insert,update,references
@@ -3211,7 +3139,7 @@ binary binary Binary pseudo charset 1
geostd8 geostd8_general_ci GEOSTD8 Georgian 1
cp932 cp932_japanese_ci SJIS for Windows Japanese 2
eucjpms eucjpms_japanese_ci UJIS for Windows Japanese 3
-select sum(id) from collations;
+select sum(id) from collations where collation_name <> 'utf8_general_cs';
sum(id)
10840
select collation_name, character_set_name into @x,@y
@@ -3227,7 +3155,8 @@ END NULL NULL SQL NO CONTAINS SQL NULL DEFINER YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh
select count(*) from routines;
count(*)
1
-select * from statistics;
+select * from statistics
+where not (table_schema = 'mysql' and table_name like 'help_%');
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME NON_UNIQUE INDEX_SCHEMA INDEX_NAME SEQ_IN_INDEX COLUMN_NAME COLLATION CARDINALITY SUB_PART PACKED NULLABLE INDEX_TYPE COMMENT
NULL mysql columns_priv 0 mysql PRIMARY 1 Host A NULL NULL NULL BTREE
NULL mysql columns_priv 0 mysql PRIMARY 2 Db A NULL NULL NULL BTREE
@@ -3241,14 +3170,6 @@ NULL mysql db 1 mysql User 1 User A 1 NULL NULL BTREE
NULL mysql event 0 mysql PRIMARY 1 db A NULL NULL NULL BTREE
NULL mysql event 0 mysql PRIMARY 2 name A 0 NULL NULL BTREE
NULL mysql func 0 mysql PRIMARY 1 name A 0 NULL NULL BTREE
-NULL mysql help_category 0 mysql PRIMARY 1 help_category_id A 37 NULL NULL BTREE
-NULL mysql help_category 0 mysql name 1 name A 37 NULL NULL BTREE
-NULL mysql help_keyword 0 mysql PRIMARY 1 help_keyword_id A 424 NULL NULL BTREE
-NULL mysql help_keyword 0 mysql name 1 name A 424 NULL NULL BTREE
-NULL mysql help_relation 0 mysql PRIMARY 1 help_keyword_id A NULL NULL NULL BTREE
-NULL mysql help_relation 0 mysql PRIMARY 2 help_topic_id A 901 NULL NULL BTREE
-NULL mysql help_topic 0 mysql PRIMARY 1 help_topic_id A 479 NULL NULL BTREE
-NULL mysql help_topic 0 mysql name 1 name A 479 NULL NULL BTREE
NULL mysql host 0 mysql PRIMARY 1 Host A NULL NULL NULL BTREE
NULL mysql host 0 mysql PRIMARY 2 Db A 0 NULL NULL BTREE
NULL mysql ndb_binlog_index 0 mysql PRIMARY 1 epoch A 0 NULL NULL BTREE
@@ -3280,8 +3201,16 @@ NULL mysql user 0 mysql PRIMARY 2 User A 3 NULL NULL BTREE
select * from views;
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION
NULL db_datadict v1 SELECT * FROM information_schema.tables NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
-NULL db_datadict vu SELECT DISTINCT u, NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
-NULL db_datadict vu1 SELECT grantee AS u NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
+NULL db_datadict vu SELECT DISTINCT u,
+SUBSTRING( u, LENGTH(SUBSTRING_INDEX(u,'@',1))+3 )
+AS server,
+SUBSTRING( u, LENGTH(SUBSTRING_INDEX(u,'@',1))+3,
+LENGTH( SUBSTRING( u,
+LENGTH( SUBSTRING_INDEX(u, '@',1)) +3 )) - 1 )
+AS Server_Clean
+FROM db_datadict.vu1 NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
+NULL db_datadict vu1 SELECT grantee AS u
+FROM information_schema.user_privileges NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
select * from user_privileges order by grantee, privilege_type;
GRANTEE TABLE_CATALOG PRIVILEGE_TYPE IS_GRANTABLE
'root'@'127.0.0.1' NULL ALTER YES
@@ -3479,9 +3408,10 @@ NULL mysql PRIMARY NULL mysql user User 2 NULL NULL NULL NULL
select count(*) as max_recs from key_column_usage;
max_recs
45
-select max(cardinality) from statistics;
+select max(cardinality) from statistics
+where not (table_schema = 'mysql' and table_name like 'help_%');
max(cardinality)
-901
+393
select concat("View '",
table_name, "' is associated with the database '", table_schema, "'.")
AS "Who is Who for the Views"
@@ -3680,10 +3610,10 @@ NULL information_schema CHARACTER_SETS CHARACTER_SET_NAME 1 NO varchar 64 192 N
SELECT * FROM character_sets LIMIT 1;
CHARACTER_SET_NAME DEFAULT_COLLATE_NAME DESCRIPTION MAXLEN
big5 big5_chinese_ci Big5 Traditional Chinese 2
-SELECT * FROM collations LIMIT 1;
+SELECT * FROM collations where collation_name <> 'utf8_general_cs' LIMIT 1;
COLLATION_NAME CHARACTER_SET_NAME ID IS_DEFAULT IS_COMPILED SORTLEN
big5_chinese_ci big5 1 Yes Yes 1
-SELECT * FROM collation_character_set_applicability LIMIT 1;
+SELECT * FROM collation_character_set_applicability where collation_name <> 'utf8_general_cs' LIMIT 1;
COLLATION_NAME CHARACTER_SET_NAME
big5_chinese_ci big5
SELECT * FROM routines LIMIT 1;
@@ -4371,7 +4301,8 @@ CHECKSUM NULL
CREATE_OPTIONS #CO#
TABLE_COMMENT
SELECT * FROM information_schema.tables
-WHERE NOT( table_schema = 'information_schema');
+WHERE NOT( table_schema = 'information_schema')
+AND NOT (table_schema = 'mysql' AND table_name LIKE 'help_%');
TABLE_CATALOG NULL
TABLE_SCHEMA db_datadict
TABLE_NAME v1
@@ -4542,90 +4473,6 @@ CREATE_OPTIONS
TABLE_COMMENT General log
TABLE_CATALOG NULL
TABLE_SCHEMA mysql
-TABLE_NAME help_category
-TABLE_TYPE BASE TABLE
-ENGINE MyISAM
-VERSION 10
-ROW_FORMAT Fixed
-TABLE_ROWS 37
-AVG_ROW_LENGTH #ARL#
-DATA_LENGTH #DL#
-MAX_DATA_LENGTH #MDL#
-INDEX_LENGTH #IL#
-DATA_FREE #DF#
-AUTO_INCREMENT NULL
-CREATE_TIME YYYY-MM-DD hh:mm:ss
-UPDATE_TIME YYYY-MM-DD hh:mm:ss
-CHECK_TIME YYYY-MM-DD hh:mm:ss
-TABLE_COLLATION utf8_general_ci
-CHECKSUM NULL
-CREATE_OPTIONS
-TABLE_COMMENT help categories
-TABLE_CATALOG NULL
-TABLE_SCHEMA mysql
-TABLE_NAME help_keyword
-TABLE_TYPE BASE TABLE
-ENGINE MyISAM
-VERSION 10
-ROW_FORMAT Fixed
-TABLE_ROWS 424
-AVG_ROW_LENGTH #ARL#
-DATA_LENGTH #DL#
-MAX_DATA_LENGTH #MDL#
-INDEX_LENGTH #IL#
-DATA_FREE #DF#
-AUTO_INCREMENT NULL
-CREATE_TIME YYYY-MM-DD hh:mm:ss
-UPDATE_TIME YYYY-MM-DD hh:mm:ss
-CHECK_TIME YYYY-MM-DD hh:mm:ss
-TABLE_COLLATION utf8_general_ci
-CHECKSUM NULL
-CREATE_OPTIONS
-TABLE_COMMENT help keywords
-TABLE_CATALOG NULL
-TABLE_SCHEMA mysql
-TABLE_NAME help_relation
-TABLE_TYPE BASE TABLE
-ENGINE MyISAM
-VERSION 10
-ROW_FORMAT Fixed
-TABLE_ROWS 901
-AVG_ROW_LENGTH #ARL#
-DATA_LENGTH #DL#
-MAX_DATA_LENGTH #MDL#
-INDEX_LENGTH #IL#
-DATA_FREE #DF#
-AUTO_INCREMENT NULL
-CREATE_TIME YYYY-MM-DD hh:mm:ss
-UPDATE_TIME YYYY-MM-DD hh:mm:ss
-CHECK_TIME YYYY-MM-DD hh:mm:ss
-TABLE_COLLATION utf8_general_ci
-CHECKSUM NULL
-CREATE_OPTIONS
-TABLE_COMMENT keyword-topic relation
-TABLE_CATALOG NULL
-TABLE_SCHEMA mysql
-TABLE_NAME help_topic
-TABLE_TYPE BASE TABLE
-ENGINE MyISAM
-VERSION 10
-ROW_FORMAT Dynamic
-TABLE_ROWS 479
-AVG_ROW_LENGTH #ARL#
-DATA_LENGTH #DL#
-MAX_DATA_LENGTH #MDL#
-INDEX_LENGTH #IL#
-DATA_FREE #DF#
-AUTO_INCREMENT NULL
-CREATE_TIME YYYY-MM-DD hh:mm:ss
-UPDATE_TIME YYYY-MM-DD hh:mm:ss
-CHECK_TIME YYYY-MM-DD hh:mm:ss
-TABLE_COLLATION utf8_general_ci
-CHECKSUM NULL
-CREATE_OPTIONS
-TABLE_COMMENT help topics
-TABLE_CATALOG NULL
-TABLE_SCHEMA mysql
TABLE_NAME host
TABLE_TYPE BASE TABLE
ENGINE MyISAM
@@ -5689,8 +5536,16 @@ NULL mysql columns_priv 0 mysql PRIMARY 5 Column_name A 0 NULL NULL BTREE
select * from information_schema.views limit 0, 5;
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION
NULL db_datadict v1 SELECT * FROM information_schema.tables NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
-NULL db_datadict vu SELECT DISTINCT u, NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
-NULL db_datadict vu1 SELECT grantee AS u NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
+NULL db_datadict vu SELECT DISTINCT u,
+SUBSTRING( u, LENGTH(SUBSTRING_INDEX(u,'@',1))+3 )
+AS server,
+SUBSTRING( u, LENGTH(SUBSTRING_INDEX(u,'@',1))+3,
+LENGTH( SUBSTRING( u,
+LENGTH( SUBSTRING_INDEX(u, '@',1)) +3 )) - 1 )
+AS Server_Clean
+FROM db_datadict.vu1 NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
+NULL db_datadict vu1 SELECT grantee AS u
+FROM information_schema.user_privileges NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
select * from information_schema.user_privileges limit 0, 5;
GRANTEE TABLE_CATALOG PRIVILEGE_TYPE IS_GRANTABLE
'root'@'localhost' NULL SELECT YES
@@ -5741,10 +5596,10 @@ COUNT(*)
SELECT COUNT(*) FROM information_schema. character_sets ;
COUNT(*)
36
-SELECT COUNT(*) FROM information_schema. collations ;
+SELECT COUNT(*) FROM information_schema. collations where collation_name <> 'utf8_general_cs' ;
COUNT(*)
127
-SELECT COUNT(*) FROM information_schema. collation_character_set_applicability ;
+SELECT COUNT(*) FROM information_schema. collation_character_set_applicability where collation_name <> 'utf8_general_cs' ;
COUNT(*)
128
SELECT COUNT(*) FROM information_schema. routines ;
@@ -5823,10 +5678,10 @@ utf8_esperanto_ci utf8
utf8_estonian_ci utf8
select routine_definition from routines;
routine_definition
-select * from statistics group by index_name asc limit 0, 5;
+select * from statistics where table_name not like 'help_%'
+group by index_name asc limit 0, 5;
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME NON_UNIQUE INDEX_SCHEMA INDEX_NAME SEQ_IN_INDEX COLUMN_NAME COLLATION CARDINALITY SUB_PART PACKED NULLABLE INDEX_TYPE COMMENT
NULL mysql procs_priv 1 mysql Grantor 1 Grantor A NULL NULL NULL BTREE
-NULL mysql help_category 0 mysql name 1 name A 37 NULL NULL BTREE
NULL mysql columns_priv 0 mysql PRIMARY 1 Host A NULL NULL NULL BTREE
NULL mysql db 1 mysql User 1 User A 1 NULL NULL BTREE
select concat(table_schema, ', ', table_name, ', ', view_definition) view_info
@@ -5940,9 +5795,9 @@ NULL test latin1 latin1_swedish_ci NULL
NULL test1 latin1 latin1_swedish_ci NULL
select distinct grantee from user_privileges;
grantee
-'root'@'localhost'
-'root'@'<SERVER_NAME>'
'root'@'127.0.0.1'
+'root'@'<SERVER_NAME>'
+'root'@'localhost'
select all grantee from user_privileges order by grantee, privilege_type;
grantee
'root'@'127.0.0.1'
@@ -7499,7 +7354,7 @@ from information_schema.statistics
where table_schema like 'db_datadict%';
table_name index_schema index_name index_type
select *
-from information_schema.user_privileges order by grantee, privilege_type;
+from information_schema.user_privileges;
GRANTEE TABLE_CATALOG PRIVILEGE_TYPE IS_GRANTABLE
'root'@'127.0.0.1' NULL ALTER YES
'root'@'127.0.0.1' NULL ALTER ROUTINE YES
@@ -7650,7 +7505,7 @@ where table_schema like 'db_datadict%';
table_name index_schema index_name index_type
res_t_401013 db_datadict i_6_401013 BTREE
select *
-from information_schema.user_privileges order by grantee, privilege_type;
+from information_schema.user_privileges;
GRANTEE TABLE_CATALOG PRIVILEGE_TYPE IS_GRANTABLE
'root'@'127.0.0.1' NULL ALTER YES
'root'@'127.0.0.1' NULL ALTER ROUTINE YES
@@ -7787,7 +7642,7 @@ from information_schema.statistics
where table_schema like 'db_datadict%';
table_name index_schema index_name index_type
select *
-from information_schema.user_privileges order by grantee, privilege_type;
+from information_schema.user_privileges;
GRANTEE TABLE_CATALOG PRIVILEGE_TYPE IS_GRANTABLE
'root'@'127.0.0.1' NULL ALTER YES
'root'@'127.0.0.1' NULL ALTER ROUTINE YES
@@ -7892,7 +7747,7 @@ Testcase 3.2.1.14:
DROP DATABASE IF EXISTS db_datadict;
CREATE DATABASE db_datadict;
USE db_datadict;
-create table res_t_401014(f1 char(10), f2 text(25), f3 int);
+create table res_t_401014(f1 char(10), f2 varchar(25), f3 int);
create view res_v_401014 as select * from res_t_401014;
create procedure sp_6_401014() select 'db_datadict';
create function fn_6_401014() returns int return 0;
@@ -7915,10 +7770,10 @@ from information_schema.columns
where table_schema like 'db_datadict%';
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION COLUMN_DEFAULT IS_NULLABLE DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE CHARACTER_SET_NAME COLLATION_NAME COLUMN_TYPE COLUMN_KEY EXTRA PRIVILEGES COLUMN_COMMENT
NULL db_datadict res_t_401014 f1 1 NULL YES char 10 10 NULL NULL latin1 latin1_swedish_ci char(10) select,insert,update,references
-NULL db_datadict res_t_401014 f2 2 NULL YES tinytext 255 255 NULL NULL latin1 latin1_swedish_ci tinytext select,insert,update,references
+NULL db_datadict res_t_401014 f2 2 NULL YES varchar 25 25 NULL NULL latin1 latin1_swedish_ci varchar(25) select,insert,update,references
NULL db_datadict res_t_401014 f3 3 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
NULL db_datadict res_v_401014 f1 1 NULL YES char 10 10 NULL NULL latin1 latin1_swedish_ci char(10) select,insert,update,references
-NULL db_datadict res_v_401014 f2 2 NULL YES tinytext 255 255 NULL NULL latin1 latin1_swedish_ci tinytext select,insert,update,references
+NULL db_datadict res_v_401014 f2 2 NULL YES varchar 25 25 NULL NULL latin1 latin1_swedish_ci varchar(25) select,insert,update,references
NULL db_datadict res_v_401014 f3 3 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
select table_schema, table_name, is_updatable
from information_schema.views
@@ -7936,7 +7791,7 @@ from information_schema.statistics
where table_schema like 'db_datadict%';
table_name index_schema index_name index_type
select *
-from information_schema.user_privileges order by grantee, privilege_type;
+from information_schema.user_privileges;
GRANTEE TABLE_CATALOG PRIVILEGE_TYPE IS_GRANTABLE
'root'@'127.0.0.1' NULL ALTER YES
'root'@'127.0.0.1' NULL ALTER ROUTINE YES
@@ -8037,7 +7892,7 @@ WHERE trigger_schema LIKE 'db_datadict%';
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
use db_datadict;
alter table res_t_401014 change f1 ff1 int;
-alter table res_t_401014 engine = innodb;
+alter table res_t_401014 engine = MEMORY;
alter table res_t_401014 change f3 f3_new bigint;
alter view res_v_401014 as select ff1 from res_t_401014;
alter procedure sp_6_401014 sql security invoker;
@@ -8055,14 +7910,14 @@ select table_catalog, table_schema, engine
from information_schema.tables
where table_schema like 'db_datadict%';
table_catalog table_schema engine
-NULL db_datadict InnoDB
+NULL db_datadict MEMORY
NULL db_datadict NULL
select *
from information_schema.columns
where table_schema like 'db_datadict%';
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION COLUMN_DEFAULT IS_NULLABLE DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE CHARACTER_SET_NAME COLLATION_NAME COLUMN_TYPE COLUMN_KEY EXTRA PRIVILEGES COLUMN_COMMENT
NULL db_datadict res_t_401014 ff1 1 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
-NULL db_datadict res_t_401014 f2 2 NULL YES tinytext 255 255 NULL NULL latin1 latin1_swedish_ci tinytext select,insert,update,references
+NULL db_datadict res_t_401014 f2 2 NULL YES varchar 25 25 NULL NULL latin1 latin1_swedish_ci varchar(25) select,insert,update,references
NULL db_datadict res_t_401014 f3_new 3 NULL YES bigint NULL NULL 19 0 NULL NULL bigint(20) select,insert,update,references
NULL db_datadict res_v_401014 ff1 1 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
select table_schema, table_name, is_updatable
@@ -8081,7 +7936,7 @@ from information_schema.statistics
where table_schema like 'db_datadict%';
table_name index_schema index_name index_type
select *
-from information_schema.user_privileges order by grantee, privilege_type;
+from information_schema.user_privileges;
GRANTEE TABLE_CATALOG PRIVILEGE_TYPE IS_GRANTABLE
'root'@'127.0.0.1' NULL ALTER YES
'root'@'127.0.0.1' NULL ALTER ROUTINE YES
@@ -8239,7 +8094,7 @@ where table_schema like 'db_datadict%';
table_name index_schema index_name index_type
res_t_401015 db_datadict i_6_401015 BTREE
select *
-from information_schema.user_privileges order by grantee, privilege_type;
+from information_schema.user_privileges;
GRANTEE TABLE_CATALOG PRIVILEGE_TYPE IS_GRANTABLE
'root'@'127.0.0.1' NULL ALTER YES
'root'@'127.0.0.1' NULL ALTER ROUTINE YES
@@ -8375,7 +8230,7 @@ from information_schema.statistics
where table_schema like 'db_datadict%';
table_name index_schema index_name index_type
select *
-from information_schema.user_privileges order by grantee, privilege_type;
+from information_schema.user_privileges;
GRANTEE TABLE_CATALOG PRIVILEGE_TYPE IS_GRANTABLE
'root'@'127.0.0.1' NULL ALTER YES
'root'@'127.0.0.1' NULL ALTER ROUTINE YES
@@ -8625,7 +8480,8 @@ ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_
FLUSH PRIVILEGES;
connect(localhost,u_6_401017,,test,MYSQL_PORT,MYSQL_SOCK);
use information_schema;
-select * from collation_character_set_applicability;
+select * from collation_character_set_applicability
+where collation_name <> 'utf8_general_cs';
COLLATION_NAME CHARACTER_SET_NAME
big5_chinese_ci big5
big5_bin big5
@@ -8831,7 +8687,7 @@ COLUMNS CHARACTER_SET_NAME varchar(64)
COLUMNS COLLATION_NAME varchar(64)
COLUMNS COLUMN_TYPE longtext
COLUMNS COLUMN_KEY varchar(3)
-COLUMNS EXTRA varchar(20)
+COLUMNS EXTRA varchar(27)
COLUMNS PRIVILEGES varchar(80)
COLUMNS COLUMN_COMMENT varchar(255)
COLUMN_PRIVILEGES GRANTEE varchar(81)
@@ -9407,7 +9263,7 @@ binary
geostd8
cp932
eucjpms
-select collation_name from collations;
+select collation_name from collations where collation_name <> 'utf8_general_cs';
collation_name
big5_chinese_ci
big5_bin
@@ -9772,7 +9628,7 @@ NULL information_schema collations SORTLEN 6 0 NO bigint NULL NULL 19 0 NULL NUL
Testcase 3.2.3.2:
--------------------------------------------------------------------------------
-SELECT * FROM collations;
+SELECT * FROM collations where collation_name <> 'utf8_general_cs';
COLLATION_NAME CHARACTER_SET_NAME ID IS_DEFAULT IS_COMPILED SORTLEN
big5_chinese_ci big5 1 Yes Yes 1
big5_bin big5 84 Yes 1
@@ -9934,7 +9790,8 @@ NULL information_schema collation_character_set_applicability CHARACTER_SET_NAME
Testcase 3.2.4.2:
--------------------------------------------------------------------------------
-SELECT * FROM collation_character_set_applicability;
+SELECT * FROM collation_character_set_applicability
+where collation_name <> 'utf8_general_cs';
COLLATION_NAME CHARACTER_SET_NAME
big5_chinese_ci big5
big5_bin big5
@@ -10247,9 +10104,9 @@ NUMERIC_PRECISION bigint(21) unsigned YES NULL
NUMERIC_SCALE bigint(21) unsigned YES NULL
CHARACTER_SET_NAME varchar(64) YES NULL
COLLATION_NAME varchar(64) YES NULL
-COLUMN_TYPE longtext NO
+COLUMN_TYPE longtext NO NULL
COLUMN_KEY varchar(3) NO
-EXTRA varchar(20) NO
+EXTRA varchar(27) NO
PRIVILEGES varchar(80) NO
COLUMN_COMMENT varchar(255) NO
SHOW CREATE TABLE columns;
@@ -10271,7 +10128,7 @@ COLUMNS CREATE TEMPORARY TABLE `COLUMNS` (
`COLLATION_NAME` varchar(64) DEFAULT NULL,
`COLUMN_TYPE` longtext NOT NULL,
`COLUMN_KEY` varchar(3) NOT NULL DEFAULT '',
- `EXTRA` varchar(20) NOT NULL DEFAULT '',
+ `EXTRA` varchar(27) NOT NULL DEFAULT '',
`PRIVILEGES` varchar(80) NOT NULL DEFAULT '',
`COLUMN_COMMENT` varchar(255) NOT NULL DEFAULT ''
) ENGINE=MyISAM DEFAULT CHARSET=utf8
@@ -10300,9 +10157,9 @@ NULL information_schema columns NUMERIC_PRECISION 11 NULL YES bigint NULL NULL 1
NULL information_schema columns NUMERIC_SCALE 12 NULL YES bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned select
NULL information_schema columns CHARACTER_SET_NAME 13 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema columns COLLATION_NAME 14 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
-NULL information_schema columns COLUMN_TYPE 15 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema columns COLUMN_TYPE 15 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema columns COLUMN_KEY 16 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
-NULL information_schema columns EXTRA 17 NO varchar 20 60 NULL NULL utf8 utf8_general_ci varchar(20) select
+NULL information_schema columns EXTRA 17 NO varchar 27 81 NULL NULL utf8 utf8_general_ci varchar(27) select
NULL information_schema columns PRIVILEGES 18 NO varchar 80 240 NULL NULL utf8 utf8_general_ci varchar(80) select
NULL information_schema columns COLUMN_COMMENT 19 NO varchar 255 765 NULL NULL utf8 utf8_general_ci varchar(255) select
@@ -10355,9 +10212,9 @@ NULL information_schema COLUMNS NUMERIC_PRECISION 11 NULL YES bigint NULL NULL 1
NULL information_schema COLUMNS NUMERIC_SCALE 12 NULL YES bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned select
NULL information_schema COLUMNS CHARACTER_SET_NAME 13 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema COLUMNS COLLATION_NAME 14 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
-NULL information_schema COLUMNS COLUMN_TYPE 15 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema COLUMNS COLUMN_TYPE 15 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema COLUMNS COLUMN_KEY 16 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
-NULL information_schema COLUMNS EXTRA 17 NO varchar 20 60 NULL NULL utf8 utf8_general_ci varchar(20) select
+NULL information_schema COLUMNS EXTRA 17 NO varchar 27 81 NULL NULL utf8 utf8_general_ci varchar(27) select
NULL information_schema COLUMNS PRIVILEGES 18 NO varchar 80 240 NULL NULL utf8 utf8_general_ci varchar(80) select
NULL information_schema COLUMNS COLUMN_COMMENT 19 NO varchar 255 765 NULL NULL utf8 utf8_general_ci varchar(255) select
NULL information_schema COLUMN_PRIVILEGES GRANTEE 1 NO varchar 81 243 NULL NULL utf8 utf8_general_ci varchar(81) select
@@ -10379,12 +10236,12 @@ NULL information_schema EVENTS EVENT_NAME 3 NO varchar 64 192 NULL NULL utf8 ut
NULL information_schema EVENTS DEFINER 4 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
NULL information_schema EVENTS TIME_ZONE 5 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema EVENTS EVENT_BODY 6 NO varchar 8 24 NULL NULL utf8 utf8_general_ci varchar(8) select
-NULL information_schema EVENTS EVENT_DEFINITION 7 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema EVENTS EVENT_DEFINITION 7 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema EVENTS EVENT_TYPE 8 NO varchar 9 27 NULL NULL utf8 utf8_general_ci varchar(9) select
NULL information_schema EVENTS EXECUTE_AT 9 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS INTERVAL_VALUE 10 NULL YES varchar 256 768 NULL NULL utf8 utf8_general_ci varchar(256) select
NULL information_schema EVENTS INTERVAL_FIELD 11 NULL YES varchar 18 54 NULL NULL utf8 utf8_general_ci varchar(18) select
-NULL information_schema EVENTS SQL_MODE 12 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema EVENTS SQL_MODE 12 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema EVENTS STARTS 13 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS ENDS 14 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS STATUS 15 NO varchar 18 54 NULL NULL utf8 utf8_general_ci varchar(18) select
@@ -10522,7 +10379,7 @@ NULL information_schema ROUTINES SQL_PATH 14 NULL YES varchar 64 192 NULL NULL u
NULL information_schema ROUTINES SECURITY_TYPE 15 NO varchar 7 21 NULL NULL utf8 utf8_general_ci varchar(7) select
NULL information_schema ROUTINES CREATED 16 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema ROUTINES LAST_ALTERED 17 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime select
-NULL information_schema ROUTINES SQL_MODE 18 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema ROUTINES SQL_MODE 18 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema ROUTINES ROUTINE_COMMENT 19 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema ROUTINES DEFINER 20 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
NULL information_schema ROUTINES CHARACTER_SET_CLIENT 21 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
@@ -10599,7 +10456,7 @@ NULL information_schema TRIGGERS EVENT_OBJECT_SCHEMA 6 NO varchar 64 192 NULL N
NULL information_schema TRIGGERS EVENT_OBJECT_TABLE 7 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema TRIGGERS ACTION_ORDER 8 0 NO bigint NULL NULL 19 0 NULL NULL bigint(4) select
NULL information_schema TRIGGERS ACTION_CONDITION 9 NULL YES longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
-NULL information_schema TRIGGERS ACTION_STATEMENT 10 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS ACTION_STATEMENT 10 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema TRIGGERS ACTION_ORIENTATION 11 NO varchar 9 27 NULL NULL utf8 utf8_general_ci varchar(9) select
NULL information_schema TRIGGERS ACTION_TIMING 12 NO varchar 6 18 NULL NULL utf8 utf8_general_ci varchar(6) select
NULL information_schema TRIGGERS ACTION_REFERENCE_OLD_TABLE 13 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
@@ -10607,8 +10464,8 @@ NULL information_schema TRIGGERS ACTION_REFERENCE_NEW_TABLE 14 NULL YES varchar
NULL information_schema TRIGGERS ACTION_REFERENCE_OLD_ROW 15 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema TRIGGERS ACTION_REFERENCE_NEW_ROW 16 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema TRIGGERS CREATED 17 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
-NULL information_schema TRIGGERS SQL_MODE 18 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
-NULL information_schema TRIGGERS DEFINER 19 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS SQL_MODE 18 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS DEFINER 19 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema TRIGGERS CHARACTER_SET_CLIENT 20 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
NULL information_schema TRIGGERS COLLATION_CONNECTION 21 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
NULL information_schema TRIGGERS DATABASE_COLLATION 22 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
@@ -10619,7 +10476,7 @@ NULL information_schema USER_PRIVILEGES IS_GRANTABLE 4 NO varchar 3 9 NULL NULL
NULL information_schema VIEWS TABLE_CATALOG 1 NULL YES varchar 4096 12288 NULL NULL utf8 utf8_general_ci varchar(4096) select
NULL information_schema VIEWS TABLE_SCHEMA 2 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema VIEWS TABLE_NAME 3 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
-NULL information_schema VIEWS VIEW_DEFINITION 4 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema VIEWS VIEW_DEFINITION 4 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema VIEWS CHECK_OPTION 5 NO varchar 8 24 NULL NULL utf8 utf8_general_ci varchar(8) select
NULL information_schema VIEWS IS_UPDATABLE 6 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema VIEWS DEFINER 7 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
@@ -10631,7 +10488,7 @@ NULL mysql columns_priv Db 2 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PR
NULL mysql columns_priv User 3 NO char 16 48 NULL NULL utf8 utf8_bin char(16) PRI select,insert,update,references
NULL mysql columns_priv Table_name 4 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PRI select,insert,update,references
NULL mysql columns_priv Column_name 5 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PRI select,insert,update,references
-NULL mysql columns_priv Timestamp 6 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL mysql columns_priv Timestamp 6 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL mysql columns_priv Column_priv 7 NO set 31 93 NULL NULL utf8 utf8_general_ci set('Select','Insert','Update','References') select,insert,update,references
NULL mysql db Host 1 NO char 60 180 NULL NULL utf8 utf8_bin char(60) PRI select,insert,update,references
NULL mysql db Db 2 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PRI select,insert,update,references
@@ -10662,7 +10519,7 @@ NULL mysql event definer 4 NO char 77 231 NULL NULL utf8 utf8_bin char(77) se
NULL mysql event execute_at 5 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select,insert,update,references
NULL mysql event interval_value 6 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
NULL mysql event interval_field 7 NULL YES enum 18 54 NULL NULL utf8 utf8_general_ci enum('YEAR','QUARTER','MONTH','DAY','HOUR','MINUTE','WEEK','SECOND','MICROSECOND','YEAR_MONTH','DAY_HOUR','DAY_MINUTE','DAY_SECOND','HOUR_MINUTE','HOUR_SECOND','MINUTE_SECOND','DAY_MICROSECOND','HOUR_MICROSECOND','MINUTE_MICROSECOND','SECOND_MICROSECOND') select,insert,update,references
-NULL mysql event created 8 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL mysql event created 8 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL mysql event modified 9 0000-00-00 00:00:00 NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
NULL mysql event last_executed 10 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select,insert,update,references
NULL mysql event starts 11 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select,insert,update,references
@@ -10681,12 +10538,12 @@ NULL mysql func name 1 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PRI sel
NULL mysql func ret 2 0 NO tinyint NULL NULL 3 0 NULL NULL tinyint(1) select,insert,update,references
NULL mysql func dl 3 NO char 128 384 NULL NULL utf8 utf8_bin char(128) select,insert,update,references
NULL mysql func type 4 NULL NO enum 9 27 NULL NULL utf8 utf8_general_ci enum('function','aggregate') select,insert,update,references
-NULL mysql general_log event_time 1 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
-NULL mysql general_log user_host 2 NULL YES mediumtext 16777215 16777215 NULL NULL utf8 utf8_general_ci mediumtext select,insert,update,references
-NULL mysql general_log thread_id 3 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
-NULL mysql general_log server_id 4 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
-NULL mysql general_log command_type 5 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references
-NULL mysql general_log argument 6 NULL YES mediumtext 16777215 16777215 NULL NULL utf8 utf8_general_ci mediumtext select,insert,update,references
+NULL mysql general_log event_time 1 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
+NULL mysql general_log user_host 2 NULL NO mediumtext 16777215 16777215 NULL NULL utf8 utf8_general_ci mediumtext select,insert,update,references
+NULL mysql general_log thread_id 3 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
+NULL mysql general_log server_id 4 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
+NULL mysql general_log command_type 5 NULL NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references
+NULL mysql general_log argument 6 NULL NO mediumtext 16777215 16777215 NULL NULL utf8 utf8_general_ci mediumtext select,insert,update,references
NULL mysql help_category help_category_id 1 NULL NO smallint NULL NULL 5 0 NULL NULL smallint(5) unsigned PRI select,insert,update,references
NULL mysql help_category name 2 NULL NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) UNI select,insert,update,references
NULL mysql help_category parent_category_id 3 NULL YES smallint NULL NULL 5 0 NULL NULL smallint(5) unsigned select,insert,update,references
@@ -10739,10 +10596,10 @@ NULL mysql proc sql_data_access 6 CONTAINS_SQL NO enum 17 51 NULL NULL utf8 utf8
NULL mysql proc is_deterministic 7 NO NO enum 3 9 NULL NULL utf8 utf8_general_ci enum('YES','NO') select,insert,update,references
NULL mysql proc security_type 8 DEFINER NO enum 7 21 NULL NULL utf8 utf8_general_ci enum('INVOKER','DEFINER') select,insert,update,references
NULL mysql proc param_list 9 NULL NO blob 65535 65535 NULL NULL NULL NULL blob select,insert,update,references
-NULL mysql proc returns 10 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
+NULL mysql proc returns 10 NULL NO longblob 4294967295 4294967295 NULL NULL NULL NULL longblob select,insert,update,references
NULL mysql proc body 11 NULL NO longblob 4294967295 4294967295 NULL NULL NULL NULL longblob select,insert,update,references
NULL mysql proc definer 12 NO char 77 231 NULL NULL utf8 utf8_bin char(77) select,insert,update,references
-NULL mysql proc created 13 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL mysql proc created 13 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL mysql proc modified 14 0000-00-00 00:00:00 NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
NULL mysql proc sql_mode 15 NO set 431 1293 NULL NULL utf8 utf8_general_ci set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','NOT_USED','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE') select,insert,update,references
NULL mysql proc comment 16 NO char 64 192 NULL NULL utf8 utf8_bin char(64) select,insert,update,references
@@ -10757,7 +10614,7 @@ NULL mysql procs_priv Routine_name 4 NO char 64 192 NULL NULL utf8 utf8_bin cha
NULL mysql procs_priv Routine_type 5 NULL NO enum 9 27 NULL NULL utf8 utf8_bin enum('FUNCTION','PROCEDURE') PRI select,insert,update,references
NULL mysql procs_priv Grantor 6 NO char 77 231 NULL NULL utf8 utf8_bin char(77) MUL select,insert,update,references
NULL mysql procs_priv Proc_priv 7 NO set 27 81 NULL NULL utf8 utf8_general_ci set('Execute','Alter Routine','Grant') select,insert,update,references
-NULL mysql procs_priv Timestamp 8 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL mysql procs_priv Timestamp 8 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL mysql servers Server_name 1 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) PRI select,insert,update,references
NULL mysql servers Host 2 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
NULL mysql servers Db 3 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
@@ -10767,23 +10624,23 @@ NULL mysql servers Port 6 0 NO int NULL NULL 10 0 NULL NULL int(4) select,inse
NULL mysql servers Socket 7 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
NULL mysql servers Wrapper 8 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
NULL mysql servers Owner 9 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
-NULL mysql slow_log start_time 1 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL mysql slow_log start_time 1 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL mysql slow_log user_host 2 NULL NO mediumtext 16777215 16777215 NULL NULL utf8 utf8_general_ci mediumtext select,insert,update,references
NULL mysql slow_log query_time 3 NULL NO time NULL NULL NULL NULL NULL NULL time select,insert,update,references
NULL mysql slow_log lock_time 4 NULL NO time NULL NULL NULL NULL NULL NULL time select,insert,update,references
NULL mysql slow_log rows_sent 5 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
NULL mysql slow_log rows_examined 6 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
-NULL mysql slow_log db 7 NULL YES varchar 4096 12288 NULL NULL utf8 utf8_general_ci varchar(4096) select,insert,update,references
-NULL mysql slow_log last_insert_id 8 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
-NULL mysql slow_log insert_id 9 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
-NULL mysql slow_log server_id 10 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
+NULL mysql slow_log db 7 NULL NO varchar 4096 12288 NULL NULL utf8 utf8_general_ci varchar(4096) select,insert,update,references
+NULL mysql slow_log last_insert_id 8 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
+NULL mysql slow_log insert_id 9 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
+NULL mysql slow_log server_id 10 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
NULL mysql slow_log sql_text 11 NULL NO mediumtext 16777215 16777215 NULL NULL utf8 utf8_general_ci mediumtext select,insert,update,references
NULL mysql tables_priv Host 1 NO char 60 180 NULL NULL utf8 utf8_bin char(60) PRI select,insert,update,references
NULL mysql tables_priv Db 2 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PRI select,insert,update,references
NULL mysql tables_priv User 3 NO char 16 48 NULL NULL utf8 utf8_bin char(16) PRI select,insert,update,references
NULL mysql tables_priv Table_name 4 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PRI select,insert,update,references
NULL mysql tables_priv Grantor 5 NO char 77 231 NULL NULL utf8 utf8_bin char(77) MUL select,insert,update,references
-NULL mysql tables_priv Timestamp 6 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL mysql tables_priv Timestamp 6 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL mysql tables_priv Table_priv 7 NO set 98 294 NULL NULL utf8 utf8_general_ci set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter','Create View','Show view','Trigger') select,insert,update,references
NULL mysql tables_priv Column_priv 8 NO set 31 93 NULL NULL utf8 utf8_general_ci set('Select','Insert','Update','References') select,insert,update,references
NULL mysql time_zone Time_zone_id 1 NULL NO int NULL NULL 10 0 NULL NULL int(10) unsigned PRI auto_increment select,insert,update,references
@@ -11095,7 +10952,7 @@ NULL test tb4 f217 42 NULL YES double unsigned zerofill NULL NULL 22 NULL NULL N
NULL test tb4 f218 43 NULL YES date NULL NULL NULL NULL NULL NULL date select,insert,update,references
NULL test tb4 f219 44 NULL YES time NULL NULL NULL NULL NULL NULL time select,insert,update,references
NULL test tb4 f220 45 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select,insert,update,references
-NULL test tb4 f221 46 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL test tb4 f221 46 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL test tb4 f222 47 NULL YES year NULL NULL NULL NULL NULL NULL year(4) select,insert,update,references
NULL test tb4 f223 48 NULL YES year NULL NULL NULL NULL NULL NULL year(4) select,insert,update,references
NULL test tb4 f224 49 NULL YES year NULL NULL NULL NULL NULL NULL year(4) select,insert,update,references
@@ -11197,9 +11054,9 @@ NULL information_schema COLUMNS NUMERIC_PRECISION 11 NULL YES bigint NULL NULL 1
NULL information_schema COLUMNS NUMERIC_SCALE 12 NULL YES bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned select
NULL information_schema COLUMNS CHARACTER_SET_NAME 13 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema COLUMNS COLLATION_NAME 14 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
-NULL information_schema COLUMNS COLUMN_TYPE 15 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema COLUMNS COLUMN_TYPE 15 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema COLUMNS COLUMN_KEY 16 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
-NULL information_schema COLUMNS EXTRA 17 NO varchar 20 60 NULL NULL utf8 utf8_general_ci varchar(20) select
+NULL information_schema COLUMNS EXTRA 17 NO varchar 27 81 NULL NULL utf8 utf8_general_ci varchar(27) select
NULL information_schema COLUMNS PRIVILEGES 18 NO varchar 80 240 NULL NULL utf8 utf8_general_ci varchar(80) select
NULL information_schema COLUMNS COLUMN_COMMENT 19 NO varchar 255 765 NULL NULL utf8 utf8_general_ci varchar(255) select
NULL information_schema COLUMN_PRIVILEGES GRANTEE 1 NO varchar 81 243 NULL NULL utf8 utf8_general_ci varchar(81) select
@@ -11221,12 +11078,12 @@ NULL information_schema EVENTS EVENT_NAME 3 NO varchar 64 192 NULL NULL utf8 ut
NULL information_schema EVENTS DEFINER 4 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
NULL information_schema EVENTS TIME_ZONE 5 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema EVENTS EVENT_BODY 6 NO varchar 8 24 NULL NULL utf8 utf8_general_ci varchar(8) select
-NULL information_schema EVENTS EVENT_DEFINITION 7 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema EVENTS EVENT_DEFINITION 7 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema EVENTS EVENT_TYPE 8 NO varchar 9 27 NULL NULL utf8 utf8_general_ci varchar(9) select
NULL information_schema EVENTS EXECUTE_AT 9 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS INTERVAL_VALUE 10 NULL YES varchar 256 768 NULL NULL utf8 utf8_general_ci varchar(256) select
NULL information_schema EVENTS INTERVAL_FIELD 11 NULL YES varchar 18 54 NULL NULL utf8 utf8_general_ci varchar(18) select
-NULL information_schema EVENTS SQL_MODE 12 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema EVENTS SQL_MODE 12 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema EVENTS STARTS 13 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS ENDS 14 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS STATUS 15 NO varchar 18 54 NULL NULL utf8 utf8_general_ci varchar(18) select
@@ -11364,7 +11221,7 @@ NULL information_schema ROUTINES SQL_PATH 14 NULL YES varchar 64 192 NULL NULL u
NULL information_schema ROUTINES SECURITY_TYPE 15 NO varchar 7 21 NULL NULL utf8 utf8_general_ci varchar(7) select
NULL information_schema ROUTINES CREATED 16 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema ROUTINES LAST_ALTERED 17 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime select
-NULL information_schema ROUTINES SQL_MODE 18 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema ROUTINES SQL_MODE 18 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema ROUTINES ROUTINE_COMMENT 19 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema ROUTINES DEFINER 20 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
NULL information_schema ROUTINES CHARACTER_SET_CLIENT 21 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
@@ -11441,7 +11298,7 @@ NULL information_schema TRIGGERS EVENT_OBJECT_SCHEMA 6 NO varchar 64 192 NULL N
NULL information_schema TRIGGERS EVENT_OBJECT_TABLE 7 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema TRIGGERS ACTION_ORDER 8 0 NO bigint NULL NULL 19 0 NULL NULL bigint(4) select
NULL information_schema TRIGGERS ACTION_CONDITION 9 NULL YES longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
-NULL information_schema TRIGGERS ACTION_STATEMENT 10 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS ACTION_STATEMENT 10 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema TRIGGERS ACTION_ORIENTATION 11 NO varchar 9 27 NULL NULL utf8 utf8_general_ci varchar(9) select
NULL information_schema TRIGGERS ACTION_TIMING 12 NO varchar 6 18 NULL NULL utf8 utf8_general_ci varchar(6) select
NULL information_schema TRIGGERS ACTION_REFERENCE_OLD_TABLE 13 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
@@ -11449,8 +11306,8 @@ NULL information_schema TRIGGERS ACTION_REFERENCE_NEW_TABLE 14 NULL YES varchar
NULL information_schema TRIGGERS ACTION_REFERENCE_OLD_ROW 15 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema TRIGGERS ACTION_REFERENCE_NEW_ROW 16 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema TRIGGERS CREATED 17 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
-NULL information_schema TRIGGERS SQL_MODE 18 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
-NULL information_schema TRIGGERS DEFINER 19 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS SQL_MODE 18 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS DEFINER 19 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema TRIGGERS CHARACTER_SET_CLIENT 20 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
NULL information_schema TRIGGERS COLLATION_CONNECTION 21 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
NULL information_schema TRIGGERS DATABASE_COLLATION 22 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
@@ -11461,7 +11318,7 @@ NULL information_schema USER_PRIVILEGES IS_GRANTABLE 4 NO varchar 3 9 NULL NULL
NULL information_schema VIEWS TABLE_CATALOG 1 NULL YES varchar 4096 12288 NULL NULL utf8 utf8_general_ci varchar(4096) select
NULL information_schema VIEWS TABLE_SCHEMA 2 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema VIEWS TABLE_NAME 3 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
-NULL information_schema VIEWS VIEW_DEFINITION 4 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema VIEWS VIEW_DEFINITION 4 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema VIEWS CHECK_OPTION 5 NO varchar 8 24 NULL NULL utf8 utf8_general_ci varchar(8) select
NULL information_schema VIEWS IS_UPDATABLE 6 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema VIEWS DEFINER 7 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
@@ -11724,7 +11581,7 @@ NULL test tb4 f217 42 NULL YES double unsigned zerofill NULL NULL 22 NULL NULL N
NULL test tb4 f218 43 NULL YES date NULL NULL NULL NULL NULL NULL date select,insert,update,references
NULL test tb4 f219 44 NULL YES time NULL NULL NULL NULL NULL NULL time select,insert,update,references
NULL test tb4 f220 45 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select,insert,update,references
-NULL test tb4 f221 46 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL test tb4 f221 46 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL test tb4 f222 47 NULL YES year NULL NULL NULL NULL NULL NULL year(4) select,insert,update,references
NULL test tb4 f223 48 NULL YES year NULL NULL NULL NULL NULL NULL year(4) select,insert,update,references
NULL test tb4 f224 49 NULL YES year NULL NULL NULL NULL NULL NULL year(4) select,insert,update,references
@@ -11769,9 +11626,9 @@ NULL information_schema COLUMNS NUMERIC_PRECISION 11 NULL YES bigint NULL NULL 1
NULL information_schema COLUMNS NUMERIC_SCALE 12 NULL YES bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned select
NULL information_schema COLUMNS CHARACTER_SET_NAME 13 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema COLUMNS COLLATION_NAME 14 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
-NULL information_schema COLUMNS COLUMN_TYPE 15 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema COLUMNS COLUMN_TYPE 15 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema COLUMNS COLUMN_KEY 16 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
-NULL information_schema COLUMNS EXTRA 17 NO varchar 20 60 NULL NULL utf8 utf8_general_ci varchar(20) select
+NULL information_schema COLUMNS EXTRA 17 NO varchar 27 81 NULL NULL utf8 utf8_general_ci varchar(27) select
NULL information_schema COLUMNS PRIVILEGES 18 NO varchar 80 240 NULL NULL utf8 utf8_general_ci varchar(80) select
NULL information_schema COLUMNS COLUMN_COMMENT 19 NO varchar 255 765 NULL NULL utf8 utf8_general_ci varchar(255) select
NULL information_schema COLUMN_PRIVILEGES GRANTEE 1 NO varchar 81 243 NULL NULL utf8 utf8_general_ci varchar(81) select
@@ -11793,12 +11650,12 @@ NULL information_schema EVENTS EVENT_NAME 3 NO varchar 64 192 NULL NULL utf8 ut
NULL information_schema EVENTS DEFINER 4 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
NULL information_schema EVENTS TIME_ZONE 5 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema EVENTS EVENT_BODY 6 NO varchar 8 24 NULL NULL utf8 utf8_general_ci varchar(8) select
-NULL information_schema EVENTS EVENT_DEFINITION 7 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema EVENTS EVENT_DEFINITION 7 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema EVENTS EVENT_TYPE 8 NO varchar 9 27 NULL NULL utf8 utf8_general_ci varchar(9) select
NULL information_schema EVENTS EXECUTE_AT 9 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS INTERVAL_VALUE 10 NULL YES varchar 256 768 NULL NULL utf8 utf8_general_ci varchar(256) select
NULL information_schema EVENTS INTERVAL_FIELD 11 NULL YES varchar 18 54 NULL NULL utf8 utf8_general_ci varchar(18) select
-NULL information_schema EVENTS SQL_MODE 12 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema EVENTS SQL_MODE 12 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema EVENTS STARTS 13 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS ENDS 14 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS STATUS 15 NO varchar 18 54 NULL NULL utf8 utf8_general_ci varchar(18) select
@@ -11936,7 +11793,7 @@ NULL information_schema ROUTINES SQL_PATH 14 NULL YES varchar 64 192 NULL NULL u
NULL information_schema ROUTINES SECURITY_TYPE 15 NO varchar 7 21 NULL NULL utf8 utf8_general_ci varchar(7) select
NULL information_schema ROUTINES CREATED 16 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema ROUTINES LAST_ALTERED 17 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime select
-NULL information_schema ROUTINES SQL_MODE 18 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema ROUTINES SQL_MODE 18 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema ROUTINES ROUTINE_COMMENT 19 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema ROUTINES DEFINER 20 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
NULL information_schema ROUTINES CHARACTER_SET_CLIENT 21 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
@@ -12013,7 +11870,7 @@ NULL information_schema TRIGGERS EVENT_OBJECT_SCHEMA 6 NO varchar 64 192 NULL N
NULL information_schema TRIGGERS EVENT_OBJECT_TABLE 7 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema TRIGGERS ACTION_ORDER 8 0 NO bigint NULL NULL 19 0 NULL NULL bigint(4) select
NULL information_schema TRIGGERS ACTION_CONDITION 9 NULL YES longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
-NULL information_schema TRIGGERS ACTION_STATEMENT 10 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS ACTION_STATEMENT 10 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema TRIGGERS ACTION_ORIENTATION 11 NO varchar 9 27 NULL NULL utf8 utf8_general_ci varchar(9) select
NULL information_schema TRIGGERS ACTION_TIMING 12 NO varchar 6 18 NULL NULL utf8 utf8_general_ci varchar(6) select
NULL information_schema TRIGGERS ACTION_REFERENCE_OLD_TABLE 13 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
@@ -12021,8 +11878,8 @@ NULL information_schema TRIGGERS ACTION_REFERENCE_NEW_TABLE 14 NULL YES varchar
NULL information_schema TRIGGERS ACTION_REFERENCE_OLD_ROW 15 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema TRIGGERS ACTION_REFERENCE_NEW_ROW 16 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema TRIGGERS CREATED 17 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
-NULL information_schema TRIGGERS SQL_MODE 18 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
-NULL information_schema TRIGGERS DEFINER 19 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS SQL_MODE 18 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS DEFINER 19 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema TRIGGERS CHARACTER_SET_CLIENT 20 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
NULL information_schema TRIGGERS COLLATION_CONNECTION 21 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
NULL information_schema TRIGGERS DATABASE_COLLATION 22 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
@@ -12033,7 +11890,7 @@ NULL information_schema USER_PRIVILEGES IS_GRANTABLE 4 NO varchar 3 9 NULL NULL
NULL information_schema VIEWS TABLE_CATALOG 1 NULL YES varchar 4096 12288 NULL NULL utf8 utf8_general_ci varchar(4096) select
NULL information_schema VIEWS TABLE_SCHEMA 2 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema VIEWS TABLE_NAME 3 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
-NULL information_schema VIEWS VIEW_DEFINITION 4 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema VIEWS VIEW_DEFINITION 4 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema VIEWS CHECK_OPTION 5 NO varchar 8 24 NULL NULL utf8 utf8_general_ci varchar(8) select
NULL information_schema VIEWS IS_UPDATABLE 6 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema VIEWS DEFINER 7 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
@@ -12296,7 +12153,7 @@ NULL test tb4 f217 42 NULL YES double unsigned zerofill NULL NULL 22 NULL NULL N
NULL test tb4 f218 43 NULL YES date NULL NULL NULL NULL NULL NULL date select,insert,update,references
NULL test tb4 f219 44 NULL YES time NULL NULL NULL NULL NULL NULL time select,insert,update,references
NULL test tb4 f220 45 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select,insert,update,references
-NULL test tb4 f221 46 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL test tb4 f221 46 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL test tb4 f222 47 NULL YES year NULL NULL NULL NULL NULL NULL year(4) select,insert,update,references
NULL test tb4 f223 48 NULL YES year NULL NULL NULL NULL NULL NULL year(4) select,insert,update,references
NULL test tb4 f224 49 NULL YES year NULL NULL NULL NULL NULL NULL year(4) select,insert,update,references
@@ -12441,7 +12298,7 @@ NULL information_schema COLUMNS NUMERIC_SCALE bigint NULL NULL NULL NULL bigint(
3.0000 information_schema COLUMNS COLLATION_NAME varchar 64 192 utf8 utf8_general_ci varchar(64)
1.0000 information_schema COLUMNS COLUMN_TYPE longtext 4294967295 4294967295 utf8 utf8_general_ci longtext
3.0000 information_schema COLUMNS COLUMN_KEY varchar 3 9 utf8 utf8_general_ci varchar(3)
-3.0000 information_schema COLUMNS EXTRA varchar 20 60 utf8 utf8_general_ci varchar(20)
+3.0000 information_schema COLUMNS EXTRA varchar 27 81 utf8 utf8_general_ci varchar(27)
3.0000 information_schema COLUMNS PRIVILEGES varchar 80 240 utf8 utf8_general_ci varchar(80)
3.0000 information_schema COLUMNS COLUMN_COMMENT varchar 255 765 utf8 utf8_general_ci varchar(255)
3.0000 information_schema COLUMN_PRIVILEGES GRANTEE varchar 81 243 utf8 utf8_general_ci varchar(81)
@@ -12823,7 +12680,7 @@ NULL mysql ndb_binlog_index schemaops bigint NULL NULL NULL NULL bigint(20) unsi
3.0000 mysql proc is_deterministic enum 3 9 utf8 utf8_general_ci enum('YES','NO')
3.0000 mysql proc security_type enum 7 21 utf8 utf8_general_ci enum('INVOKER','DEFINER')
1.0000 mysql proc param_list blob 65535 65535 NULL NULL blob
-3.0000 mysql proc returns char 64 192 utf8 utf8_general_ci char(64)
+1.0000 mysql proc returns longblob 4294967295 4294967295 NULL NULL longblob
1.0000 mysql proc body longblob 4294967295 4294967295 NULL NULL longblob
3.0000 mysql proc definer char 77 231 utf8 utf8_bin char(77)
NULL mysql proc created timestamp NULL NULL NULL NULL timestamp
@@ -13423,7 +13280,7 @@ SQL_PATH varchar(64) YES NULL
SECURITY_TYPE varchar(7) NO
CREATED datetime NO 0000-00-00 00:00:00
LAST_ALTERED datetime NO 0000-00-00 00:00:00
-SQL_MODE longtext NO
+SQL_MODE longtext NO NULL
ROUTINE_COMMENT varchar(64) NO
DEFINER varchar(77) NO
CHARACTER_SET_CLIENT varchar(32) NO
@@ -13484,7 +13341,7 @@ NULL information_schema routines SQL_PATH 14 NULL YES varchar 64 192 NULL NULL u
NULL information_schema routines SECURITY_TYPE 15 NO varchar 7 21 NULL NULL utf8 utf8_general_ci varchar(7) select
NULL information_schema routines CREATED 16 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema routines LAST_ALTERED 17 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime select
-NULL information_schema routines SQL_MODE 18 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema routines SQL_MODE 18 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema routines ROUTINE_COMMENT 19 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema routines DEFINER 20 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
NULL information_schema routines CHARACTER_SET_CLIENT 21 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
@@ -14336,7 +14193,7 @@ NULL information_schema TRIGGERS SYSTEM VIEW MyISAM 10 Dynamic NULL #ARL# #DL# #
NULL information_schema USER_PRIVILEGES SYSTEM VIEW MEMORY 10 Fixed NULL #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_general_ci NULL #CO#
NULL information_schema VIEWS SYSTEM VIEW MyISAM 10 Dynamic NULL #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_general_ci NULL #CO#
SELECT * FROM information_schema.tables
-WHERE NOT( table_schema = 'information_schema');
+WHERE NOT( table_schema = 'information_schema') AND NOT (table_schema = 'mysql' AND table_name LIKE 'help_%');
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE ENGINE VERSION ROW_FORMAT TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE AUTO_INCREMENT CREATE_TIME UPDATE_TIME CHECK_TIME TABLE_COLLATION CHECKSUM CREATE_OPTIONS TABLE_COMMENT
NULL db_datadict tb1 BASE TABLE MyISAM 10 Fixed 0 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
NULL db_datadict tb2 BASE TABLE MyISAM 10 Fixed 0 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
@@ -14347,10 +14204,6 @@ NULL mysql db BASE TABLE MyISAM 10 Fixed 3 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-
NULL mysql event BASE TABLE MyISAM 10 Dynamic 0 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_general_ci NULL Events
NULL mysql func BASE TABLE MyISAM 10 Fixed 0 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_bin NULL User defined functions
NULL mysql general_log BASE TABLE CSV 10 Dynamic 1 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_general_ci NULL General log
-NULL mysql help_category BASE TABLE MyISAM 10 Fixed 37 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_general_ci NULL help categories
-NULL mysql help_keyword BASE TABLE MyISAM 10 Fixed 424 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_general_ci NULL help keywords
-NULL mysql help_relation BASE TABLE MyISAM 10 Fixed 901 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_general_ci NULL keyword-topic relation
-NULL mysql help_topic BASE TABLE MyISAM 10 Dynamic 479 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_general_ci NULL help topics
NULL mysql host BASE TABLE MyISAM 10 Fixed 0 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_bin NULL Host privileges; Merged with database privileges
NULL mysql ndb_binlog_index BASE TABLE MyISAM 10 Dynamic 0 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
NULL mysql plugin BASE TABLE MyISAM 10 Fixed 0 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_bin NULL MySQL plugins
@@ -14397,7 +14250,7 @@ Field Type Null Key Default Extra
TABLE_CATALOG varchar(4096) YES NULL
TABLE_SCHEMA varchar(64) NO
TABLE_NAME varchar(64) NO
-VIEW_DEFINITION longtext NO
+VIEW_DEFINITION longtext NO NULL
CHECK_OPTION varchar(8) NO
IS_UPDATABLE varchar(3) NO
DEFINER varchar(77) NO
@@ -14432,7 +14285,7 @@ TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION COLUMN_DEFAUL
NULL information_schema views TABLE_CATALOG 1 NULL YES varchar 4096 12288 NULL NULL utf8 utf8_general_ci varchar(4096) select
NULL information_schema views TABLE_SCHEMA 2 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema views TABLE_NAME 3 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
-NULL information_schema views VIEW_DEFINITION 4 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema views VIEW_DEFINITION 4 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema views CHECK_OPTION 5 NO varchar 8 24 NULL NULL utf8 utf8_general_ci varchar(8) select
NULL information_schema views IS_UPDATABLE 6 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema views DEFINER 7 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
@@ -14579,7 +14432,8 @@ TABLE_CATALOG TABLE_SCHEMA TABLE_NAME NON_UNIQUE INDEX_SCHEMA INDEX_NAME SEQ_IN_
root@localhost db_datadict_2
REVOKE SELECT ON db_datadict.tb_6_401402_1 FROM 'user_1'@'localhost';
-SELECT * FROM information_schema.statistics;
+SELECT * FROM information_schema.statistics
+WHERE NOT (table_schema = 'mysql' AND table_name LIKE 'help_%');
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME NON_UNIQUE INDEX_SCHEMA INDEX_NAME SEQ_IN_INDEX COLUMN_NAME COLLATION CARDINALITY SUB_PART PACKED NULLABLE INDEX_TYPE COMMENT
NULL db_datadict tb_6_401402_1 0 db_datadict PRIMARY 1 f1 A 0 NULL NULL BTREE
NULL db_datadict tb_6_401402_1 1 db_datadict f2_ind 1 f2 A NULL NULL NULL YES BTREE
@@ -14601,14 +14455,6 @@ NULL mysql db 1 mysql User 1 User A 1 NULL NULL BTREE
NULL mysql event 0 mysql PRIMARY 1 db A NULL NULL NULL BTREE
NULL mysql event 0 mysql PRIMARY 2 name A 0 NULL NULL BTREE
NULL mysql func 0 mysql PRIMARY 1 name A 0 NULL NULL BTREE
-NULL mysql help_category 0 mysql PRIMARY 1 help_category_id A 37 NULL NULL BTREE
-NULL mysql help_category 0 mysql name 1 name A 37 NULL NULL BTREE
-NULL mysql help_keyword 0 mysql PRIMARY 1 help_keyword_id A 424 NULL NULL BTREE
-NULL mysql help_keyword 0 mysql name 1 name A 424 NULL NULL BTREE
-NULL mysql help_relation 0 mysql PRIMARY 1 help_keyword_id A NULL NULL NULL BTREE
-NULL mysql help_relation 0 mysql PRIMARY 2 help_topic_id A 901 NULL NULL BTREE
-NULL mysql help_topic 0 mysql PRIMARY 1 help_topic_id A 479 NULL NULL BTREE
-NULL mysql help_topic 0 mysql name 1 name A 479 NULL NULL BTREE
NULL mysql host 0 mysql PRIMARY 1 Host A NULL NULL NULL BTREE
NULL mysql host 0 mysql PRIMARY 2 Db A 0 NULL NULL BTREE
NULL mysql ndb_binlog_index 0 mysql PRIMARY 1 epoch A 0 NULL NULL BTREE
@@ -15212,7 +15058,7 @@ EVENT_OBJECT_SCHEMA varchar(64) NO
EVENT_OBJECT_TABLE varchar(64) NO
ACTION_ORDER bigint(4) NO 0
ACTION_CONDITION longtext YES NULL
-ACTION_STATEMENT longtext NO
+ACTION_STATEMENT longtext NO NULL
ACTION_ORIENTATION varchar(9) NO
ACTION_TIMING varchar(6) NO
ACTION_REFERENCE_OLD_TABLE varchar(64) YES NULL
@@ -15220,8 +15066,8 @@ ACTION_REFERENCE_NEW_TABLE varchar(64) YES NULL
ACTION_REFERENCE_OLD_ROW varchar(3) NO
ACTION_REFERENCE_NEW_ROW varchar(3) NO
CREATED datetime YES NULL
-SQL_MODE longtext NO
-DEFINER longtext NO
+SQL_MODE longtext NO NULL
+DEFINER longtext NO NULL
CHARACTER_SET_CLIENT varchar(32) NO
COLLATION_CONNECTION varchar(32) NO
DATABASE_COLLATION varchar(32) NO
@@ -15271,7 +15117,7 @@ NULL information_schema triggers EVENT_OBJECT_SCHEMA 6 NO varchar 64 192 NULL N
NULL information_schema triggers EVENT_OBJECT_TABLE 7 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema triggers ACTION_ORDER 8 0 NO bigint NULL NULL 19 0 NULL NULL bigint(4) select
NULL information_schema triggers ACTION_CONDITION 9 NULL YES longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
-NULL information_schema triggers ACTION_STATEMENT 10 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema triggers ACTION_STATEMENT 10 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema triggers ACTION_ORIENTATION 11 NO varchar 9 27 NULL NULL utf8 utf8_general_ci varchar(9) select
NULL information_schema triggers ACTION_TIMING 12 NO varchar 6 18 NULL NULL utf8 utf8_general_ci varchar(6) select
NULL information_schema triggers ACTION_REFERENCE_OLD_TABLE 13 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
@@ -15279,8 +15125,8 @@ NULL information_schema triggers ACTION_REFERENCE_NEW_TABLE 14 NULL YES varchar
NULL information_schema triggers ACTION_REFERENCE_OLD_ROW 15 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema triggers ACTION_REFERENCE_NEW_ROW 16 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema triggers CREATED 17 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
-NULL information_schema triggers SQL_MODE 18 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
-NULL information_schema triggers DEFINER 19 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema triggers SQL_MODE 18 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema triggers DEFINER 19 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema triggers CHARACTER_SET_CLIENT 20 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
NULL information_schema triggers COLLATION_CONNECTION 21 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
NULL information_schema triggers DATABASE_COLLATION 22 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
diff --git a/mysql-test/suite/funcs_1/r/innodb_func_view.result b/mysql-test/suite/funcs_1/r/innodb_func_view.result
index 02ef728fad5..14568643665 100644
--- a/mysql-test/suite/funcs_1/r/innodb_func_view.result
+++ b/mysql-test/suite/funcs_1/r/innodb_func_view.result
@@ -1,7 +1,3 @@
-
-! Attention: The file with the expected results suffers from
-Bug#10713: mysqldump includes database in create view and referenced tables
---------------------------------------------------------------------------------
DROP TABLE IF EXISTS t1_selects, t1_modes, t1_values;
DROP VIEW IF EXISTS v1;
CREATE TABLE t1_values
@@ -89,6 +85,9 @@ INSERT INTO t1_values SET select_id = @select_id,
my_bigint = 4;
INSERT INTO t1_values SET select_id = @select_id,
my_bigint = -25;
+##### 1.1.1. CAST --> BINARY
+##### 1.1.2. CAST --> CHAR
+##### 1.1.3. CAST --> DATE
INSERT INTO t1_values SET select_id = @select_id,
my_char_30 = '2005-06-27';
INSERT INTO t1_values SET select_id = @select_id,
@@ -101,6 +100,7 @@ INSERT INTO t1_values SET select_id = @select_id,
my_bigint = 20050627;
INSERT INTO t1_values SET select_id = @select_id,
my_double = +20.050627E+6;
+##### 1.1.4. CAST --> DATETIME
INSERT INTO t1_values SET select_id = @select_id,
my_char_30 = '2005-06-27 17:58';
INSERT INTO t1_values SET select_id = @select_id,
@@ -113,6 +113,7 @@ INSERT INTO t1_values SET select_id = @select_id,
my_bigint = 200506271758;
INSERT INTO t1_values SET select_id = @select_id,
my_double = +0.0200506271758E+13;
+##### 1.1.5. CAST --> TIME
INSERT INTO t1_values SET select_id = @select_id,
my_char_30 = '1 17:58';
INSERT INTO t1_values SET select_id = @select_id,
@@ -125,6 +126,7 @@ INSERT INTO t1_values SET select_id = @select_id,
my_bigint = 1758;
INSERT INTO t1_values SET select_id = @select_id,
my_double = +1.758E+3;
+##### 1.1.6. CAST --> DECIMAL
INSERT INTO t1_values SET select_id = @select_id,
my_char_30 = '-3333.3333';
INSERT INTO t1_values SET select_id = @select_id,
@@ -135,11 +137,13 @@ INSERT INTO t1_values SET select_id = @select_id,
my_varbinary_1000 = '-3333.3333';
INSERT INTO t1_values SET select_id = @select_id,
my_double = -0.33333333E+4;
+##### 1.1.7. CAST --> SIGNED INTEGER
"Attention: CAST --> SIGNED INTEGER
Bug#5913 Traditional mode: BIGINT range not correctly delimited
Status: To be fixed later"
--------------------------------------------------------------------------------
+##### 1.1.8. CAST --> UNSIGNED INTEGER
"Attention: CAST --> UNSIGNED INTEGER
The file with expected results suffers from Bug 5913"
@@ -184,14 +188,12 @@ SET @my_select =
'SELECT LEFT(my_binary_30, 2), my_binary_30, id FROM t1_values';
SET @my_select =
'SELECT LEFT(my_varbinary_1000, 2), my_varbinary_1000, id FROM t1_values';
-
-"Attention: LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', <numeric column>)
- The file with expected results suffers from Bug 10963"
- and the testcases with length = BIGINT or DOUBLE column are deactivated,
-because there are 32/64 Bit differences
---------------------------------------------------------------------------------
+SET @my_select =
+'SELECT LEFT(''AaBbCcDdEeFfGgHhIiJjÄäÜüÖö'', my_bigint), my_bigint, id FROM t1_values';
SET @my_select =
'SELECT LEFT(''AaBbCcDdEeFfGgHhIiJjÄäÜüÖö'', my_decimal), my_decimal, id FROM t1_values';
+SET @my_select =
+'SELECT LEFT(''AaBbCcDdEeFfGgHhIiJjÄäÜüÖö'', my_double), my_double, id FROM t1_values';
SET @my_select = 'SELECT LENGTH(my_char_30),
my_char_30, id FROM t1_values';
SET @my_select = 'SELECT LENGTH(my_varchar_1000),
@@ -284,19 +286,19 @@ SET sql_mode = '';
--------------------------------------------------------------------------------
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;
+WHERE select_id = 193 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 193 OR select_id IS NULL) order by id;
DROP VIEW v1;
CREATE VIEW v1 AS SELECT CONCAT('A',my_char_30), my_char_30, id FROM t1_values;
SELECT CONCAT('A',my_char_30), my_char_30, id FROM t1_values
-WHERE select_id = 189 OR select_id IS NULL order by id;
+WHERE select_id = 192 OR select_id IS NULL order by id;
CONCAT('A',my_char_30) my_char_30 id
NULL NULL 1
A 2
@@ -308,7 +310,7 @@ 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;
+WHERE select_id = 192 OR select_id IS NULL) order by id;
CONCAT('A',my_char_30) my_char_30 id
NULL NULL 1
A 2
@@ -322,13 +324,13 @@ CREATE VIEW v1 AS SELECT LTRIM(my_varbinary_1000),
my_varbinary_1000, id FROM t1_values;
SELECT LTRIM(my_varbinary_1000),
my_varbinary_1000, id FROM t1_values
-WHERE select_id = 188 OR select_id IS NULL order by id;
+WHERE select_id = 191 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 191 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -336,13 +338,13 @@ CREATE VIEW v1 AS SELECT LTRIM(my_binary_30),
my_binary_30, id FROM t1_values;
SELECT LTRIM(my_binary_30),
my_binary_30, id FROM t1_values
-WHERE select_id = 187 OR select_id IS NULL order by id;
+WHERE select_id = 190 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 190 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -350,13 +352,13 @@ CREATE VIEW v1 AS SELECT LTRIM(my_varchar_1000),
my_varchar_1000, id FROM t1_values;
SELECT LTRIM(my_varchar_1000),
my_varchar_1000, id FROM t1_values
-WHERE select_id = 186 OR select_id IS NULL order by id;
+WHERE select_id = 189 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 189 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -364,13 +366,13 @@ CREATE VIEW v1 AS SELECT LTRIM(my_char_30),
my_char_30, id FROM t1_values;
SELECT LTRIM(my_char_30),
my_char_30, id FROM t1_values
-WHERE select_id = 185 OR select_id IS NULL order by id;
+WHERE select_id = 188 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 188 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -378,13 +380,13 @@ CREATE VIEW v1 AS SELECT LOWER(my_varbinary_1000),
my_varbinary_1000, id FROM t1_values;
SELECT LOWER(my_varbinary_1000),
my_varbinary_1000, id FROM t1_values
-WHERE select_id = 184 OR select_id IS NULL order by id;
+WHERE select_id = 187 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 187 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -392,13 +394,13 @@ CREATE VIEW v1 AS SELECT LOWER(my_binary_30),
my_binary_30, id FROM t1_values;
SELECT LOWER(my_binary_30),
my_binary_30, id FROM t1_values
-WHERE select_id = 183 OR select_id IS NULL order by id;
+WHERE select_id = 186 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 186 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -406,13 +408,13 @@ CREATE VIEW v1 AS SELECT LOWER(my_varchar_1000),
my_varchar_1000, id FROM t1_values;
SELECT LOWER(my_varchar_1000),
my_varchar_1000, id FROM t1_values
-WHERE select_id = 182 OR select_id IS NULL order by id;
+WHERE select_id = 185 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 185 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -420,13 +422,13 @@ CREATE VIEW v1 AS SELECT LOWER(my_char_30),
my_char_30, id FROM t1_values;
SELECT LOWER(my_char_30),
my_char_30, id FROM t1_values
-WHERE select_id = 181 OR select_id IS NULL order by id;
+WHERE select_id = 184 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 184 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -434,13 +436,13 @@ CREATE VIEW v1 AS SELECT LOCATE('-', ' - -ABC', my_decimal),
my_decimal, id FROM t1_values;
SELECT LOCATE('-', ' - -ABC', my_decimal),
my_decimal, id FROM t1_values
-WHERE select_id = 180 OR select_id IS NULL order by id;
+WHERE select_id = 183 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 183 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -448,13 +450,13 @@ CREATE VIEW v1 AS SELECT LOCATE('-', ' - -ABC', my_double),
my_double, id FROM t1_values;
SELECT LOCATE('-', ' - -ABC', my_double),
my_double, id FROM t1_values
-WHERE select_id = 179 OR select_id IS NULL order by id;
+WHERE select_id = 182 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 182 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -462,13 +464,13 @@ CREATE VIEW v1 AS SELECT LOCATE('-', ' - -ABC', my_bigint),
my_bigint, id FROM t1_values;
SELECT LOCATE('-', ' - -ABC', my_bigint),
my_bigint, id FROM t1_values
-WHERE select_id = 178 OR select_id IS NULL order by id;
+WHERE select_id = 181 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 181 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -476,13 +478,13 @@ CREATE VIEW v1 AS SELECT LOCATE('-', my_varbinary_1000, 3),
my_varbinary_1000, id FROM t1_values;
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;
+WHERE select_id = 180 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 180 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -490,13 +492,13 @@ CREATE VIEW v1 AS SELECT LOCATE('-', my_binary_30, 3),
my_binary_30, id FROM t1_values;
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;
+WHERE select_id = 179 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 179 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -504,13 +506,13 @@ CREATE VIEW v1 AS SELECT LOCATE('-', my_varchar_1000, 3),
my_varchar_1000, id FROM t1_values;
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;
+WHERE select_id = 178 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 178 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -518,13 +520,13 @@ CREATE VIEW v1 AS SELECT LOCATE('-', my_char_30, 3),
my_char_30, id FROM t1_values;
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;
+WHERE select_id = 177 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 177 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -532,13 +534,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_varbinary_1000, my_binary_30 ),
my_varbinary_1000, my_binary_30 id FROM t1_values;
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;
+WHERE select_id = 176 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 176 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -546,13 +548,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_varbinary_1000, my_varchar_1000 ),
my_varbinary_1000, my_varchar_1000 id FROM t1_values;
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;
+WHERE select_id = 175 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 175 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -560,13 +562,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_varbinary_1000, my_char_30 ),
my_varbinary_1000, my_char_30 id FROM t1_values;
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;
+WHERE select_id = 174 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 174 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -574,13 +576,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_varbinary_1000, my_varbinary_1000 ),
my_varbinary_1000, id FROM t1_values;
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;
+WHERE select_id = 173 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 173 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -588,13 +590,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_binary_30, my_varbinary_1000 ),
my_binary_30, my_varbinary_1000 id FROM t1_values;
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;
+WHERE select_id = 172 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 172 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -602,13 +604,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_binary_30, my_varchar_1000 ),
my_binary_30, my_varchar_1000 id FROM t1_values;
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;
+WHERE select_id = 171 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 171 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -616,13 +618,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_binary_30, my_char_30 ),
my_binary_30, my_char_30 id FROM t1_values;
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;
+WHERE select_id = 170 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 170 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -630,13 +632,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_binary_30, my_binary_30 ),
my_binary_30, id FROM t1_values;
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;
+WHERE select_id = 169 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 169 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -644,13 +646,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_varchar_1000, my_varbinary_1000 ),
my_varchar_1000, my_varbinary_1000 id FROM t1_values;
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;
+WHERE select_id = 168 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 168 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -658,13 +660,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_varchar_1000, my_binary_30 ),
my_varchar_1000, my_binary_30 id FROM t1_values;
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;
+WHERE select_id = 167 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 167 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -672,13 +674,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_varchar_1000, my_char_30 ),
my_varchar_1000, my_char_30 id FROM t1_values;
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;
+WHERE select_id = 166 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 166 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -686,13 +688,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_varchar_1000, my_varchar_1000 ),
my_varchar_1000, id FROM t1_values;
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;
+WHERE select_id = 165 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 165 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -700,13 +702,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_char_30, my_varbinary_1000 ),
my_char_30, my_varbinary_1000 id FROM t1_values;
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;
+WHERE select_id = 164 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 164 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -714,13 +716,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_char_30, my_binary_30 ),
my_char_30, my_binary_30 id FROM t1_values;
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;
+WHERE select_id = 163 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 163 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -728,13 +730,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_char_30, my_varchar_1000 ),
my_char_30, my_varchar_1000 id FROM t1_values;
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;
+WHERE select_id = 162 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 162 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -742,13 +744,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_char_30, my_char_30 ),
my_char_30, id FROM t1_values;
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;
+WHERE select_id = 161 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 161 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -756,13 +758,13 @@ CREATE VIEW v1 AS SELECT LOCATE('char', my_varbinary_1000),
my_varbinary_1000, id FROM t1_values;
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;
+WHERE select_id = 160 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 160 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -770,13 +772,13 @@ CREATE VIEW v1 AS SELECT LOCATE('char', my_binary_30),
my_binary_30, id FROM t1_values;
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;
+WHERE select_id = 159 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 159 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -784,13 +786,13 @@ CREATE VIEW v1 AS SELECT LOCATE('char', my_varchar_1000),
my_varchar_1000, id FROM t1_values;
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;
+WHERE select_id = 158 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 158 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -798,19 +800,19 @@ CREATE VIEW v1 AS SELECT LOCATE('char', my_char_30),
my_char_30, id FROM t1_values;
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;
+WHERE select_id = 157 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 157 OR select_id IS NULL) order by id;
DROP VIEW v1;
CREATE VIEW v1 AS SELECT LOAD_FILE('../tmp/func_view.dat'), id FROM t1_values;
SELECT LOAD_FILE('../tmp/func_view.dat'), id FROM t1_values
-WHERE select_id = 153 OR select_id IS NULL order by id;
+WHERE select_id = 156 OR select_id IS NULL order by id;
LOAD_FILE('../tmp/func_view.dat') id
äÄ@
1
@@ -827,7 +829,7 @@ 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;
+WHERE select_id = 156 OR select_id IS NULL) order by id;
LOAD_FILE('../tmp/func_view.dat') id
äÄ@
1
@@ -846,13 +848,13 @@ CREATE VIEW v1 AS SELECT LENGTH(my_varbinary_1000),
my_varbinary_1000, id FROM t1_values;
SELECT LENGTH(my_varbinary_1000),
my_varbinary_1000, id FROM t1_values
-WHERE select_id = 152 OR select_id IS NULL order by id;
+WHERE select_id = 155 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 155 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -860,13 +862,13 @@ CREATE VIEW v1 AS SELECT LENGTH(my_binary_30),
my_binary_30, id FROM t1_values;
SELECT LENGTH(my_binary_30),
my_binary_30, id FROM t1_values
-WHERE select_id = 151 OR select_id IS NULL order by id;
+WHERE select_id = 154 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 154 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -874,13 +876,13 @@ CREATE VIEW v1 AS SELECT LENGTH(my_varchar_1000),
my_varchar_1000, id FROM t1_values;
SELECT LENGTH(my_varchar_1000),
my_varchar_1000, id FROM t1_values
-WHERE select_id = 150 OR select_id IS NULL order by id;
+WHERE select_id = 153 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 153 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -888,19 +890,49 @@ CREATE VIEW v1 AS SELECT LENGTH(my_char_30),
my_char_30, id FROM t1_values;
SELECT LENGTH(my_char_30),
my_char_30, id FROM t1_values
-WHERE select_id = 149 OR select_id IS NULL order by id;
+WHERE select_id = 152 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 152 OR select_id IS NULL) order by id;
+DROP VIEW v1;
+
+
+CREATE VIEW v1 AS SELECT LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_double), my_double, id FROM t1_values;
+SELECT LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_double), my_double, id FROM t1_values
+WHERE select_id = 151 OR select_id IS NULL order by id;
+LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_double) my_double id
+NULL NULL 1
+ -1.7976931348623e+308 2
+AaBbCcDdEeFfGgHhIiJjÄäÜüÖö 1.7976931348623e+308 3
+ 0 4
+ -1 5
+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 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_double`) AS `LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', 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 = 151 OR select_id IS NULL) order by id;
+LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_double) my_double id
+NULL NULL 1
+ -1.7976931348623e+308 2
+AaBbCcDdEeFfGgHhIiJjÄäÜüÖö 1.7976931348623e+308 3
+ 0 4
+ -1 5
+Warnings:
+Warning 1292 Truncated incorrect INTEGER value: '-1.7976931348623e+308'
+Warning 1292 Truncated incorrect INTEGER value: '1.7976931348623e+308'
DROP VIEW v1;
CREATE VIEW v1 AS SELECT LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_decimal), my_decimal, id FROM t1_values;
SELECT LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_decimal), my_decimal, id FROM t1_values
-WHERE select_id = 148 OR select_id IS NULL order by id;
+WHERE select_id = 150 OR select_id IS NULL order by id;
LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_decimal) my_decimal id
NULL NULL 1
-9999999999999999999999999999999999.999999999999999999999999999999 2
@@ -915,7 +947,7 @@ 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;
+WHERE select_id = 150 OR select_id IS NULL) order by id;
LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_decimal) my_decimal id
NULL NULL 1
-9999999999999999999999999999999999.999999999999999999999999999999 2
@@ -928,9 +960,33 @@ Error 1292 Truncated incorrect DECIMAL value: ''
DROP VIEW v1;
+CREATE VIEW v1 AS SELECT LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_bigint), my_bigint, id FROM t1_values;
+SELECT LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_bigint), my_bigint, id FROM t1_values
+WHERE select_id = 149 OR select_id IS NULL order by id;
+LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_bigint) my_bigint id
+NULL NULL 1
+ -9223372036854775808 2
+AaBbCcDdEeFfGgHhIiJjÄäÜüÖö 9223372036854775807 3
+ 0 4
+ -1 5
+SHOW CREATE VIEW v1;
+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_bigint`) AS `LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', 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 = 149 OR select_id IS NULL) order by id;
+LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_bigint) my_bigint id
+NULL NULL 1
+ -9223372036854775808 2
+AaBbCcDdEeFfGgHhIiJjÄäÜüÖö 9223372036854775807 3
+ 0 4
+ -1 5
+DROP VIEW v1;
+
+
CREATE VIEW v1 AS SELECT LEFT(my_varbinary_1000, 2), my_varbinary_1000, id FROM t1_values;
SELECT LEFT(my_varbinary_1000, 2), my_varbinary_1000, id FROM t1_values
-WHERE select_id = 147 OR select_id IS NULL order by id;
+WHERE select_id = 148 OR select_id IS NULL order by id;
LEFT(my_varbinary_1000, 2) my_varbinary_1000 id
NULL NULL 1
2
@@ -942,7 +998,7 @@ 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;
+WHERE select_id = 148 OR select_id IS NULL) order by id;
LEFT(my_varbinary_1000, 2) my_varbinary_1000 id
NULL NULL 1
2
@@ -954,7 +1010,7 @@ DROP VIEW v1;
CREATE VIEW v1 AS SELECT LEFT(my_binary_30, 2), my_binary_30, id FROM t1_values;
SELECT LEFT(my_binary_30, 2), my_binary_30, id FROM t1_values
-WHERE select_id = 146 OR select_id IS NULL order by id;
+WHERE select_id = 147 OR select_id IS NULL order by id;
LEFT(my_binary_30, 2) my_binary_30 id
NULL NULL 1
@@ -966,7 +1022,7 @@ 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;
+WHERE select_id = 147 OR select_id IS NULL) order by id;
LEFT(my_binary_30, 2) my_binary_30 id
NULL NULL 1
@@ -978,7 +1034,7 @@ DROP VIEW v1;
CREATE VIEW v1 AS SELECT LEFT(my_varchar_1000, 2), my_varchar_1000, id FROM t1_values;
SELECT LEFT(my_varchar_1000, 2), my_varchar_1000, id FROM t1_values
-WHERE select_id = 145 OR select_id IS NULL order by id;
+WHERE select_id = 146 OR select_id IS NULL order by id;
LEFT(my_varchar_1000, 2) my_varchar_1000 id
NULL NULL 1
2
@@ -990,7 +1046,7 @@ 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;
+WHERE select_id = 146 OR select_id IS NULL) order by id;
LEFT(my_varchar_1000, 2) my_varchar_1000 id
NULL NULL 1
2
@@ -1002,7 +1058,7 @@ DROP VIEW v1;
CREATE VIEW v1 AS SELECT LEFT(my_char_30, 2), my_char_30, id FROM t1_values;
SELECT LEFT(my_char_30, 2), my_char_30, id FROM t1_values
-WHERE select_id = 144 OR select_id IS NULL order by id;
+WHERE select_id = 145 OR select_id IS NULL order by id;
LEFT(my_char_30, 2) my_char_30 id
NULL NULL 1
2
@@ -1014,7 +1070,7 @@ 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;
+WHERE select_id = 145 OR select_id IS NULL) order by id;
LEFT(my_char_30, 2) my_char_30 id
NULL NULL 1
2
@@ -1028,13 +1084,13 @@ CREATE VIEW v1 AS SELECT LCASE(my_varchar_1000),
my_varchar_1000, id FROM t1_values;
SELECT LCASE(my_varchar_1000),
my_varchar_1000, id FROM t1_values
-WHERE select_id = 143 OR select_id IS NULL order by id;
+WHERE select_id = 144 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 144 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -1042,13 +1098,13 @@ CREATE VIEW v1 AS SELECT INSTR(my_char_30, 'char'),
my_char_30, id FROM t1_values;
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;
+WHERE select_id = 143 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 143 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -1056,7 +1112,7 @@ CREATE VIEW v1 AS SELECT BIT_LENGTH(my_varbinary_1000),
my_varbinary_1000, id FROM t1_values;
SELECT BIT_LENGTH(my_varbinary_1000),
my_varbinary_1000, id FROM t1_values
-WHERE select_id = 141 OR select_id IS NULL order by id;
+WHERE select_id = 142 OR select_id IS NULL order by id;
BIT_LENGTH(my_varbinary_1000) my_varbinary_1000 id
NULL NULL 1
0 2
@@ -1068,7 +1124,7 @@ 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;
+WHERE select_id = 142 OR select_id IS NULL) order by id;
BIT_LENGTH(my_varbinary_1000) my_varbinary_1000 id
NULL NULL 1
0 2
@@ -1082,7 +1138,7 @@ CREATE VIEW v1 AS SELECT BIT_LENGTH(my_binary_30),
my_binary_30, id FROM t1_values;
SELECT BIT_LENGTH(my_binary_30),
my_binary_30, id FROM t1_values
-WHERE select_id = 140 OR select_id IS NULL order by id;
+WHERE select_id = 141 OR select_id IS NULL order by id;
BIT_LENGTH(my_binary_30) my_binary_30 id
NULL NULL 1
240
@@ -1094,7 +1150,7 @@ 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;
+WHERE select_id = 141 OR select_id IS NULL) order by id;
BIT_LENGTH(my_binary_30) my_binary_30 id
NULL NULL 1
240
@@ -1108,7 +1164,7 @@ CREATE VIEW v1 AS SELECT BIT_LENGTH(my_varchar_1000),
my_varchar_1000, id FROM t1_values;
SELECT BIT_LENGTH(my_varchar_1000),
my_varchar_1000, id FROM t1_values
-WHERE select_id = 139 OR select_id IS NULL order by id;
+WHERE select_id = 140 OR select_id IS NULL order by id;
BIT_LENGTH(my_varchar_1000) my_varchar_1000 id
NULL NULL 1
0 2
@@ -1120,7 +1176,7 @@ 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;
+WHERE select_id = 140 OR select_id IS NULL) order by id;
BIT_LENGTH(my_varchar_1000) my_varchar_1000 id
NULL NULL 1
0 2
@@ -1134,7 +1190,7 @@ CREATE VIEW v1 AS SELECT BIT_LENGTH(my_char_30),
my_char_30, id FROM t1_values;
SELECT BIT_LENGTH(my_char_30),
my_char_30, id FROM t1_values
-WHERE select_id = 138 OR select_id IS NULL order by id;
+WHERE select_id = 139 OR select_id IS NULL order by id;
BIT_LENGTH(my_char_30) my_char_30 id
NULL NULL 1
0 2
@@ -1146,7 +1202,7 @@ 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;
+WHERE select_id = 139 OR select_id IS NULL) order by id;
BIT_LENGTH(my_char_30) my_char_30 id
NULL NULL 1
0 2
@@ -1160,7 +1216,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_year,'IS_NULL'),
my_year, id FROM t1_values;
SELECT IFNULL(my_year,'IS_NULL'),
my_year, id FROM t1_values
-WHERE select_id = 137 OR select_id IS NULL order by id;
+WHERE select_id = 138 OR select_id IS NULL order by id;
IFNULL(my_year,'IS_NULL') my_year id
IS_NULL NULL 1
1901 1901 2
@@ -1172,7 +1228,7 @@ 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;
+WHERE select_id = 138 OR select_id IS NULL) order by id;
IFNULL(my_year,'IS_NULL') my_year id
IS_NULL NULL 1
1901 1901 2
@@ -1186,7 +1242,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_time,'IS_NULL'),
my_time, id FROM t1_values;
SELECT IFNULL(my_time,'IS_NULL'),
my_time, id FROM t1_values
-WHERE select_id = 136 OR select_id IS NULL order by id;
+WHERE select_id = 137 OR select_id IS NULL order by id;
IFNULL(my_time,'IS_NULL') my_time id
IS_NULL NULL 1
-838:59:59 -838:59:59 2
@@ -1198,7 +1254,7 @@ 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;
+WHERE select_id = 137 OR select_id IS NULL) order by id;
IFNULL(my_time,'IS_NULL') my_time id
IS_NULL NULL 1
-838:59:59 -838:59:59 2
@@ -1212,7 +1268,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_timestamp,'IS_NULL'),
my_timestamp, id FROM t1_values;
SELECT IFNULL(my_timestamp,'IS_NULL'),
my_timestamp, id FROM t1_values
-WHERE select_id = 135 OR select_id IS NULL order by id;
+WHERE select_id = 136 OR select_id IS NULL order by id;
IFNULL(my_timestamp,'IS_NULL') my_timestamp id
0000-00-00 00:00:00 0000-00-00 00:00:00 1
1970-01-01 03:00:01 1970-01-01 03:00:01 2
@@ -1224,7 +1280,7 @@ 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;
+WHERE select_id = 136 OR select_id IS NULL) order by id;
IFNULL(my_timestamp,'IS_NULL') my_timestamp id
0000-00-00 00:00:00 0000-00-00 00:00:00 1
1970-01-01 03:00:01 1970-01-01 03:00:01 2
@@ -1238,7 +1294,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_date,'IS_NULL'),
my_date, id FROM t1_values;
SELECT IFNULL(my_date,'IS_NULL'),
my_date, id FROM t1_values
-WHERE select_id = 134 OR select_id IS NULL order by id;
+WHERE select_id = 135 OR select_id IS NULL order by id;
IFNULL(my_date,'IS_NULL') my_date id
IS_NULL NULL 1
0001-01-01 0001-01-01 2
@@ -1250,7 +1306,7 @@ 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;
+WHERE select_id = 135 OR select_id IS NULL) order by id;
IFNULL(my_date,'IS_NULL') my_date id
IS_NULL NULL 1
0001-01-01 0001-01-01 2
@@ -1264,7 +1320,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_datetime,'IS_NULL'),
my_datetime, id FROM t1_values;
SELECT IFNULL(my_datetime,'IS_NULL'),
my_datetime, id FROM t1_values
-WHERE select_id = 133 OR select_id IS NULL order by id;
+WHERE select_id = 134 OR select_id IS NULL order by id;
IFNULL(my_datetime,'IS_NULL') my_datetime id
IS_NULL NULL 1
0001-01-01 00:00:00 0001-01-01 00:00:00 2
@@ -1276,7 +1332,7 @@ 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;
+WHERE select_id = 134 OR select_id IS NULL) order by id;
IFNULL(my_datetime,'IS_NULL') my_datetime id
IS_NULL NULL 1
0001-01-01 00:00:00 0001-01-01 00:00:00 2
@@ -1290,7 +1346,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_double,'IS_NULL'),
my_double, id FROM t1_values;
SELECT IFNULL(my_double,'IS_NULL'),
my_double, id FROM t1_values
-WHERE select_id = 132 OR select_id IS NULL order by id;
+WHERE select_id = 133 OR select_id IS NULL order by id;
IFNULL(my_double,'IS_NULL') my_double id
IS_NULL NULL 1
-1.7976931348623e+308 -1.7976931348623e+308 2
@@ -1302,7 +1358,7 @@ 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;
+WHERE select_id = 133 OR select_id IS NULL) order by id;
IFNULL(my_double,'IS_NULL') my_double id
IS_NULL NULL 1
-1.7976931348623e+308 -1.7976931348623e+308 2
@@ -1316,7 +1372,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_decimal,'IS_NULL'),
my_decimal, id FROM t1_values;
SELECT IFNULL(my_decimal,'IS_NULL'),
my_decimal, id FROM t1_values
-WHERE select_id = 131 OR select_id IS NULL order by id;
+WHERE select_id = 132 OR select_id IS NULL order by id;
IFNULL(my_decimal,'IS_NULL') my_decimal id
IS_NULL NULL 1
-9999999999999999999999999999999999.999999999999999999999999999999 -9999999999999999999999999999999999.999999999999999999999999999999 2
@@ -1328,7 +1384,7 @@ 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;
+WHERE select_id = 132 OR select_id IS NULL) order by id;
IFNULL(my_decimal,'IS_NULL') my_decimal id
IS_NULL NULL 1
-9999999999999999999999999999999999.999999999999999999999999999999 -9999999999999999999999999999999999.999999999999999999999999999999 2
@@ -1342,7 +1398,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_bigint,'IS_NULL'),
my_bigint, id FROM t1_values;
SELECT IFNULL(my_bigint,'IS_NULL'),
my_bigint, id FROM t1_values
-WHERE select_id = 130 OR select_id IS NULL order by id;
+WHERE select_id = 131 OR select_id IS NULL order by id;
IFNULL(my_bigint,'IS_NULL') my_bigint id
IS_NULL NULL 1
-9223372036854775808 -9223372036854775808 2
@@ -1354,7 +1410,7 @@ 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;
+WHERE select_id = 131 OR select_id IS NULL) order by id;
IFNULL(my_bigint,'IS_NULL') my_bigint id
IS_NULL NULL 1
-9223372036854775808 -9223372036854775808 2
@@ -1368,7 +1424,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_varbinary_1000,'IS_NULL'),
my_varbinary_1000, id FROM t1_values;
SELECT IFNULL(my_varbinary_1000,'IS_NULL'),
my_varbinary_1000, id FROM t1_values
-WHERE select_id = 129 OR select_id IS NULL order by id;
+WHERE select_id = 130 OR select_id IS NULL order by id;
IFNULL(my_varbinary_1000,'IS_NULL') my_varbinary_1000 id
IS_NULL NULL 1
2
@@ -1380,7 +1436,7 @@ 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;
+WHERE select_id = 130 OR select_id IS NULL) order by id;
IFNULL(my_varbinary_1000,'IS_NULL') my_varbinary_1000 id
IS_NULL NULL 1
2
@@ -1394,7 +1450,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_binary_30,'IS_NULL'),
my_binary_30, id FROM t1_values;
SELECT IFNULL(my_binary_30,'IS_NULL'),
my_binary_30, id FROM t1_values
-WHERE select_id = 128 OR select_id IS NULL order by id;
+WHERE select_id = 129 OR select_id IS NULL order by id;
IFNULL(my_binary_30,'IS_NULL') my_binary_30 id
IS_NULL NULL 1
@@ -1406,7 +1462,7 @@ 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;
+WHERE select_id = 129 OR select_id IS NULL) order by id;
IFNULL(my_binary_30,'IS_NULL') my_binary_30 id
IS_NULL NULL 1
@@ -1420,7 +1476,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_varchar_1000,'IS_NULL'),
my_varchar_1000, id FROM t1_values;
SELECT IFNULL(my_varchar_1000,'IS_NULL'),
my_varchar_1000, id FROM t1_values
-WHERE select_id = 127 OR select_id IS NULL order by id;
+WHERE select_id = 128 OR select_id IS NULL order by id;
IFNULL(my_varchar_1000,'IS_NULL') my_varchar_1000 id
IS_NULL NULL 1
2
@@ -1432,7 +1488,7 @@ 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;
+WHERE select_id = 128 OR select_id IS NULL) order by id;
IFNULL(my_varchar_1000,'IS_NULL') my_varchar_1000 id
IS_NULL NULL 1
2
@@ -1446,7 +1502,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_char_30,'IS_NULL'),
my_char_30, id FROM t1_values;
SELECT IFNULL(my_char_30,'IS_NULL'),
my_char_30, id FROM t1_values
-WHERE select_id = 126 OR select_id IS NULL order by id;
+WHERE select_id = 127 OR select_id IS NULL order by id;
IFNULL(my_char_30,'IS_NULL') my_char_30 id
IS_NULL NULL 1
2
@@ -1458,7 +1514,7 @@ 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;
+WHERE select_id = 127 OR select_id IS NULL) order by id;
IFNULL(my_char_30,'IS_NULL') my_char_30 id
IS_NULL NULL 1
2
@@ -1472,7 +1528,7 @@ CREATE VIEW v1 AS SELECT IF(my_year IS NULL, 'IS NULL',
'IS NOT NULL'), my_year, id FROM t1_values;
SELECT IF(my_year IS NULL, 'IS NULL',
'IS NOT NULL'), my_year, id FROM t1_values
-WHERE select_id = 125 OR select_id IS NULL order by id;
+WHERE select_id = 126 OR select_id IS NULL order by id;
IF(my_year IS NULL, 'IS NULL',
'IS NOT NULL') my_year id
IS NULL NULL 1
@@ -1486,7 +1542,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 126 OR select_id IS NULL) order by id;
IF(my_year IS NULL, 'IS NULL',
'IS NOT NULL') my_year id
IS NULL NULL 1
@@ -1501,7 +1557,7 @@ CREATE VIEW v1 AS SELECT IF(my_time IS NULL, 'IS NULL',
'IS NOT NULL'), my_time, id FROM t1_values;
SELECT IF(my_time IS NULL, 'IS NULL',
'IS NOT NULL'), my_time, id FROM t1_values
-WHERE select_id = 124 OR select_id IS NULL order by id;
+WHERE select_id = 125 OR select_id IS NULL order by id;
IF(my_time IS NULL, 'IS NULL',
'IS NOT NULL') my_time id
IS NULL NULL 1
@@ -1515,7 +1571,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 125 OR select_id IS NULL) order by id;
IF(my_time IS NULL, 'IS NULL',
'IS NOT NULL') my_time id
IS NULL NULL 1
@@ -1530,7 +1586,7 @@ CREATE VIEW v1 AS SELECT IF(my_timestamp IS NULL, 'IS NULL',
'IS NOT NULL'), my_timestamp, id FROM t1_values;
SELECT IF(my_timestamp IS NULL, 'IS NULL',
'IS NOT NULL'), my_timestamp, id FROM t1_values
-WHERE select_id = 123 OR select_id IS NULL order by id;
+WHERE select_id = 124 OR select_id IS NULL order by id;
IF(my_timestamp IS NULL, 'IS NULL',
'IS NOT NULL') my_timestamp id
IS NOT NULL 0000-00-00 00:00:00 1
@@ -1544,7 +1600,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 124 OR select_id IS NULL) order by id;
IF(my_timestamp IS NULL, 'IS NULL',
'IS NOT NULL') my_timestamp id
IS NOT NULL 0000-00-00 00:00:00 1
@@ -1559,7 +1615,7 @@ CREATE VIEW v1 AS SELECT IF(my_date IS NULL, 'IS NULL',
'IS NOT NULL'), my_date, id FROM t1_values;
SELECT IF(my_date IS NULL, 'IS NULL',
'IS NOT NULL'), my_date, id FROM t1_values
-WHERE select_id = 122 OR select_id IS NULL order by id;
+WHERE select_id = 123 OR select_id IS NULL order by id;
IF(my_date IS NULL, 'IS NULL',
'IS NOT NULL') my_date id
IS NULL NULL 1
@@ -1573,7 +1629,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 123 OR select_id IS NULL) order by id;
IF(my_date IS NULL, 'IS NULL',
'IS NOT NULL') my_date id
IS NULL NULL 1
@@ -1588,7 +1644,7 @@ CREATE VIEW v1 AS SELECT IF(my_datetime IS NULL, 'IS NULL',
'IS NOT NULL'), my_datetime, id FROM t1_values;
SELECT IF(my_datetime IS NULL, 'IS NULL',
'IS NOT NULL'), my_datetime, id FROM t1_values
-WHERE select_id = 121 OR select_id IS NULL order by id;
+WHERE select_id = 122 OR select_id IS NULL order by id;
IF(my_datetime IS NULL, 'IS NULL',
'IS NOT NULL') my_datetime id
IS NULL NULL 1
@@ -1602,7 +1658,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 122 OR select_id IS NULL) order by id;
IF(my_datetime IS NULL, 'IS NULL',
'IS NOT NULL') my_datetime id
IS NULL NULL 1
@@ -1617,7 +1673,7 @@ CREATE VIEW v1 AS SELECT IF(my_double IS NULL, 'IS NULL',
'IS NOT NULL'), my_double, id FROM t1_values;
SELECT IF(my_double IS NULL, 'IS NULL',
'IS NOT NULL'), my_double, id FROM t1_values
-WHERE select_id = 120 OR select_id IS NULL order by id;
+WHERE select_id = 121 OR select_id IS NULL order by id;
IF(my_double IS NULL, 'IS NULL',
'IS NOT NULL') my_double id
IS NULL NULL 1
@@ -1631,7 +1687,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 121 OR select_id IS NULL) order by id;
IF(my_double IS NULL, 'IS NULL',
'IS NOT NULL') my_double id
IS NULL NULL 1
@@ -1646,7 +1702,7 @@ CREATE VIEW v1 AS SELECT IF(my_decimal IS NULL, 'IS NULL',
'IS NOT NULL'), my_decimal, id FROM t1_values;
SELECT IF(my_decimal IS NULL, 'IS NULL',
'IS NOT NULL'), my_decimal, id FROM t1_values
-WHERE select_id = 119 OR select_id IS NULL order by id;
+WHERE select_id = 120 OR select_id IS NULL order by id;
IF(my_decimal IS NULL, 'IS NULL',
'IS NOT NULL') my_decimal id
IS NULL NULL 1
@@ -1660,7 +1716,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 120 OR select_id IS NULL) order by id;
IF(my_decimal IS NULL, 'IS NULL',
'IS NOT NULL') my_decimal id
IS NULL NULL 1
@@ -1675,7 +1731,7 @@ CREATE VIEW v1 AS SELECT IF(my_bigint IS NULL, 'IS NULL',
'IS NOT NULL'), my_bigint, id FROM t1_values;
SELECT IF(my_bigint IS NULL, 'IS NULL',
'IS NOT NULL'), my_bigint, id FROM t1_values
-WHERE select_id = 118 OR select_id IS NULL order by id;
+WHERE select_id = 119 OR select_id IS NULL order by id;
IF(my_bigint IS NULL, 'IS NULL',
'IS NOT NULL') my_bigint id
IS NULL NULL 1
@@ -1689,7 +1745,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 119 OR select_id IS NULL) order by id;
IF(my_bigint IS NULL, 'IS NULL',
'IS NOT NULL') my_bigint id
IS NULL NULL 1
@@ -1704,7 +1760,7 @@ CREATE VIEW v1 AS SELECT IF(my_varbinary_1000 IS NULL, 'IS NULL',
'IS NOT NULL'), my_varbinary_1000, id FROM t1_values;
SELECT IF(my_varbinary_1000 IS NULL, 'IS NULL',
'IS NOT NULL'), my_varbinary_1000, id FROM t1_values
-WHERE select_id = 117 OR select_id IS NULL order by id;
+WHERE select_id = 118 OR select_id IS NULL order by id;
IF(my_varbinary_1000 IS NULL, 'IS NULL',
'IS NOT NULL') my_varbinary_1000 id
IS NULL NULL 1
@@ -1718,7 +1774,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 118 OR select_id IS NULL) order by id;
IF(my_varbinary_1000 IS NULL, 'IS NULL',
'IS NOT NULL') my_varbinary_1000 id
IS NULL NULL 1
@@ -1733,7 +1789,7 @@ CREATE VIEW v1 AS SELECT IF(my_binary_30 IS NULL, 'IS NULL',
'IS NOT NULL'), my_binary_30, id FROM t1_values;
SELECT IF(my_binary_30 IS NULL, 'IS NULL',
'IS NOT NULL'), my_binary_30, id FROM t1_values
-WHERE select_id = 116 OR select_id IS NULL order by id;
+WHERE select_id = 117 OR select_id IS NULL order by id;
IF(my_binary_30 IS NULL, 'IS NULL',
'IS NOT NULL') my_binary_30 id
IS NULL NULL 1
@@ -1747,7 +1803,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 117 OR select_id IS NULL) order by id;
IF(my_binary_30 IS NULL, 'IS NULL',
'IS NOT NULL') my_binary_30 id
IS NULL NULL 1
@@ -1762,7 +1818,7 @@ CREATE VIEW v1 AS SELECT IF(my_varchar_1000 IS NULL, 'IS NULL',
'IS NOT NULL'), my_varchar_1000, id FROM t1_values;
SELECT IF(my_varchar_1000 IS NULL, 'IS NULL',
'IS NOT NULL'), my_varchar_1000, id FROM t1_values
-WHERE select_id = 115 OR select_id IS NULL order by id;
+WHERE select_id = 116 OR select_id IS NULL order by id;
IF(my_varchar_1000 IS NULL, 'IS NULL',
'IS NOT NULL') my_varchar_1000 id
IS NULL NULL 1
@@ -1776,7 +1832,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 116 OR select_id IS NULL) order by id;
IF(my_varchar_1000 IS NULL, 'IS NULL',
'IS NOT NULL') my_varchar_1000 id
IS NULL NULL 1
@@ -1791,7 +1847,7 @@ CREATE VIEW v1 AS SELECT IF(my_char_30 IS NULL, 'IS NULL',
'IS NOT NULL'), my_char_30, id FROM t1_values;
SELECT IF(my_char_30 IS NULL, 'IS NULL',
'IS NOT NULL'), my_char_30, id FROM t1_values
-WHERE select_id = 114 OR select_id IS NULL order by id;
+WHERE select_id = 115 OR select_id IS NULL order by id;
IF(my_char_30 IS NULL, 'IS NULL',
'IS NOT NULL') my_char_30 id
IS NULL NULL 1
@@ -1805,7 +1861,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 115 OR select_id IS NULL) order by id;
IF(my_char_30 IS NULL, 'IS NULL',
'IS NOT NULL') my_char_30 id
IS NULL NULL 1
@@ -1820,7 +1876,7 @@ CREATE VIEW v1 AS SELECT IF(my_year, 'IS TRUE', 'IS NOT TRUE'),
my_year, id FROM t1_values;
SELECT IF(my_year, 'IS TRUE', 'IS NOT TRUE'),
my_year, id FROM t1_values
-WHERE select_id = 113 OR select_id IS NULL order by id;
+WHERE select_id = 114 OR select_id IS NULL order by id;
IF(my_year, 'IS TRUE', 'IS NOT TRUE') my_year id
IS NOT TRUE NULL 1
IS TRUE 1901 2
@@ -1832,7 +1888,7 @@ 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;
+WHERE select_id = 114 OR select_id IS NULL) order by id;
IF(my_year, 'IS TRUE', 'IS NOT TRUE') my_year id
IS NOT TRUE NULL 1
IS TRUE 1901 2
@@ -1846,7 +1902,7 @@ CREATE VIEW v1 AS SELECT IF(my_time, 'IS TRUE', 'IS NOT TRUE'),
my_time, id FROM t1_values;
SELECT IF(my_time, 'IS TRUE', 'IS NOT TRUE'),
my_time, id FROM t1_values
-WHERE select_id = 112 OR select_id IS NULL order by id;
+WHERE select_id = 113 OR select_id IS NULL order by id;
IF(my_time, 'IS TRUE', 'IS NOT TRUE') my_time id
IS NOT TRUE NULL 1
IS TRUE -838:59:59 2
@@ -1858,7 +1914,7 @@ 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;
+WHERE select_id = 113 OR select_id IS NULL) order by id;
IF(my_time, 'IS TRUE', 'IS NOT TRUE') my_time id
IS NOT TRUE NULL 1
IS TRUE -838:59:59 2
@@ -1872,7 +1928,7 @@ CREATE VIEW v1 AS SELECT IF(my_timestamp, 'IS TRUE', 'IS NOT TRUE'),
my_timestamp, id FROM t1_values;
SELECT IF(my_timestamp, 'IS TRUE', 'IS NOT TRUE'),
my_timestamp, id FROM t1_values
-WHERE select_id = 111 OR select_id IS NULL order by id;
+WHERE select_id = 112 OR select_id IS NULL order by id;
IF(my_timestamp, 'IS TRUE', 'IS NOT TRUE') my_timestamp id
IS NOT TRUE 0000-00-00 00:00:00 1
IS TRUE 1970-01-01 03:00:01 2
@@ -1884,7 +1940,7 @@ 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;
+WHERE select_id = 112 OR select_id IS NULL) order by id;
IF(my_timestamp, 'IS TRUE', 'IS NOT TRUE') my_timestamp id
IS NOT TRUE 0000-00-00 00:00:00 1
IS TRUE 1970-01-01 03:00:01 2
@@ -1898,7 +1954,7 @@ CREATE VIEW v1 AS SELECT IF(my_date, 'IS TRUE', 'IS NOT TRUE'),
my_date, id FROM t1_values;
SELECT IF(my_date, 'IS TRUE', 'IS NOT TRUE'),
my_date, id FROM t1_values
-WHERE select_id = 110 OR select_id IS NULL order by id;
+WHERE select_id = 111 OR select_id IS NULL order by id;
IF(my_date, 'IS TRUE', 'IS NOT TRUE') my_date id
IS NOT TRUE NULL 1
IS TRUE 0001-01-01 2
@@ -1910,7 +1966,7 @@ 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;
+WHERE select_id = 111 OR select_id IS NULL) order by id;
IF(my_date, 'IS TRUE', 'IS NOT TRUE') my_date id
IS NOT TRUE NULL 1
IS TRUE 0001-01-01 2
@@ -1924,7 +1980,7 @@ CREATE VIEW v1 AS SELECT IF(my_datetime, 'IS TRUE', 'IS NOT TRUE'),
my_datetime, id FROM t1_values;
SELECT IF(my_datetime, 'IS TRUE', 'IS NOT TRUE'),
my_datetime, id FROM t1_values
-WHERE select_id = 109 OR select_id IS NULL order by id;
+WHERE select_id = 110 OR select_id IS NULL order by id;
IF(my_datetime, 'IS TRUE', 'IS NOT TRUE') my_datetime id
IS NOT TRUE NULL 1
IS TRUE 0001-01-01 00:00:00 2
@@ -1936,7 +1992,7 @@ 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;
+WHERE select_id = 110 OR select_id IS NULL) order by id;
IF(my_datetime, 'IS TRUE', 'IS NOT TRUE') my_datetime id
IS NOT TRUE NULL 1
IS TRUE 0001-01-01 00:00:00 2
@@ -1950,7 +2006,7 @@ CREATE VIEW v1 AS SELECT IF(my_double, 'IS TRUE', 'IS NOT TRUE'),
my_double, id FROM t1_values;
SELECT IF(my_double, 'IS TRUE', 'IS NOT TRUE'),
my_double, id FROM t1_values
-WHERE select_id = 108 OR select_id IS NULL order by id;
+WHERE select_id = 109 OR select_id IS NULL order by id;
IF(my_double, 'IS TRUE', 'IS NOT TRUE') my_double id
IS NOT TRUE NULL 1
IS TRUE -1.7976931348623e+308 2
@@ -1962,7 +2018,7 @@ 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;
+WHERE select_id = 109 OR select_id IS NULL) order by id;
IF(my_double, 'IS TRUE', 'IS NOT TRUE') my_double id
IS NOT TRUE NULL 1
IS TRUE -1.7976931348623e+308 2
@@ -1976,7 +2032,7 @@ CREATE VIEW v1 AS SELECT IF(my_decimal, 'IS TRUE', 'IS NOT TRUE'),
my_decimal, id FROM t1_values;
SELECT IF(my_decimal, 'IS TRUE', 'IS NOT TRUE'),
my_decimal, id FROM t1_values
-WHERE select_id = 107 OR select_id IS NULL order by id;
+WHERE select_id = 108 OR select_id IS NULL order by id;
IF(my_decimal, 'IS TRUE', 'IS NOT TRUE') my_decimal id
IS NOT TRUE NULL 1
IS TRUE -9999999999999999999999999999999999.999999999999999999999999999999 2
@@ -1988,7 +2044,7 @@ 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;
+WHERE select_id = 108 OR select_id IS NULL) order by id;
IF(my_decimal, 'IS TRUE', 'IS NOT TRUE') my_decimal id
IS NOT TRUE NULL 1
IS TRUE -9999999999999999999999999999999999.999999999999999999999999999999 2
@@ -2002,7 +2058,7 @@ CREATE VIEW v1 AS SELECT IF(my_bigint, 'IS TRUE', 'IS NOT TRUE'),
my_bigint, id FROM t1_values;
SELECT IF(my_bigint, 'IS TRUE', 'IS NOT TRUE'),
my_bigint, id FROM t1_values
-WHERE select_id = 106 OR select_id IS NULL order by id;
+WHERE select_id = 107 OR select_id IS NULL order by id;
IF(my_bigint, 'IS TRUE', 'IS NOT TRUE') my_bigint id
IS NOT TRUE NULL 1
IS TRUE -9223372036854775808 2
@@ -2014,7 +2070,7 @@ 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;
+WHERE select_id = 107 OR select_id IS NULL) order by id;
IF(my_bigint, 'IS TRUE', 'IS NOT TRUE') my_bigint id
IS NOT TRUE NULL 1
IS TRUE -9223372036854775808 2
@@ -2028,7 +2084,7 @@ CREATE VIEW v1 AS SELECT IF(my_varbinary_1000, 'IS TRUE', 'IS NOT TRUE'),
my_varbinary_1000, id FROM t1_values;
SELECT IF(my_varbinary_1000, 'IS TRUE', 'IS NOT TRUE'),
my_varbinary_1000, id FROM t1_values
-WHERE select_id = 105 OR select_id IS NULL order by id;
+WHERE select_id = 106 OR select_id IS NULL order by id;
IF(my_varbinary_1000, 'IS TRUE', 'IS NOT TRUE') my_varbinary_1000 id
IS NOT TRUE NULL 1
IS NOT TRUE 2
@@ -2040,7 +2096,7 @@ 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;
+WHERE select_id = 106 OR select_id IS NULL) order by id;
IF(my_varbinary_1000, 'IS TRUE', 'IS NOT TRUE') my_varbinary_1000 id
IS NOT TRUE NULL 1
IS NOT TRUE 2
@@ -2054,7 +2110,7 @@ CREATE VIEW v1 AS SELECT IF(my_binary_30, 'IS TRUE', 'IS NOT TRUE'),
my_binary_30, id FROM t1_values;
SELECT IF(my_binary_30, 'IS TRUE', 'IS NOT TRUE'),
my_binary_30, id FROM t1_values
-WHERE select_id = 104 OR select_id IS NULL order by id;
+WHERE select_id = 105 OR select_id IS NULL order by id;
IF(my_binary_30, 'IS TRUE', 'IS NOT TRUE') my_binary_30 id
IS NOT TRUE NULL 1
IS NOT TRUE
@@ -2071,7 +2127,7 @@ 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;
+WHERE select_id = 105 OR select_id IS NULL) order by id;
IF(my_binary_30, 'IS TRUE', 'IS NOT TRUE') my_binary_30 id
IS NOT TRUE NULL 1
IS NOT TRUE
@@ -2090,7 +2146,7 @@ CREATE VIEW v1 AS SELECT IF(my_varchar_1000, 'IS TRUE', 'IS NOT TRUE'),
my_varchar_1000, id FROM t1_values;
SELECT IF(my_varchar_1000, 'IS TRUE', 'IS NOT TRUE'),
my_varchar_1000, id FROM t1_values
-WHERE select_id = 103 OR select_id IS NULL order by id;
+WHERE select_id = 104 OR select_id IS NULL order by id;
IF(my_varchar_1000, 'IS TRUE', 'IS NOT TRUE') my_varchar_1000 id
IS NOT TRUE NULL 1
IS NOT TRUE 2
@@ -2102,7 +2158,7 @@ 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;
+WHERE select_id = 104 OR select_id IS NULL) order by id;
IF(my_varchar_1000, 'IS TRUE', 'IS NOT TRUE') my_varchar_1000 id
IS NOT TRUE NULL 1
IS NOT TRUE 2
@@ -2116,7 +2172,7 @@ CREATE VIEW v1 AS SELECT IF(my_char_30, 'IS TRUE', 'IS NOT TRUE'),
my_char_30, id FROM t1_values;
SELECT IF(my_char_30, 'IS TRUE', 'IS NOT TRUE'),
my_char_30, id FROM t1_values
-WHERE select_id = 102 OR select_id IS NULL order by id;
+WHERE select_id = 103 OR select_id IS NULL order by id;
IF(my_char_30, 'IS TRUE', 'IS NOT TRUE') my_char_30 id
IS NOT TRUE NULL 1
IS NOT TRUE 2
@@ -2131,7 +2187,7 @@ 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;
+WHERE select_id = 103 OR select_id IS NULL) order by id;
IF(my_char_30, 'IS TRUE', 'IS NOT TRUE') my_char_30 id
IS NOT TRUE NULL 1
IS NOT TRUE 2
@@ -2148,7 +2204,7 @@ CREATE VIEW v1 AS SELECT CONVERT(my_varbinary_1000 USING koi8r),
my_varbinary_1000, id FROM t1_values;
SELECT CONVERT(my_varbinary_1000 USING koi8r),
my_varbinary_1000, id FROM t1_values
-WHERE select_id = 101 OR select_id IS NULL order by id;
+WHERE select_id = 102 OR select_id IS NULL order by id;
CONVERT(my_varbinary_1000 USING koi8r) my_varbinary_1000 id
NULL NULL 1
2
@@ -2160,7 +2216,7 @@ 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;
+WHERE select_id = 102 OR select_id IS NULL) order by id;
CONVERT(my_varbinary_1000 USING koi8r) my_varbinary_1000 id
NULL NULL 1
2
@@ -2174,7 +2230,7 @@ CREATE VIEW v1 AS SELECT CONVERT(my_binary_30 USING koi8r),
my_binary_30, id FROM t1_values;
SELECT CONVERT(my_binary_30 USING koi8r),
my_binary_30, id FROM t1_values
-WHERE select_id = 100 OR select_id IS NULL order by id;
+WHERE select_id = 101 OR select_id IS NULL order by id;
CONVERT(my_binary_30 USING koi8r) my_binary_30 id
NULL NULL 1
@@ -2186,7 +2242,7 @@ 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;
+WHERE select_id = 101 OR select_id IS NULL) order by id;
CONVERT(my_binary_30 USING koi8r) my_binary_30 id
NULL NULL 1
@@ -2200,7 +2256,7 @@ CREATE VIEW v1 AS SELECT CONVERT(my_varchar_1000 USING koi8r),
my_varchar_1000, id FROM t1_values;
SELECT CONVERT(my_varchar_1000 USING koi8r),
my_varchar_1000, id FROM t1_values
-WHERE select_id = 99 OR select_id IS NULL order by id;
+WHERE select_id = 100 OR select_id IS NULL order by id;
CONVERT(my_varchar_1000 USING koi8r) my_varchar_1000 id
NULL NULL 1
2
@@ -2212,7 +2268,7 @@ 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;
+WHERE select_id = 100 OR select_id IS NULL) order by id;
CONVERT(my_varchar_1000 USING koi8r) my_varchar_1000 id
NULL NULL 1
2
@@ -2226,7 +2282,7 @@ CREATE VIEW v1 AS SELECT CONVERT(my_char_30 USING koi8r),
my_char_30, id FROM t1_values;
SELECT CONVERT(my_char_30 USING koi8r),
my_char_30, id FROM t1_values
-WHERE select_id = 98 OR select_id IS NULL order by id;
+WHERE select_id = 99 OR select_id IS NULL order by id;
CONVERT(my_char_30 USING koi8r) my_char_30 id
NULL NULL 1
2
@@ -2238,7 +2294,7 @@ 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;
+WHERE select_id = 99 OR select_id IS NULL) order by id;
CONVERT(my_char_30 USING koi8r) my_char_30 id
NULL NULL 1
2
@@ -2252,7 +2308,7 @@ CREATE VIEW v1 AS SELECT CONVERT(my_varbinary_1000 USING utf8),
my_varbinary_1000, id FROM t1_values;
SELECT CONVERT(my_varbinary_1000 USING utf8),
my_varbinary_1000, id FROM t1_values
-WHERE select_id = 97 OR select_id IS NULL order by id;
+WHERE select_id = 98 OR select_id IS NULL order by id;
CONVERT(my_varbinary_1000 USING utf8) my_varbinary_1000 id
NULL NULL 1
2
@@ -2264,7 +2320,7 @@ 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;
+WHERE select_id = 98 OR select_id IS NULL) order by id;
CONVERT(my_varbinary_1000 USING utf8) my_varbinary_1000 id
NULL NULL 1
2
@@ -2278,7 +2334,7 @@ CREATE VIEW v1 AS SELECT CONVERT(my_binary_30 USING utf8),
my_binary_30, id FROM t1_values;
SELECT CONVERT(my_binary_30 USING utf8),
my_binary_30, id FROM t1_values
-WHERE select_id = 96 OR select_id IS NULL order by id;
+WHERE select_id = 97 OR select_id IS NULL order by id;
CONVERT(my_binary_30 USING utf8) my_binary_30 id
NULL NULL 1
@@ -2290,7 +2346,7 @@ 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;
+WHERE select_id = 97 OR select_id IS NULL) order by id;
CONVERT(my_binary_30 USING utf8) my_binary_30 id
NULL NULL 1
@@ -2304,7 +2360,7 @@ CREATE VIEW v1 AS SELECT CONVERT(my_varchar_1000 USING utf8),
my_varchar_1000, id FROM t1_values;
SELECT CONVERT(my_varchar_1000 USING utf8),
my_varchar_1000, id FROM t1_values
-WHERE select_id = 95 OR select_id IS NULL order by id;
+WHERE select_id = 96 OR select_id IS NULL order by id;
CONVERT(my_varchar_1000 USING utf8) my_varchar_1000 id
NULL NULL 1
2
@@ -2316,7 +2372,7 @@ 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;
+WHERE select_id = 96 OR select_id IS NULL) order by id;
CONVERT(my_varchar_1000 USING utf8) my_varchar_1000 id
NULL NULL 1
2
@@ -2330,7 +2386,7 @@ CREATE VIEW v1 AS SELECT CONVERT(my_char_30 USING utf8),
my_char_30, id FROM t1_values;
SELECT CONVERT(my_char_30 USING utf8),
my_char_30, id FROM t1_values
-WHERE select_id = 94 OR select_id IS NULL order by id;
+WHERE select_id = 95 OR select_id IS NULL order by id;
CONVERT(my_char_30 USING utf8) my_char_30 id
NULL NULL 1
2
@@ -2342,7 +2398,7 @@ 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;
+WHERE select_id = 95 OR select_id IS NULL) order by id;
CONVERT(my_char_30 USING utf8) my_char_30 id
NULL NULL 1
2
@@ -2356,7 +2412,7 @@ CREATE VIEW v1 AS SELECT CAST(my_year AS UNSIGNED INTEGER),
my_year, id FROM t1_values;
SELECT CAST(my_year AS UNSIGNED INTEGER),
my_year, id FROM t1_values
-WHERE select_id = 93 OR select_id IS NULL order by id;
+WHERE select_id = 94 OR select_id IS NULL order by id;
CAST(my_year AS UNSIGNED INTEGER) my_year id
NULL NULL 1
1901 1901 2
@@ -2368,7 +2424,7 @@ 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;
+WHERE select_id = 94 OR select_id IS NULL) order by id;
CAST(my_year AS UNSIGNED INTEGER) my_year id
NULL NULL 1
1901 1901 2
@@ -2382,7 +2438,7 @@ CREATE VIEW v1 AS SELECT CAST(my_time AS UNSIGNED INTEGER),
my_time, id FROM t1_values;
SELECT CAST(my_time AS UNSIGNED INTEGER),
my_time, id FROM t1_values
-WHERE select_id = 92 OR select_id IS NULL order by id;
+WHERE select_id = 93 OR select_id IS NULL order by id;
CAST(my_time AS UNSIGNED INTEGER) my_time id
NULL NULL 1
18446744073701165657 -838:59:59 2
@@ -2394,7 +2450,7 @@ 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;
+WHERE select_id = 93 OR select_id IS NULL) order by id;
CAST(my_time AS UNSIGNED INTEGER) my_time id
NULL NULL 1
18446744073701165657 -838:59:59 2
@@ -2408,7 +2464,7 @@ CREATE VIEW v1 AS SELECT CAST(my_timestamp AS UNSIGNED INTEGER),
my_timestamp, id FROM t1_values;
SELECT CAST(my_timestamp AS UNSIGNED INTEGER),
my_timestamp, id FROM t1_values
-WHERE select_id = 91 OR select_id IS NULL order by id;
+WHERE select_id = 92 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
19700101030001 1970-01-01 03:00:01 2
@@ -2420,7 +2476,7 @@ 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;
+WHERE select_id = 92 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
19700101030001 1970-01-01 03:00:01 2
@@ -2434,7 +2490,7 @@ CREATE VIEW v1 AS SELECT CAST(my_date AS UNSIGNED INTEGER),
my_date, id FROM t1_values;
SELECT CAST(my_date AS UNSIGNED INTEGER),
my_date, id FROM t1_values
-WHERE select_id = 90 OR select_id IS NULL order by id;
+WHERE select_id = 91 OR select_id IS NULL order by id;
CAST(my_date AS UNSIGNED INTEGER) my_date id
NULL NULL 1
10101 0001-01-01 2
@@ -2446,7 +2502,7 @@ 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;
+WHERE select_id = 91 OR select_id IS NULL) order by id;
CAST(my_date AS UNSIGNED INTEGER) my_date id
NULL NULL 1
10101 0001-01-01 2
@@ -2460,7 +2516,7 @@ CREATE VIEW v1 AS SELECT CAST(my_datetime AS UNSIGNED INTEGER),
my_datetime, id FROM t1_values;
SELECT CAST(my_datetime AS UNSIGNED INTEGER),
my_datetime, id FROM t1_values
-WHERE select_id = 89 OR select_id IS NULL order by id;
+WHERE select_id = 90 OR select_id IS NULL order by id;
CAST(my_datetime AS UNSIGNED INTEGER) my_datetime id
NULL NULL 1
10101000000 0001-01-01 00:00:00 2
@@ -2472,7 +2528,7 @@ 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;
+WHERE select_id = 90 OR select_id IS NULL) order by id;
CAST(my_datetime AS UNSIGNED INTEGER) my_datetime id
NULL NULL 1
10101000000 0001-01-01 00:00:00 2
@@ -2482,6 +2538,38 @@ NULL NULL 1
DROP VIEW v1;
+CREATE VIEW v1 AS SELECT CAST(my_double AS UNSIGNED INTEGER),
+my_double, id FROM t1_values;
+SELECT CAST(my_double AS UNSIGNED INTEGER),
+my_double, id FROM t1_values
+WHERE select_id = 89 OR select_id IS NULL order by id;
+CAST(my_double AS UNSIGNED INTEGER) my_double id
+NULL NULL 1
+9223372036854775808 -1.7976931348623e+308 2
+9223372036854775807 1.7976931348623e+308 3
+0 0 4
+18446744073709551615 -1 5
+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 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 unsigned) AS `CAST(my_double AS UNSIGNED 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 = 89 OR select_id IS NULL) order by id;
+CAST(my_double AS UNSIGNED INTEGER) my_double id
+NULL NULL 1
+9223372036854775808 -1.7976931348623e+308 2
+9223372036854775807 1.7976931348623e+308 3
+0 0 4
+18446744073709551615 -1 5
+Warnings:
+Warning 1292 Truncated incorrect INTEGER value: '-1.7976931348623e+308'
+Warning 1292 Truncated incorrect INTEGER value: '1.7976931348623e+308'
+DROP VIEW v1;
+
+
CREATE VIEW v1 AS SELECT CAST(my_decimal AS UNSIGNED INTEGER),
my_decimal, id FROM t1_values;
SELECT CAST(my_decimal AS UNSIGNED INTEGER),
diff --git a/mysql-test/suite/funcs_1/r/innodb_storedproc.result b/mysql-test/suite/funcs_1/r/innodb_storedproc.result
index fbc908b8ccf..e8084c75e30 100644
--- a/mysql-test/suite/funcs_1/r/innodb_storedproc.result
+++ b/mysql-test/suite/funcs_1/r/innodb_storedproc.result
@@ -1,29 +1,4 @@
-.
-. IMPORTANT NOTICE:
-. -----------------
-.
-. FIXME: The .result files are still NOT CHECKED for correctness!
-.
-. FIXME: Several tests are affected by known problems around DECIMAL
-. FIXME: and NUMERIC that will be checked again after WL#2984 once
-. FIXME: has been completed. Some of them are marked in the result.
-.
-. Currently (Dec 06, 2005) this .result file is checked OK for Linux
-. with 5.0.17-bk (ChangeSet@1.1975.1.2, 2005-12-05 18:33:48+01:00).
-. Using the available Windows version 5.0.16 there are differences
-. that can be ignored (e.g. WL#2984).
-.
---------------------------------------------------------------------------------
- FIXME: There are subtests that are switched off due to known bugs:
- ------------------------------------------------------------------
-WL#2984: DECIMAL and NUMERIC problems with differences on some machines
-0
-
-There are some statements where the ps-protocol is switched off.
-Bug#11589: mysqltest, --ps-protocol, strange output, float/double/real with zerofill
---------------------------------------------------------------------------------
-
--source suite/funcs_1/storedproc/load_sp_tb.inc
--------------------------------------------------------------------------------
SET @@global.max_heap_table_size=4294967295;
@@ -94,23 +69,24 @@ CREATE PROCEDURE
--------------------------------------------------------------------------------
USE db_storedproc;
DROP PROCEDURE IF EXISTS sp1_thisisaveryverylongname234872934_thisisaveryverylongname234872934;
+ERROR 42000: Identifier name 'sp1_thisisaveryverylongname234872934_thisisaveryverylongname234872934' is too long
CREATE PROCEDURE sp1_thisisaveryverylongname234872934_thisisaveryverylongname234872934 (f1 char(20) )
SELECT * from t1 where f2 = f1;
+ERROR 42000: Identifier name 'sp1_thisisaveryverylongname234872934_thisisaveryverylongname234872934' is too long
CALL sp1_thisisaveryverylongname234872934_thisisaveryverylongname234872934('aaaa');
-f1 f2 f3 f4 f5 f6
+ERROR 42000: Identifier name 'sp1_thisisaveryverylongname234872934_thisisaveryverylongname234872934' is too long
DROP PROCEDURE IF EXISTS sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcde;
+ERROR 42000: Identifier name 'sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcde' is too long
CREATE PROCEDURE sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcde( f1 tinytext ) language sql deterministic sql security definer comment 'this is simple'
BEGIN
set @v1 = f1;
SELECT @v1, @v1;
END//
+ERROR 42000: Identifier name 'sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcde' is too long
CALL sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcde( 'abc' );
-@v1 @v1
-abc abc
+ERROR 42000: Identifier name 'sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcde' is too long
SHOW PROCEDURE status;
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongname2348 PROCEDURE root@localhost modified created DEFINER
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcd PROCEDURE root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 binary ) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
@@ -119,12 +95,12 @@ SELECT @v1;
END//
CALL sp1( 34 );
@v1
-34
+3
+Warnings:
+Warning 1265 Data truncated for column 'f1' at row 1
SHOW PROCEDURE status;
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongname2348 PROCEDURE root@localhost modified created DEFINER
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcd PROCEDURE root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 blob ) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
@@ -135,10 +111,8 @@ CALL sp1( 34 );
@v1
34
SHOW PROCEDURE status;
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongname2348 PROCEDURE root@localhost modified created DEFINER
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcd PROCEDURE root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 int ) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
@@ -149,25 +123,27 @@ CALL sp1( 34 );
@v1
34
SHOW PROCEDURE status;
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongname2348 PROCEDURE root@localhost modified created DEFINER
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcd PROCEDURE root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed: SP definition accepted with m>60 in DECIMAL(m,n)
CREATE PROCEDURE sp1( f1 decimal(256, 30) ) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
set @v1 = f1;
SELECT @v1;
END//
+ERROR 42000: Too big precision 256 specified for column ''. Maximum is 65.
DROP PROCEDURE IF EXISTS sp1//
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( f1 decimal(66, 30) ) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
set @v1 = f1;
SELECT @v1;
END//
+ERROR 42000: Too big precision 66 specified for column ''. Maximum is 65.
DROP PROCEDURE IF EXISTS sp1//
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( f1 decimal(60, 30) ) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
set @v1 = f1;
@@ -175,101 +151,1123 @@ SELECT @v1;
END//
CALL sp1( 17976931340000 );
@v1
-17976931340000
+17976931340000.000000000000000000000000000000
+CALL sp1( 1.797693134e+13 );
+@v1
+17976931340000.000000000000000000000000000000
+CALL sp1( 1.7976931348623157493578e+308 );
+ERROR 22007: Illegal double '1.7976931348623157493578e+308' value found during parsing
+CALL sp1( 0.1234567890987654321e+100 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-100 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+99 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-99 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+98 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-98 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+97 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-97 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+96 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-96 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+95 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-95 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+94 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-94 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+93 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-93 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+92 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-92 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+91 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-91 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+90 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-90 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+89 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-89 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+88 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-88 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+87 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-87 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+86 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-86 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+85 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-85 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+84 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-84 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+83 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-83 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+82 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-82 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+81 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-81 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+80 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-80 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+79 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-79 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+78 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-78 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+77 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-77 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+76 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-76 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+75 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-75 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+74 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-74 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+73 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-73 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+72 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-72 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+71 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-71 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+70 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-70 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+69 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-69 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+68 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-68 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+67 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-67 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+66 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-66 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+65 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-65 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+64 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-64 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+63 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-63 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+62 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-62 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+61 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-61 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+60 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-60 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+59 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-59 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+58 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-58 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+57 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-57 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+56 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-56 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+55 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-55 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+54 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-54 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+53 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-53 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+52 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-52 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+51 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-51 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+50 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-50 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+49 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-49 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+48 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-48 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+47 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-47 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+46 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-46 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+45 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-45 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+44 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-44 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+43 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-43 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+42 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-42 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+41 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-41 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+40 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-40 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+39 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-39 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+38 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-38 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+37 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-37 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+36 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-36 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+35 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-35 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+34 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-34 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+33 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-33 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+32 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-32 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+31 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-31 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+30 );
+@v1
+123456789098765400000000000000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-30 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+29 );
+@v1
+12345678909876540000000000000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-29 );
+@v1
+0.000000000000000000000000000001
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+28 );
+@v1
+1234567890987654000000000000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-28 );
+@v1
+0.000000000000000000000000000012
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+27 );
+@v1
+123456789098765400000000000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-27 );
+@v1
+0.000000000000000000000000000123
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+26 );
+@v1
+12345678909876540000000000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-26 );
+@v1
+0.000000000000000000000000001235
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+25 );
+@v1
+1234567890987654000000000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-25 );
+@v1
+0.000000000000000000000000012346
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+24 );
+@v1
+123456789098765400000000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-24 );
+@v1
+0.000000000000000000000000123457
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+23 );
+@v1
+12345678909876540000000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-23 );
+@v1
+0.000000000000000000000001234568
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+22 );
+@v1
+1234567890987654000000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-22 );
+@v1
+0.000000000000000000000012345679
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+21 );
+@v1
+123456789098765400000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-21 );
+@v1
+0.000000000000000000000123456789
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+20 );
+@v1
+12345678909876540000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-20 );
+@v1
+0.000000000000000000001234567891
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+19 );
+@v1
+1234567890987654000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-19 );
+@v1
+0.000000000000000000012345678910
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+18 );
+@v1
+123456789098765400.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-18 );
+@v1
+0.000000000000000000123456789099
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+17 );
+@v1
+12345678909876540.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-17 );
+@v1
+0.000000000000000001234567890988
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+16 );
+@v1
+1234567890987654.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-16 );
+@v1
+0.000000000000000012345678909877
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+15 );
+@v1
+123456789098765.400000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-15 );
+@v1
+0.000000000000000123456789098765
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+14 );
+@v1
+12345678909876.540000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-14 );
+@v1
+0.000000000000001234567890987654
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+13 );
+@v1
+1234567890987.654000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-13 );
+@v1
+0.000000000000012345678909876540
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+12 );
+@v1
+123456789098.765400000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-12 );
+@v1
+0.000000000000123456789098765400
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+11 );
+@v1
+12345678909.876540000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-11 );
+@v1
+0.000000000001234567890987654000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+10 );
+@v1
+1234567890.987654000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-10 );
+@v1
+0.000000000012345678909876540000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+9 );
+@v1
+123456789.098765400000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-9 );
+@v1
+0.000000000123456789098765400000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+8 );
+@v1
+12345678.909876540000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-8 );
+@v1
+0.000000001234567890987654000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+7 );
+@v1
+1234567.890987654000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-7 );
+@v1
+0.000000012345678909876540000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+6 );
+@v1
+123456.789098765400000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-6 );
+@v1
+0.000000123456789098765400000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+5 );
+@v1
+12345.678909876540000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-5 );
+@v1
+0.000001234567890987654000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+4 );
+@v1
+1234.567890987654000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-4 );
+@v1
+0.000012345678909876550000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+3 );
+@v1
+123.456789098765400000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-3 );
+@v1
+0.000123456789098765400000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+2 );
+@v1
+12.345678909876540000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-2 );
+@v1
+0.001234567890987654000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+1 );
+@v1
+1.234567890987654000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-1 );
+@v1
+0.012345678909876540000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+0 );
+@v1
+0.123456789098765400000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-0 );
+@v1
+0.123456789098765400000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
SHOW PROCEDURE status;
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongname2348 PROCEDURE root@localhost modified created DEFINER
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcd PROCEDURE root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 enum("value1", "value1") ) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
SELECT f1;
END//
+Warnings:
+Note 1291 Column '' has duplicated value 'value1' in ENUM
CALL sp1( "value1" );
f1
value1
+Warnings:
+Note 1291 Column '' has duplicated value 'value1' in ENUM
SHOW PROCEDURE status;
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongname2348 PROCEDURE root@localhost modified created DEFINER
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcd PROCEDURE root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 set("value1", "value1") ) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
SELECT f1;
END//
+Warnings:
+Note 1291 Column '' has duplicated value 'value1' in SET
CALL sp1( "value1, value1" );
f1
-value1, value1
+value1
+Warnings:
+Note 1291 Column '' has duplicated value 'value1' in SET
+Warning 1265 Data truncated for column 'f1' at row 1
SHOW PROCEDURE status;
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongname2348 PROCEDURE root@localhost modified created DEFINER
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcd PROCEDURE root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 enum("value1", "value1") ) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
SELECT f1;
END//
+Warnings:
+Note 1291 Column '' has duplicated value 'value1' in ENUM
CALL sp1( "value1" );
f1
value1
+Warnings:
+Note 1291 Column '' has duplicated value 'value1' in ENUM
SHOW PROCEDURE status;
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongname2348 PROCEDURE root@localhost modified created DEFINER
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcd PROCEDURE root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 text ) language sql SELECT f1;
CALL sp1( 'abc' );
f1
abc
SHOW PROCEDURE status like 'sp1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 text ) deterministic SELECT f1;
CALL sp1( 'abc' );
f1
abc
SHOW PROCEDURE status like 'sp1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 text ) not deterministic SELECT f1;
CALL sp1( 'abc' );
f1
abc
SHOW PROCEDURE status like 'sp1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 text ) sql security definer SELECT f1;
CALL sp1( 'abc' );
f1
abc
SHOW PROCEDURE status like 'sp1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 text ) sql security invoker SELECT f1;
CALL sp1( 'abc' );
f1
abc
SHOW PROCEDURE status like 'sp1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 text ) comment 'this is simple' SELECT f1;
CALL sp1( 'abc' );
f1
abc
SHOW PROCEDURE status like 'sp1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created DEFINER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE sp1_thisisaveryverylongname234872934_thisisaveryverylongname234872934;
+ERROR 42000: Identifier name 'sp1_thisisaveryverylongname234872934_thisisaveryverylongname234872934' is too long
DROP PROCEDURE sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcde;
+ERROR 42000: Identifier name 'sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcde' is too long
DROP PROCEDURE sp1;
Testcase 4.1.2:
@@ -294,8 +1292,8 @@ SELECT fn1( ' world');
fn1( ' world')
hello world
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created DEFINER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1( f1 smallint ) returns smallint language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
@@ -306,8 +1304,8 @@ SELECT fn1( 126 );
fn1( 126 )
127
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created INVOKER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1( f1 decimal(63, 31) ) returns decimal(63, 31) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
@@ -326,34 +1324,34 @@ SELECT fn1( 1.3326e+8 );
fn1( 1.3326e+8 )
134260000.000000000000000000000000000000
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created INVOKER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1( f1 enum("value1", "value1") ) returns decimal(63, 30) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
return f1;
END//
+Warnings:
+Note 1291 Column '' has duplicated value 'value1' in ENUM
SELECT fn1( "value1" );
fn1( "value1" )
-0.000000000000000000000000000000
-Warnings:
-Warning 1292 Truncated incorrect DECIMAL value: 'value1'
+1.000000000000000000000000000000
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created INVOKER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1( f1 set("value1", "value1") ) returns decimal(63, 30) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
return f1;
END//
+Warnings:
+Note 1291 Column '' has duplicated value 'value1' in SET
SELECT fn1( "value1, value1" );
fn1( "value1, value1" )
-0.000000000000000000000000000000
-Warnings:
-Warning 1292 Truncated incorrect DECIMAL value: 'value1, value1'
+1.000000000000000000000000000000
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created INVOKER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1( f1 smallint ) returns smallint language sql
BEGIN
@@ -364,8 +1362,8 @@ SELECT fn1( 126 );
fn1( 126 )
127
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1( f1 smallint ) returns smallint deterministic
BEGIN
@@ -376,8 +1374,8 @@ SELECT fn1( 126 );
fn1( 126 )
127
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1( f1 smallint ) returns smallint not deterministic
BEGIN
@@ -388,8 +1386,8 @@ SELECT fn1( 126 );
fn1( 126 )
127
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1( f1 smallint ) returns smallint
sql security definer
@@ -401,8 +1399,8 @@ SELECT fn1( 126 );
fn1( 126 )
127
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1( f1 smallint ) returns smallint
sql security invoker
@@ -414,8 +1412,8 @@ SELECT fn1( 126 );
fn1( 126 )
127
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created INVOKER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created INVOKER latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1( f1 smallint ) returns smallint
comment 'this is simple'
@@ -427,8 +1425,8 @@ SELECT fn1( 126 );
fn1( 126 )
127
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created DEFINER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION fn1;
Testcase 4.1.3:
@@ -440,9 +1438,9 @@ DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1 (f1 char(20) )
SELECT * from t1 where f2 = f1;
show CREATE PROCEDURE sp1;
-Procedure sql_mode Create Procedure
-sp1 CREATE PROCEDURE `sp1`(f1 char(20) )
-SELECT * from t1 where f2 = f1
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp1 CREATE DEFINER=`root`@`localhost` PROCEDURE `sp1`(f1 char(20) )
+SELECT * from t1 where f2 = f1 latin1 modified created
DROP PROCEDURE sp1;
Testcase 4.1.4:
@@ -453,9 +1451,9 @@ DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1 (s char(20)) returns char(50)
return concat('hello, ', s, '!');
show CREATE FUNCTION fn1;
-Function sql_mode Create Function
-fn1 CREATE FUNCTION `fn1`(s char(20)) RETURNS char(50)
-return concat('hello, ', s, '!')
+Function sql_mode Create Function character_set_client collation_connection Database Collation
+fn1 CREATE DEFINER=`root`@`localhost` FUNCTION `fn1`(s char(20)) RETURNS char(50) CHARSET latin1
+return concat('hello, ', s, '!') latin1 modified created
DROP FUNCTION fn1;
Testcase 4.1.5:
@@ -465,8 +1463,8 @@ SHOW PROCEDURE status
CREATE PROCEDURE sp5()
SELECT * from t1;
SHOW PROCEDURE status like 'sp5';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp5 PROCEDURE root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp5 PROCEDURE root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE sp5;
Testcase 4.1.6:
@@ -479,8 +1477,8 @@ set @b = 0.9 * a;
return @b;
END//
SHOW FUNCTION STATUS LIKE 'fn5';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn5 FUNCTION root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn5 FUNCTION root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION fn5;
Testcase 4.1.7:
@@ -498,7 +1496,7 @@ CREATE PROCEDURE sp7b (a char (20), out b char(20))
SELECT f1 into b from t1 where t1.f2= a;
CALL sp7b('xyz', @out_param);
Warnings:
-Warning 1329 No data to FETCH
+Warning 1329 No data - zero rows fetched, selected, or processed
SELECT @out_param;
@out_param
NULL
@@ -510,9 +1508,6 @@ SELECT f2 into c from t1 where t1.f2=999;
END//
set @c=1;
CALL sp7c('xyz', @out_param, @c);
-Warnings:
-Warning 1329 No data to FETCH
-Warning 1329 No data to FETCH
SELECT @out_param;
@out_param
NULL
@@ -539,48 +1534,48 @@ Testcase 4.1.9:
drop procedure
--------------------------------------------------------------------------------
SELECT * from mysql.proc where specific_name='sp9';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
DROP PROCEDURE IF EXISTS sp9;
SELECT * from mysql.proc where specific_name='sp9';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
CREATE PROCEDURE sp9()SELECT * from t1;
SELECT * from mysql.proc where specific_name='sp9';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
-db_storedproc sp9 PROCEDURE sp9 SQL CONTAINS_SQL NO DEFINER SELECT * from t1 root@localhost created modified
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
+db_storedproc sp9 PROCEDURE sp9 SQL CONTAINS_SQL NO DEFINER SELECT * from t1 root@localhost created modified latin1 latin1_swedish_ci latin1_swedish_ci SELECT * from t1
DROP PROCEDURE sp9;
SELECT * from mysql.proc where specific_name='sp9';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
CREATE PROCEDURE sp9()SELECT * from t1;
SELECT * from mysql.proc where specific_name='sp9';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
-db_storedproc sp9 PROCEDURE sp9 SQL CONTAINS_SQL NO DEFINER SELECT * from t1 root@localhost created modified
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
+db_storedproc sp9 PROCEDURE sp9 SQL CONTAINS_SQL NO DEFINER SELECT * from t1 root@localhost created modified latin1 latin1_swedish_ci latin1_swedish_ci SELECT * from t1
DROP PROCEDURE IF EXISTS sp9;
SELECT * from mysql.proc where specific_name='sp9';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
Testcase 4.1.10:
----------------
DROP FUNCTION
--------------------------------------------------------------------------------
SELECT * from mysql.proc where specific_name='fn10' and type='function';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
DROP FUNCTION IF EXISTS fn10;
SELECT * from mysql.proc where specific_name='fn10' and type='function';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
CREATE FUNCTION fn10() returns int return 100;
SELECT * from mysql.proc where specific_name='fn10' and type='function';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
-db_storedproc fn10 FUNCTION fn10 SQL CONTAINS_SQL NO DEFINER int(11) return 100 root@localhost created modified
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
+db_storedproc fn10 FUNCTION fn10 SQL CONTAINS_SQL NO DEFINER int(11) return 100 root@localhost created modified latin1 latin1_swedish_ci latin1_swedish_ci return 100
DROP FUNCTION fn10;
SELECT * from mysql.proc where specific_name='fn10' and type='function';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
CREATE FUNCTION fn10() returns int return 100;
SELECT * from mysql.proc where specific_name='fn10' and type='function';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
-db_storedproc fn10 FUNCTION fn10 SQL CONTAINS_SQL NO DEFINER int(11) return 100 root@localhost created modified
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
+db_storedproc fn10 FUNCTION fn10 SQL CONTAINS_SQL NO DEFINER int(11) return 100 root@localhost created modified latin1 latin1_swedish_ci latin1_swedish_ci return 100
DROP FUNCTION IF EXISTS fn10;
SELECT * from mysql.proc where specific_name='fn10' and type='function';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
Testcase 4.1.11:
----------------
@@ -604,6 +1599,7 @@ connect(localhost,user_1,,db_storedproc,MYSQL_PORT,MYSQL_SOCK);
user_1@localhost db_storedproc
CALL sp11();
+USE db_storedproc;
root@localhost db_storedproc
alter procedure sp11 sql security invoker;
@@ -612,6 +1608,7 @@ security_type
INVOKER
user_1@localhost db_storedproc
+USE db_storedproc;
CALL sp11();
ERROR 42000: INSERT command denied to user 'user_1'@'localhost' for table 't1'
commit work;
@@ -705,6 +1702,10 @@ SELECT * from t1 where f2 = f1' at line 1
CREATE PROCEDURE function()
SELECT * from t1 where f2=f1;
DROP PROCEDURE function;
+CREATE PROCEDURE accessible()
+SELECT * from t1 where f2=f1;
+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 'accessible()
+SELECT * from t1 where f2=f1' at line 1
CREATE PROCEDURE add()
SELECT * from t1 where f2=f1;
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 'add()
@@ -765,9 +1766,9 @@ CREATE PROCEDURE by()
SELECT * from t1 where f2=f1;
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 'by()
SELECT * from t1 where f2=f1' at line 1
-CREATE PROCEDURE CALL()
+CREATE PROCEDURE call()
SELECT * from t1 where f2=f1;
-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 'CALL()
+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 'call()
SELECT * from t1 where f2=f1' at line 1
CREATE PROCEDURE cascade()
SELECT * from t1 where f2=f1;
@@ -801,17 +1802,10 @@ CREATE PROCEDURE column()
SELECT * from t1 where f2=f1;
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 'column()
SELECT * from t1 where f2=f1' at line 1
-CREATE PROCEDURE columns()
-SELECT * from t1 where f2=f1;
-DROP PROCEDURE columns;
CREATE PROCEDURE condition()
SELECT * from t1 where f2=f1;
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 'condition()
SELECT * from t1 where f2=f1' at line 1
-CREATE PROCEDURE connection()
-SELECT * from t1 where f2=f1;
-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 'connection()
-SELECT * from t1 where f2=f1' at line 1
CREATE PROCEDURE constraint()
SELECT * from t1 where f2=f1;
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 'constraint()
@@ -995,9 +1989,6 @@ CREATE PROCEDURE foreign()
SELECT * from t1 where f2=f1;
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 'foreign()
SELECT * from t1 where f2=f1' at line 1
-CREATE PROCEDURE found()
-SELECT * from t1 where f2=f1;
-DROP PROCEDURE found;
CREATE PROCEDURE from()
SELECT * from t1 where f2=f1;
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 'from()
@@ -1006,9 +1997,6 @@ CREATE PROCEDURE fulltext()
SELECT * from t1 where f2=f1;
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 'fulltext()
SELECT * from t1 where f2=f1' at line 1
-CREATE PROCEDURE goto()
-SELECT * from t1 where f2=f1;
-DROP PROCEDURE goto;
CREATE PROCEDURE grant()
SELECT * from t1 where f2=f1;
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 'grant()
@@ -1077,6 +2065,26 @@ CREATE PROCEDURE int()
SELECT * from t1 where f2=f1;
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 'int()
SELECT * from t1 where f2=f1' at line 1
+CREATE PROCEDURE int1()
+SELECT * from t1 where f2=f1;
+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 'int1()
+SELECT * from t1 where f2=f1' at line 1
+CREATE PROCEDURE int2()
+SELECT * from t1 where f2=f1;
+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 'int2()
+SELECT * from t1 where f2=f1' at line 1
+CREATE PROCEDURE int3()
+SELECT * from t1 where f2=f1;
+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 'int3()
+SELECT * from t1 where f2=f1' at line 1
+CREATE PROCEDURE int4()
+SELECT * from t1 where f2=f1;
+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 'int4()
+SELECT * from t1 where f2=f1' at line 1
+CREATE PROCEDURE int8()
+SELECT * from t1 where f2=f1;
+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 'int8()
+SELECT * from t1 where f2=f1' at line 1
CREATE PROCEDURE integer()
SELECT * from t1 where f2=f1;
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 'integer()
@@ -1133,6 +2141,10 @@ CREATE PROCEDURE limit()
SELECT * from t1 where f2=f1;
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 'limit()
SELECT * from t1 where f2=f1' at line 1
+CREATE PROCEDURE linear()
+SELECT * from t1 where f2=f1;
+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 'linear()
+SELECT * from t1 where f2=f1' at line 1
CREATE PROCEDURE lines()
SELECT * from t1 where f2=f1;
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 'lines()
@@ -1173,6 +2185,10 @@ CREATE PROCEDURE low_priority()
SELECT * from t1 where f2=f1;
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 'low_priority()
SELECT * from t1 where f2=f1' at line 1
+CREATE PROCEDURE master_ssl_verify_server_cert()
+SELECT * from t1 where f2=f1;
+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 'master_ssl_verify_server_cert()
+SELECT * from t1 where f2=f1' at line 1
CREATE PROCEDURE match()
SELECT * from t1 where f2=f1;
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 'match()
@@ -1273,9 +2289,6 @@ CREATE PROCEDURE primary()
SELECT * from t1 where f2=f1;
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 'primary()
SELECT * from t1 where f2=f1' at line 1
-CREATE PROCEDURE privileges()
-SELECT * from t1 where f2=f1;
-DROP PROCEDURE privileges;
CREATE PROCEDURE procedure()
SELECT * from t1 where f2=f1;
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 'procedure()
@@ -1284,6 +2297,10 @@ CREATE PROCEDURE purge()
SELECT * from t1 where f2=f1;
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 'purge()
SELECT * from t1 where f2=f1' at line 1
+CREATE PROCEDURE range()
+SELECT * from t1 where f2=f1;
+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 'range()
+SELECT * from t1 where f2=f1' at line 1
CREATE PROCEDURE read()
SELECT * from t1 where f2=f1;
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 'read()
@@ -1304,6 +2321,10 @@ CREATE PROCEDURE regexp()
SELECT * from t1 where f2=f1;
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 'regexp()
SELECT * from t1 where f2=f1' at line 1
+CREATE PROCEDURE release()
+SELECT * from t1 where f2=f1;
+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 'release()
+SELECT * from t1 where f2=f1' at line 1
CREATE PROCEDURE rename()
SELECT * from t1 where f2=f1;
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 'rename()
@@ -1376,10 +2397,6 @@ CREATE PROCEDURE smallint()
SELECT * from t1 where f2=f1;
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 'smallint()
SELECT * from t1 where f2=f1' at line 1
-CREATE PROCEDURE soname()
-SELECT * from t1 where f2=f1;
-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 'soname()
-SELECT * from t1 where f2=f1' at line 1
CREATE PROCEDURE spatial()
SELECT * from t1 where f2=f1;
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 'spatial()
@@ -1432,9 +2449,6 @@ CREATE PROCEDURE table()
SELECT * from t1 where f2=f1;
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 'table()
SELECT * from t1 where f2=f1' at line 1
-CREATE PROCEDURE tables()
-SELECT * from t1 where f2=f1;
-DROP PROCEDURE tables;
CREATE PROCEDURE terminated()
SELECT * from t1 where f2=f1;
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 'terminated()
@@ -1725,6 +2739,26 @@ CREATE FUNCTION int(f1 int) returns int
return f1;
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 'int(f1 int) returns int
return f1' at line 1
+CREATE FUNCTION int1(f1 int1) returns int1
+return f1;
+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 'int1(f1 int1) returns int1
+return f1' at line 1
+CREATE FUNCTION int2(f1 int2) returns int2
+return f1;
+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 'int2(f1 int2) returns int2
+return f1' at line 1
+CREATE FUNCTION int3(f1 int3) returns int3
+return f1;
+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 'int3(f1 int3) returns int3
+return f1' at line 1
+CREATE FUNCTION int4(f1 int4) returns int4
+return f1;
+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 'int4(f1 int4) returns int4
+return f1' at line 1
+CREATE FUNCTION int8(f1 int8) returns int8
+return f1;
+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 'int8(f1 int8) returns int8
+return f1' at line 1
CREATE FUNCTION int unsigned(f1 int unsigned) returns int unsigned
return f1;
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 'int unsigned(f1 int unsigned) returns int unsigned
@@ -1846,485 +2880,291 @@ return f' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(char f1 ) returns char
+CREATE FUNCTION fn1(f1 char ) returns char
return f1;
-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 'char f1 ) returns char
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(char binary f1 ) returns char binary
+CREATE FUNCTION fn1(f1 char binary ) returns char binary
return f1;
-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 'char binary f1 ) returns char binary
-return f1' at line 1
+ERROR 42000: This version of MySQL doesn't yet support 'return value collation'
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(char ascii f1 ) returns char ascii
+CREATE FUNCTION fn1(f1 char ascii ) returns char ascii
return f1;
-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 'char ascii f1 ) returns char ascii
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(char not null f1 ) returns char not null
+CREATE FUNCTION fn1(f1 char not null ) returns char not null
return f1;
-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 'char not null f1 ) returns char not null
+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 'not null ) returns char not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(char binary not null f1 ) returns char binary not null
+CREATE FUNCTION fn1(f1 char binary not null ) returns char binary not null
return f1;
-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 'char binary not null f1 ) returns char binary not null
+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 'not null ) returns char binary not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(char ascii not null f1 ) returns char ascii not null
+CREATE FUNCTION fn1(f1 char ascii not null ) returns char ascii not null
return f1;
-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 'char ascii not null f1 ) returns char ascii not null
+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 'not null ) returns char ascii not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(tinytext f1 ) returns tinytext
+CREATE FUNCTION fn1(f1 tinytext ) returns tinytext
return f1;
-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 'tinytext f1 ) returns tinytext
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(text f1 ) returns text
+CREATE FUNCTION fn1(f1 text ) returns text
return f1;
-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 'f1 ) returns text
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(mediumtext f1 ) returns mediumtext
+CREATE FUNCTION fn1(f1 mediumtext ) returns mediumtext
return f1;
-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 'mediumtext f1 ) returns mediumtext
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(longtext f1 ) returns longtext
+CREATE FUNCTION fn1(f1 longtext ) returns longtext
return f1;
-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 'longtext f1 ) returns longtext
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(tinytext not null f1 ) returns tinytext not null
+CREATE FUNCTION fn1(f1 tinytext not null ) returns tinytext not null
return f1;
-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 'tinytext not null f1 ) returns tinytext not null
+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 'not null ) returns tinytext not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(text not null f1 ) returns text not null
+CREATE FUNCTION fn1(f1 text not null ) returns text not null
return f1;
-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 'not null f1 ) returns text not null
+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 'not null ) returns text not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(mediumtext not null f1 ) returns mediumtext not null
+CREATE FUNCTION fn1(f1 mediumtext not null ) returns mediumtext not null
return f1;
-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 'mediumtext not null f1 ) returns mediumtext not null
+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 'not null ) returns mediumtext not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(longtext not null f1 ) returns longtext not null
+CREATE FUNCTION fn1(f1 longtext not null ) returns longtext not null
return f1;
-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 'longtext not null f1 ) returns longtext not null
+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 'not null ) returns longtext not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(tinyblob f1 ) returns tinyblob
+CREATE FUNCTION fn1(f1 tinyblob ) returns tinyblob
return f1;
-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 'tinyblob f1 ) returns tinyblob
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(blob f1 ) returns blob
+CREATE FUNCTION fn1(f1 blob ) returns blob
return f1;
-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 'blob f1 ) returns blob
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(mediumblob f1 ) returns mediumblob
+CREATE FUNCTION fn1(f1 mediumblob ) returns mediumblob
return f1;
-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 'mediumblob f1 ) returns mediumblob
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(longblob f1 ) returns longblob
+CREATE FUNCTION fn1(f1 longblob ) returns longblob
return f1;
-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 'longblob f1 ) returns longblob
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(tinyblob not null f1 ) returns tinyblob not null
+CREATE FUNCTION fn1(f1 tinyblob not null ) returns tinyblob not null
return f1;
-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 'tinyblob not null f1 ) returns tinyblob not null
+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 'not null ) returns tinyblob not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(blob not null f1 ) returns blob not null
+CREATE FUNCTION fn1(f1 blob not null ) returns blob not null
return f1;
-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 'blob not null f1 ) returns blob not null
+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 'not null ) returns blob not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(mediumblob not null f1 ) returns mediumblob not null
+CREATE FUNCTION fn1(f1 mediumblob not null ) returns mediumblob not null
return f1;
-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 'mediumblob not null f1 ) returns mediumblob not null
+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 'not null ) returns mediumblob not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(longblob not null f1 ) returns longblob not null
+CREATE FUNCTION fn1(f1 longblob not null ) returns longblob not null
return f1;
-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 'longblob not null f1 ) returns longblob not null
+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 'not null ) returns longblob not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(binary f1 ) returns binary
+CREATE FUNCTION fn1(f1 binary ) returns binary
return f1;
-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 'binary f1 ) returns binary
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(binary not null f1 ) returns binary not null
+CREATE FUNCTION fn1(f1 binary not null ) returns binary not null
return f1;
-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 'binary not null f1 ) returns binary not null
+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 'not null ) returns binary not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(tinyint f1 ) returns tinyint
+CREATE FUNCTION fn1(f1 tinyint ) returns tinyint
return f1;
-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 'tinyint f1 ) returns tinyint
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(tinyint unsigned f1 ) returns tinyint unsigned
+CREATE FUNCTION fn1(f1 tinyint unsigned ) returns tinyint unsigned
return f1;
-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 'tinyint unsigned f1 ) returns tinyint unsigned
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(tinyint zerofill f1 ) returns tinyint zerofill
+CREATE FUNCTION fn1(f1 tinyint zerofill ) returns tinyint zerofill
return f1;
-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 'tinyint zerofill f1 ) returns tinyint zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(tinyint unsigned zerofill f1 ) returns tinyint unsigned zerofill
+CREATE FUNCTION fn1(f1 tinyint unsigned zerofill ) returns tinyint unsigned zerofill
return f1;
-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 'tinyint unsigned zerofill f1 ) returns tinyint unsigned zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(smallint f1 ) returns smallint
+CREATE FUNCTION fn1(f1 smallint ) returns smallint
return f1;
-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 'smallint f1 ) returns smallint
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(smallint unsigned f1 ) returns smallint unsigned
+CREATE FUNCTION fn1(f1 smallint unsigned ) returns smallint unsigned
return f1;
-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 'smallint unsigned f1 ) returns smallint unsigned
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(smallint zerofill f1 ) returns smallint zerofill
+CREATE FUNCTION fn1(f1 smallint zerofill ) returns smallint zerofill
return f1;
-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 'smallint zerofill f1 ) returns smallint zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(smallint unsigned zerofill f1 ) returns smallint unsigned zerofill
+CREATE FUNCTION fn1(f1 smallint unsigned zerofill ) returns smallint unsigned zerofill
return f1;
-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 'smallint unsigned zerofill f1 ) returns smallint unsigned zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(mediumint f1 ) returns mediumint
+CREATE FUNCTION fn1(f1 mediumint ) returns mediumint
return f1;
-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 'mediumint f1 ) returns mediumint
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(mediumint unsigned f1 ) returns mediumint unsigned
+CREATE FUNCTION fn1(f1 mediumint unsigned ) returns mediumint unsigned
return f1;
-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 'mediumint unsigned f1 ) returns mediumint unsigned
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(mediumint zerofill f1 ) returns mediumint zerofill
+CREATE FUNCTION fn1(f1 mediumint zerofill ) returns mediumint zerofill
return f1;
-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 'mediumint zerofill f1 ) returns mediumint zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(mediumint unsigned zerofill f1 ) returns mediumint unsigned zerofill
+CREATE FUNCTION fn1(f1 mediumint unsigned zerofill ) returns mediumint unsigned zerofill
return f1;
-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 'mediumint unsigned zerofill f1 ) returns mediumint unsigned zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(int f1 ) returns int
+CREATE FUNCTION fn1(f1 int ) returns int
return f1;
-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 'int f1 ) returns int
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(int unsigned f1 ) returns int unsigned
+CREATE FUNCTION fn1(f1 int unsigned ) returns int unsigned
return f1;
-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 'int unsigned f1 ) returns int unsigned
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(int zerofill f1 ) returns int zerofill
+CREATE FUNCTION fn1(f1 int1 unsigned ) returns int1 unsigned
return f1;
-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 'int zerofill f1 ) returns int zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(int unsigned zerofill f1 ) returns int unsigned zerofill
+CREATE FUNCTION fn1(f1 int2 unsigned ) returns int2 unsigned
return f1;
-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 'int unsigned zerofill f1 ) returns int unsigned zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(bigint f1 ) returns bigint
+CREATE FUNCTION fn1(f1 int3 unsigned ) returns int3 unsigned
return f1;
-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 'bigint f1 ) returns bigint
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(bigint unsigned f1 ) returns bigint unsigned
+CREATE FUNCTION fn1(f1 int4 unsigned ) returns int4 unsigned
return f1;
-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 'bigint unsigned f1 ) returns bigint unsigned
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(bigint zerofill f1 ) returns bigint zerofill
+CREATE FUNCTION fn1(f1 int8 unsigned ) returns int8 unsigned
return f1;
-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 'bigint zerofill f1 ) returns bigint zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(bigint unsigned zerofill f1 ) returns bigint unsigned zerofill
+CREATE FUNCTION fn1(f1 int zerofill ) returns int zerofill
return f1;
-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 'bigint unsigned zerofill f1 ) returns bigint unsigned zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(decimal f1 ) returns decimal
+CREATE FUNCTION fn1(f1 int unsigned zerofill ) returns int unsigned zerofill
return f1;
-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 'decimal f1 ) returns decimal
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(decimal unsigned f1 ) returns decimal unsigned
+CREATE FUNCTION fn1(f1 bigint ) returns bigint
return f1;
-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 'decimal unsigned f1 ) returns decimal unsigned
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(decimal zerofill f1 ) returns decimal zerofill
+CREATE FUNCTION fn1(f1 bigint unsigned ) returns bigint unsigned
return f1;
-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 'decimal zerofill f1 ) returns decimal zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(decimal unsigned zerofill f1 ) returns decimal unsigned zerofill
+CREATE FUNCTION fn1(f1 bigint zerofill ) returns bigint zerofill
return f1;
-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 'decimal unsigned zerofill f1 ) returns decimal unsigned zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(numeric f1 ) returns numeric
+CREATE FUNCTION fn1(f1 bigint unsigned zerofill ) returns bigint unsigned zerofill
return f1;
-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 'numeric f1 ) returns numeric
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(numeric unsigned f1 ) returns numeric unsigned
+CREATE FUNCTION fn1(f1 decimal ) returns decimal
return f1;
-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 'numeric unsigned f1 ) returns numeric unsigned
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(numeric zerofill f1 ) returns numeric zerofill
+CREATE FUNCTION fn1(f1 decimal unsigned ) returns decimal unsigned
return f1;
-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 'numeric zerofill f1 ) returns numeric zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(numeric unsigned zerofill f1 ) returns numeric unsigned zerofill
+CREATE FUNCTION fn1(f1 decimal zerofill ) returns decimal zerofill
return f1;
-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 'numeric unsigned zerofill f1 ) returns numeric unsigned zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(real f1 ) returns real
+CREATE FUNCTION fn1(f1 decimal unsigned zerofill ) returns decimal unsigned zerofill
return f1;
-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 'real f1 ) returns real
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(real unsigned f1 ) returns real unsigned
+CREATE FUNCTION fn1(f1 numeric ) returns numeric
return f1;
-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 'real unsigned f1 ) returns real unsigned
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(real zerofill f1 ) returns real zerofill
+CREATE FUNCTION fn1(f1 numeric unsigned ) returns numeric unsigned
return f1;
-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 'real zerofill f1 ) returns real zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(real unsigned zerofill f1 ) returns real unsigned zerofill
+CREATE FUNCTION fn1(f1 numeric zerofill ) returns numeric zerofill
return f1;
-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 'real unsigned zerofill f1 ) returns real unsigned zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(float f1 ) returns float
+CREATE FUNCTION fn1(f1 numeric unsigned zerofill ) returns numeric unsigned zerofill
return f1;
-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 'float f1 ) returns float
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(float unsigned f1 ) returns float unsigned
+CREATE FUNCTION fn1(f1 real ) returns real
return f1;
-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 'float unsigned f1 ) returns float unsigned
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(float zerofill f1 ) returns float zerofill
+CREATE FUNCTION fn1(f1 real unsigned ) returns real unsigned
return f1;
-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 'float zerofill f1 ) returns float zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(float unsigned zerofill f1 ) returns float unsigned zerofill
+CREATE FUNCTION fn1(f1 real zerofill ) returns real zerofill
return f1;
-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 'float unsigned zerofill f1 ) returns float unsigned zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(date f1 ) returns date
+CREATE FUNCTION fn1(f1 real unsigned zerofill ) returns real unsigned zerofill
return f1;
-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 'f1 ) returns date
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(time f1 ) returns time
+CREATE FUNCTION fn1(f1 float ) returns float
return f1;
-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 'f1 ) returns time
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(datetime f1 ) returns datetime
+CREATE FUNCTION fn1(f1 float unsigned ) returns float unsigned
return f1;
-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 'f1 ) returns datetime
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(timestamp f1 ) returns timestamp
+CREATE FUNCTION fn1(f1 float zerofill ) returns float zerofill
return f1;
-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 'f1 ) returns timestamp
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(year f1 ) returns year
+CREATE FUNCTION fn1(f1 float unsigned zerofill ) returns float unsigned zerofill
return f1;
-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 'f1 ) returns year
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(year(3) f1 ) returns year(3)
+CREATE FUNCTION fn1(f1 date ) returns date
+return f1;
+DROP FUNCTION IF EXISTS fn1;
+CREATE FUNCTION fn1(f1 time ) returns time
return f1;
-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 '(3) f1 ) returns year(3)
+DROP FUNCTION IF EXISTS fn1;
+CREATE FUNCTION fn1(f1 datetime ) returns datetime
+return f1;
+DROP FUNCTION IF EXISTS fn1;
+CREATE FUNCTION fn1(f1 timestamp ) returns timestamp
+return f1;
+DROP FUNCTION IF EXISTS fn1;
+CREATE FUNCTION fn1(f1 year ) returns year
+return f1;
+DROP FUNCTION IF EXISTS fn1;
+CREATE FUNCTION fn1(f1 year(f1 3) ) returns year(3)
+return f1;
+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 'f1 3) ) returns year(3)
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(year(4) f1 ) returns year(4)
+CREATE FUNCTION fn1(f1 year(f1 4) ) returns year(4)
return f1;
-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 '(4) f1 ) returns year(4)
+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 'f1 4) ) returns year(4)
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(enum("1enum", "2enum") f1 ) returns enum("1enum", "2enum")
+CREATE FUNCTION fn1(f1 enum(f1 "1enum", "2enum") ) returns enum("1enum", "2enum")
return f1;
-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 '("1enum", "2enum") f1 ) returns enum("1enum", "2enum")
+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 'f1 "1enum", "2enum") ) returns enum("1enum", "2enum")
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(set("1set", "2set") f1 ) returns set("1set", "2set")
+CREATE FUNCTION fn1(f1 set(f1 "1set", "2set") ) returns set("1set", "2set")
return f1;
-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("1set", "2set") f1 ) returns set("1set", "2set")
+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 'f1 "1set", "2set") ) returns set("1set", "2set")
return f1' at line 1
Testcase 4.1.16:
@@ -2564,15 +3404,15 @@ alter function sp1 sql security invoker comment 'this is a function';
alter procedure sp1 sql security definer;
alter function sp1 sql security definer;
show CREATE PROCEDURE sp1;
-Procedure sql_mode Create Procedure
-sp1 CREATE PROCEDURE `sp1`()
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp1 CREATE DEFINER=`root`@`localhost` PROCEDURE `sp1`()
COMMENT 'this is a procedure'
-set @x= 3
+set @x= 3 latin1 modified created
show CREATE FUNCTION sp1;
-Function sql_mode Create Function
-sp1 CREATE FUNCTION `sp1`() RETURNS int(11)
+Function sql_mode Create Function character_set_client collation_connection Database Collation
+sp1 CREATE DEFINER=`root`@`localhost` FUNCTION `sp1`() RETURNS int(11)
COMMENT 'this is a function'
-return 4
+return 4 latin1 modified created
USE db_storedproc;
DROP DATABASE db_storedproc_3122;
DROP FUNCTION db_storedproc.sp1;
@@ -2789,7 +3629,7 @@ SELECT count(*) into cnt from t2;
set @count = cnt;
SELECT @count;
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 'SELECT count(*) into cnt from t2;
+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 @count = cnt;
SELECT @count;
END' at line 2
@@ -2841,6 +3681,14 @@ Testcase ....:
--------------------------------------------------------------------------------
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
+accessible:BEGIN
+SELECT @x;
+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 'accessible:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
add:BEGIN
SELECT @x;
END//
@@ -2860,9 +3708,7 @@ CREATE PROCEDURE sp1()
alter:BEGIN
SELECT @x;
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 ':BEGIN
-SELECT @x;
-END' at line 2
+ERROR 0A000: ALTER VIEW is not allowed in stored procedures
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
analyze:BEGIN
@@ -2961,7 +3807,7 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
-CALL:BEGIN
+call:BEGIN
SELECT @x;
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 ':BEGIN
@@ -3033,11 +3879,6 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
-columns:BEGIN
-SELECT @x;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
condition:BEGIN
SELECT @x;
END//
@@ -3046,14 +3887,6 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
-connection:BEGIN
-SELECT @x;
-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 'connection:BEGIN
-SELECT @x;
-END' at line 2
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
constraint:BEGIN
SELECT @x;
END//
@@ -3382,15 +4215,26 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
-fields:BEGIN
+float:BEGIN
SELECT @x;
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 'float:BEGIN
+SELECT @x;
+END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
-float:BEGIN
+float4:BEGIN
SELECT @x;
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 'float:BEGIN
+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 'float4:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+float8:BEGIN
+SELECT @x;
+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 'float8:BEGIN
SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
@@ -3419,11 +4263,6 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
-found:BEGIN
-SELECT @x;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
from:BEGIN
SELECT @x;
END//
@@ -3440,11 +4279,6 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
-goto:BEGIN
-SELECT @x;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
grant:BEGIN
SELECT @x;
END//
@@ -3581,6 +4415,46 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
+int1:BEGIN
+SELECT @x;
+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 'int1:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+int2:BEGIN
+SELECT @x;
+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 'int2:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+int3:BEGIN
+SELECT @x;
+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 'int3:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+int4:BEGIN
+SELECT @x;
+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 'int4:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+int8:BEGIN
+SELECT @x;
+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 'int8:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
integer:BEGIN
SELECT @x;
END//
@@ -3693,6 +4567,14 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
+linear:BEGIN
+SELECT @x;
+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 'linear:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
lines:BEGIN
SELECT @x;
END//
@@ -3773,6 +4655,14 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
+master_ssl_verify_server_cert:BEGIN
+SELECT @x;
+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 'master_ssl_verify_server_cert:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
match:BEGIN
SELECT @x;
END//
@@ -3973,11 +4863,6 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
-privileges:BEGIN
-SELECT @x;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
procedure:BEGIN
SELECT @x;
END//
@@ -3994,6 +4879,14 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
+range:BEGIN
+SELECT @x;
+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 'range:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
read:BEGIN
SELECT @x;
END//
@@ -4010,6 +4903,22 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
+read_only:BEGIN
+SELECT @x;
+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 'read_only:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+read_write:BEGIN
+SELECT @x;
+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 'read_write:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
real:BEGIN
SELECT @x;
END//
@@ -4034,6 +4943,14 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
+release:BEGIN
+SELECT @x;
+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 ':BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
rename:BEGIN
SELECT @x;
END//
@@ -4178,14 +5095,6 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
-soname:BEGIN
-SELECT @x;
-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 'soname:BEGIN
-SELECT @x;
-END' at line 2
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
spatial:BEGIN
SELECT @x;
END//
@@ -4290,11 +5199,6 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
-tables:BEGIN
-SELECT @x;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
terminated:BEGIN
SELECT @x;
END//
@@ -4587,6 +5491,9 @@ END begin_label//
CALL sp1();
@v1 @v2
1 2
+Warnings:
+Warning 1265 Data truncated for column 'x' at row 1
+Warning 1265 Data truncated for column 'y' at row 1
DROP PROCEDURE sp1;
Testcase 4.2.7:
@@ -4621,6 +5528,9 @@ declare y char;
SELECT f1, f2 into x, y from t2 limit 1;
END//
CALL sp1();
+Warnings:
+Warning 1265 Data truncated for column 'x' at row 1
+Warning 1265 Data truncated for column 'y' at row 1
DROP PROCEDURE sp1;
Testcase 4.2.9:
@@ -4684,8 +5594,6 @@ Ensure that the variables, cursors, conditions, and handlers declared for
a stored procedure (with the declare statement) may only be properly defined
--------------------------------------------------------------------------------
DROP PROCEDURE IF EXISTS sp6;
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed: DECIMAL(255,255) is not rejected
CREATE PROCEDURE sp6( )
BEGIN
declare x char default 'a';
@@ -4703,9 +5611,9 @@ fetch cur1 into e;
SELECT x, y, z, a, b, c, d, e;
close cur1;
END//
+ERROR 42000: Too big scale 255 specified for column ''. Maximum is 30.
CALL sp6();
-x y z a b c d e
-a 1 1.1 value1 1200000000000 mediumtext 2005-02-02 12:12:12 a`
+ERROR 42000: PROCEDURE db_storedproc.sp6 does not exist
DROP PROCEDURE IF EXISTS sp6;
CREATE PROCEDURE sp6( )
BEGIN
@@ -5828,13 +6736,6 @@ declare continue handler for sqlstate '23000' set @x2 = 1;
declare x char;
END//
ERROR 42000: Variable or condition declaration after cursor or handler declaration
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
-BEGIN
-declare continue handler for sqlstate '23000' set @x2 = 1;
-declare x char;
-END//
-ERROR 42000: Variable or condition declaration after cursor or handler declaration
DROP PROCEDURE IF EXISTS sp6;
CREATE PROCEDURE sp6( )
BEGIN
@@ -5864,6 +6765,15 @@ Ensure that the declare statement can declare multiple variables both separately
and all at once from a variable list. (multiple declaration)
--------------------------------------------------------------------------------
DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
+DECLARE x1 CHAR(100) DEFAULT 'outer';
+BEGIN
+DECLARE x1 CHAR(100) DEFAULT x1;
+END;
+END//
+CALL sp1();
+DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
declare x, y, z char default null;
@@ -5988,7 +6898,11 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
--1 -1 -1
+000 000 000
+Warnings:
+Warning 1264 Out of range value for column 'x' at row 1
+Warning 1264 Out of range value for column 'y' at row 1
+Warning 1264 Out of range value for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -5997,7 +6911,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1 1 1
+001 001 001
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6024,7 +6938,11 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
--1 -1 -1
+00000 00000 00000
+Warnings:
+Warning 1264 Out of range value for column 'x' at row 1
+Warning 1264 Out of range value for column 'y' at row 1
+Warning 1264 Out of range value for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6033,7 +6951,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1 1 1
+00001 00001 00001
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6060,7 +6978,11 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
--1 -1 -1
+00000000 00000000 00000000
+Warnings:
+Warning 1264 Out of range value for column 'x' at row 1
+Warning 1264 Out of range value for column 'y' at row 1
+Warning 1264 Out of range value for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6069,7 +6991,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1 1 1
+00000001 00000001 00000001
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6096,7 +7018,11 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
--1 -1 -1
+0000000000 0000000000 0000000000
+Warnings:
+Warning 1264 Out of range value for column 'x' at row 1
+Warning 1264 Out of range value for column 'y' at row 1
+Warning 1264 Out of range value for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6105,7 +7031,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1 1 1
+0000000001 0000000001 0000000001
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6123,7 +7049,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
--1 -1 -1
+18446744073709551615 18446744073709551615 18446744073709551615
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6132,7 +7058,11 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
--1 -1 -1
+00000000000000000000 00000000000000000000 00000000000000000000
+Warnings:
+Warning 1264 Out of range value for column 'x' at row 1
+Warning 1264 Out of range value for column 'y' at row 1
+Warning 1264 Out of range value for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6141,7 +7071,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1 1 1
+00000000000000000001 00000000000000000001 00000000000000000001
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6150,18 +7080,24 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
--34028234660123456789012345678901234567 -34028234660123456789012345678901234567 -34028234660123456789012345678901234567
+-9999999999 -9999999999 -9999999999
+Warnings:
+Warning 1264 Out of range value for column 'x' at row 1
+Warning 1264 Out of range value for column 'y' at row 1
+Warning 1264 Out of range value for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
declare x, y, z decimal unsigned default 1.175494351e-38;
SELECT x, y, z;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed: default (10,0) for DECIMAL not checked
CALL sp1();
x y z
-0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351
+0 0 0
+Warnings:
+Note 1265 Data truncated for column 'x' at row 1
+Note 1265 Data truncated for column 'y' at row 1
+Note 1265 Data truncated for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6170,62 +7106,76 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
--34028234660123456789012345678901234567 -34028234660123456789012345678901234567 -34028234660123456789012345678901234567
+0000000000 0000000000 0000000000
+Warnings:
+Warning 1264 Out of range value for column 'x' at row 1
+Warning 1264 Out of range value for column 'y' at row 1
+Warning 1264 Out of range value for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
declare x, y, z decimal unsigned zerofill default 1.175494351e-38;
SELECT x, y, z;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed: default (10,0) for DECIMAL not checked
CALL sp1();
x y z
-0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351
+0000000000 0000000000 0000000000
+Warnings:
+Note 1265 Data truncated for column 'x' at row 1
+Note 1265 Data truncated for column 'y' at row 1
+Note 1265 Data truncated for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
declare x, y, z numeric default 1.175494351e-38;
SELECT x, y, z;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed: default (10,0) for DECIMAL not checked
CALL sp1();
x y z
-0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351
+0 0 0
+Warnings:
+Note 1265 Data truncated for column 'x' at row 1
+Note 1265 Data truncated for column 'y' at row 1
+Note 1265 Data truncated for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
declare x, y, z numeric unsigned default 1.175494351e-38;
SELECT x, y, z;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed: default (10,0) for DECIMAL not checked
CALL sp1();
x y z
-0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351
+0 0 0
+Warnings:
+Note 1265 Data truncated for column 'x' at row 1
+Note 1265 Data truncated for column 'y' at row 1
+Note 1265 Data truncated for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
declare x, y, z numeric zerofill default 1.175494351e-38;
SELECT x, y, z;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed: default (10,0) for DECIMAL not checked
CALL sp1();
x y z
-0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351
+0000000000 0000000000 0000000000
+Warnings:
+Note 1265 Data truncated for column 'x' at row 1
+Note 1265 Data truncated for column 'y' at row 1
+Note 1265 Data truncated for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
declare x, y, z numeric unsigned zerofill default 1.175494351e-38;
SELECT x, y, z;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed: default (10,0) for DECIMAL not checked
CALL sp1();
x y z
-0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351
+0000000000 0000000000 0000000000
+Warnings:
+Note 1265 Data truncated for column 'x' at row 1
+Note 1265 Data truncated for column 'y' at row 1
+Note 1265 Data truncated for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6252,7 +7202,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1.175494351e-38 1.175494351e-38 1.175494351e-38
+00000001.175494351e-38 00000001.175494351e-38 00000001.175494351e-38
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6261,7 +7211,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1.175494351e-38 1.175494351e-38 1.175494351e-38
+00000001.175494351e-38 00000001.175494351e-38 00000001.175494351e-38
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6270,7 +7220,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1.175494351e-38 1.175494351e-38 1.175494351e-38
+1.17549e-38 1.17549e-38 1.17549e-38
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6279,7 +7229,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1.175494351e-38 1.175494351e-38 1.175494351e-38
+1.17549e-38 1.17549e-38 1.17549e-38
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6288,7 +7238,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1.175494351e-38 1.175494351e-38 1.175494351e-38
+01.17549e-38 01.17549e-38 01.17549e-38
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6297,7 +7247,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1.175494351e-38 1.175494351e-38 1.175494351e-38
+01.17549e-38 01.17549e-38 01.17549e-38
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6333,7 +7283,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-20050202122012 20050202122012 20050202122012
+2005-02-02 12:20:12 2005-02-02 12:20:12 2005-02-02 12:20:12
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6419,6 +7369,13 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
+declare accessible char;
+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 'accessible char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
declare add char;
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 'add char;
@@ -6524,9 +7481,9 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
-declare CALL char;
+declare call char;
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 'CALL char;
+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 'call char;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
@@ -6587,11 +7544,6 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
-declare columns char;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
-BEGIN
declare condition char;
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 'condition char;
@@ -6599,13 +7551,6 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
-declare connection char;
-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 'connection char;
-END' at line 3
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
-BEGIN
declare constraint char;
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 'constraint char;
@@ -6893,14 +7838,23 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
-declare fields char;
+declare float char;
+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 'float char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
+declare float4 char;
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 'float4 char;
+END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
-declare float char;
+declare float8 char;
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 'float char;
+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 'float8 char;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
@@ -6926,11 +7880,6 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
-declare found char;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
-BEGIN
declare from char;
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 'from char;
@@ -6945,11 +7894,6 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
-declare goto char;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
-BEGIN
declare grant char;
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 'grant char;
@@ -7069,6 +8013,41 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
+declare int1 char;
+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 'int1 char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
+declare int2 char;
+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 'int2 char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
+declare int3 char;
+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 'int3 char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
+declare int4 char;
+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 'int4 char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
+declare int8 char;
+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 'int8 char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
declare integer char;
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 'integer char;
@@ -7167,6 +8146,13 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
+declare linear char;
+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 'linear char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
declare lines char;
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 'lines char;
@@ -7237,6 +8223,13 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
+declare master_ssl_verify_server_cert char;
+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 'master_ssl_verify_server_cert char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
declare match char;
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 'match char;
@@ -7412,11 +8405,6 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
-declare privileges char;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
-BEGIN
declare procedure char;
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 'procedure char;
@@ -7431,6 +8419,13 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
+declare range char;
+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 'range char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
declare read char;
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 'read char;
@@ -7445,6 +8440,18 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
+declare read_only char;
+END//
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
+declare read_write char;
+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 'read_write char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
declare real char;
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 'real char;
@@ -7466,6 +8473,13 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
+declare release char;
+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 'release char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
declare rename char;
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 'rename char;
@@ -7624,15 +8638,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1()
BEGIN
-declare soname char;
-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 'soname char;
-END' at line 3
-DROP PROCEDURE IF EXISTS sp1;
-Warnings:
-Note 1305 PROCEDURE sp1 does not exist
-CREATE PROCEDURE sp1()
-BEGIN
declare spatial char;
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 'spatial char;
@@ -7750,11 +8755,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1()
BEGIN
-declare tables char;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
-BEGIN
declare terminated char;
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 'terminated char;
@@ -7899,9 +8899,9 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1()
BEGIN
-declare USE char;
+declare use char;
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 'USE char;
+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 'use char;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
@@ -8150,6 +9150,16 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare accessible condition for sqlstate '02000';
+declare exit handler for add set @var2 = 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 'accessible condition for sqlstate '02000';
+declare exit handler for add set @var' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare add condition for sqlstate '02000';
declare exit handler for add set @var2 = 1;
END//
@@ -8306,10 +9316,10 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare CALL condition for sqlstate '02000';
+declare call condition for sqlstate '02000';
declare exit handler for CALL set @var2 = 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 'CALL condition for sqlstate '02000';
+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 'call condition for sqlstate '02000';
declare exit handler for CALL set @var2 = 1' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
@@ -8409,11 +9419,7 @@ BEGIN
declare connection condition for sqlstate '02000';
declare exit handler for connection set @var2 = 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 'connection condition for sqlstate '02000';
-declare exit handler for connection s' at line 3
DROP PROCEDURE IF EXISTS sp1;
-Warnings:
-Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
declare constraint condition for sqlstate '02000';
@@ -8829,12 +9835,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare fields condition for sqlstate '02000';
-declare exit handler for fields set @var2 = 1;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1( )
-BEGIN
declare float condition for sqlstate '02000';
declare exit handler for float set @var2 = 1;
END//
@@ -8845,6 +9845,26 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare float4 condition for sqlstate '02000';
+declare exit handler for add set @var2 = 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 'float4 condition for sqlstate '02000';
+declare exit handler for add set @var2 = ' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare float8 condition for sqlstate '02000';
+declare exit handler for add set @var2 = 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 'float8 condition for sqlstate '02000';
+declare exit handler for add set @var2 = ' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare for condition for sqlstate '02000';
declare exit handler for for set @var2 = 1;
END//
@@ -8876,12 +9896,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare found condition for sqlstate '02000';
-declare exit handler for found set @var2 = 1;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1( )
-BEGIN
declare from condition for sqlstate '02000';
declare exit handler for from set @var2 = 1;
END//
@@ -8902,12 +9916,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare goto condition for sqlstate '02000';
-declare exit handler for goto set @var2 = 1;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1( )
-BEGIN
declare grant condition for sqlstate '02000';
declare exit handler for grant set @var2 = 1;
END//
@@ -9081,6 +10089,56 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare int1 condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'int1 condition for sqlstate '02000';
+declare exit handler for int set @var2 = 1;' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare int2 condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'int2 condition for sqlstate '02000';
+declare exit handler for int set @var2 = 1;' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare int3 condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'int3 condition for sqlstate '02000';
+declare exit handler for int set @var2 = 1;' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare int4 condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'int4 condition for sqlstate '02000';
+declare exit handler for int set @var2 = 1;' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare int8 condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'int8 condition for sqlstate '02000';
+declare exit handler for int set @var2 = 1;' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare integer condition for sqlstate '02000';
declare exit handler for integer set @var2 = 1;
END//
@@ -9223,6 +10281,16 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare linear condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'linear condition for sqlstate '02000';
+declare exit handler for int set @var2 = ' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare lines condition for sqlstate '02000';
declare exit handler for lines set @var2 = 1;
END//
@@ -9323,6 +10391,16 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare master_ssl_verify_server_cert condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'master_ssl_verify_server_cert condition for sqlstate '02000';
+declare exit handl' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare match condition for sqlstate '02000';
declare exit handler for match set @var2 = 1;
END//
@@ -9578,12 +10656,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare privileges condition for sqlstate '02000';
-declare exit handler for privileges set @var2 = 1;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1( )
-BEGIN
declare procedure condition for sqlstate '02000';
declare exit handler for procedure set @var2 = 1;
END//
@@ -9604,6 +10676,16 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare range condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'range condition for sqlstate '02000';
+declare exit handler for int set @var2 = 1' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare read condition for sqlstate '02000';
declare exit handler for read set @var2 = 1;
END//
@@ -9624,6 +10706,26 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare read_only condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'int set @var2 = 1;
+END' at line 4
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare read_write condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'read_write condition for sqlstate '02000';
+declare exit handler for int set @var' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare real condition for sqlstate '02000';
declare exit handler for real set @var2 = 1;
END//
@@ -9654,6 +10756,16 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare release condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'release condition for sqlstate '02000';
+declare exit handler for int set @var2 =' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare rename condition for sqlstate '02000';
declare exit handler for rename set @var2 = 1;
END//
@@ -9774,10 +10886,10 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare SELECT condition for sqlstate '02000';
+declare select condition for sqlstate '02000';
declare exit handler for SELECT set @var2 = 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 'SELECT condition for sqlstate '02000';
+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 'select condition for sqlstate '02000';
declare exit handler for SELECT set @var2' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
@@ -9835,16 +10947,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare soname condition for sqlstate '02000';
-declare exit handler for soname set @var2 = 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 'soname condition for sqlstate '02000';
-declare exit handler for soname set @var2' at line 3
-DROP PROCEDURE IF EXISTS sp1;
-Warnings:
-Note 1305 PROCEDURE sp1 does not exist
-CREATE PROCEDURE sp1( )
-BEGIN
declare spatial condition for sqlstate '02000';
declare exit handler for spatial set @var2 = 1;
END//
@@ -9977,12 +11079,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare tables condition for sqlstate '02000';
-declare exit handler for tables set @var2 = 1;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1( )
-BEGIN
declare terminated condition for sqlstate '02000';
declare exit handler for terminated set @var2 = 1;
END//
@@ -10144,10 +11240,10 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare USE condition for sqlstate '02000';
+declare use condition for sqlstate '02000';
declare exit handler for USE set @var2 = 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 'USE condition for sqlstate '02000';
+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 'use condition for sqlstate '02000';
declare exit handler for USE set @var2 = 1;
' at line 3
DROP PROCEDURE IF EXISTS sp1;
@@ -10409,6 +11505,15 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare accessible handler for sqlstate '02000' set @var2 = 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 'accessible handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare add handler for sqlstate '02000' set @var2 = 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 'add handler for sqlstate '02000' set @var2 = 1;
@@ -10544,9 +11649,9 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare CALL handler for sqlstate '02000' set @var2 = 1;
+declare call handler for sqlstate '02000' set @var2 = 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 'CALL handler for sqlstate '02000' set @var2 = 1;
+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 'call handler for sqlstate '02000' set @var2 = 1;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
@@ -10625,15 +11730,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare columns handler for sqlstate '02000' set @var2 = 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 'handler for sqlstate '02000' set @var2 = 1;
-END' at line 3
-DROP PROCEDURE IF EXISTS sp1;
-Warnings:
-Note 1305 PROCEDURE sp1 does not exist
-CREATE PROCEDURE sp1( )
-BEGIN
declare condition handler for sqlstate '02000' set @var2 = 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 'condition handler for sqlstate '02000' set @var2 = 1;
@@ -10643,22 +11739,18 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare connection handler for sqlstate '02000' set @var2 = 1;
+declare constraint handler for sqlstate '02000' set @var2 = 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 'connection handler for sqlstate '02000' set @var2 = 1;
+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 'constraint handler for sqlstate '02000' set @var2 = 1;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare constraint handler for sqlstate '02000' set @var2 = 1;
+declare continue handler for sqlstate '02000' set @var2 = 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 'constraint handler for sqlstate '02000' set @var2 = 1;
-END' at line 3
DROP PROCEDURE IF EXISTS sp1;
-Warnings:
-Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
declare convert handler for sqlstate '02000' set @var2 = 1;
@@ -10976,6 +12068,11 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare exit handler for sqlstate '02000' set @var2 = 1;
+END//
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1( )
+BEGIN
declare explain handler for sqlstate '02000' set @var2 = 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 'explain handler for sqlstate '02000' set @var2 = 1;
@@ -11003,54 +12100,54 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare fields handler for sqlstate '02000' set @var2 = 1;
+declare float handler for sqlstate '02000' set @var2 = 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 'handler for sqlstate '02000' set @var2 = 1;
+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 'float handler for sqlstate '02000' set @var2 = 1;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare float handler for sqlstate '02000' set @var2 = 1;
+declare float4 handler for sqlstate '02000' set @var2 = 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 'float handler for sqlstate '02000' set @var2 = 1;
+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 'float4 handler for sqlstate '02000' set @var2 = 1;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare for handler for sqlstate '02000' set @var2 = 1;
+declare float8 handler for sqlstate '02000' set @var2 = 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 'for handler for sqlstate '02000' set @var2 = 1;
+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 'float8 handler for sqlstate '02000' set @var2 = 1;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare force handler for sqlstate '02000' set @var2 = 1;
+declare for handler for sqlstate '02000' set @var2 = 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 'force handler for sqlstate '02000' set @var2 = 1;
+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 'for handler for sqlstate '02000' set @var2 = 1;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare foreign handler for sqlstate '02000' set @var2 = 1;
+declare force handler for sqlstate '02000' set @var2 = 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 'foreign handler for sqlstate '02000' set @var2 = 1;
+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 'force handler for sqlstate '02000' set @var2 = 1;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare found handler for sqlstate '02000' set @var2 = 1;
+declare foreign handler for sqlstate '02000' set @var2 = 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 'handler for sqlstate '02000' set @var2 = 1;
+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 'foreign handler for sqlstate '02000' set @var2 = 1;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
@@ -11075,15 +12172,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare goto handler for sqlstate '02000' set @var2 = 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 'handler for sqlstate '02000' set @var2 = 1;
-END' at line 3
-DROP PROCEDURE IF EXISTS sp1;
-Warnings:
-Note 1305 PROCEDURE sp1 does not exist
-CREATE PROCEDURE sp1( )
-BEGIN
declare grant handler for sqlstate '02000' set @var2 = 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 'grant handler for sqlstate '02000' set @var2 = 1;
@@ -11237,6 +12325,51 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare int1 handler for sqlstate '02000' set @var2 = 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 'int1 handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare int2 handler for sqlstate '02000' set @var2 = 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 'int2 handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare int3 handler for sqlstate '02000' set @var2 = 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 'int3 handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare int4 handler for sqlstate '02000' set @var2 = 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 'int4 handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare int8 handler for sqlstate '02000' set @var2 = 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 'int8 handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare integer handler for sqlstate '02000' set @var2 = 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 'integer handler for sqlstate '02000' set @var2 = 1;
@@ -11363,6 +12496,15 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare linear handler for sqlstate '02000' set @var2 = 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 'linear handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare lines handler for sqlstate '02000' set @var2 = 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 'lines handler for sqlstate '02000' set @var2 = 1;
@@ -11453,6 +12595,15 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare master_ssl_verify_server_cert handler for sqlstate '02000' set @var2 = 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 'master_ssl_verify_server_cert handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare match handler for sqlstate '02000' set @var2 = 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 'match handler for sqlstate '02000' set @var2 = 1;
@@ -11705,6 +12856,15 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare range handler for sqlstate '02000' set @var2 = 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 'range handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare read handler for sqlstate '02000' set @var2 = 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 'read handler for sqlstate '02000' set @var2 = 1;
@@ -11723,6 +12883,24 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare read_only handler for sqlstate '02000' set @var2 = 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 'handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare read_write handler for sqlstate '02000' set @var2 = 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 'read_write handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare real handler for sqlstate '02000' set @var2 = 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 'real handler for sqlstate '02000' set @var2 = 1;
@@ -11750,6 +12928,15 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare release handler for sqlstate '02000' set @var2 = 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 'release handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare rename handler for sqlstate '02000' set @var2 = 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 'rename handler for sqlstate '02000' set @var2 = 1;
@@ -11858,9 +13045,9 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare SELECT handler for sqlstate '02000' set @var2 = 1;
+declare select handler for sqlstate '02000' set @var2 = 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 'SELECT handler for sqlstate '02000' set @var2 = 1;
+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 'select handler for sqlstate '02000' set @var2 = 1;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
@@ -11912,15 +13099,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare soname handler for sqlstate '02000' set @var2 = 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 'soname handler for sqlstate '02000' set @var2 = 1;
-END' at line 3
-DROP PROCEDURE IF EXISTS sp1;
-Warnings:
-Note 1305 PROCEDURE sp1 does not exist
-CREATE PROCEDURE sp1( )
-BEGIN
declare spatial handler for sqlstate '02000' set @var2 = 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 'spatial handler for sqlstate '02000' set @var2 = 1;
@@ -12038,15 +13216,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare tables handler for sqlstate '02000' set @var2 = 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 'handler for sqlstate '02000' set @var2 = 1;
-END' at line 3
-DROP PROCEDURE IF EXISTS sp1;
-Warnings:
-Note 1305 PROCEDURE sp1 does not exist
-CREATE PROCEDURE sp1( )
-BEGIN
declare terminated handler for sqlstate '02000' set @var2 = 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 'terminated handler for sqlstate '02000' set @var2 = 1;
@@ -12191,9 +13360,9 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare USE handler for sqlstate '02000' set @var2 = 1;
+declare use handler for sqlstate '02000' set @var2 = 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 'USE handler for sqlstate '02000' set @var2 = 1;
+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 'use handler for sqlstate '02000' set @var2 = 1;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
@@ -12384,10 +13553,13 @@ set @v2 = y;
END//
CALL sp1();
x y @x
-NULL abaa 3
+NULL a 3
+Warnings:
+Warning 1265 Data truncated for column 'y' at row 3
+Warning 1265 Data truncated for column 'y' at row 1
SELECT @v1, @v2;
@v1 @v2
-4 a`
+4 a
DROP PROCEDURE sp1;
Testcase 4.2.28:
@@ -12454,7 +13626,7 @@ CALL sp1();
@xx
0
Warnings:
-Warning 1292 Truncated incorrect INTEGER value: 'asd'
+Warning 1366 Incorrect integer value: 'asd' for column 'xx' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12481,9 +13653,11 @@ set xx = 'temp';
set @xx = xx;
END//
CALL sp1();
+Warnings:
+Warning 1265 Data truncated for column 'xx' at row 1
SELECT @xx;
@xx
-temp
+t
DROP PROCEDURE sp1;
Testcase 4.2.31 - b:
@@ -12501,7 +13675,7 @@ CALL sp1();
xx
0
Warnings:
-Warning 1292 Truncated incorrect DOUBLE value: 'asd'
+Warning 1265 Data truncated for column 'xx' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12527,7 +13701,9 @@ SELECT xx;
END//
CALL sp1();
xx
-asd
+0000-00-00 00:00:00
+Warnings:
+Warning 1264 Out of range value for column 'xx' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12571,7 +13747,7 @@ CALL sp1();
xx
0
Warnings:
-Warning 1292 Truncated incorrect INTEGER value: 'asd'
+Warning 1366 Incorrect integer value: 'asd' for column 'xx' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12602,6 +13778,8 @@ declare x char ascii;
SELECT f1 into x from t2 limit 1;
END//
CALL sp1();
+Warnings:
+Warning 1265 Data truncated for column 'x' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12665,6 +13843,8 @@ declare x binary;
SELECT f1 into x from t2 limit 1;
END//
CALL sp1();
+Warnings:
+Warning 1265 Data truncated for column 'x' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12812,8 +13992,6 @@ declare x decimal;
SELECT f1 into x from t2 limit 1;
END//
CALL sp1();
-Warnings:
-Error 1366 Incorrect decimal value: '' for column '' at row -1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12821,8 +13999,6 @@ declare x decimal unsigned;
SELECT f1 into x from t2 limit 1;
END//
CALL sp1();
-Warnings:
-Error 1366 Incorrect decimal value: '' for column '' at row -1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12830,8 +14006,6 @@ declare x decimal zerofill;
SELECT f1 into x from t2 limit 1;
END//
CALL sp1();
-Warnings:
-Error 1366 Incorrect decimal value: '' for column '' at row -1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12839,8 +14013,6 @@ declare x decimal unsigned zerofill;
SELECT f1 into x from t2 limit 1;
END//
CALL sp1();
-Warnings:
-Error 1366 Incorrect decimal value: '' for column '' at row -1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12848,8 +14020,6 @@ declare x numeric;
SELECT f1 into x from t2 limit 1;
END//
CALL sp1();
-Warnings:
-Error 1366 Incorrect decimal value: '' for column '' at row -1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12857,8 +14027,6 @@ declare x numeric unsigned;
SELECT f1 into x from t2 limit 1;
END//
CALL sp1();
-Warnings:
-Error 1366 Incorrect decimal value: '' for column '' at row -1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12866,8 +14034,6 @@ declare x numeric zerofill;
SELECT f1 into x from t2 limit 1;
END//
CALL sp1();
-Warnings:
-Error 1366 Incorrect decimal value: '' for column '' at row -1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12875,8 +14041,6 @@ declare x numeric unsigned zerofill;
SELECT f1 into x from t2 limit 1;
END//
CALL sp1();
-Warnings:
-Error 1366 Incorrect decimal value: '' for column '' at row -1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -13254,7 +14418,7 @@ declare continue handler for sqlstate '02000' set done = 1;
BEGIN
open cur1;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newlf1, newf3, newsal;
set count = count - 1;
END while;
@@ -13279,7 +14443,7 @@ declare continue handler for sqlstate '02000' set done = 1;
BEGIN
open cur1;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newlf1, newf3, newsal;
set count = count - 1;
END while;
@@ -13306,7 +14470,7 @@ declare continue handler for sqlstate '02000' set done = 1;
BEGIN
open cur1;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
set count = count - 1;
END while;
@@ -13330,7 +14494,7 @@ open cur1;
BEGIN
open cur1;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2, newf3, newf4;
set count = count - 1;
END while;
@@ -13358,7 +14522,7 @@ BEGIN
open cur1;
open cur1;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
set count = count - 1;
END while;
@@ -13388,7 +14552,7 @@ declare continue handler for sqlstate '02000' set done = 1;
BEGIN
open cur2;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
set count = count - 1;
END while;
@@ -13416,7 +14580,7 @@ declare cur1 cursor for SELECT f1, f2, f4, f5 from t2 limit 20, 10;
declare continue handler for sqlstate '02000' set done = 1;
BEGIN
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
set count = count - 1;
END while;
@@ -13430,7 +14594,7 @@ DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
declare done int default 0;
-declare count integer default 0;
+declare count integer default 10;
declare newf1 char(20);
declare newf2 char(20);
declare newf3 char(20);
@@ -13441,7 +14605,7 @@ open cur1;
BEGIN
declare cur1 cursor for SELECT f1, f2, f3, f4 from t2;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2, newf3, newf4;
set count = count - 1;
END while;
@@ -13473,7 +14637,7 @@ BEGIN
open cur1;
close cur1;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
set count = count - 1;
END while;
@@ -13485,7 +14649,7 @@ DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
declare done int default 0;
-declare count integer default 0;
+declare count integer default 20;
declare newf1 char(20);
declare newf2 char(20);
declare newf3 char(20);
@@ -13514,13 +14678,13 @@ BEGIN
declare done int default 0;
declare count integer default 20;
declare newf2 char(20);
-declare newf1 date;
+declare newf1 int1;
declare cur1 cursor for SELECT f1, f3 from t2 limit 20, 10;
declare continue handler for sqlstate '02000' set done = 1;
BEGIN
open cur1;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2;
set @x = newf1;
set @y = newf2;
@@ -13590,7 +14754,7 @@ BEGIN
close cur1;
open cur1;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
set count = count - 1;
END while;
@@ -13643,7 +14807,7 @@ fetch cur1 into newf1, newf2, newf4, newf3;
END;
END//
CALL sp1();
-ERROR 02000: No data to FETCH
+ERROR 02000: No data - zero rows fetched, selected, or processed
DROP PROCEDURE sp1;
Testcase 4.2.65:
@@ -13669,7 +14833,7 @@ commit;
END;
END//
CALL sp1();
-ERROR 02000: No data to FETCH
+ERROR 02000: No data - zero rows fetched, selected, or processed
DROP PROCEDURE sp1;
Testcase 4.2.66:
@@ -13690,7 +14854,7 @@ declare continue handler for sqlstate '02000' set done = 1;
BEGIN
open cur1;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
set count = count - 1;
END while;
@@ -13719,12 +14883,13 @@ declare cur1 cursor for SELECT f1, f2, f4, f5 from t2 limit 20, 10;
declare continue handler for sqlstate '02000' set done = 1;
BEGIN
open cur1;
-set count = count - 1;
-while count <> 0 do
+# set count = count - 1;
+# while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
-set count = count - 1;
-END while;
+# set count = count - 1;
+# END while;
END;
+fetch cur1 into newf1, newf2, newf4, newf3;
END//
CALL sp1();
DROP PROCEDURE sp1;
@@ -13756,7 +14921,7 @@ BEGIN
set count = 10;
BEGIN
open cur2;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
set count = count - 1;
END while;
@@ -13765,7 +14930,8 @@ insert into temp1 values(newf1, newf2, newf4, newf3);
close cur1;
END;
BEGIN
-while count <> 0 do
+set count = 10;
+while count > 0 do
fetch cur2 into newf21, newf22, newf24, newf23;
set count = count - 1;
END while;
@@ -13774,9 +14940,9 @@ insert into temp2 values(newf21, newf22, newf24, newf23);
close cur2;
END//
CALL sp1();
-SELECT * from temp1;
-f1 f2 f3 f4
-agaaaaaaa agaaaaaaa -4993 agaaaaaaa
+SELECT count(*) from temp1;
+count(*)
+1
SELECT * from temp2;
f1 f2 f3 f4
NULL NULL NULL NULL
@@ -14023,7 +15189,7 @@ delete from res_t3_itisalongname_1381742_itsaverylongname_1381742;
END case;
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 'when 'delete' then
-delete from res_t3_itisalongname_1381742_itsaverylongname_13' at line 10
+delete from res_t3_itisalongname_1381742_itsaverylongname_13' at line 11
DROP PROCEDURE IF EXISTS sp3;
CREATE PROCEDURE sp3( action char(20) )
BEGIN
@@ -14041,8 +15207,9 @@ label2: while count < 10 do
BEGIN
insert into res_t3_itisalongname_1381742_itsaverylongname_1381742
values('xxxxxxxxxxxxxxxxxxx', '1231230981(*&(*&)(*&(', count);
-if done=1 then
-set count=10;
+set count = count + 1;
+if count= 10 then
+set done=1;
END if;
END;
END while label2;
@@ -14056,6 +15223,19 @@ END if;
END loop label1;
SELECT count, done;
END//
+CALL sp3('insert');
+count done
+10 1
+Warnings:
+Warning 1265 Data truncated for column 'name' at row 1
+Warning 1265 Data truncated for column 'name' at row 2
+Warning 1265 Data truncated for column 'name' at row 3
+Warning 1265 Data truncated for column 'name' at row 4
+Warning 1265 Data truncated for column 'name' at row 5
+Warning 1265 Data truncated for column 'name' at row 6
+Warning 1265 Data truncated for column 'name' at row 7
+Warning 1265 Data truncated for column 'name' at row 8
+Warning 1265 Data truncated for column 'name' at row 9
DROP PROCEDURE sp3;
drop table res_t3_itisalongname_1381742_itsaverylongname_1381742;
@@ -14330,11 +15510,14 @@ CREATE PROCEDURE sp6()
BEGIN
declare count1 integer default 1;
label1: repeat
-set count1 = count1;
+set count1 = count1-1;
until count1 < 0
END repeat label1;
SELECT count1;
END//
+CALL sp6();
+count1
+-1
DROP PROCEDURE sp6;
Testcase 4.3.7:
@@ -14403,7 +15586,7 @@ do v1 > 0 while
set v1 = v1 - 1;
END while;
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 'do v1 > 0 while
+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
set v1 = v1 - 1;
END while;
END' at line 4
@@ -14606,7 +15789,7 @@ until count1 < 3
END repeat label1;
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 'label1;
-END' at line 7
+END' at line 8
Testcase 4.3.21:
--------------------------------------------------------------------------------
@@ -14789,15 +15972,15 @@ insert into t43 values('abcde', 'a!@#$%^&*(');
CREATE PROCEDURE d1.sp4()
SELECT * from d1.t43;
SELECT * from mysql.proc where specific_name = 'sp4';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
-d1 sp4 PROCEDURE sp4 SQL CONTAINS_SQL NO DEFINER SELECT * from d1.t43 root@localhost modified created
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
+d1 sp4 PROCEDURE sp4 SQL CONTAINS_SQL NO DEFINER SELECT * from d1.t43 root@localhost modified created latin1 latin1_swedish_ci latin1_swedish_ci SELECT * from d1.t43
USE db_storedproc;
DROP DATABASE d1;
CREATE DATABASE d1;
USE d1;
create table t44(a char(5), b char(10));
SELECT * from mysql.proc where specific_name = 'sp4';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
USE db_storedproc;
DROP DATABASE d1;
@@ -14839,8 +16022,8 @@ CREATE PROCEDURE sp8 ( n char(20) ) sql security definer comment 'initial'
USE d2;
alter procedure d1.sp8 sql security definer comment 'updated';
SELECT * from mysql.proc where specific_name='sp8' and db='d1';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
-d1 sp8 PROCEDURE sp8 SQL CONTAINS_SQL NO DEFINER n char(20) SELECT * from t1 where t1.f1 = n root@localhost modified created updated
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
+d1 sp8 PROCEDURE sp8 SQL CONTAINS_SQL NO DEFINER n char(20) SELECT * from t1 where t1.f1 = n root@localhost modified created updated latin1 latin1_swedish_ci latin1_swedish_ci SELECT * from t1 where t1.f1 = n
Testcase 4.4.9:
--------------------------------------------------------------------------------
@@ -14856,12 +16039,16 @@ END//
USE d2;
alter function d1.fn2 sql security definer comment 'updated';
SELECT * from mysql.proc where specific_name='fn2' and db='d1';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
d1 fn2 FUNCTION fn2 SQL CONTAINS_SQL NO DEFINER n int int(11) BEGIN
declare a int;
set a = 0.9 * n;
return a;
-END root@localhost modified created updated
+END root@localhost modified created updated latin1 latin1_swedish_ci latin1_swedish_ci BEGIN
+declare a int;
+set a = 0.9 * n;
+return a;
+END
Testcase 4.4.10:
--------------------------------------------------------------------------------
@@ -14871,7 +16058,7 @@ SELECT * from t1 where t1.f1 = n;
USE d2;
DROP PROCEDURE d1.sp9;
SELECT * from mysql.proc where specific_name='sp9' and db='d1';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
Testcase 4.4.11:
--------------------------------------------------------------------------------
@@ -14885,7 +16072,7 @@ END//
USE d2;
DROP FUNCTION d1.fn3;
SELECT * from mysql.proc where specific_name='fn3' and db='d1';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
USE db_storedproc;
DROP DATABASE d1;
DROP DATABASE d2;
@@ -14893,19 +16080,6 @@ DROP DATABASE d2;
Section 3.1.5 - Parameter use checks:
Functions with all data types
--------------------------------------------------------------------------------
-SELECT 1 as 'bug_dec_num';
-bug_dec_num
-1
-
-.
-FIXME: There are differences with datatypes DECIMAL and NUMERIC if large
-FIXME: exponent values are used. The diffs are shown only on some machines like
-FIXME: AIX52 and HPUX11. Until this has been solved we use numbers that
-FIXME: *should* be equal to the exponent representation but have no exponents
-FIXME: and use the specified count of *0*s instead.
-FIXME: In the source file these tests are marked with the comment hpux11
-.
---------------------------------------------------------------------------------
DROP DATABASE IF EXISTS d1;
CREATE DATABASE d1;
USE d1;
@@ -14926,7 +16100,7 @@ return f1;
END//
SELECT fn2(1.84e+19);
fn2(1.84e+19)
-0
+18400000000000000000
DROP FUNCTION IF EXISTS fn3;
CREATE FUNCTION fn3( f1 bigint unsigned zerofill) returns bigint unsigned zerofill
BEGIN
@@ -14945,6 +16119,8 @@ END//
SELECT fn4(-9.22e+15);
fn4(-9.22e+15)
0
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn5;
CREATE FUNCTION fn5( f1 decimal) returns decimal
BEGIN
@@ -14972,6 +16148,10 @@ END//
SELECT fn7(99999999999);
fn7(99999999999)
9999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn8;
CREATE FUNCTION fn8( f1 decimal (0) unsigned zerofill) returns decimal (0) unsigned zerofill
BEGIN
@@ -14980,7 +16160,9 @@ return f1;
END//
SELECT fn8(999999999);
fn8(999999999)
-0999999999
+1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn9;
CREATE FUNCTION fn9( f1 decimal (0) zerofill) returns decimal (0) zerofill
BEGIN
@@ -14989,7 +16171,10 @@ return f1;
END//
SELECT fn9(-1.00e+09);
fn9(-1.00e+09)
-0000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn10;
CREATE FUNCTION fn10( f1 decimal (0, 0)) returns decimal (0, 0)
BEGIN
@@ -15008,6 +16193,10 @@ END//
SELECT fn11(99999999999);
fn11(99999999999)
9999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn12;
CREATE FUNCTION fn12( f1 decimal (0, 0) unsigned zerofill) returns decimal (0, 0) unsigned zerofill
BEGIN
@@ -15016,7 +16205,9 @@ return f1;
END//
SELECT fn12(999999999);
fn12(999999999)
-0999999999
+1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn13;
CREATE FUNCTION fn13( f1 decimal (0, 0) zerofill) returns decimal (0, 0) zerofill
BEGIN
@@ -15025,7 +16216,10 @@ return f1;
END//
SELECT fn13(-1.00e+09);
fn13(-1.00e+09)
-0000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn14;
CREATE FUNCTION fn14( f1 decimal (63, 30)) returns decimal (63, 30)
BEGIN
@@ -15061,7 +16255,10 @@ return f1;
END//
SELECT fn17(-1.00e+21);
fn17(-1.00e+21)
-000000000000000000000000000000000.000000000000000000000000000000
+000000000000000000000000000000010.000000000000000000000000000000
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn18_d;
CREATE FUNCTION fn18_d( f1 decimal (64)) returns decimal (64)
BEGIN
@@ -15097,7 +16294,10 @@ return f1;
END//
SELECT fn21_d_z(1.00e+00);
fn21_d_z(1.00e+00)
-0000000000000000000000000000000000000000000000000000000000000001
+0000000000000000000000000000000000000000000000000000000000000010
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn22;
CREATE FUNCTION fn22( f1 decimal unsigned) returns decimal unsigned
BEGIN
@@ -15106,7 +16306,10 @@ return f1;
END//
SELECT fn22(1.00e+00);
fn22(1.00e+00)
-1
+10
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn23;
CREATE FUNCTION fn23( f1 decimal unsigned zerofill) returns decimal unsigned zerofill
BEGIN
@@ -15115,7 +16318,10 @@ return f1;
END//
SELECT fn23(1.00e+00);
fn23(1.00e+00)
-0000000001
+0000000010
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn24;
CREATE FUNCTION fn24( f1 decimal zerofill) returns decimal zerofill
BEGIN
@@ -15124,7 +16330,10 @@ return f1;
END//
SELECT fn24(-1.00e+09);
fn24(-1.00e+09)
-0000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn25;
CREATE FUNCTION fn25( f1 double) returns double
BEGIN
@@ -15142,7 +16351,9 @@ return f1;
END//
SELECT fn26(1.00e+00);
fn26(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn27;
CREATE FUNCTION fn27( f1 double unsigned zerofill) returns double unsigned zerofill
BEGIN
@@ -15151,7 +16362,9 @@ return f1;
END//
SELECT fn27(1.00e+00);
fn27(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn28;
CREATE FUNCTION fn28( f1 double zerofill) returns double zerofill
BEGIN
@@ -15160,7 +16373,9 @@ return f1;
END//
SELECT fn28(1.00e+00);
fn28(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn29;
CREATE FUNCTION fn29( f1 float) returns float
BEGIN
@@ -15178,7 +16393,9 @@ return f1;
END//
SELECT fn30(1.00e+00);
fn30(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn31;
CREATE FUNCTION fn31( f1 float unsigned zerofill) returns float unsigned zerofill
BEGIN
@@ -15187,7 +16404,9 @@ return f1;
END//
SELECT fn31(1.00e+00);
fn31(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn32;
CREATE FUNCTION fn32( f1 float zerofill) returns float zerofill
BEGIN
@@ -15196,7 +16415,9 @@ return f1;
END//
SELECT fn32(1.00e+00);
fn32(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn33;
CREATE FUNCTION fn33( f1 float(0)) returns float(0)
BEGIN
@@ -15214,7 +16435,9 @@ return f1;
END//
SELECT fn34(1.00e+00);
fn34(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn35;
CREATE FUNCTION fn35( f1 float(0) unsigned zerofill) returns float(0) unsigned zerofill
BEGIN
@@ -15223,7 +16446,9 @@ return f1;
END//
SELECT fn35(1.00e+00);
fn35(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn36;
CREATE FUNCTION fn36( f1 float(0) zerofill) returns float(0) zerofill
BEGIN
@@ -15232,7 +16457,9 @@ return f1;
END//
SELECT fn36(1.00e+00);
fn36(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn37;
CREATE FUNCTION fn37( f1 float(23)) returns float(23)
BEGIN
@@ -15250,7 +16477,9 @@ return f1;
END//
SELECT fn38(1.00e+00);
fn38(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn39;
CREATE FUNCTION fn39( f1 float(23) unsigned zerofill) returns float(23) unsigned zerofill
BEGIN
@@ -15259,7 +16488,9 @@ return f1;
END//
SELECT fn39(1.00e+00);
fn39(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn40;
CREATE FUNCTION fn40( f1 float(23) zerofill) returns float(23) zerofill
BEGIN
@@ -15268,7 +16499,9 @@ return f1;
END//
SELECT fn40(1.00e+00);
fn40(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn41;
CREATE FUNCTION fn41( f1 float(24)) returns float(24)
BEGIN
@@ -15286,7 +16519,9 @@ return f1;
END//
SELECT fn42(1.00e+00);
fn42(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn43;
CREATE FUNCTION fn43( f1 float(24) unsigned zerofill) returns float(24) unsigned zerofill
BEGIN
@@ -15295,7 +16530,9 @@ return f1;
END//
SELECT fn43(1.00e+00);
fn43(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn44;
CREATE FUNCTION fn44( f1 float(24) zerofill) returns float(24) zerofill
BEGIN
@@ -15304,7 +16541,9 @@ return f1;
END//
SELECT fn44(1.00e+00);
fn44(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn45;
CREATE FUNCTION fn45( f1 float(53)) returns float(53)
BEGIN
@@ -15322,7 +16561,9 @@ return f1;
END//
SELECT fn46(1.00e+00);
fn46(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn47;
CREATE FUNCTION fn47( f1 float(53) unsigned zerofill) returns float(53) unsigned zerofill
BEGIN
@@ -15331,7 +16572,9 @@ return f1;
END//
SELECT fn47(1.00e+00);
fn47(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn48;
CREATE FUNCTION fn48( f1 float(53) zerofill) returns float(53) zerofill
BEGIN
@@ -15340,7 +16583,9 @@ return f1;
END//
SELECT fn48(1.00e+00);
fn48(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn49;
CREATE FUNCTION fn49( f1 int) returns int
BEGIN
@@ -15349,7 +16594,10 @@ return f1;
END//
SELECT fn49(-2.15e+09);
fn49(-2.15e+09)
--2147483648
+-2147483638
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn50;
CREATE FUNCTION fn50( f1 int unsigned) returns int unsigned
BEGIN
@@ -15385,7 +16633,9 @@ return f1;
END//
SELECT fn53(-8388600);
fn53(-8388600)
--8388600
+-8388598
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn54;
CREATE FUNCTION fn54( f1 mediumint unsigned) returns mediumint unsigned
BEGIN
@@ -15412,7 +16662,11 @@ return f1;
END//
SELECT fn56(-8388601);
fn56(-8388601)
-0
+16777215
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn57;
CREATE FUNCTION fn57( f1 numeric) returns numeric
BEGIN
@@ -15421,7 +16675,9 @@ return f1;
END//
SELECT fn57(-999999999);
fn57(-999999999)
--999999999
+-1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn58;
CREATE FUNCTION fn58( f1 numeric (0)) returns numeric (0)
BEGIN
@@ -15430,7 +16686,9 @@ return f1;
END//
SELECT fn58(-999999999);
fn58(-999999999)
--999999999
+-1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn59;
CREATE FUNCTION fn59( f1 numeric (0) unsigned) returns numeric (0) unsigned
BEGIN
@@ -15440,6 +16698,9 @@ END//
SELECT fn59(9999999999);
fn59(9999999999)
9999999999
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn60;
CREATE FUNCTION fn60( f1 numeric (0) unsigned zerofill) returns numeric (0) unsigned zerofill
BEGIN
@@ -15448,7 +16709,9 @@ return f1;
END//
SELECT fn60(99999999);
fn60(99999999)
-0099999999
+0100000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn61;
CREATE FUNCTION fn61( f1 numeric (0) zerofill) returns numeric (0) zerofill
BEGIN
@@ -15457,7 +16720,10 @@ return f1;
END//
SELECT fn61(-99999999);
fn61(-99999999)
-0000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn62;
CREATE FUNCTION fn62( f1 numeric (0, 0)) returns numeric (0, 0)
BEGIN
@@ -15466,7 +16732,9 @@ return f1;
END//
SELECT fn62(-999999999);
fn62(-999999999)
--999999999
+-1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn63;
CREATE FUNCTION fn63( f1 numeric (0, 0) unsigned) returns numeric (0, 0) unsigned
BEGIN
@@ -15476,6 +16744,9 @@ END//
SELECT fn63(9999999999);
fn63(9999999999)
9999999999
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn64;
CREATE FUNCTION fn64( f1 numeric (0, 0) unsigned zerofill) returns numeric (0, 0) unsigned zerofill
BEGIN
@@ -15484,7 +16755,9 @@ return f1;
END//
SELECT fn64(99999999);
fn64(99999999)
-0099999999
+0100000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn65;
CREATE FUNCTION fn65( f1 numeric (0, 0) zerofill) returns numeric (0, 0) zerofill
BEGIN
@@ -15493,7 +16766,10 @@ return f1;
END//
SELECT fn65(-99999999);
fn65(-99999999)
-0000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn66;
CREATE FUNCTION fn66( f1 numeric (63, 30)) returns numeric (63, 30)
BEGIN
@@ -15502,7 +16778,12 @@ return f1;
END//
SELECT fn66(-1e+36);
fn66(-1e+36)
--999999999999999999999999999999999.999999999999999999999999999999
+-999999999999999999999999999999989.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn67;
CREATE FUNCTION fn67( f1 numeric (63, 30) unsigned) returns numeric (63, 30) unsigned
BEGIN
@@ -15512,6 +16793,10 @@ END//
SELECT fn67(1e+36);
fn67(1e+36)
999999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn68;
CREATE FUNCTION fn68( f1 numeric (63, 30) unsigned zerofill) returns numeric (63, 30) unsigned zerofill
BEGIN
@@ -15521,6 +16806,10 @@ END//
SELECT fn68(1e+36);
fn68(1e+36)
999999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn69;
CREATE FUNCTION fn69( f1 numeric (63, 30) zerofill) returns numeric (63, 30) zerofill
BEGIN
@@ -15529,7 +16818,10 @@ return f1;
END//
SELECT fn69(-1e+36);
fn69(-1e+36)
-000000000000000000000000000000000.000000000000000000000000000000
+000000000000000000000000000000010.000000000000000000000000000000
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn70_n;
CREATE FUNCTION fn70_n( f1 numeric (64)) returns numeric (64)
BEGIN
@@ -15577,7 +16869,9 @@ return f1;
END//
SELECT fn74(999999999);
fn74(999999999)
-999999999
+1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn75;
CREATE FUNCTION fn75( f1 numeric unsigned zerofill) returns numeric unsigned zerofill
BEGIN
@@ -15586,7 +16880,9 @@ return f1;
END//
SELECT fn75(999999999);
fn75(999999999)
-0999999999
+1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn76;
CREATE FUNCTION fn76( f1 numeric zerofill) returns numeric zerofill
BEGIN
@@ -15595,7 +16891,10 @@ return f1;
END//
SELECT fn76(-999999999);
fn76(-999999999)
-0000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn77;
CREATE FUNCTION fn77( f1 real) returns real
BEGIN
@@ -15613,7 +16912,9 @@ return f1;
END//
SELECT fn78(1.1);
fn78(1.1)
-1.1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn79;
CREATE FUNCTION fn79( f1 real unsigned zerofill) returns real unsigned zerofill
BEGIN
@@ -15622,7 +16923,9 @@ return f1;
END//
SELECT fn79(1.1);
fn79(1.1)
-1.1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn80;
CREATE FUNCTION fn80( f1 real zerofill) returns real zerofill
BEGIN
@@ -15631,7 +16934,9 @@ return f1;
END//
SELECT fn80(1.1);
fn80(1.1)
-1.1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn81;
CREATE FUNCTION fn81( f1 smallint) returns smallint
BEGIN
@@ -15667,7 +16972,11 @@ return f1;
END//
SELECT fn84(-32601);
fn84(-32601)
-0
+65535
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn85;
CREATE FUNCTION fn85( f1 tinyint) returns tinyint
BEGIN
@@ -15703,45 +17012,37 @@ return f1;
END//
SELECT fn88(-101);
fn88(-101)
-0
+255
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn89;
CREATE FUNCTION fn89( f1 enum('1enum', '2enum')) returns enum('1enum', '2enum')
BEGIN
-if f1 eq "1enum" then
-set f1 = '2enum';
-else
-set f1 = '1enum';
-END if;
-return f1;
+IF f1 = '1enum' THEN
+SET f1 = '2enum';
+ELSE
+SET f1 = '1enum';
+END IF;
+RETURN f1;
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 'eq "1enum" then
-set f1 = '2enum';
-else
-set f1 = '1enum';
-END if;
-return f1;
-END' at line 3
SELECT fn89( '1enum');
-ERROR 42000: FUNCTION d1.fn89 does not exist
+fn89( '1enum')
+2enum
DROP FUNCTION IF EXISTS fn90;
-CREATE FUNCTION fn90( f1 set("1set", "2set")) returns set("1set", "2set")
+CREATE FUNCTION fn90( f1 set('1set', '2set')) returns set('1set', '2set')
BEGIN
-if(f1 == "1set") then
-set f1 = "2set";
-else
-set f1 = "1set";
-END if;
-return f1;
+IF f1 = '1set' THEN
+SET f1 = '2set';
+ELSE
+SET f1 = '1set';
+END IF;
+RETURN f1;
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 '== "1set") then
-set f1 = "2set";
-else
-set f1 = "1set";
-END if;
-return f1;
-END' at line 3
SELECT fn90( '1set');
-ERROR 42000: FUNCTION d1.fn90 does not exist
+fn90( '1set')
+2set
DROP FUNCTION IF EXISTS fn91;
CREATE FUNCTION fn91( f1 date) returns date
BEGIN
@@ -15759,7 +17060,7 @@ return f1;
END//
SELECT fn92( '23:59:59.999999');
fn92( '23:59:59.999999')
-26:00:00
+25:59:59
DROP FUNCTION IF EXISTS fn93;
CREATE FUNCTION fn93( f1 datetime) returns datetime
BEGIN
@@ -15768,7 +17069,7 @@ return f1;
END//
SELECT fn93('1997-12-31 23:59:59.999999');
fn93('1997-12-31 23:59:59.999999')
-1998-01-02 01:01:01
+1998-01-02 01:01:00
DROP FUNCTION IF EXISTS fn94;
CREATE FUNCTION fn94( f1 char) returns char
BEGIN
@@ -15778,6 +17079,8 @@ END//
SELECT fn94( 'h');
fn94( 'h')
a
+Warnings:
+Warning 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn95;
CREATE FUNCTION fn95( f1 char ascii) returns char ascii
BEGIN
@@ -15787,15 +17090,19 @@ END//
SELECT fn95('h');
fn95('h')
a
+Warnings:
+Warning 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn96;
-CREATE FUNCTION fn96( f1 char binary) returns char binary
+CREATE FUNCTION fn96( f1 binary) returns binary(2)
BEGIN
set f1 = concat('a', f1);
return f1;
END//
SELECT fn96( 'h');
fn96( 'h')
-a
+a
+Warnings:
+Warning 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn97;
CREATE FUNCTION fn97( f1 longtext) returns longtext
BEGIN
@@ -15917,7 +17224,7 @@ SELECT f1;
END//
CALL sp2(1.84e+19);
f1
--9223372036854775808
+18400000000000000000
DROP PROCEDURE IF EXISTS sp3;
CREATE PROCEDURE sp3( f1 bigint unsigned zerofill)
BEGIN
@@ -15926,7 +17233,7 @@ SELECT f1;
END//
CALL sp3(1.84e+17);
f1
-184000000000000000
+00184000000000000000
DROP PROCEDURE IF EXISTS sp4;
CREATE PROCEDURE sp4( f1 bigint zerofill)
BEGIN
@@ -15935,31 +17242,27 @@ SELECT f1;
END//
CALL sp4(-9.22e+15);
f1
--9220000000000000
+00000000000000000000
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp5;
CREATE PROCEDURE sp5( f1 decimal)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: default (10) for DECIMAL not checked, decimal digits shown although not defined
CALL sp5(-1.00e+09);
f1
--1000000000.000000000
+-1000000000
DROP PROCEDURE IF EXISTS sp6;
CREATE PROCEDURE sp6( f1 decimal (0))
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
CALL sp6(-1.00e+09);
f1
--1000000000.000000000
+-1000000000
DROP PROCEDURE IF EXISTS sp7;
CREATE PROCEDURE sp7( f1 decimal (0) unsigned)
BEGIN
@@ -15968,7 +17271,11 @@ SELECT f1;
END//
CALL sp7(99999999999);
f1
-99999999999.000000000
+9999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp8;
CREATE PROCEDURE sp8( f1 decimal (0) unsigned zerofill)
BEGIN
@@ -15977,199 +17284,201 @@ SELECT f1;
END//
CALL sp8(999999999);
f1
-999999999.000000000
+1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp9;
CREATE PROCEDURE sp9( f1 decimal (0) zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
CALL sp9(-1.00e+09);
f1
--1000000000.000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp10;
CREATE PROCEDURE sp10( f1 decimal (0, 0))
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
CALL sp10(-1.00e+09);
f1
--1000000000.000000000
+-1000000000
DROP PROCEDURE IF EXISTS sp11;
CREATE PROCEDURE sp11( f1 decimal (0, 0) unsigned)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
CALL sp11(99999999999);
f1
-99999999999.000000000
+9999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp12;
CREATE PROCEDURE sp12( f1 decimal (0, 0) unsigned zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
CALL sp12(999999999);
f1
-999999999.000000000
+1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp13;
CREATE PROCEDURE sp13( f1 decimal (0, 0) zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
CALL sp13(-1.00e+09);
f1
--1000000000.000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp14;
CREATE PROCEDURE sp14( f1 decimal (63, 30))
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: wrong number of decimal digits shown
CALL sp14(-1.00e+21);
f1
--1000000000000000000000.000000000
+-1000000000000000000000.000000000000000000000000000000
DROP PROCEDURE IF EXISTS sp15;
CREATE PROCEDURE sp15( f1 decimal (63, 30) unsigned)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: wrong number of decimal digits shown
CALL sp15(1.00e+16);
f1
-10000000000000000.000000000
+10000000000000000.000000000000000000000000000000
DROP PROCEDURE IF EXISTS sp16;
CREATE PROCEDURE sp16( f1 decimal (63, 30) unsigned zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: wrong number of decimal digits shown
CALL sp16(1.00e+16);
f1
-10000000000000000.000000000
+000000000000000010000000000000000.000000000000000000000000000000
DROP PROCEDURE IF EXISTS sp17;
CREATE PROCEDURE sp17( f1 decimal (63, 30) zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: wrong number of decimal digits shown
CALL sp17(-1.00e+21);
f1
--1000000000000000000000.000000000
+000000000000000000000000000000010.000000000000000000000000000000
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp18_d;
CREATE PROCEDURE sp18_d( f1 decimal (64))
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
+CALL sp18_d(-1.00e+30);
+f1
+-1000000000000000000000000000000
CALL sp18_d( -1000000000000000000000000000000 );
f1
--1000000000000000000000000000000.000000000
+-1000000000000000000000000000000
DROP PROCEDURE IF EXISTS sp19_du;
CREATE PROCEDURE sp19_du( f1 decimal (64) unsigned)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
+CALL sp19_du(1.00e+20);
+f1
+100000000000000000000
CALL sp19_du( 100000000000000000000 );
f1
-100000000000000000000.000000000
+100000000000000000000
+CALL sp19_du(1.00e+24);
+f1
+1000000000000000000000000
CALL sp19_du( 1000000000000000000000000 );
f1
-1000000000000000000000000.000000000
+1000000000000000000000000
DROP PROCEDURE IF EXISTS sp20_duz;
CREATE PROCEDURE sp20_duz( f1 decimal (64) unsigned zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
+CALL sp20_duz(1.00e+20);
+f1
+0000000000000000000000000000000000000000000100000000000000000000
CALL sp20_duz( 100000000000000000000 );
f1
-100000000000000000000.000000000
+0000000000000000000000000000000000000000000100000000000000000000
+CALL sp20_duz(1.00e+24);
+f1
+0000000000000000000000000000000000000001000000000000000000000000
CALL sp20_duz( 1000000000000000000000000 );
f1
-1000000000000000000000000.000000000
+0000000000000000000000000000000000000001000000000000000000000000
DROP PROCEDURE IF EXISTS sp21;
CREATE PROCEDURE sp21( f1 decimal (64) zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
CALL sp21(1.00e+00);
f1
-1.000000000
+0000000000000000000000000000000000000000000000000000000000000010
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp22;
CREATE PROCEDURE sp22( f1 decimal unsigned)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
CALL sp22(1.00e+00);
f1
-1.000000000
+10
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp23;
CREATE PROCEDURE sp23( f1 decimal unsigned zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
CALL sp23(1.00e+00);
f1
-1.000000000
+0000000010
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp24;
CREATE PROCEDURE sp24( f1 decimal zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
CALL sp24(-1.00e+09);
f1
--1000000000.000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp25;
CREATE PROCEDURE sp25( f1 double)
BEGIN
@@ -16187,7 +17496,9 @@ SELECT f1;
END//
CALL sp26(1.00e+00);
f1
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp27;
CREATE PROCEDURE sp27( f1 double unsigned zerofill)
BEGIN
@@ -16196,7 +17507,9 @@ SELECT f1;
END//
CALL sp27(1.00e+00);
f1
-1
+0000000000000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp28;
CREATE PROCEDURE sp28( f1 double zerofill)
BEGIN
@@ -16205,7 +17518,9 @@ SELECT f1;
END//
CALL sp28(1.00e+00);
f1
-1
+0000000000000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp29;
CREATE PROCEDURE sp29( f1 float)
BEGIN
@@ -16223,7 +17538,9 @@ SELECT f1;
END//
CALL sp30(1.00e+00);
f1
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp31;
CREATE PROCEDURE sp31( f1 float unsigned zerofill)
BEGIN
@@ -16232,7 +17549,9 @@ SELECT f1;
END//
CALL sp31(1.00e+00);
f1
-1
+000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp32;
CREATE PROCEDURE sp32( f1 float zerofill)
BEGIN
@@ -16241,7 +17560,9 @@ SELECT f1;
END//
CALL sp32(1.00e+00);
f1
-1
+000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp33;
CREATE PROCEDURE sp33( f1 float(0))
BEGIN
@@ -16259,7 +17580,9 @@ SELECT f1;
END//
CALL sp34(1.00e+00);
f1
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp35;
CREATE PROCEDURE sp35( f1 float(0) unsigned zerofill)
BEGIN
@@ -16268,7 +17591,9 @@ SELECT f1;
END//
CALL sp35(1.00e+00);
f1
-1
+000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp36;
CREATE PROCEDURE sp36( f1 float(0) zerofill)
BEGIN
@@ -16277,7 +17602,9 @@ SELECT f1;
END//
CALL sp36(1.00e+00);
f1
-1
+000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp37;
CREATE PROCEDURE sp37( f1 float(23))
BEGIN
@@ -16295,7 +17622,9 @@ SELECT f1;
END//
CALL sp38(1.00e+00);
f1
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp39;
CREATE PROCEDURE sp39( f1 float(23) unsigned zerofill)
BEGIN
@@ -16304,7 +17633,9 @@ SELECT f1;
END//
CALL sp39(1.00e+00);
f1
-1
+000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp40;
CREATE PROCEDURE sp40( f1 float(23) zerofill)
BEGIN
@@ -16313,7 +17644,9 @@ SELECT f1;
END//
CALL sp40(1.00e+00);
f1
-1
+000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp41;
CREATE PROCEDURE sp41( f1 float(24))
BEGIN
@@ -16331,7 +17664,9 @@ SELECT f1;
END//
CALL sp42(1.00e+00);
f1
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp43;
CREATE PROCEDURE sp43( f1 float(24) unsigned zerofill)
BEGIN
@@ -16340,7 +17675,9 @@ SELECT f1;
END//
CALL sp43(1.00e+00);
f1
-1
+000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp44;
CREATE PROCEDURE sp44( f1 float(24) zerofill)
BEGIN
@@ -16349,7 +17686,9 @@ SELECT f1;
END//
CALL sp44(1.00e+00);
f1
-1
+000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp45;
CREATE PROCEDURE sp45( f1 float(53))
BEGIN
@@ -16367,7 +17706,9 @@ SELECT f1;
END//
CALL sp46(1.00e+00);
f1
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp47;
CREATE PROCEDURE sp47( f1 float(53) unsigned zerofill)
BEGIN
@@ -16376,7 +17717,9 @@ SELECT f1;
END//
CALL sp47(1.00e+00);
f1
-1
+0000000000000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp48;
CREATE PROCEDURE sp48( f1 float(53) zerofill)
BEGIN
@@ -16385,7 +17728,9 @@ SELECT f1;
END//
CALL sp48(1.00e+00);
f1
-1
+0000000000000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp49;
CREATE PROCEDURE sp49( f1 int)
BEGIN
@@ -16394,7 +17739,10 @@ SELECT f1;
END//
CALL sp49(-2.15e+09);
f1
--2150000000
+-2147483638
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp50;
CREATE PROCEDURE sp50( f1 int unsigned)
BEGIN
@@ -16421,7 +17769,7 @@ SELECT f1;
END//
CALL sp52(2.15e+08);
f1
-215000000
+0215000000
DROP PROCEDURE IF EXISTS sp53;
CREATE PROCEDURE sp53( f1 mediumint)
BEGIN
@@ -16430,7 +17778,9 @@ SELECT f1;
END//
CALL sp53(-8388600);
f1
--8388600
+-8388598
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp54;
CREATE PROCEDURE sp54( f1 mediumint unsigned)
BEGIN
@@ -16457,7 +17807,11 @@ SELECT f1;
END//
CALL sp56(-8388601);
f1
--8388602
+16777215
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp57;
CREATE PROCEDURE sp57( f1 numeric)
BEGIN
@@ -16466,7 +17820,9 @@ SELECT f1;
END//
CALL sp57(-999999999);
f1
--999999999.000000000
+-1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp58;
CREATE PROCEDURE sp58( f1 numeric (0))
BEGIN
@@ -16475,7 +17831,9 @@ SELECT f1;
END//
CALL sp58(-999999999);
f1
--999999999.000000000
+-1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp59;
CREATE PROCEDURE sp59( f1 numeric (0) unsigned)
BEGIN
@@ -16484,7 +17842,10 @@ SELECT f1;
END//
CALL sp59(9999999999);
f1
-9999999999.000000000
+9999999999
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp60;
CREATE PROCEDURE sp60( f1 numeric (0) unsigned zerofill)
BEGIN
@@ -16493,7 +17854,9 @@ SELECT f1;
END//
CALL sp60(99999999);
f1
-99999999.000000000
+0100000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp61;
CREATE PROCEDURE sp61( f1 numeric (0) zerofill)
BEGIN
@@ -16502,7 +17865,10 @@ SELECT f1;
END//
CALL sp61(-99999999);
f1
--99999999.000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp62;
CREATE PROCEDURE sp62( f1 numeric (0, 0))
BEGIN
@@ -16511,7 +17877,9 @@ SELECT f1;
END//
CALL sp62(-999999999);
f1
--999999999.000000000
+-1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp63;
CREATE PROCEDURE sp63( f1 numeric (0, 0) unsigned)
BEGIN
@@ -16520,7 +17888,10 @@ SELECT f1;
END//
CALL sp63(9999999999);
f1
-9999999999.000000000
+9999999999
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp64;
CREATE PROCEDURE sp64( f1 numeric (0, 0) unsigned zerofill)
BEGIN
@@ -16529,7 +17900,9 @@ SELECT f1;
END//
CALL sp64(99999999);
f1
-99999999.000000000
+0100000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp65;
CREATE PROCEDURE sp65( f1 numeric (0, 0) zerofill)
BEGIN
@@ -16538,79 +17911,146 @@ SELECT f1;
END//
CALL sp65(-99999999);
f1
--99999999.000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp66_n;
CREATE PROCEDURE sp66_n( f1 numeric (63, 30))
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
+CALL sp66_n(-1e+36);
+f1
+-999999999999999999999999999999989.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
CALL sp66_n( -1000000000000000000000000000000000000 );
f1
--1000000000000000000000000000000000000.000000000
+-999999999999999999999999999999989.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp67_nu;
CREATE PROCEDURE sp67_nu( f1 numeric (63, 30) unsigned)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
+CALL sp67_nu(1e+36);
+f1
+999999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
CALL sp67_nu( 1000000000000000000000000000000000000 );
f1
-1000000000000000000000000000000000000.000000000
+999999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp68_nuz;
CREATE PROCEDURE sp68_nuz( f1 numeric (63, 30) unsigned zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
+CALL sp68_nuz(1e+36);
+f1
+999999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
CALL sp68_nuz( 1000000000000000000000000000000000000 );
f1
-1000000000000000000000000000000000000.000000000
+999999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp69_n_z;
CREATE PROCEDURE sp69_n_z( f1 numeric (63, 30) zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
+CALL sp69_n_z(-1e+36);
+f1
+000000000000000000000000000000010.000000000000000000000000000000
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
CALL sp69_n_z( -1000000000000000000000000000000000000 );
f1
--1000000000000000000000000000000000000.000000000
+000000000000000000000000000000010.000000000000000000000000000000
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp70_n;
CREATE PROCEDURE sp70_n( f1 numeric (64))
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
+CALL sp70_n(-1e+40);
+f1
+-10000000000000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
CALL sp70_n( -10000000000000000000000000000000000000000 );
f1
--10000000000000000000000000000000000000000.000000000
+-10000000000000000000000000000000000000000
DROP PROCEDURE IF EXISTS sp71_nu;
CREATE PROCEDURE sp71_nu( f1 numeric (64) unsigned)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
+CALL sp71_nu(1.00e+40);
+f1
+10000000000000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
CALL sp71_nu( 10000000000000000000000000000000000000000 );
f1
-10000000000000000000000000000000000000000.000000000
+10000000000000000000000000000000000000000
DROP PROCEDURE IF EXISTS sp72_nuz;
CREATE PROCEDURE sp72_nuz( f1 numeric (64) unsigned zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
+CALL sp72_nuz(1.00e+40);
+f1
+0000000000000000000000010000000000000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
CALL sp72_nuz( 10000000000000000000000000000000000000000 );
f1
-10000000000000000000000000000000000000000.000000000
+0000000000000000000000010000000000000000000000000000000000000000
DROP PROCEDURE IF EXISTS sp73_n_z;
CREATE PROCEDURE sp73_n_z( f1 numeric (64) zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
+CALL sp73_n_z(1.00e+40);
+f1
+0000000000000000000000010000000000000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
CALL sp73_n_z( 10000000000000000000000000000000000000000 );
f1
-10000000000000000000000000000000000000000.000000000
+0000000000000000000000010000000000000000000000000000000000000000
DROP PROCEDURE IF EXISTS sp74;
CREATE PROCEDURE sp74( f1 numeric unsigned)
BEGIN
@@ -16619,7 +18059,9 @@ SELECT f1;
END//
CALL sp74(999999999);
f1
-999999999.000000000
+1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp75;
CREATE PROCEDURE sp75( f1 numeric unsigned zerofill)
BEGIN
@@ -16628,7 +18070,9 @@ SELECT f1;
END//
CALL sp75(999999999);
f1
-999999999.000000000
+1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp76;
CREATE PROCEDURE sp76( f1 numeric zerofill)
BEGIN
@@ -16637,7 +18081,10 @@ SELECT f1;
END//
CALL sp76(-999999999);
f1
--999999999.000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp77;
CREATE PROCEDURE sp77( f1 real)
BEGIN
@@ -16646,7 +18093,7 @@ SELECT f1;
END//
CALL sp77(1.1);
f1
-1.10000
+1.1
DROP PROCEDURE IF EXISTS sp78;
CREATE PROCEDURE sp78( f1 real unsigned)
BEGIN
@@ -16655,7 +18102,9 @@ SELECT f1;
END//
CALL sp78(1.1);
f1
-1.10000
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp79;
CREATE PROCEDURE sp79( f1 real unsigned zerofill)
BEGIN
@@ -16664,7 +18113,9 @@ SELECT f1;
END//
CALL sp79(1.1);
f1
-1.10000
+0000000000000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp80;
CREATE PROCEDURE sp80( f1 real zerofill)
BEGIN
@@ -16673,7 +18124,9 @@ SELECT f1;
END//
CALL sp80(1.1);
f1
-1.10000
+0000000000000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp81;
CREATE PROCEDURE sp81( f1 smallint)
BEGIN
@@ -16709,7 +18162,11 @@ SELECT f1;
END//
CALL sp84(-32601);
f1
--32602
+65535
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp85;
CREATE PROCEDURE sp85( f1 tinyint)
BEGIN
@@ -16745,9 +18202,23 @@ SELECT f1;
END//
CALL sp88(-101);
f1
--102
+255
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp89;
+CREATE PROCEDURE sp89( f1 enum('1enum', '2enum'))
+BEGIN
+IF f1 = '1enum' THEN set f1 = '2enum'; ELSE set f1 = '1enum'; END IF;
+END//
+CALL sp89( '1enum');
DROP PROCEDURE IF EXISTS sp90;
+CREATE PROCEDURE sp90( f1 set('1set', '2set'))
+BEGIN
+IF f1 = '1set' THEN set f1 = '2set'; ELSE set f1 = '1set'; END IF;
+END//
+CALL sp90( '1set');
DROP PROCEDURE IF EXISTS sp91;
CREATE PROCEDURE sp91( f1 date)
BEGIN
@@ -16765,7 +18236,7 @@ SELECT f1;
END//
CALL sp92( '23:59:59.999999');
f1
-26:00:00.999997
+25:59:59
DROP PROCEDURE IF EXISTS sp93;
CREATE PROCEDURE sp93( f1 datetime)
BEGIN
@@ -16774,7 +18245,7 @@ SELECT f1;
END//
CALL sp93('1997-12-31 23:59:59.999999');
f1
-1998-01-02 01:01:01.000001
+1998-01-02 01:01:00
DROP PROCEDURE IF EXISTS sp94;
CREATE PROCEDURE sp94( f1 char)
BEGIN
@@ -16783,7 +18254,9 @@ SELECT f1;
END//
CALL sp94( 'h');
f1
-ah
+a
+Warnings:
+Warning 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp95;
CREATE PROCEDURE sp95( f1 char ascii)
BEGIN
@@ -16792,7 +18265,9 @@ SELECT f1;
END//
CALL sp95( 'h');
f1
-ah
+a
+Warnings:
+Warning 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp96;
CREATE PROCEDURE sp96( f1 char binary)
BEGIN
@@ -16801,7 +18276,9 @@ SELECT f1;
END//
CALL sp96( 'h');
f1
-ah
+a
+Warnings:
+Warning 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp97;
CREATE PROCEDURE sp97( f1 longtext)
BEGIN
@@ -16846,7 +18323,7 @@ SELECT f1;
END//
CALL sp101(51);
f1
-61
+2061
DROP PROCEDURE IF EXISTS sp102;
CREATE PROCEDURE sp102( f1 year(4))
BEGIN
@@ -16901,6 +18378,8 @@ END//
CALL sp107(2.00e+13);
f1
returned
+Warnings:
+returned 1265 Data truncated for column 'f1' at row 1
USE db_storedproc;
DROP DATABASE db1;
DROP DATABASE IF EXISTS db1;
@@ -16937,9 +18416,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute01();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-61 61 71 61 61 71 2033 2033 2084 2033 2033 2084
+2061 2061 2071 2061 2061 2071 2033 2033 2084 2033 2033 2084
var1 var2 var3 var4 var5 var6 var7 var8
-61 71 61 71 2033 2084 2033 2084
+2061 2071 2061 2071 2033 2084 2033 2084
DROP PROCEDURE spexecute01;
DROP PROCEDURE sp1;
DROP PROCEDURE IF EXISTS sp2;
@@ -17010,9 +18489,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute03();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-ah ah aah ah ah aah helloworld helloworld NULL helloworld helloworld hellohelloworld
+a a a a a a helloworld helloworld NULL helloworld helloworld hellohelloworld
var1 var2 var3 var4 var5 var6 var7 var8
-ah aah ah aah helloworld NULL helloworld hellohelloworld
+a a a a helloworld NULL helloworld hellohelloworld
DROP PROCEDURE spexecute03;
DROP PROCEDURE sp3;
DROP PROCEDURE IF EXISTS sp4;
@@ -17155,7 +18634,7 @@ SELECT var7, var8;
END//
CALL spexecute07();
var1 var2
-9223372036854775807 NULL
+18400000000000000000 NULL
var3 var4
-9220000000000000000 NULL
var5 var6
@@ -17163,7 +18642,7 @@ var5 var6
var7 var8
-9220000000000000000 NULL
f1 f2 f3
-9223372036854775807 9223372036854775807 NULL
+18400000000000000000 18400000000000000000 NULL
f4 f5 f6
-9220000000000000000 -9220000000000000000 NULL
f7 f8 f9
@@ -17171,7 +18650,7 @@ f7 f8 f9
f10 f11 f12
-9220000000000000000 -9220000000000000000 NULL
f1 f2 f3
--2 -2 -2
+18353255926290448384 18353255926290448384 18353255926290448384
f4 f5 f6
-9220000000000000000 6744073709551616 6744073709551616
f7 f8 f9
@@ -17179,7 +18658,7 @@ f7 f8 f9
f10 f11 f12
-9220000000000000000 6744073709551616 6744073709551616
var1 var2
--2 -2
+18353255926290448384 18353255926290448384
var3 var4
6744073709551616 6744073709551616
var5 var6
@@ -17237,9 +18716,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute08();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-368000000000000000 368000000000000000 368000000000000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+00368000000000000000 00368000000000000000 00368000000000000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-368000000000000000 368000000000000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+00368000000000000000 00368000000000000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute08;
DROP PROCEDURE sp8;
DROP PROCEDURE IF EXISTS sp9;
@@ -17291,9 +18770,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute09();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--18440000000000000 -18440000000000000 -18439999999999990 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+00000000000000000000 00000000000000000000 00000000000000000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--18440000000000000 -18439999999999990 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+00000000000000000000 00000000000000000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute09;
DROP PROCEDURE sp9;
DROP PROCEDURE IF EXISTS sp10;
@@ -17337,9 +18816,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute10();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--1000000000.000000000 -1000000000.000000000 -999999990.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-1000000000 -1000000000 -999999990 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--1000000000.000000000 -999999990.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-1000000000 -999999990 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute10;
DROP PROCEDURE sp10;
DROP PROCEDURE IF EXISTS sp11;
@@ -17372,9 +18851,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute11();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1000000000.000000000 1000000000.000000000 1000000010.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+1000000000 1000000000 1000000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1000000000.000000000 1000000010.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+1000000000 1000000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute11;
DROP PROCEDURE sp11;
DROP PROCEDURE IF EXISTS sp12;
@@ -17407,9 +18886,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute12();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-99999999999.000000000 99999999999.000000000 100000000009.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+9999999999 9999999999 9999999999 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-99999999999.000000000 100000000009.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+9999999999 9999999999 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute12;
DROP PROCEDURE sp12;
DROP PROCEDURE IF EXISTS sp13;
@@ -17442,9 +18921,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute13();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--1000000000.000000000 -1000000000.000000000 -999999990.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000010 0000000010 0000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--1000000000.000000000 -999999990.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000010 0000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute13;
DROP PROCEDURE sp13;
DROP PROCEDURE IF EXISTS sp14;
@@ -17477,9 +18956,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute14();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--1000000000000000000000.000000000 -1000000000000000000000.000000000 -999999999999999999990.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-1000000000000000000000.000000000000000000000000000000 -1000000000000000000000.000000000000000000000000000000 -999999999999999999990.000000000000000000000000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--1000000000000000000000.000000000 -999999999999999999990.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-1000000000000000000000.000000000000000000000000000000 -999999999999999999990.000000000000000000000000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute14;
DROP PROCEDURE sp14;
DROP PROCEDURE IF EXISTS sp15;
@@ -17545,9 +19024,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute16();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000010 0000000000000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute16;
DROP PROCEDURE sp16;
DROP PROCEDURE IF EXISTS sp17;
@@ -17579,9 +19058,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute17();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+10 10 20 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10 20 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute17;
DROP PROCEDURE sp17;
DROP PROCEDURE IF EXISTS sp18;
@@ -17613,9 +19092,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute18();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000010 0000000000000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute18;
DROP PROCEDURE sp18;
DROP PROCEDURE IF EXISTS sp19;
@@ -17647,9 +19126,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute19();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+10 10 20 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10 20 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute19;
DROP PROCEDURE sp19;
DROP PROCEDURE IF EXISTS sp20;
@@ -17681,9 +19160,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute20();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000010 000000000010 000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000010 000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute20;
DROP PROCEDURE sp20;
DROP PROCEDURE IF EXISTS sp21;
@@ -17715,9 +19194,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute21();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000010 000000000010 000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000010 000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute21;
DROP PROCEDURE sp21;
DROP PROCEDURE IF EXISTS sp22;
@@ -17783,9 +19262,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute23();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--999999999.000000000 -999999999.000000000 -999999989.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-1000000000 -1000000000 -999999990 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--999999999.000000000 -999999989.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-1000000000 -999999990 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute23;
DROP PROCEDURE sp23;
DROP PROCEDURE IF EXISTS sp24;
@@ -17817,9 +19296,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute24();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1.10000 1.10000 11.10000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+1.1 1.1 11.1 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1.10000 11.10000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+1.1 11.1 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute24;
DROP PROCEDURE sp24;
DROP PROCEDURE IF EXISTS sp25;
@@ -17851,9 +19330,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute25();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--65402 -65402 -65392 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-32758 -32758 -32748 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--65402 -65392 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-32758 -32748 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute25;
DROP PROCEDURE sp25;
DROP PROCEDURE IF EXISTS sp26;
@@ -17919,9 +19398,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute27();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-26:00:00.999997 26:00:00.999997 28:00:01.999995 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+25:59:59 25:59:59 27:59:59 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-26:00:00.999997 28:00:01.999995 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+25:59:59 27:59:59 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute27;
DROP PROCEDURE sp27;
DROP PROCEDURE IF EXISTS sp28;
@@ -17953,9 +19432,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute28();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1998-01-02 01:01:01.000001 1998-01-02 01:01:01.000001 1998-01-03 02:02:02.000003 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+1998-01-02 01:01:00 1998-01-02 01:01:00 1998-01-03 02:02:01 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1998-01-02 01:01:01.000001 1998-01-03 02:02:02.000003 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+1998-01-02 01:01:00 1998-01-03 02:02:01 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute28;
DROP PROCEDURE sp28;
DROP PROCEDURE IF EXISTS sp29;
@@ -17987,9 +19466,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute29();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+10 10 20 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10 20 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute29;
DROP PROCEDURE sp29;
DROP PROCEDURE IF EXISTS sp30;
@@ -18021,9 +19500,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute30();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000010 000000000010 000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000010 000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute30;
DROP PROCEDURE sp30;
DROP PROCEDURE IF EXISTS sp31;
@@ -18089,9 +19568,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute32();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+10 10 20 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10 20 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute32;
DROP PROCEDURE sp32;
DROP PROCEDURE IF EXISTS sp33;
@@ -18123,9 +19602,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute33();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000010 000000000010 000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000010 000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute33;
DROP PROCEDURE sp33;
DROP PROCEDURE IF EXISTS sp34;
@@ -18191,9 +19670,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute35();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+10 10 20 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10 20 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute35;
DROP PROCEDURE sp35;
DROP PROCEDURE IF EXISTS sp36;
@@ -18225,9 +19704,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute36();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000010 000000000010 000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000010 000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute36;
DROP PROCEDURE sp36;
DROP PROCEDURE IF EXISTS sp37;
@@ -18293,9 +19772,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute38();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+10 10 20 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10 20 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute38;
DROP PROCEDURE sp38;
DROP PROCEDURE IF EXISTS sp39;
@@ -18327,9 +19806,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute39();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000010 0000000000000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute39;
DROP PROCEDURE sp39;
DROP PROCEDURE IF EXISTS sp40;
@@ -18361,9 +19840,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute40();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1.10000 1.10000 11.10000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+10 10 20 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1.10000 11.10000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10 20 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute40;
DROP PROCEDURE sp40;
DROP PROCEDURE IF EXISTS sp41;
@@ -18395,9 +19874,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute41();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1.10000 1.10000 11.10000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000010 0000000000000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1.10000 11.10000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute41;
DROP PROCEDURE sp41;
DROP PROCEDURE IF EXISTS sp42;
@@ -18429,9 +19908,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute42();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1.10000 1.10000 11.10000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000010 0000000000000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1.10000 11.10000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute42;
DROP PROCEDURE sp42;
DROP PROCEDURE IF EXISTS sp43;
@@ -18463,9 +19942,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute43();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--999999999.000000000 -999999999.000000000 -999999989.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-1000000000 -1000000000 -999999990 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--999999999.000000000 -999999989.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-1000000000 -999999990 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute43;
DROP PROCEDURE sp43;
DROP PROCEDURE IF EXISTS sp44;
@@ -18497,9 +19976,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute44();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-9999999999.000000000 9999999999.000000000 10000000009.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+9999999999 9999999999 9999999999 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-9999999999.000000000 10000000009.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+9999999999 9999999999 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute44;
DROP PROCEDURE sp44;
DROP PROCEDURE IF EXISTS sp45;
@@ -18531,9 +20010,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute45();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--99999999.000000000 -99999999.000000000 -99999989.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000010 0000000010 0000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--99999999.000000000 -99999989.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000010 0000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute45;
DROP PROCEDURE sp45;
DROP PROCEDURE IF EXISTS sp46;
@@ -18565,9 +20044,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute46();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--999999999.000000000 -999999999.000000000 -999999989.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-1000000000 -1000000000 -999999990 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--999999999.000000000 -999999989.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-1000000000 -999999990 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute46;
DROP PROCEDURE sp46;
DROP PROCEDURE IF EXISTS sp47;
@@ -18599,9 +20078,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute47();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-9999999999.000000000 9999999999.000000000 10000000009.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+9999999999 9999999999 9999999999 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-9999999999.000000000 10000000009.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+9999999999 9999999999 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute47;
DROP PROCEDURE sp47;
DROP PROCEDURE IF EXISTS sp48;
@@ -18633,9 +20112,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute48();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--99999999.000000000 -99999999.000000000 -99999989.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000010 0000000010 0000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--99999999.000000000 -99999989.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000010 0000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute48;
DROP PROCEDURE sp48;
DROP PROCEDURE IF EXISTS sp49;
@@ -18667,9 +20146,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute49();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--999999999.000000000 -999999999.000000000 -999999989.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+10 10 20 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--999999999.000000000 -999999989.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10 20 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute49;
DROP PROCEDURE sp49;
DROP PROCEDURE IF EXISTS sp50;
@@ -18701,9 +20180,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute50();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-9999999999.000000000 9999999999.000000000 10000000009.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+9999999999 9999999999 9999999999 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-9999999999.000000000 10000000009.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+9999999999 9999999999 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute50;
DROP PROCEDURE sp50;
DROP PROCEDURE IF EXISTS sp51;
@@ -18735,9 +20214,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute51();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--99999999.000000000 -99999999.000000000 -99999989.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000010 0000000010 0000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--99999999.000000000 -99999989.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000010 0000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute51;
DROP PROCEDURE sp51;
DROP PROCEDURE IF EXISTS sp52;
@@ -18769,9 +20248,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute52();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--100000000000000000000.000000000 -10000000000000000000000.000000000 -99999999999999999990.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-100000000000000000000.000000000000000000000000000000 -10000000000000000000000.000000000000000000000000000000 -99999999999999999990.000000000000000000000000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--10000000000000000000000.000000000 -99999999999999999990.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-10000000000000000000000.000000000000000000000000000000 -99999999999999999990.000000000000000000000000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute52;
DROP PROCEDURE sp52;
DROP PROCEDURE IF EXISTS sp53;
@@ -18803,9 +20282,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute53();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--100000000000000000000.000000000 -10000000000000000000000.000000000 -99999999999999999990.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-100000000000000000000 -10000000000000000000000 -99999999999999999990 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--10000000000000000000000.000000000 -99999999999999999990.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-10000000000000000000000 -99999999999999999990 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute53;
DROP PROCEDURE sp53;
DROP PROCEDURE IF EXISTS sp54;
@@ -18837,9 +20316,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute54();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-100000000000000000000.000000000 10000000000000000000000.000000000 100000000000000000010.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+100000000000000000000 10000000000000000000000 100000000000000000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-10000000000000000000000.000000000 100000000000000000010.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10000000000000000000000 100000000000000000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute54;
DROP PROCEDURE sp54;
DROP PROCEDURE IF EXISTS sp55;
@@ -18871,9 +20350,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute55();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--100000000000000000000.000000000 -10000000000000000000000.000000000 -99999999999999999990.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000000000000000000000000000000000000000000000000000000000010 0000000000000000000000000000000000000000000000000000000000000010 0000000000000000000000000000000000000000000000000000000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--10000000000000000000000.000000000 -99999999999999999990.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000000000000000000000000000000000000000000000000000000000010 0000000000000000000000000000000000000000000000000000000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute55;
DROP PROCEDURE sp55;
DROP PROCEDURE IF EXISTS sp56;
@@ -18905,9 +20384,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute56();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-61 61 71 61 61 71 61 61 71 61 61 71
+2061 2061 2071 2061 2061 2071 2061 2061 2071 2061 2061 2071
var1 var2 var3 var4 var5 var6 var7 var8
-61 71 61 71 61 71 61 71
+2061 2071 2061 2071 2061 2071 2061 2071
DROP PROCEDURE spexecute56;
DROP PROCEDURE sp56;
DROP PROCEDURE IF EXISTS sp57;
@@ -19041,9 +20520,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute60();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-ah ah aah ah ah aah ah ah aah ah ah aah
+a a a a a a a a a a a a
var1 var2 var3 var4 var5 var6 var7 var8
-ah aah ah aah ah aah ah aah
+a a a a a a a a
DROP PROCEDURE spexecute60;
DROP PROCEDURE sp60;
DROP PROCEDURE IF EXISTS sp61;
@@ -19075,9 +20554,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute61();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-ah ah aah ah ah aah ah ah NULL ah ah aah
+a a a a a a a a NULL a a a
var1 var2 var3 var4 var5 var6 var7 var8
-ah aah ah aah ah NULL ah aah
+a a a a a NULL a a
DROP PROCEDURE spexecute61;
DROP PROCEDURE sp61;
DROP PROCEDURE IF EXISTS sp62;
@@ -19177,9 +20656,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute64();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1000000000.000000000 1000000000.000000000 1000000010.000000000 1000000000.000000000 1000000000.000000000 1000000010.000000000 1000000000.000000000 1000000000.000000000 1000000010.000000000 1000000000.000000000 1000000000.000000000 1000000010.000000000
+1000000000 1000000000 1000000010 1000000000 1000000000 1000000010 1000000000 1000000000 1000000010 1000000000 1000000000 1000000010
var1 var2 var3 var4 var5 var6 var7 var8
-1000000000.000000000 1000000010.000000000 1000000000.000000000 1000000010.000000000 1000000000.000000000 1000000010.000000000 1000000000.000000000 1000000010.000000000
+1000000000 1000000010 1000000000 1000000010 1000000000 1000000010 1000000000 1000000010
DROP PROCEDURE spexecute64;
DROP PROCEDURE sp64;
DROP PROCEDURE IF EXISTS sp65;
@@ -19211,9 +20690,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute65();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-999999999.000000000 999999999.000000000 1000000009.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+1000000000 1000000000 1000000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-999999999.000000000 1000000009.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+1000000000 1000000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute65;
DROP PROCEDURE sp65;
DROP PROCEDURE IF EXISTS sp66;
@@ -19245,9 +20724,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute66();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-10000000000000000.000000000 10000000000000000.000000000 10000000000000010.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+10000000000000000.000000000000000000000000000000 10000000000000000.000000000000000000000000000000 10000000000000010.000000000000000000000000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-10000000000000000.000000000 10000000000000010.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10000000000000000.000000000000000000000000000000 10000000000000010.000000000000000000000000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute66;
DROP PROCEDURE sp66;
DROP PROCEDURE IF EXISTS sp67;
@@ -19279,9 +20758,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute67();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-10000000000000000.000000000 10000000000000000.000000000 10000000000000010.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000000000010000000000000000.000000000000000000000000000000 000000000000000010000000000000000.000000000000000000000000000000 000000000000000010000000000000010.000000000000000000000000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-10000000000000000.000000000 10000000000000010.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000000000010000000000000000.000000000000000000000000000000 000000000000000010000000000000010.000000000000000000000000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute67;
DROP PROCEDURE sp67;
DROP PROCEDURE IF EXISTS sp68;
@@ -19313,9 +20792,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute68();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--1000000000000000000000.000000000 -1000000000000000000000.000000000 -999999999999999999990.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000000000000000000000000010.000000000000000000000000000000 000000000000000000000000000000010.000000000000000000000000000000 000000000000000000000000000000020.000000000000000000000000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--1000000000000000000000.000000000 -999999999999999999990.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000000000000000000000000010.000000000000000000000000000000 000000000000000000000000000000020.000000000000000000000000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute68;
DROP PROCEDURE sp68;
DROP PROCEDURE IF EXISTS sp69;
@@ -19347,9 +20826,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute69();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--100000000000000000000.000000000 -10000000000000000000000.000000000 -99999999999999999990.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-100000000000000000000 -10000000000000000000000 -99999999999999999990 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--10000000000000000000000.000000000 -99999999999999999990.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-10000000000000000000000 -99999999999999999990 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute69;
DROP PROCEDURE sp69;
DROP PROCEDURE IF EXISTS sp70;
@@ -19381,9 +20860,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute70();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-100000000000000000000.000000000 10000000000000000000000.000000000 100000000000000000010.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+100000000000000000000 10000000000000000000000 100000000000000000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-10000000000000000000000.000000000 100000000000000000010.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10000000000000000000000 100000000000000000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute70;
DROP PROCEDURE sp70;
DROP PROCEDURE IF EXISTS sp71;
@@ -19415,9 +20894,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute71();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-100000000000000000000.000000000 10000000000000000000000.000000000 100000000000000000010.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000000000000000000000000000000000000000100000000000000000000 0000000000000000000000000000000000000000010000000000000000000000 0000000000000000000000000000000000000000000100000000000000000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-10000000000000000000000.000000000 100000000000000000010.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000000000000000000000000000000000000010000000000000000000000 0000000000000000000000000000000000000000000100000000000000000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute71;
DROP PROCEDURE sp71;
DROP PROCEDURE IF EXISTS sp72;
@@ -19449,9 +20928,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute72();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1.000000000 1.000000000 11.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000000000000000000000000000000000000000000000000000000000010 0000000000000000000000000000000000000000000000000000000000000010 0000000000000000000000000000000000000000000000000000000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1.000000000 11.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000000000000000000000000000000000000000000000000000000000010 0000000000000000000000000000000000000000000000000000000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute72;
DROP PROCEDURE sp72;
DROP PROCEDURE IF EXISTS sp73;
@@ -19483,9 +20962,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute73();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1.000000000 1.000000000 11.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+10 10 20 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1.000000000 11.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10 20 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute73;
DROP PROCEDURE sp73;
DROP PROCEDURE IF EXISTS sp74;
@@ -19517,9 +20996,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute74();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1.000000000 1.000000000 11.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000010 0000000010 0000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1.000000000 11.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000010 0000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute74;
DROP PROCEDURE sp74;
DROP PROCEDURE IF EXISTS sp75;
@@ -19551,9 +21030,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute75();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--1000000000.000000000 -1000000000.000000000 -999999990.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000010 0000000010 0000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--1000000000.000000000 -999999990.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000010 0000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute75;
DROP PROCEDURE sp75;
DROP PROCEDURE IF EXISTS sp76;
@@ -19585,9 +21064,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute76();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000010 000000000010 000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000010 000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute76;
DROP PROCEDURE sp76;
DROP PROCEDURE IF EXISTS sp77;
@@ -19619,9 +21098,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute77();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000010 000000000010 000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000010 000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute77;
DROP PROCEDURE sp77;
DROP PROCEDURE IF EXISTS sp78;
@@ -19653,9 +21132,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute78();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000010 000000000010 000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000010 000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute78;
DROP PROCEDURE sp78;
DROP PROCEDURE IF EXISTS sp79;
@@ -19687,9 +21166,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute79();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000010 0000000000000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute79;
DROP PROCEDURE sp79;
DROP PROCEDURE IF EXISTS sp80;
@@ -19721,9 +21200,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute80();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--2150000000 -2150000000 -2149999990 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-2147483638 -2147483638 -2147483628 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--2150000000 -2149999990 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-2147483638 -2147483628 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute80;
DROP PROCEDURE sp80;
DROP PROCEDURE IF EXISTS sp81;
@@ -19823,9 +21302,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute83();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-215000000 215000000 215000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0215000000 0215000000 0215000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-215000000 215000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0215000000 0215000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute83;
DROP PROCEDURE sp83;
DROP PROCEDURE IF EXISTS sp84;
@@ -19857,9 +21336,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute84();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--8388600 -8388600 -8388590 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-8388598 -8388598 -8388588 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--8388600 -8388590 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-8388598 -8388588 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute84;
DROP PROCEDURE sp84;
DROP PROCEDURE IF EXISTS sp85;
@@ -19925,9 +21404,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute86();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-16777210 16777210 16777220 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+16777210 16777210 16777215 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-16777210 16777220 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+16777210 16777215 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute86;
DROP PROCEDURE sp86;
DROP PROCEDURE IF EXISTS sp87;
@@ -19959,9 +21438,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute87();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--8388602 -8388602 -8388592 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+16777215 16777215 16777215 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--8388602 -8388592 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+16777215 16777215 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute87;
DROP PROCEDURE sp87;
DROP PROCEDURE IF EXISTS sp88;
@@ -19993,9 +21472,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute88();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-99999999.000000000 99999999.000000000 100000009.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0100000000 0100000000 0100000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-99999999.000000000 100000009.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0100000000 0100000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute88;
DROP PROCEDURE sp88;
DROP PROCEDURE IF EXISTS sp89;
@@ -20027,9 +21506,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute89();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-99999999.000000000 99999999.000000000 100000009.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0100000000 0100000000 0100000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-99999999.000000000 100000009.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0100000000 0100000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute89;
DROP PROCEDURE sp89;
DROP PROCEDURE IF EXISTS sp90;
@@ -20061,9 +21540,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute90();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-100000000000000000000.000000000 10000000000000000000000.000000000 100000000000000000010.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+100000000000000000000.000000000000000000000000000000 10000000000000000000000.000000000000000000000000000000 100000000000000000010.000000000000000000000000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-10000000000000000000000.000000000 100000000000000000010.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10000000000000000000000.000000000000000000000000000000 100000000000000000010.000000000000000000000000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute90;
DROP PROCEDURE sp90;
DROP PROCEDURE IF EXISTS sp91;
@@ -20095,9 +21574,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute91();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-100000000000000000000.000000000 10000000000000000000000.000000000 100000000000000000010.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000000100000000000000000000.000000000000000000000000000000 000000000010000000000000000000000.000000000000000000000000000000 000000000000100000000000000000010.000000000000000000000000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-10000000000000000000000.000000000 100000000000000000010.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000010000000000000000000000.000000000000000000000000000000 000000000000100000000000000000010.000000000000000000000000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute91;
DROP PROCEDURE sp91;
DROP PROCEDURE IF EXISTS sp92;
@@ -20129,9 +21608,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute92();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--100000000000000000000.000000000 -10000000000000000000000.000000000 -99999999999999999990.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000000000000000000000000010.000000000000000000000000000000 000000000000000000000000000000010.000000000000000000000000000000 000000000000000000000000000000020.000000000000000000000000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--10000000000000000000000.000000000 -99999999999999999990.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000000000000000000000000010.000000000000000000000000000000 000000000000000000000000000000020.000000000000000000000000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute92;
DROP PROCEDURE sp92;
DROP PROCEDURE IF EXISTS sp93;
@@ -20163,9 +21642,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute93();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-100000000000000000000.000000000 10000000000000000000000.000000000 100000000000000000010.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000000000000000000000000000000000000000100000000000000000000 0000000000000000000000000000000000000000010000000000000000000000 0000000000000000000000000000000000000000000100000000000000000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-10000000000000000000000.000000000 100000000000000000010.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000000000000000000000000000000000000010000000000000000000000 0000000000000000000000000000000000000000000100000000000000000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute93;
DROP PROCEDURE sp93;
DROP PROCEDURE IF EXISTS sp94;
@@ -20231,9 +21710,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute95();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-65532 65532 65542 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+65532 65532 65535 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-65532 65542 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+65532 65535 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute95;
DROP PROCEDURE sp95;
DROP PROCEDURE IF EXISTS sp96;
@@ -20265,9 +21744,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute96();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-65532 65532 65542 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+65532 65532 65535 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-65532 65542 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+65532 65535 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute96;
DROP PROCEDURE sp96;
DROP PROCEDURE IF EXISTS sp97;
@@ -20299,9 +21778,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute97();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--32602 -32602 -32592 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+65535 65535 65535 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--32602 -32592 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+65535 65535 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute97;
DROP PROCEDURE sp97;
DROP PROCEDURE IF EXISTS sp98;
@@ -20367,9 +21846,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute99();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-252 252 262 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+252 252 255 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-252 262 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+252 255 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute99;
DROP PROCEDURE sp99;
DROP PROCEDURE IF EXISTS sp100;
@@ -20435,9 +21914,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute101();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--102 -102 -92 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+255 255 255 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--102 -92 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+255 255 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute101;
DROP PROCEDURE sp101;
USE db_storedproc;
@@ -20462,13 +21941,13 @@ set a = '2005-03-14 01:01:02';
insert into temp_table values(a);
END//
show CREATE PROCEDURE sp2;
-Procedure sql_mode Create Procedure
-sp2 ALLOW_INVALID_DATES CREATE PROCEDURE `sp2`()
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp2 ALLOW_INVALID_DATES CREATE DEFINER=`root`@`localhost` PROCEDURE `sp2`()
BEGIN
declare a datetime;
set a = '2005-03-14 01:01:02';
insert into temp_table values(a);
-END
+END latin1 latin1_swedish_ci latin1_swedish_ci
set @@sql_mode = 'traditional';
CALL sp2 ();
SELECT * from temp_table;
@@ -20498,15 +21977,15 @@ set b = 5;
SELECT not 1 between a and b;
END//
show CREATE PROCEDURE sp3;
-Procedure sql_mode Create Procedure
-sp3 HIGH_NOT_PRECEDENCE CREATE PROCEDURE `sp3`()
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp3 HIGH_NOT_PRECEDENCE CREATE DEFINER=`root`@`localhost` PROCEDURE `sp3`()
BEGIN
declare a int signed;
declare b int unsigned;
set a = -5;
set b = 5;
SELECT not 1 between a and b;
-END
+END latin1 latin1_swedish_ci latin1_swedish_ci
set @@sql_mode='';
CALL sp3();
not 1 between a and b
@@ -20541,8 +22020,8 @@ set c = b/a;
show warnings;
END//
show CREATE PROCEDURE sp4;
-Procedure sql_mode Create Procedure
-sp4 REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI,ERROR_FOR_DIVISION_BY_ZERO CREATE PROCEDURE "sp4"()
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp4 REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI,ERROR_FOR_DIVISION_BY_ZERO CREATE DEFINER="root"@"localhost" PROCEDURE "sp4"()
BEGIN
declare a int;
declare b int;
@@ -20551,7 +22030,7 @@ set a = 0;
set b = 1;
set c = b/a;
show warnings;
-END
+END latin1 latin1_swedish_ci latin1_swedish_ci
set @@sql_mode='';
CALL sp4();
Level Code Message
@@ -20589,37 +22068,37 @@ set @x=i1;
set @y=@x;
END//
show CREATE PROCEDURE sp6a;
-Procedure sql_mode Create Procedure
-sp6a CREATE PROCEDURE `sp6a`(i1 longtext, out i2 mediumint , inout i3 longblob, in i4 year, out i5 real)
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp6a CREATE DEFINER=`root`@`localhost` PROCEDURE `sp6a`(i1 longtext, out i2 mediumint , inout i3 longblob, in i4 year, out i5 real)
BEGIN
set @x=i1;
set @y=@x;
-END
+END latin1 latin1_swedish_ci latin1_swedish_ci
show CREATE PROCEDURE sp6b;
-Procedure sql_mode Create Procedure
-sp6b CREATE PROCEDURE `sp6b`(out i1 longtext, out i2 mediumint , out i3 longblob, out i4 year, out i5 real)
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp6b CREATE DEFINER=`root`@`localhost` PROCEDURE `sp6b`(out i1 longtext, out i2 mediumint , out i3 longblob, out i4 year, out i5 real)
DETERMINISTIC
BEGIN
set @x=i1;
set @y=@x;
-END
+END latin1 latin1_swedish_ci latin1_swedish_ci
show CREATE PROCEDURE sp6c;
-Procedure sql_mode Create Procedure
-sp6c CREATE PROCEDURE `sp6c`(inout i1 longtext, inout i2 mediumint , inout i3 longblob, inout i4 year, inout i5 real)
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp6c CREATE DEFINER=`root`@`localhost` PROCEDURE `sp6c`(inout i1 longtext, inout i2 mediumint , inout i3 longblob, inout i4 year, inout i5 real)
COMMENT 'this is a comment'
BEGIN
set @x=i1;
set @y=@x;
-END
+END latin1 latin1_swedish_ci latin1_swedish_ci
SHOW PROCEDURE status like 'sp6a';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp6a PROCEDURE root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp6a PROCEDURE root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
SHOW PROCEDURE status like 'sp6b';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp6b PROCEDURE root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp6b PROCEDURE root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
SHOW PROCEDURE status like 'sp6c';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp6c PROCEDURE root@localhost modified created DEFINER this is a comment
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp6c PROCEDURE root@localhost modified created DEFINER this is a comment latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE sp6a;
DROP PROCEDURE sp6b;
DROP PROCEDURE sp6c;
@@ -20633,8 +22112,8 @@ set @x=i1;
set @y=@x;
END//
SHOW PROCEDURE status like 'sp6';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp6 PROCEDURE root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp6 PROCEDURE root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE sp6;
Testcase 4.8.3:
@@ -20659,8 +22138,8 @@ set @y=@x;
return 0;
END//
show function status like 'sp6';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp6 FUNCTION root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp6 FUNCTION root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION sp6;
Testcase 4.8.5:
@@ -20673,7 +22152,7 @@ Testcase 4.8.6:
--------------------------------------------------------------------------------
DROP PROCEDURE IF EXISTS sp6;
show procedure status like 'sp6';
-Db Name Type Definer Modified Created Security_type Comment
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
Testcase 4.8.7:
--------------------------------------------------------------------------------
@@ -20694,7 +22173,7 @@ BEGIN
return i1;
END//
show procedure status like 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
DROP FUNCTION fn1;
Testcase 4.8.9:
@@ -20708,8 +22187,8 @@ BEGIN
return i1;
END//
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION fn1;
Testcase 4.8.11:
@@ -20738,7 +22217,7 @@ Testcase 4.8.13:
--------------------------------------------------------------------------------
DROP FUNCTION IF EXISTS f1000;
SHOW FUNCTION STATUS LIKE 'f1000';
-Db Name Type Definer Modified Created Security_type Comment
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
Testcase 4.8.14:
--------------------------------------------------------------------------------
@@ -20760,7 +22239,7 @@ set @x=i1;
set @y=@x;
END//
show function status like 'sp6';
-Db Name Type Definer Modified Created Security_type Comment
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
DROP PROCEDURE sp6;
Testcase 4.8.16:
@@ -20777,8 +22256,8 @@ END//
alter procedure sp6 sql security invoker;
alter procedure sp6 comment 'this is a new comment';
SHOW PROCEDURE status like 'sp6';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp6 PROCEDURE root@localhost modified created INVOKER this is a new comment
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp6 PROCEDURE root@localhost modified created INVOKER this is a new comment latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE sp6;
Testcase 4.8.18:
@@ -20790,12 +22269,12 @@ return x;
END//
alter function fn1 sql security invoker;
show create function fn1;
-Function sql_mode Create Function
-fn1 CREATE FUNCTION `fn1`(x int) RETURNS int(11)
+Function sql_mode Create Function character_set_client collation_connection Database Collation
+fn1 CREATE DEFINER=`root`@`localhost` FUNCTION `fn1`(x int) RETURNS int(11)
SQL SECURITY INVOKER
BEGIN
return x;
-END
+END latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION fn1;
Testcase 4.8.19:
@@ -20808,8 +22287,8 @@ END//
alter function fn1 sql security invoker;
alter function fn1 comment 'this is a function 3242#@%$#@';
show function status like 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created INVOKER this is a function 3242#@%$#@
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created INVOKER this is a function 3242#@%$#@ latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION fn1;
Testcase 4.8.20:
@@ -20822,13 +22301,13 @@ set @y=@x;
END//
alter procedure sp6 comment 'this is simple';
show CREATE PROCEDURE sp6;
-Procedure sql_mode Create Procedure
-sp6 CREATE PROCEDURE `sp6`(i1 int , i2 int)
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp6 CREATE DEFINER=`root`@`localhost` PROCEDURE `sp6`(i1 int , i2 int)
COMMENT 'this is simple'
BEGIN
set @x=i1;
set @y=@x;
-END
+END latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE sp6;
Testcase 4.8.21:
@@ -20853,7 +22332,7 @@ set @y=@x;
END//
DROP PROCEDURE sp6;
SHOW PROCEDURE status like 'sp6';
-Db Name Type Definer Modified Created Security_type Comment
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
Testcase 4.8.23:
--------------------------------------------------------------------------------
@@ -20875,7 +22354,7 @@ return i1;
END//
DROP FUNCTION fn1;
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
Section 3.1.9 - Routine body checks:
--------------------------------------------------------------------------------
@@ -20894,16 +22373,16 @@ SELECT * from t9 limit 0, 100;
END//
CALL sp6 (10, 20, 30, 40, 50);
f1 f2 f3
--5000 a` -5000
--4999 aaa -4999
--4998 abaa -4998
--4997 acaaa -4997
--4996 adaaaa -4996
--4995 aeaaaaa -4995
--4994 afaaaaaa -4994
--4993 agaaaaaaa -4993
--4992 a^aaaaaaaa -4992
-4991 a_aaaaaaaaa -4991
+-4992 a^aaaaaaaa -4992
+-4993 agaaaaaaa -4993
+-4994 afaaaaaa -4994
+-4995 aeaaaaa -4995
+-4996 adaaaa -4996
+-4997 acaaa -4997
+-4998 abaa -4998
+-4999 aaa -4999
+-5000 a` -5000
DROP PROCEDURE sp6;
Testcase 4.9.2:
@@ -21363,9 +22842,16 @@ until done END repeat;
SELECT done;
close cur1;
END//
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+CALL h1();
+done
+0
+done
+1
+done
+1
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.14:
--------------------------------------------------------------------------------
@@ -21392,9 +22878,16 @@ until done END repeat;
SELECT done;
close cur1;
END//
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+CALL h1();
+done
+0
+done
+1
+done
+1
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.15:
--------------------------------------------------------------------------------
@@ -21422,9 +22915,16 @@ until done END repeat;
SELECT done;
close cur1;
END//
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+CALL h1();
+done
+0
+@x=1
+0
+done
+1
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.16:
--------------------------------------------------------------------------------
@@ -21452,17 +22952,16 @@ until done END repeat;
SELECT done;
close cur1;
END//
-CALL h1()
-# cleanup;
+CALL h1();
done
0
@x=1
0
done
1
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.17:
--------------------------------------------------------------------------------
@@ -21490,9 +22989,9 @@ done
0
done
1
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.18:
--------------------------------------------------------------------------------
@@ -21520,9 +23019,9 @@ done
0
done
1
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.19:
--------------------------------------------------------------------------------
@@ -21550,9 +23049,9 @@ END//
CALL h1();
done
0
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.20:
--------------------------------------------------------------------------------
@@ -21580,9 +23079,9 @@ END//
CALL h1();
done
0
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.21:
--------------------------------------------------------------------------------
@@ -21610,9 +23109,9 @@ done
0
done
1
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.22:
--------------------------------------------------------------------------------
@@ -21641,9 +23140,9 @@ done
0
done @x
1 1
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.23:
--------------------------------------------------------------------------------
@@ -21671,9 +23170,9 @@ END//
CALL h1();
done
0
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.24:
--------------------------------------------------------------------------------
@@ -21701,9 +23200,9 @@ END//
CALL h1();
done
0
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.25:
--------------------------------------------------------------------------------
@@ -21728,9 +23227,9 @@ END//
CALL h1();
done @x
1 1
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.26:
--------------------------------------------------------------------------------
@@ -21755,9 +23254,9 @@ END//
CALL h1();
done @x
1 1
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.27:
--------------------------------------------------------------------------------
@@ -21780,9 +23279,9 @@ set @x=1;
SELECT done, @x;
END//
CALL h1();
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.28:
--------------------------------------------------------------------------------
@@ -21805,9 +23304,9 @@ set @x=1;
SELECT done, @x;
END//
CALL h1();
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+drop table IF EXISTS res_t1;
+drop table IF EXISTS res_t2;
Testcase 4.11.29:
--------------------------------------------------------------------------------
@@ -21835,9 +23334,9 @@ END//
CALL h1();
done @x
1 1
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+drop table IF EXISTS res_t1;
+drop table IF EXISTS res_t2;
Testcase 4.11.30:
--------------------------------------------------------------------------------
@@ -21865,9 +23364,9 @@ END//
CALL h1();
done @x
1 1
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+drop table IF EXISTS res_t1;
+drop table IF EXISTS res_t2;
Testcase 4.11.31:
--------------------------------------------------------------------------------
@@ -21893,9 +23392,9 @@ set @x=1;
SELECT done, @x;
END//
CALL h1();
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+drop table IF EXISTS res_t1;
+drop table IF EXISTS res_t2;
Testcase 4.11.32:
--------------------------------------------------------------------------------
@@ -21921,9 +23420,9 @@ set @x=1;
SELECT done, @x;
END//
CALL h1();
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.33:
--------------------------------------------------------------------------------
@@ -21948,7 +23447,7 @@ set @x=1;
SELECT done, @x;
END//
ERROR 42000: Duplicate condition: condname
-drop table res_t1;
+DROP TABLE IF EXISTS res_t1;
Testcase 4.11.35:
--------------------------------------------------------------------------------
@@ -21973,7 +23472,21 @@ insert into res_t1 values (3, 'c');
END begin2_label;
END begin1_label//
ERROR 42000: Bad SQLSTATE: '020'
-drop table res_t1;
+CREATE PROCEDURE h1 ()
+begin1_label:BEGIN
+declare condname1 condition for sqlstate '020';
+declare condname2 condition for sqlstate 'wewe';
+declare condname3 condition for 9999;
+set @var2 = 1;
+insert into res_t1 values (2, 'b');
+begin2_label: BEGIN
+declare continue handler for sqlstate '90000023' set @var3= 1;
+set @var4 = 1;
+insert into res_t1 values (3, 'c');
+END begin2_label;
+END begin1_label//
+ERROR 42000: Bad SQLSTATE: '020'
+DROP TABLE IF EXISTS res_t1;
Testcase 4.11.36:
--------------------------------------------------------------------------------
@@ -21989,7 +23502,7 @@ set x1 = 2;
END;
SELECT @x, x1;
END//
-DROP PROCEDURE h1;
+DROP PROCEDURE IF EXISTS h1;
Testcase 4.11.40:
--------------------------------------------------------------------------------
@@ -22010,7 +23523,7 @@ declare exit handler for condname2 set x5 = 1;
END//
ERROR 42000: Duplicate handler declared in the same block
DROP PROCEDURE IF EXISTS h1;
-drop table res_t1;
+DROP TABLE IF EXISTS res_t1;
Testcase 4.11.41:
--------------------------------------------------------------------------------
@@ -22026,6 +23539,9 @@ set x1 = 2;
END;
SELECT @x, x1;
END//
+CALL h1();
+@x x1
+0 2
DROP PROCEDURE IF EXISTS h1;
* Testcase 3.1.2.53 (4.11.42):
@@ -22076,8 +23592,8 @@ CALL h1();
SELECT @done, @x;
@done @x
1 1
-DROP PROCEDURE h1;
-DROP TABLE res_t1;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
--source suite/funcs_1/storedproc/cleanup_sp_tb.inc
--------------------------------------------------------------------------------
diff --git a/mysql-test/suite/funcs_1/r/innodb_storedproc_10.result b/mysql-test/suite/funcs_1/r/innodb_storedproc_10.result
index 84ef164b0dc..f8e5cc98691 100755
--- a/mysql-test/suite/funcs_1/r/innodb_storedproc_10.result
+++ b/mysql-test/suite/funcs_1/r/innodb_storedproc_10.result
@@ -58,6 +58,7 @@ load data infile 'MYSQL_TEST_DIR/suite/funcs_1/data/t4.txt' into table t11;
Section 3.1.10 - CALL checks:
--------------------------------------------------------------------------------
+USE db_storedproc;
Testcase 3.1.10.2 + 3.1.10.5:
-----------------------------
@@ -94,6 +95,7 @@ CALL sp31102();
ERROR 42000: execute command denied to user 'user_2'@'localhost' for routine 'db_storedproc.sp31102'
SELECT fn31105( 9 );
ERROR 42000: execute command denied to user 'user_2'@'localhost' for routine 'db_storedproc.fn31105'
+connection default;
USE db_storedproc;
root@localhost db_storedproc
@@ -114,6 +116,7 @@ a` a` 1000-01-01 -5000 a` -5000
SELECT fn31105( 9 );
fn31105( 9 )
81
+connection default;
USE db_storedproc;
root@localhost db_storedproc
@@ -180,6 +183,8 @@ DROP PROCEDURE IF EXISTS sp_ins_1;
DROP PROCEDURE IF EXISTS sp_ins_3;
DROP PROCEDURE IF EXISTS sp_upd;
DROP PROCEDURE IF EXISTS sp_ins_upd;
+DROP PROCEDURE IF EXISTS sp_del;
+DROP PROCEDURE IF EXISTS sp_with_rowcount;
CREATE TABLE temp(f1 CHAR(20),f2 CHAR(25),f3 DATE,f4 INT,f5 CHAR(25),f6 INT);
INSERT INTO temp SELECT * FROM t10;
CREATE PROCEDURE sp_ins_1()
@@ -207,49 +212,72 @@ END;
SELECT COUNT( f1 ), f1 FROM temp GROUP BY f1;
UPDATE temp SET temp.f1 = 'updated_2' WHERE temp.f1 ='qwe' AND temp.f2 = 'abc';
END//
+CREATE PROCEDURE sp_del()
+BEGIN
+DELETE FROM temp WHERE temp.f1 ='qwe' OR temp.f1 = 'updated_2';
+END//
+CREATE PROCEDURE sp_with_rowcount()
+BEGIN
+BEGIN
+INSERT INTO temp VALUES ('qwe', 'abc', '1989-11-09', 100, 'uvw', 1000),
+('qwe', 'xyz', '1998-03-26', 100, 'uvw', 1000),
+('qwe', 'abc', '2000-11-09', 100, 'uvw', 1000),
+('qwe', 'xyz', '2005-11-07', 100, 'uvw', 1000);
+END;
+SELECT row_count() AS 'row_count() after insert';
+SELECT row_count() AS 'row_count() after select row_count()';
+SELECT f1,f2,f3 FROM temp ORDER BY f1,f2,f3;
+UPDATE temp SET temp.f1 = 'updated_2' WHERE temp.f2 = 'abc';
+SELECT row_count() AS 'row_count() after update';
+SELECT f1,f2,f3 FROM temp ORDER BY f1,f2,f3;
+DELETE FROM temp WHERE temp.f1 = 'updated_2';
+SELECT row_count() AS 'row_count() after delete';
+END//
CALL sp_ins_1();
SELECT row_count();
row_count()
1
-SELECT * FROM temp ORDER BY f4;
+SELECT * FROM temp;
f1 f2 f3 f4 f5 f6
+a^aaaaaaaa a^aaaaaaaa 1000-01-09 -4992 a^aaaaaaaa -4992
+a_aaaaaaaaa a_aaaaaaaaa 1000-01-10 -4991 a_aaaaaaaaa -4991
a` a` 1000-01-01 -5000 a` -5000
aaa aaa 1000-01-02 -4999 aaa -4999
abaa abaa 1000-01-03 -4998 abaa -4998
+abc abc 2005-10-03 100 uvw 1000
acaaa acaaa 1000-01-04 -4997 acaaa -4997
adaaaa adaaaa 1000-01-05 -4996 adaaaa -4996
aeaaaaa aeaaaaa 1000-01-06 -4995 aeaaaaa -4995
afaaaaaa afaaaaaa 1000-01-07 -4994 afaaaaaa -4994
agaaaaaaa agaaaaaaa 1000-01-08 -4993 agaaaaaaa -4993
-a^aaaaaaaa a^aaaaaaaa 1000-01-09 -4992 a^aaaaaaaa -4992
-a_aaaaaaaaa a_aaaaaaaaa 1000-01-10 -4991 a_aaaaaaaaa -4991
-abc abc 2005-10-03 100 uvw 1000
CALL sp_ins_3();
SELECT row_count();
row_count()
1
-SELECT * FROM temp ORDER BY f4;
+SELECT * FROM temp;
f1 f2 f3 f4 f5 f6
+a^aaaaaaaa a^aaaaaaaa 1000-01-09 -4992 a^aaaaaaaa -4992
+a_aaaaaaaaa a_aaaaaaaaa 1000-01-10 -4991 a_aaaaaaaaa -4991
a` a` 1000-01-01 -5000 a` -5000
aaa aaa 1000-01-02 -4999 aaa -4999
abaa abaa 1000-01-03 -4998 abaa -4998
+abc abc 2005-10-03 100 uvw 1000
+abc xyz 1949-05-23 100 uvw 1000
+abc xyz 1989-11-09 100 uvw 1000
+abc xyz 2005-10-24 100 uvw 1000
acaaa acaaa 1000-01-04 -4997 acaaa -4997
adaaaa adaaaa 1000-01-05 -4996 adaaaa -4996
aeaaaaa aeaaaaa 1000-01-06 -4995 aeaaaaa -4995
afaaaaaa afaaaaaa 1000-01-07 -4994 afaaaaaa -4994
agaaaaaaa agaaaaaaa 1000-01-08 -4993 agaaaaaaa -4993
-a^aaaaaaaa a^aaaaaaaa 1000-01-09 -4992 a^aaaaaaaa -4992
-a_aaaaaaaaa a_aaaaaaaaa 1000-01-10 -4991 a_aaaaaaaaa -4991
-abc abc 2005-10-03 100 uvw 1000
-abc xyz 1949-05-23 100 uvw 1000
-abc xyz 1989-11-09 100 uvw 1000
-abc xyz 2005-10-24 100 uvw 1000
CALL sp_upd();
SELECT row_count();
row_count()
4
-SELECT * FROM temp ORDER BY f4;
+SELECT * FROM temp;
f1 f2 f3 f4 f5 f6
+a^aaaaaaaa a^aaaaaaaa 1000-01-09 -4992 a^aaaaaaaa -4992
+a_aaaaaaaaa a_aaaaaaaaa 1000-01-10 -4991 a_aaaaaaaaa -4991
a` a` 1000-01-01 -5000 a` -5000
aaa aaa 1000-01-02 -4999 aaa -4999
abaa abaa 1000-01-03 -4998 abaa -4998
@@ -258,8 +286,6 @@ adaaaa adaaaa 1000-01-05 -4996 adaaaa -4996
aeaaaaa aeaaaaa 1000-01-06 -4995 aeaaaaa -4995
afaaaaaa afaaaaaa 1000-01-07 -4994 afaaaaaa -4994
agaaaaaaa agaaaaaaa 1000-01-08 -4993 agaaaaaaa -4993
-a^aaaaaaaa a^aaaaaaaa 1000-01-09 -4992 a^aaaaaaaa -4992
-a_aaaaaaaaa a_aaaaaaaaa 1000-01-10 -4991 a_aaaaaaaaa -4991
updated abc 2005-10-03 100 uvw 1000
updated xyz 1949-05-23 100 uvw 1000
updated xyz 1989-11-09 100 uvw 1000
@@ -281,8 +307,10 @@ COUNT( f1 ) f1
SELECT row_count();
row_count()
3
-SELECT * FROM temp ORDER BY f4;
+SELECT * FROM temp;
f1 f2 f3 f4 f5 f6
+a^aaaaaaaa a^aaaaaaaa 1000-01-09 -4992 a^aaaaaaaa -4992
+a_aaaaaaaaa a_aaaaaaaaa 1000-01-10 -4991 a_aaaaaaaaa -4991
a` a` 1000-01-01 -5000 a` -5000
aaa aaa 1000-01-02 -4999 aaa -4999
abaa abaa 1000-01-03 -4998 abaa -4998
@@ -291,20 +319,67 @@ adaaaa adaaaa 1000-01-05 -4996 adaaaa -4996
aeaaaaa aeaaaaa 1000-01-06 -4995 aeaaaaa -4995
afaaaaaa afaaaaaa 1000-01-07 -4994 afaaaaaa -4994
agaaaaaaa agaaaaaaa 1000-01-08 -4993 agaaaaaaa -4993
-a^aaaaaaaa a^aaaaaaaa 1000-01-09 -4992 a^aaaaaaaa -4992
-a_aaaaaaaaa a_aaaaaaaaa 1000-01-10 -4991 a_aaaaaaaaa -4991
+qwe xyz 1998-03-26 100 uvw 1000
updated abc 2005-10-03 100 uvw 1000
updated xyz 1949-05-23 100 uvw 1000
updated xyz 1989-11-09 100 uvw 1000
updated xyz 2005-10-24 100 uvw 1000
updated_2 abc 1989-11-09 100 uvw 1000
-qwe xyz 1998-03-26 100 uvw 1000
updated_2 abc 2000-11-09 100 uvw 1000
updated_2 abc 2005-11-07 100 uvw 1000
+CALL sp_del();
+SELECT row_count();
+row_count()
+4
+SELECT * FROM temp;
+f1 f2 f3 f4 f5 f6
+a^aaaaaaaa a^aaaaaaaa 1000-01-09 -4992 a^aaaaaaaa -4992
+a_aaaaaaaaa a_aaaaaaaaa 1000-01-10 -4991 a_aaaaaaaaa -4991
+a` a` 1000-01-01 -5000 a` -5000
+aaa aaa 1000-01-02 -4999 aaa -4999
+abaa abaa 1000-01-03 -4998 abaa -4998
+acaaa acaaa 1000-01-04 -4997 acaaa -4997
+adaaaa adaaaa 1000-01-05 -4996 adaaaa -4996
+aeaaaaa aeaaaaa 1000-01-06 -4995 aeaaaaa -4995
+afaaaaaa afaaaaaa 1000-01-07 -4994 afaaaaaa -4994
+agaaaaaaa agaaaaaaa 1000-01-08 -4993 agaaaaaaa -4993
+updated abc 2005-10-03 100 uvw 1000
+updated xyz 1949-05-23 100 uvw 1000
+updated xyz 1989-11-09 100 uvw 1000
+updated xyz 2005-10-24 100 uvw 1000
+DELETE FROM temp;
+CALL sp_with_rowcount();
+row_count() after insert
+4
+row_count() after select row_count()
+-1
+f1 f2 f3
+qwe abc 1989-11-09
+qwe abc 2000-11-09
+qwe xyz 1998-03-26
+qwe xyz 2005-11-07
+row_count() after update
+2
+f1 f2 f3
+qwe xyz 1998-03-26
+qwe xyz 2005-11-07
+updated_2 abc 1989-11-09
+updated_2 abc 2000-11-09
+row_count() after delete
+2
+SELECT row_count();
+row_count()
+-1
+SELECT * FROM temp;
+f1 f2 f3 f4 f5 f6
+qwe xyz 1998-03-26 100 uvw 1000
+qwe xyz 2005-11-07 100 uvw 1000
DROP PROCEDURE sp_ins_1;
DROP PROCEDURE sp_ins_3;
DROP PROCEDURE sp_upd;
DROP PROCEDURE sp_ins_upd;
+DROP PROCEDURE sp_del;
+DROP PROCEDURE sp_with_rowcount;
DROP TABLE temp;
Testcase 3.1.10.8:
diff --git a/mysql-test/suite/funcs_1/r/innodb_trig_03.result b/mysql-test/suite/funcs_1/r/innodb_trig_03.result
index c72a792a3a5..f4a47b03e19 100644
--- a/mysql-test/suite/funcs_1/r/innodb_trig_03.result
+++ b/mysql-test/suite/funcs_1/r/innodb_trig_03.result
@@ -184,15 +184,14 @@ insert 3.5.3.2-no
insert 3.5.3.6-no
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
-
-Trigger create disabled - should fail - Bug 8884
-------------------------------------------------
+create trigger trg4a_1 before INSERT on t1 for each row
+set new.f1 = 'trig 3.5.3.7-1a';
insert into t1 (f1) values ('insert 3.5.3.7-1a');
+ERROR 42000: UPDATE command denied to user 'test_noprivs'@'localhost' for column 'f1' in table 't1'
select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
insert 3.5.3.6-no
-insert 3.5.3.7-1a
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
drop trigger trg4a_1;
@@ -210,7 +209,6 @@ select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
insert 3.5.3.6-no
-insert 3.5.3.7-1a
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
trig 3.5.3.7-2a
@@ -239,29 +237,27 @@ Grants for test_noprivs@localhost
GRANT USAGE ON *.* TO 'test_noprivs'@'localhost' IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
GRANT SELECT, INSERT, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `priv_db`.* TO 'test_noprivs'@'localhost'
use priv_db;
-
-Trigger create disabled - should fail - Bug 8884
-------------------------------------------------
+create trigger trg4b_1 before UPDATE on t1 for each row
+set new.f1 = 'trig 3.5.3.7-1b';
insert into t1 (f1) values ('insert 3.5.3.7-1b');
select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
insert 3.5.3.6-no
-insert 3.5.3.7-1a
insert 3.5.3.7-1b
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
trig 3.5.3.7-2a
update t1 set f1 = 'update 3.5.3.7-1b' where f1 = 'insert 3.5.3.7-1b';
+ERROR 42000: UPDATE command denied to user 'test_noprivs'@'localhost' for column 'f1' in table 't1'
select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
insert 3.5.3.6-no
-insert 3.5.3.7-1a
+insert 3.5.3.7-1b
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
trig 3.5.3.7-2a
-update 3.5.3.7-1b
drop trigger trg4b_1;
show grants;
Grants for test_yesprivs@localhost
@@ -275,23 +271,21 @@ select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
insert 3.5.3.6-no
-insert 3.5.3.7-1a
+insert 3.5.3.7-1b
insert 3.5.3.7-2b
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
trig 3.5.3.7-2a
-update 3.5.3.7-1b
update t1 set f1 = 'update 3.5.3.7-2b' where f1 = 'insert 3.5.3.7-2b';
select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
insert 3.5.3.6-no
-insert 3.5.3.7-1a
+insert 3.5.3.7-1b
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
trig 3.5.3.7-2a
trig 3.5.3.7-2b
-update 3.5.3.7-1b
drop trigger trg4b_2;
Testcase 3.5.3.7c
@@ -317,21 +311,19 @@ Grants for test_noprivs@localhost
GRANT TRIGGER ON *.* TO 'test_noprivs'@'localhost' IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
GRANT SELECT, INSERT, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE VIEW, SHOW VIEW, TRIGGER ON `priv_db`.`t1` TO 'test_noprivs'@'localhost'
use priv_db;
-
-Trigger create disabled - should fail - Bug 8884
-------------------------------------------------
+create trigger trg4c_1 before INSERT on t1 for each row
+set new.f1 = 'trig 3.5.3.7-1c';
insert into t1 (f1) values ('insert 3.5.3.7-1c');
+ERROR 42000: UPDATE command denied to user 'test_noprivs'@'localhost' for column 'f1' in table 't1'
select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
insert 3.5.3.6-no
-insert 3.5.3.7-1a
-insert 3.5.3.7-1c
+insert 3.5.3.7-1b
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
trig 3.5.3.7-2a
trig 3.5.3.7-2b
-update 3.5.3.7-1b
drop trigger trg4c_1;
show grants;
Grants for test_yesprivs@localhost
@@ -345,14 +337,12 @@ select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
insert 3.5.3.6-no
-insert 3.5.3.7-1a
-insert 3.5.3.7-1c
+insert 3.5.3.7-1b
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
trig 3.5.3.7-2a
trig 3.5.3.7-2b
trig 3.5.3.7-2c
-update 3.5.3.7-1b
drop trigger trg4c_2;
Testcase 3.5.3.7d:
@@ -376,23 +366,20 @@ Grants for test_noprivs@localhost
GRANT TRIGGER ON *.* TO 'test_noprivs'@'localhost' IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
GRANT SELECT (f1), INSERT (f1) ON `priv_db`.`t1` TO 'test_noprivs'@'localhost'
use priv_db;
-
-Trigger create disabled - should fail - Bug 8884
-------------------------------------------------
+create trigger trg4d_1 before INSERT on t1 for each row
+set new.f1 = 'trig 3.5.3.7-1d';
insert into t1 (f1) values ('insert 3.5.3.7-1d');
+ERROR 42000: UPDATE command denied to user 'test_noprivs'@'localhost' for column 'f1' in table 't1'
select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
insert 3.5.3.6-no
-insert 3.5.3.7-1a
-insert 3.5.3.7-1c
-insert 3.5.3.7-1d
+insert 3.5.3.7-1b
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
trig 3.5.3.7-2a
trig 3.5.3.7-2b
trig 3.5.3.7-2c
-update 3.5.3.7-1b
drop trigger trg4d_1;
show grants;
Grants for test_yesprivs@localhost
@@ -406,16 +393,13 @@ select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
insert 3.5.3.6-no
-insert 3.5.3.7-1a
-insert 3.5.3.7-1c
-insert 3.5.3.7-1d
+insert 3.5.3.7-1b
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
trig 3.5.3.7-2a
trig 3.5.3.7-2b
trig 3.5.3.7-2c
trig 3.5.3.7-2d
-update 3.5.3.7-1b
drop trigger trg4d_2;
Testcase 3.5.3.8a:
@@ -440,14 +424,14 @@ use priv_db;
show grants;
Grants for test_noprivs@localhost
GRANT INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO 'test_noprivs'@'localhost' IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
-
-Trigger create disabled - should fail - Bug 8887
-------------------------------------------------
+create trigger trg5a_1 before INSERT on t1 for each row
+set @test_var = new.f1;
set @test_var = 'before trig 3.5.3.8-1a';
select @test_var;
@test_var
before trig 3.5.3.8-1a
insert into t1 (f1) values ('insert 3.5.3.8-1a');
+ERROR 42000: SELECT command denied to user 'test_noprivs'@'localhost' for column 'f1' in table 't1'
select @test_var;
@test_var
before trig 3.5.3.8-1a
@@ -495,15 +479,15 @@ Grants for test_noprivs@localhost
GRANT TRIGGER ON *.* TO 'test_noprivs'@'localhost' IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
GRANT INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `priv_db`.* TO 'test_noprivs'@'localhost'
use priv_db;
-
-Trigger create disabled - should fail - Bug 8887
-------------------------------------------------
+create trigger trg5b_1 before UPDATE on t1 for each row
+set @test_var= new.f1;
set @test_var= 'before trig 3.5.3.8-1b';
insert into t1 (f1) values ('insert 3.5.3.8-1b');
select @test_var;
@test_var
before trig 3.5.3.8-1b
update t1 set f1= 'update 3.5.3.8-1b' where f1 = 'insert 3.5.3.8-1b';
+ERROR 42000: SELECT command denied to user 'test_noprivs'@'localhost' for column 'f1' in table 't1'
select @test_var;
@test_var
before trig 3.5.3.8-1b
@@ -550,11 +534,11 @@ Grants for test_noprivs@localhost
GRANT TRIGGER ON *.* TO 'test_noprivs'@'localhost' IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
GRANT INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE VIEW, SHOW VIEW, TRIGGER ON `priv_db`.`t1` TO 'test_noprivs'@'localhost'
use priv_db;
-
-Trigger create disabled - should fail - Bug 8887
-------------------------------------------------
+create trigger trg5c_1 before INSERT on t1 for each row
+set @test_var= new.f1;
set @test_var= 'before trig 3.5.3.8-1c';
insert into t1 (f1) values ('insert 3.5.3.8-1c');
+ERROR 42000: SELECT command denied to user 'test_noprivs'@'localhost' for column 'f1' in table 't1'
select @test_var;
@test_var
before trig 3.5.3.8-1c
@@ -596,11 +580,11 @@ Grants for test_noprivs@localhost
GRANT TRIGGER ON *.* TO 'test_noprivs'@'localhost' IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
GRANT INSERT (f1), UPDATE (f1) ON `priv_db`.`t1` TO 'test_noprivs'@'localhost'
use priv_db;
-
-Trigger create disabled - should fail - Bug 8887
-------------------------------------------------
+create trigger trg5d_1 before INSERT on t1 for each row
+set @test_var= new.f1;
set @test_var='before trig 3.5.3.8-1d';
insert into t1 (f1) values ('insert 3.5.3.8-1d');
+ERROR 42000: SELECT command denied to user 'test_noprivs'@'localhost' for column 'f1' in table 't1'
select @test_var;
@test_var
before trig 3.5.3.8-1d
diff --git a/mysql-test/suite/funcs_1/r/innodb_trig_03e.result b/mysql-test/suite/funcs_1/r/innodb_trig_03e.result
index 0ccb27b9a48..0b3c0098658 100644
--- a/mysql-test/suite/funcs_1/r/innodb_trig_03e.result
+++ b/mysql-test/suite/funcs_1/r/innodb_trig_03e.result
@@ -571,10 +571,8 @@ test_yesprivs@localhost
use priv_db;
show triggers;
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 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;
diff --git a/mysql-test/suite/funcs_1/r/innodb_trig_08.result b/mysql-test/suite/funcs_1/r/innodb_trig_08.result
index 4388950aba1..dec9557e1e5 100644
--- a/mysql-test/suite/funcs_1/r/innodb_trig_08.result
+++ b/mysql-test/suite/funcs_1/r/innodb_trig_08.result
@@ -139,10 +139,10 @@ values ('1', 'Test 3.5.8.4', 222, 23456, 1.05);
Select f120, f122, f136, f144, f163 from tb3 where f122= 'Test 3.5.8.4';
f120 f122 f136 f144 f163
1 Test 3.5.8.4 00222 0000023456 1.050000000000000000000000000000
-select * from db_test.t1_i order by i120;
+select * from db_test.t1_i;
i120 i136 i144 i163
1 00222 0000023456 1.050000000000000000000000000000
-select * from db_test.t1_u order by u120;
+select * from db_test.t1_u;
u120 u136 u144 u163
a 00111 0000099999 999.990000000000000000000000000000
b 00222 0000023456 1.050000000000000000000000000000
@@ -150,7 +150,7 @@ c 00333 0000099999 999.990000000000000000000000000000
d 00222 0000023456 1.050000000000000000000000000000
e 00222 0000023456 1.050000000000000000000000000000
f 00333 0000099999 999.990000000000000000000000000000
-select * from db_test.t1_d order by d120;
+select * from db_test.t1_d;
d120 d136 d144 d163
a 00111 0000099999 999.990000000000000000000000000000
c 00333 0000099999 999.990000000000000000000000000000
@@ -343,20 +343,20 @@ set @test_var='Empty';
Insert into tb3 (f120, f122, f136, f144)
values ('a', 'Test 3.5.8.5-case', 5, 7);
select f120, f122, f136, f144, @test_var
-from tb3 where f122 = 'Test 3.5.8.5-case' order by f120;
+from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;
f120 f122 f136 f144 @test_var
A Test 3.5.8.5-case 00125 0000000007 A*seven
Insert into tb3 (f120, f122, f136, f144)
values ('b', 'Test 3.5.8.5-case', 71,16);
select f120, f122, f136, f144, @test_var
-from tb3 where f122 = 'Test 3.5.8.5-case' order by f120;
+from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;
f120 f122 f136 f144 @test_var
A Test 3.5.8.5-case 00125 0000000007 B*0000000016
B Test 3.5.8.5-case 00191 0000000016 B*0000000016
Insert into tb3 (f120, f122, f136, f144)
values ('c', 'Test 3.5.8.5-case', 80,1);
select f120, f122, f136, f144, @test_var
-from tb3 where f122 = 'Test 3.5.8.5-case' order by f120;
+from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;
f120 f122 f136 f144 @test_var
A Test 3.5.8.5-case 00125 0000000007 C=one
B Test 3.5.8.5-case 00191 0000000016 C=one
@@ -366,7 +366,7 @@ values ('d', 'Test 3.5.8.5-case', 152);
Warnings:
Warning 1265 Data truncated for column 'f120' at row 1
select f120, f122, f136, f144, @test_var
-from tb3 where f122 = 'Test 3.5.8.5-case' order by f120;
+from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;
f120 f122 f136 f144 @test_var
1 Test 3.5.8.5-case 00152 0000099999 1*0000099999
A Test 3.5.8.5-case 00125 0000000007 1*0000099999
@@ -377,7 +377,7 @@ values ('e', 'Test 3.5.8.5-case', 200, 8);
Warnings:
Warning 1265 Data truncated for column 'f120' at row 1
select f120, f122, f136, f144, @test_var
-from tb3 where f122 = 'Test 3.5.8.5-case' order by f120;
+from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;
f120 f122 f136 f144 @test_var
1 Test 3.5.8.5-case 00152 0000099999 1=eight
1 Test 3.5.8.5-case 00200 0000000008 1=eight
@@ -387,7 +387,7 @@ C Test 3.5.8.5-case 00200 0000000001 1=eight
Insert into tb3 (f120, f122, f136, f144)
values ('f', 'Test 3.5.8.5-case', 100, 8);
select f120, f122, f136, f144, @test_var
-from tb3 where f122 = 'Test 3.5.8.5-case' order by f120;
+from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;
f120 f122 f136 f144 @test_var
1 Test 3.5.8.5-case 00152 0000099999 1=eight
1 Test 3.5.8.5-case 00200 0000000008 1=eight
@@ -499,9 +499,38 @@ drop trigger trg7;
Testcase 3.5.8.6: (requirement void)
------------------------------------
+CREATE PROCEDURE sp_01 () BEGIN set @v1=1; END//
+CREATE TRIGGER trg8_1 BEFORE UPDATE ON tb3 FOR EACH ROW
+BEGIN
+CALL sp_01 ();
+END//
+Insert into tb3 (f120, f122, f136) values ('6', 'Test 3.5.8.6-insert', 101);
+update tb3 set f120='S', f136=111,
+f122='Test 3.5.8.6-tr8_1'
+ where f122='Test 3.5.8.6-insert';
+select f120, f122
+from tb3 where f122 like 'Test 3.5.8.6%' order by f120;
+f120 f122
+S Test 3.5.8.6-tr8_1
+DROP TRIGGER trg8_1;
+DROP PROCEDURE sp_01;
-Testcase 3.5.8.7: (Disabled as a result of bug _____)
------------------------------------------------------
+Testcase 3.5.8.7
+----------------
+Create trigger trg9_1 before update on tb3 for each row
+BEGIN
+Start transaction;
+Set new.f120='U';
+Commit;
+END//
+ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger.
+Create trigger trg9_2 before delete on tb3 for each row
+BEGIN
+Start transaction;
+Set @var2=old.f120;
+Rollback;
+END//
+ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger.
drop user test_general@localhost;
drop user test_general;
drop user test_super@localhost;
diff --git a/mysql-test/suite/funcs_1/r/innodb_trig_1011ext.result b/mysql-test/suite/funcs_1/r/innodb_trig_1011ext.result
index 6c9c1fb98c0..4ecd3c22999 100644
--- a/mysql-test/suite/funcs_1/r/innodb_trig_1011ext.result
+++ b/mysql-test/suite/funcs_1/r/innodb_trig_1011ext.result
@@ -294,8 +294,8 @@ drop table t2;
drop table t3;
drop table t4;
-Testcase y.y.y.4: Recursive trigger/SP references (disabled bug 11889)
-----------------------------------------------------------------------
+Testcase y.y.y.4: Recursive trigger/SP references
+-------------------------------------------------
set @sql_mode='traditional';
create table t1_sp (
count integer,
diff --git a/mysql-test/suite/funcs_1/r/innodb_views.result b/mysql-test/suite/funcs_1/r/innodb_views.result
index 48a97f80b14..06e7d065e18 100644
--- a/mysql-test/suite/funcs_1/r/innodb_views.result
+++ b/mysql-test/suite/funcs_1/r/innodb_views.result
@@ -123,11 +123,7 @@ USE test;
--------------------------------------------------------------------------------
There are some statements where the ps-protocol is switched off.
-Bug#11589: mysqltest, --ps-protocol, strange output, float/double/real with zerofill
---------------------------------------------------------------------------------
-
-! Attention: The file with the expected results suffers from
-Bug#10713: mysqldump includes database in create view and referenced tables
+Bug#32285: mysqltest, --ps-protocol, strange output, float/double/real with zerofill
--------------------------------------------------------------------------------
insert into test.tb2 (f59,f60) values (76710,226546);
insert into test.tb2 (f59,f60) values(2760,985654);
@@ -169,6 +165,58 @@ insert into tb2 (f59,f60,f61) values (109,108,104);
INSERT INTO tb2 (f59,f60) VALUES( 299,899 );
INSERT INTO tb2 (f59,f60) VALUES( 242,79 );
INSERT INTO tb2 (f59,f60) VALUES( 424,89 );
+SELECT * FROM tb2 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
+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
+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
+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
+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
Use test;
Testcase 3.3.1.1
@@ -203,27 +251,27 @@ f59 f60 f61
8 8 0000000008
9 9 0000000009
CREATE or REPLACE VIEW v1 AS select f59,f60,f61
-FROM test.tb2 limit 4,3;
-select * FROM v1 order by f59,f60,f61 limit 0,10;
+FROM test.tb2;
+select * FROM v1 order by f59,f60,f61 limit 4,3;
f59 f60 f61
+4 74 NULL
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 order by f59 limit 0,10;
+FROM test.tb2;
+select * FROM v1 order by f59 limit 4,3;
f59
5
6
7
ALTER VIEW v1 AS select f59
-FROM test.tb2 limit 6,2;
-select * FROM v1 order by f59 limit 0,10;
+FROM test.tb2;
+select * FROM v1 order by f59 limit 6,2;
f59
+6
7
-8
CREATE or REPLACE VIEW v1 AS select f59
-from tb2 order by f59 limit 100;
+from tb2 order by f59;
select * FROM v1 order by f59 limit 0,10;
f59
1
@@ -237,7 +285,7 @@ f59
8
9
CREATE or REPLACE VIEW v1 AS select f59
-from tb2 order by f59 asc limit 100;
+from tb2 order by f59 asc;
select * FROM v1 limit 0,10;
f59
1
@@ -251,7 +299,7 @@ f59
8
9
CREATE or REPLACE VIEW v1 AS select f59
-from tb2 order by f59 desc limit 100;
+from tb2 order by f59 desc;
select * FROM v1 limit 0,10;
f59
569300
@@ -265,7 +313,7 @@ f59
987
660
CREATE or REPLACE VIEW v1 AS select f59
-from tb2 group by f59 limit 100;
+from tb2 group by f59;
select * FROM v1 order by f59 limit 0,10;
f59
1
@@ -279,7 +327,7 @@ f59
9
10
CREATE or REPLACE VIEW v1 AS select f59
-from tb2 group by f59 asc limit 100;
+from tb2 group by f59 asc;
select * FROM v1 order by f59 limit 0,10;
f59
1
@@ -293,7 +341,7 @@ f59
9
10
CREATE or REPLACE VIEW v1 AS select f59
-from tb2 group by f59 desc limit 100;
+from tb2 group by f59 desc;
select * FROM v1 order by f59 limit 0,10;
f59
1
@@ -307,7 +355,7 @@ f59
9
10
CREATE or REPLACE VIEW v1 AS (select f59 from tb2)
-union (select f59 from t1) limit 100;
+union (select f59 from t1);
select * FROM v1 order by f59 limit 0,10;
f59
1
@@ -351,71 +399,3069 @@ f59
CREATE or REPLACE VIEW v1 AS select *
FROM test.tb2 WITH LOCAL CHECK OPTION ;
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
-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
-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
-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
+f59 1
+f60 1
+f61 0000000001
+f62 0000000000000000000000000000000000000000000000000000000000000001
+f63 0000000001
+f64 0000000000000000000000000000000000000000000000000000000000000001
+f65 -5
+f66 0.000000000000000000000000000000
+f67 1
+f68 0.000000000000000000000000000000
+f69 0000000001
+f70 000000000000000000000000000000000.000000000000000000000000000000
+f71 0000000001
+f72 000000000000000000000000000000000.000000000000000000000000000000
+f73 -1.17549435e-38
+f74 1.175494352e-38
+f75 00000001.175494352e-38
+f76 00000001.175494352e-38
+f77 -1.17549435e-38
+f78 1.175494352e-38
+f79 00000001.175494352e-38
+f80 00000001.175494352e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.17549435e-38
+f95 1.17549e-38
+f96 1.175494352e-38
+f97 01.17549e-38
+f98 00000001.175494352e-38
+f99 01.17549e-38
+f100 00000001.175494352e-38
+f101 1000-01-01
+f102 838:59:58
+f103 1970-01-02 00:00:01
+f104 1970-01-02 00:00:01
+f105 1902
+f106 1902
+f107 1902
+f108 2enum
+f109 2set
+f59 2
+f60 2
+f61 0000000002
+f62 0000000000000000000000000000000000000000000000000000000000000002
+f63 0000000002
+f64 0000000000000000000000000000000000000000000000000000000000000002
+f65 -4
+f66 1.100000000000000000000000000000
+f67 2
+f68 1.100000000000000000000000000000
+f69 0000000002
+f70 000000000000000000000000000000001.100000000000000000000000000000
+f71 0000000002
+f72 000000000000000000000000000000001.100000000000000000000000000000
+f73 -1.175494349e-38
+f74 1.175494353e-38
+f75 00000001.175494353e-38
+f76 00000001.175494353e-38
+f77 -1.175494349e-38
+f78 1.175494353e-38
+f79 00000001.175494353e-38
+f80 00000001.175494353e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494349e-38
+f95 1.17549e-38
+f96 1.175494353e-38
+f97 01.17549e-38
+f98 00000001.175494353e-38
+f99 01.17549e-38
+f100 00000001.175494353e-38
+f101 1000-01-02
+f102 838:59:57
+f103 1970-01-03 00:00:02
+f104 1970-01-03 00:00:02
+f105 1903
+f106 1903
+f107 1903
+f108 1enum
+f109 1set,2set
+f59 3
+f60 3
+f61 0000000003
+f62 0000000000000000000000000000000000000000000000000000000000000003
+f63 0000000003
+f64 0000000000000000000000000000000000000000000000000000000000000003
+f65 -3
+f66 2.200000000000000000000000000000
+f67 3
+f68 2.200000000000000000000000000000
+f69 0000000003
+f70 000000000000000000000000000000002.200000000000000000000000000000
+f71 0000000003
+f72 000000000000000000000000000000002.200000000000000000000000000000
+f73 -1.175494348e-38
+f74 1.175494354e-38
+f75 00000001.175494354e-38
+f76 00000001.175494354e-38
+f77 -1.175494348e-38
+f78 1.175494354e-38
+f79 00000001.175494354e-38
+f80 00000001.175494354e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494348e-38
+f95 1.17549e-38
+f96 1.175494354e-38
+f97 01.17549e-38
+f98 00000001.175494354e-38
+f99 01.17549e-38
+f100 00000001.175494354e-38
+f101 1000-01-03
+f102 838:59:56
+f103 1970-01-04 00:00:03
+f104 1970-01-04 00:00:03
+f105 1904
+f106 1904
+f107 1904
+f108 2enum
+f109 1set
+f59 4
+f60 4
+f61 0000000004
+f62 0000000000000000000000000000000000000000000000000000000000000004
+f63 0000000004
+f64 0000000000000000000000000000000000000000000000000000000000000004
+f65 -2
+f66 3.300000000000000000000000000000
+f67 4
+f68 3.300000000000000000000000000000
+f69 0000000004
+f70 000000000000000000000000000000003.300000000000000000000000000000
+f71 0000000004
+f72 000000000000000000000000000000003.300000000000000000000000000000
+f73 -1.175494347e-38
+f74 1.175494355e-38
+f75 00000001.175494355e-38
+f76 00000001.175494355e-38
+f77 -1.175494347e-38
+f78 1.175494355e-38
+f79 00000001.175494355e-38
+f80 00000001.175494355e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494347e-38
+f95 1.17549e-38
+f96 1.175494355e-38
+f97 01.17549e-38
+f98 00000001.175494355e-38
+f99 01.17549e-38
+f100 00000001.175494355e-38
+f101 1000-01-04
+f102 838:59:55
+f103 1970-01-05 00:00:04
+f104 1970-01-05 00:00:04
+f105 1905
+f106 1905
+f107 1905
+f108 1enum
+f109 2set
+f59 4
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 5
+f60 5
+f61 0000000005
+f62 0000000000000000000000000000000000000000000000000000000000000005
+f63 0000000005
+f64 0000000000000000000000000000000000000000000000000000000000000005
+f65 -1
+f66 4.400000000000000000000000000000
+f67 5
+f68 4.400000000000000000000000000000
+f69 0000000005
+f70 000000000000000000000000000000004.400000000000000000000000000000
+f71 0000000005
+f72 000000000000000000000000000000004.400000000000000000000000000000
+f73 -1.175494346e-38
+f74 1.175494356e-38
+f75 00000001.175494356e-38
+f76 00000001.175494356e-38
+f77 -1.175494346e-38
+f78 1.175494356e-38
+f79 00000001.175494356e-38
+f80 00000001.175494356e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494346e-38
+f95 1.17549e-38
+f96 1.175494356e-38
+f97 01.17549e-38
+f98 00000001.175494356e-38
+f99 01.17549e-38
+f100 00000001.175494356e-38
+f101 1000-01-05
+f102 838:59:54
+f103 1970-01-06 00:00:05
+f104 1970-01-06 00:00:05
+f105 1906
+f106 1906
+f107 1906
+f108 2enum
+f109 1set,2set
+f59 6
+f60 6
+f61 0000000006
+f62 0000000000000000000000000000000000000000000000000000000000000006
+f63 0000000006
+f64 0000000000000000000000000000000000000000000000000000000000000006
+f65 0
+f66 5.500000000000000000000000000000
+f67 6
+f68 5.500000000000000000000000000000
+f69 0000000006
+f70 000000000000000000000000000000005.500000000000000000000000000000
+f71 0000000006
+f72 000000000000000000000000000000005.500000000000000000000000000000
+f73 -1.175494345e-38
+f74 1.175494357e-38
+f75 00000001.175494357e-38
+f76 00000001.175494357e-38
+f77 -1.175494345e-38
+f78 1.175494357e-38
+f79 00000001.175494357e-38
+f80 00000001.175494357e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494345e-38
+f95 1.17549e-38
+f96 1.175494357e-38
+f97 01.17549e-38
+f98 00000001.175494357e-38
+f99 01.17549e-38
+f100 00000001.175494357e-38
+f101 1000-01-06
+f102 838:59:53
+f103 1970-01-07 00:00:06
+f104 1970-01-07 00:00:06
+f105 1907
+f106 1907
+f107 1907
+f108 1enum
+f109 1set
+f59 7
+f60 7
+f61 0000000007
+f62 0000000000000000000000000000000000000000000000000000000000000007
+f63 0000000007
+f64 0000000000000000000000000000000000000000000000000000000000000007
+f65 1
+f66 6.600000000000000000000000000000
+f67 7
+f68 6.600000000000000000000000000000
+f69 0000000007
+f70 000000000000000000000000000000006.600000000000000000000000000000
+f71 0000000007
+f72 000000000000000000000000000000006.600000000000000000000000000000
+f73 -1.175494344e-38
+f74 1.175494358e-38
+f75 00000001.175494358e-38
+f76 00000001.175494358e-38
+f77 -1.175494344e-38
+f78 1.175494358e-38
+f79 00000001.175494358e-38
+f80 00000001.175494358e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494344e-38
+f95 1.17549e-38
+f96 1.175494358e-38
+f97 01.17549e-38
+f98 00000001.175494358e-38
+f99 01.17549e-38
+f100 00000001.175494358e-38
+f101 1000-01-07
+f102 838:59:52
+f103 1970-01-08 00:00:07
+f104 1970-01-08 00:00:07
+f105 1908
+f106 1908
+f107 1908
+f108 2enum
+f109 2set
+f59 8
+f60 8
+f61 0000000008
+f62 0000000000000000000000000000000000000000000000000000000000000008
+f63 0000000008
+f64 0000000000000000000000000000000000000000000000000000000000000008
+f65 2
+f66 7.700000000000000000000000000000
+f67 8
+f68 7.700000000000000000000000000000
+f69 0000000008
+f70 000000000000000000000000000000007.700000000000000000000000000000
+f71 0000000008
+f72 000000000000000000000000000000007.700000000000000000000000000000
+f73 -1.175494343e-38
+f74 1.175494359e-38
+f75 00000001.175494359e-38
+f76 00000001.175494359e-38
+f77 -1.175494343e-38
+f78 1.175494359e-38
+f79 00000001.175494359e-38
+f80 00000001.175494359e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494343e-38
+f95 1.17549e-38
+f96 1.175494359e-38
+f97 01.17549e-38
+f98 00000001.175494359e-38
+f99 01.17549e-38
+f100 00000001.175494359e-38
+f101 1000-01-08
+f102 838:59:51
+f103 1970-01-09 00:00:08
+f104 1970-01-09 00:00:08
+f105 1909
+f106 1909
+f107 1909
+f108 1enum
+f109 1set,2set
+f59 9
+f60 9
+f61 0000000009
+f62 0000000000000000000000000000000000000000000000000000000000000009
+f63 0000000009
+f64 0000000000000000000000000000000000000000000000000000000000000009
+f65 3
+f66 8.800000000000000000000000000000
+f67 9
+f68 8.800000000000000000000000000000
+f69 0000000009
+f70 000000000000000000000000000000008.800000000000000000000000000000
+f71 0000000009
+f72 000000000000000000000000000000008.800000000000000000000000000000
+f73 -1.175494342e-38
+f74 1.17549436e-38
+f75 000000001.17549436e-38
+f76 000000001.17549436e-38
+f77 -1.175494342e-38
+f78 1.17549436e-38
+f79 000000001.17549436e-38
+f80 000000001.17549436e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494342e-38
+f95 1.17549e-38
+f96 1.17549436e-38
+f97 01.17549e-38
+f98 000000001.17549436e-38
+f99 01.17549e-38
+f100 000000001.17549436e-38
+f101 1000-01-09
+f102 838:59:50
+f103 1970-01-10 00:00:09
+f104 1970-01-10 00:00:09
+f105 1910
+f106 1910
+f107 1910
+f108 2enum
+f109 1set
+f59 10
+f60 10
+f61 0000000010
+f62 0000000000000000000000000000000000000000000000000000000000000010
+f63 0000000010
+f64 0000000000000000000000000000000000000000000000000000000000000010
+f65 4
+f66 9.900000000000000000000000000000
+f67 10
+f68 9.900000000000000000000000000000
+f69 0000000010
+f70 000000000000000000000000000000009.900000000000000000000000000000
+f71 0000000010
+f72 000000000000000000000000000000009.900000000000000000000000000000
+f73 -1.175494341e-38
+f74 1.175494361e-38
+f75 00000001.175494361e-38
+f76 00000001.175494361e-38
+f77 -1.175494341e-38
+f78 1.175494361e-38
+f79 00000001.175494361e-38
+f80 00000001.175494361e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494341e-38
+f95 1.17549e-38
+f96 1.175494361e-38
+f97 01.17549e-38
+f98 00000001.175494361e-38
+f99 01.17549e-38
+f100 00000001.175494361e-38
+f101 1000-01-10
+f102 838:59:49
+f103 1970-01-11 00:00:10
+f104 1970-01-11 00:00:10
+f105 1911
+f106 1911
+f107 1911
+f108 1enum
+f109 2set
+f59 15
+f60 87
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 17
+f60 15
+f61 0000000016
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 19
+f60 18
+f61 0000000014
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 22
+f60 93
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 24
+f60 51654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 27
+f60 25
+f61 0000000026
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 29
+f60 28
+f61 0000000024
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 34
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 94
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 107
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 107
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 109
+f60 108
+f61 0000000104
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 109
+f60 108
+f61 0000000104
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 195
+f60 87
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 207
+f60 205
+f61 0000000206
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 209
+f60 208
+f61 0000000204
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 242
+f60 79
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 250
+f60 87895654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 292
+f60 93
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 299
+f60 899
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 321
+f60 NULL
+f61 0000000765
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 323
+f60 14376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 340
+f60 9984376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 394
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 424
+f60 89
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 441
+f60 16546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 660
+f60 876546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 987
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 2550
+f60 775654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 2760
+f60 985654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 3330
+f60 764376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 3410
+f60 996546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 7876
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 9112
+f60 NULL
+f61 0000008771
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 76710
+f60 226546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 569300
+f60 9114376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
CREATE or REPLACE VIEW v1 AS select *
FROM test.tb2 WITH CASCADED CHECK OPTION ;
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
+f59 1
+f60 1
+f61 0000000001
+f62 0000000000000000000000000000000000000000000000000000000000000001
+f63 0000000001
+f64 0000000000000000000000000000000000000000000000000000000000000001
+f65 -5
+f66 0.000000000000000000000000000000
+f67 1
+f68 0.000000000000000000000000000000
+f69 0000000001
+f70 000000000000000000000000000000000.000000000000000000000000000000
+f71 0000000001
+f72 000000000000000000000000000000000.000000000000000000000000000000
+f73 -1.17549435e-38
+f74 1.175494352e-38
+f75 00000001.175494352e-38
+f76 00000001.175494352e-38
+f77 -1.17549435e-38
+f78 1.175494352e-38
+f79 00000001.175494352e-38
+f80 00000001.175494352e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.17549435e-38
+f95 1.17549e-38
+f96 1.175494352e-38
+f97 01.17549e-38
+f98 00000001.175494352e-38
+f99 01.17549e-38
+f100 00000001.175494352e-38
+f101 1000-01-01
+f102 838:59:58
+f103 1970-01-02 00:00:01
+f104 1970-01-02 00:00:01
+f105 1902
+f106 1902
+f107 1902
+f108 2enum
+f109 2set
+f59 2
+f60 2
+f61 0000000002
+f62 0000000000000000000000000000000000000000000000000000000000000002
+f63 0000000002
+f64 0000000000000000000000000000000000000000000000000000000000000002
+f65 -4
+f66 1.100000000000000000000000000000
+f67 2
+f68 1.100000000000000000000000000000
+f69 0000000002
+f70 000000000000000000000000000000001.100000000000000000000000000000
+f71 0000000002
+f72 000000000000000000000000000000001.100000000000000000000000000000
+f73 -1.175494349e-38
+f74 1.175494353e-38
+f75 00000001.175494353e-38
+f76 00000001.175494353e-38
+f77 -1.175494349e-38
+f78 1.175494353e-38
+f79 00000001.175494353e-38
+f80 00000001.175494353e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494349e-38
+f95 1.17549e-38
+f96 1.175494353e-38
+f97 01.17549e-38
+f98 00000001.175494353e-38
+f99 01.17549e-38
+f100 00000001.175494353e-38
+f101 1000-01-02
+f102 838:59:57
+f103 1970-01-03 00:00:02
+f104 1970-01-03 00:00:02
+f105 1903
+f106 1903
+f107 1903
+f108 1enum
+f109 1set,2set
+f59 3
+f60 3
+f61 0000000003
+f62 0000000000000000000000000000000000000000000000000000000000000003
+f63 0000000003
+f64 0000000000000000000000000000000000000000000000000000000000000003
+f65 -3
+f66 2.200000000000000000000000000000
+f67 3
+f68 2.200000000000000000000000000000
+f69 0000000003
+f70 000000000000000000000000000000002.200000000000000000000000000000
+f71 0000000003
+f72 000000000000000000000000000000002.200000000000000000000000000000
+f73 -1.175494348e-38
+f74 1.175494354e-38
+f75 00000001.175494354e-38
+f76 00000001.175494354e-38
+f77 -1.175494348e-38
+f78 1.175494354e-38
+f79 00000001.175494354e-38
+f80 00000001.175494354e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494348e-38
+f95 1.17549e-38
+f96 1.175494354e-38
+f97 01.17549e-38
+f98 00000001.175494354e-38
+f99 01.17549e-38
+f100 00000001.175494354e-38
+f101 1000-01-03
+f102 838:59:56
+f103 1970-01-04 00:00:03
+f104 1970-01-04 00:00:03
+f105 1904
+f106 1904
+f107 1904
+f108 2enum
+f109 1set
+f59 4
+f60 4
+f61 0000000004
+f62 0000000000000000000000000000000000000000000000000000000000000004
+f63 0000000004
+f64 0000000000000000000000000000000000000000000000000000000000000004
+f65 -2
+f66 3.300000000000000000000000000000
+f67 4
+f68 3.300000000000000000000000000000
+f69 0000000004
+f70 000000000000000000000000000000003.300000000000000000000000000000
+f71 0000000004
+f72 000000000000000000000000000000003.300000000000000000000000000000
+f73 -1.175494347e-38
+f74 1.175494355e-38
+f75 00000001.175494355e-38
+f76 00000001.175494355e-38
+f77 -1.175494347e-38
+f78 1.175494355e-38
+f79 00000001.175494355e-38
+f80 00000001.175494355e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494347e-38
+f95 1.17549e-38
+f96 1.175494355e-38
+f97 01.17549e-38
+f98 00000001.175494355e-38
+f99 01.17549e-38
+f100 00000001.175494355e-38
+f101 1000-01-04
+f102 838:59:55
+f103 1970-01-05 00:00:04
+f104 1970-01-05 00:00:04
+f105 1905
+f106 1905
+f107 1905
+f108 1enum
+f109 2set
+f59 4
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 5
+f60 5
+f61 0000000005
+f62 0000000000000000000000000000000000000000000000000000000000000005
+f63 0000000005
+f64 0000000000000000000000000000000000000000000000000000000000000005
+f65 -1
+f66 4.400000000000000000000000000000
+f67 5
+f68 4.400000000000000000000000000000
+f69 0000000005
+f70 000000000000000000000000000000004.400000000000000000000000000000
+f71 0000000005
+f72 000000000000000000000000000000004.400000000000000000000000000000
+f73 -1.175494346e-38
+f74 1.175494356e-38
+f75 00000001.175494356e-38
+f76 00000001.175494356e-38
+f77 -1.175494346e-38
+f78 1.175494356e-38
+f79 00000001.175494356e-38
+f80 00000001.175494356e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494346e-38
+f95 1.17549e-38
+f96 1.175494356e-38
+f97 01.17549e-38
+f98 00000001.175494356e-38
+f99 01.17549e-38
+f100 00000001.175494356e-38
+f101 1000-01-05
+f102 838:59:54
+f103 1970-01-06 00:00:05
+f104 1970-01-06 00:00:05
+f105 1906
+f106 1906
+f107 1906
+f108 2enum
+f109 1set,2set
+f59 6
+f60 6
+f61 0000000006
+f62 0000000000000000000000000000000000000000000000000000000000000006
+f63 0000000006
+f64 0000000000000000000000000000000000000000000000000000000000000006
+f65 0
+f66 5.500000000000000000000000000000
+f67 6
+f68 5.500000000000000000000000000000
+f69 0000000006
+f70 000000000000000000000000000000005.500000000000000000000000000000
+f71 0000000006
+f72 000000000000000000000000000000005.500000000000000000000000000000
+f73 -1.175494345e-38
+f74 1.175494357e-38
+f75 00000001.175494357e-38
+f76 00000001.175494357e-38
+f77 -1.175494345e-38
+f78 1.175494357e-38
+f79 00000001.175494357e-38
+f80 00000001.175494357e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494345e-38
+f95 1.17549e-38
+f96 1.175494357e-38
+f97 01.17549e-38
+f98 00000001.175494357e-38
+f99 01.17549e-38
+f100 00000001.175494357e-38
+f101 1000-01-06
+f102 838:59:53
+f103 1970-01-07 00:00:06
+f104 1970-01-07 00:00:06
+f105 1907
+f106 1907
+f107 1907
+f108 1enum
+f109 1set
+f59 7
+f60 7
+f61 0000000007
+f62 0000000000000000000000000000000000000000000000000000000000000007
+f63 0000000007
+f64 0000000000000000000000000000000000000000000000000000000000000007
+f65 1
+f66 6.600000000000000000000000000000
+f67 7
+f68 6.600000000000000000000000000000
+f69 0000000007
+f70 000000000000000000000000000000006.600000000000000000000000000000
+f71 0000000007
+f72 000000000000000000000000000000006.600000000000000000000000000000
+f73 -1.175494344e-38
+f74 1.175494358e-38
+f75 00000001.175494358e-38
+f76 00000001.175494358e-38
+f77 -1.175494344e-38
+f78 1.175494358e-38
+f79 00000001.175494358e-38
+f80 00000001.175494358e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494344e-38
+f95 1.17549e-38
+f96 1.175494358e-38
+f97 01.17549e-38
+f98 00000001.175494358e-38
+f99 01.17549e-38
+f100 00000001.175494358e-38
+f101 1000-01-07
+f102 838:59:52
+f103 1970-01-08 00:00:07
+f104 1970-01-08 00:00:07
+f105 1908
+f106 1908
+f107 1908
+f108 2enum
+f109 2set
+f59 8
+f60 8
+f61 0000000008
+f62 0000000000000000000000000000000000000000000000000000000000000008
+f63 0000000008
+f64 0000000000000000000000000000000000000000000000000000000000000008
+f65 2
+f66 7.700000000000000000000000000000
+f67 8
+f68 7.700000000000000000000000000000
+f69 0000000008
+f70 000000000000000000000000000000007.700000000000000000000000000000
+f71 0000000008
+f72 000000000000000000000000000000007.700000000000000000000000000000
+f73 -1.175494343e-38
+f74 1.175494359e-38
+f75 00000001.175494359e-38
+f76 00000001.175494359e-38
+f77 -1.175494343e-38
+f78 1.175494359e-38
+f79 00000001.175494359e-38
+f80 00000001.175494359e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494343e-38
+f95 1.17549e-38
+f96 1.175494359e-38
+f97 01.17549e-38
+f98 00000001.175494359e-38
+f99 01.17549e-38
+f100 00000001.175494359e-38
+f101 1000-01-08
+f102 838:59:51
+f103 1970-01-09 00:00:08
+f104 1970-01-09 00:00:08
+f105 1909
+f106 1909
+f107 1909
+f108 1enum
+f109 1set,2set
+f59 9
+f60 9
+f61 0000000009
+f62 0000000000000000000000000000000000000000000000000000000000000009
+f63 0000000009
+f64 0000000000000000000000000000000000000000000000000000000000000009
+f65 3
+f66 8.800000000000000000000000000000
+f67 9
+f68 8.800000000000000000000000000000
+f69 0000000009
+f70 000000000000000000000000000000008.800000000000000000000000000000
+f71 0000000009
+f72 000000000000000000000000000000008.800000000000000000000000000000
+f73 -1.175494342e-38
+f74 1.17549436e-38
+f75 000000001.17549436e-38
+f76 000000001.17549436e-38
+f77 -1.175494342e-38
+f78 1.17549436e-38
+f79 000000001.17549436e-38
+f80 000000001.17549436e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494342e-38
+f95 1.17549e-38
+f96 1.17549436e-38
+f97 01.17549e-38
+f98 000000001.17549436e-38
+f99 01.17549e-38
+f100 000000001.17549436e-38
+f101 1000-01-09
+f102 838:59:50
+f103 1970-01-10 00:00:09
+f104 1970-01-10 00:00:09
+f105 1910
+f106 1910
+f107 1910
+f108 2enum
+f109 1set
CREATE OR REPLACE VIEW v1 AS SELECT F59, F60
FROM test.tb2 WITH CASCADED CHECK OPTION;
SELECT * FROM v1 order by f59,f60 limit 0,10;
@@ -495,8 +3541,8 @@ DROP VIEW v1;
Testcase 3.3.1.3 + 3.1.1.4
--------------------------------------------------------------------------------
DROP VIEW IF EXISTS v1 ;
-CREATE VIEW v1 or REPLACE AS Select * from tb2 my_table limit 50;
-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 'or REPLACE AS Select * from tb2 my_table limit 50' at line 1
+CREATE VIEW v1 or REPLACE AS Select * from tb2 my_table;
+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 'or REPLACE AS Select * from tb2 my_table' at line 1
CREATE VIEW v1 WITH CASCADED CHECK OPTION AS Select *
from tb2 my_table limit 50;
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 'WITH CASCADED CHECK OPTION AS Select *
@@ -505,8 +3551,8 @@ CREATE VIEW v1 WITH LOCAL CHECK OPTION AS Select *
from tb2 my_table limit 50;
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 'WITH LOCAL CHECK OPTION AS Select *
from tb2 my_table limit 50' at line 1
-SELECT * FROM tb2 my_table CREATE VIEW As v1 limit 100 ;
-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 'CREATE VIEW As v1 limit 100' at line 1
+SELECT * FROM tb2 my_table CREATE VIEW As v1;
+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 'CREATE VIEW As v1' at line 1
CREATE or REPLACE VIEW v1 Select f59, f60
from test.tb2 my_table where f59 = 250 ;
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 'Select f59, f60
@@ -581,8 +3627,8 @@ Union ALL (Select from f1 t1);
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from f59 tb2)
Union ALL (Select from f1 t1)' at line 1
CREATE or REPLACE view v1 as Select f59, f60
-from tb2 by order f59 limit 100 ;
-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 'by order f59 limit 100' at line 2
+from tb2 by order f59;
+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 'by order f59' at line 2
CREATE or REPLACE view v1 as Select f59, f60
from tb2 by group f59 ;
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 'by group f59' at line 2
@@ -590,12 +3636,12 @@ ERROR 42000: You have an error in your SQL syntax; check the manual that corresp
Testcase 3.3.1.5
--------------------------------------------------------------------------------
DROP VIEW IF EXISTS v1 ;
-CREATE VIEW v1 SELECT * FROM tb2 limit 100 ;
-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 'SELECT * FROM tb2 limit 100' at line 1
-CREATE v1 AS SELECT * FROM tb2 limit 100 ;
-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 'v1 AS SELECT * FROM tb2 limit 100' at line 1
-VIEW v1 AS SELECT * FROM tb2 limit 100 ;
-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 'VIEW v1 AS SELECT * FROM tb2 limit 100' at line 1
+CREATE VIEW v1 SELECT * FROM tb2;
+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 'SELECT * FROM tb2' at line 1
+CREATE v1 AS SELECT * FROM tb2;
+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 'v1 AS SELECT * FROM tb2' at line 1
+VIEW v1 AS SELECT * FROM tb2;
+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 'VIEW v1 AS SELECT * FROM tb2' at line 1
CREATE VIEW v1 AS SELECT 1;
DROP VIEW v1;
VIEW v1 AS SELECT 1;
@@ -613,45 +3659,43 @@ Testcase 3.3.1.6
--------------------------------------------------------------------------------
DROP VIEW IF EXISTS v1 ;
CREATE or REPLACE VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
CREATE or REPLACE ALGORITHM = UNDEFINED VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
CREATE or REPLACE ALGORITHM = MERGE VIEW v1
-as SELECT * from tb2 limit 100 ;
-Warnings:
-Warning 1354 View merge algorithm can't be used here for now (assumed undefined algorithm)
+as SELECT * from tb2;
CREATE or REPLACE ALGORITHM = TEMPTABLE VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
CREATE or REPLACE ALGORITHM = TEMPTABLE VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
CREATE or REPLACE = TEMPTABLE VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
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 '= TEMPTABLE VIEW v1
-as SELECT * from tb2 limit 100' at line 1
+as SELECT * from tb2' at line 1
CREATE or REPLACE ALGORITHM TEMPTABLE VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
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 'TEMPTABLE VIEW v1
-as SELECT * from tb2 limit 100' at line 1
+as SELECT * from tb2' at line 1
CREATE or REPLACE ALGORITHM = VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
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 'VIEW v1
-as SELECT * from tb2 limit 100' at line 1
+as SELECT * from tb2' at line 1
CREATE or REPLACE TEMPTABLE = ALGORITHM VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
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 'TEMPTABLE = ALGORITHM VIEW v1
-as SELECT * from tb2 limit 100' at line 1
+as SELECT * from tb2' at line 1
CREATE or REPLACE TEMPTABLE - ALGORITHM VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
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 'TEMPTABLE - ALGORITHM VIEW v1
-as SELECT * from tb2 limit 100' at line 1
+as SELECT * from tb2' at line 1
CREATE or REPLACE GARBAGE = TEMPTABLE VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
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 'GARBAGE = TEMPTABLE VIEW v1
-as SELECT * from tb2 limit 100' at line 1
+as SELECT * from tb2' at line 1
CREATE or REPLACE ALGORITHM = GARBAGE VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
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 'GARBAGE VIEW v1
-as SELECT * from tb2 limit 100' at line 1
+as SELECT * from tb2' at line 1
Drop view if exists v1 ;
CREATE or REPLACE VIEW v1
AS SELECT * from tb2 where f59 < 1;
@@ -677,7 +3721,7 @@ ERROR 42000: You have an error in your SQL syntax; check the manual that corresp
Testcase 3.3.1.7
--------------------------------------------------------------------------------
DROP VIEW IF EXISTS v1 ;
-Create view test.v1 AS Select * from test.tb2 limit 100 ;
+Create view test.v1 AS Select * from test.tb2;
Alter view test.v1 AS Select F59 from test. tb2 limit 100 ;
Drop view test.v1 ;
Create view v1 AS Select * from test.tb2 limit 100 ;
@@ -881,16 +3925,115 @@ 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` 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;
+f59 1
+f60 1
+f61 0000000001
+f62 0000000000000000000000000000000000000000000000000000000000000001
+f63 0000000001
+f64 0000000000000000000000000000000000000000000000000000000000000001
+f65 -5
+f66 0.000000000000000000000000000000
+f67 1
+f68 0.000000000000000000000000000000
+f69 0000000001
+f70 000000000000000000000000000000000.000000000000000000000000000000
+f71 0000000001
+f72 000000000000000000000000000000000.000000000000000000000000000000
+f73 -1.17549435e-38
+f74 1.175494352e-38
+f75 00000001.175494352e-38
+f76 00000001.175494352e-38
+f77 -1.17549435e-38
+f78 1.175494352e-38
+f79 00000001.175494352e-38
+f80 00000001.175494352e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.17549435e-38
+f95 1.17549e-38
+f96 1.175494352e-38
+f97 01.17549e-38
+f98 00000001.175494352e-38
+f99 01.17549e-38
+f100 00000001.175494352e-38
+f101 1000-01-01
+f102 838:59:58
+f103 1970-01-02 00:00:01
+f104 1970-01-02 00:00:01
+f105 1902
+f106 1902
+f107 1902
+f108 2enum
+f109 2set
+f59 2
+f60 2
+f61 0000000002
+f62 0000000000000000000000000000000000000000000000000000000000000002
+f63 0000000002
+f64 0000000000000000000000000000000000000000000000000000000000000002
+f65 -4
+f66 1.100000000000000000000000000000
+f67 2
+f68 1.100000000000000000000000000000
+f69 0000000002
+f70 000000000000000000000000000000001.100000000000000000000000000000
+f71 0000000002
+f72 000000000000000000000000000000001.100000000000000000000000000000
+f73 -1.175494349e-38
+f74 1.175494353e-38
+f75 00000001.175494353e-38
+f76 00000001.175494353e-38
+f77 -1.175494349e-38
+f78 1.175494353e-38
+f79 00000001.175494353e-38
+f80 00000001.175494353e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494349e-38
+f95 1.17549e-38
+f96 1.175494353e-38
+f97 01.17549e-38
+f98 00000001.175494353e-38
+f99 01.17549e-38
+f100 00000001.175494353e-38
+f101 1000-01-02
+f102 838:59:57
+f103 1970-01-03 00:00:02
+f104 1970-01-03 00:00:02
+f105 1903
+f106 1903
+f107 1903
+f108 1enum
+f109 1set,2set
+CREATE OR REPLACE VIEW test.v1 AS SELECT F59 FROM tb2;
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 order by F59;
+v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `tb2`.`f59` AS `F59` from `tb2` latin1 latin1_swedish_ci
+SELECT * FROM test.v1 order by F59 limit 10,100;
F59
-4
+10
15
17
19
@@ -943,11 +4086,59 @@ ERROR HY000: 'test.tb2' is not VIEW
Testcase 3.3.1.15
--------------------------------------------------------------------------------
Drop table if exists test.v1 ;
-CREATE OR REPLACE view test.v1 as select * from tb2 LIMIT 2;
+CREATE OR REPLACE view test.v1 as select * from tb2;
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
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
+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
+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
+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
+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
+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
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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
Drop view test.v1 ;
Testcase 3.3.1.16 + 3.3.1.17
@@ -1080,8 +4271,8 @@ ERROR HY000: View's SELECT and view's field list have different column counts
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 order by F59, F60 desc;
+CREATE VIEW test.v1( F59, F60 ) AS SELECT F59, F60 From tb2;
+SELECT * FROM test.v1 order by F59, F60 desc LIMIT 2;
F59 F60
1 1
2 2
@@ -1090,7 +4281,7 @@ Drop view if exists test.v1 ;
Testcase 3.3.1.22
--------------------------------------------------------------------------------
DROP VIEW IF EXISTS v1;
-CREATE VIEW test.v1( product ) AS SELECT f59*f60 From tb2 LIMIT 2;
+CREATE VIEW test.v1( product ) AS SELECT f59*f60 From tb2 WHERE f59 < 3;
SELECT * FROM test.v1;
product
1
@@ -1177,85 +4368,2632 @@ DROP TEMPORARY TABLE t2;
Testcase 3.3.1.26
--------------------------------------------------------------------------------
DROP VIEW IF EXISTS v1;
-Create view test.v1 AS Select * from test.tb2 limit 2 ;
+Create view test.v1 AS Select * from test.tb2;
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
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
---------------------------------------------------------------------------------
-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 order by F59 limit 20 ;
-F59
-1
-2
-Drop view test.v1 ;
-Drop view test.v1_1 ;
-
-Testcase 3.3.1.28
---------------------------------------------------------------------------------
-Drop database if exists test2 ;
-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 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
-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
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
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
+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
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
+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
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
+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
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
+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
+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
+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
+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
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
+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
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
+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
+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
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
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
+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
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
+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
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
+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
+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
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
+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
+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
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
+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
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
+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
+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
+Drop view test.v1 ;
+
+Testcase 3.3.1.27
+--------------------------------------------------------------------------------
+DROP VIEW IF EXISTS test.v1;
+Drop VIEW IF EXISTS test.v1_1 ;
+Create view test.v1 AS Select * from test.tb2;
+Create view test.v1_1 AS Select F59 from test.v1 ;
+Select * from test.v1_1 order by F59 limit 2;
+F59
+1
+2
+Drop view test.v1 ;
+Drop view test.v1_1 ;
+
+Testcase 3.3.1.28
+--------------------------------------------------------------------------------
+Drop database if exists test2 ;
+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 order by f59,f60,f61,f62,f63,f64,f65;
+f59 1
+f60 1
+f61 0000000001
+f62 0000000000000000000000000000000000000000000000000000000000000001
+f63 0000000001
+f64 0000000000000000000000000000000000000000000000000000000000000001
+f65 -5
+f66 0.000000000000000000000000000000
+f67 1
+f68 0.000000000000000000000000000000
+f69 0000000001
+f70 000000000000000000000000000000000.000000000000000000000000000000
+f71 0000000001
+f72 000000000000000000000000000000000.000000000000000000000000000000
+f73 -1.17549435e-38
+f74 1.175494352e-38
+f75 00000001.175494352e-38
+f76 00000001.175494352e-38
+f77 -1.17549435e-38
+f78 1.175494352e-38
+f79 00000001.175494352e-38
+f80 00000001.175494352e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.17549435e-38
+f95 1.17549e-38
+f96 1.175494352e-38
+f97 01.17549e-38
+f98 00000001.175494352e-38
+f99 01.17549e-38
+f100 00000001.175494352e-38
+f101 1000-01-01
+f102 838:59:58
+f103 1970-01-02 00:00:01
+f104 1970-01-02 00:00:01
+f105 1902
+f106 1902
+f107 1902
+f108 2enum
+f109 2set
+f59 2
+f60 2
+f61 0000000002
+f62 0000000000000000000000000000000000000000000000000000000000000002
+f63 0000000002
+f64 0000000000000000000000000000000000000000000000000000000000000002
+f65 -4
+f66 1.100000000000000000000000000000
+f67 2
+f68 1.100000000000000000000000000000
+f69 0000000002
+f70 000000000000000000000000000000001.100000000000000000000000000000
+f71 0000000002
+f72 000000000000000000000000000000001.100000000000000000000000000000
+f73 -1.175494349e-38
+f74 1.175494353e-38
+f75 00000001.175494353e-38
+f76 00000001.175494353e-38
+f77 -1.175494349e-38
+f78 1.175494353e-38
+f79 00000001.175494353e-38
+f80 00000001.175494353e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494349e-38
+f95 1.17549e-38
+f96 1.175494353e-38
+f97 01.17549e-38
+f98 00000001.175494353e-38
+f99 01.17549e-38
+f100 00000001.175494353e-38
+f101 1000-01-02
+f102 838:59:57
+f103 1970-01-03 00:00:02
+f104 1970-01-03 00:00:02
+f105 1903
+f106 1903
+f107 1903
+f108 1enum
+f109 1set,2set
+f59 3
+f60 3
+f61 0000000003
+f62 0000000000000000000000000000000000000000000000000000000000000003
+f63 0000000003
+f64 0000000000000000000000000000000000000000000000000000000000000003
+f65 -3
+f66 2.200000000000000000000000000000
+f67 3
+f68 2.200000000000000000000000000000
+f69 0000000003
+f70 000000000000000000000000000000002.200000000000000000000000000000
+f71 0000000003
+f72 000000000000000000000000000000002.200000000000000000000000000000
+f73 -1.175494348e-38
+f74 1.175494354e-38
+f75 00000001.175494354e-38
+f76 00000001.175494354e-38
+f77 -1.175494348e-38
+f78 1.175494354e-38
+f79 00000001.175494354e-38
+f80 00000001.175494354e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494348e-38
+f95 1.17549e-38
+f96 1.175494354e-38
+f97 01.17549e-38
+f98 00000001.175494354e-38
+f99 01.17549e-38
+f100 00000001.175494354e-38
+f101 1000-01-03
+f102 838:59:56
+f103 1970-01-04 00:00:03
+f104 1970-01-04 00:00:03
+f105 1904
+f106 1904
+f107 1904
+f108 2enum
+f109 1set
+f59 4
+f60 4
+f61 0000000004
+f62 0000000000000000000000000000000000000000000000000000000000000004
+f63 0000000004
+f64 0000000000000000000000000000000000000000000000000000000000000004
+f65 -2
+f66 3.300000000000000000000000000000
+f67 4
+f68 3.300000000000000000000000000000
+f69 0000000004
+f70 000000000000000000000000000000003.300000000000000000000000000000
+f71 0000000004
+f72 000000000000000000000000000000003.300000000000000000000000000000
+f73 -1.175494347e-38
+f74 1.175494355e-38
+f75 00000001.175494355e-38
+f76 00000001.175494355e-38
+f77 -1.175494347e-38
+f78 1.175494355e-38
+f79 00000001.175494355e-38
+f80 00000001.175494355e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494347e-38
+f95 1.17549e-38
+f96 1.175494355e-38
+f97 01.17549e-38
+f98 00000001.175494355e-38
+f99 01.17549e-38
+f100 00000001.175494355e-38
+f101 1000-01-04
+f102 838:59:55
+f103 1970-01-05 00:00:04
+f104 1970-01-05 00:00:04
+f105 1905
+f106 1905
+f107 1905
+f108 1enum
+f109 2set
+f59 4
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 5
+f60 5
+f61 0000000005
+f62 0000000000000000000000000000000000000000000000000000000000000005
+f63 0000000005
+f64 0000000000000000000000000000000000000000000000000000000000000005
+f65 -1
+f66 4.400000000000000000000000000000
+f67 5
+f68 4.400000000000000000000000000000
+f69 0000000005
+f70 000000000000000000000000000000004.400000000000000000000000000000
+f71 0000000005
+f72 000000000000000000000000000000004.400000000000000000000000000000
+f73 -1.175494346e-38
+f74 1.175494356e-38
+f75 00000001.175494356e-38
+f76 00000001.175494356e-38
+f77 -1.175494346e-38
+f78 1.175494356e-38
+f79 00000001.175494356e-38
+f80 00000001.175494356e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494346e-38
+f95 1.17549e-38
+f96 1.175494356e-38
+f97 01.17549e-38
+f98 00000001.175494356e-38
+f99 01.17549e-38
+f100 00000001.175494356e-38
+f101 1000-01-05
+f102 838:59:54
+f103 1970-01-06 00:00:05
+f104 1970-01-06 00:00:05
+f105 1906
+f106 1906
+f107 1906
+f108 2enum
+f109 1set,2set
+f59 6
+f60 6
+f61 0000000006
+f62 0000000000000000000000000000000000000000000000000000000000000006
+f63 0000000006
+f64 0000000000000000000000000000000000000000000000000000000000000006
+f65 0
+f66 5.500000000000000000000000000000
+f67 6
+f68 5.500000000000000000000000000000
+f69 0000000006
+f70 000000000000000000000000000000005.500000000000000000000000000000
+f71 0000000006
+f72 000000000000000000000000000000005.500000000000000000000000000000
+f73 -1.175494345e-38
+f74 1.175494357e-38
+f75 00000001.175494357e-38
+f76 00000001.175494357e-38
+f77 -1.175494345e-38
+f78 1.175494357e-38
+f79 00000001.175494357e-38
+f80 00000001.175494357e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494345e-38
+f95 1.17549e-38
+f96 1.175494357e-38
+f97 01.17549e-38
+f98 00000001.175494357e-38
+f99 01.17549e-38
+f100 00000001.175494357e-38
+f101 1000-01-06
+f102 838:59:53
+f103 1970-01-07 00:00:06
+f104 1970-01-07 00:00:06
+f105 1907
+f106 1907
+f107 1907
+f108 1enum
+f109 1set
+f59 7
+f60 7
+f61 0000000007
+f62 0000000000000000000000000000000000000000000000000000000000000007
+f63 0000000007
+f64 0000000000000000000000000000000000000000000000000000000000000007
+f65 1
+f66 6.600000000000000000000000000000
+f67 7
+f68 6.600000000000000000000000000000
+f69 0000000007
+f70 000000000000000000000000000000006.600000000000000000000000000000
+f71 0000000007
+f72 000000000000000000000000000000006.600000000000000000000000000000
+f73 -1.175494344e-38
+f74 1.175494358e-38
+f75 00000001.175494358e-38
+f76 00000001.175494358e-38
+f77 -1.175494344e-38
+f78 1.175494358e-38
+f79 00000001.175494358e-38
+f80 00000001.175494358e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494344e-38
+f95 1.17549e-38
+f96 1.175494358e-38
+f97 01.17549e-38
+f98 00000001.175494358e-38
+f99 01.17549e-38
+f100 00000001.175494358e-38
+f101 1000-01-07
+f102 838:59:52
+f103 1970-01-08 00:00:07
+f104 1970-01-08 00:00:07
+f105 1908
+f106 1908
+f107 1908
+f108 2enum
+f109 2set
+f59 8
+f60 8
+f61 0000000008
+f62 0000000000000000000000000000000000000000000000000000000000000008
+f63 0000000008
+f64 0000000000000000000000000000000000000000000000000000000000000008
+f65 2
+f66 7.700000000000000000000000000000
+f67 8
+f68 7.700000000000000000000000000000
+f69 0000000008
+f70 000000000000000000000000000000007.700000000000000000000000000000
+f71 0000000008
+f72 000000000000000000000000000000007.700000000000000000000000000000
+f73 -1.175494343e-38
+f74 1.175494359e-38
+f75 00000001.175494359e-38
+f76 00000001.175494359e-38
+f77 -1.175494343e-38
+f78 1.175494359e-38
+f79 00000001.175494359e-38
+f80 00000001.175494359e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494343e-38
+f95 1.17549e-38
+f96 1.175494359e-38
+f97 01.17549e-38
+f98 00000001.175494359e-38
+f99 01.17549e-38
+f100 00000001.175494359e-38
+f101 1000-01-08
+f102 838:59:51
+f103 1970-01-09 00:00:08
+f104 1970-01-09 00:00:08
+f105 1909
+f106 1909
+f107 1909
+f108 1enum
+f109 1set,2set
+f59 9
+f60 9
+f61 0000000009
+f62 0000000000000000000000000000000000000000000000000000000000000009
+f63 0000000009
+f64 0000000000000000000000000000000000000000000000000000000000000009
+f65 3
+f66 8.800000000000000000000000000000
+f67 9
+f68 8.800000000000000000000000000000
+f69 0000000009
+f70 000000000000000000000000000000008.800000000000000000000000000000
+f71 0000000009
+f72 000000000000000000000000000000008.800000000000000000000000000000
+f73 -1.175494342e-38
+f74 1.17549436e-38
+f75 000000001.17549436e-38
+f76 000000001.17549436e-38
+f77 -1.175494342e-38
+f78 1.17549436e-38
+f79 000000001.17549436e-38
+f80 000000001.17549436e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494342e-38
+f95 1.17549e-38
+f96 1.17549436e-38
+f97 01.17549e-38
+f98 000000001.17549436e-38
+f99 01.17549e-38
+f100 000000001.17549436e-38
+f101 1000-01-09
+f102 838:59:50
+f103 1970-01-10 00:00:09
+f104 1970-01-10 00:00:09
+f105 1910
+f106 1910
+f107 1910
+f108 2enum
+f109 1set
+f59 10
+f60 10
+f61 0000000010
+f62 0000000000000000000000000000000000000000000000000000000000000010
+f63 0000000010
+f64 0000000000000000000000000000000000000000000000000000000000000010
+f65 4
+f66 9.900000000000000000000000000000
+f67 10
+f68 9.900000000000000000000000000000
+f69 0000000010
+f70 000000000000000000000000000000009.900000000000000000000000000000
+f71 0000000010
+f72 000000000000000000000000000000009.900000000000000000000000000000
+f73 -1.175494341e-38
+f74 1.175494361e-38
+f75 00000001.175494361e-38
+f76 00000001.175494361e-38
+f77 -1.175494341e-38
+f78 1.175494361e-38
+f79 00000001.175494361e-38
+f80 00000001.175494361e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494341e-38
+f95 1.17549e-38
+f96 1.175494361e-38
+f97 01.17549e-38
+f98 00000001.175494361e-38
+f99 01.17549e-38
+f100 00000001.175494361e-38
+f101 1000-01-10
+f102 838:59:49
+f103 1970-01-11 00:00:10
+f104 1970-01-11 00:00:10
+f105 1911
+f106 1911
+f107 1911
+f108 1enum
+f109 2set
+f59 15
+f60 87
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 17
+f60 15
+f61 0000000016
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 19
+f60 18
+f61 0000000014
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 22
+f60 93
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 24
+f60 51654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 27
+f60 25
+f61 0000000026
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 29
+f60 28
+f61 0000000024
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 34
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 94
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 107
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 107
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 109
+f60 108
+f61 0000000104
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 109
+f60 108
+f61 0000000104
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 195
+f60 87
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 207
+f60 205
+f61 0000000206
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 209
+f60 208
+f61 0000000204
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 242
+f60 79
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 250
+f60 87895654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 292
+f60 93
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 299
+f60 899
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 321
+f60 NULL
+f61 0000000765
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 323
+f60 14376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 340
+f60 9984376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 394
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 424
+f60 89
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 441
+f60 16546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 660
+f60 876546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 987
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 2550
+f60 775654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 2760
+f60 985654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 3330
+f60 764376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 3410
+f60 996546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 7876
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 9112
+f60 NULL
+f61 0000008771
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 76710
+f60 226546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 569300
+f60 9114376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 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 ;
@@ -1737,29 +7475,29 @@ Drop view if exists test.v1 ;
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 order by f59,f60;
+Create view test.v1 as Select f59, f60 FROM test.tb2;
+Select * from test.v1 order by f59,f60 limit 20;
f59 f60
1 1
2 2
3 3
4 4
+4 74
5 5
6 6
7 7
8 8
9 9
10 10
-250 87895654
-340 9984376
-441 16546
-660 876546
-2550 775654
-2760 985654
-3330 764376
-3410 996546
-76710 226546
-569300 9114376
+15 87
+17 15
+19 18
+22 93
+24 51654
+27 25
+29 28
+34 41
+94 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 ;
@@ -1846,12 +7584,110 @@ Drop view if exists test.v1 ;
CREATE VIEW test.v1 AS SELECT f59,f60 FROM test.tb2;
INSERT INTO test.v1 values(122,432);
SELECT * FROM test.tb2 where f59 = 122 and f60 = 432 limit 0,20;
-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
-122 432 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set
+f59 122
+f60 432
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
UPDATE test.v1 SET f59 = 3000 WHERE test.v1.f59 = 122 ;
SELECT * FROM test.tb2 where f59 = 3000 limit 0,20;
-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
-3000 432 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set
+f59 3000
+f60 432
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
DELETE FROM test.v1
where test.v1.f59 = 3000 and test.v1.f60 = 432;
SELECT * FROM test.tb2 where f59 = 3000 and f60 = 432;
@@ -1876,16 +7712,214 @@ info: Rows matched: 2 Changed: 2 Warnings: 0
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
-30 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
-30 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
+f59 30
+f60 4
+f61 0000000004
+f62 0000000000000000000000000000000000000000000000000000000000000004
+f63 0000000004
+f64 0000000000000000000000000000000000000000000000000000000000000004
+f65 -2
+f66 3.300000000000000000000000000000
+f67 4
+f68 3.300000000000000000000000000000
+f69 0000000004
+f70 000000000000000000000000000000003.300000000000000000000000000000
+f71 0000000004
+f72 000000000000000000000000000000003.300000000000000000000000000000
+f73 -1.175494347e-38
+f74 1.175494355e-38
+f75 00000001.175494355e-38
+f76 00000001.175494355e-38
+f77 -1.175494347e-38
+f78 1.175494355e-38
+f79 00000001.175494355e-38
+f80 00000001.175494355e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494347e-38
+f95 1.17549e-38
+f96 1.175494355e-38
+f97 01.17549e-38
+f98 00000001.175494355e-38
+f99 01.17549e-38
+f100 00000001.175494355e-38
+f101 1000-01-04
+f102 838:59:55
+f103 1970-01-05 00:00:04
+f104 1970-01-05 00:00:04
+f105 1905
+f106 1905
+f107 1905
+f108 1enum
+f109 2set
+f59 30
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
UPDATE tb2 SET f59 = 100 where f59 = 30 ;
affected rows: 2
info: Rows matched: 2 Changed: 2 Warnings: 0
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
+f59 100
+f60 4
+f61 0000000004
+f62 0000000000000000000000000000000000000000000000000000000000000004
+f63 0000000004
+f64 0000000000000000000000000000000000000000000000000000000000000004
+f65 -2
+f66 3.300000000000000000000000000000
+f67 4
+f68 3.300000000000000000000000000000
+f69 0000000004
+f70 000000000000000000000000000000003.300000000000000000000000000000
+f71 0000000004
+f72 000000000000000000000000000000003.300000000000000000000000000000
+f73 -1.175494347e-38
+f74 1.175494355e-38
+f75 00000001.175494355e-38
+f76 00000001.175494355e-38
+f77 -1.175494347e-38
+f78 1.175494355e-38
+f79 00000001.175494355e-38
+f80 00000001.175494355e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494347e-38
+f95 1.17549e-38
+f96 1.175494355e-38
+f97 01.17549e-38
+f98 00000001.175494355e-38
+f99 01.17549e-38
+f100 00000001.175494355e-38
+f101 1000-01-04
+f102 838:59:55
+f103 1970-01-05 00:00:04
+f104 1970-01-05 00:00:04
+f105 1905
+f106 1905
+f107 1905
+f108 1enum
+f109 2set
+f59 100
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
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 ;
@@ -9649,8 +15683,8 @@ WHERE v3_to_v1_options LIKE ' %' AND errno <> 0
ORDER BY v3_to_v1_options;
v3_to_v1_options statement v3_to_v1_violation errno
SELECT * FROM t1_results
-WHERE v3_to_v1_options LIKE 'WITH %'
-AND v3_to_v1_violation LIKE 'v3_%' AND errno = 0
+WHERE v3_to_v1_options LIKE 'WITH %'
+ AND v3_to_v1_violation LIKE 'v3_%' AND errno = 0
ORDER BY v3_to_v1_options;
v3_to_v1_options statement v3_to_v1_violation errno
SELECT * FROM t1_results
@@ -9670,17 +15704,2561 @@ DROP TABLE t1_results;
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 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
-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
+CREATE VIEW test.v1 AS SELECT * FROM test.tb2;
+SELECT * FROM test.v1 order by f59,f60,f61 ;
+f59 1
+f60 1
+f61 0000000001
+f62 0000000000000000000000000000000000000000000000000000000000000001
+f63 0000000001
+f64 0000000000000000000000000000000000000000000000000000000000000001
+f65 -5
+f66 0.000000000000000000000000000000
+f67 1
+f68 0.000000000000000000000000000000
+f69 0000000001
+f70 000000000000000000000000000000000.000000000000000000000000000000
+f71 0000000001
+f72 000000000000000000000000000000000.000000000000000000000000000000
+f73 -1.17549435e-38
+f74 1.175494352e-38
+f75 00000001.175494352e-38
+f76 00000001.175494352e-38
+f77 -1.17549435e-38
+f78 1.175494352e-38
+f79 00000001.175494352e-38
+f80 00000001.175494352e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.17549435e-38
+f95 1.17549e-38
+f96 1.175494352e-38
+f97 01.17549e-38
+f98 00000001.175494352e-38
+f99 01.17549e-38
+f100 00000001.175494352e-38
+f101 1000-01-01
+f102 838:59:58
+f103 1970-01-02 00:00:01
+f104 1970-01-02 00:00:01
+f105 1902
+f106 1902
+f107 1902
+f108 2enum
+f109 2set
+f59 2
+f60 2
+f61 0000000002
+f62 0000000000000000000000000000000000000000000000000000000000000002
+f63 0000000002
+f64 0000000000000000000000000000000000000000000000000000000000000002
+f65 -4
+f66 1.100000000000000000000000000000
+f67 2
+f68 1.100000000000000000000000000000
+f69 0000000002
+f70 000000000000000000000000000000001.100000000000000000000000000000
+f71 0000000002
+f72 000000000000000000000000000000001.100000000000000000000000000000
+f73 -1.175494349e-38
+f74 1.175494353e-38
+f75 00000001.175494353e-38
+f76 00000001.175494353e-38
+f77 -1.175494349e-38
+f78 1.175494353e-38
+f79 00000001.175494353e-38
+f80 00000001.175494353e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494349e-38
+f95 1.17549e-38
+f96 1.175494353e-38
+f97 01.17549e-38
+f98 00000001.175494353e-38
+f99 01.17549e-38
+f100 00000001.175494353e-38
+f101 1000-01-02
+f102 838:59:57
+f103 1970-01-03 00:00:02
+f104 1970-01-03 00:00:02
+f105 1903
+f106 1903
+f107 1903
+f108 1enum
+f109 1set,2set
+f59 3
+f60 3
+f61 0000000003
+f62 0000000000000000000000000000000000000000000000000000000000000003
+f63 0000000003
+f64 0000000000000000000000000000000000000000000000000000000000000003
+f65 -3
+f66 2.200000000000000000000000000000
+f67 3
+f68 2.200000000000000000000000000000
+f69 0000000003
+f70 000000000000000000000000000000002.200000000000000000000000000000
+f71 0000000003
+f72 000000000000000000000000000000002.200000000000000000000000000000
+f73 -1.175494348e-38
+f74 1.175494354e-38
+f75 00000001.175494354e-38
+f76 00000001.175494354e-38
+f77 -1.175494348e-38
+f78 1.175494354e-38
+f79 00000001.175494354e-38
+f80 00000001.175494354e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494348e-38
+f95 1.17549e-38
+f96 1.175494354e-38
+f97 01.17549e-38
+f98 00000001.175494354e-38
+f99 01.17549e-38
+f100 00000001.175494354e-38
+f101 1000-01-03
+f102 838:59:56
+f103 1970-01-04 00:00:03
+f104 1970-01-04 00:00:03
+f105 1904
+f106 1904
+f107 1904
+f108 2enum
+f109 1set
+f59 5
+f60 5
+f61 0000000005
+f62 0000000000000000000000000000000000000000000000000000000000000005
+f63 0000000005
+f64 0000000000000000000000000000000000000000000000000000000000000005
+f65 -1
+f66 4.400000000000000000000000000000
+f67 5
+f68 4.400000000000000000000000000000
+f69 0000000005
+f70 000000000000000000000000000000004.400000000000000000000000000000
+f71 0000000005
+f72 000000000000000000000000000000004.400000000000000000000000000000
+f73 -1.175494346e-38
+f74 1.175494356e-38
+f75 00000001.175494356e-38
+f76 00000001.175494356e-38
+f77 -1.175494346e-38
+f78 1.175494356e-38
+f79 00000001.175494356e-38
+f80 00000001.175494356e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494346e-38
+f95 1.17549e-38
+f96 1.175494356e-38
+f97 01.17549e-38
+f98 00000001.175494356e-38
+f99 01.17549e-38
+f100 00000001.175494356e-38
+f101 1000-01-05
+f102 838:59:54
+f103 1970-01-06 00:00:05
+f104 1970-01-06 00:00:05
+f105 1906
+f106 1906
+f107 1906
+f108 2enum
+f109 1set,2set
+f59 6
+f60 6
+f61 0000000006
+f62 0000000000000000000000000000000000000000000000000000000000000006
+f63 0000000006
+f64 0000000000000000000000000000000000000000000000000000000000000006
+f65 0
+f66 5.500000000000000000000000000000
+f67 6
+f68 5.500000000000000000000000000000
+f69 0000000006
+f70 000000000000000000000000000000005.500000000000000000000000000000
+f71 0000000006
+f72 000000000000000000000000000000005.500000000000000000000000000000
+f73 -1.175494345e-38
+f74 1.175494357e-38
+f75 00000001.175494357e-38
+f76 00000001.175494357e-38
+f77 -1.175494345e-38
+f78 1.175494357e-38
+f79 00000001.175494357e-38
+f80 00000001.175494357e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494345e-38
+f95 1.17549e-38
+f96 1.175494357e-38
+f97 01.17549e-38
+f98 00000001.175494357e-38
+f99 01.17549e-38
+f100 00000001.175494357e-38
+f101 1000-01-06
+f102 838:59:53
+f103 1970-01-07 00:00:06
+f104 1970-01-07 00:00:06
+f105 1907
+f106 1907
+f107 1907
+f108 1enum
+f109 1set
+f59 7
+f60 7
+f61 0000000007
+f62 0000000000000000000000000000000000000000000000000000000000000007
+f63 0000000007
+f64 0000000000000000000000000000000000000000000000000000000000000007
+f65 1
+f66 6.600000000000000000000000000000
+f67 7
+f68 6.600000000000000000000000000000
+f69 0000000007
+f70 000000000000000000000000000000006.600000000000000000000000000000
+f71 0000000007
+f72 000000000000000000000000000000006.600000000000000000000000000000
+f73 -1.175494344e-38
+f74 1.175494358e-38
+f75 00000001.175494358e-38
+f76 00000001.175494358e-38
+f77 -1.175494344e-38
+f78 1.175494358e-38
+f79 00000001.175494358e-38
+f80 00000001.175494358e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494344e-38
+f95 1.17549e-38
+f96 1.175494358e-38
+f97 01.17549e-38
+f98 00000001.175494358e-38
+f99 01.17549e-38
+f100 00000001.175494358e-38
+f101 1000-01-07
+f102 838:59:52
+f103 1970-01-08 00:00:07
+f104 1970-01-08 00:00:07
+f105 1908
+f106 1908
+f107 1908
+f108 2enum
+f109 2set
+f59 8
+f60 8
+f61 0000000008
+f62 0000000000000000000000000000000000000000000000000000000000000008
+f63 0000000008
+f64 0000000000000000000000000000000000000000000000000000000000000008
+f65 2
+f66 7.700000000000000000000000000000
+f67 8
+f68 7.700000000000000000000000000000
+f69 0000000008
+f70 000000000000000000000000000000007.700000000000000000000000000000
+f71 0000000008
+f72 000000000000000000000000000000007.700000000000000000000000000000
+f73 -1.175494343e-38
+f74 1.175494359e-38
+f75 00000001.175494359e-38
+f76 00000001.175494359e-38
+f77 -1.175494343e-38
+f78 1.175494359e-38
+f79 00000001.175494359e-38
+f80 00000001.175494359e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494343e-38
+f95 1.17549e-38
+f96 1.175494359e-38
+f97 01.17549e-38
+f98 00000001.175494359e-38
+f99 01.17549e-38
+f100 00000001.175494359e-38
+f101 1000-01-08
+f102 838:59:51
+f103 1970-01-09 00:00:08
+f104 1970-01-09 00:00:08
+f105 1909
+f106 1909
+f107 1909
+f108 1enum
+f109 1set,2set
+f59 9
+f60 9
+f61 0000000009
+f62 0000000000000000000000000000000000000000000000000000000000000009
+f63 0000000009
+f64 0000000000000000000000000000000000000000000000000000000000000009
+f65 3
+f66 8.800000000000000000000000000000
+f67 9
+f68 8.800000000000000000000000000000
+f69 0000000009
+f70 000000000000000000000000000000008.800000000000000000000000000000
+f71 0000000009
+f72 000000000000000000000000000000008.800000000000000000000000000000
+f73 -1.175494342e-38
+f74 1.17549436e-38
+f75 000000001.17549436e-38
+f76 000000001.17549436e-38
+f77 -1.175494342e-38
+f78 1.17549436e-38
+f79 000000001.17549436e-38
+f80 000000001.17549436e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494342e-38
+f95 1.17549e-38
+f96 1.17549436e-38
+f97 01.17549e-38
+f98 000000001.17549436e-38
+f99 01.17549e-38
+f100 000000001.17549436e-38
+f101 1000-01-09
+f102 838:59:50
+f103 1970-01-10 00:00:09
+f104 1970-01-10 00:00:09
+f105 1910
+f106 1910
+f107 1910
+f108 2enum
+f109 1set
+f59 10
+f60 10
+f61 0000000010
+f62 0000000000000000000000000000000000000000000000000000000000000010
+f63 0000000010
+f64 0000000000000000000000000000000000000000000000000000000000000010
+f65 4
+f66 9.900000000000000000000000000000
+f67 10
+f68 9.900000000000000000000000000000
+f69 0000000010
+f70 000000000000000000000000000000009.900000000000000000000000000000
+f71 0000000010
+f72 000000000000000000000000000000009.900000000000000000000000000000
+f73 -1.175494341e-38
+f74 1.175494361e-38
+f75 00000001.175494361e-38
+f76 00000001.175494361e-38
+f77 -1.175494341e-38
+f78 1.175494361e-38
+f79 00000001.175494361e-38
+f80 00000001.175494361e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494341e-38
+f95 1.17549e-38
+f96 1.175494361e-38
+f97 01.17549e-38
+f98 00000001.175494361e-38
+f99 01.17549e-38
+f100 00000001.175494361e-38
+f101 1000-01-10
+f102 838:59:49
+f103 1970-01-11 00:00:10
+f104 1970-01-11 00:00:10
+f105 1911
+f106 1911
+f107 1911
+f108 1enum
+f109 2set
+f59 15
+f60 87
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 17
+f60 15
+f61 0000000016
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 19
+f60 18
+f61 0000000014
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 22
+f60 93
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 24
+f60 51654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 27
+f60 25
+f61 0000000026
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 29
+f60 28
+f61 0000000024
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 34
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 94
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 100
+f60 4
+f61 0000000004
+f62 0000000000000000000000000000000000000000000000000000000000000004
+f63 0000000004
+f64 0000000000000000000000000000000000000000000000000000000000000004
+f65 -2
+f66 3.300000000000000000000000000000
+f67 4
+f68 3.300000000000000000000000000000
+f69 0000000004
+f70 000000000000000000000000000000003.300000000000000000000000000000
+f71 0000000004
+f72 000000000000000000000000000000003.300000000000000000000000000000
+f73 -1.175494347e-38
+f74 1.175494355e-38
+f75 00000001.175494355e-38
+f76 00000001.175494355e-38
+f77 -1.175494347e-38
+f78 1.175494355e-38
+f79 00000001.175494355e-38
+f80 00000001.175494355e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494347e-38
+f95 1.17549e-38
+f96 1.175494355e-38
+f97 01.17549e-38
+f98 00000001.175494355e-38
+f99 01.17549e-38
+f100 00000001.175494355e-38
+f101 1000-01-04
+f102 838:59:55
+f103 1970-01-05 00:00:04
+f104 1970-01-05 00:00:04
+f105 1905
+f106 1905
+f107 1905
+f108 1enum
+f109 2set
+f59 100
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 107
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 107
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 109
+f60 108
+f61 0000000104
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 109
+f60 108
+f61 0000000104
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 195
+f60 87
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 207
+f60 205
+f61 0000000206
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 209
+f60 208
+f61 0000000204
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 242
+f60 79
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 250
+f60 87895654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 292
+f60 93
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 299
+f60 899
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 321
+f60 NULL
+f61 0000000765
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 323
+f60 14376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 340
+f60 9984376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 394
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 424
+f60 89
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 441
+f60 16546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 660
+f60 876546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 987
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 2550
+f60 775654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 2760
+f60 985654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 3330
+f60 764376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 3410
+f60 996546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 7876
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 9112
+f60 NULL
+f61 0000008771
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 76710
+f60 226546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 569300
+f60 9114376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
drop view test.v1 ;
-CREATE VIEW test.v1 AS SELECT F59,F61 FROM test.tb2 limit 50 ;
-SELECT * FROM test.v1 order by F59, F61 ;
+CREATE VIEW test.v1 AS SELECT F59,F61 FROM test.tb2;
+SELECT * FROM test.v1 order by F59, F61 limit 50;
F59 F61
1 0000000001
2 0000000002
@@ -9733,32 +18311,2561 @@ F59 F61
76710 NULL
569300 NULL
drop view test.v1 ;
-CREATE VIEW test.v1 AS SELECT * FROM test.tb2 order by f59, f60, f61 limit 20 ;
+CREATE VIEW test.v1 AS SELECT * FROM test.tb2 order by f59, f60, f61;
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
-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
-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
+f59 1
+f60 1
+f61 0000000001
+f62 0000000000000000000000000000000000000000000000000000000000000001
+f63 0000000001
+f64 0000000000000000000000000000000000000000000000000000000000000001
+f65 -5
+f66 0.000000000000000000000000000000
+f67 1
+f68 0.000000000000000000000000000000
+f69 0000000001
+f70 000000000000000000000000000000000.000000000000000000000000000000
+f71 0000000001
+f72 000000000000000000000000000000000.000000000000000000000000000000
+f73 -1.17549435e-38
+f74 1.175494352e-38
+f75 00000001.175494352e-38
+f76 00000001.175494352e-38
+f77 -1.17549435e-38
+f78 1.175494352e-38
+f79 00000001.175494352e-38
+f80 00000001.175494352e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.17549435e-38
+f95 1.17549e-38
+f96 1.175494352e-38
+f97 01.17549e-38
+f98 00000001.175494352e-38
+f99 01.17549e-38
+f100 00000001.175494352e-38
+f101 1000-01-01
+f102 838:59:58
+f103 1970-01-02 00:00:01
+f104 1970-01-02 00:00:01
+f105 1902
+f106 1902
+f107 1902
+f108 2enum
+f109 2set
+f59 2
+f60 2
+f61 0000000002
+f62 0000000000000000000000000000000000000000000000000000000000000002
+f63 0000000002
+f64 0000000000000000000000000000000000000000000000000000000000000002
+f65 -4
+f66 1.100000000000000000000000000000
+f67 2
+f68 1.100000000000000000000000000000
+f69 0000000002
+f70 000000000000000000000000000000001.100000000000000000000000000000
+f71 0000000002
+f72 000000000000000000000000000000001.100000000000000000000000000000
+f73 -1.175494349e-38
+f74 1.175494353e-38
+f75 00000001.175494353e-38
+f76 00000001.175494353e-38
+f77 -1.175494349e-38
+f78 1.175494353e-38
+f79 00000001.175494353e-38
+f80 00000001.175494353e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494349e-38
+f95 1.17549e-38
+f96 1.175494353e-38
+f97 01.17549e-38
+f98 00000001.175494353e-38
+f99 01.17549e-38
+f100 00000001.175494353e-38
+f101 1000-01-02
+f102 838:59:57
+f103 1970-01-03 00:00:02
+f104 1970-01-03 00:00:02
+f105 1903
+f106 1903
+f107 1903
+f108 1enum
+f109 1set,2set
+f59 3
+f60 3
+f61 0000000003
+f62 0000000000000000000000000000000000000000000000000000000000000003
+f63 0000000003
+f64 0000000000000000000000000000000000000000000000000000000000000003
+f65 -3
+f66 2.200000000000000000000000000000
+f67 3
+f68 2.200000000000000000000000000000
+f69 0000000003
+f70 000000000000000000000000000000002.200000000000000000000000000000
+f71 0000000003
+f72 000000000000000000000000000000002.200000000000000000000000000000
+f73 -1.175494348e-38
+f74 1.175494354e-38
+f75 00000001.175494354e-38
+f76 00000001.175494354e-38
+f77 -1.175494348e-38
+f78 1.175494354e-38
+f79 00000001.175494354e-38
+f80 00000001.175494354e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494348e-38
+f95 1.17549e-38
+f96 1.175494354e-38
+f97 01.17549e-38
+f98 00000001.175494354e-38
+f99 01.17549e-38
+f100 00000001.175494354e-38
+f101 1000-01-03
+f102 838:59:56
+f103 1970-01-04 00:00:03
+f104 1970-01-04 00:00:03
+f105 1904
+f106 1904
+f107 1904
+f108 2enum
+f109 1set
+f59 5
+f60 5
+f61 0000000005
+f62 0000000000000000000000000000000000000000000000000000000000000005
+f63 0000000005
+f64 0000000000000000000000000000000000000000000000000000000000000005
+f65 -1
+f66 4.400000000000000000000000000000
+f67 5
+f68 4.400000000000000000000000000000
+f69 0000000005
+f70 000000000000000000000000000000004.400000000000000000000000000000
+f71 0000000005
+f72 000000000000000000000000000000004.400000000000000000000000000000
+f73 -1.175494346e-38
+f74 1.175494356e-38
+f75 00000001.175494356e-38
+f76 00000001.175494356e-38
+f77 -1.175494346e-38
+f78 1.175494356e-38
+f79 00000001.175494356e-38
+f80 00000001.175494356e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494346e-38
+f95 1.17549e-38
+f96 1.175494356e-38
+f97 01.17549e-38
+f98 00000001.175494356e-38
+f99 01.17549e-38
+f100 00000001.175494356e-38
+f101 1000-01-05
+f102 838:59:54
+f103 1970-01-06 00:00:05
+f104 1970-01-06 00:00:05
+f105 1906
+f106 1906
+f107 1906
+f108 2enum
+f109 1set,2set
+f59 6
+f60 6
+f61 0000000006
+f62 0000000000000000000000000000000000000000000000000000000000000006
+f63 0000000006
+f64 0000000000000000000000000000000000000000000000000000000000000006
+f65 0
+f66 5.500000000000000000000000000000
+f67 6
+f68 5.500000000000000000000000000000
+f69 0000000006
+f70 000000000000000000000000000000005.500000000000000000000000000000
+f71 0000000006
+f72 000000000000000000000000000000005.500000000000000000000000000000
+f73 -1.175494345e-38
+f74 1.175494357e-38
+f75 00000001.175494357e-38
+f76 00000001.175494357e-38
+f77 -1.175494345e-38
+f78 1.175494357e-38
+f79 00000001.175494357e-38
+f80 00000001.175494357e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494345e-38
+f95 1.17549e-38
+f96 1.175494357e-38
+f97 01.17549e-38
+f98 00000001.175494357e-38
+f99 01.17549e-38
+f100 00000001.175494357e-38
+f101 1000-01-06
+f102 838:59:53
+f103 1970-01-07 00:00:06
+f104 1970-01-07 00:00:06
+f105 1907
+f106 1907
+f107 1907
+f108 1enum
+f109 1set
+f59 7
+f60 7
+f61 0000000007
+f62 0000000000000000000000000000000000000000000000000000000000000007
+f63 0000000007
+f64 0000000000000000000000000000000000000000000000000000000000000007
+f65 1
+f66 6.600000000000000000000000000000
+f67 7
+f68 6.600000000000000000000000000000
+f69 0000000007
+f70 000000000000000000000000000000006.600000000000000000000000000000
+f71 0000000007
+f72 000000000000000000000000000000006.600000000000000000000000000000
+f73 -1.175494344e-38
+f74 1.175494358e-38
+f75 00000001.175494358e-38
+f76 00000001.175494358e-38
+f77 -1.175494344e-38
+f78 1.175494358e-38
+f79 00000001.175494358e-38
+f80 00000001.175494358e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494344e-38
+f95 1.17549e-38
+f96 1.175494358e-38
+f97 01.17549e-38
+f98 00000001.175494358e-38
+f99 01.17549e-38
+f100 00000001.175494358e-38
+f101 1000-01-07
+f102 838:59:52
+f103 1970-01-08 00:00:07
+f104 1970-01-08 00:00:07
+f105 1908
+f106 1908
+f107 1908
+f108 2enum
+f109 2set
+f59 8
+f60 8
+f61 0000000008
+f62 0000000000000000000000000000000000000000000000000000000000000008
+f63 0000000008
+f64 0000000000000000000000000000000000000000000000000000000000000008
+f65 2
+f66 7.700000000000000000000000000000
+f67 8
+f68 7.700000000000000000000000000000
+f69 0000000008
+f70 000000000000000000000000000000007.700000000000000000000000000000
+f71 0000000008
+f72 000000000000000000000000000000007.700000000000000000000000000000
+f73 -1.175494343e-38
+f74 1.175494359e-38
+f75 00000001.175494359e-38
+f76 00000001.175494359e-38
+f77 -1.175494343e-38
+f78 1.175494359e-38
+f79 00000001.175494359e-38
+f80 00000001.175494359e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494343e-38
+f95 1.17549e-38
+f96 1.175494359e-38
+f97 01.17549e-38
+f98 00000001.175494359e-38
+f99 01.17549e-38
+f100 00000001.175494359e-38
+f101 1000-01-08
+f102 838:59:51
+f103 1970-01-09 00:00:08
+f104 1970-01-09 00:00:08
+f105 1909
+f106 1909
+f107 1909
+f108 1enum
+f109 1set,2set
+f59 9
+f60 9
+f61 0000000009
+f62 0000000000000000000000000000000000000000000000000000000000000009
+f63 0000000009
+f64 0000000000000000000000000000000000000000000000000000000000000009
+f65 3
+f66 8.800000000000000000000000000000
+f67 9
+f68 8.800000000000000000000000000000
+f69 0000000009
+f70 000000000000000000000000000000008.800000000000000000000000000000
+f71 0000000009
+f72 000000000000000000000000000000008.800000000000000000000000000000
+f73 -1.175494342e-38
+f74 1.17549436e-38
+f75 000000001.17549436e-38
+f76 000000001.17549436e-38
+f77 -1.175494342e-38
+f78 1.17549436e-38
+f79 000000001.17549436e-38
+f80 000000001.17549436e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494342e-38
+f95 1.17549e-38
+f96 1.17549436e-38
+f97 01.17549e-38
+f98 000000001.17549436e-38
+f99 01.17549e-38
+f100 000000001.17549436e-38
+f101 1000-01-09
+f102 838:59:50
+f103 1970-01-10 00:00:09
+f104 1970-01-10 00:00:09
+f105 1910
+f106 1910
+f107 1910
+f108 2enum
+f109 1set
+f59 10
+f60 10
+f61 0000000010
+f62 0000000000000000000000000000000000000000000000000000000000000010
+f63 0000000010
+f64 0000000000000000000000000000000000000000000000000000000000000010
+f65 4
+f66 9.900000000000000000000000000000
+f67 10
+f68 9.900000000000000000000000000000
+f69 0000000010
+f70 000000000000000000000000000000009.900000000000000000000000000000
+f71 0000000010
+f72 000000000000000000000000000000009.900000000000000000000000000000
+f73 -1.175494341e-38
+f74 1.175494361e-38
+f75 00000001.175494361e-38
+f76 00000001.175494361e-38
+f77 -1.175494341e-38
+f78 1.175494361e-38
+f79 00000001.175494361e-38
+f80 00000001.175494361e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494341e-38
+f95 1.17549e-38
+f96 1.175494361e-38
+f97 01.17549e-38
+f98 00000001.175494361e-38
+f99 01.17549e-38
+f100 00000001.175494361e-38
+f101 1000-01-10
+f102 838:59:49
+f103 1970-01-11 00:00:10
+f104 1970-01-11 00:00:10
+f105 1911
+f106 1911
+f107 1911
+f108 1enum
+f109 2set
+f59 15
+f60 87
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 17
+f60 15
+f61 0000000016
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 19
+f60 18
+f61 0000000014
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 22
+f60 93
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 24
+f60 51654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 27
+f60 25
+f61 0000000026
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 29
+f60 28
+f61 0000000024
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 34
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 94
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 100
+f60 4
+f61 0000000004
+f62 0000000000000000000000000000000000000000000000000000000000000004
+f63 0000000004
+f64 0000000000000000000000000000000000000000000000000000000000000004
+f65 -2
+f66 3.300000000000000000000000000000
+f67 4
+f68 3.300000000000000000000000000000
+f69 0000000004
+f70 000000000000000000000000000000003.300000000000000000000000000000
+f71 0000000004
+f72 000000000000000000000000000000003.300000000000000000000000000000
+f73 -1.175494347e-38
+f74 1.175494355e-38
+f75 00000001.175494355e-38
+f76 00000001.175494355e-38
+f77 -1.175494347e-38
+f78 1.175494355e-38
+f79 00000001.175494355e-38
+f80 00000001.175494355e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494347e-38
+f95 1.17549e-38
+f96 1.175494355e-38
+f97 01.17549e-38
+f98 00000001.175494355e-38
+f99 01.17549e-38
+f100 00000001.175494355e-38
+f101 1000-01-04
+f102 838:59:55
+f103 1970-01-05 00:00:04
+f104 1970-01-05 00:00:04
+f105 1905
+f106 1905
+f107 1905
+f108 1enum
+f109 2set
+f59 100
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 107
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 107
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 109
+f60 108
+f61 0000000104
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 109
+f60 108
+f61 0000000104
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 195
+f60 87
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 207
+f60 205
+f61 0000000206
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 209
+f60 208
+f61 0000000204
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 242
+f60 79
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 250
+f60 87895654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 292
+f60 93
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 299
+f60 899
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 321
+f60 NULL
+f61 0000000765
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 323
+f60 14376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 340
+f60 9984376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 394
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 424
+f60 89
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 441
+f60 16546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 660
+f60 876546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 987
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 2550
+f60 775654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 2760
+f60 985654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 3330
+f60 764376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 3410
+f60 996546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 7876
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 9112
+f60 NULL
+f61 0000008771
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 76710
+f60 226546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 569300
+f60 9114376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
drop view test.v1 ;
-CREATE VIEW test.v1 AS SELECT F59,f61 FROM test.tb2 limit 20 ;
-SELECT * FROM test.v1 order by f59,f61 desc limit 50;
+CREATE VIEW test.v1 AS SELECT F59,f61 FROM test.tb2;
+SELECT * FROM test.v1 order by f59,f61 desc limit 20;
F59 f61
1 0000000001
2 0000000002
@@ -9769,17 +20876,17 @@ F59 f61
8 0000000008
9 0000000009
10 0000000010
+15 NULL
+17 0000000016
+19 0000000014
+22 NULL
+24 NULL
+27 0000000026
+29 0000000024
+34 NULL
+94 NULL
100 0000000004
-250 NULL
-340 NULL
-441 NULL
-660 NULL
-2550 NULL
-2760 NULL
-3330 NULL
-3410 NULL
-76710 NULL
-569300 NULL
+100 NULL
drop view test.v1 ;
Testcase 3.3.1.54
@@ -9836,16 +20943,23 @@ f2
two
SET sql_mode = 'traditional,ansi';
CREATE OR REPLACE VIEW v1 AS
+SELECT f3 AS "pure column f3:", f1 + f3 AS "sum of columns f1 + f3 =",
+3 * (- 0.11111E+1) AS "product of constants 3 * (- 0.11111E+1):",
+'->' || CAST(f3 AS CHAR) || '<-'
+ AS "expression with '||'=CONCAT and CAST(DECIMAL column AS CHAR):"
+FROM t1 WHERE f1 = 2;
+CREATE OR REPLACE VIEW v1 AS
SELECT f3 AS "pure column f3: ", f1 + f3 AS "sum of columns f1 + f3 = ",
3 * (- 0.11111E+1) AS "product of constants 3 * (- 0.11111E+1): ",
'->' || CAST(f3 AS CHAR) || '<-'
AS "expression with '||'=CONCAT and CAST(DECIMAL column AS CHAR): "
FROM t1 WHERE f1 = 2;
+ERROR 42000: Incorrect column name 'pure column f3: '
SELECT * FROM v1;
-pure column f3: 2.20000
-sum of columns f1 + f3 = 4.20000
-product of constants 3 * (- 0.11111E+1): -3.3333
-expression with '||'=CONCAT and CAST(DECIMAL column AS CHAR): ->2.20000<-
+pure column f3: 2.20000
+sum of columns f1 + f3 = 4.20000
+product of constants 3 * (- 0.11111E+1): -3.3333
+expression with '||'=CONCAT and CAST(DECIMAL column AS CHAR): ->2.20000<-
SET sql_mode = '';
Testcases 3.3.1.55 - 3.3.1.62
@@ -10123,8 +21237,57 @@ F59
ALTER VIEW test.v1 AS SELECT *
FROM test.tb2 WHERE test.tb2.f59 = 242 ;
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
+f59 242
+f60 79
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
Drop view test.v1 ;
Testcase 3.3.1.65, 3.3.1.A4, 3.3.1.66, 3.3.1.67
@@ -10413,9 +21576,9 @@ FIXME Is this a bug ?
EXPLAIN SELECT CAST(f1 AS SIGNED INTEGER) AS f1,
CAST(f2 AS CHAR) AS f2 FROM test1.v28;
DROP VIEW IF EXISTS test1.v28;
-CREATE OR REPLACE VIEW test1.v0 AS
+CREATE OR REPLACE VIEW test1.v0 AS
SELECT f1 as f2, f2 as f1 FROM test2.t1;
-CREATE OR REPLACE VIEW test2.v0 AS
+CREATE OR REPLACE VIEW test2.v0 AS
SELECT CAST('0001-01-01' AS DATE) as f1, f2 FROM test3.t1;
SHOW CREATE VIEW test1.v27;
SELECT CAST(f1 AS SIGNED INTEGER) AS f1,
@@ -10487,8 +21650,57 @@ Create view test.v1 AS SELECT f59,f60,f61 FROM tb2 ;
INSERT INTO test.v1 ( f59 , f60 ) values (2005,0101) ;
affected rows: 1
SELECT * FROM tb2 where f59 = 2005 and f60 = 0101 ;
-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
-2005 101 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set
+f59 2005
+f60 101
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
SELECT f59,f60 FROM test.v1 where f59 = 2005 and f60 = 0101 ;
f59 f60
2005 101
@@ -10504,8 +21716,57 @@ UPDATE test.v1 SET f59 = 8 WHERE f59 = 780 and f60 = 105;
affected rows: 1
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
+f59 8
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
SELECT f59,f60 FROM test.v1 where f59 = 8 and f60 = 105 ;
f59 f60
8 105
@@ -10520,11 +21781,210 @@ UPDATE test.v1 SET f59 = 891 WHERE f60 = 105 ;
affected rows: 4
info: Rows matched: 4 Changed: 4 Warnings: 0
SELECT * FROM tb2 where f59 = 891 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
-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
-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
+f59 891
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 891
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 891
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 891
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
SELECT f59,f60 FROM test.v1 where f59 = 891 and f60 = 105 ;
f59 f60
891 105
@@ -10873,17 +22333,13 @@ SET @variant4= 'CREATE VIEW v1 AS SELECT f61 FROM t1 GROUP BY f61';
SET @variant5= 'CREATE VIEW v1 AS SELECT f61 FROM t1 HAVING f61 > 0';
SET @variant6= 'CREATE VIEW v1 AS SELECT (SELECT f60 FROM t2 WHERE f59=19) AS f61 FROM t1';
SET @variant7= 'CREATE VIEW v1 AS SELECT f61 FROM v2';
-
-Some server responses suffer from
-Bug#10773 Incorrect message is displayed while updating a view
---------------------------------------------------------------------------------
SET @variant8= 'CREATE VIEW v1 AS SELECT f59 AS f61 FROM t1 WHERE f60 IN (SELECT f59 FROM t1)';
SET @variant9= 'CREATE ALGORITHM = TEMPTABLE VIEW v1 (f61) AS select f60 from t1';
CREATE ALGORITHM = TEMPTABLE VIEW v1 (f61) AS select f60 from t1;
INSERT INTO v1 VALUES (1002);
ERROR HY000: The target table v1 of the INSERT is not insertable-into
UPDATE v1 SET f61=1007;
-Got one of the listed errors
+ERROR HY000: The target table v1 of the UPDATE is not updatable
DELETE FROM v1;
ERROR HY000: The target table v1 of the DELETE is not updatable
DROP VIEW v1;
@@ -10891,7 +22347,7 @@ CREATE VIEW v1 AS SELECT f59 AS f61 FROM t1 WHERE f60 IN (SELECT f59 FROM t1);
INSERT INTO v1 VALUES (1002);
ERROR HY000: The target table v1 of the INSERT is not insertable-into
UPDATE v1 SET f61=1007;
-Got one of the listed errors
+ERROR HY000: The target table v1 of the UPDATE is not updatable
DELETE FROM v1;
ERROR HY000: The target table v1 of the DELETE is not updatable
DROP VIEW v1;
@@ -10899,7 +22355,7 @@ CREATE VIEW v1 AS SELECT f61 FROM v2;
INSERT INTO v1 VALUES (1002);
ERROR HY000: The target table v1 of the INSERT is not insertable-into
UPDATE v1 SET f61=1007;
-Got one of the listed errors
+ERROR HY000: The target table v1 of the UPDATE is not updatable
DELETE FROM v1;
ERROR HY000: The target table v1 of the DELETE is not updatable
DROP VIEW v1;
@@ -10907,7 +22363,7 @@ CREATE VIEW v1 AS SELECT (SELECT f60 FROM t2 WHERE f59=19) AS f61 FROM t1;
INSERT INTO v1 VALUES (1002);
ERROR HY000: The target table v1 of the INSERT is not insertable-into
UPDATE v1 SET f61=1007;
-Got one of the listed errors
+ERROR HY000: The target table v1 of the UPDATE is not updatable
DELETE FROM v1;
ERROR HY000: The target table v1 of the DELETE is not updatable
DROP VIEW v1;
@@ -10915,7 +22371,7 @@ CREATE VIEW v1 AS SELECT f61 FROM t1 HAVING f61 > 0;
INSERT INTO v1 VALUES (1002);
ERROR HY000: The target table v1 of the INSERT is not insertable-into
UPDATE v1 SET f61=1007;
-Got one of the listed errors
+ERROR HY000: The target table v1 of the UPDATE is not updatable
DELETE FROM v1;
ERROR HY000: The target table v1 of the DELETE is not updatable
DROP VIEW v1;
@@ -10923,7 +22379,7 @@ CREATE VIEW v1 AS SELECT f61 FROM t1 GROUP BY f61;
INSERT INTO v1 VALUES (1002);
ERROR HY000: The target table v1 of the INSERT is not insertable-into
UPDATE v1 SET f61=1007;
-Got one of the listed errors
+ERROR HY000: The target table v1 of the UPDATE is not updatable
DELETE FROM v1;
ERROR HY000: The target table v1 of the DELETE is not updatable
DROP VIEW v1;
@@ -10931,7 +22387,7 @@ CREATE VIEW v1 AS SELECT SUM(f59) AS f61 FROM t1;
INSERT INTO v1 VALUES (1002);
ERROR HY000: The target table v1 of the INSERT is not insertable-into
UPDATE v1 SET f61=1007;
-Got one of the listed errors
+ERROR HY000: The target table v1 of the UPDATE is not updatable
DELETE FROM v1;
ERROR HY000: The target table v1 of the DELETE is not updatable
DROP VIEW v1;
@@ -10939,7 +22395,7 @@ CREATE VIEW v1 AS SELECT DISTINCTROW(f61) FROM t1;
INSERT INTO v1 VALUES (1002);
ERROR HY000: The target table v1 of the INSERT is not insertable-into
UPDATE v1 SET f61=1007;
-Got one of the listed errors
+ERROR HY000: The target table v1 of the UPDATE is not updatable
DELETE FROM v1;
ERROR HY000: The target table v1 of the DELETE is not updatable
DROP VIEW v1;
@@ -10947,7 +22403,7 @@ CREATE VIEW v1 AS SELECT DISTINCT(f61) FROM t1;
INSERT INTO v1 VALUES (1002);
ERROR HY000: The target table v1 of the INSERT is not insertable-into
UPDATE v1 SET f61=1007;
-Got one of the listed errors
+ERROR HY000: The target table v1 of the UPDATE is not updatable
DELETE FROM v1;
ERROR HY000: The target table v1 of the DELETE is not updatable
DROP VIEW v1;
@@ -11116,9 +22572,9 @@ f1 f2 f4 report
4 NULL <------ 20 --------> t1 4
4 NULL <------ 20 --------> v1 4
ALTER TABLE t1 CHANGE COLUMN f1 f1 VARCHAR(30);
-INSERT INTO t1 SET f1 = '<------------- 30 ----------->',
+INSERT INTO t1 SET f1 = '<------------- 30 ----------->',
f4 = '<------ 20 -------->', report = 't1 5';
-INSERT INTO v1 SET f1 = '<------------- 30 ----------->',
+INSERT INTO v1 SET f1 = '<------------- 30 ----------->',
f4 = '<------ 20 -------->', report = 'v1 5';
DESCRIBE t1;
Field Type Null Key Default Extra
@@ -11408,21 +22864,24 @@ ABC 0
ABC 1.7320508075689
CREATE TABLE t2 AS SELECT f1, SQRT(f2) my_sqrt FROM t1;
SELECT * FROM t2 order by 2;
-f1 my_sqrt
-ABC 0
-ABC 1.73205080756888
+f1 ABC
+my_sqrt 0
+f1 ABC
+my_sqrt 1.73205080756888
DROP TABLE t2;
CREATE TABLE t2 AS SELECT * FROM v1;
SELECT * FROM t2 order by 2;
-f1 my_sqrt
-ABC 0
-ABC 1.73205080756888
+f1 ABC
+my_sqrt 0
+f1 ABC
+my_sqrt 1.73205080756888
DROP TABLE t2;
CREATE TABLE t2 AS SELECT * FROM v2;
SELECT * FROM t2 order by 2;
-f1 my_sqrt
-ABC 0
-ABC 1.73205080756888
+f1 ABC
+my_sqrt 0
+f1 ABC
+my_sqrt 1.73205080756888
DROP TABLE t1;
DROP TABLE t2;
DROP VIEW v1;
diff --git a/mysql-test/suite/funcs_1/r/memory__datadict.result b/mysql-test/suite/funcs_1/r/memory__datadict.result
index 2f9bbe6eafe..0a7c7f20437 100644
--- a/mysql-test/suite/funcs_1/r/memory__datadict.result
+++ b/mysql-test/suite/funcs_1/r/memory__datadict.result
@@ -10,8 +10,9 @@
. *__datadict.test are started. This can be a result of showing e.g. maximum
. values of the number of rows of tables.
.
-. This .result file has been checked OK with Linux 5.0.23-bk,
-. ChangeSet@1.2211, 2006-06-28 10:11:43-07:00.
+. This .result file has been checked OK with Linux 5.0.48,
+. build tree ChangeSet@1.2477.6.3, 2007-07-30
+. except that the not fixed Bug#30020 causes a difference.
.
--------------------------------------------------------------------------------
@@ -20,11 +21,21 @@ FIXME: There are subtests that are switched off due to known bugs:
SELECT 1 AS "have_bug_11589";
have_bug_11589
1
+SELECT 1 AS "have_bug_30689";
+have_bug_30689
+1
There are some statements where the ps-protocol is switched off.
This may come from the bug listed below, ir from other problems.
Bug#11589: mysqltest, --ps-protocol, strange output, float/double/real with zerofill
--------------------------------------------------------------------------------
+
+Selects on INFORMATION_SCHEMA.VIEWS present incomplete
+content for the column VIEW_DEFINITION in cases where
+the view selects(=is based) on an INFORMATION_SCHEMA table.
+---> VIEWS vu and vu1
+Bug#30689 Wrong content in I_S.VIEWS.VIEW_DEFINITION if VIEW is based on I_S
+--------------------------------------------------------------------------------
SET @NO_REFRESH = IF( '' = '', 0, 1);
DROP DATABASE IF EXISTS test1;
CREATE DATABASE test1;
@@ -1033,7 +1044,8 @@ CHECKSUM NULL
CREATE_OPTIONS #CO#
TABLE_COMMENT
SELECT * FROM tables
-WHERE NOT( table_schema = 'information_schema');
+WHERE NOT( table_schema = 'information_schema')
+AND NOT (table_schema = 'mysql' AND table_name LIKE 'help_%');
TABLE_CATALOG NULL
TABLE_SCHEMA db_datadict
TABLE_NAME v1
@@ -1204,90 +1216,6 @@ CREATE_OPTIONS
TABLE_COMMENT General log
TABLE_CATALOG NULL
TABLE_SCHEMA mysql
-TABLE_NAME help_category
-TABLE_TYPE BASE TABLE
-ENGINE MyISAM
-VERSION 10
-ROW_FORMAT Fixed
-TABLE_ROWS 37
-AVG_ROW_LENGTH #ARL#
-DATA_LENGTH #DL#
-MAX_DATA_LENGTH #MDL#
-INDEX_LENGTH #IL#
-DATA_FREE #DF#
-AUTO_INCREMENT NULL
-CREATE_TIME YYYY-MM-DD hh:mm:ss
-UPDATE_TIME YYYY-MM-DD hh:mm:ss
-CHECK_TIME YYYY-MM-DD hh:mm:ss
-TABLE_COLLATION utf8_general_ci
-CHECKSUM NULL
-CREATE_OPTIONS
-TABLE_COMMENT help categories
-TABLE_CATALOG NULL
-TABLE_SCHEMA mysql
-TABLE_NAME help_keyword
-TABLE_TYPE BASE TABLE
-ENGINE MyISAM
-VERSION 10
-ROW_FORMAT Fixed
-TABLE_ROWS 424
-AVG_ROW_LENGTH #ARL#
-DATA_LENGTH #DL#
-MAX_DATA_LENGTH #MDL#
-INDEX_LENGTH #IL#
-DATA_FREE #DF#
-AUTO_INCREMENT NULL
-CREATE_TIME YYYY-MM-DD hh:mm:ss
-UPDATE_TIME YYYY-MM-DD hh:mm:ss
-CHECK_TIME YYYY-MM-DD hh:mm:ss
-TABLE_COLLATION utf8_general_ci
-CHECKSUM NULL
-CREATE_OPTIONS
-TABLE_COMMENT help keywords
-TABLE_CATALOG NULL
-TABLE_SCHEMA mysql
-TABLE_NAME help_relation
-TABLE_TYPE BASE TABLE
-ENGINE MyISAM
-VERSION 10
-ROW_FORMAT Fixed
-TABLE_ROWS 901
-AVG_ROW_LENGTH #ARL#
-DATA_LENGTH #DL#
-MAX_DATA_LENGTH #MDL#
-INDEX_LENGTH #IL#
-DATA_FREE #DF#
-AUTO_INCREMENT NULL
-CREATE_TIME YYYY-MM-DD hh:mm:ss
-UPDATE_TIME YYYY-MM-DD hh:mm:ss
-CHECK_TIME YYYY-MM-DD hh:mm:ss
-TABLE_COLLATION utf8_general_ci
-CHECKSUM NULL
-CREATE_OPTIONS
-TABLE_COMMENT keyword-topic relation
-TABLE_CATALOG NULL
-TABLE_SCHEMA mysql
-TABLE_NAME help_topic
-TABLE_TYPE BASE TABLE
-ENGINE MyISAM
-VERSION 10
-ROW_FORMAT Dynamic
-TABLE_ROWS 479
-AVG_ROW_LENGTH #ARL#
-DATA_LENGTH #DL#
-MAX_DATA_LENGTH #MDL#
-INDEX_LENGTH #IL#
-DATA_FREE #DF#
-AUTO_INCREMENT NULL
-CREATE_TIME YYYY-MM-DD hh:mm:ss
-UPDATE_TIME YYYY-MM-DD hh:mm:ss
-CHECK_TIME YYYY-MM-DD hh:mm:ss
-TABLE_COLLATION utf8_general_ci
-CHECKSUM NULL
-CREATE_OPTIONS
-TABLE_COMMENT help topics
-TABLE_CATALOG NULL
-TABLE_SCHEMA mysql
TABLE_NAME host
TABLE_TYPE BASE TABLE
ENGINE MyISAM
@@ -2336,9 +2264,9 @@ NULL information_schema COLUMNS NUMERIC_PRECISION 11 NULL YES bigint NULL NULL 1
NULL information_schema COLUMNS NUMERIC_SCALE 12 NULL YES bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned select
NULL information_schema COLUMNS CHARACTER_SET_NAME 13 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema COLUMNS COLLATION_NAME 14 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
-NULL information_schema COLUMNS COLUMN_TYPE 15 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema COLUMNS COLUMN_TYPE 15 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema COLUMNS COLUMN_KEY 16 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
-NULL information_schema COLUMNS EXTRA 17 NO varchar 20 60 NULL NULL utf8 utf8_general_ci varchar(20) select
+NULL information_schema COLUMNS EXTRA 17 NO varchar 27 81 NULL NULL utf8 utf8_general_ci varchar(27) select
NULL information_schema COLUMNS PRIVILEGES 18 NO varchar 80 240 NULL NULL utf8 utf8_general_ci varchar(80) select
NULL information_schema COLUMNS COLUMN_COMMENT 19 NO varchar 255 765 NULL NULL utf8 utf8_general_ci varchar(255) select
NULL information_schema COLUMN_PRIVILEGES GRANTEE 1 NO varchar 81 243 NULL NULL utf8 utf8_general_ci varchar(81) select
@@ -2360,12 +2288,12 @@ NULL information_schema EVENTS EVENT_NAME 3 NO varchar 64 192 NULL NULL utf8 ut
NULL information_schema EVENTS DEFINER 4 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
NULL information_schema EVENTS TIME_ZONE 5 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema EVENTS EVENT_BODY 6 NO varchar 8 24 NULL NULL utf8 utf8_general_ci varchar(8) select
-NULL information_schema EVENTS EVENT_DEFINITION 7 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema EVENTS EVENT_DEFINITION 7 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema EVENTS EVENT_TYPE 8 NO varchar 9 27 NULL NULL utf8 utf8_general_ci varchar(9) select
NULL information_schema EVENTS EXECUTE_AT 9 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS INTERVAL_VALUE 10 NULL YES varchar 256 768 NULL NULL utf8 utf8_general_ci varchar(256) select
NULL information_schema EVENTS INTERVAL_FIELD 11 NULL YES varchar 18 54 NULL NULL utf8 utf8_general_ci varchar(18) select
-NULL information_schema EVENTS SQL_MODE 12 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema EVENTS SQL_MODE 12 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema EVENTS STARTS 13 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS ENDS 14 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS STATUS 15 NO varchar 18 54 NULL NULL utf8 utf8_general_ci varchar(18) select
@@ -2503,7 +2431,7 @@ NULL information_schema ROUTINES SQL_PATH 14 NULL YES varchar 64 192 NULL NULL u
NULL information_schema ROUTINES SECURITY_TYPE 15 NO varchar 7 21 NULL NULL utf8 utf8_general_ci varchar(7) select
NULL information_schema ROUTINES CREATED 16 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema ROUTINES LAST_ALTERED 17 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime select
-NULL information_schema ROUTINES SQL_MODE 18 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema ROUTINES SQL_MODE 18 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema ROUTINES ROUTINE_COMMENT 19 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema ROUTINES DEFINER 20 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
NULL information_schema ROUTINES CHARACTER_SET_CLIENT 21 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
@@ -2580,7 +2508,7 @@ NULL information_schema TRIGGERS EVENT_OBJECT_SCHEMA 6 NO varchar 64 192 NULL N
NULL information_schema TRIGGERS EVENT_OBJECT_TABLE 7 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema TRIGGERS ACTION_ORDER 8 0 NO bigint NULL NULL 19 0 NULL NULL bigint(4) select
NULL information_schema TRIGGERS ACTION_CONDITION 9 NULL YES longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
-NULL information_schema TRIGGERS ACTION_STATEMENT 10 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS ACTION_STATEMENT 10 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema TRIGGERS ACTION_ORIENTATION 11 NO varchar 9 27 NULL NULL utf8 utf8_general_ci varchar(9) select
NULL information_schema TRIGGERS ACTION_TIMING 12 NO varchar 6 18 NULL NULL utf8 utf8_general_ci varchar(6) select
NULL information_schema TRIGGERS ACTION_REFERENCE_OLD_TABLE 13 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
@@ -2588,8 +2516,8 @@ NULL information_schema TRIGGERS ACTION_REFERENCE_NEW_TABLE 14 NULL YES varchar
NULL information_schema TRIGGERS ACTION_REFERENCE_OLD_ROW 15 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema TRIGGERS ACTION_REFERENCE_NEW_ROW 16 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema TRIGGERS CREATED 17 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
-NULL information_schema TRIGGERS SQL_MODE 18 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
-NULL information_schema TRIGGERS DEFINER 19 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS SQL_MODE 18 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS DEFINER 19 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema TRIGGERS CHARACTER_SET_CLIENT 20 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
NULL information_schema TRIGGERS COLLATION_CONNECTION 21 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
NULL information_schema TRIGGERS DATABASE_COLLATION 22 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
@@ -2600,7 +2528,7 @@ NULL information_schema USER_PRIVILEGES IS_GRANTABLE 4 NO varchar 3 9 NULL NULL
NULL information_schema VIEWS TABLE_CATALOG 1 NULL YES varchar 4096 12288 NULL NULL utf8 utf8_general_ci varchar(4096) select
NULL information_schema VIEWS TABLE_SCHEMA 2 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema VIEWS TABLE_NAME 3 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
-NULL information_schema VIEWS VIEW_DEFINITION 4 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema VIEWS VIEW_DEFINITION 4 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema VIEWS CHECK_OPTION 5 NO varchar 8 24 NULL NULL utf8 utf8_general_ci varchar(8) select
NULL information_schema VIEWS IS_UPDATABLE 6 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema VIEWS DEFINER 7 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
@@ -2637,7 +2565,7 @@ NULL mysql columns_priv Db 2 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PR
NULL mysql columns_priv User 3 NO char 16 48 NULL NULL utf8 utf8_bin char(16) PRI select,insert,update,references
NULL mysql columns_priv Table_name 4 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PRI select,insert,update,references
NULL mysql columns_priv Column_name 5 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PRI select,insert,update,references
-NULL mysql columns_priv Timestamp 6 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL mysql columns_priv Timestamp 6 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL mysql columns_priv Column_priv 7 NO set 31 93 NULL NULL utf8 utf8_general_ci set('Select','Insert','Update','References') select,insert,update,references
NULL mysql db Host 1 NO char 60 180 NULL NULL utf8 utf8_bin char(60) PRI select,insert,update,references
NULL mysql db Db 2 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PRI select,insert,update,references
@@ -2668,7 +2596,7 @@ NULL mysql event definer 4 NO char 77 231 NULL NULL utf8 utf8_bin char(77) se
NULL mysql event execute_at 5 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select,insert,update,references
NULL mysql event interval_value 6 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
NULL mysql event interval_field 7 NULL YES enum 18 54 NULL NULL utf8 utf8_general_ci enum('YEAR','QUARTER','MONTH','DAY','HOUR','MINUTE','WEEK','SECOND','MICROSECOND','YEAR_MONTH','DAY_HOUR','DAY_MINUTE','DAY_SECOND','HOUR_MINUTE','HOUR_SECOND','MINUTE_SECOND','DAY_MICROSECOND','HOUR_MICROSECOND','MINUTE_MICROSECOND','SECOND_MICROSECOND') select,insert,update,references
-NULL mysql event created 8 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL mysql event created 8 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL mysql event modified 9 0000-00-00 00:00:00 NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
NULL mysql event last_executed 10 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select,insert,update,references
NULL mysql event starts 11 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select,insert,update,references
@@ -2687,12 +2615,12 @@ NULL mysql func name 1 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PRI sel
NULL mysql func ret 2 0 NO tinyint NULL NULL 3 0 NULL NULL tinyint(1) select,insert,update,references
NULL mysql func dl 3 NO char 128 384 NULL NULL utf8 utf8_bin char(128) select,insert,update,references
NULL mysql func type 4 NULL NO enum 9 27 NULL NULL utf8 utf8_general_ci enum('function','aggregate') select,insert,update,references
-NULL mysql general_log event_time 1 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
-NULL mysql general_log user_host 2 NULL YES mediumtext 16777215 16777215 NULL NULL utf8 utf8_general_ci mediumtext select,insert,update,references
-NULL mysql general_log thread_id 3 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
-NULL mysql general_log server_id 4 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
-NULL mysql general_log command_type 5 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references
-NULL mysql general_log argument 6 NULL YES mediumtext 16777215 16777215 NULL NULL utf8 utf8_general_ci mediumtext select,insert,update,references
+NULL mysql general_log event_time 1 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
+NULL mysql general_log user_host 2 NULL NO mediumtext 16777215 16777215 NULL NULL utf8 utf8_general_ci mediumtext select,insert,update,references
+NULL mysql general_log thread_id 3 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
+NULL mysql general_log server_id 4 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
+NULL mysql general_log command_type 5 NULL NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references
+NULL mysql general_log argument 6 NULL NO mediumtext 16777215 16777215 NULL NULL utf8 utf8_general_ci mediumtext select,insert,update,references
NULL mysql help_category help_category_id 1 NULL NO smallint NULL NULL 5 0 NULL NULL smallint(5) unsigned PRI select,insert,update,references
NULL mysql help_category name 2 NULL NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) UNI select,insert,update,references
NULL mysql help_category parent_category_id 3 NULL YES smallint NULL NULL 5 0 NULL NULL smallint(5) unsigned select,insert,update,references
@@ -2745,10 +2673,10 @@ NULL mysql proc sql_data_access 6 CONTAINS_SQL NO enum 17 51 NULL NULL utf8 utf8
NULL mysql proc is_deterministic 7 NO NO enum 3 9 NULL NULL utf8 utf8_general_ci enum('YES','NO') select,insert,update,references
NULL mysql proc security_type 8 DEFINER NO enum 7 21 NULL NULL utf8 utf8_general_ci enum('INVOKER','DEFINER') select,insert,update,references
NULL mysql proc param_list 9 NULL NO blob 65535 65535 NULL NULL NULL NULL blob select,insert,update,references
-NULL mysql proc returns 10 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
+NULL mysql proc returns 10 NULL NO longblob 4294967295 4294967295 NULL NULL NULL NULL longblob select,insert,update,references
NULL mysql proc body 11 NULL NO longblob 4294967295 4294967295 NULL NULL NULL NULL longblob select,insert,update,references
NULL mysql proc definer 12 NO char 77 231 NULL NULL utf8 utf8_bin char(77) select,insert,update,references
-NULL mysql proc created 13 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL mysql proc created 13 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL mysql proc modified 14 0000-00-00 00:00:00 NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
NULL mysql proc sql_mode 15 NO set 431 1293 NULL NULL utf8 utf8_general_ci set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','NOT_USED','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE') select,insert,update,references
NULL mysql proc comment 16 NO char 64 192 NULL NULL utf8 utf8_bin char(64) select,insert,update,references
@@ -2763,7 +2691,7 @@ NULL mysql procs_priv Routine_name 4 NO char 64 192 NULL NULL utf8 utf8_bin cha
NULL mysql procs_priv Routine_type 5 NULL NO enum 9 27 NULL NULL utf8 utf8_bin enum('FUNCTION','PROCEDURE') PRI select,insert,update,references
NULL mysql procs_priv Grantor 6 NO char 77 231 NULL NULL utf8 utf8_bin char(77) MUL select,insert,update,references
NULL mysql procs_priv Proc_priv 7 NO set 27 81 NULL NULL utf8 utf8_general_ci set('Execute','Alter Routine','Grant') select,insert,update,references
-NULL mysql procs_priv Timestamp 8 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL mysql procs_priv Timestamp 8 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL mysql servers Server_name 1 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) PRI select,insert,update,references
NULL mysql servers Host 2 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
NULL mysql servers Db 3 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
@@ -2773,23 +2701,23 @@ NULL mysql servers Port 6 0 NO int NULL NULL 10 0 NULL NULL int(4) select,inse
NULL mysql servers Socket 7 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
NULL mysql servers Wrapper 8 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
NULL mysql servers Owner 9 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
-NULL mysql slow_log start_time 1 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL mysql slow_log start_time 1 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL mysql slow_log user_host 2 NULL NO mediumtext 16777215 16777215 NULL NULL utf8 utf8_general_ci mediumtext select,insert,update,references
NULL mysql slow_log query_time 3 NULL NO time NULL NULL NULL NULL NULL NULL time select,insert,update,references
NULL mysql slow_log lock_time 4 NULL NO time NULL NULL NULL NULL NULL NULL time select,insert,update,references
NULL mysql slow_log rows_sent 5 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
NULL mysql slow_log rows_examined 6 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
-NULL mysql slow_log db 7 NULL YES varchar 4096 12288 NULL NULL utf8 utf8_general_ci varchar(4096) select,insert,update,references
-NULL mysql slow_log last_insert_id 8 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
-NULL mysql slow_log insert_id 9 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
-NULL mysql slow_log server_id 10 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
+NULL mysql slow_log db 7 NULL NO varchar 4096 12288 NULL NULL utf8 utf8_general_ci varchar(4096) select,insert,update,references
+NULL mysql slow_log last_insert_id 8 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
+NULL mysql slow_log insert_id 9 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
+NULL mysql slow_log server_id 10 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
NULL mysql slow_log sql_text 11 NULL NO mediumtext 16777215 16777215 NULL NULL utf8 utf8_general_ci mediumtext select,insert,update,references
NULL mysql tables_priv Host 1 NO char 60 180 NULL NULL utf8 utf8_bin char(60) PRI select,insert,update,references
NULL mysql tables_priv Db 2 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PRI select,insert,update,references
NULL mysql tables_priv User 3 NO char 16 48 NULL NULL utf8 utf8_bin char(16) PRI select,insert,update,references
NULL mysql tables_priv Table_name 4 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PRI select,insert,update,references
NULL mysql tables_priv Grantor 5 NO char 77 231 NULL NULL utf8 utf8_bin char(77) MUL select,insert,update,references
-NULL mysql tables_priv Timestamp 6 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL mysql tables_priv Timestamp 6 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL mysql tables_priv Table_priv 7 NO set 98 294 NULL NULL utf8 utf8_general_ci set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter','Create View','Show view','Trigger') select,insert,update,references
NULL mysql tables_priv Column_priv 8 NO set 31 93 NULL NULL utf8 utf8_general_ci set('Select','Insert','Update','References') select,insert,update,references
NULL mysql time_zone Time_zone_id 1 NULL NO int NULL NULL 10 0 NULL NULL int(10) unsigned PRI auto_increment select,insert,update,references
@@ -3087,7 +3015,7 @@ NULL test tb4 f217 42 NULL YES double unsigned zerofill NULL NULL 22 NULL NULL N
NULL test tb4 f218 43 NULL YES date NULL NULL NULL NULL NULL NULL date select,insert,update,references
NULL test tb4 f219 44 NULL YES time NULL NULL NULL NULL NULL NULL time select,insert,update,references
NULL test tb4 f220 45 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select,insert,update,references
-NULL test tb4 f221 46 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL test tb4 f221 46 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL test tb4 f222 47 NULL YES year NULL NULL NULL NULL NULL NULL year(4) select,insert,update,references
NULL test tb4 f223 48 NULL YES year NULL NULL NULL NULL NULL NULL year(4) select,insert,update,references
NULL test tb4 f224 49 NULL YES year NULL NULL NULL NULL NULL NULL year(4) select,insert,update,references
@@ -3194,7 +3122,7 @@ binary binary Binary pseudo charset 1
geostd8 geostd8_general_ci GEOSTD8 Georgian 1
cp932 cp932_japanese_ci SJIS for Windows Japanese 2
eucjpms eucjpms_japanese_ci UJIS for Windows Japanese 3
-select sum(id) from collations;
+select sum(id) from collations where collation_name <> 'utf8_general_cs';
sum(id)
10840
select collation_name, character_set_name into @x,@y
@@ -3210,7 +3138,8 @@ END NULL NULL SQL NO CONTAINS SQL NULL DEFINER YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh
select count(*) from routines;
count(*)
1
-select * from statistics;
+select * from statistics
+where not (table_schema = 'mysql' and table_name like 'help_%');
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME NON_UNIQUE INDEX_SCHEMA INDEX_NAME SEQ_IN_INDEX COLUMN_NAME COLLATION CARDINALITY SUB_PART PACKED NULLABLE INDEX_TYPE COMMENT
NULL mysql columns_priv 0 mysql PRIMARY 1 Host A NULL NULL NULL BTREE
NULL mysql columns_priv 0 mysql PRIMARY 2 Db A NULL NULL NULL BTREE
@@ -3224,14 +3153,6 @@ NULL mysql db 1 mysql User 1 User A 1 NULL NULL BTREE
NULL mysql event 0 mysql PRIMARY 1 db A NULL NULL NULL BTREE
NULL mysql event 0 mysql PRIMARY 2 name A 0 NULL NULL BTREE
NULL mysql func 0 mysql PRIMARY 1 name A 0 NULL NULL BTREE
-NULL mysql help_category 0 mysql PRIMARY 1 help_category_id A 37 NULL NULL BTREE
-NULL mysql help_category 0 mysql name 1 name A 37 NULL NULL BTREE
-NULL mysql help_keyword 0 mysql PRIMARY 1 help_keyword_id A 424 NULL NULL BTREE
-NULL mysql help_keyword 0 mysql name 1 name A 424 NULL NULL BTREE
-NULL mysql help_relation 0 mysql PRIMARY 1 help_keyword_id A NULL NULL NULL BTREE
-NULL mysql help_relation 0 mysql PRIMARY 2 help_topic_id A 901 NULL NULL BTREE
-NULL mysql help_topic 0 mysql PRIMARY 1 help_topic_id A 479 NULL NULL BTREE
-NULL mysql help_topic 0 mysql name 1 name A 479 NULL NULL BTREE
NULL mysql host 0 mysql PRIMARY 1 Host A NULL NULL NULL BTREE
NULL mysql host 0 mysql PRIMARY 2 Db A 0 NULL NULL BTREE
NULL mysql ndb_binlog_index 0 mysql PRIMARY 1 epoch A 0 NULL NULL BTREE
@@ -3263,8 +3184,16 @@ NULL mysql user 0 mysql PRIMARY 2 User A 3 NULL NULL BTREE
select * from views;
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION
NULL db_datadict v1 SELECT * FROM information_schema.tables NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
-NULL db_datadict vu SELECT DISTINCT u, NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
-NULL db_datadict vu1 SELECT grantee AS u NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
+NULL db_datadict vu SELECT DISTINCT u,
+SUBSTRING( u, LENGTH(SUBSTRING_INDEX(u,'@',1))+3 )
+AS server,
+SUBSTRING( u, LENGTH(SUBSTRING_INDEX(u,'@',1))+3,
+LENGTH( SUBSTRING( u,
+LENGTH( SUBSTRING_INDEX(u, '@',1)) +3 )) - 1 )
+AS Server_Clean
+FROM db_datadict.vu1 NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
+NULL db_datadict vu1 SELECT grantee AS u
+FROM information_schema.user_privileges NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
select * from user_privileges order by grantee, privilege_type;
GRANTEE TABLE_CATALOG PRIVILEGE_TYPE IS_GRANTABLE
'root'@'127.0.0.1' NULL ALTER YES
@@ -3462,9 +3391,10 @@ NULL mysql PRIMARY NULL mysql user User 2 NULL NULL NULL NULL
select count(*) as max_recs from key_column_usage;
max_recs
45
-select max(cardinality) from statistics;
+select max(cardinality) from statistics
+where not (table_schema = 'mysql' and table_name like 'help_%');
max(cardinality)
-901
+393
select concat("View '",
table_name, "' is associated with the database '", table_schema, "'.")
AS "Who is Who for the Views"
@@ -3663,10 +3593,10 @@ NULL information_schema CHARACTER_SETS CHARACTER_SET_NAME 1 NO varchar 64 192 N
SELECT * FROM character_sets LIMIT 1;
CHARACTER_SET_NAME DEFAULT_COLLATE_NAME DESCRIPTION MAXLEN
big5 big5_chinese_ci Big5 Traditional Chinese 2
-SELECT * FROM collations LIMIT 1;
+SELECT * FROM collations where collation_name <> 'utf8_general_cs' LIMIT 1;
COLLATION_NAME CHARACTER_SET_NAME ID IS_DEFAULT IS_COMPILED SORTLEN
big5_chinese_ci big5 1 Yes Yes 1
-SELECT * FROM collation_character_set_applicability LIMIT 1;
+SELECT * FROM collation_character_set_applicability where collation_name <> 'utf8_general_cs' LIMIT 1;
COLLATION_NAME CHARACTER_SET_NAME
big5_chinese_ci big5
SELECT * FROM routines LIMIT 1;
@@ -4354,7 +4284,8 @@ CHECKSUM NULL
CREATE_OPTIONS #CO#
TABLE_COMMENT
SELECT * FROM information_schema.tables
-WHERE NOT( table_schema = 'information_schema');
+WHERE NOT( table_schema = 'information_schema')
+AND NOT (table_schema = 'mysql' AND table_name LIKE 'help_%');
TABLE_CATALOG NULL
TABLE_SCHEMA db_datadict
TABLE_NAME v1
@@ -4525,90 +4456,6 @@ CREATE_OPTIONS
TABLE_COMMENT General log
TABLE_CATALOG NULL
TABLE_SCHEMA mysql
-TABLE_NAME help_category
-TABLE_TYPE BASE TABLE
-ENGINE MyISAM
-VERSION 10
-ROW_FORMAT Fixed
-TABLE_ROWS 37
-AVG_ROW_LENGTH #ARL#
-DATA_LENGTH #DL#
-MAX_DATA_LENGTH #MDL#
-INDEX_LENGTH #IL#
-DATA_FREE #DF#
-AUTO_INCREMENT NULL
-CREATE_TIME YYYY-MM-DD hh:mm:ss
-UPDATE_TIME YYYY-MM-DD hh:mm:ss
-CHECK_TIME YYYY-MM-DD hh:mm:ss
-TABLE_COLLATION utf8_general_ci
-CHECKSUM NULL
-CREATE_OPTIONS
-TABLE_COMMENT help categories
-TABLE_CATALOG NULL
-TABLE_SCHEMA mysql
-TABLE_NAME help_keyword
-TABLE_TYPE BASE TABLE
-ENGINE MyISAM
-VERSION 10
-ROW_FORMAT Fixed
-TABLE_ROWS 424
-AVG_ROW_LENGTH #ARL#
-DATA_LENGTH #DL#
-MAX_DATA_LENGTH #MDL#
-INDEX_LENGTH #IL#
-DATA_FREE #DF#
-AUTO_INCREMENT NULL
-CREATE_TIME YYYY-MM-DD hh:mm:ss
-UPDATE_TIME YYYY-MM-DD hh:mm:ss
-CHECK_TIME YYYY-MM-DD hh:mm:ss
-TABLE_COLLATION utf8_general_ci
-CHECKSUM NULL
-CREATE_OPTIONS
-TABLE_COMMENT help keywords
-TABLE_CATALOG NULL
-TABLE_SCHEMA mysql
-TABLE_NAME help_relation
-TABLE_TYPE BASE TABLE
-ENGINE MyISAM
-VERSION 10
-ROW_FORMAT Fixed
-TABLE_ROWS 901
-AVG_ROW_LENGTH #ARL#
-DATA_LENGTH #DL#
-MAX_DATA_LENGTH #MDL#
-INDEX_LENGTH #IL#
-DATA_FREE #DF#
-AUTO_INCREMENT NULL
-CREATE_TIME YYYY-MM-DD hh:mm:ss
-UPDATE_TIME YYYY-MM-DD hh:mm:ss
-CHECK_TIME YYYY-MM-DD hh:mm:ss
-TABLE_COLLATION utf8_general_ci
-CHECKSUM NULL
-CREATE_OPTIONS
-TABLE_COMMENT keyword-topic relation
-TABLE_CATALOG NULL
-TABLE_SCHEMA mysql
-TABLE_NAME help_topic
-TABLE_TYPE BASE TABLE
-ENGINE MyISAM
-VERSION 10
-ROW_FORMAT Dynamic
-TABLE_ROWS 479
-AVG_ROW_LENGTH #ARL#
-DATA_LENGTH #DL#
-MAX_DATA_LENGTH #MDL#
-INDEX_LENGTH #IL#
-DATA_FREE #DF#
-AUTO_INCREMENT NULL
-CREATE_TIME YYYY-MM-DD hh:mm:ss
-UPDATE_TIME YYYY-MM-DD hh:mm:ss
-CHECK_TIME YYYY-MM-DD hh:mm:ss
-TABLE_COLLATION utf8_general_ci
-CHECKSUM NULL
-CREATE_OPTIONS
-TABLE_COMMENT help topics
-TABLE_CATALOG NULL
-TABLE_SCHEMA mysql
TABLE_NAME host
TABLE_TYPE BASE TABLE
ENGINE MyISAM
@@ -5672,8 +5519,16 @@ NULL mysql columns_priv 0 mysql PRIMARY 5 Column_name A 0 NULL NULL BTREE
select * from information_schema.views limit 0, 5;
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION
NULL db_datadict v1 SELECT * FROM information_schema.tables NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
-NULL db_datadict vu SELECT DISTINCT u, NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
-NULL db_datadict vu1 SELECT grantee AS u NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
+NULL db_datadict vu SELECT DISTINCT u,
+SUBSTRING( u, LENGTH(SUBSTRING_INDEX(u,'@',1))+3 )
+AS server,
+SUBSTRING( u, LENGTH(SUBSTRING_INDEX(u,'@',1))+3,
+LENGTH( SUBSTRING( u,
+LENGTH( SUBSTRING_INDEX(u, '@',1)) +3 )) - 1 )
+AS Server_Clean
+FROM db_datadict.vu1 NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
+NULL db_datadict vu1 SELECT grantee AS u
+FROM information_schema.user_privileges NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
select * from information_schema.user_privileges limit 0, 5;
GRANTEE TABLE_CATALOG PRIVILEGE_TYPE IS_GRANTABLE
'root'@'localhost' NULL SELECT YES
@@ -5724,10 +5579,10 @@ COUNT(*)
SELECT COUNT(*) FROM information_schema. character_sets ;
COUNT(*)
36
-SELECT COUNT(*) FROM information_schema. collations ;
+SELECT COUNT(*) FROM information_schema. collations where collation_name <> 'utf8_general_cs' ;
COUNT(*)
127
-SELECT COUNT(*) FROM information_schema. collation_character_set_applicability ;
+SELECT COUNT(*) FROM information_schema. collation_character_set_applicability where collation_name <> 'utf8_general_cs' ;
COUNT(*)
128
SELECT COUNT(*) FROM information_schema. routines ;
@@ -5806,10 +5661,10 @@ utf8_esperanto_ci utf8
utf8_estonian_ci utf8
select routine_definition from routines;
routine_definition
-select * from statistics group by index_name asc limit 0, 5;
+select * from statistics where table_name not like 'help_%'
+group by index_name asc limit 0, 5;
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME NON_UNIQUE INDEX_SCHEMA INDEX_NAME SEQ_IN_INDEX COLUMN_NAME COLLATION CARDINALITY SUB_PART PACKED NULLABLE INDEX_TYPE COMMENT
NULL mysql procs_priv 1 mysql Grantor 1 Grantor A NULL NULL NULL BTREE
-NULL mysql help_category 0 mysql name 1 name A 37 NULL NULL BTREE
NULL mysql columns_priv 0 mysql PRIMARY 1 Host A NULL NULL NULL BTREE
NULL mysql db 1 mysql User 1 User A 1 NULL NULL BTREE
select concat(table_schema, ', ', table_name, ', ', view_definition) view_info
@@ -5923,9 +5778,9 @@ NULL test latin1 latin1_swedish_ci NULL
NULL test1 latin1 latin1_swedish_ci NULL
select distinct grantee from user_privileges;
grantee
-'root'@'localhost'
-'root'@'<SERVER_NAME>'
'root'@'127.0.0.1'
+'root'@'<SERVER_NAME>'
+'root'@'localhost'
select all grantee from user_privileges order by grantee, privilege_type;
grantee
'root'@'127.0.0.1'
@@ -7482,7 +7337,7 @@ from information_schema.statistics
where table_schema like 'db_datadict%';
table_name index_schema index_name index_type
select *
-from information_schema.user_privileges order by grantee, privilege_type;
+from information_schema.user_privileges;
GRANTEE TABLE_CATALOG PRIVILEGE_TYPE IS_GRANTABLE
'root'@'127.0.0.1' NULL ALTER YES
'root'@'127.0.0.1' NULL ALTER ROUTINE YES
@@ -7633,7 +7488,7 @@ where table_schema like 'db_datadict%';
table_name index_schema index_name index_type
res_t_401013 db_datadict i_6_401013 HASH
select *
-from information_schema.user_privileges order by grantee, privilege_type;
+from information_schema.user_privileges;
GRANTEE TABLE_CATALOG PRIVILEGE_TYPE IS_GRANTABLE
'root'@'127.0.0.1' NULL ALTER YES
'root'@'127.0.0.1' NULL ALTER ROUTINE YES
@@ -7770,7 +7625,7 @@ from information_schema.statistics
where table_schema like 'db_datadict%';
table_name index_schema index_name index_type
select *
-from information_schema.user_privileges order by grantee, privilege_type;
+from information_schema.user_privileges;
GRANTEE TABLE_CATALOG PRIVILEGE_TYPE IS_GRANTABLE
'root'@'127.0.0.1' NULL ALTER YES
'root'@'127.0.0.1' NULL ALTER ROUTINE YES
@@ -7875,7 +7730,7 @@ Testcase 3.2.1.14:
DROP DATABASE IF EXISTS db_datadict;
CREATE DATABASE db_datadict;
USE db_datadict;
-create table res_t_401014(f1 char(10), f2 text(25), f3 int);
+create table res_t_401014(f1 char(10), f2 varchar(25), f3 int);
create view res_v_401014 as select * from res_t_401014;
create procedure sp_6_401014() select 'db_datadict';
create function fn_6_401014() returns int return 0;
@@ -7898,10 +7753,10 @@ from information_schema.columns
where table_schema like 'db_datadict%';
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION COLUMN_DEFAULT IS_NULLABLE DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE CHARACTER_SET_NAME COLLATION_NAME COLUMN_TYPE COLUMN_KEY EXTRA PRIVILEGES COLUMN_COMMENT
NULL db_datadict res_t_401014 f1 1 NULL YES char 10 10 NULL NULL latin1 latin1_swedish_ci char(10) select,insert,update,references
-NULL db_datadict res_t_401014 f2 2 NULL YES tinytext 255 255 NULL NULL latin1 latin1_swedish_ci tinytext select,insert,update,references
+NULL db_datadict res_t_401014 f2 2 NULL YES varchar 25 25 NULL NULL latin1 latin1_swedish_ci varchar(25) select,insert,update,references
NULL db_datadict res_t_401014 f3 3 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
NULL db_datadict res_v_401014 f1 1 NULL YES char 10 10 NULL NULL latin1 latin1_swedish_ci char(10) select,insert,update,references
-NULL db_datadict res_v_401014 f2 2 NULL YES tinytext 255 255 NULL NULL latin1 latin1_swedish_ci tinytext select,insert,update,references
+NULL db_datadict res_v_401014 f2 2 NULL YES varchar 25 25 NULL NULL latin1 latin1_swedish_ci varchar(25) select,insert,update,references
NULL db_datadict res_v_401014 f3 3 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
select table_schema, table_name, is_updatable
from information_schema.views
@@ -7919,7 +7774,7 @@ from information_schema.statistics
where table_schema like 'db_datadict%';
table_name index_schema index_name index_type
select *
-from information_schema.user_privileges order by grantee, privilege_type;
+from information_schema.user_privileges;
GRANTEE TABLE_CATALOG PRIVILEGE_TYPE IS_GRANTABLE
'root'@'127.0.0.1' NULL ALTER YES
'root'@'127.0.0.1' NULL ALTER ROUTINE YES
@@ -8020,7 +7875,7 @@ WHERE trigger_schema LIKE 'db_datadict%';
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
use db_datadict;
alter table res_t_401014 change f1 ff1 int;
-alter table res_t_401014 engine = innodb;
+alter table res_t_401014 engine = MyISAM;
alter table res_t_401014 change f3 f3_new bigint;
alter view res_v_401014 as select ff1 from res_t_401014;
alter procedure sp_6_401014 sql security invoker;
@@ -8038,14 +7893,14 @@ select table_catalog, table_schema, engine
from information_schema.tables
where table_schema like 'db_datadict%';
table_catalog table_schema engine
-NULL db_datadict InnoDB
+NULL db_datadict MyISAM
NULL db_datadict NULL
select *
from information_schema.columns
where table_schema like 'db_datadict%';
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION COLUMN_DEFAULT IS_NULLABLE DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE CHARACTER_SET_NAME COLLATION_NAME COLUMN_TYPE COLUMN_KEY EXTRA PRIVILEGES COLUMN_COMMENT
NULL db_datadict res_t_401014 ff1 1 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
-NULL db_datadict res_t_401014 f2 2 NULL YES tinytext 255 255 NULL NULL latin1 latin1_swedish_ci tinytext select,insert,update,references
+NULL db_datadict res_t_401014 f2 2 NULL YES varchar 25 25 NULL NULL latin1 latin1_swedish_ci varchar(25) select,insert,update,references
NULL db_datadict res_t_401014 f3_new 3 NULL YES bigint NULL NULL 19 0 NULL NULL bigint(20) select,insert,update,references
NULL db_datadict res_v_401014 ff1 1 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
select table_schema, table_name, is_updatable
@@ -8064,7 +7919,7 @@ from information_schema.statistics
where table_schema like 'db_datadict%';
table_name index_schema index_name index_type
select *
-from information_schema.user_privileges order by grantee, privilege_type;
+from information_schema.user_privileges;
GRANTEE TABLE_CATALOG PRIVILEGE_TYPE IS_GRANTABLE
'root'@'127.0.0.1' NULL ALTER YES
'root'@'127.0.0.1' NULL ALTER ROUTINE YES
@@ -8222,7 +8077,7 @@ where table_schema like 'db_datadict%';
table_name index_schema index_name index_type
res_t_401015 db_datadict i_6_401015 BTREE
select *
-from information_schema.user_privileges order by grantee, privilege_type;
+from information_schema.user_privileges;
GRANTEE TABLE_CATALOG PRIVILEGE_TYPE IS_GRANTABLE
'root'@'127.0.0.1' NULL ALTER YES
'root'@'127.0.0.1' NULL ALTER ROUTINE YES
@@ -8358,7 +8213,7 @@ from information_schema.statistics
where table_schema like 'db_datadict%';
table_name index_schema index_name index_type
select *
-from information_schema.user_privileges order by grantee, privilege_type;
+from information_schema.user_privileges;
GRANTEE TABLE_CATALOG PRIVILEGE_TYPE IS_GRANTABLE
'root'@'127.0.0.1' NULL ALTER YES
'root'@'127.0.0.1' NULL ALTER ROUTINE YES
@@ -8608,7 +8463,8 @@ ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_
FLUSH PRIVILEGES;
connect(localhost,u_6_401017,,test,MYSQL_PORT,MYSQL_SOCK);
use information_schema;
-select * from collation_character_set_applicability;
+select * from collation_character_set_applicability
+where collation_name <> 'utf8_general_cs';
COLLATION_NAME CHARACTER_SET_NAME
big5_chinese_ci big5
big5_bin big5
@@ -8814,7 +8670,7 @@ COLUMNS CHARACTER_SET_NAME varchar(64)
COLUMNS COLLATION_NAME varchar(64)
COLUMNS COLUMN_TYPE longtext
COLUMNS COLUMN_KEY varchar(3)
-COLUMNS EXTRA varchar(20)
+COLUMNS EXTRA varchar(27)
COLUMNS PRIVILEGES varchar(80)
COLUMNS COLUMN_COMMENT varchar(255)
COLUMN_PRIVILEGES GRANTEE varchar(81)
@@ -9375,7 +9231,7 @@ binary
geostd8
cp932
eucjpms
-select collation_name from collations;
+select collation_name from collations where collation_name <> 'utf8_general_cs';
collation_name
big5_chinese_ci
big5_bin
@@ -9740,7 +9596,7 @@ NULL information_schema collations SORTLEN 6 0 NO bigint NULL NULL 19 0 NULL NUL
Testcase 3.2.3.2:
--------------------------------------------------------------------------------
-SELECT * FROM collations;
+SELECT * FROM collations where collation_name <> 'utf8_general_cs';
COLLATION_NAME CHARACTER_SET_NAME ID IS_DEFAULT IS_COMPILED SORTLEN
big5_chinese_ci big5 1 Yes Yes 1
big5_bin big5 84 Yes 1
@@ -9902,7 +9758,8 @@ NULL information_schema collation_character_set_applicability CHARACTER_SET_NAME
Testcase 3.2.4.2:
--------------------------------------------------------------------------------
-SELECT * FROM collation_character_set_applicability;
+SELECT * FROM collation_character_set_applicability
+where collation_name <> 'utf8_general_cs';
COLLATION_NAME CHARACTER_SET_NAME
big5_chinese_ci big5
big5_bin big5
@@ -10215,9 +10072,9 @@ NUMERIC_PRECISION bigint(21) unsigned YES NULL
NUMERIC_SCALE bigint(21) unsigned YES NULL
CHARACTER_SET_NAME varchar(64) YES NULL
COLLATION_NAME varchar(64) YES NULL
-COLUMN_TYPE longtext NO
+COLUMN_TYPE longtext NO NULL
COLUMN_KEY varchar(3) NO
-EXTRA varchar(20) NO
+EXTRA varchar(27) NO
PRIVILEGES varchar(80) NO
COLUMN_COMMENT varchar(255) NO
SHOW CREATE TABLE columns;
@@ -10239,7 +10096,7 @@ COLUMNS CREATE TEMPORARY TABLE `COLUMNS` (
`COLLATION_NAME` varchar(64) DEFAULT NULL,
`COLUMN_TYPE` longtext NOT NULL,
`COLUMN_KEY` varchar(3) NOT NULL DEFAULT '',
- `EXTRA` varchar(20) NOT NULL DEFAULT '',
+ `EXTRA` varchar(27) NOT NULL DEFAULT '',
`PRIVILEGES` varchar(80) NOT NULL DEFAULT '',
`COLUMN_COMMENT` varchar(255) NOT NULL DEFAULT ''
) ENGINE=MyISAM DEFAULT CHARSET=utf8
@@ -10268,9 +10125,9 @@ NULL information_schema columns NUMERIC_PRECISION 11 NULL YES bigint NULL NULL 1
NULL information_schema columns NUMERIC_SCALE 12 NULL YES bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned select
NULL information_schema columns CHARACTER_SET_NAME 13 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema columns COLLATION_NAME 14 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
-NULL information_schema columns COLUMN_TYPE 15 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema columns COLUMN_TYPE 15 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema columns COLUMN_KEY 16 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
-NULL information_schema columns EXTRA 17 NO varchar 20 60 NULL NULL utf8 utf8_general_ci varchar(20) select
+NULL information_schema columns EXTRA 17 NO varchar 27 81 NULL NULL utf8 utf8_general_ci varchar(27) select
NULL information_schema columns PRIVILEGES 18 NO varchar 80 240 NULL NULL utf8 utf8_general_ci varchar(80) select
NULL information_schema columns COLUMN_COMMENT 19 NO varchar 255 765 NULL NULL utf8 utf8_general_ci varchar(255) select
@@ -10323,9 +10180,9 @@ NULL information_schema COLUMNS NUMERIC_PRECISION 11 NULL YES bigint NULL NULL 1
NULL information_schema COLUMNS NUMERIC_SCALE 12 NULL YES bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned select
NULL information_schema COLUMNS CHARACTER_SET_NAME 13 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema COLUMNS COLLATION_NAME 14 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
-NULL information_schema COLUMNS COLUMN_TYPE 15 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema COLUMNS COLUMN_TYPE 15 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema COLUMNS COLUMN_KEY 16 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
-NULL information_schema COLUMNS EXTRA 17 NO varchar 20 60 NULL NULL utf8 utf8_general_ci varchar(20) select
+NULL information_schema COLUMNS EXTRA 17 NO varchar 27 81 NULL NULL utf8 utf8_general_ci varchar(27) select
NULL information_schema COLUMNS PRIVILEGES 18 NO varchar 80 240 NULL NULL utf8 utf8_general_ci varchar(80) select
NULL information_schema COLUMNS COLUMN_COMMENT 19 NO varchar 255 765 NULL NULL utf8 utf8_general_ci varchar(255) select
NULL information_schema COLUMN_PRIVILEGES GRANTEE 1 NO varchar 81 243 NULL NULL utf8 utf8_general_ci varchar(81) select
@@ -10347,12 +10204,12 @@ NULL information_schema EVENTS EVENT_NAME 3 NO varchar 64 192 NULL NULL utf8 ut
NULL information_schema EVENTS DEFINER 4 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
NULL information_schema EVENTS TIME_ZONE 5 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema EVENTS EVENT_BODY 6 NO varchar 8 24 NULL NULL utf8 utf8_general_ci varchar(8) select
-NULL information_schema EVENTS EVENT_DEFINITION 7 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema EVENTS EVENT_DEFINITION 7 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema EVENTS EVENT_TYPE 8 NO varchar 9 27 NULL NULL utf8 utf8_general_ci varchar(9) select
NULL information_schema EVENTS EXECUTE_AT 9 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS INTERVAL_VALUE 10 NULL YES varchar 256 768 NULL NULL utf8 utf8_general_ci varchar(256) select
NULL information_schema EVENTS INTERVAL_FIELD 11 NULL YES varchar 18 54 NULL NULL utf8 utf8_general_ci varchar(18) select
-NULL information_schema EVENTS SQL_MODE 12 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema EVENTS SQL_MODE 12 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema EVENTS STARTS 13 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS ENDS 14 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS STATUS 15 NO varchar 18 54 NULL NULL utf8 utf8_general_ci varchar(18) select
@@ -10490,7 +10347,7 @@ NULL information_schema ROUTINES SQL_PATH 14 NULL YES varchar 64 192 NULL NULL u
NULL information_schema ROUTINES SECURITY_TYPE 15 NO varchar 7 21 NULL NULL utf8 utf8_general_ci varchar(7) select
NULL information_schema ROUTINES CREATED 16 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema ROUTINES LAST_ALTERED 17 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime select
-NULL information_schema ROUTINES SQL_MODE 18 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema ROUTINES SQL_MODE 18 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema ROUTINES ROUTINE_COMMENT 19 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema ROUTINES DEFINER 20 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
NULL information_schema ROUTINES CHARACTER_SET_CLIENT 21 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
@@ -10567,7 +10424,7 @@ NULL information_schema TRIGGERS EVENT_OBJECT_SCHEMA 6 NO varchar 64 192 NULL N
NULL information_schema TRIGGERS EVENT_OBJECT_TABLE 7 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema TRIGGERS ACTION_ORDER 8 0 NO bigint NULL NULL 19 0 NULL NULL bigint(4) select
NULL information_schema TRIGGERS ACTION_CONDITION 9 NULL YES longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
-NULL information_schema TRIGGERS ACTION_STATEMENT 10 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS ACTION_STATEMENT 10 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema TRIGGERS ACTION_ORIENTATION 11 NO varchar 9 27 NULL NULL utf8 utf8_general_ci varchar(9) select
NULL information_schema TRIGGERS ACTION_TIMING 12 NO varchar 6 18 NULL NULL utf8 utf8_general_ci varchar(6) select
NULL information_schema TRIGGERS ACTION_REFERENCE_OLD_TABLE 13 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
@@ -10575,8 +10432,8 @@ NULL information_schema TRIGGERS ACTION_REFERENCE_NEW_TABLE 14 NULL YES varchar
NULL information_schema TRIGGERS ACTION_REFERENCE_OLD_ROW 15 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema TRIGGERS ACTION_REFERENCE_NEW_ROW 16 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema TRIGGERS CREATED 17 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
-NULL information_schema TRIGGERS SQL_MODE 18 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
-NULL information_schema TRIGGERS DEFINER 19 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS SQL_MODE 18 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS DEFINER 19 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema TRIGGERS CHARACTER_SET_CLIENT 20 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
NULL information_schema TRIGGERS COLLATION_CONNECTION 21 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
NULL information_schema TRIGGERS DATABASE_COLLATION 22 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
@@ -10587,7 +10444,7 @@ NULL information_schema USER_PRIVILEGES IS_GRANTABLE 4 NO varchar 3 9 NULL NULL
NULL information_schema VIEWS TABLE_CATALOG 1 NULL YES varchar 4096 12288 NULL NULL utf8 utf8_general_ci varchar(4096) select
NULL information_schema VIEWS TABLE_SCHEMA 2 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema VIEWS TABLE_NAME 3 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
-NULL information_schema VIEWS VIEW_DEFINITION 4 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema VIEWS VIEW_DEFINITION 4 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema VIEWS CHECK_OPTION 5 NO varchar 8 24 NULL NULL utf8 utf8_general_ci varchar(8) select
NULL information_schema VIEWS IS_UPDATABLE 6 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema VIEWS DEFINER 7 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
@@ -10599,7 +10456,7 @@ NULL mysql columns_priv Db 2 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PR
NULL mysql columns_priv User 3 NO char 16 48 NULL NULL utf8 utf8_bin char(16) PRI select,insert,update,references
NULL mysql columns_priv Table_name 4 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PRI select,insert,update,references
NULL mysql columns_priv Column_name 5 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PRI select,insert,update,references
-NULL mysql columns_priv Timestamp 6 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL mysql columns_priv Timestamp 6 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL mysql columns_priv Column_priv 7 NO set 31 93 NULL NULL utf8 utf8_general_ci set('Select','Insert','Update','References') select,insert,update,references
NULL mysql db Host 1 NO char 60 180 NULL NULL utf8 utf8_bin char(60) PRI select,insert,update,references
NULL mysql db Db 2 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PRI select,insert,update,references
@@ -10630,7 +10487,7 @@ NULL mysql event definer 4 NO char 77 231 NULL NULL utf8 utf8_bin char(77) se
NULL mysql event execute_at 5 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select,insert,update,references
NULL mysql event interval_value 6 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
NULL mysql event interval_field 7 NULL YES enum 18 54 NULL NULL utf8 utf8_general_ci enum('YEAR','QUARTER','MONTH','DAY','HOUR','MINUTE','WEEK','SECOND','MICROSECOND','YEAR_MONTH','DAY_HOUR','DAY_MINUTE','DAY_SECOND','HOUR_MINUTE','HOUR_SECOND','MINUTE_SECOND','DAY_MICROSECOND','HOUR_MICROSECOND','MINUTE_MICROSECOND','SECOND_MICROSECOND') select,insert,update,references
-NULL mysql event created 8 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL mysql event created 8 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL mysql event modified 9 0000-00-00 00:00:00 NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
NULL mysql event last_executed 10 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select,insert,update,references
NULL mysql event starts 11 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select,insert,update,references
@@ -10649,12 +10506,12 @@ NULL mysql func name 1 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PRI sel
NULL mysql func ret 2 0 NO tinyint NULL NULL 3 0 NULL NULL tinyint(1) select,insert,update,references
NULL mysql func dl 3 NO char 128 384 NULL NULL utf8 utf8_bin char(128) select,insert,update,references
NULL mysql func type 4 NULL NO enum 9 27 NULL NULL utf8 utf8_general_ci enum('function','aggregate') select,insert,update,references
-NULL mysql general_log event_time 1 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
-NULL mysql general_log user_host 2 NULL YES mediumtext 16777215 16777215 NULL NULL utf8 utf8_general_ci mediumtext select,insert,update,references
-NULL mysql general_log thread_id 3 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
-NULL mysql general_log server_id 4 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
-NULL mysql general_log command_type 5 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references
-NULL mysql general_log argument 6 NULL YES mediumtext 16777215 16777215 NULL NULL utf8 utf8_general_ci mediumtext select,insert,update,references
+NULL mysql general_log event_time 1 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
+NULL mysql general_log user_host 2 NULL NO mediumtext 16777215 16777215 NULL NULL utf8 utf8_general_ci mediumtext select,insert,update,references
+NULL mysql general_log thread_id 3 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
+NULL mysql general_log server_id 4 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
+NULL mysql general_log command_type 5 NULL NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references
+NULL mysql general_log argument 6 NULL NO mediumtext 16777215 16777215 NULL NULL utf8 utf8_general_ci mediumtext select,insert,update,references
NULL mysql help_category help_category_id 1 NULL NO smallint NULL NULL 5 0 NULL NULL smallint(5) unsigned PRI select,insert,update,references
NULL mysql help_category name 2 NULL NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) UNI select,insert,update,references
NULL mysql help_category parent_category_id 3 NULL YES smallint NULL NULL 5 0 NULL NULL smallint(5) unsigned select,insert,update,references
@@ -10707,10 +10564,10 @@ NULL mysql proc sql_data_access 6 CONTAINS_SQL NO enum 17 51 NULL NULL utf8 utf8
NULL mysql proc is_deterministic 7 NO NO enum 3 9 NULL NULL utf8 utf8_general_ci enum('YES','NO') select,insert,update,references
NULL mysql proc security_type 8 DEFINER NO enum 7 21 NULL NULL utf8 utf8_general_ci enum('INVOKER','DEFINER') select,insert,update,references
NULL mysql proc param_list 9 NULL NO blob 65535 65535 NULL NULL NULL NULL blob select,insert,update,references
-NULL mysql proc returns 10 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
+NULL mysql proc returns 10 NULL NO longblob 4294967295 4294967295 NULL NULL NULL NULL longblob select,insert,update,references
NULL mysql proc body 11 NULL NO longblob 4294967295 4294967295 NULL NULL NULL NULL longblob select,insert,update,references
NULL mysql proc definer 12 NO char 77 231 NULL NULL utf8 utf8_bin char(77) select,insert,update,references
-NULL mysql proc created 13 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL mysql proc created 13 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL mysql proc modified 14 0000-00-00 00:00:00 NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
NULL mysql proc sql_mode 15 NO set 431 1293 NULL NULL utf8 utf8_general_ci set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','NOT_USED','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE') select,insert,update,references
NULL mysql proc comment 16 NO char 64 192 NULL NULL utf8 utf8_bin char(64) select,insert,update,references
@@ -10725,7 +10582,7 @@ NULL mysql procs_priv Routine_name 4 NO char 64 192 NULL NULL utf8 utf8_bin cha
NULL mysql procs_priv Routine_type 5 NULL NO enum 9 27 NULL NULL utf8 utf8_bin enum('FUNCTION','PROCEDURE') PRI select,insert,update,references
NULL mysql procs_priv Grantor 6 NO char 77 231 NULL NULL utf8 utf8_bin char(77) MUL select,insert,update,references
NULL mysql procs_priv Proc_priv 7 NO set 27 81 NULL NULL utf8 utf8_general_ci set('Execute','Alter Routine','Grant') select,insert,update,references
-NULL mysql procs_priv Timestamp 8 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL mysql procs_priv Timestamp 8 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL mysql servers Server_name 1 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) PRI select,insert,update,references
NULL mysql servers Host 2 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
NULL mysql servers Db 3 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
@@ -10735,23 +10592,23 @@ NULL mysql servers Port 6 0 NO int NULL NULL 10 0 NULL NULL int(4) select,inse
NULL mysql servers Socket 7 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
NULL mysql servers Wrapper 8 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
NULL mysql servers Owner 9 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
-NULL mysql slow_log start_time 1 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL mysql slow_log start_time 1 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL mysql slow_log user_host 2 NULL NO mediumtext 16777215 16777215 NULL NULL utf8 utf8_general_ci mediumtext select,insert,update,references
NULL mysql slow_log query_time 3 NULL NO time NULL NULL NULL NULL NULL NULL time select,insert,update,references
NULL mysql slow_log lock_time 4 NULL NO time NULL NULL NULL NULL NULL NULL time select,insert,update,references
NULL mysql slow_log rows_sent 5 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
NULL mysql slow_log rows_examined 6 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
-NULL mysql slow_log db 7 NULL YES varchar 4096 12288 NULL NULL utf8 utf8_general_ci varchar(4096) select,insert,update,references
-NULL mysql slow_log last_insert_id 8 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
-NULL mysql slow_log insert_id 9 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
-NULL mysql slow_log server_id 10 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
+NULL mysql slow_log db 7 NULL NO varchar 4096 12288 NULL NULL utf8 utf8_general_ci varchar(4096) select,insert,update,references
+NULL mysql slow_log last_insert_id 8 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
+NULL mysql slow_log insert_id 9 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
+NULL mysql slow_log server_id 10 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
NULL mysql slow_log sql_text 11 NULL NO mediumtext 16777215 16777215 NULL NULL utf8 utf8_general_ci mediumtext select,insert,update,references
NULL mysql tables_priv Host 1 NO char 60 180 NULL NULL utf8 utf8_bin char(60) PRI select,insert,update,references
NULL mysql tables_priv Db 2 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PRI select,insert,update,references
NULL mysql tables_priv User 3 NO char 16 48 NULL NULL utf8 utf8_bin char(16) PRI select,insert,update,references
NULL mysql tables_priv Table_name 4 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PRI select,insert,update,references
NULL mysql tables_priv Grantor 5 NO char 77 231 NULL NULL utf8 utf8_bin char(77) MUL select,insert,update,references
-NULL mysql tables_priv Timestamp 6 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL mysql tables_priv Timestamp 6 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL mysql tables_priv Table_priv 7 NO set 98 294 NULL NULL utf8 utf8_general_ci set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter','Create View','Show view','Trigger') select,insert,update,references
NULL mysql tables_priv Column_priv 8 NO set 31 93 NULL NULL utf8 utf8_general_ci set('Select','Insert','Update','References') select,insert,update,references
NULL mysql time_zone Time_zone_id 1 NULL NO int NULL NULL 10 0 NULL NULL int(10) unsigned PRI auto_increment select,insert,update,references
@@ -11049,7 +10906,7 @@ NULL test tb4 f217 42 NULL YES double unsigned zerofill NULL NULL 22 NULL NULL N
NULL test tb4 f218 43 NULL YES date NULL NULL NULL NULL NULL NULL date select,insert,update,references
NULL test tb4 f219 44 NULL YES time NULL NULL NULL NULL NULL NULL time select,insert,update,references
NULL test tb4 f220 45 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select,insert,update,references
-NULL test tb4 f221 46 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL test tb4 f221 46 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL test tb4 f222 47 NULL YES year NULL NULL NULL NULL NULL NULL year(4) select,insert,update,references
NULL test tb4 f223 48 NULL YES year NULL NULL NULL NULL NULL NULL year(4) select,insert,update,references
NULL test tb4 f224 49 NULL YES year NULL NULL NULL NULL NULL NULL year(4) select,insert,update,references
@@ -11150,9 +11007,9 @@ NULL information_schema COLUMNS NUMERIC_PRECISION 11 NULL YES bigint NULL NULL 1
NULL information_schema COLUMNS NUMERIC_SCALE 12 NULL YES bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned select
NULL information_schema COLUMNS CHARACTER_SET_NAME 13 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema COLUMNS COLLATION_NAME 14 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
-NULL information_schema COLUMNS COLUMN_TYPE 15 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema COLUMNS COLUMN_TYPE 15 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema COLUMNS COLUMN_KEY 16 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
-NULL information_schema COLUMNS EXTRA 17 NO varchar 20 60 NULL NULL utf8 utf8_general_ci varchar(20) select
+NULL information_schema COLUMNS EXTRA 17 NO varchar 27 81 NULL NULL utf8 utf8_general_ci varchar(27) select
NULL information_schema COLUMNS PRIVILEGES 18 NO varchar 80 240 NULL NULL utf8 utf8_general_ci varchar(80) select
NULL information_schema COLUMNS COLUMN_COMMENT 19 NO varchar 255 765 NULL NULL utf8 utf8_general_ci varchar(255) select
NULL information_schema COLUMN_PRIVILEGES GRANTEE 1 NO varchar 81 243 NULL NULL utf8 utf8_general_ci varchar(81) select
@@ -11174,12 +11031,12 @@ NULL information_schema EVENTS EVENT_NAME 3 NO varchar 64 192 NULL NULL utf8 ut
NULL information_schema EVENTS DEFINER 4 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
NULL information_schema EVENTS TIME_ZONE 5 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema EVENTS EVENT_BODY 6 NO varchar 8 24 NULL NULL utf8 utf8_general_ci varchar(8) select
-NULL information_schema EVENTS EVENT_DEFINITION 7 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema EVENTS EVENT_DEFINITION 7 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema EVENTS EVENT_TYPE 8 NO varchar 9 27 NULL NULL utf8 utf8_general_ci varchar(9) select
NULL information_schema EVENTS EXECUTE_AT 9 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS INTERVAL_VALUE 10 NULL YES varchar 256 768 NULL NULL utf8 utf8_general_ci varchar(256) select
NULL information_schema EVENTS INTERVAL_FIELD 11 NULL YES varchar 18 54 NULL NULL utf8 utf8_general_ci varchar(18) select
-NULL information_schema EVENTS SQL_MODE 12 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema EVENTS SQL_MODE 12 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema EVENTS STARTS 13 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS ENDS 14 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS STATUS 15 NO varchar 18 54 NULL NULL utf8 utf8_general_ci varchar(18) select
@@ -11317,7 +11174,7 @@ NULL information_schema ROUTINES SQL_PATH 14 NULL YES varchar 64 192 NULL NULL u
NULL information_schema ROUTINES SECURITY_TYPE 15 NO varchar 7 21 NULL NULL utf8 utf8_general_ci varchar(7) select
NULL information_schema ROUTINES CREATED 16 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema ROUTINES LAST_ALTERED 17 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime select
-NULL information_schema ROUTINES SQL_MODE 18 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema ROUTINES SQL_MODE 18 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema ROUTINES ROUTINE_COMMENT 19 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema ROUTINES DEFINER 20 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
NULL information_schema ROUTINES CHARACTER_SET_CLIENT 21 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
@@ -11394,7 +11251,7 @@ NULL information_schema TRIGGERS EVENT_OBJECT_SCHEMA 6 NO varchar 64 192 NULL N
NULL information_schema TRIGGERS EVENT_OBJECT_TABLE 7 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema TRIGGERS ACTION_ORDER 8 0 NO bigint NULL NULL 19 0 NULL NULL bigint(4) select
NULL information_schema TRIGGERS ACTION_CONDITION 9 NULL YES longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
-NULL information_schema TRIGGERS ACTION_STATEMENT 10 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS ACTION_STATEMENT 10 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema TRIGGERS ACTION_ORIENTATION 11 NO varchar 9 27 NULL NULL utf8 utf8_general_ci varchar(9) select
NULL information_schema TRIGGERS ACTION_TIMING 12 NO varchar 6 18 NULL NULL utf8 utf8_general_ci varchar(6) select
NULL information_schema TRIGGERS ACTION_REFERENCE_OLD_TABLE 13 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
@@ -11402,8 +11259,8 @@ NULL information_schema TRIGGERS ACTION_REFERENCE_NEW_TABLE 14 NULL YES varchar
NULL information_schema TRIGGERS ACTION_REFERENCE_OLD_ROW 15 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema TRIGGERS ACTION_REFERENCE_NEW_ROW 16 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema TRIGGERS CREATED 17 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
-NULL information_schema TRIGGERS SQL_MODE 18 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
-NULL information_schema TRIGGERS DEFINER 19 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS SQL_MODE 18 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS DEFINER 19 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema TRIGGERS CHARACTER_SET_CLIENT 20 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
NULL information_schema TRIGGERS COLLATION_CONNECTION 21 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
NULL information_schema TRIGGERS DATABASE_COLLATION 22 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
@@ -11414,7 +11271,7 @@ NULL information_schema USER_PRIVILEGES IS_GRANTABLE 4 NO varchar 3 9 NULL NULL
NULL information_schema VIEWS TABLE_CATALOG 1 NULL YES varchar 4096 12288 NULL NULL utf8 utf8_general_ci varchar(4096) select
NULL information_schema VIEWS TABLE_SCHEMA 2 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema VIEWS TABLE_NAME 3 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
-NULL information_schema VIEWS VIEW_DEFINITION 4 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema VIEWS VIEW_DEFINITION 4 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema VIEWS CHECK_OPTION 5 NO varchar 8 24 NULL NULL utf8 utf8_general_ci varchar(8) select
NULL information_schema VIEWS IS_UPDATABLE 6 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema VIEWS DEFINER 7 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
@@ -11663,7 +11520,7 @@ NULL test tb4 f217 42 NULL YES double unsigned zerofill NULL NULL 22 NULL NULL N
NULL test tb4 f218 43 NULL YES date NULL NULL NULL NULL NULL NULL date select,insert,update,references
NULL test tb4 f219 44 NULL YES time NULL NULL NULL NULL NULL NULL time select,insert,update,references
NULL test tb4 f220 45 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select,insert,update,references
-NULL test tb4 f221 46 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL test tb4 f221 46 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL test tb4 f222 47 NULL YES year NULL NULL NULL NULL NULL NULL year(4) select,insert,update,references
NULL test tb4 f223 48 NULL YES year NULL NULL NULL NULL NULL NULL year(4) select,insert,update,references
NULL test tb4 f224 49 NULL YES year NULL NULL NULL NULL NULL NULL year(4) select,insert,update,references
@@ -11707,9 +11564,9 @@ NULL information_schema COLUMNS NUMERIC_PRECISION 11 NULL YES bigint NULL NULL 1
NULL information_schema COLUMNS NUMERIC_SCALE 12 NULL YES bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned select
NULL information_schema COLUMNS CHARACTER_SET_NAME 13 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema COLUMNS COLLATION_NAME 14 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
-NULL information_schema COLUMNS COLUMN_TYPE 15 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema COLUMNS COLUMN_TYPE 15 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema COLUMNS COLUMN_KEY 16 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
-NULL information_schema COLUMNS EXTRA 17 NO varchar 20 60 NULL NULL utf8 utf8_general_ci varchar(20) select
+NULL information_schema COLUMNS EXTRA 17 NO varchar 27 81 NULL NULL utf8 utf8_general_ci varchar(27) select
NULL information_schema COLUMNS PRIVILEGES 18 NO varchar 80 240 NULL NULL utf8 utf8_general_ci varchar(80) select
NULL information_schema COLUMNS COLUMN_COMMENT 19 NO varchar 255 765 NULL NULL utf8 utf8_general_ci varchar(255) select
NULL information_schema COLUMN_PRIVILEGES GRANTEE 1 NO varchar 81 243 NULL NULL utf8 utf8_general_ci varchar(81) select
@@ -11731,12 +11588,12 @@ NULL information_schema EVENTS EVENT_NAME 3 NO varchar 64 192 NULL NULL utf8 ut
NULL information_schema EVENTS DEFINER 4 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
NULL information_schema EVENTS TIME_ZONE 5 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema EVENTS EVENT_BODY 6 NO varchar 8 24 NULL NULL utf8 utf8_general_ci varchar(8) select
-NULL information_schema EVENTS EVENT_DEFINITION 7 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema EVENTS EVENT_DEFINITION 7 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema EVENTS EVENT_TYPE 8 NO varchar 9 27 NULL NULL utf8 utf8_general_ci varchar(9) select
NULL information_schema EVENTS EXECUTE_AT 9 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS INTERVAL_VALUE 10 NULL YES varchar 256 768 NULL NULL utf8 utf8_general_ci varchar(256) select
NULL information_schema EVENTS INTERVAL_FIELD 11 NULL YES varchar 18 54 NULL NULL utf8 utf8_general_ci varchar(18) select
-NULL information_schema EVENTS SQL_MODE 12 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema EVENTS SQL_MODE 12 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema EVENTS STARTS 13 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS ENDS 14 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS STATUS 15 NO varchar 18 54 NULL NULL utf8 utf8_general_ci varchar(18) select
@@ -11874,7 +11731,7 @@ NULL information_schema ROUTINES SQL_PATH 14 NULL YES varchar 64 192 NULL NULL u
NULL information_schema ROUTINES SECURITY_TYPE 15 NO varchar 7 21 NULL NULL utf8 utf8_general_ci varchar(7) select
NULL information_schema ROUTINES CREATED 16 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema ROUTINES LAST_ALTERED 17 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime select
-NULL information_schema ROUTINES SQL_MODE 18 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema ROUTINES SQL_MODE 18 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema ROUTINES ROUTINE_COMMENT 19 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema ROUTINES DEFINER 20 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
NULL information_schema ROUTINES CHARACTER_SET_CLIENT 21 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
@@ -11951,7 +11808,7 @@ NULL information_schema TRIGGERS EVENT_OBJECT_SCHEMA 6 NO varchar 64 192 NULL N
NULL information_schema TRIGGERS EVENT_OBJECT_TABLE 7 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema TRIGGERS ACTION_ORDER 8 0 NO bigint NULL NULL 19 0 NULL NULL bigint(4) select
NULL information_schema TRIGGERS ACTION_CONDITION 9 NULL YES longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
-NULL information_schema TRIGGERS ACTION_STATEMENT 10 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS ACTION_STATEMENT 10 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema TRIGGERS ACTION_ORIENTATION 11 NO varchar 9 27 NULL NULL utf8 utf8_general_ci varchar(9) select
NULL information_schema TRIGGERS ACTION_TIMING 12 NO varchar 6 18 NULL NULL utf8 utf8_general_ci varchar(6) select
NULL information_schema TRIGGERS ACTION_REFERENCE_OLD_TABLE 13 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
@@ -11959,8 +11816,8 @@ NULL information_schema TRIGGERS ACTION_REFERENCE_NEW_TABLE 14 NULL YES varchar
NULL information_schema TRIGGERS ACTION_REFERENCE_OLD_ROW 15 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema TRIGGERS ACTION_REFERENCE_NEW_ROW 16 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema TRIGGERS CREATED 17 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
-NULL information_schema TRIGGERS SQL_MODE 18 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
-NULL information_schema TRIGGERS DEFINER 19 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS SQL_MODE 18 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS DEFINER 19 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema TRIGGERS CHARACTER_SET_CLIENT 20 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
NULL information_schema TRIGGERS COLLATION_CONNECTION 21 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
NULL information_schema TRIGGERS DATABASE_COLLATION 22 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
@@ -11971,7 +11828,7 @@ NULL information_schema USER_PRIVILEGES IS_GRANTABLE 4 NO varchar 3 9 NULL NULL
NULL information_schema VIEWS TABLE_CATALOG 1 NULL YES varchar 4096 12288 NULL NULL utf8 utf8_general_ci varchar(4096) select
NULL information_schema VIEWS TABLE_SCHEMA 2 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema VIEWS TABLE_NAME 3 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
-NULL information_schema VIEWS VIEW_DEFINITION 4 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema VIEWS VIEW_DEFINITION 4 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema VIEWS CHECK_OPTION 5 NO varchar 8 24 NULL NULL utf8 utf8_general_ci varchar(8) select
NULL information_schema VIEWS IS_UPDATABLE 6 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema VIEWS DEFINER 7 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
@@ -12220,7 +12077,7 @@ NULL test tb4 f217 42 NULL YES double unsigned zerofill NULL NULL 22 NULL NULL N
NULL test tb4 f218 43 NULL YES date NULL NULL NULL NULL NULL NULL date select,insert,update,references
NULL test tb4 f219 44 NULL YES time NULL NULL NULL NULL NULL NULL time select,insert,update,references
NULL test tb4 f220 45 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select,insert,update,references
-NULL test tb4 f221 46 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL test tb4 f221 46 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL test tb4 f222 47 NULL YES year NULL NULL NULL NULL NULL NULL year(4) select,insert,update,references
NULL test tb4 f223 48 NULL YES year NULL NULL NULL NULL NULL NULL year(4) select,insert,update,references
NULL test tb4 f224 49 NULL YES year NULL NULL NULL NULL NULL NULL year(4) select,insert,update,references
@@ -12354,7 +12211,7 @@ NULL information_schema COLUMNS NUMERIC_SCALE bigint NULL NULL NULL NULL bigint(
3.0000 information_schema COLUMNS COLLATION_NAME varchar 64 192 utf8 utf8_general_ci varchar(64)
1.0000 information_schema COLUMNS COLUMN_TYPE longtext 4294967295 4294967295 utf8 utf8_general_ci longtext
3.0000 information_schema COLUMNS COLUMN_KEY varchar 3 9 utf8 utf8_general_ci varchar(3)
-3.0000 information_schema COLUMNS EXTRA varchar 20 60 utf8 utf8_general_ci varchar(20)
+3.0000 information_schema COLUMNS EXTRA varchar 27 81 utf8 utf8_general_ci varchar(27)
3.0000 information_schema COLUMNS PRIVILEGES varchar 80 240 utf8 utf8_general_ci varchar(80)
3.0000 information_schema COLUMNS COLUMN_COMMENT varchar 255 765 utf8 utf8_general_ci varchar(255)
3.0000 information_schema COLUMN_PRIVILEGES GRANTEE varchar 81 243 utf8 utf8_general_ci varchar(81)
@@ -12736,7 +12593,7 @@ NULL mysql ndb_binlog_index schemaops bigint NULL NULL NULL NULL bigint(20) unsi
3.0000 mysql proc is_deterministic enum 3 9 utf8 utf8_general_ci enum('YES','NO')
3.0000 mysql proc security_type enum 7 21 utf8 utf8_general_ci enum('INVOKER','DEFINER')
1.0000 mysql proc param_list blob 65535 65535 NULL NULL blob
-3.0000 mysql proc returns char 64 192 utf8 utf8_general_ci char(64)
+1.0000 mysql proc returns longblob 4294967295 4294967295 NULL NULL longblob
1.0000 mysql proc body longblob 4294967295 4294967295 NULL NULL longblob
3.0000 mysql proc definer char 77 231 utf8 utf8_bin char(77)
NULL mysql proc created timestamp NULL NULL NULL NULL timestamp
@@ -13321,7 +13178,7 @@ SQL_PATH varchar(64) YES NULL
SECURITY_TYPE varchar(7) NO
CREATED datetime NO 0000-00-00 00:00:00
LAST_ALTERED datetime NO 0000-00-00 00:00:00
-SQL_MODE longtext NO
+SQL_MODE longtext NO NULL
ROUTINE_COMMENT varchar(64) NO
DEFINER varchar(77) NO
CHARACTER_SET_CLIENT varchar(32) NO
@@ -13382,7 +13239,7 @@ NULL information_schema routines SQL_PATH 14 NULL YES varchar 64 192 NULL NULL u
NULL information_schema routines SECURITY_TYPE 15 NO varchar 7 21 NULL NULL utf8 utf8_general_ci varchar(7) select
NULL information_schema routines CREATED 16 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema routines LAST_ALTERED 17 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime select
-NULL information_schema routines SQL_MODE 18 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema routines SQL_MODE 18 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema routines ROUTINE_COMMENT 19 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema routines DEFINER 20 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
NULL information_schema routines CHARACTER_SET_CLIENT 21 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
@@ -14234,7 +14091,7 @@ NULL information_schema TRIGGERS SYSTEM VIEW MyISAM 10 Dynamic NULL #ARL# #DL# #
NULL information_schema USER_PRIVILEGES SYSTEM VIEW MEMORY 10 Fixed NULL #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_general_ci NULL #CO#
NULL information_schema VIEWS SYSTEM VIEW MyISAM 10 Dynamic NULL #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_general_ci NULL #CO#
SELECT * FROM information_schema.tables
-WHERE NOT( table_schema = 'information_schema');
+WHERE NOT( table_schema = 'information_schema') AND NOT (table_schema = 'mysql' AND table_name LIKE 'help_%');
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE ENGINE VERSION ROW_FORMAT TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE AUTO_INCREMENT CREATE_TIME UPDATE_TIME CHECK_TIME TABLE_COLLATION CHECKSUM CREATE_OPTIONS TABLE_COMMENT
NULL db_datadict tb1 BASE TABLE MyISAM 10 Fixed 0 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
NULL db_datadict tb2 BASE TABLE MyISAM 10 Fixed 0 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
@@ -14245,10 +14102,6 @@ NULL mysql db BASE TABLE MyISAM 10 Fixed 3 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-
NULL mysql event BASE TABLE MyISAM 10 Dynamic 0 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_general_ci NULL Events
NULL mysql func BASE TABLE MyISAM 10 Fixed 0 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_bin NULL User defined functions
NULL mysql general_log BASE TABLE CSV 10 Dynamic 1 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_general_ci NULL General log
-NULL mysql help_category BASE TABLE MyISAM 10 Fixed 37 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_general_ci NULL help categories
-NULL mysql help_keyword BASE TABLE MyISAM 10 Fixed 424 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_general_ci NULL help keywords
-NULL mysql help_relation BASE TABLE MyISAM 10 Fixed 901 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_general_ci NULL keyword-topic relation
-NULL mysql help_topic BASE TABLE MyISAM 10 Dynamic 479 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_general_ci NULL help topics
NULL mysql host BASE TABLE MyISAM 10 Fixed 0 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_bin NULL Host privileges; Merged with database privileges
NULL mysql ndb_binlog_index BASE TABLE MyISAM 10 Dynamic 0 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
NULL mysql plugin BASE TABLE MyISAM 10 Fixed 0 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_bin NULL MySQL plugins
@@ -14295,7 +14148,7 @@ Field Type Null Key Default Extra
TABLE_CATALOG varchar(4096) YES NULL
TABLE_SCHEMA varchar(64) NO
TABLE_NAME varchar(64) NO
-VIEW_DEFINITION longtext NO
+VIEW_DEFINITION longtext NO NULL
CHECK_OPTION varchar(8) NO
IS_UPDATABLE varchar(3) NO
DEFINER varchar(77) NO
@@ -14330,7 +14183,7 @@ TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION COLUMN_DEFAUL
NULL information_schema views TABLE_CATALOG 1 NULL YES varchar 4096 12288 NULL NULL utf8 utf8_general_ci varchar(4096) select
NULL information_schema views TABLE_SCHEMA 2 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema views TABLE_NAME 3 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
-NULL information_schema views VIEW_DEFINITION 4 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema views VIEW_DEFINITION 4 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema views CHECK_OPTION 5 NO varchar 8 24 NULL NULL utf8 utf8_general_ci varchar(8) select
NULL information_schema views IS_UPDATABLE 6 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema views DEFINER 7 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
@@ -14477,7 +14330,8 @@ TABLE_CATALOG TABLE_SCHEMA TABLE_NAME NON_UNIQUE INDEX_SCHEMA INDEX_NAME SEQ_IN_
root@localhost db_datadict_2
REVOKE SELECT ON db_datadict.tb_6_401402_1 FROM 'user_1'@'localhost';
-SELECT * FROM information_schema.statistics;
+SELECT * FROM information_schema.statistics
+WHERE NOT (table_schema = 'mysql' AND table_name LIKE 'help_%');
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME NON_UNIQUE INDEX_SCHEMA INDEX_NAME SEQ_IN_INDEX COLUMN_NAME COLLATION CARDINALITY SUB_PART PACKED NULLABLE INDEX_TYPE COMMENT
NULL db_datadict tb_6_401402_1 0 db_datadict PRIMARY 1 f1 A 0 NULL NULL BTREE
NULL db_datadict tb_6_401402_1 1 db_datadict f2_ind 1 f2 A NULL NULL NULL YES BTREE
@@ -14499,14 +14353,6 @@ NULL mysql db 1 mysql User 1 User A 1 NULL NULL BTREE
NULL mysql event 0 mysql PRIMARY 1 db A NULL NULL NULL BTREE
NULL mysql event 0 mysql PRIMARY 2 name A 0 NULL NULL BTREE
NULL mysql func 0 mysql PRIMARY 1 name A 0 NULL NULL BTREE
-NULL mysql help_category 0 mysql PRIMARY 1 help_category_id A 37 NULL NULL BTREE
-NULL mysql help_category 0 mysql name 1 name A 37 NULL NULL BTREE
-NULL mysql help_keyword 0 mysql PRIMARY 1 help_keyword_id A 424 NULL NULL BTREE
-NULL mysql help_keyword 0 mysql name 1 name A 424 NULL NULL BTREE
-NULL mysql help_relation 0 mysql PRIMARY 1 help_keyword_id A NULL NULL NULL BTREE
-NULL mysql help_relation 0 mysql PRIMARY 2 help_topic_id A 901 NULL NULL BTREE
-NULL mysql help_topic 0 mysql PRIMARY 1 help_topic_id A 479 NULL NULL BTREE
-NULL mysql help_topic 0 mysql name 1 name A 479 NULL NULL BTREE
NULL mysql host 0 mysql PRIMARY 1 Host A NULL NULL NULL BTREE
NULL mysql host 0 mysql PRIMARY 2 Db A 0 NULL NULL BTREE
NULL mysql ndb_binlog_index 0 mysql PRIMARY 1 epoch A 0 NULL NULL BTREE
@@ -15110,7 +14956,7 @@ EVENT_OBJECT_SCHEMA varchar(64) NO
EVENT_OBJECT_TABLE varchar(64) NO
ACTION_ORDER bigint(4) NO 0
ACTION_CONDITION longtext YES NULL
-ACTION_STATEMENT longtext NO
+ACTION_STATEMENT longtext NO NULL
ACTION_ORIENTATION varchar(9) NO
ACTION_TIMING varchar(6) NO
ACTION_REFERENCE_OLD_TABLE varchar(64) YES NULL
@@ -15118,8 +14964,8 @@ ACTION_REFERENCE_NEW_TABLE varchar(64) YES NULL
ACTION_REFERENCE_OLD_ROW varchar(3) NO
ACTION_REFERENCE_NEW_ROW varchar(3) NO
CREATED datetime YES NULL
-SQL_MODE longtext NO
-DEFINER longtext NO
+SQL_MODE longtext NO NULL
+DEFINER longtext NO NULL
CHARACTER_SET_CLIENT varchar(32) NO
COLLATION_CONNECTION varchar(32) NO
DATABASE_COLLATION varchar(32) NO
@@ -15169,7 +15015,7 @@ NULL information_schema triggers EVENT_OBJECT_SCHEMA 6 NO varchar 64 192 NULL N
NULL information_schema triggers EVENT_OBJECT_TABLE 7 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema triggers ACTION_ORDER 8 0 NO bigint NULL NULL 19 0 NULL NULL bigint(4) select
NULL information_schema triggers ACTION_CONDITION 9 NULL YES longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
-NULL information_schema triggers ACTION_STATEMENT 10 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema triggers ACTION_STATEMENT 10 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema triggers ACTION_ORIENTATION 11 NO varchar 9 27 NULL NULL utf8 utf8_general_ci varchar(9) select
NULL information_schema triggers ACTION_TIMING 12 NO varchar 6 18 NULL NULL utf8 utf8_general_ci varchar(6) select
NULL information_schema triggers ACTION_REFERENCE_OLD_TABLE 13 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
@@ -15177,8 +15023,8 @@ NULL information_schema triggers ACTION_REFERENCE_NEW_TABLE 14 NULL YES varchar
NULL information_schema triggers ACTION_REFERENCE_OLD_ROW 15 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema triggers ACTION_REFERENCE_NEW_ROW 16 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema triggers CREATED 17 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
-NULL information_schema triggers SQL_MODE 18 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
-NULL information_schema triggers DEFINER 19 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema triggers SQL_MODE 18 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema triggers DEFINER 19 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema triggers CHARACTER_SET_CLIENT 20 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
NULL information_schema triggers COLLATION_CONNECTION 21 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
NULL information_schema triggers DATABASE_COLLATION 22 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
diff --git a/mysql-test/suite/funcs_1/r/memory_func_view.result b/mysql-test/suite/funcs_1/r/memory_func_view.result
index 02ef728fad5..14568643665 100644
--- a/mysql-test/suite/funcs_1/r/memory_func_view.result
+++ b/mysql-test/suite/funcs_1/r/memory_func_view.result
@@ -1,7 +1,3 @@
-
-! Attention: The file with the expected results suffers from
-Bug#10713: mysqldump includes database in create view and referenced tables
---------------------------------------------------------------------------------
DROP TABLE IF EXISTS t1_selects, t1_modes, t1_values;
DROP VIEW IF EXISTS v1;
CREATE TABLE t1_values
@@ -89,6 +85,9 @@ INSERT INTO t1_values SET select_id = @select_id,
my_bigint = 4;
INSERT INTO t1_values SET select_id = @select_id,
my_bigint = -25;
+##### 1.1.1. CAST --> BINARY
+##### 1.1.2. CAST --> CHAR
+##### 1.1.3. CAST --> DATE
INSERT INTO t1_values SET select_id = @select_id,
my_char_30 = '2005-06-27';
INSERT INTO t1_values SET select_id = @select_id,
@@ -101,6 +100,7 @@ INSERT INTO t1_values SET select_id = @select_id,
my_bigint = 20050627;
INSERT INTO t1_values SET select_id = @select_id,
my_double = +20.050627E+6;
+##### 1.1.4. CAST --> DATETIME
INSERT INTO t1_values SET select_id = @select_id,
my_char_30 = '2005-06-27 17:58';
INSERT INTO t1_values SET select_id = @select_id,
@@ -113,6 +113,7 @@ INSERT INTO t1_values SET select_id = @select_id,
my_bigint = 200506271758;
INSERT INTO t1_values SET select_id = @select_id,
my_double = +0.0200506271758E+13;
+##### 1.1.5. CAST --> TIME
INSERT INTO t1_values SET select_id = @select_id,
my_char_30 = '1 17:58';
INSERT INTO t1_values SET select_id = @select_id,
@@ -125,6 +126,7 @@ INSERT INTO t1_values SET select_id = @select_id,
my_bigint = 1758;
INSERT INTO t1_values SET select_id = @select_id,
my_double = +1.758E+3;
+##### 1.1.6. CAST --> DECIMAL
INSERT INTO t1_values SET select_id = @select_id,
my_char_30 = '-3333.3333';
INSERT INTO t1_values SET select_id = @select_id,
@@ -135,11 +137,13 @@ INSERT INTO t1_values SET select_id = @select_id,
my_varbinary_1000 = '-3333.3333';
INSERT INTO t1_values SET select_id = @select_id,
my_double = -0.33333333E+4;
+##### 1.1.7. CAST --> SIGNED INTEGER
"Attention: CAST --> SIGNED INTEGER
Bug#5913 Traditional mode: BIGINT range not correctly delimited
Status: To be fixed later"
--------------------------------------------------------------------------------
+##### 1.1.8. CAST --> UNSIGNED INTEGER
"Attention: CAST --> UNSIGNED INTEGER
The file with expected results suffers from Bug 5913"
@@ -184,14 +188,12 @@ SET @my_select =
'SELECT LEFT(my_binary_30, 2), my_binary_30, id FROM t1_values';
SET @my_select =
'SELECT LEFT(my_varbinary_1000, 2), my_varbinary_1000, id FROM t1_values';
-
-"Attention: LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', <numeric column>)
- The file with expected results suffers from Bug 10963"
- and the testcases with length = BIGINT or DOUBLE column are deactivated,
-because there are 32/64 Bit differences
---------------------------------------------------------------------------------
+SET @my_select =
+'SELECT LEFT(''AaBbCcDdEeFfGgHhIiJjÄäÜüÖö'', my_bigint), my_bigint, id FROM t1_values';
SET @my_select =
'SELECT LEFT(''AaBbCcDdEeFfGgHhIiJjÄäÜüÖö'', my_decimal), my_decimal, id FROM t1_values';
+SET @my_select =
+'SELECT LEFT(''AaBbCcDdEeFfGgHhIiJjÄäÜüÖö'', my_double), my_double, id FROM t1_values';
SET @my_select = 'SELECT LENGTH(my_char_30),
my_char_30, id FROM t1_values';
SET @my_select = 'SELECT LENGTH(my_varchar_1000),
@@ -284,19 +286,19 @@ SET sql_mode = '';
--------------------------------------------------------------------------------
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;
+WHERE select_id = 193 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 193 OR select_id IS NULL) order by id;
DROP VIEW v1;
CREATE VIEW v1 AS SELECT CONCAT('A',my_char_30), my_char_30, id FROM t1_values;
SELECT CONCAT('A',my_char_30), my_char_30, id FROM t1_values
-WHERE select_id = 189 OR select_id IS NULL order by id;
+WHERE select_id = 192 OR select_id IS NULL order by id;
CONCAT('A',my_char_30) my_char_30 id
NULL NULL 1
A 2
@@ -308,7 +310,7 @@ 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;
+WHERE select_id = 192 OR select_id IS NULL) order by id;
CONCAT('A',my_char_30) my_char_30 id
NULL NULL 1
A 2
@@ -322,13 +324,13 @@ CREATE VIEW v1 AS SELECT LTRIM(my_varbinary_1000),
my_varbinary_1000, id FROM t1_values;
SELECT LTRIM(my_varbinary_1000),
my_varbinary_1000, id FROM t1_values
-WHERE select_id = 188 OR select_id IS NULL order by id;
+WHERE select_id = 191 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 191 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -336,13 +338,13 @@ CREATE VIEW v1 AS SELECT LTRIM(my_binary_30),
my_binary_30, id FROM t1_values;
SELECT LTRIM(my_binary_30),
my_binary_30, id FROM t1_values
-WHERE select_id = 187 OR select_id IS NULL order by id;
+WHERE select_id = 190 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 190 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -350,13 +352,13 @@ CREATE VIEW v1 AS SELECT LTRIM(my_varchar_1000),
my_varchar_1000, id FROM t1_values;
SELECT LTRIM(my_varchar_1000),
my_varchar_1000, id FROM t1_values
-WHERE select_id = 186 OR select_id IS NULL order by id;
+WHERE select_id = 189 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 189 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -364,13 +366,13 @@ CREATE VIEW v1 AS SELECT LTRIM(my_char_30),
my_char_30, id FROM t1_values;
SELECT LTRIM(my_char_30),
my_char_30, id FROM t1_values
-WHERE select_id = 185 OR select_id IS NULL order by id;
+WHERE select_id = 188 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 188 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -378,13 +380,13 @@ CREATE VIEW v1 AS SELECT LOWER(my_varbinary_1000),
my_varbinary_1000, id FROM t1_values;
SELECT LOWER(my_varbinary_1000),
my_varbinary_1000, id FROM t1_values
-WHERE select_id = 184 OR select_id IS NULL order by id;
+WHERE select_id = 187 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 187 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -392,13 +394,13 @@ CREATE VIEW v1 AS SELECT LOWER(my_binary_30),
my_binary_30, id FROM t1_values;
SELECT LOWER(my_binary_30),
my_binary_30, id FROM t1_values
-WHERE select_id = 183 OR select_id IS NULL order by id;
+WHERE select_id = 186 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 186 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -406,13 +408,13 @@ CREATE VIEW v1 AS SELECT LOWER(my_varchar_1000),
my_varchar_1000, id FROM t1_values;
SELECT LOWER(my_varchar_1000),
my_varchar_1000, id FROM t1_values
-WHERE select_id = 182 OR select_id IS NULL order by id;
+WHERE select_id = 185 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 185 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -420,13 +422,13 @@ CREATE VIEW v1 AS SELECT LOWER(my_char_30),
my_char_30, id FROM t1_values;
SELECT LOWER(my_char_30),
my_char_30, id FROM t1_values
-WHERE select_id = 181 OR select_id IS NULL order by id;
+WHERE select_id = 184 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 184 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -434,13 +436,13 @@ CREATE VIEW v1 AS SELECT LOCATE('-', ' - -ABC', my_decimal),
my_decimal, id FROM t1_values;
SELECT LOCATE('-', ' - -ABC', my_decimal),
my_decimal, id FROM t1_values
-WHERE select_id = 180 OR select_id IS NULL order by id;
+WHERE select_id = 183 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 183 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -448,13 +450,13 @@ CREATE VIEW v1 AS SELECT LOCATE('-', ' - -ABC', my_double),
my_double, id FROM t1_values;
SELECT LOCATE('-', ' - -ABC', my_double),
my_double, id FROM t1_values
-WHERE select_id = 179 OR select_id IS NULL order by id;
+WHERE select_id = 182 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 182 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -462,13 +464,13 @@ CREATE VIEW v1 AS SELECT LOCATE('-', ' - -ABC', my_bigint),
my_bigint, id FROM t1_values;
SELECT LOCATE('-', ' - -ABC', my_bigint),
my_bigint, id FROM t1_values
-WHERE select_id = 178 OR select_id IS NULL order by id;
+WHERE select_id = 181 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 181 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -476,13 +478,13 @@ CREATE VIEW v1 AS SELECT LOCATE('-', my_varbinary_1000, 3),
my_varbinary_1000, id FROM t1_values;
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;
+WHERE select_id = 180 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 180 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -490,13 +492,13 @@ CREATE VIEW v1 AS SELECT LOCATE('-', my_binary_30, 3),
my_binary_30, id FROM t1_values;
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;
+WHERE select_id = 179 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 179 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -504,13 +506,13 @@ CREATE VIEW v1 AS SELECT LOCATE('-', my_varchar_1000, 3),
my_varchar_1000, id FROM t1_values;
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;
+WHERE select_id = 178 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 178 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -518,13 +520,13 @@ CREATE VIEW v1 AS SELECT LOCATE('-', my_char_30, 3),
my_char_30, id FROM t1_values;
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;
+WHERE select_id = 177 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 177 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -532,13 +534,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_varbinary_1000, my_binary_30 ),
my_varbinary_1000, my_binary_30 id FROM t1_values;
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;
+WHERE select_id = 176 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 176 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -546,13 +548,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_varbinary_1000, my_varchar_1000 ),
my_varbinary_1000, my_varchar_1000 id FROM t1_values;
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;
+WHERE select_id = 175 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 175 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -560,13 +562,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_varbinary_1000, my_char_30 ),
my_varbinary_1000, my_char_30 id FROM t1_values;
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;
+WHERE select_id = 174 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 174 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -574,13 +576,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_varbinary_1000, my_varbinary_1000 ),
my_varbinary_1000, id FROM t1_values;
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;
+WHERE select_id = 173 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 173 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -588,13 +590,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_binary_30, my_varbinary_1000 ),
my_binary_30, my_varbinary_1000 id FROM t1_values;
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;
+WHERE select_id = 172 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 172 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -602,13 +604,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_binary_30, my_varchar_1000 ),
my_binary_30, my_varchar_1000 id FROM t1_values;
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;
+WHERE select_id = 171 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 171 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -616,13 +618,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_binary_30, my_char_30 ),
my_binary_30, my_char_30 id FROM t1_values;
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;
+WHERE select_id = 170 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 170 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -630,13 +632,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_binary_30, my_binary_30 ),
my_binary_30, id FROM t1_values;
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;
+WHERE select_id = 169 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 169 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -644,13 +646,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_varchar_1000, my_varbinary_1000 ),
my_varchar_1000, my_varbinary_1000 id FROM t1_values;
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;
+WHERE select_id = 168 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 168 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -658,13 +660,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_varchar_1000, my_binary_30 ),
my_varchar_1000, my_binary_30 id FROM t1_values;
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;
+WHERE select_id = 167 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 167 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -672,13 +674,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_varchar_1000, my_char_30 ),
my_varchar_1000, my_char_30 id FROM t1_values;
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;
+WHERE select_id = 166 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 166 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -686,13 +688,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_varchar_1000, my_varchar_1000 ),
my_varchar_1000, id FROM t1_values;
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;
+WHERE select_id = 165 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 165 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -700,13 +702,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_char_30, my_varbinary_1000 ),
my_char_30, my_varbinary_1000 id FROM t1_values;
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;
+WHERE select_id = 164 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 164 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -714,13 +716,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_char_30, my_binary_30 ),
my_char_30, my_binary_30 id FROM t1_values;
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;
+WHERE select_id = 163 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 163 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -728,13 +730,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_char_30, my_varchar_1000 ),
my_char_30, my_varchar_1000 id FROM t1_values;
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;
+WHERE select_id = 162 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 162 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -742,13 +744,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_char_30, my_char_30 ),
my_char_30, id FROM t1_values;
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;
+WHERE select_id = 161 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 161 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -756,13 +758,13 @@ CREATE VIEW v1 AS SELECT LOCATE('char', my_varbinary_1000),
my_varbinary_1000, id FROM t1_values;
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;
+WHERE select_id = 160 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 160 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -770,13 +772,13 @@ CREATE VIEW v1 AS SELECT LOCATE('char', my_binary_30),
my_binary_30, id FROM t1_values;
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;
+WHERE select_id = 159 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 159 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -784,13 +786,13 @@ CREATE VIEW v1 AS SELECT LOCATE('char', my_varchar_1000),
my_varchar_1000, id FROM t1_values;
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;
+WHERE select_id = 158 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 158 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -798,19 +800,19 @@ CREATE VIEW v1 AS SELECT LOCATE('char', my_char_30),
my_char_30, id FROM t1_values;
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;
+WHERE select_id = 157 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 157 OR select_id IS NULL) order by id;
DROP VIEW v1;
CREATE VIEW v1 AS SELECT LOAD_FILE('../tmp/func_view.dat'), id FROM t1_values;
SELECT LOAD_FILE('../tmp/func_view.dat'), id FROM t1_values
-WHERE select_id = 153 OR select_id IS NULL order by id;
+WHERE select_id = 156 OR select_id IS NULL order by id;
LOAD_FILE('../tmp/func_view.dat') id
äÄ@
1
@@ -827,7 +829,7 @@ 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;
+WHERE select_id = 156 OR select_id IS NULL) order by id;
LOAD_FILE('../tmp/func_view.dat') id
äÄ@
1
@@ -846,13 +848,13 @@ CREATE VIEW v1 AS SELECT LENGTH(my_varbinary_1000),
my_varbinary_1000, id FROM t1_values;
SELECT LENGTH(my_varbinary_1000),
my_varbinary_1000, id FROM t1_values
-WHERE select_id = 152 OR select_id IS NULL order by id;
+WHERE select_id = 155 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 155 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -860,13 +862,13 @@ CREATE VIEW v1 AS SELECT LENGTH(my_binary_30),
my_binary_30, id FROM t1_values;
SELECT LENGTH(my_binary_30),
my_binary_30, id FROM t1_values
-WHERE select_id = 151 OR select_id IS NULL order by id;
+WHERE select_id = 154 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 154 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -874,13 +876,13 @@ CREATE VIEW v1 AS SELECT LENGTH(my_varchar_1000),
my_varchar_1000, id FROM t1_values;
SELECT LENGTH(my_varchar_1000),
my_varchar_1000, id FROM t1_values
-WHERE select_id = 150 OR select_id IS NULL order by id;
+WHERE select_id = 153 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 153 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -888,19 +890,49 @@ CREATE VIEW v1 AS SELECT LENGTH(my_char_30),
my_char_30, id FROM t1_values;
SELECT LENGTH(my_char_30),
my_char_30, id FROM t1_values
-WHERE select_id = 149 OR select_id IS NULL order by id;
+WHERE select_id = 152 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 152 OR select_id IS NULL) order by id;
+DROP VIEW v1;
+
+
+CREATE VIEW v1 AS SELECT LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_double), my_double, id FROM t1_values;
+SELECT LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_double), my_double, id FROM t1_values
+WHERE select_id = 151 OR select_id IS NULL order by id;
+LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_double) my_double id
+NULL NULL 1
+ -1.7976931348623e+308 2
+AaBbCcDdEeFfGgHhIiJjÄäÜüÖö 1.7976931348623e+308 3
+ 0 4
+ -1 5
+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 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_double`) AS `LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', 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 = 151 OR select_id IS NULL) order by id;
+LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_double) my_double id
+NULL NULL 1
+ -1.7976931348623e+308 2
+AaBbCcDdEeFfGgHhIiJjÄäÜüÖö 1.7976931348623e+308 3
+ 0 4
+ -1 5
+Warnings:
+Warning 1292 Truncated incorrect INTEGER value: '-1.7976931348623e+308'
+Warning 1292 Truncated incorrect INTEGER value: '1.7976931348623e+308'
DROP VIEW v1;
CREATE VIEW v1 AS SELECT LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_decimal), my_decimal, id FROM t1_values;
SELECT LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_decimal), my_decimal, id FROM t1_values
-WHERE select_id = 148 OR select_id IS NULL order by id;
+WHERE select_id = 150 OR select_id IS NULL order by id;
LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_decimal) my_decimal id
NULL NULL 1
-9999999999999999999999999999999999.999999999999999999999999999999 2
@@ -915,7 +947,7 @@ 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;
+WHERE select_id = 150 OR select_id IS NULL) order by id;
LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_decimal) my_decimal id
NULL NULL 1
-9999999999999999999999999999999999.999999999999999999999999999999 2
@@ -928,9 +960,33 @@ Error 1292 Truncated incorrect DECIMAL value: ''
DROP VIEW v1;
+CREATE VIEW v1 AS SELECT LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_bigint), my_bigint, id FROM t1_values;
+SELECT LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_bigint), my_bigint, id FROM t1_values
+WHERE select_id = 149 OR select_id IS NULL order by id;
+LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_bigint) my_bigint id
+NULL NULL 1
+ -9223372036854775808 2
+AaBbCcDdEeFfGgHhIiJjÄäÜüÖö 9223372036854775807 3
+ 0 4
+ -1 5
+SHOW CREATE VIEW v1;
+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_bigint`) AS `LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', 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 = 149 OR select_id IS NULL) order by id;
+LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_bigint) my_bigint id
+NULL NULL 1
+ -9223372036854775808 2
+AaBbCcDdEeFfGgHhIiJjÄäÜüÖö 9223372036854775807 3
+ 0 4
+ -1 5
+DROP VIEW v1;
+
+
CREATE VIEW v1 AS SELECT LEFT(my_varbinary_1000, 2), my_varbinary_1000, id FROM t1_values;
SELECT LEFT(my_varbinary_1000, 2), my_varbinary_1000, id FROM t1_values
-WHERE select_id = 147 OR select_id IS NULL order by id;
+WHERE select_id = 148 OR select_id IS NULL order by id;
LEFT(my_varbinary_1000, 2) my_varbinary_1000 id
NULL NULL 1
2
@@ -942,7 +998,7 @@ 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;
+WHERE select_id = 148 OR select_id IS NULL) order by id;
LEFT(my_varbinary_1000, 2) my_varbinary_1000 id
NULL NULL 1
2
@@ -954,7 +1010,7 @@ DROP VIEW v1;
CREATE VIEW v1 AS SELECT LEFT(my_binary_30, 2), my_binary_30, id FROM t1_values;
SELECT LEFT(my_binary_30, 2), my_binary_30, id FROM t1_values
-WHERE select_id = 146 OR select_id IS NULL order by id;
+WHERE select_id = 147 OR select_id IS NULL order by id;
LEFT(my_binary_30, 2) my_binary_30 id
NULL NULL 1
@@ -966,7 +1022,7 @@ 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;
+WHERE select_id = 147 OR select_id IS NULL) order by id;
LEFT(my_binary_30, 2) my_binary_30 id
NULL NULL 1
@@ -978,7 +1034,7 @@ DROP VIEW v1;
CREATE VIEW v1 AS SELECT LEFT(my_varchar_1000, 2), my_varchar_1000, id FROM t1_values;
SELECT LEFT(my_varchar_1000, 2), my_varchar_1000, id FROM t1_values
-WHERE select_id = 145 OR select_id IS NULL order by id;
+WHERE select_id = 146 OR select_id IS NULL order by id;
LEFT(my_varchar_1000, 2) my_varchar_1000 id
NULL NULL 1
2
@@ -990,7 +1046,7 @@ 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;
+WHERE select_id = 146 OR select_id IS NULL) order by id;
LEFT(my_varchar_1000, 2) my_varchar_1000 id
NULL NULL 1
2
@@ -1002,7 +1058,7 @@ DROP VIEW v1;
CREATE VIEW v1 AS SELECT LEFT(my_char_30, 2), my_char_30, id FROM t1_values;
SELECT LEFT(my_char_30, 2), my_char_30, id FROM t1_values
-WHERE select_id = 144 OR select_id IS NULL order by id;
+WHERE select_id = 145 OR select_id IS NULL order by id;
LEFT(my_char_30, 2) my_char_30 id
NULL NULL 1
2
@@ -1014,7 +1070,7 @@ 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;
+WHERE select_id = 145 OR select_id IS NULL) order by id;
LEFT(my_char_30, 2) my_char_30 id
NULL NULL 1
2
@@ -1028,13 +1084,13 @@ CREATE VIEW v1 AS SELECT LCASE(my_varchar_1000),
my_varchar_1000, id FROM t1_values;
SELECT LCASE(my_varchar_1000),
my_varchar_1000, id FROM t1_values
-WHERE select_id = 143 OR select_id IS NULL order by id;
+WHERE select_id = 144 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 144 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -1042,13 +1098,13 @@ CREATE VIEW v1 AS SELECT INSTR(my_char_30, 'char'),
my_char_30, id FROM t1_values;
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;
+WHERE select_id = 143 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 143 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -1056,7 +1112,7 @@ CREATE VIEW v1 AS SELECT BIT_LENGTH(my_varbinary_1000),
my_varbinary_1000, id FROM t1_values;
SELECT BIT_LENGTH(my_varbinary_1000),
my_varbinary_1000, id FROM t1_values
-WHERE select_id = 141 OR select_id IS NULL order by id;
+WHERE select_id = 142 OR select_id IS NULL order by id;
BIT_LENGTH(my_varbinary_1000) my_varbinary_1000 id
NULL NULL 1
0 2
@@ -1068,7 +1124,7 @@ 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;
+WHERE select_id = 142 OR select_id IS NULL) order by id;
BIT_LENGTH(my_varbinary_1000) my_varbinary_1000 id
NULL NULL 1
0 2
@@ -1082,7 +1138,7 @@ CREATE VIEW v1 AS SELECT BIT_LENGTH(my_binary_30),
my_binary_30, id FROM t1_values;
SELECT BIT_LENGTH(my_binary_30),
my_binary_30, id FROM t1_values
-WHERE select_id = 140 OR select_id IS NULL order by id;
+WHERE select_id = 141 OR select_id IS NULL order by id;
BIT_LENGTH(my_binary_30) my_binary_30 id
NULL NULL 1
240
@@ -1094,7 +1150,7 @@ 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;
+WHERE select_id = 141 OR select_id IS NULL) order by id;
BIT_LENGTH(my_binary_30) my_binary_30 id
NULL NULL 1
240
@@ -1108,7 +1164,7 @@ CREATE VIEW v1 AS SELECT BIT_LENGTH(my_varchar_1000),
my_varchar_1000, id FROM t1_values;
SELECT BIT_LENGTH(my_varchar_1000),
my_varchar_1000, id FROM t1_values
-WHERE select_id = 139 OR select_id IS NULL order by id;
+WHERE select_id = 140 OR select_id IS NULL order by id;
BIT_LENGTH(my_varchar_1000) my_varchar_1000 id
NULL NULL 1
0 2
@@ -1120,7 +1176,7 @@ 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;
+WHERE select_id = 140 OR select_id IS NULL) order by id;
BIT_LENGTH(my_varchar_1000) my_varchar_1000 id
NULL NULL 1
0 2
@@ -1134,7 +1190,7 @@ CREATE VIEW v1 AS SELECT BIT_LENGTH(my_char_30),
my_char_30, id FROM t1_values;
SELECT BIT_LENGTH(my_char_30),
my_char_30, id FROM t1_values
-WHERE select_id = 138 OR select_id IS NULL order by id;
+WHERE select_id = 139 OR select_id IS NULL order by id;
BIT_LENGTH(my_char_30) my_char_30 id
NULL NULL 1
0 2
@@ -1146,7 +1202,7 @@ 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;
+WHERE select_id = 139 OR select_id IS NULL) order by id;
BIT_LENGTH(my_char_30) my_char_30 id
NULL NULL 1
0 2
@@ -1160,7 +1216,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_year,'IS_NULL'),
my_year, id FROM t1_values;
SELECT IFNULL(my_year,'IS_NULL'),
my_year, id FROM t1_values
-WHERE select_id = 137 OR select_id IS NULL order by id;
+WHERE select_id = 138 OR select_id IS NULL order by id;
IFNULL(my_year,'IS_NULL') my_year id
IS_NULL NULL 1
1901 1901 2
@@ -1172,7 +1228,7 @@ 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;
+WHERE select_id = 138 OR select_id IS NULL) order by id;
IFNULL(my_year,'IS_NULL') my_year id
IS_NULL NULL 1
1901 1901 2
@@ -1186,7 +1242,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_time,'IS_NULL'),
my_time, id FROM t1_values;
SELECT IFNULL(my_time,'IS_NULL'),
my_time, id FROM t1_values
-WHERE select_id = 136 OR select_id IS NULL order by id;
+WHERE select_id = 137 OR select_id IS NULL order by id;
IFNULL(my_time,'IS_NULL') my_time id
IS_NULL NULL 1
-838:59:59 -838:59:59 2
@@ -1198,7 +1254,7 @@ 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;
+WHERE select_id = 137 OR select_id IS NULL) order by id;
IFNULL(my_time,'IS_NULL') my_time id
IS_NULL NULL 1
-838:59:59 -838:59:59 2
@@ -1212,7 +1268,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_timestamp,'IS_NULL'),
my_timestamp, id FROM t1_values;
SELECT IFNULL(my_timestamp,'IS_NULL'),
my_timestamp, id FROM t1_values
-WHERE select_id = 135 OR select_id IS NULL order by id;
+WHERE select_id = 136 OR select_id IS NULL order by id;
IFNULL(my_timestamp,'IS_NULL') my_timestamp id
0000-00-00 00:00:00 0000-00-00 00:00:00 1
1970-01-01 03:00:01 1970-01-01 03:00:01 2
@@ -1224,7 +1280,7 @@ 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;
+WHERE select_id = 136 OR select_id IS NULL) order by id;
IFNULL(my_timestamp,'IS_NULL') my_timestamp id
0000-00-00 00:00:00 0000-00-00 00:00:00 1
1970-01-01 03:00:01 1970-01-01 03:00:01 2
@@ -1238,7 +1294,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_date,'IS_NULL'),
my_date, id FROM t1_values;
SELECT IFNULL(my_date,'IS_NULL'),
my_date, id FROM t1_values
-WHERE select_id = 134 OR select_id IS NULL order by id;
+WHERE select_id = 135 OR select_id IS NULL order by id;
IFNULL(my_date,'IS_NULL') my_date id
IS_NULL NULL 1
0001-01-01 0001-01-01 2
@@ -1250,7 +1306,7 @@ 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;
+WHERE select_id = 135 OR select_id IS NULL) order by id;
IFNULL(my_date,'IS_NULL') my_date id
IS_NULL NULL 1
0001-01-01 0001-01-01 2
@@ -1264,7 +1320,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_datetime,'IS_NULL'),
my_datetime, id FROM t1_values;
SELECT IFNULL(my_datetime,'IS_NULL'),
my_datetime, id FROM t1_values
-WHERE select_id = 133 OR select_id IS NULL order by id;
+WHERE select_id = 134 OR select_id IS NULL order by id;
IFNULL(my_datetime,'IS_NULL') my_datetime id
IS_NULL NULL 1
0001-01-01 00:00:00 0001-01-01 00:00:00 2
@@ -1276,7 +1332,7 @@ 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;
+WHERE select_id = 134 OR select_id IS NULL) order by id;
IFNULL(my_datetime,'IS_NULL') my_datetime id
IS_NULL NULL 1
0001-01-01 00:00:00 0001-01-01 00:00:00 2
@@ -1290,7 +1346,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_double,'IS_NULL'),
my_double, id FROM t1_values;
SELECT IFNULL(my_double,'IS_NULL'),
my_double, id FROM t1_values
-WHERE select_id = 132 OR select_id IS NULL order by id;
+WHERE select_id = 133 OR select_id IS NULL order by id;
IFNULL(my_double,'IS_NULL') my_double id
IS_NULL NULL 1
-1.7976931348623e+308 -1.7976931348623e+308 2
@@ -1302,7 +1358,7 @@ 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;
+WHERE select_id = 133 OR select_id IS NULL) order by id;
IFNULL(my_double,'IS_NULL') my_double id
IS_NULL NULL 1
-1.7976931348623e+308 -1.7976931348623e+308 2
@@ -1316,7 +1372,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_decimal,'IS_NULL'),
my_decimal, id FROM t1_values;
SELECT IFNULL(my_decimal,'IS_NULL'),
my_decimal, id FROM t1_values
-WHERE select_id = 131 OR select_id IS NULL order by id;
+WHERE select_id = 132 OR select_id IS NULL order by id;
IFNULL(my_decimal,'IS_NULL') my_decimal id
IS_NULL NULL 1
-9999999999999999999999999999999999.999999999999999999999999999999 -9999999999999999999999999999999999.999999999999999999999999999999 2
@@ -1328,7 +1384,7 @@ 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;
+WHERE select_id = 132 OR select_id IS NULL) order by id;
IFNULL(my_decimal,'IS_NULL') my_decimal id
IS_NULL NULL 1
-9999999999999999999999999999999999.999999999999999999999999999999 -9999999999999999999999999999999999.999999999999999999999999999999 2
@@ -1342,7 +1398,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_bigint,'IS_NULL'),
my_bigint, id FROM t1_values;
SELECT IFNULL(my_bigint,'IS_NULL'),
my_bigint, id FROM t1_values
-WHERE select_id = 130 OR select_id IS NULL order by id;
+WHERE select_id = 131 OR select_id IS NULL order by id;
IFNULL(my_bigint,'IS_NULL') my_bigint id
IS_NULL NULL 1
-9223372036854775808 -9223372036854775808 2
@@ -1354,7 +1410,7 @@ 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;
+WHERE select_id = 131 OR select_id IS NULL) order by id;
IFNULL(my_bigint,'IS_NULL') my_bigint id
IS_NULL NULL 1
-9223372036854775808 -9223372036854775808 2
@@ -1368,7 +1424,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_varbinary_1000,'IS_NULL'),
my_varbinary_1000, id FROM t1_values;
SELECT IFNULL(my_varbinary_1000,'IS_NULL'),
my_varbinary_1000, id FROM t1_values
-WHERE select_id = 129 OR select_id IS NULL order by id;
+WHERE select_id = 130 OR select_id IS NULL order by id;
IFNULL(my_varbinary_1000,'IS_NULL') my_varbinary_1000 id
IS_NULL NULL 1
2
@@ -1380,7 +1436,7 @@ 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;
+WHERE select_id = 130 OR select_id IS NULL) order by id;
IFNULL(my_varbinary_1000,'IS_NULL') my_varbinary_1000 id
IS_NULL NULL 1
2
@@ -1394,7 +1450,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_binary_30,'IS_NULL'),
my_binary_30, id FROM t1_values;
SELECT IFNULL(my_binary_30,'IS_NULL'),
my_binary_30, id FROM t1_values
-WHERE select_id = 128 OR select_id IS NULL order by id;
+WHERE select_id = 129 OR select_id IS NULL order by id;
IFNULL(my_binary_30,'IS_NULL') my_binary_30 id
IS_NULL NULL 1
@@ -1406,7 +1462,7 @@ 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;
+WHERE select_id = 129 OR select_id IS NULL) order by id;
IFNULL(my_binary_30,'IS_NULL') my_binary_30 id
IS_NULL NULL 1
@@ -1420,7 +1476,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_varchar_1000,'IS_NULL'),
my_varchar_1000, id FROM t1_values;
SELECT IFNULL(my_varchar_1000,'IS_NULL'),
my_varchar_1000, id FROM t1_values
-WHERE select_id = 127 OR select_id IS NULL order by id;
+WHERE select_id = 128 OR select_id IS NULL order by id;
IFNULL(my_varchar_1000,'IS_NULL') my_varchar_1000 id
IS_NULL NULL 1
2
@@ -1432,7 +1488,7 @@ 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;
+WHERE select_id = 128 OR select_id IS NULL) order by id;
IFNULL(my_varchar_1000,'IS_NULL') my_varchar_1000 id
IS_NULL NULL 1
2
@@ -1446,7 +1502,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_char_30,'IS_NULL'),
my_char_30, id FROM t1_values;
SELECT IFNULL(my_char_30,'IS_NULL'),
my_char_30, id FROM t1_values
-WHERE select_id = 126 OR select_id IS NULL order by id;
+WHERE select_id = 127 OR select_id IS NULL order by id;
IFNULL(my_char_30,'IS_NULL') my_char_30 id
IS_NULL NULL 1
2
@@ -1458,7 +1514,7 @@ 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;
+WHERE select_id = 127 OR select_id IS NULL) order by id;
IFNULL(my_char_30,'IS_NULL') my_char_30 id
IS_NULL NULL 1
2
@@ -1472,7 +1528,7 @@ CREATE VIEW v1 AS SELECT IF(my_year IS NULL, 'IS NULL',
'IS NOT NULL'), my_year, id FROM t1_values;
SELECT IF(my_year IS NULL, 'IS NULL',
'IS NOT NULL'), my_year, id FROM t1_values
-WHERE select_id = 125 OR select_id IS NULL order by id;
+WHERE select_id = 126 OR select_id IS NULL order by id;
IF(my_year IS NULL, 'IS NULL',
'IS NOT NULL') my_year id
IS NULL NULL 1
@@ -1486,7 +1542,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 126 OR select_id IS NULL) order by id;
IF(my_year IS NULL, 'IS NULL',
'IS NOT NULL') my_year id
IS NULL NULL 1
@@ -1501,7 +1557,7 @@ CREATE VIEW v1 AS SELECT IF(my_time IS NULL, 'IS NULL',
'IS NOT NULL'), my_time, id FROM t1_values;
SELECT IF(my_time IS NULL, 'IS NULL',
'IS NOT NULL'), my_time, id FROM t1_values
-WHERE select_id = 124 OR select_id IS NULL order by id;
+WHERE select_id = 125 OR select_id IS NULL order by id;
IF(my_time IS NULL, 'IS NULL',
'IS NOT NULL') my_time id
IS NULL NULL 1
@@ -1515,7 +1571,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 125 OR select_id IS NULL) order by id;
IF(my_time IS NULL, 'IS NULL',
'IS NOT NULL') my_time id
IS NULL NULL 1
@@ -1530,7 +1586,7 @@ CREATE VIEW v1 AS SELECT IF(my_timestamp IS NULL, 'IS NULL',
'IS NOT NULL'), my_timestamp, id FROM t1_values;
SELECT IF(my_timestamp IS NULL, 'IS NULL',
'IS NOT NULL'), my_timestamp, id FROM t1_values
-WHERE select_id = 123 OR select_id IS NULL order by id;
+WHERE select_id = 124 OR select_id IS NULL order by id;
IF(my_timestamp IS NULL, 'IS NULL',
'IS NOT NULL') my_timestamp id
IS NOT NULL 0000-00-00 00:00:00 1
@@ -1544,7 +1600,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 124 OR select_id IS NULL) order by id;
IF(my_timestamp IS NULL, 'IS NULL',
'IS NOT NULL') my_timestamp id
IS NOT NULL 0000-00-00 00:00:00 1
@@ -1559,7 +1615,7 @@ CREATE VIEW v1 AS SELECT IF(my_date IS NULL, 'IS NULL',
'IS NOT NULL'), my_date, id FROM t1_values;
SELECT IF(my_date IS NULL, 'IS NULL',
'IS NOT NULL'), my_date, id FROM t1_values
-WHERE select_id = 122 OR select_id IS NULL order by id;
+WHERE select_id = 123 OR select_id IS NULL order by id;
IF(my_date IS NULL, 'IS NULL',
'IS NOT NULL') my_date id
IS NULL NULL 1
@@ -1573,7 +1629,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 123 OR select_id IS NULL) order by id;
IF(my_date IS NULL, 'IS NULL',
'IS NOT NULL') my_date id
IS NULL NULL 1
@@ -1588,7 +1644,7 @@ CREATE VIEW v1 AS SELECT IF(my_datetime IS NULL, 'IS NULL',
'IS NOT NULL'), my_datetime, id FROM t1_values;
SELECT IF(my_datetime IS NULL, 'IS NULL',
'IS NOT NULL'), my_datetime, id FROM t1_values
-WHERE select_id = 121 OR select_id IS NULL order by id;
+WHERE select_id = 122 OR select_id IS NULL order by id;
IF(my_datetime IS NULL, 'IS NULL',
'IS NOT NULL') my_datetime id
IS NULL NULL 1
@@ -1602,7 +1658,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 122 OR select_id IS NULL) order by id;
IF(my_datetime IS NULL, 'IS NULL',
'IS NOT NULL') my_datetime id
IS NULL NULL 1
@@ -1617,7 +1673,7 @@ CREATE VIEW v1 AS SELECT IF(my_double IS NULL, 'IS NULL',
'IS NOT NULL'), my_double, id FROM t1_values;
SELECT IF(my_double IS NULL, 'IS NULL',
'IS NOT NULL'), my_double, id FROM t1_values
-WHERE select_id = 120 OR select_id IS NULL order by id;
+WHERE select_id = 121 OR select_id IS NULL order by id;
IF(my_double IS NULL, 'IS NULL',
'IS NOT NULL') my_double id
IS NULL NULL 1
@@ -1631,7 +1687,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 121 OR select_id IS NULL) order by id;
IF(my_double IS NULL, 'IS NULL',
'IS NOT NULL') my_double id
IS NULL NULL 1
@@ -1646,7 +1702,7 @@ CREATE VIEW v1 AS SELECT IF(my_decimal IS NULL, 'IS NULL',
'IS NOT NULL'), my_decimal, id FROM t1_values;
SELECT IF(my_decimal IS NULL, 'IS NULL',
'IS NOT NULL'), my_decimal, id FROM t1_values
-WHERE select_id = 119 OR select_id IS NULL order by id;
+WHERE select_id = 120 OR select_id IS NULL order by id;
IF(my_decimal IS NULL, 'IS NULL',
'IS NOT NULL') my_decimal id
IS NULL NULL 1
@@ -1660,7 +1716,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 120 OR select_id IS NULL) order by id;
IF(my_decimal IS NULL, 'IS NULL',
'IS NOT NULL') my_decimal id
IS NULL NULL 1
@@ -1675,7 +1731,7 @@ CREATE VIEW v1 AS SELECT IF(my_bigint IS NULL, 'IS NULL',
'IS NOT NULL'), my_bigint, id FROM t1_values;
SELECT IF(my_bigint IS NULL, 'IS NULL',
'IS NOT NULL'), my_bigint, id FROM t1_values
-WHERE select_id = 118 OR select_id IS NULL order by id;
+WHERE select_id = 119 OR select_id IS NULL order by id;
IF(my_bigint IS NULL, 'IS NULL',
'IS NOT NULL') my_bigint id
IS NULL NULL 1
@@ -1689,7 +1745,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 119 OR select_id IS NULL) order by id;
IF(my_bigint IS NULL, 'IS NULL',
'IS NOT NULL') my_bigint id
IS NULL NULL 1
@@ -1704,7 +1760,7 @@ CREATE VIEW v1 AS SELECT IF(my_varbinary_1000 IS NULL, 'IS NULL',
'IS NOT NULL'), my_varbinary_1000, id FROM t1_values;
SELECT IF(my_varbinary_1000 IS NULL, 'IS NULL',
'IS NOT NULL'), my_varbinary_1000, id FROM t1_values
-WHERE select_id = 117 OR select_id IS NULL order by id;
+WHERE select_id = 118 OR select_id IS NULL order by id;
IF(my_varbinary_1000 IS NULL, 'IS NULL',
'IS NOT NULL') my_varbinary_1000 id
IS NULL NULL 1
@@ -1718,7 +1774,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 118 OR select_id IS NULL) order by id;
IF(my_varbinary_1000 IS NULL, 'IS NULL',
'IS NOT NULL') my_varbinary_1000 id
IS NULL NULL 1
@@ -1733,7 +1789,7 @@ CREATE VIEW v1 AS SELECT IF(my_binary_30 IS NULL, 'IS NULL',
'IS NOT NULL'), my_binary_30, id FROM t1_values;
SELECT IF(my_binary_30 IS NULL, 'IS NULL',
'IS NOT NULL'), my_binary_30, id FROM t1_values
-WHERE select_id = 116 OR select_id IS NULL order by id;
+WHERE select_id = 117 OR select_id IS NULL order by id;
IF(my_binary_30 IS NULL, 'IS NULL',
'IS NOT NULL') my_binary_30 id
IS NULL NULL 1
@@ -1747,7 +1803,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 117 OR select_id IS NULL) order by id;
IF(my_binary_30 IS NULL, 'IS NULL',
'IS NOT NULL') my_binary_30 id
IS NULL NULL 1
@@ -1762,7 +1818,7 @@ CREATE VIEW v1 AS SELECT IF(my_varchar_1000 IS NULL, 'IS NULL',
'IS NOT NULL'), my_varchar_1000, id FROM t1_values;
SELECT IF(my_varchar_1000 IS NULL, 'IS NULL',
'IS NOT NULL'), my_varchar_1000, id FROM t1_values
-WHERE select_id = 115 OR select_id IS NULL order by id;
+WHERE select_id = 116 OR select_id IS NULL order by id;
IF(my_varchar_1000 IS NULL, 'IS NULL',
'IS NOT NULL') my_varchar_1000 id
IS NULL NULL 1
@@ -1776,7 +1832,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 116 OR select_id IS NULL) order by id;
IF(my_varchar_1000 IS NULL, 'IS NULL',
'IS NOT NULL') my_varchar_1000 id
IS NULL NULL 1
@@ -1791,7 +1847,7 @@ CREATE VIEW v1 AS SELECT IF(my_char_30 IS NULL, 'IS NULL',
'IS NOT NULL'), my_char_30, id FROM t1_values;
SELECT IF(my_char_30 IS NULL, 'IS NULL',
'IS NOT NULL'), my_char_30, id FROM t1_values
-WHERE select_id = 114 OR select_id IS NULL order by id;
+WHERE select_id = 115 OR select_id IS NULL order by id;
IF(my_char_30 IS NULL, 'IS NULL',
'IS NOT NULL') my_char_30 id
IS NULL NULL 1
@@ -1805,7 +1861,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 115 OR select_id IS NULL) order by id;
IF(my_char_30 IS NULL, 'IS NULL',
'IS NOT NULL') my_char_30 id
IS NULL NULL 1
@@ -1820,7 +1876,7 @@ CREATE VIEW v1 AS SELECT IF(my_year, 'IS TRUE', 'IS NOT TRUE'),
my_year, id FROM t1_values;
SELECT IF(my_year, 'IS TRUE', 'IS NOT TRUE'),
my_year, id FROM t1_values
-WHERE select_id = 113 OR select_id IS NULL order by id;
+WHERE select_id = 114 OR select_id IS NULL order by id;
IF(my_year, 'IS TRUE', 'IS NOT TRUE') my_year id
IS NOT TRUE NULL 1
IS TRUE 1901 2
@@ -1832,7 +1888,7 @@ 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;
+WHERE select_id = 114 OR select_id IS NULL) order by id;
IF(my_year, 'IS TRUE', 'IS NOT TRUE') my_year id
IS NOT TRUE NULL 1
IS TRUE 1901 2
@@ -1846,7 +1902,7 @@ CREATE VIEW v1 AS SELECT IF(my_time, 'IS TRUE', 'IS NOT TRUE'),
my_time, id FROM t1_values;
SELECT IF(my_time, 'IS TRUE', 'IS NOT TRUE'),
my_time, id FROM t1_values
-WHERE select_id = 112 OR select_id IS NULL order by id;
+WHERE select_id = 113 OR select_id IS NULL order by id;
IF(my_time, 'IS TRUE', 'IS NOT TRUE') my_time id
IS NOT TRUE NULL 1
IS TRUE -838:59:59 2
@@ -1858,7 +1914,7 @@ 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;
+WHERE select_id = 113 OR select_id IS NULL) order by id;
IF(my_time, 'IS TRUE', 'IS NOT TRUE') my_time id
IS NOT TRUE NULL 1
IS TRUE -838:59:59 2
@@ -1872,7 +1928,7 @@ CREATE VIEW v1 AS SELECT IF(my_timestamp, 'IS TRUE', 'IS NOT TRUE'),
my_timestamp, id FROM t1_values;
SELECT IF(my_timestamp, 'IS TRUE', 'IS NOT TRUE'),
my_timestamp, id FROM t1_values
-WHERE select_id = 111 OR select_id IS NULL order by id;
+WHERE select_id = 112 OR select_id IS NULL order by id;
IF(my_timestamp, 'IS TRUE', 'IS NOT TRUE') my_timestamp id
IS NOT TRUE 0000-00-00 00:00:00 1
IS TRUE 1970-01-01 03:00:01 2
@@ -1884,7 +1940,7 @@ 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;
+WHERE select_id = 112 OR select_id IS NULL) order by id;
IF(my_timestamp, 'IS TRUE', 'IS NOT TRUE') my_timestamp id
IS NOT TRUE 0000-00-00 00:00:00 1
IS TRUE 1970-01-01 03:00:01 2
@@ -1898,7 +1954,7 @@ CREATE VIEW v1 AS SELECT IF(my_date, 'IS TRUE', 'IS NOT TRUE'),
my_date, id FROM t1_values;
SELECT IF(my_date, 'IS TRUE', 'IS NOT TRUE'),
my_date, id FROM t1_values
-WHERE select_id = 110 OR select_id IS NULL order by id;
+WHERE select_id = 111 OR select_id IS NULL order by id;
IF(my_date, 'IS TRUE', 'IS NOT TRUE') my_date id
IS NOT TRUE NULL 1
IS TRUE 0001-01-01 2
@@ -1910,7 +1966,7 @@ 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;
+WHERE select_id = 111 OR select_id IS NULL) order by id;
IF(my_date, 'IS TRUE', 'IS NOT TRUE') my_date id
IS NOT TRUE NULL 1
IS TRUE 0001-01-01 2
@@ -1924,7 +1980,7 @@ CREATE VIEW v1 AS SELECT IF(my_datetime, 'IS TRUE', 'IS NOT TRUE'),
my_datetime, id FROM t1_values;
SELECT IF(my_datetime, 'IS TRUE', 'IS NOT TRUE'),
my_datetime, id FROM t1_values
-WHERE select_id = 109 OR select_id IS NULL order by id;
+WHERE select_id = 110 OR select_id IS NULL order by id;
IF(my_datetime, 'IS TRUE', 'IS NOT TRUE') my_datetime id
IS NOT TRUE NULL 1
IS TRUE 0001-01-01 00:00:00 2
@@ -1936,7 +1992,7 @@ 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;
+WHERE select_id = 110 OR select_id IS NULL) order by id;
IF(my_datetime, 'IS TRUE', 'IS NOT TRUE') my_datetime id
IS NOT TRUE NULL 1
IS TRUE 0001-01-01 00:00:00 2
@@ -1950,7 +2006,7 @@ CREATE VIEW v1 AS SELECT IF(my_double, 'IS TRUE', 'IS NOT TRUE'),
my_double, id FROM t1_values;
SELECT IF(my_double, 'IS TRUE', 'IS NOT TRUE'),
my_double, id FROM t1_values
-WHERE select_id = 108 OR select_id IS NULL order by id;
+WHERE select_id = 109 OR select_id IS NULL order by id;
IF(my_double, 'IS TRUE', 'IS NOT TRUE') my_double id
IS NOT TRUE NULL 1
IS TRUE -1.7976931348623e+308 2
@@ -1962,7 +2018,7 @@ 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;
+WHERE select_id = 109 OR select_id IS NULL) order by id;
IF(my_double, 'IS TRUE', 'IS NOT TRUE') my_double id
IS NOT TRUE NULL 1
IS TRUE -1.7976931348623e+308 2
@@ -1976,7 +2032,7 @@ CREATE VIEW v1 AS SELECT IF(my_decimal, 'IS TRUE', 'IS NOT TRUE'),
my_decimal, id FROM t1_values;
SELECT IF(my_decimal, 'IS TRUE', 'IS NOT TRUE'),
my_decimal, id FROM t1_values
-WHERE select_id = 107 OR select_id IS NULL order by id;
+WHERE select_id = 108 OR select_id IS NULL order by id;
IF(my_decimal, 'IS TRUE', 'IS NOT TRUE') my_decimal id
IS NOT TRUE NULL 1
IS TRUE -9999999999999999999999999999999999.999999999999999999999999999999 2
@@ -1988,7 +2044,7 @@ 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;
+WHERE select_id = 108 OR select_id IS NULL) order by id;
IF(my_decimal, 'IS TRUE', 'IS NOT TRUE') my_decimal id
IS NOT TRUE NULL 1
IS TRUE -9999999999999999999999999999999999.999999999999999999999999999999 2
@@ -2002,7 +2058,7 @@ CREATE VIEW v1 AS SELECT IF(my_bigint, 'IS TRUE', 'IS NOT TRUE'),
my_bigint, id FROM t1_values;
SELECT IF(my_bigint, 'IS TRUE', 'IS NOT TRUE'),
my_bigint, id FROM t1_values
-WHERE select_id = 106 OR select_id IS NULL order by id;
+WHERE select_id = 107 OR select_id IS NULL order by id;
IF(my_bigint, 'IS TRUE', 'IS NOT TRUE') my_bigint id
IS NOT TRUE NULL 1
IS TRUE -9223372036854775808 2
@@ -2014,7 +2070,7 @@ 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;
+WHERE select_id = 107 OR select_id IS NULL) order by id;
IF(my_bigint, 'IS TRUE', 'IS NOT TRUE') my_bigint id
IS NOT TRUE NULL 1
IS TRUE -9223372036854775808 2
@@ -2028,7 +2084,7 @@ CREATE VIEW v1 AS SELECT IF(my_varbinary_1000, 'IS TRUE', 'IS NOT TRUE'),
my_varbinary_1000, id FROM t1_values;
SELECT IF(my_varbinary_1000, 'IS TRUE', 'IS NOT TRUE'),
my_varbinary_1000, id FROM t1_values
-WHERE select_id = 105 OR select_id IS NULL order by id;
+WHERE select_id = 106 OR select_id IS NULL order by id;
IF(my_varbinary_1000, 'IS TRUE', 'IS NOT TRUE') my_varbinary_1000 id
IS NOT TRUE NULL 1
IS NOT TRUE 2
@@ -2040,7 +2096,7 @@ 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;
+WHERE select_id = 106 OR select_id IS NULL) order by id;
IF(my_varbinary_1000, 'IS TRUE', 'IS NOT TRUE') my_varbinary_1000 id
IS NOT TRUE NULL 1
IS NOT TRUE 2
@@ -2054,7 +2110,7 @@ CREATE VIEW v1 AS SELECT IF(my_binary_30, 'IS TRUE', 'IS NOT TRUE'),
my_binary_30, id FROM t1_values;
SELECT IF(my_binary_30, 'IS TRUE', 'IS NOT TRUE'),
my_binary_30, id FROM t1_values
-WHERE select_id = 104 OR select_id IS NULL order by id;
+WHERE select_id = 105 OR select_id IS NULL order by id;
IF(my_binary_30, 'IS TRUE', 'IS NOT TRUE') my_binary_30 id
IS NOT TRUE NULL 1
IS NOT TRUE
@@ -2071,7 +2127,7 @@ 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;
+WHERE select_id = 105 OR select_id IS NULL) order by id;
IF(my_binary_30, 'IS TRUE', 'IS NOT TRUE') my_binary_30 id
IS NOT TRUE NULL 1
IS NOT TRUE
@@ -2090,7 +2146,7 @@ CREATE VIEW v1 AS SELECT IF(my_varchar_1000, 'IS TRUE', 'IS NOT TRUE'),
my_varchar_1000, id FROM t1_values;
SELECT IF(my_varchar_1000, 'IS TRUE', 'IS NOT TRUE'),
my_varchar_1000, id FROM t1_values
-WHERE select_id = 103 OR select_id IS NULL order by id;
+WHERE select_id = 104 OR select_id IS NULL order by id;
IF(my_varchar_1000, 'IS TRUE', 'IS NOT TRUE') my_varchar_1000 id
IS NOT TRUE NULL 1
IS NOT TRUE 2
@@ -2102,7 +2158,7 @@ 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;
+WHERE select_id = 104 OR select_id IS NULL) order by id;
IF(my_varchar_1000, 'IS TRUE', 'IS NOT TRUE') my_varchar_1000 id
IS NOT TRUE NULL 1
IS NOT TRUE 2
@@ -2116,7 +2172,7 @@ CREATE VIEW v1 AS SELECT IF(my_char_30, 'IS TRUE', 'IS NOT TRUE'),
my_char_30, id FROM t1_values;
SELECT IF(my_char_30, 'IS TRUE', 'IS NOT TRUE'),
my_char_30, id FROM t1_values
-WHERE select_id = 102 OR select_id IS NULL order by id;
+WHERE select_id = 103 OR select_id IS NULL order by id;
IF(my_char_30, 'IS TRUE', 'IS NOT TRUE') my_char_30 id
IS NOT TRUE NULL 1
IS NOT TRUE 2
@@ -2131,7 +2187,7 @@ 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;
+WHERE select_id = 103 OR select_id IS NULL) order by id;
IF(my_char_30, 'IS TRUE', 'IS NOT TRUE') my_char_30 id
IS NOT TRUE NULL 1
IS NOT TRUE 2
@@ -2148,7 +2204,7 @@ CREATE VIEW v1 AS SELECT CONVERT(my_varbinary_1000 USING koi8r),
my_varbinary_1000, id FROM t1_values;
SELECT CONVERT(my_varbinary_1000 USING koi8r),
my_varbinary_1000, id FROM t1_values
-WHERE select_id = 101 OR select_id IS NULL order by id;
+WHERE select_id = 102 OR select_id IS NULL order by id;
CONVERT(my_varbinary_1000 USING koi8r) my_varbinary_1000 id
NULL NULL 1
2
@@ -2160,7 +2216,7 @@ 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;
+WHERE select_id = 102 OR select_id IS NULL) order by id;
CONVERT(my_varbinary_1000 USING koi8r) my_varbinary_1000 id
NULL NULL 1
2
@@ -2174,7 +2230,7 @@ CREATE VIEW v1 AS SELECT CONVERT(my_binary_30 USING koi8r),
my_binary_30, id FROM t1_values;
SELECT CONVERT(my_binary_30 USING koi8r),
my_binary_30, id FROM t1_values
-WHERE select_id = 100 OR select_id IS NULL order by id;
+WHERE select_id = 101 OR select_id IS NULL order by id;
CONVERT(my_binary_30 USING koi8r) my_binary_30 id
NULL NULL 1
@@ -2186,7 +2242,7 @@ 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;
+WHERE select_id = 101 OR select_id IS NULL) order by id;
CONVERT(my_binary_30 USING koi8r) my_binary_30 id
NULL NULL 1
@@ -2200,7 +2256,7 @@ CREATE VIEW v1 AS SELECT CONVERT(my_varchar_1000 USING koi8r),
my_varchar_1000, id FROM t1_values;
SELECT CONVERT(my_varchar_1000 USING koi8r),
my_varchar_1000, id FROM t1_values
-WHERE select_id = 99 OR select_id IS NULL order by id;
+WHERE select_id = 100 OR select_id IS NULL order by id;
CONVERT(my_varchar_1000 USING koi8r) my_varchar_1000 id
NULL NULL 1
2
@@ -2212,7 +2268,7 @@ 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;
+WHERE select_id = 100 OR select_id IS NULL) order by id;
CONVERT(my_varchar_1000 USING koi8r) my_varchar_1000 id
NULL NULL 1
2
@@ -2226,7 +2282,7 @@ CREATE VIEW v1 AS SELECT CONVERT(my_char_30 USING koi8r),
my_char_30, id FROM t1_values;
SELECT CONVERT(my_char_30 USING koi8r),
my_char_30, id FROM t1_values
-WHERE select_id = 98 OR select_id IS NULL order by id;
+WHERE select_id = 99 OR select_id IS NULL order by id;
CONVERT(my_char_30 USING koi8r) my_char_30 id
NULL NULL 1
2
@@ -2238,7 +2294,7 @@ 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;
+WHERE select_id = 99 OR select_id IS NULL) order by id;
CONVERT(my_char_30 USING koi8r) my_char_30 id
NULL NULL 1
2
@@ -2252,7 +2308,7 @@ CREATE VIEW v1 AS SELECT CONVERT(my_varbinary_1000 USING utf8),
my_varbinary_1000, id FROM t1_values;
SELECT CONVERT(my_varbinary_1000 USING utf8),
my_varbinary_1000, id FROM t1_values
-WHERE select_id = 97 OR select_id IS NULL order by id;
+WHERE select_id = 98 OR select_id IS NULL order by id;
CONVERT(my_varbinary_1000 USING utf8) my_varbinary_1000 id
NULL NULL 1
2
@@ -2264,7 +2320,7 @@ 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;
+WHERE select_id = 98 OR select_id IS NULL) order by id;
CONVERT(my_varbinary_1000 USING utf8) my_varbinary_1000 id
NULL NULL 1
2
@@ -2278,7 +2334,7 @@ CREATE VIEW v1 AS SELECT CONVERT(my_binary_30 USING utf8),
my_binary_30, id FROM t1_values;
SELECT CONVERT(my_binary_30 USING utf8),
my_binary_30, id FROM t1_values
-WHERE select_id = 96 OR select_id IS NULL order by id;
+WHERE select_id = 97 OR select_id IS NULL order by id;
CONVERT(my_binary_30 USING utf8) my_binary_30 id
NULL NULL 1
@@ -2290,7 +2346,7 @@ 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;
+WHERE select_id = 97 OR select_id IS NULL) order by id;
CONVERT(my_binary_30 USING utf8) my_binary_30 id
NULL NULL 1
@@ -2304,7 +2360,7 @@ CREATE VIEW v1 AS SELECT CONVERT(my_varchar_1000 USING utf8),
my_varchar_1000, id FROM t1_values;
SELECT CONVERT(my_varchar_1000 USING utf8),
my_varchar_1000, id FROM t1_values
-WHERE select_id = 95 OR select_id IS NULL order by id;
+WHERE select_id = 96 OR select_id IS NULL order by id;
CONVERT(my_varchar_1000 USING utf8) my_varchar_1000 id
NULL NULL 1
2
@@ -2316,7 +2372,7 @@ 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;
+WHERE select_id = 96 OR select_id IS NULL) order by id;
CONVERT(my_varchar_1000 USING utf8) my_varchar_1000 id
NULL NULL 1
2
@@ -2330,7 +2386,7 @@ CREATE VIEW v1 AS SELECT CONVERT(my_char_30 USING utf8),
my_char_30, id FROM t1_values;
SELECT CONVERT(my_char_30 USING utf8),
my_char_30, id FROM t1_values
-WHERE select_id = 94 OR select_id IS NULL order by id;
+WHERE select_id = 95 OR select_id IS NULL order by id;
CONVERT(my_char_30 USING utf8) my_char_30 id
NULL NULL 1
2
@@ -2342,7 +2398,7 @@ 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;
+WHERE select_id = 95 OR select_id IS NULL) order by id;
CONVERT(my_char_30 USING utf8) my_char_30 id
NULL NULL 1
2
@@ -2356,7 +2412,7 @@ CREATE VIEW v1 AS SELECT CAST(my_year AS UNSIGNED INTEGER),
my_year, id FROM t1_values;
SELECT CAST(my_year AS UNSIGNED INTEGER),
my_year, id FROM t1_values
-WHERE select_id = 93 OR select_id IS NULL order by id;
+WHERE select_id = 94 OR select_id IS NULL order by id;
CAST(my_year AS UNSIGNED INTEGER) my_year id
NULL NULL 1
1901 1901 2
@@ -2368,7 +2424,7 @@ 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;
+WHERE select_id = 94 OR select_id IS NULL) order by id;
CAST(my_year AS UNSIGNED INTEGER) my_year id
NULL NULL 1
1901 1901 2
@@ -2382,7 +2438,7 @@ CREATE VIEW v1 AS SELECT CAST(my_time AS UNSIGNED INTEGER),
my_time, id FROM t1_values;
SELECT CAST(my_time AS UNSIGNED INTEGER),
my_time, id FROM t1_values
-WHERE select_id = 92 OR select_id IS NULL order by id;
+WHERE select_id = 93 OR select_id IS NULL order by id;
CAST(my_time AS UNSIGNED INTEGER) my_time id
NULL NULL 1
18446744073701165657 -838:59:59 2
@@ -2394,7 +2450,7 @@ 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;
+WHERE select_id = 93 OR select_id IS NULL) order by id;
CAST(my_time AS UNSIGNED INTEGER) my_time id
NULL NULL 1
18446744073701165657 -838:59:59 2
@@ -2408,7 +2464,7 @@ CREATE VIEW v1 AS SELECT CAST(my_timestamp AS UNSIGNED INTEGER),
my_timestamp, id FROM t1_values;
SELECT CAST(my_timestamp AS UNSIGNED INTEGER),
my_timestamp, id FROM t1_values
-WHERE select_id = 91 OR select_id IS NULL order by id;
+WHERE select_id = 92 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
19700101030001 1970-01-01 03:00:01 2
@@ -2420,7 +2476,7 @@ 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;
+WHERE select_id = 92 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
19700101030001 1970-01-01 03:00:01 2
@@ -2434,7 +2490,7 @@ CREATE VIEW v1 AS SELECT CAST(my_date AS UNSIGNED INTEGER),
my_date, id FROM t1_values;
SELECT CAST(my_date AS UNSIGNED INTEGER),
my_date, id FROM t1_values
-WHERE select_id = 90 OR select_id IS NULL order by id;
+WHERE select_id = 91 OR select_id IS NULL order by id;
CAST(my_date AS UNSIGNED INTEGER) my_date id
NULL NULL 1
10101 0001-01-01 2
@@ -2446,7 +2502,7 @@ 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;
+WHERE select_id = 91 OR select_id IS NULL) order by id;
CAST(my_date AS UNSIGNED INTEGER) my_date id
NULL NULL 1
10101 0001-01-01 2
@@ -2460,7 +2516,7 @@ CREATE VIEW v1 AS SELECT CAST(my_datetime AS UNSIGNED INTEGER),
my_datetime, id FROM t1_values;
SELECT CAST(my_datetime AS UNSIGNED INTEGER),
my_datetime, id FROM t1_values
-WHERE select_id = 89 OR select_id IS NULL order by id;
+WHERE select_id = 90 OR select_id IS NULL order by id;
CAST(my_datetime AS UNSIGNED INTEGER) my_datetime id
NULL NULL 1
10101000000 0001-01-01 00:00:00 2
@@ -2472,7 +2528,7 @@ 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;
+WHERE select_id = 90 OR select_id IS NULL) order by id;
CAST(my_datetime AS UNSIGNED INTEGER) my_datetime id
NULL NULL 1
10101000000 0001-01-01 00:00:00 2
@@ -2482,6 +2538,38 @@ NULL NULL 1
DROP VIEW v1;
+CREATE VIEW v1 AS SELECT CAST(my_double AS UNSIGNED INTEGER),
+my_double, id FROM t1_values;
+SELECT CAST(my_double AS UNSIGNED INTEGER),
+my_double, id FROM t1_values
+WHERE select_id = 89 OR select_id IS NULL order by id;
+CAST(my_double AS UNSIGNED INTEGER) my_double id
+NULL NULL 1
+9223372036854775808 -1.7976931348623e+308 2
+9223372036854775807 1.7976931348623e+308 3
+0 0 4
+18446744073709551615 -1 5
+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 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 unsigned) AS `CAST(my_double AS UNSIGNED 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 = 89 OR select_id IS NULL) order by id;
+CAST(my_double AS UNSIGNED INTEGER) my_double id
+NULL NULL 1
+9223372036854775808 -1.7976931348623e+308 2
+9223372036854775807 1.7976931348623e+308 3
+0 0 4
+18446744073709551615 -1 5
+Warnings:
+Warning 1292 Truncated incorrect INTEGER value: '-1.7976931348623e+308'
+Warning 1292 Truncated incorrect INTEGER value: '1.7976931348623e+308'
+DROP VIEW v1;
+
+
CREATE VIEW v1 AS SELECT CAST(my_decimal AS UNSIGNED INTEGER),
my_decimal, id FROM t1_values;
SELECT CAST(my_decimal AS UNSIGNED INTEGER),
diff --git a/mysql-test/suite/funcs_1/r/memory_storedproc.result b/mysql-test/suite/funcs_1/r/memory_storedproc.result
index 402b527241f..ec0fde80dda 100644
--- a/mysql-test/suite/funcs_1/r/memory_storedproc.result
+++ b/mysql-test/suite/funcs_1/r/memory_storedproc.result
@@ -1,29 +1,4 @@
-.
-. IMPORTANT NOTICE:
-. -----------------
-.
-. FIXME: The .result files are still NOT CHECKED for correctness!
-.
-. FIXME: Several tests are affected by known problems around DECIMAL
-. FIXME: and NUMERIC that will be checked again after WL#2984 once
-. FIXME: has been completed. Some of them are marked in the result.
-.
-. Currently (Dec 06, 2005) this .result file is checked OK for Linux
-. with 5.0.17-bk (ChangeSet@1.1975.1.2, 2005-12-05 18:33:48+01:00).
-. Using the available Windows version 5.0.16 there are differences
-. that can be ignored (e.g. WL#2984).
-.
---------------------------------------------------------------------------------
- FIXME: There are subtests that are switched off due to known bugs:
- ------------------------------------------------------------------
-WL#2984: DECIMAL and NUMERIC problems with differences on some machines
-0
-
-There are some statements where the ps-protocol is switched off.
-Bug#11589: mysqltest, --ps-protocol, strange output, float/double/real with zerofill
---------------------------------------------------------------------------------
-
--source suite/funcs_1/storedproc/load_sp_tb.inc
--------------------------------------------------------------------------------
SET @@global.max_heap_table_size=4294967295;
@@ -94,23 +69,24 @@ CREATE PROCEDURE
--------------------------------------------------------------------------------
USE db_storedproc;
DROP PROCEDURE IF EXISTS sp1_thisisaveryverylongname234872934_thisisaveryverylongname234872934;
+ERROR 42000: Identifier name 'sp1_thisisaveryverylongname234872934_thisisaveryverylongname234872934' is too long
CREATE PROCEDURE sp1_thisisaveryverylongname234872934_thisisaveryverylongname234872934 (f1 char(20) )
SELECT * from t1 where f2 = f1;
+ERROR 42000: Identifier name 'sp1_thisisaveryverylongname234872934_thisisaveryverylongname234872934' is too long
CALL sp1_thisisaveryverylongname234872934_thisisaveryverylongname234872934('aaaa');
-f1 f2 f3 f4 f5 f6
+ERROR 42000: Identifier name 'sp1_thisisaveryverylongname234872934_thisisaveryverylongname234872934' is too long
DROP PROCEDURE IF EXISTS sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcde;
+ERROR 42000: Identifier name 'sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcde' is too long
CREATE PROCEDURE sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcde( f1 tinytext ) language sql deterministic sql security definer comment 'this is simple'
BEGIN
set @v1 = f1;
SELECT @v1, @v1;
END//
+ERROR 42000: Identifier name 'sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcde' is too long
CALL sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcde( 'abc' );
-@v1 @v1
-abc abc
+ERROR 42000: Identifier name 'sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcde' is too long
SHOW PROCEDURE status;
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongname2348 PROCEDURE root@localhost modified created DEFINER
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcd PROCEDURE root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 binary ) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
@@ -119,12 +95,12 @@ SELECT @v1;
END//
CALL sp1( 34 );
@v1
-34
+3
+Warnings:
+Warning 1265 Data truncated for column 'f1' at row 1
SHOW PROCEDURE status;
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongname2348 PROCEDURE root@localhost modified created DEFINER
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcd PROCEDURE root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 blob ) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
@@ -135,10 +111,8 @@ CALL sp1( 34 );
@v1
34
SHOW PROCEDURE status;
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongname2348 PROCEDURE root@localhost modified created DEFINER
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcd PROCEDURE root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 int ) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
@@ -149,25 +123,27 @@ CALL sp1( 34 );
@v1
34
SHOW PROCEDURE status;
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongname2348 PROCEDURE root@localhost modified created DEFINER
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcd PROCEDURE root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed: SP definition accepted with m>60 in DECIMAL(m,n)
CREATE PROCEDURE sp1( f1 decimal(256, 30) ) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
set @v1 = f1;
SELECT @v1;
END//
+ERROR 42000: Too big precision 256 specified for column ''. Maximum is 65.
DROP PROCEDURE IF EXISTS sp1//
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( f1 decimal(66, 30) ) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
set @v1 = f1;
SELECT @v1;
END//
+ERROR 42000: Too big precision 66 specified for column ''. Maximum is 65.
DROP PROCEDURE IF EXISTS sp1//
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( f1 decimal(60, 30) ) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
set @v1 = f1;
@@ -175,101 +151,1123 @@ SELECT @v1;
END//
CALL sp1( 17976931340000 );
@v1
-17976931340000
+17976931340000.000000000000000000000000000000
+CALL sp1( 1.797693134e+13 );
+@v1
+17976931340000.000000000000000000000000000000
+CALL sp1( 1.7976931348623157493578e+308 );
+ERROR 22007: Illegal double '1.7976931348623157493578e+308' value found during parsing
+CALL sp1( 0.1234567890987654321e+100 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-100 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+99 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-99 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+98 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-98 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+97 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-97 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+96 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-96 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+95 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-95 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+94 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-94 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+93 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-93 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+92 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-92 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+91 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-91 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+90 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-90 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+89 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-89 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+88 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-88 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+87 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-87 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+86 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-86 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+85 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-85 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+84 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-84 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+83 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-83 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+82 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-82 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+81 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-81 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+80 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-80 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+79 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-79 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+78 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-78 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+77 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-77 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+76 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-76 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+75 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-75 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+74 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-74 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+73 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-73 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+72 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-72 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+71 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-71 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+70 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-70 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+69 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-69 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+68 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-68 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+67 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-67 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+66 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-66 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+65 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-65 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+64 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-64 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+63 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-63 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+62 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-62 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+61 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-61 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+60 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-60 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+59 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-59 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+58 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-58 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+57 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-57 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+56 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-56 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+55 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-55 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+54 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-54 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+53 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-53 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+52 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-52 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+51 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-51 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+50 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-50 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+49 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-49 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+48 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-48 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+47 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-47 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+46 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-46 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+45 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-45 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+44 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-44 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+43 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-43 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+42 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-42 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+41 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-41 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+40 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-40 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+39 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-39 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+38 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-38 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+37 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-37 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+36 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-36 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+35 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-35 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+34 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-34 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+33 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-33 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+32 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-32 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+31 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-31 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+30 );
+@v1
+123456789098765400000000000000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-30 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+29 );
+@v1
+12345678909876540000000000000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-29 );
+@v1
+0.000000000000000000000000000001
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+28 );
+@v1
+1234567890987654000000000000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-28 );
+@v1
+0.000000000000000000000000000012
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+27 );
+@v1
+123456789098765400000000000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-27 );
+@v1
+0.000000000000000000000000000123
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+26 );
+@v1
+12345678909876540000000000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-26 );
+@v1
+0.000000000000000000000000001235
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+25 );
+@v1
+1234567890987654000000000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-25 );
+@v1
+0.000000000000000000000000012346
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+24 );
+@v1
+123456789098765400000000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-24 );
+@v1
+0.000000000000000000000000123457
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+23 );
+@v1
+12345678909876540000000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-23 );
+@v1
+0.000000000000000000000001234568
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+22 );
+@v1
+1234567890987654000000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-22 );
+@v1
+0.000000000000000000000012345679
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+21 );
+@v1
+123456789098765400000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-21 );
+@v1
+0.000000000000000000000123456789
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+20 );
+@v1
+12345678909876540000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-20 );
+@v1
+0.000000000000000000001234567891
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+19 );
+@v1
+1234567890987654000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-19 );
+@v1
+0.000000000000000000012345678910
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+18 );
+@v1
+123456789098765400.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-18 );
+@v1
+0.000000000000000000123456789099
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+17 );
+@v1
+12345678909876540.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-17 );
+@v1
+0.000000000000000001234567890988
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+16 );
+@v1
+1234567890987654.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-16 );
+@v1
+0.000000000000000012345678909877
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+15 );
+@v1
+123456789098765.400000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-15 );
+@v1
+0.000000000000000123456789098765
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+14 );
+@v1
+12345678909876.540000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-14 );
+@v1
+0.000000000000001234567890987654
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+13 );
+@v1
+1234567890987.654000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-13 );
+@v1
+0.000000000000012345678909876540
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+12 );
+@v1
+123456789098.765400000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-12 );
+@v1
+0.000000000000123456789098765400
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+11 );
+@v1
+12345678909.876540000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-11 );
+@v1
+0.000000000001234567890987654000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+10 );
+@v1
+1234567890.987654000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-10 );
+@v1
+0.000000000012345678909876540000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+9 );
+@v1
+123456789.098765400000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-9 );
+@v1
+0.000000000123456789098765400000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+8 );
+@v1
+12345678.909876540000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-8 );
+@v1
+0.000000001234567890987654000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+7 );
+@v1
+1234567.890987654000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-7 );
+@v1
+0.000000012345678909876540000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+6 );
+@v1
+123456.789098765400000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-6 );
+@v1
+0.000000123456789098765400000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+5 );
+@v1
+12345.678909876540000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-5 );
+@v1
+0.000001234567890987654000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+4 );
+@v1
+1234.567890987654000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-4 );
+@v1
+0.000012345678909876550000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+3 );
+@v1
+123.456789098765400000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-3 );
+@v1
+0.000123456789098765400000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+2 );
+@v1
+12.345678909876540000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-2 );
+@v1
+0.001234567890987654000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+1 );
+@v1
+1.234567890987654000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-1 );
+@v1
+0.012345678909876540000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+0 );
+@v1
+0.123456789098765400000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-0 );
+@v1
+0.123456789098765400000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
SHOW PROCEDURE status;
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongname2348 PROCEDURE root@localhost modified created DEFINER
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcd PROCEDURE root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 enum("value1", "value1") ) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
SELECT f1;
END//
+Warnings:
+Note 1291 Column '' has duplicated value 'value1' in ENUM
CALL sp1( "value1" );
f1
value1
+Warnings:
+Note 1291 Column '' has duplicated value 'value1' in ENUM
SHOW PROCEDURE status;
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongname2348 PROCEDURE root@localhost modified created DEFINER
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcd PROCEDURE root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 set("value1", "value1") ) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
SELECT f1;
END//
+Warnings:
+Note 1291 Column '' has duplicated value 'value1' in SET
CALL sp1( "value1, value1" );
f1
-value1, value1
+value1
+Warnings:
+Note 1291 Column '' has duplicated value 'value1' in SET
+Warning 1265 Data truncated for column 'f1' at row 1
SHOW PROCEDURE status;
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongname2348 PROCEDURE root@localhost modified created DEFINER
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcd PROCEDURE root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 enum("value1", "value1") ) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
SELECT f1;
END//
+Warnings:
+Note 1291 Column '' has duplicated value 'value1' in ENUM
CALL sp1( "value1" );
f1
value1
+Warnings:
+Note 1291 Column '' has duplicated value 'value1' in ENUM
SHOW PROCEDURE status;
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongname2348 PROCEDURE root@localhost modified created DEFINER
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcd PROCEDURE root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 text ) language sql SELECT f1;
CALL sp1( 'abc' );
f1
abc
SHOW PROCEDURE status like 'sp1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 text ) deterministic SELECT f1;
CALL sp1( 'abc' );
f1
abc
SHOW PROCEDURE status like 'sp1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 text ) not deterministic SELECT f1;
CALL sp1( 'abc' );
f1
abc
SHOW PROCEDURE status like 'sp1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 text ) sql security definer SELECT f1;
CALL sp1( 'abc' );
f1
abc
SHOW PROCEDURE status like 'sp1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 text ) sql security invoker SELECT f1;
CALL sp1( 'abc' );
f1
abc
SHOW PROCEDURE status like 'sp1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 text ) comment 'this is simple' SELECT f1;
CALL sp1( 'abc' );
f1
abc
SHOW PROCEDURE status like 'sp1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created DEFINER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE sp1_thisisaveryverylongname234872934_thisisaveryverylongname234872934;
+ERROR 42000: Identifier name 'sp1_thisisaveryverylongname234872934_thisisaveryverylongname234872934' is too long
DROP PROCEDURE sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcde;
+ERROR 42000: Identifier name 'sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcde' is too long
DROP PROCEDURE sp1;
Testcase 4.1.2:
@@ -294,8 +1292,8 @@ SELECT fn1( ' world');
fn1( ' world')
hello world
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created DEFINER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1( f1 smallint ) returns smallint language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
@@ -306,8 +1304,8 @@ SELECT fn1( 126 );
fn1( 126 )
127
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created INVOKER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1( f1 decimal(63, 31) ) returns decimal(63, 31) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
@@ -326,34 +1324,34 @@ SELECT fn1( 1.3326e+8 );
fn1( 1.3326e+8 )
134260000.000000000000000000000000000000
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created INVOKER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1( f1 enum("value1", "value1") ) returns decimal(63, 30) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
return f1;
END//
+Warnings:
+Note 1291 Column '' has duplicated value 'value1' in ENUM
SELECT fn1( "value1" );
fn1( "value1" )
-0.000000000000000000000000000000
-Warnings:
-Warning 1292 Truncated incorrect DECIMAL value: 'value1'
+1.000000000000000000000000000000
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created INVOKER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1( f1 set("value1", "value1") ) returns decimal(63, 30) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
return f1;
END//
+Warnings:
+Note 1291 Column '' has duplicated value 'value1' in SET
SELECT fn1( "value1, value1" );
fn1( "value1, value1" )
-0.000000000000000000000000000000
-Warnings:
-Warning 1292 Truncated incorrect DECIMAL value: 'value1, value1'
+1.000000000000000000000000000000
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created INVOKER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1( f1 smallint ) returns smallint language sql
BEGIN
@@ -364,8 +1362,8 @@ SELECT fn1( 126 );
fn1( 126 )
127
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1( f1 smallint ) returns smallint deterministic
BEGIN
@@ -376,8 +1374,8 @@ SELECT fn1( 126 );
fn1( 126 )
127
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1( f1 smallint ) returns smallint not deterministic
BEGIN
@@ -388,8 +1386,8 @@ SELECT fn1( 126 );
fn1( 126 )
127
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1( f1 smallint ) returns smallint
sql security definer
@@ -401,8 +1399,8 @@ SELECT fn1( 126 );
fn1( 126 )
127
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1( f1 smallint ) returns smallint
sql security invoker
@@ -414,8 +1412,8 @@ SELECT fn1( 126 );
fn1( 126 )
127
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created INVOKER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created INVOKER latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1( f1 smallint ) returns smallint
comment 'this is simple'
@@ -427,8 +1425,8 @@ SELECT fn1( 126 );
fn1( 126 )
127
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created DEFINER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION fn1;
Testcase 4.1.3:
@@ -440,9 +1438,9 @@ DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1 (f1 char(20) )
SELECT * from t1 where f2 = f1;
show CREATE PROCEDURE sp1;
-Procedure sql_mode Create Procedure
-sp1 CREATE PROCEDURE `sp1`(f1 char(20) )
-SELECT * from t1 where f2 = f1
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp1 CREATE DEFINER=`root`@`localhost` PROCEDURE `sp1`(f1 char(20) )
+SELECT * from t1 where f2 = f1 latin1 modified created
DROP PROCEDURE sp1;
Testcase 4.1.4:
@@ -453,9 +1451,9 @@ DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1 (s char(20)) returns char(50)
return concat('hello, ', s, '!');
show CREATE FUNCTION fn1;
-Function sql_mode Create Function
-fn1 CREATE FUNCTION `fn1`(s char(20)) RETURNS char(50)
-return concat('hello, ', s, '!')
+Function sql_mode Create Function character_set_client collation_connection Database Collation
+fn1 CREATE DEFINER=`root`@`localhost` FUNCTION `fn1`(s char(20)) RETURNS char(50) CHARSET latin1
+return concat('hello, ', s, '!') latin1 modified created
DROP FUNCTION fn1;
Testcase 4.1.5:
@@ -465,8 +1463,8 @@ SHOW PROCEDURE status
CREATE PROCEDURE sp5()
SELECT * from t1;
SHOW PROCEDURE status like 'sp5';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp5 PROCEDURE root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp5 PROCEDURE root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE sp5;
Testcase 4.1.6:
@@ -479,8 +1477,8 @@ set @b = 0.9 * a;
return @b;
END//
SHOW FUNCTION STATUS LIKE 'fn5';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn5 FUNCTION root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn5 FUNCTION root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION fn5;
Testcase 4.1.7:
@@ -498,7 +1496,7 @@ CREATE PROCEDURE sp7b (a char (20), out b char(20))
SELECT f1 into b from t1 where t1.f2= a;
CALL sp7b('xyz', @out_param);
Warnings:
-Warning 1329 No data to FETCH
+Warning 1329 No data - zero rows fetched, selected, or processed
SELECT @out_param;
@out_param
NULL
@@ -510,9 +1508,6 @@ SELECT f2 into c from t1 where t1.f2=999;
END//
set @c=1;
CALL sp7c('xyz', @out_param, @c);
-Warnings:
-Warning 1329 No data to FETCH
-Warning 1329 No data to FETCH
SELECT @out_param;
@out_param
NULL
@@ -539,48 +1534,48 @@ Testcase 4.1.9:
drop procedure
--------------------------------------------------------------------------------
SELECT * from mysql.proc where specific_name='sp9';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
DROP PROCEDURE IF EXISTS sp9;
SELECT * from mysql.proc where specific_name='sp9';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
CREATE PROCEDURE sp9()SELECT * from t1;
SELECT * from mysql.proc where specific_name='sp9';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
-db_storedproc sp9 PROCEDURE sp9 SQL CONTAINS_SQL NO DEFINER SELECT * from t1 root@localhost created modified
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
+db_storedproc sp9 PROCEDURE sp9 SQL CONTAINS_SQL NO DEFINER SELECT * from t1 root@localhost created modified latin1 latin1_swedish_ci latin1_swedish_ci SELECT * from t1
DROP PROCEDURE sp9;
SELECT * from mysql.proc where specific_name='sp9';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
CREATE PROCEDURE sp9()SELECT * from t1;
SELECT * from mysql.proc where specific_name='sp9';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
-db_storedproc sp9 PROCEDURE sp9 SQL CONTAINS_SQL NO DEFINER SELECT * from t1 root@localhost created modified
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
+db_storedproc sp9 PROCEDURE sp9 SQL CONTAINS_SQL NO DEFINER SELECT * from t1 root@localhost created modified latin1 latin1_swedish_ci latin1_swedish_ci SELECT * from t1
DROP PROCEDURE IF EXISTS sp9;
SELECT * from mysql.proc where specific_name='sp9';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
Testcase 4.1.10:
----------------
DROP FUNCTION
--------------------------------------------------------------------------------
SELECT * from mysql.proc where specific_name='fn10' and type='function';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
DROP FUNCTION IF EXISTS fn10;
SELECT * from mysql.proc where specific_name='fn10' and type='function';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
CREATE FUNCTION fn10() returns int return 100;
SELECT * from mysql.proc where specific_name='fn10' and type='function';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
-db_storedproc fn10 FUNCTION fn10 SQL CONTAINS_SQL NO DEFINER int(11) return 100 root@localhost created modified
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
+db_storedproc fn10 FUNCTION fn10 SQL CONTAINS_SQL NO DEFINER int(11) return 100 root@localhost created modified latin1 latin1_swedish_ci latin1_swedish_ci return 100
DROP FUNCTION fn10;
SELECT * from mysql.proc where specific_name='fn10' and type='function';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
CREATE FUNCTION fn10() returns int return 100;
SELECT * from mysql.proc where specific_name='fn10' and type='function';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
-db_storedproc fn10 FUNCTION fn10 SQL CONTAINS_SQL NO DEFINER int(11) return 100 root@localhost created modified
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
+db_storedproc fn10 FUNCTION fn10 SQL CONTAINS_SQL NO DEFINER int(11) return 100 root@localhost created modified latin1 latin1_swedish_ci latin1_swedish_ci return 100
DROP FUNCTION IF EXISTS fn10;
SELECT * from mysql.proc where specific_name='fn10' and type='function';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
Testcase 4.1.11:
----------------
@@ -604,6 +1599,7 @@ connect(localhost,user_1,,db_storedproc,MYSQL_PORT,MYSQL_SOCK);
user_1@localhost db_storedproc
CALL sp11();
+USE db_storedproc;
root@localhost db_storedproc
alter procedure sp11 sql security invoker;
@@ -612,6 +1608,7 @@ security_type
INVOKER
user_1@localhost db_storedproc
+USE db_storedproc;
CALL sp11();
ERROR 42000: INSERT command denied to user 'user_1'@'localhost' for table 't1'
commit work;
@@ -705,6 +1702,10 @@ SELECT * from t1 where f2 = f1' at line 1
CREATE PROCEDURE function()
SELECT * from t1 where f2=f1;
DROP PROCEDURE function;
+CREATE PROCEDURE accessible()
+SELECT * from t1 where f2=f1;
+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 'accessible()
+SELECT * from t1 where f2=f1' at line 1
CREATE PROCEDURE add()
SELECT * from t1 where f2=f1;
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 'add()
@@ -765,9 +1766,9 @@ CREATE PROCEDURE by()
SELECT * from t1 where f2=f1;
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 'by()
SELECT * from t1 where f2=f1' at line 1
-CREATE PROCEDURE CALL()
+CREATE PROCEDURE call()
SELECT * from t1 where f2=f1;
-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 'CALL()
+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 'call()
SELECT * from t1 where f2=f1' at line 1
CREATE PROCEDURE cascade()
SELECT * from t1 where f2=f1;
@@ -801,17 +1802,10 @@ CREATE PROCEDURE column()
SELECT * from t1 where f2=f1;
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 'column()
SELECT * from t1 where f2=f1' at line 1
-CREATE PROCEDURE columns()
-SELECT * from t1 where f2=f1;
-DROP PROCEDURE columns;
CREATE PROCEDURE condition()
SELECT * from t1 where f2=f1;
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 'condition()
SELECT * from t1 where f2=f1' at line 1
-CREATE PROCEDURE connection()
-SELECT * from t1 where f2=f1;
-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 'connection()
-SELECT * from t1 where f2=f1' at line 1
CREATE PROCEDURE constraint()
SELECT * from t1 where f2=f1;
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 'constraint()
@@ -995,9 +1989,6 @@ CREATE PROCEDURE foreign()
SELECT * from t1 where f2=f1;
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 'foreign()
SELECT * from t1 where f2=f1' at line 1
-CREATE PROCEDURE found()
-SELECT * from t1 where f2=f1;
-DROP PROCEDURE found;
CREATE PROCEDURE from()
SELECT * from t1 where f2=f1;
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 'from()
@@ -1006,9 +1997,6 @@ CREATE PROCEDURE fulltext()
SELECT * from t1 where f2=f1;
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 'fulltext()
SELECT * from t1 where f2=f1' at line 1
-CREATE PROCEDURE goto()
-SELECT * from t1 where f2=f1;
-DROP PROCEDURE goto;
CREATE PROCEDURE grant()
SELECT * from t1 where f2=f1;
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 'grant()
@@ -1077,6 +2065,26 @@ CREATE PROCEDURE int()
SELECT * from t1 where f2=f1;
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 'int()
SELECT * from t1 where f2=f1' at line 1
+CREATE PROCEDURE int1()
+SELECT * from t1 where f2=f1;
+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 'int1()
+SELECT * from t1 where f2=f1' at line 1
+CREATE PROCEDURE int2()
+SELECT * from t1 where f2=f1;
+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 'int2()
+SELECT * from t1 where f2=f1' at line 1
+CREATE PROCEDURE int3()
+SELECT * from t1 where f2=f1;
+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 'int3()
+SELECT * from t1 where f2=f1' at line 1
+CREATE PROCEDURE int4()
+SELECT * from t1 where f2=f1;
+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 'int4()
+SELECT * from t1 where f2=f1' at line 1
+CREATE PROCEDURE int8()
+SELECT * from t1 where f2=f1;
+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 'int8()
+SELECT * from t1 where f2=f1' at line 1
CREATE PROCEDURE integer()
SELECT * from t1 where f2=f1;
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 'integer()
@@ -1133,6 +2141,10 @@ CREATE PROCEDURE limit()
SELECT * from t1 where f2=f1;
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 'limit()
SELECT * from t1 where f2=f1' at line 1
+CREATE PROCEDURE linear()
+SELECT * from t1 where f2=f1;
+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 'linear()
+SELECT * from t1 where f2=f1' at line 1
CREATE PROCEDURE lines()
SELECT * from t1 where f2=f1;
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 'lines()
@@ -1173,6 +2185,10 @@ CREATE PROCEDURE low_priority()
SELECT * from t1 where f2=f1;
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 'low_priority()
SELECT * from t1 where f2=f1' at line 1
+CREATE PROCEDURE master_ssl_verify_server_cert()
+SELECT * from t1 where f2=f1;
+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 'master_ssl_verify_server_cert()
+SELECT * from t1 where f2=f1' at line 1
CREATE PROCEDURE match()
SELECT * from t1 where f2=f1;
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 'match()
@@ -1273,9 +2289,6 @@ CREATE PROCEDURE primary()
SELECT * from t1 where f2=f1;
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 'primary()
SELECT * from t1 where f2=f1' at line 1
-CREATE PROCEDURE privileges()
-SELECT * from t1 where f2=f1;
-DROP PROCEDURE privileges;
CREATE PROCEDURE procedure()
SELECT * from t1 where f2=f1;
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 'procedure()
@@ -1284,6 +2297,10 @@ CREATE PROCEDURE purge()
SELECT * from t1 where f2=f1;
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 'purge()
SELECT * from t1 where f2=f1' at line 1
+CREATE PROCEDURE range()
+SELECT * from t1 where f2=f1;
+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 'range()
+SELECT * from t1 where f2=f1' at line 1
CREATE PROCEDURE read()
SELECT * from t1 where f2=f1;
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 'read()
@@ -1304,6 +2321,10 @@ CREATE PROCEDURE regexp()
SELECT * from t1 where f2=f1;
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 'regexp()
SELECT * from t1 where f2=f1' at line 1
+CREATE PROCEDURE release()
+SELECT * from t1 where f2=f1;
+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 'release()
+SELECT * from t1 where f2=f1' at line 1
CREATE PROCEDURE rename()
SELECT * from t1 where f2=f1;
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 'rename()
@@ -1376,10 +2397,6 @@ CREATE PROCEDURE smallint()
SELECT * from t1 where f2=f1;
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 'smallint()
SELECT * from t1 where f2=f1' at line 1
-CREATE PROCEDURE soname()
-SELECT * from t1 where f2=f1;
-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 'soname()
-SELECT * from t1 where f2=f1' at line 1
CREATE PROCEDURE spatial()
SELECT * from t1 where f2=f1;
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 'spatial()
@@ -1432,9 +2449,6 @@ CREATE PROCEDURE table()
SELECT * from t1 where f2=f1;
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 'table()
SELECT * from t1 where f2=f1' at line 1
-CREATE PROCEDURE tables()
-SELECT * from t1 where f2=f1;
-DROP PROCEDURE tables;
CREATE PROCEDURE terminated()
SELECT * from t1 where f2=f1;
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 'terminated()
@@ -1725,6 +2739,26 @@ CREATE FUNCTION int(f1 int) returns int
return f1;
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 'int(f1 int) returns int
return f1' at line 1
+CREATE FUNCTION int1(f1 int1) returns int1
+return f1;
+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 'int1(f1 int1) returns int1
+return f1' at line 1
+CREATE FUNCTION int2(f1 int2) returns int2
+return f1;
+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 'int2(f1 int2) returns int2
+return f1' at line 1
+CREATE FUNCTION int3(f1 int3) returns int3
+return f1;
+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 'int3(f1 int3) returns int3
+return f1' at line 1
+CREATE FUNCTION int4(f1 int4) returns int4
+return f1;
+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 'int4(f1 int4) returns int4
+return f1' at line 1
+CREATE FUNCTION int8(f1 int8) returns int8
+return f1;
+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 'int8(f1 int8) returns int8
+return f1' at line 1
CREATE FUNCTION int unsigned(f1 int unsigned) returns int unsigned
return f1;
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 'int unsigned(f1 int unsigned) returns int unsigned
@@ -1846,485 +2880,291 @@ return f' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(char f1 ) returns char
+CREATE FUNCTION fn1(f1 char ) returns char
return f1;
-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 'char f1 ) returns char
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(char binary f1 ) returns char binary
+CREATE FUNCTION fn1(f1 char binary ) returns char binary
return f1;
-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 'char binary f1 ) returns char binary
-return f1' at line 1
+ERROR 42000: This version of MySQL doesn't yet support 'return value collation'
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(char ascii f1 ) returns char ascii
+CREATE FUNCTION fn1(f1 char ascii ) returns char ascii
return f1;
-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 'char ascii f1 ) returns char ascii
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(char not null f1 ) returns char not null
+CREATE FUNCTION fn1(f1 char not null ) returns char not null
return f1;
-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 'char not null f1 ) returns char not null
+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 'not null ) returns char not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(char binary not null f1 ) returns char binary not null
+CREATE FUNCTION fn1(f1 char binary not null ) returns char binary not null
return f1;
-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 'char binary not null f1 ) returns char binary not null
+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 'not null ) returns char binary not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(char ascii not null f1 ) returns char ascii not null
+CREATE FUNCTION fn1(f1 char ascii not null ) returns char ascii not null
return f1;
-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 'char ascii not null f1 ) returns char ascii not null
+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 'not null ) returns char ascii not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(tinytext f1 ) returns tinytext
+CREATE FUNCTION fn1(f1 tinytext ) returns tinytext
return f1;
-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 'tinytext f1 ) returns tinytext
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(text f1 ) returns text
+CREATE FUNCTION fn1(f1 text ) returns text
return f1;
-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 'f1 ) returns text
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(mediumtext f1 ) returns mediumtext
+CREATE FUNCTION fn1(f1 mediumtext ) returns mediumtext
return f1;
-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 'mediumtext f1 ) returns mediumtext
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(longtext f1 ) returns longtext
+CREATE FUNCTION fn1(f1 longtext ) returns longtext
return f1;
-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 'longtext f1 ) returns longtext
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(tinytext not null f1 ) returns tinytext not null
+CREATE FUNCTION fn1(f1 tinytext not null ) returns tinytext not null
return f1;
-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 'tinytext not null f1 ) returns tinytext not null
+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 'not null ) returns tinytext not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(text not null f1 ) returns text not null
+CREATE FUNCTION fn1(f1 text not null ) returns text not null
return f1;
-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 'not null f1 ) returns text not null
+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 'not null ) returns text not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(mediumtext not null f1 ) returns mediumtext not null
+CREATE FUNCTION fn1(f1 mediumtext not null ) returns mediumtext not null
return f1;
-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 'mediumtext not null f1 ) returns mediumtext not null
+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 'not null ) returns mediumtext not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(longtext not null f1 ) returns longtext not null
+CREATE FUNCTION fn1(f1 longtext not null ) returns longtext not null
return f1;
-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 'longtext not null f1 ) returns longtext not null
+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 'not null ) returns longtext not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(tinyblob f1 ) returns tinyblob
+CREATE FUNCTION fn1(f1 tinyblob ) returns tinyblob
return f1;
-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 'tinyblob f1 ) returns tinyblob
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(blob f1 ) returns blob
+CREATE FUNCTION fn1(f1 blob ) returns blob
return f1;
-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 'blob f1 ) returns blob
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(mediumblob f1 ) returns mediumblob
+CREATE FUNCTION fn1(f1 mediumblob ) returns mediumblob
return f1;
-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 'mediumblob f1 ) returns mediumblob
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(longblob f1 ) returns longblob
+CREATE FUNCTION fn1(f1 longblob ) returns longblob
return f1;
-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 'longblob f1 ) returns longblob
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(tinyblob not null f1 ) returns tinyblob not null
+CREATE FUNCTION fn1(f1 tinyblob not null ) returns tinyblob not null
return f1;
-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 'tinyblob not null f1 ) returns tinyblob not null
+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 'not null ) returns tinyblob not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(blob not null f1 ) returns blob not null
+CREATE FUNCTION fn1(f1 blob not null ) returns blob not null
return f1;
-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 'blob not null f1 ) returns blob not null
+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 'not null ) returns blob not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(mediumblob not null f1 ) returns mediumblob not null
+CREATE FUNCTION fn1(f1 mediumblob not null ) returns mediumblob not null
return f1;
-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 'mediumblob not null f1 ) returns mediumblob not null
+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 'not null ) returns mediumblob not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(longblob not null f1 ) returns longblob not null
+CREATE FUNCTION fn1(f1 longblob not null ) returns longblob not null
return f1;
-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 'longblob not null f1 ) returns longblob not null
+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 'not null ) returns longblob not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(binary f1 ) returns binary
+CREATE FUNCTION fn1(f1 binary ) returns binary
return f1;
-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 'binary f1 ) returns binary
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(binary not null f1 ) returns binary not null
+CREATE FUNCTION fn1(f1 binary not null ) returns binary not null
return f1;
-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 'binary not null f1 ) returns binary not null
+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 'not null ) returns binary not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(tinyint f1 ) returns tinyint
+CREATE FUNCTION fn1(f1 tinyint ) returns tinyint
return f1;
-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 'tinyint f1 ) returns tinyint
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(tinyint unsigned f1 ) returns tinyint unsigned
+CREATE FUNCTION fn1(f1 tinyint unsigned ) returns tinyint unsigned
return f1;
-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 'tinyint unsigned f1 ) returns tinyint unsigned
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(tinyint zerofill f1 ) returns tinyint zerofill
+CREATE FUNCTION fn1(f1 tinyint zerofill ) returns tinyint zerofill
return f1;
-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 'tinyint zerofill f1 ) returns tinyint zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(tinyint unsigned zerofill f1 ) returns tinyint unsigned zerofill
+CREATE FUNCTION fn1(f1 tinyint unsigned zerofill ) returns tinyint unsigned zerofill
return f1;
-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 'tinyint unsigned zerofill f1 ) returns tinyint unsigned zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(smallint f1 ) returns smallint
+CREATE FUNCTION fn1(f1 smallint ) returns smallint
return f1;
-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 'smallint f1 ) returns smallint
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(smallint unsigned f1 ) returns smallint unsigned
+CREATE FUNCTION fn1(f1 smallint unsigned ) returns smallint unsigned
return f1;
-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 'smallint unsigned f1 ) returns smallint unsigned
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(smallint zerofill f1 ) returns smallint zerofill
+CREATE FUNCTION fn1(f1 smallint zerofill ) returns smallint zerofill
return f1;
-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 'smallint zerofill f1 ) returns smallint zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(smallint unsigned zerofill f1 ) returns smallint unsigned zerofill
+CREATE FUNCTION fn1(f1 smallint unsigned zerofill ) returns smallint unsigned zerofill
return f1;
-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 'smallint unsigned zerofill f1 ) returns smallint unsigned zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(mediumint f1 ) returns mediumint
+CREATE FUNCTION fn1(f1 mediumint ) returns mediumint
return f1;
-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 'mediumint f1 ) returns mediumint
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(mediumint unsigned f1 ) returns mediumint unsigned
+CREATE FUNCTION fn1(f1 mediumint unsigned ) returns mediumint unsigned
return f1;
-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 'mediumint unsigned f1 ) returns mediumint unsigned
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(mediumint zerofill f1 ) returns mediumint zerofill
+CREATE FUNCTION fn1(f1 mediumint zerofill ) returns mediumint zerofill
return f1;
-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 'mediumint zerofill f1 ) returns mediumint zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(mediumint unsigned zerofill f1 ) returns mediumint unsigned zerofill
+CREATE FUNCTION fn1(f1 mediumint unsigned zerofill ) returns mediumint unsigned zerofill
return f1;
-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 'mediumint unsigned zerofill f1 ) returns mediumint unsigned zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(int f1 ) returns int
+CREATE FUNCTION fn1(f1 int ) returns int
return f1;
-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 'int f1 ) returns int
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(int unsigned f1 ) returns int unsigned
+CREATE FUNCTION fn1(f1 int unsigned ) returns int unsigned
return f1;
-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 'int unsigned f1 ) returns int unsigned
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(int zerofill f1 ) returns int zerofill
+CREATE FUNCTION fn1(f1 int1 unsigned ) returns int1 unsigned
return f1;
-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 'int zerofill f1 ) returns int zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(int unsigned zerofill f1 ) returns int unsigned zerofill
+CREATE FUNCTION fn1(f1 int2 unsigned ) returns int2 unsigned
return f1;
-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 'int unsigned zerofill f1 ) returns int unsigned zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(bigint f1 ) returns bigint
+CREATE FUNCTION fn1(f1 int3 unsigned ) returns int3 unsigned
return f1;
-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 'bigint f1 ) returns bigint
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(bigint unsigned f1 ) returns bigint unsigned
+CREATE FUNCTION fn1(f1 int4 unsigned ) returns int4 unsigned
return f1;
-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 'bigint unsigned f1 ) returns bigint unsigned
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(bigint zerofill f1 ) returns bigint zerofill
+CREATE FUNCTION fn1(f1 int8 unsigned ) returns int8 unsigned
return f1;
-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 'bigint zerofill f1 ) returns bigint zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(bigint unsigned zerofill f1 ) returns bigint unsigned zerofill
+CREATE FUNCTION fn1(f1 int zerofill ) returns int zerofill
return f1;
-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 'bigint unsigned zerofill f1 ) returns bigint unsigned zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(decimal f1 ) returns decimal
+CREATE FUNCTION fn1(f1 int unsigned zerofill ) returns int unsigned zerofill
return f1;
-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 'decimal f1 ) returns decimal
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(decimal unsigned f1 ) returns decimal unsigned
+CREATE FUNCTION fn1(f1 bigint ) returns bigint
return f1;
-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 'decimal unsigned f1 ) returns decimal unsigned
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(decimal zerofill f1 ) returns decimal zerofill
+CREATE FUNCTION fn1(f1 bigint unsigned ) returns bigint unsigned
return f1;
-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 'decimal zerofill f1 ) returns decimal zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(decimal unsigned zerofill f1 ) returns decimal unsigned zerofill
+CREATE FUNCTION fn1(f1 bigint zerofill ) returns bigint zerofill
return f1;
-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 'decimal unsigned zerofill f1 ) returns decimal unsigned zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(numeric f1 ) returns numeric
+CREATE FUNCTION fn1(f1 bigint unsigned zerofill ) returns bigint unsigned zerofill
return f1;
-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 'numeric f1 ) returns numeric
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(numeric unsigned f1 ) returns numeric unsigned
+CREATE FUNCTION fn1(f1 decimal ) returns decimal
return f1;
-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 'numeric unsigned f1 ) returns numeric unsigned
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(numeric zerofill f1 ) returns numeric zerofill
+CREATE FUNCTION fn1(f1 decimal unsigned ) returns decimal unsigned
return f1;
-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 'numeric zerofill f1 ) returns numeric zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(numeric unsigned zerofill f1 ) returns numeric unsigned zerofill
+CREATE FUNCTION fn1(f1 decimal zerofill ) returns decimal zerofill
return f1;
-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 'numeric unsigned zerofill f1 ) returns numeric unsigned zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(real f1 ) returns real
+CREATE FUNCTION fn1(f1 decimal unsigned zerofill ) returns decimal unsigned zerofill
return f1;
-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 'real f1 ) returns real
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(real unsigned f1 ) returns real unsigned
+CREATE FUNCTION fn1(f1 numeric ) returns numeric
return f1;
-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 'real unsigned f1 ) returns real unsigned
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(real zerofill f1 ) returns real zerofill
+CREATE FUNCTION fn1(f1 numeric unsigned ) returns numeric unsigned
return f1;
-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 'real zerofill f1 ) returns real zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(real unsigned zerofill f1 ) returns real unsigned zerofill
+CREATE FUNCTION fn1(f1 numeric zerofill ) returns numeric zerofill
return f1;
-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 'real unsigned zerofill f1 ) returns real unsigned zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(float f1 ) returns float
+CREATE FUNCTION fn1(f1 numeric unsigned zerofill ) returns numeric unsigned zerofill
return f1;
-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 'float f1 ) returns float
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(float unsigned f1 ) returns float unsigned
+CREATE FUNCTION fn1(f1 real ) returns real
return f1;
-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 'float unsigned f1 ) returns float unsigned
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(float zerofill f1 ) returns float zerofill
+CREATE FUNCTION fn1(f1 real unsigned ) returns real unsigned
return f1;
-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 'float zerofill f1 ) returns float zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(float unsigned zerofill f1 ) returns float unsigned zerofill
+CREATE FUNCTION fn1(f1 real zerofill ) returns real zerofill
return f1;
-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 'float unsigned zerofill f1 ) returns float unsigned zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(date f1 ) returns date
+CREATE FUNCTION fn1(f1 real unsigned zerofill ) returns real unsigned zerofill
return f1;
-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 'f1 ) returns date
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(time f1 ) returns time
+CREATE FUNCTION fn1(f1 float ) returns float
return f1;
-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 'f1 ) returns time
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(datetime f1 ) returns datetime
+CREATE FUNCTION fn1(f1 float unsigned ) returns float unsigned
return f1;
-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 'f1 ) returns datetime
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(timestamp f1 ) returns timestamp
+CREATE FUNCTION fn1(f1 float zerofill ) returns float zerofill
return f1;
-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 'f1 ) returns timestamp
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(year f1 ) returns year
+CREATE FUNCTION fn1(f1 float unsigned zerofill ) returns float unsigned zerofill
return f1;
-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 'f1 ) returns year
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(year(3) f1 ) returns year(3)
+CREATE FUNCTION fn1(f1 date ) returns date
+return f1;
+DROP FUNCTION IF EXISTS fn1;
+CREATE FUNCTION fn1(f1 time ) returns time
return f1;
-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 '(3) f1 ) returns year(3)
+DROP FUNCTION IF EXISTS fn1;
+CREATE FUNCTION fn1(f1 datetime ) returns datetime
+return f1;
+DROP FUNCTION IF EXISTS fn1;
+CREATE FUNCTION fn1(f1 timestamp ) returns timestamp
+return f1;
+DROP FUNCTION IF EXISTS fn1;
+CREATE FUNCTION fn1(f1 year ) returns year
+return f1;
+DROP FUNCTION IF EXISTS fn1;
+CREATE FUNCTION fn1(f1 year(f1 3) ) returns year(3)
+return f1;
+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 'f1 3) ) returns year(3)
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(year(4) f1 ) returns year(4)
+CREATE FUNCTION fn1(f1 year(f1 4) ) returns year(4)
return f1;
-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 '(4) f1 ) returns year(4)
+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 'f1 4) ) returns year(4)
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(enum("1enum", "2enum") f1 ) returns enum("1enum", "2enum")
+CREATE FUNCTION fn1(f1 enum(f1 "1enum", "2enum") ) returns enum("1enum", "2enum")
return f1;
-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 '("1enum", "2enum") f1 ) returns enum("1enum", "2enum")
+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 'f1 "1enum", "2enum") ) returns enum("1enum", "2enum")
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(set("1set", "2set") f1 ) returns set("1set", "2set")
+CREATE FUNCTION fn1(f1 set(f1 "1set", "2set") ) returns set("1set", "2set")
return f1;
-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("1set", "2set") f1 ) returns set("1set", "2set")
+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 'f1 "1set", "2set") ) returns set("1set", "2set")
return f1' at line 1
Testcase 4.1.16:
@@ -2564,15 +3404,15 @@ alter function sp1 sql security invoker comment 'this is a function';
alter procedure sp1 sql security definer;
alter function sp1 sql security definer;
show CREATE PROCEDURE sp1;
-Procedure sql_mode Create Procedure
-sp1 CREATE PROCEDURE `sp1`()
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp1 CREATE DEFINER=`root`@`localhost` PROCEDURE `sp1`()
COMMENT 'this is a procedure'
-set @x= 3
+set @x= 3 latin1 modified created
show CREATE FUNCTION sp1;
-Function sql_mode Create Function
-sp1 CREATE FUNCTION `sp1`() RETURNS int(11)
+Function sql_mode Create Function character_set_client collation_connection Database Collation
+sp1 CREATE DEFINER=`root`@`localhost` FUNCTION `sp1`() RETURNS int(11)
COMMENT 'this is a function'
-return 4
+return 4 latin1 modified created
USE db_storedproc;
DROP DATABASE db_storedproc_3122;
DROP FUNCTION db_storedproc.sp1;
@@ -2789,7 +3629,7 @@ SELECT count(*) into cnt from t2;
set @count = cnt;
SELECT @count;
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 'SELECT count(*) into cnt from t2;
+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 @count = cnt;
SELECT @count;
END' at line 2
@@ -2841,6 +3681,14 @@ Testcase ....:
--------------------------------------------------------------------------------
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
+accessible:BEGIN
+SELECT @x;
+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 'accessible:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
add:BEGIN
SELECT @x;
END//
@@ -2860,9 +3708,7 @@ CREATE PROCEDURE sp1()
alter:BEGIN
SELECT @x;
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 ':BEGIN
-SELECT @x;
-END' at line 2
+ERROR 0A000: ALTER VIEW is not allowed in stored procedures
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
analyze:BEGIN
@@ -2961,7 +3807,7 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
-CALL:BEGIN
+call:BEGIN
SELECT @x;
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 ':BEGIN
@@ -3033,11 +3879,6 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
-columns:BEGIN
-SELECT @x;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
condition:BEGIN
SELECT @x;
END//
@@ -3046,14 +3887,6 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
-connection:BEGIN
-SELECT @x;
-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 'connection:BEGIN
-SELECT @x;
-END' at line 2
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
constraint:BEGIN
SELECT @x;
END//
@@ -3382,15 +4215,26 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
-fields:BEGIN
+float:BEGIN
SELECT @x;
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 'float:BEGIN
+SELECT @x;
+END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
-float:BEGIN
+float4:BEGIN
SELECT @x;
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 'float:BEGIN
+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 'float4:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+float8:BEGIN
+SELECT @x;
+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 'float8:BEGIN
SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
@@ -3419,11 +4263,6 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
-found:BEGIN
-SELECT @x;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
from:BEGIN
SELECT @x;
END//
@@ -3440,11 +4279,6 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
-goto:BEGIN
-SELECT @x;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
grant:BEGIN
SELECT @x;
END//
@@ -3581,6 +4415,46 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
+int1:BEGIN
+SELECT @x;
+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 'int1:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+int2:BEGIN
+SELECT @x;
+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 'int2:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+int3:BEGIN
+SELECT @x;
+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 'int3:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+int4:BEGIN
+SELECT @x;
+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 'int4:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+int8:BEGIN
+SELECT @x;
+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 'int8:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
integer:BEGIN
SELECT @x;
END//
@@ -3693,6 +4567,14 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
+linear:BEGIN
+SELECT @x;
+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 'linear:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
lines:BEGIN
SELECT @x;
END//
@@ -3773,6 +4655,14 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
+master_ssl_verify_server_cert:BEGIN
+SELECT @x;
+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 'master_ssl_verify_server_cert:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
match:BEGIN
SELECT @x;
END//
@@ -3973,11 +4863,6 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
-privileges:BEGIN
-SELECT @x;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
procedure:BEGIN
SELECT @x;
END//
@@ -3994,6 +4879,14 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
+range:BEGIN
+SELECT @x;
+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 'range:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
read:BEGIN
SELECT @x;
END//
@@ -4010,6 +4903,22 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
+read_only:BEGIN
+SELECT @x;
+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 'read_only:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+read_write:BEGIN
+SELECT @x;
+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 'read_write:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
real:BEGIN
SELECT @x;
END//
@@ -4034,6 +4943,14 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
+release:BEGIN
+SELECT @x;
+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 ':BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
rename:BEGIN
SELECT @x;
END//
@@ -4178,14 +5095,6 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
-soname:BEGIN
-SELECT @x;
-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 'soname:BEGIN
-SELECT @x;
-END' at line 2
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
spatial:BEGIN
SELECT @x;
END//
@@ -4290,11 +5199,6 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
-tables:BEGIN
-SELECT @x;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
terminated:BEGIN
SELECT @x;
END//
@@ -4587,6 +5491,9 @@ END begin_label//
CALL sp1();
@v1 @v2
1 2
+Warnings:
+Warning 1265 Data truncated for column 'x' at row 1
+Warning 1265 Data truncated for column 'y' at row 1
DROP PROCEDURE sp1;
Testcase 4.2.7:
@@ -4621,6 +5528,9 @@ declare y char;
SELECT f1, f2 into x, y from t2 limit 1;
END//
CALL sp1();
+Warnings:
+Warning 1265 Data truncated for column 'x' at row 1
+Warning 1265 Data truncated for column 'y' at row 1
DROP PROCEDURE sp1;
Testcase 4.2.9:
@@ -4684,8 +5594,6 @@ Ensure that the variables, cursors, conditions, and handlers declared for
a stored procedure (with the declare statement) may only be properly defined
--------------------------------------------------------------------------------
DROP PROCEDURE IF EXISTS sp6;
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed: DECIMAL(255,255) is not rejected
CREATE PROCEDURE sp6( )
BEGIN
declare x char default 'a';
@@ -4703,9 +5611,9 @@ fetch cur1 into e;
SELECT x, y, z, a, b, c, d, e;
close cur1;
END//
+ERROR 42000: Too big scale 255 specified for column ''. Maximum is 30.
CALL sp6();
-x y z a b c d e
-a 1 1.1 value1 1200000000000 mediumtext 2005-02-02 12:12:12 a`
+ERROR 42000: PROCEDURE db_storedproc.sp6 does not exist
DROP PROCEDURE IF EXISTS sp6;
CREATE PROCEDURE sp6( )
BEGIN
@@ -5828,13 +6736,6 @@ declare continue handler for sqlstate '23000' set @x2 = 1;
declare x char;
END//
ERROR 42000: Variable or condition declaration after cursor or handler declaration
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
-BEGIN
-declare continue handler for sqlstate '23000' set @x2 = 1;
-declare x char;
-END//
-ERROR 42000: Variable or condition declaration after cursor or handler declaration
DROP PROCEDURE IF EXISTS sp6;
CREATE PROCEDURE sp6( )
BEGIN
@@ -5864,6 +6765,15 @@ Ensure that the declare statement can declare multiple variables both separately
and all at once from a variable list. (multiple declaration)
--------------------------------------------------------------------------------
DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
+DECLARE x1 CHAR(100) DEFAULT 'outer';
+BEGIN
+DECLARE x1 CHAR(100) DEFAULT x1;
+END;
+END//
+CALL sp1();
+DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
declare x, y, z char default null;
@@ -5988,7 +6898,11 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
--1 -1 -1
+000 000 000
+Warnings:
+Warning 1264 Out of range value for column 'x' at row 1
+Warning 1264 Out of range value for column 'y' at row 1
+Warning 1264 Out of range value for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -5997,7 +6911,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1 1 1
+001 001 001
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6024,7 +6938,11 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
--1 -1 -1
+00000 00000 00000
+Warnings:
+Warning 1264 Out of range value for column 'x' at row 1
+Warning 1264 Out of range value for column 'y' at row 1
+Warning 1264 Out of range value for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6033,7 +6951,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1 1 1
+00001 00001 00001
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6060,7 +6978,11 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
--1 -1 -1
+00000000 00000000 00000000
+Warnings:
+Warning 1264 Out of range value for column 'x' at row 1
+Warning 1264 Out of range value for column 'y' at row 1
+Warning 1264 Out of range value for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6069,7 +6991,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1 1 1
+00000001 00000001 00000001
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6096,7 +7018,11 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
--1 -1 -1
+0000000000 0000000000 0000000000
+Warnings:
+Warning 1264 Out of range value for column 'x' at row 1
+Warning 1264 Out of range value for column 'y' at row 1
+Warning 1264 Out of range value for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6105,7 +7031,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1 1 1
+0000000001 0000000001 0000000001
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6123,7 +7049,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
--1 -1 -1
+18446744073709551615 18446744073709551615 18446744073709551615
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6132,7 +7058,11 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
--1 -1 -1
+00000000000000000000 00000000000000000000 00000000000000000000
+Warnings:
+Warning 1264 Out of range value for column 'x' at row 1
+Warning 1264 Out of range value for column 'y' at row 1
+Warning 1264 Out of range value for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6141,7 +7071,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1 1 1
+00000000000000000001 00000000000000000001 00000000000000000001
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6150,18 +7080,24 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
--34028234660123456789012345678901234567 -34028234660123456789012345678901234567 -34028234660123456789012345678901234567
+-9999999999 -9999999999 -9999999999
+Warnings:
+Warning 1264 Out of range value for column 'x' at row 1
+Warning 1264 Out of range value for column 'y' at row 1
+Warning 1264 Out of range value for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
declare x, y, z decimal unsigned default 1.175494351e-38;
SELECT x, y, z;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed: default (10,0) for DECIMAL not checked
CALL sp1();
x y z
-0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351
+0 0 0
+Warnings:
+Note 1265 Data truncated for column 'x' at row 1
+Note 1265 Data truncated for column 'y' at row 1
+Note 1265 Data truncated for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6170,62 +7106,76 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
--34028234660123456789012345678901234567 -34028234660123456789012345678901234567 -34028234660123456789012345678901234567
+0000000000 0000000000 0000000000
+Warnings:
+Warning 1264 Out of range value for column 'x' at row 1
+Warning 1264 Out of range value for column 'y' at row 1
+Warning 1264 Out of range value for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
declare x, y, z decimal unsigned zerofill default 1.175494351e-38;
SELECT x, y, z;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed: default (10,0) for DECIMAL not checked
CALL sp1();
x y z
-0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351
+0000000000 0000000000 0000000000
+Warnings:
+Note 1265 Data truncated for column 'x' at row 1
+Note 1265 Data truncated for column 'y' at row 1
+Note 1265 Data truncated for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
declare x, y, z numeric default 1.175494351e-38;
SELECT x, y, z;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed: default (10,0) for DECIMAL not checked
CALL sp1();
x y z
-0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351
+0 0 0
+Warnings:
+Note 1265 Data truncated for column 'x' at row 1
+Note 1265 Data truncated for column 'y' at row 1
+Note 1265 Data truncated for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
declare x, y, z numeric unsigned default 1.175494351e-38;
SELECT x, y, z;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed: default (10,0) for DECIMAL not checked
CALL sp1();
x y z
-0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351
+0 0 0
+Warnings:
+Note 1265 Data truncated for column 'x' at row 1
+Note 1265 Data truncated for column 'y' at row 1
+Note 1265 Data truncated for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
declare x, y, z numeric zerofill default 1.175494351e-38;
SELECT x, y, z;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed: default (10,0) for DECIMAL not checked
CALL sp1();
x y z
-0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351
+0000000000 0000000000 0000000000
+Warnings:
+Note 1265 Data truncated for column 'x' at row 1
+Note 1265 Data truncated for column 'y' at row 1
+Note 1265 Data truncated for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
declare x, y, z numeric unsigned zerofill default 1.175494351e-38;
SELECT x, y, z;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed: default (10,0) for DECIMAL not checked
CALL sp1();
x y z
-0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351
+0000000000 0000000000 0000000000
+Warnings:
+Note 1265 Data truncated for column 'x' at row 1
+Note 1265 Data truncated for column 'y' at row 1
+Note 1265 Data truncated for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6252,7 +7202,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1.175494351e-38 1.175494351e-38 1.175494351e-38
+00000001.175494351e-38 00000001.175494351e-38 00000001.175494351e-38
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6261,7 +7211,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1.175494351e-38 1.175494351e-38 1.175494351e-38
+00000001.175494351e-38 00000001.175494351e-38 00000001.175494351e-38
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6270,7 +7220,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1.175494351e-38 1.175494351e-38 1.175494351e-38
+1.17549e-38 1.17549e-38 1.17549e-38
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6279,7 +7229,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1.175494351e-38 1.175494351e-38 1.175494351e-38
+1.17549e-38 1.17549e-38 1.17549e-38
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6288,7 +7238,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1.175494351e-38 1.175494351e-38 1.175494351e-38
+01.17549e-38 01.17549e-38 01.17549e-38
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6297,7 +7247,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1.175494351e-38 1.175494351e-38 1.175494351e-38
+01.17549e-38 01.17549e-38 01.17549e-38
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6333,7 +7283,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-20050202122012 20050202122012 20050202122012
+2005-02-02 12:20:12 2005-02-02 12:20:12 2005-02-02 12:20:12
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6419,6 +7369,13 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
+declare accessible char;
+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 'accessible char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
declare add char;
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 'add char;
@@ -6524,9 +7481,9 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
-declare CALL char;
+declare call char;
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 'CALL char;
+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 'call char;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
@@ -6587,11 +7544,6 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
-declare columns char;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
-BEGIN
declare condition char;
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 'condition char;
@@ -6599,13 +7551,6 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
-declare connection char;
-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 'connection char;
-END' at line 3
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
-BEGIN
declare constraint char;
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 'constraint char;
@@ -6893,14 +7838,23 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
-declare fields char;
+declare float char;
+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 'float char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
+declare float4 char;
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 'float4 char;
+END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
-declare float char;
+declare float8 char;
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 'float char;
+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 'float8 char;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
@@ -6926,11 +7880,6 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
-declare found char;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
-BEGIN
declare from char;
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 'from char;
@@ -6945,11 +7894,6 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
-declare goto char;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
-BEGIN
declare grant char;
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 'grant char;
@@ -7069,6 +8013,41 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
+declare int1 char;
+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 'int1 char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
+declare int2 char;
+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 'int2 char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
+declare int3 char;
+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 'int3 char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
+declare int4 char;
+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 'int4 char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
+declare int8 char;
+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 'int8 char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
declare integer char;
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 'integer char;
@@ -7167,6 +8146,13 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
+declare linear char;
+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 'linear char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
declare lines char;
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 'lines char;
@@ -7237,6 +8223,13 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
+declare master_ssl_verify_server_cert char;
+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 'master_ssl_verify_server_cert char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
declare match char;
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 'match char;
@@ -7412,11 +8405,6 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
-declare privileges char;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
-BEGIN
declare procedure char;
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 'procedure char;
@@ -7431,6 +8419,13 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
+declare range char;
+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 'range char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
declare read char;
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 'read char;
@@ -7445,6 +8440,18 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
+declare read_only char;
+END//
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
+declare read_write char;
+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 'read_write char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
declare real char;
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 'real char;
@@ -7466,6 +8473,13 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
+declare release char;
+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 'release char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
declare rename char;
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 'rename char;
@@ -7624,15 +8638,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1()
BEGIN
-declare soname char;
-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 'soname char;
-END' at line 3
-DROP PROCEDURE IF EXISTS sp1;
-Warnings:
-Note 1305 PROCEDURE sp1 does not exist
-CREATE PROCEDURE sp1()
-BEGIN
declare spatial char;
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 'spatial char;
@@ -7750,11 +8755,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1()
BEGIN
-declare tables char;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
-BEGIN
declare terminated char;
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 'terminated char;
@@ -7899,9 +8899,9 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1()
BEGIN
-declare USE char;
+declare use char;
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 'USE char;
+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 'use char;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
@@ -8150,6 +9150,16 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare accessible condition for sqlstate '02000';
+declare exit handler for add set @var2 = 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 'accessible condition for sqlstate '02000';
+declare exit handler for add set @var' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare add condition for sqlstate '02000';
declare exit handler for add set @var2 = 1;
END//
@@ -8306,10 +9316,10 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare CALL condition for sqlstate '02000';
+declare call condition for sqlstate '02000';
declare exit handler for CALL set @var2 = 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 'CALL condition for sqlstate '02000';
+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 'call condition for sqlstate '02000';
declare exit handler for CALL set @var2 = 1' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
@@ -8409,11 +9419,7 @@ BEGIN
declare connection condition for sqlstate '02000';
declare exit handler for connection set @var2 = 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 'connection condition for sqlstate '02000';
-declare exit handler for connection s' at line 3
DROP PROCEDURE IF EXISTS sp1;
-Warnings:
-Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
declare constraint condition for sqlstate '02000';
@@ -8829,12 +9835,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare fields condition for sqlstate '02000';
-declare exit handler for fields set @var2 = 1;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1( )
-BEGIN
declare float condition for sqlstate '02000';
declare exit handler for float set @var2 = 1;
END//
@@ -8845,6 +9845,26 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare float4 condition for sqlstate '02000';
+declare exit handler for add set @var2 = 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 'float4 condition for sqlstate '02000';
+declare exit handler for add set @var2 = ' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare float8 condition for sqlstate '02000';
+declare exit handler for add set @var2 = 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 'float8 condition for sqlstate '02000';
+declare exit handler for add set @var2 = ' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare for condition for sqlstate '02000';
declare exit handler for for set @var2 = 1;
END//
@@ -8876,12 +9896,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare found condition for sqlstate '02000';
-declare exit handler for found set @var2 = 1;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1( )
-BEGIN
declare from condition for sqlstate '02000';
declare exit handler for from set @var2 = 1;
END//
@@ -8902,12 +9916,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare goto condition for sqlstate '02000';
-declare exit handler for goto set @var2 = 1;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1( )
-BEGIN
declare grant condition for sqlstate '02000';
declare exit handler for grant set @var2 = 1;
END//
@@ -9081,6 +10089,56 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare int1 condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'int1 condition for sqlstate '02000';
+declare exit handler for int set @var2 = 1;' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare int2 condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'int2 condition for sqlstate '02000';
+declare exit handler for int set @var2 = 1;' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare int3 condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'int3 condition for sqlstate '02000';
+declare exit handler for int set @var2 = 1;' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare int4 condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'int4 condition for sqlstate '02000';
+declare exit handler for int set @var2 = 1;' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare int8 condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'int8 condition for sqlstate '02000';
+declare exit handler for int set @var2 = 1;' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare integer condition for sqlstate '02000';
declare exit handler for integer set @var2 = 1;
END//
@@ -9223,6 +10281,16 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare linear condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'linear condition for sqlstate '02000';
+declare exit handler for int set @var2 = ' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare lines condition for sqlstate '02000';
declare exit handler for lines set @var2 = 1;
END//
@@ -9323,6 +10391,16 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare master_ssl_verify_server_cert condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'master_ssl_verify_server_cert condition for sqlstate '02000';
+declare exit handl' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare match condition for sqlstate '02000';
declare exit handler for match set @var2 = 1;
END//
@@ -9578,12 +10656,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare privileges condition for sqlstate '02000';
-declare exit handler for privileges set @var2 = 1;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1( )
-BEGIN
declare procedure condition for sqlstate '02000';
declare exit handler for procedure set @var2 = 1;
END//
@@ -9604,6 +10676,16 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare range condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'range condition for sqlstate '02000';
+declare exit handler for int set @var2 = 1' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare read condition for sqlstate '02000';
declare exit handler for read set @var2 = 1;
END//
@@ -9624,6 +10706,26 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare read_only condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'int set @var2 = 1;
+END' at line 4
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare read_write condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'read_write condition for sqlstate '02000';
+declare exit handler for int set @var' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare real condition for sqlstate '02000';
declare exit handler for real set @var2 = 1;
END//
@@ -9654,6 +10756,16 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare release condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'release condition for sqlstate '02000';
+declare exit handler for int set @var2 =' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare rename condition for sqlstate '02000';
declare exit handler for rename set @var2 = 1;
END//
@@ -9774,10 +10886,10 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare SELECT condition for sqlstate '02000';
+declare select condition for sqlstate '02000';
declare exit handler for SELECT set @var2 = 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 'SELECT condition for sqlstate '02000';
+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 'select condition for sqlstate '02000';
declare exit handler for SELECT set @var2' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
@@ -9835,16 +10947,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare soname condition for sqlstate '02000';
-declare exit handler for soname set @var2 = 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 'soname condition for sqlstate '02000';
-declare exit handler for soname set @var2' at line 3
-DROP PROCEDURE IF EXISTS sp1;
-Warnings:
-Note 1305 PROCEDURE sp1 does not exist
-CREATE PROCEDURE sp1( )
-BEGIN
declare spatial condition for sqlstate '02000';
declare exit handler for spatial set @var2 = 1;
END//
@@ -9977,12 +11079,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare tables condition for sqlstate '02000';
-declare exit handler for tables set @var2 = 1;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1( )
-BEGIN
declare terminated condition for sqlstate '02000';
declare exit handler for terminated set @var2 = 1;
END//
@@ -10144,10 +11240,10 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare USE condition for sqlstate '02000';
+declare use condition for sqlstate '02000';
declare exit handler for USE set @var2 = 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 'USE condition for sqlstate '02000';
+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 'use condition for sqlstate '02000';
declare exit handler for USE set @var2 = 1;
' at line 3
DROP PROCEDURE IF EXISTS sp1;
@@ -10409,6 +11505,15 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare accessible handler for sqlstate '02000' set @var2 = 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 'accessible handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare add handler for sqlstate '02000' set @var2 = 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 'add handler for sqlstate '02000' set @var2 = 1;
@@ -10544,9 +11649,9 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare CALL handler for sqlstate '02000' set @var2 = 1;
+declare call handler for sqlstate '02000' set @var2 = 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 'CALL handler for sqlstate '02000' set @var2 = 1;
+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 'call handler for sqlstate '02000' set @var2 = 1;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
@@ -10625,15 +11730,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare columns handler for sqlstate '02000' set @var2 = 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 'handler for sqlstate '02000' set @var2 = 1;
-END' at line 3
-DROP PROCEDURE IF EXISTS sp1;
-Warnings:
-Note 1305 PROCEDURE sp1 does not exist
-CREATE PROCEDURE sp1( )
-BEGIN
declare condition handler for sqlstate '02000' set @var2 = 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 'condition handler for sqlstate '02000' set @var2 = 1;
@@ -10643,22 +11739,18 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare connection handler for sqlstate '02000' set @var2 = 1;
+declare constraint handler for sqlstate '02000' set @var2 = 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 'connection handler for sqlstate '02000' set @var2 = 1;
+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 'constraint handler for sqlstate '02000' set @var2 = 1;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare constraint handler for sqlstate '02000' set @var2 = 1;
+declare continue handler for sqlstate '02000' set @var2 = 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 'constraint handler for sqlstate '02000' set @var2 = 1;
-END' at line 3
DROP PROCEDURE IF EXISTS sp1;
-Warnings:
-Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
declare convert handler for sqlstate '02000' set @var2 = 1;
@@ -10976,6 +12068,11 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare exit handler for sqlstate '02000' set @var2 = 1;
+END//
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1( )
+BEGIN
declare explain handler for sqlstate '02000' set @var2 = 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 'explain handler for sqlstate '02000' set @var2 = 1;
@@ -11003,54 +12100,54 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare fields handler for sqlstate '02000' set @var2 = 1;
+declare float handler for sqlstate '02000' set @var2 = 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 'handler for sqlstate '02000' set @var2 = 1;
+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 'float handler for sqlstate '02000' set @var2 = 1;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare float handler for sqlstate '02000' set @var2 = 1;
+declare float4 handler for sqlstate '02000' set @var2 = 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 'float handler for sqlstate '02000' set @var2 = 1;
+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 'float4 handler for sqlstate '02000' set @var2 = 1;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare for handler for sqlstate '02000' set @var2 = 1;
+declare float8 handler for sqlstate '02000' set @var2 = 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 'for handler for sqlstate '02000' set @var2 = 1;
+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 'float8 handler for sqlstate '02000' set @var2 = 1;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare force handler for sqlstate '02000' set @var2 = 1;
+declare for handler for sqlstate '02000' set @var2 = 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 'force handler for sqlstate '02000' set @var2 = 1;
+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 'for handler for sqlstate '02000' set @var2 = 1;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare foreign handler for sqlstate '02000' set @var2 = 1;
+declare force handler for sqlstate '02000' set @var2 = 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 'foreign handler for sqlstate '02000' set @var2 = 1;
+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 'force handler for sqlstate '02000' set @var2 = 1;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare found handler for sqlstate '02000' set @var2 = 1;
+declare foreign handler for sqlstate '02000' set @var2 = 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 'handler for sqlstate '02000' set @var2 = 1;
+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 'foreign handler for sqlstate '02000' set @var2 = 1;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
@@ -11075,15 +12172,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare goto handler for sqlstate '02000' set @var2 = 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 'handler for sqlstate '02000' set @var2 = 1;
-END' at line 3
-DROP PROCEDURE IF EXISTS sp1;
-Warnings:
-Note 1305 PROCEDURE sp1 does not exist
-CREATE PROCEDURE sp1( )
-BEGIN
declare grant handler for sqlstate '02000' set @var2 = 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 'grant handler for sqlstate '02000' set @var2 = 1;
@@ -11237,6 +12325,51 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare int1 handler for sqlstate '02000' set @var2 = 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 'int1 handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare int2 handler for sqlstate '02000' set @var2 = 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 'int2 handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare int3 handler for sqlstate '02000' set @var2 = 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 'int3 handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare int4 handler for sqlstate '02000' set @var2 = 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 'int4 handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare int8 handler for sqlstate '02000' set @var2 = 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 'int8 handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare integer handler for sqlstate '02000' set @var2 = 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 'integer handler for sqlstate '02000' set @var2 = 1;
@@ -11363,6 +12496,15 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare linear handler for sqlstate '02000' set @var2 = 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 'linear handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare lines handler for sqlstate '02000' set @var2 = 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 'lines handler for sqlstate '02000' set @var2 = 1;
@@ -11453,6 +12595,15 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare master_ssl_verify_server_cert handler for sqlstate '02000' set @var2 = 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 'master_ssl_verify_server_cert handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare match handler for sqlstate '02000' set @var2 = 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 'match handler for sqlstate '02000' set @var2 = 1;
@@ -11705,6 +12856,15 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare range handler for sqlstate '02000' set @var2 = 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 'range handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare read handler for sqlstate '02000' set @var2 = 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 'read handler for sqlstate '02000' set @var2 = 1;
@@ -11723,6 +12883,24 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare read_only handler for sqlstate '02000' set @var2 = 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 'handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare read_write handler for sqlstate '02000' set @var2 = 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 'read_write handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare real handler for sqlstate '02000' set @var2 = 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 'real handler for sqlstate '02000' set @var2 = 1;
@@ -11750,6 +12928,15 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare release handler for sqlstate '02000' set @var2 = 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 'release handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare rename handler for sqlstate '02000' set @var2 = 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 'rename handler for sqlstate '02000' set @var2 = 1;
@@ -11858,9 +13045,9 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare SELECT handler for sqlstate '02000' set @var2 = 1;
+declare select handler for sqlstate '02000' set @var2 = 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 'SELECT handler for sqlstate '02000' set @var2 = 1;
+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 'select handler for sqlstate '02000' set @var2 = 1;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
@@ -11912,15 +13099,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare soname handler for sqlstate '02000' set @var2 = 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 'soname handler for sqlstate '02000' set @var2 = 1;
-END' at line 3
-DROP PROCEDURE IF EXISTS sp1;
-Warnings:
-Note 1305 PROCEDURE sp1 does not exist
-CREATE PROCEDURE sp1( )
-BEGIN
declare spatial handler for sqlstate '02000' set @var2 = 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 'spatial handler for sqlstate '02000' set @var2 = 1;
@@ -12038,15 +13216,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare tables handler for sqlstate '02000' set @var2 = 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 'handler for sqlstate '02000' set @var2 = 1;
-END' at line 3
-DROP PROCEDURE IF EXISTS sp1;
-Warnings:
-Note 1305 PROCEDURE sp1 does not exist
-CREATE PROCEDURE sp1( )
-BEGIN
declare terminated handler for sqlstate '02000' set @var2 = 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 'terminated handler for sqlstate '02000' set @var2 = 1;
@@ -12191,9 +13360,9 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare USE handler for sqlstate '02000' set @var2 = 1;
+declare use handler for sqlstate '02000' set @var2 = 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 'USE handler for sqlstate '02000' set @var2 = 1;
+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 'use handler for sqlstate '02000' set @var2 = 1;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
@@ -12384,10 +13553,13 @@ set @v2 = y;
END//
CALL sp1();
x y @x
-NULL abaa 3
+NULL a 3
+Warnings:
+Warning 1265 Data truncated for column 'y' at row 3
+Warning 1265 Data truncated for column 'y' at row 1
SELECT @v1, @v2;
@v1 @v2
-4 a`
+4 a
DROP PROCEDURE sp1;
Testcase 4.2.28:
@@ -12454,7 +13626,7 @@ CALL sp1();
@xx
0
Warnings:
-Warning 1292 Truncated incorrect INTEGER value: 'asd'
+Warning 1366 Incorrect integer value: 'asd' for column 'xx' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12481,9 +13653,11 @@ set xx = 'temp';
set @xx = xx;
END//
CALL sp1();
+Warnings:
+Warning 1265 Data truncated for column 'xx' at row 1
SELECT @xx;
@xx
-temp
+t
DROP PROCEDURE sp1;
Testcase 4.2.31 - b:
@@ -12501,7 +13675,7 @@ CALL sp1();
xx
0
Warnings:
-Warning 1292 Truncated incorrect DOUBLE value: 'asd'
+Warning 1265 Data truncated for column 'xx' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12527,7 +13701,9 @@ SELECT xx;
END//
CALL sp1();
xx
-asd
+0000-00-00 00:00:00
+Warnings:
+Warning 1264 Out of range value for column 'xx' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12571,7 +13747,7 @@ CALL sp1();
xx
0
Warnings:
-Warning 1292 Truncated incorrect INTEGER value: 'asd'
+Warning 1366 Incorrect integer value: 'asd' for column 'xx' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12602,6 +13778,8 @@ declare x char ascii;
SELECT f1 into x from t2 limit 1;
END//
CALL sp1();
+Warnings:
+Warning 1265 Data truncated for column 'x' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12665,6 +13843,8 @@ declare x binary;
SELECT f1 into x from t2 limit 1;
END//
CALL sp1();
+Warnings:
+Warning 1265 Data truncated for column 'x' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12812,8 +13992,6 @@ declare x decimal;
SELECT f1 into x from t2 limit 1;
END//
CALL sp1();
-Warnings:
-Error 1366 Incorrect decimal value: '' for column '' at row -1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12821,8 +13999,6 @@ declare x decimal unsigned;
SELECT f1 into x from t2 limit 1;
END//
CALL sp1();
-Warnings:
-Error 1366 Incorrect decimal value: '' for column '' at row -1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12830,8 +14006,6 @@ declare x decimal zerofill;
SELECT f1 into x from t2 limit 1;
END//
CALL sp1();
-Warnings:
-Error 1366 Incorrect decimal value: '' for column '' at row -1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12839,8 +14013,6 @@ declare x decimal unsigned zerofill;
SELECT f1 into x from t2 limit 1;
END//
CALL sp1();
-Warnings:
-Error 1366 Incorrect decimal value: '' for column '' at row -1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12848,8 +14020,6 @@ declare x numeric;
SELECT f1 into x from t2 limit 1;
END//
CALL sp1();
-Warnings:
-Error 1366 Incorrect decimal value: '' for column '' at row -1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12857,8 +14027,6 @@ declare x numeric unsigned;
SELECT f1 into x from t2 limit 1;
END//
CALL sp1();
-Warnings:
-Error 1366 Incorrect decimal value: '' for column '' at row -1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12866,8 +14034,6 @@ declare x numeric zerofill;
SELECT f1 into x from t2 limit 1;
END//
CALL sp1();
-Warnings:
-Error 1366 Incorrect decimal value: '' for column '' at row -1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12875,8 +14041,6 @@ declare x numeric unsigned zerofill;
SELECT f1 into x from t2 limit 1;
END//
CALL sp1();
-Warnings:
-Error 1366 Incorrect decimal value: '' for column '' at row -1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -13254,7 +14418,7 @@ declare continue handler for sqlstate '02000' set done = 1;
BEGIN
open cur1;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newlf1, newf3, newsal;
set count = count - 1;
END while;
@@ -13279,7 +14443,7 @@ declare continue handler for sqlstate '02000' set done = 1;
BEGIN
open cur1;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newlf1, newf3, newsal;
set count = count - 1;
END while;
@@ -13306,7 +14470,7 @@ declare continue handler for sqlstate '02000' set done = 1;
BEGIN
open cur1;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
set count = count - 1;
END while;
@@ -13330,7 +14494,7 @@ open cur1;
BEGIN
open cur1;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2, newf3, newf4;
set count = count - 1;
END while;
@@ -13358,7 +14522,7 @@ BEGIN
open cur1;
open cur1;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
set count = count - 1;
END while;
@@ -13388,7 +14552,7 @@ declare continue handler for sqlstate '02000' set done = 1;
BEGIN
open cur2;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
set count = count - 1;
END while;
@@ -13416,7 +14580,7 @@ declare cur1 cursor for SELECT f1, f2, f4, f5 from t2 limit 20, 10;
declare continue handler for sqlstate '02000' set done = 1;
BEGIN
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
set count = count - 1;
END while;
@@ -13430,7 +14594,7 @@ DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
declare done int default 0;
-declare count integer default 0;
+declare count integer default 10;
declare newf1 char(20);
declare newf2 char(20);
declare newf3 char(20);
@@ -13441,7 +14605,7 @@ open cur1;
BEGIN
declare cur1 cursor for SELECT f1, f2, f3, f4 from t2;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2, newf3, newf4;
set count = count - 1;
END while;
@@ -13473,7 +14637,7 @@ BEGIN
open cur1;
close cur1;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
set count = count - 1;
END while;
@@ -13485,7 +14649,7 @@ DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
declare done int default 0;
-declare count integer default 0;
+declare count integer default 20;
declare newf1 char(20);
declare newf2 char(20);
declare newf3 char(20);
@@ -13514,13 +14678,13 @@ BEGIN
declare done int default 0;
declare count integer default 20;
declare newf2 char(20);
-declare newf1 date;
+declare newf1 int1;
declare cur1 cursor for SELECT f1, f3 from t2 limit 20, 10;
declare continue handler for sqlstate '02000' set done = 1;
BEGIN
open cur1;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2;
set @x = newf1;
set @y = newf2;
@@ -13590,7 +14754,7 @@ BEGIN
close cur1;
open cur1;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
set count = count - 1;
END while;
@@ -13643,7 +14807,7 @@ fetch cur1 into newf1, newf2, newf4, newf3;
END;
END//
CALL sp1();
-ERROR 02000: No data to FETCH
+ERROR 02000: No data - zero rows fetched, selected, or processed
DROP PROCEDURE sp1;
Testcase 4.2.65:
@@ -13669,7 +14833,7 @@ commit;
END;
END//
CALL sp1();
-ERROR 02000: No data to FETCH
+ERROR 02000: No data - zero rows fetched, selected, or processed
DROP PROCEDURE sp1;
Testcase 4.2.66:
@@ -13690,7 +14854,7 @@ declare continue handler for sqlstate '02000' set done = 1;
BEGIN
open cur1;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
set count = count - 1;
END while;
@@ -13719,12 +14883,13 @@ declare cur1 cursor for SELECT f1, f2, f4, f5 from t2 limit 20, 10;
declare continue handler for sqlstate '02000' set done = 1;
BEGIN
open cur1;
-set count = count - 1;
-while count <> 0 do
+# set count = count - 1;
+# while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
-set count = count - 1;
-END while;
+# set count = count - 1;
+# END while;
END;
+fetch cur1 into newf1, newf2, newf4, newf3;
END//
CALL sp1();
DROP PROCEDURE sp1;
@@ -13756,7 +14921,7 @@ BEGIN
set count = 10;
BEGIN
open cur2;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
set count = count - 1;
END while;
@@ -13765,7 +14930,8 @@ insert into temp1 values(newf1, newf2, newf4, newf3);
close cur1;
END;
BEGIN
-while count <> 0 do
+set count = 10;
+while count > 0 do
fetch cur2 into newf21, newf22, newf24, newf23;
set count = count - 1;
END while;
@@ -13774,9 +14940,9 @@ insert into temp2 values(newf21, newf22, newf24, newf23);
close cur2;
END//
CALL sp1();
-SELECT * from temp1;
-f1 f2 f3 f4
-agaaaaaaa agaaaaaaa -4993 agaaaaaaa
+SELECT count(*) from temp1;
+count(*)
+1
SELECT * from temp2;
f1 f2 f3 f4
NULL NULL NULL NULL
@@ -13797,9 +14963,11 @@ CREATE TABLE res_t3_itisalongname_1381742_itsaverylongname_1381742(
middleinitial CHAR,
lastname VARCHAR(50),
age_averylongfieldname_averylongname_1234569 int,
-COMMENT TEXT) ENGINE=innodb;
+COMMENT TEXT) ENGINE=memory;
+ERROR 42000: The used table type doesn't support BLOB/TEXT columns
INSERT INTO res_t3_itisalongname_1381742_itsaverylongname_1381742
VALUES('a', 'aaaaaaaaaabbbbbbbbc', 0, 'default');
+ERROR 42S02: Table 'db_storedproc.res_t3_itisalongname_1381742_itsaverylongname_1381742' doesn't exist
CREATE PROCEDURE sp1(a int)
BEGIN
declare itisjustaverylargevariablename_xxxxxxxxxxxxxxxxxxxxx char;
@@ -13834,46 +15002,22 @@ iterate label1;
END loop label1;
END//
CALL sp1(101);
+ERROR 42S02: Table 'db_storedproc.res_t3_itisalongname_1381742_itsaverylongname_1381742' doesn't exist
CALL sp1(100);
+ERROR 42S02: Table 'db_storedproc.res_t3_itisalongname_1381742_itsaverylongname_1381742' doesn't exist
CALL sp1(75);
+ERROR 42S02: Table 'db_storedproc.res_t3_itisalongname_1381742_itsaverylongname_1381742' doesn't exist
CALL sp1(40);
+ERROR 42S02: Table 'db_storedproc.res_t3_itisalongname_1381742_itsaverylongname_1381742' doesn't exist
CALL sp1(20);
+ERROR 42S02: Table 'db_storedproc.res_t3_itisalongname_1381742_itsaverylongname_1381742' doesn't exist
CALL sp1(-1);
+ERROR 42S02: Table 'db_storedproc.res_t3_itisalongname_1381742_itsaverylongname_1381742' doesn't exist
SELECT * from res_t3_itisalongname_1381742_itsaverylongname_1381742
ORDER BY middleinitial, lastname, age_averylongfieldname_averylongname_1234569;
-middleinitial lastname age_averylongfieldname_averylongname_1234569 COMMENT
-a aaaaaaaaaabbbbbbbbc 0 default
-b oldmacdonalds)(*&(^^%$&^%$&^%*^)(*^#@$@% -1 -1 value of a is less than 50
-b oldmacdonalds)(*&(^^%$&^%$&^%*^)(*^#@$@% -1 -1 value of a is less than 50
-b oldmacdonalds)(*&(^^%$&^%$&^%*^)(*^#@$@% -1 -1 value of a is less than 50
-b oldmacdonalds)(*&(^^%$&^%$&^%*^)(*^#@$@% -1 -1 value of a is less than 50
-b oldmacdonalds)(*&(^^%$&^%$&^%*^)(*^#@$@% -1 -1 value of a is less than 50
-b oldmacdonalds)(*&(^^%$&^%$&^%*^)(*^#@$@% 100 100 value of a is 100
-b oldmacdonalds)(*&(^^%$&^%$&^%*^)(*^#@$@% 100 100 value of a is 100
-b oldmacdonalds)(*&(^^%$&^%$&^%*^)(*^#@$@% 100 100 value of a is 100
-b oldmacdonalds)(*&(^^%$&^%$&^%*^)(*^#@$@% 100 100 value of a is 100
-b oldmacdonalds)(*&(^^%$&^%$&^%*^)(*^#@$@% 100 100 value of a is 100
-b oldmacdonalds)(*&(^^%$&^%$&^%*^)(*^#@$@% 101 101 value of a is greater than 100
-b oldmacdonalds)(*&(^^%$&^%$&^%*^)(*^#@$@% 101 101 value of a is greater than 100
-b oldmacdonalds)(*&(^^%$&^%$&^%*^)(*^#@$@% 101 101 value of a is greater than 100
-b oldmacdonalds)(*&(^^%$&^%$&^%*^)(*^#@$@% 101 101 value of a is greater than 100
-b oldmacdonalds)(*&(^^%$&^%$&^%*^)(*^#@$@% 101 101 value of a is greater than 100
-b oldmacdonalds)(*&(^^%$&^%$&^%*^)(*^#@$@% 20 20 value of a is less than 50
-b oldmacdonalds)(*&(^^%$&^%$&^%*^)(*^#@$@% 20 20 value of a is less than 50
-b oldmacdonalds)(*&(^^%$&^%$&^%*^)(*^#@$@% 20 20 value of a is less than 50
-b oldmacdonalds)(*&(^^%$&^%$&^%*^)(*^#@$@% 20 20 value of a is less than 50
-b oldmacdonalds)(*&(^^%$&^%$&^%*^)(*^#@$@% 20 20 value of a is less than 50
-b oldmacdonalds)(*&(^^%$&^%$&^%*^)(*^#@$@% 40 40 value of a is less than 50
-b oldmacdonalds)(*&(^^%$&^%$&^%*^)(*^#@$@% 40 40 value of a is less than 50
-b oldmacdonalds)(*&(^^%$&^%$&^%*^)(*^#@$@% 40 40 value of a is less than 50
-b oldmacdonalds)(*&(^^%$&^%$&^%*^)(*^#@$@% 40 40 value of a is less than 50
-b oldmacdonalds)(*&(^^%$&^%$&^%*^)(*^#@$@% 40 40 value of a is less than 50
-b oldmacdonalds)(*&(^^%$&^%$&^%*^)(*^#@$@% 75 75 value of a is greater than 50 and less than 100
-b oldmacdonalds)(*&(^^%$&^%$&^%*^)(*^#@$@% 75 75 value of a is greater than 50 and less than 100
-b oldmacdonalds)(*&(^^%$&^%$&^%*^)(*^#@$@% 75 75 value of a is greater than 50 and less than 100
-b oldmacdonalds)(*&(^^%$&^%$&^%*^)(*^#@$@% 75 75 value of a is greater than 50 and less than 100
-b oldmacdonalds)(*&(^^%$&^%$&^%*^)(*^#@$@% 75 75 value of a is greater than 50 and less than 100
+ERROR 42S02: Table 'db_storedproc.res_t3_itisalongname_1381742_itsaverylongname_1381742' doesn't exist
drop table res_t3_itisalongname_1381742_itsaverylongname_1381742;
+ERROR 42S02: Unknown table 'res_t3_itisalongname_1381742_itsaverylongname_1381742'
DROP PROCEDURE sp1;
Testcase 4.3.2:
@@ -14023,7 +15167,7 @@ delete from res_t3_itisalongname_1381742_itsaverylongname_1381742;
END case;
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 'when 'delete' then
-delete from res_t3_itisalongname_1381742_itsaverylongname_13' at line 10
+delete from res_t3_itisalongname_1381742_itsaverylongname_13' at line 11
DROP PROCEDURE IF EXISTS sp3;
CREATE PROCEDURE sp3( action char(20) )
BEGIN
@@ -14041,8 +15185,9 @@ label2: while count < 10 do
BEGIN
insert into res_t3_itisalongname_1381742_itsaverylongname_1381742
values('xxxxxxxxxxxxxxxxxxx', '1231230981(*&(*&)(*&(', count);
-if done=1 then
-set count=10;
+set count = count + 1;
+if count= 10 then
+set done=1;
END if;
END;
END while label2;
@@ -14056,6 +15201,19 @@ END if;
END loop label1;
SELECT count, done;
END//
+CALL sp3('insert');
+count done
+10 1
+Warnings:
+Warning 1265 Data truncated for column 'name' at row 1
+Warning 1265 Data truncated for column 'name' at row 2
+Warning 1265 Data truncated for column 'name' at row 3
+Warning 1265 Data truncated for column 'name' at row 4
+Warning 1265 Data truncated for column 'name' at row 5
+Warning 1265 Data truncated for column 'name' at row 6
+Warning 1265 Data truncated for column 'name' at row 7
+Warning 1265 Data truncated for column 'name' at row 8
+Warning 1265 Data truncated for column 'name' at row 9
DROP PROCEDURE sp3;
drop table res_t3_itisalongname_1381742_itsaverylongname_1381742;
@@ -14330,11 +15488,14 @@ CREATE PROCEDURE sp6()
BEGIN
declare count1 integer default 1;
label1: repeat
-set count1 = count1;
+set count1 = count1-1;
until count1 < 0
END repeat label1;
SELECT count1;
END//
+CALL sp6();
+count1
+-1
DROP PROCEDURE sp6;
Testcase 4.3.7:
@@ -14403,7 +15564,7 @@ do v1 > 0 while
set v1 = v1 - 1;
END while;
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 'do v1 > 0 while
+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
set v1 = v1 - 1;
END while;
END' at line 4
@@ -14606,7 +15767,7 @@ until count1 < 3
END repeat label1;
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 'label1;
-END' at line 7
+END' at line 8
Testcase 4.3.21:
--------------------------------------------------------------------------------
@@ -14789,15 +15950,15 @@ insert into t43 values('abcde', 'a!@#$%^&*(');
CREATE PROCEDURE d1.sp4()
SELECT * from d1.t43;
SELECT * from mysql.proc where specific_name = 'sp4';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
-d1 sp4 PROCEDURE sp4 SQL CONTAINS_SQL NO DEFINER SELECT * from d1.t43 root@localhost modified created
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
+d1 sp4 PROCEDURE sp4 SQL CONTAINS_SQL NO DEFINER SELECT * from d1.t43 root@localhost modified created latin1 latin1_swedish_ci latin1_swedish_ci SELECT * from d1.t43
USE db_storedproc;
DROP DATABASE d1;
CREATE DATABASE d1;
USE d1;
create table t44(a char(5), b char(10));
SELECT * from mysql.proc where specific_name = 'sp4';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
USE db_storedproc;
DROP DATABASE d1;
@@ -14839,8 +16000,8 @@ CREATE PROCEDURE sp8 ( n char(20) ) sql security definer comment 'initial'
USE d2;
alter procedure d1.sp8 sql security definer comment 'updated';
SELECT * from mysql.proc where specific_name='sp8' and db='d1';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
-d1 sp8 PROCEDURE sp8 SQL CONTAINS_SQL NO DEFINER n char(20) SELECT * from t1 where t1.f1 = n root@localhost modified created updated
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
+d1 sp8 PROCEDURE sp8 SQL CONTAINS_SQL NO DEFINER n char(20) SELECT * from t1 where t1.f1 = n root@localhost modified created updated latin1 latin1_swedish_ci latin1_swedish_ci SELECT * from t1 where t1.f1 = n
Testcase 4.4.9:
--------------------------------------------------------------------------------
@@ -14856,12 +16017,16 @@ END//
USE d2;
alter function d1.fn2 sql security definer comment 'updated';
SELECT * from mysql.proc where specific_name='fn2' and db='d1';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
d1 fn2 FUNCTION fn2 SQL CONTAINS_SQL NO DEFINER n int int(11) BEGIN
declare a int;
set a = 0.9 * n;
return a;
-END root@localhost modified created updated
+END root@localhost modified created updated latin1 latin1_swedish_ci latin1_swedish_ci BEGIN
+declare a int;
+set a = 0.9 * n;
+return a;
+END
Testcase 4.4.10:
--------------------------------------------------------------------------------
@@ -14871,7 +16036,7 @@ SELECT * from t1 where t1.f1 = n;
USE d2;
DROP PROCEDURE d1.sp9;
SELECT * from mysql.proc where specific_name='sp9' and db='d1';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
Testcase 4.4.11:
--------------------------------------------------------------------------------
@@ -14885,7 +16050,7 @@ END//
USE d2;
DROP FUNCTION d1.fn3;
SELECT * from mysql.proc where specific_name='fn3' and db='d1';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
USE db_storedproc;
DROP DATABASE d1;
DROP DATABASE d2;
@@ -14893,19 +16058,6 @@ DROP DATABASE d2;
Section 3.1.5 - Parameter use checks:
Functions with all data types
--------------------------------------------------------------------------------
-SELECT 1 as 'bug_dec_num';
-bug_dec_num
-1
-
-.
-FIXME: There are differences with datatypes DECIMAL and NUMERIC if large
-FIXME: exponent values are used. The diffs are shown only on some machines like
-FIXME: AIX52 and HPUX11. Until this has been solved we use numbers that
-FIXME: *should* be equal to the exponent representation but have no exponents
-FIXME: and use the specified count of *0*s instead.
-FIXME: In the source file these tests are marked with the comment hpux11
-.
---------------------------------------------------------------------------------
DROP DATABASE IF EXISTS d1;
CREATE DATABASE d1;
USE d1;
@@ -14926,7 +16078,7 @@ return f1;
END//
SELECT fn2(1.84e+19);
fn2(1.84e+19)
-0
+18400000000000000000
DROP FUNCTION IF EXISTS fn3;
CREATE FUNCTION fn3( f1 bigint unsigned zerofill) returns bigint unsigned zerofill
BEGIN
@@ -14945,6 +16097,8 @@ END//
SELECT fn4(-9.22e+15);
fn4(-9.22e+15)
0
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn5;
CREATE FUNCTION fn5( f1 decimal) returns decimal
BEGIN
@@ -14972,6 +16126,10 @@ END//
SELECT fn7(99999999999);
fn7(99999999999)
9999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn8;
CREATE FUNCTION fn8( f1 decimal (0) unsigned zerofill) returns decimal (0) unsigned zerofill
BEGIN
@@ -14980,7 +16138,9 @@ return f1;
END//
SELECT fn8(999999999);
fn8(999999999)
-0999999999
+1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn9;
CREATE FUNCTION fn9( f1 decimal (0) zerofill) returns decimal (0) zerofill
BEGIN
@@ -14989,7 +16149,10 @@ return f1;
END//
SELECT fn9(-1.00e+09);
fn9(-1.00e+09)
-0000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn10;
CREATE FUNCTION fn10( f1 decimal (0, 0)) returns decimal (0, 0)
BEGIN
@@ -15008,6 +16171,10 @@ END//
SELECT fn11(99999999999);
fn11(99999999999)
9999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn12;
CREATE FUNCTION fn12( f1 decimal (0, 0) unsigned zerofill) returns decimal (0, 0) unsigned zerofill
BEGIN
@@ -15016,7 +16183,9 @@ return f1;
END//
SELECT fn12(999999999);
fn12(999999999)
-0999999999
+1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn13;
CREATE FUNCTION fn13( f1 decimal (0, 0) zerofill) returns decimal (0, 0) zerofill
BEGIN
@@ -15025,7 +16194,10 @@ return f1;
END//
SELECT fn13(-1.00e+09);
fn13(-1.00e+09)
-0000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn14;
CREATE FUNCTION fn14( f1 decimal (63, 30)) returns decimal (63, 30)
BEGIN
@@ -15061,7 +16233,10 @@ return f1;
END//
SELECT fn17(-1.00e+21);
fn17(-1.00e+21)
-000000000000000000000000000000000.000000000000000000000000000000
+000000000000000000000000000000010.000000000000000000000000000000
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn18_d;
CREATE FUNCTION fn18_d( f1 decimal (64)) returns decimal (64)
BEGIN
@@ -15097,7 +16272,10 @@ return f1;
END//
SELECT fn21_d_z(1.00e+00);
fn21_d_z(1.00e+00)
-0000000000000000000000000000000000000000000000000000000000000001
+0000000000000000000000000000000000000000000000000000000000000010
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn22;
CREATE FUNCTION fn22( f1 decimal unsigned) returns decimal unsigned
BEGIN
@@ -15106,7 +16284,10 @@ return f1;
END//
SELECT fn22(1.00e+00);
fn22(1.00e+00)
-1
+10
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn23;
CREATE FUNCTION fn23( f1 decimal unsigned zerofill) returns decimal unsigned zerofill
BEGIN
@@ -15115,7 +16296,10 @@ return f1;
END//
SELECT fn23(1.00e+00);
fn23(1.00e+00)
-0000000001
+0000000010
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn24;
CREATE FUNCTION fn24( f1 decimal zerofill) returns decimal zerofill
BEGIN
@@ -15124,7 +16308,10 @@ return f1;
END//
SELECT fn24(-1.00e+09);
fn24(-1.00e+09)
-0000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn25;
CREATE FUNCTION fn25( f1 double) returns double
BEGIN
@@ -15142,7 +16329,9 @@ return f1;
END//
SELECT fn26(1.00e+00);
fn26(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn27;
CREATE FUNCTION fn27( f1 double unsigned zerofill) returns double unsigned zerofill
BEGIN
@@ -15151,7 +16340,9 @@ return f1;
END//
SELECT fn27(1.00e+00);
fn27(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn28;
CREATE FUNCTION fn28( f1 double zerofill) returns double zerofill
BEGIN
@@ -15160,7 +16351,9 @@ return f1;
END//
SELECT fn28(1.00e+00);
fn28(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn29;
CREATE FUNCTION fn29( f1 float) returns float
BEGIN
@@ -15178,7 +16371,9 @@ return f1;
END//
SELECT fn30(1.00e+00);
fn30(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn31;
CREATE FUNCTION fn31( f1 float unsigned zerofill) returns float unsigned zerofill
BEGIN
@@ -15187,7 +16382,9 @@ return f1;
END//
SELECT fn31(1.00e+00);
fn31(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn32;
CREATE FUNCTION fn32( f1 float zerofill) returns float zerofill
BEGIN
@@ -15196,7 +16393,9 @@ return f1;
END//
SELECT fn32(1.00e+00);
fn32(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn33;
CREATE FUNCTION fn33( f1 float(0)) returns float(0)
BEGIN
@@ -15214,7 +16413,9 @@ return f1;
END//
SELECT fn34(1.00e+00);
fn34(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn35;
CREATE FUNCTION fn35( f1 float(0) unsigned zerofill) returns float(0) unsigned zerofill
BEGIN
@@ -15223,7 +16424,9 @@ return f1;
END//
SELECT fn35(1.00e+00);
fn35(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn36;
CREATE FUNCTION fn36( f1 float(0) zerofill) returns float(0) zerofill
BEGIN
@@ -15232,7 +16435,9 @@ return f1;
END//
SELECT fn36(1.00e+00);
fn36(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn37;
CREATE FUNCTION fn37( f1 float(23)) returns float(23)
BEGIN
@@ -15250,7 +16455,9 @@ return f1;
END//
SELECT fn38(1.00e+00);
fn38(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn39;
CREATE FUNCTION fn39( f1 float(23) unsigned zerofill) returns float(23) unsigned zerofill
BEGIN
@@ -15259,7 +16466,9 @@ return f1;
END//
SELECT fn39(1.00e+00);
fn39(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn40;
CREATE FUNCTION fn40( f1 float(23) zerofill) returns float(23) zerofill
BEGIN
@@ -15268,7 +16477,9 @@ return f1;
END//
SELECT fn40(1.00e+00);
fn40(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn41;
CREATE FUNCTION fn41( f1 float(24)) returns float(24)
BEGIN
@@ -15286,7 +16497,9 @@ return f1;
END//
SELECT fn42(1.00e+00);
fn42(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn43;
CREATE FUNCTION fn43( f1 float(24) unsigned zerofill) returns float(24) unsigned zerofill
BEGIN
@@ -15295,7 +16508,9 @@ return f1;
END//
SELECT fn43(1.00e+00);
fn43(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn44;
CREATE FUNCTION fn44( f1 float(24) zerofill) returns float(24) zerofill
BEGIN
@@ -15304,7 +16519,9 @@ return f1;
END//
SELECT fn44(1.00e+00);
fn44(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn45;
CREATE FUNCTION fn45( f1 float(53)) returns float(53)
BEGIN
@@ -15322,7 +16539,9 @@ return f1;
END//
SELECT fn46(1.00e+00);
fn46(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn47;
CREATE FUNCTION fn47( f1 float(53) unsigned zerofill) returns float(53) unsigned zerofill
BEGIN
@@ -15331,7 +16550,9 @@ return f1;
END//
SELECT fn47(1.00e+00);
fn47(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn48;
CREATE FUNCTION fn48( f1 float(53) zerofill) returns float(53) zerofill
BEGIN
@@ -15340,7 +16561,9 @@ return f1;
END//
SELECT fn48(1.00e+00);
fn48(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn49;
CREATE FUNCTION fn49( f1 int) returns int
BEGIN
@@ -15349,7 +16572,10 @@ return f1;
END//
SELECT fn49(-2.15e+09);
fn49(-2.15e+09)
--2147483648
+-2147483638
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn50;
CREATE FUNCTION fn50( f1 int unsigned) returns int unsigned
BEGIN
@@ -15385,7 +16611,9 @@ return f1;
END//
SELECT fn53(-8388600);
fn53(-8388600)
--8388600
+-8388598
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn54;
CREATE FUNCTION fn54( f1 mediumint unsigned) returns mediumint unsigned
BEGIN
@@ -15412,7 +16640,11 @@ return f1;
END//
SELECT fn56(-8388601);
fn56(-8388601)
-0
+16777215
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn57;
CREATE FUNCTION fn57( f1 numeric) returns numeric
BEGIN
@@ -15421,7 +16653,9 @@ return f1;
END//
SELECT fn57(-999999999);
fn57(-999999999)
--999999999
+-1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn58;
CREATE FUNCTION fn58( f1 numeric (0)) returns numeric (0)
BEGIN
@@ -15430,7 +16664,9 @@ return f1;
END//
SELECT fn58(-999999999);
fn58(-999999999)
--999999999
+-1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn59;
CREATE FUNCTION fn59( f1 numeric (0) unsigned) returns numeric (0) unsigned
BEGIN
@@ -15440,6 +16676,9 @@ END//
SELECT fn59(9999999999);
fn59(9999999999)
9999999999
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn60;
CREATE FUNCTION fn60( f1 numeric (0) unsigned zerofill) returns numeric (0) unsigned zerofill
BEGIN
@@ -15448,7 +16687,9 @@ return f1;
END//
SELECT fn60(99999999);
fn60(99999999)
-0099999999
+0100000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn61;
CREATE FUNCTION fn61( f1 numeric (0) zerofill) returns numeric (0) zerofill
BEGIN
@@ -15457,7 +16698,10 @@ return f1;
END//
SELECT fn61(-99999999);
fn61(-99999999)
-0000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn62;
CREATE FUNCTION fn62( f1 numeric (0, 0)) returns numeric (0, 0)
BEGIN
@@ -15466,7 +16710,9 @@ return f1;
END//
SELECT fn62(-999999999);
fn62(-999999999)
--999999999
+-1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn63;
CREATE FUNCTION fn63( f1 numeric (0, 0) unsigned) returns numeric (0, 0) unsigned
BEGIN
@@ -15476,6 +16722,9 @@ END//
SELECT fn63(9999999999);
fn63(9999999999)
9999999999
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn64;
CREATE FUNCTION fn64( f1 numeric (0, 0) unsigned zerofill) returns numeric (0, 0) unsigned zerofill
BEGIN
@@ -15484,7 +16733,9 @@ return f1;
END//
SELECT fn64(99999999);
fn64(99999999)
-0099999999
+0100000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn65;
CREATE FUNCTION fn65( f1 numeric (0, 0) zerofill) returns numeric (0, 0) zerofill
BEGIN
@@ -15493,7 +16744,10 @@ return f1;
END//
SELECT fn65(-99999999);
fn65(-99999999)
-0000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn66;
CREATE FUNCTION fn66( f1 numeric (63, 30)) returns numeric (63, 30)
BEGIN
@@ -15502,7 +16756,12 @@ return f1;
END//
SELECT fn66(-1e+36);
fn66(-1e+36)
--999999999999999999999999999999999.999999999999999999999999999999
+-999999999999999999999999999999989.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn67;
CREATE FUNCTION fn67( f1 numeric (63, 30) unsigned) returns numeric (63, 30) unsigned
BEGIN
@@ -15512,6 +16771,10 @@ END//
SELECT fn67(1e+36);
fn67(1e+36)
999999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn68;
CREATE FUNCTION fn68( f1 numeric (63, 30) unsigned zerofill) returns numeric (63, 30) unsigned zerofill
BEGIN
@@ -15521,6 +16784,10 @@ END//
SELECT fn68(1e+36);
fn68(1e+36)
999999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn69;
CREATE FUNCTION fn69( f1 numeric (63, 30) zerofill) returns numeric (63, 30) zerofill
BEGIN
@@ -15529,7 +16796,10 @@ return f1;
END//
SELECT fn69(-1e+36);
fn69(-1e+36)
-000000000000000000000000000000000.000000000000000000000000000000
+000000000000000000000000000000010.000000000000000000000000000000
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn70_n;
CREATE FUNCTION fn70_n( f1 numeric (64)) returns numeric (64)
BEGIN
@@ -15577,7 +16847,9 @@ return f1;
END//
SELECT fn74(999999999);
fn74(999999999)
-999999999
+1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn75;
CREATE FUNCTION fn75( f1 numeric unsigned zerofill) returns numeric unsigned zerofill
BEGIN
@@ -15586,7 +16858,9 @@ return f1;
END//
SELECT fn75(999999999);
fn75(999999999)
-0999999999
+1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn76;
CREATE FUNCTION fn76( f1 numeric zerofill) returns numeric zerofill
BEGIN
@@ -15595,7 +16869,10 @@ return f1;
END//
SELECT fn76(-999999999);
fn76(-999999999)
-0000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn77;
CREATE FUNCTION fn77( f1 real) returns real
BEGIN
@@ -15613,7 +16890,9 @@ return f1;
END//
SELECT fn78(1.1);
fn78(1.1)
-1.1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn79;
CREATE FUNCTION fn79( f1 real unsigned zerofill) returns real unsigned zerofill
BEGIN
@@ -15622,7 +16901,9 @@ return f1;
END//
SELECT fn79(1.1);
fn79(1.1)
-1.1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn80;
CREATE FUNCTION fn80( f1 real zerofill) returns real zerofill
BEGIN
@@ -15631,7 +16912,9 @@ return f1;
END//
SELECT fn80(1.1);
fn80(1.1)
-1.1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn81;
CREATE FUNCTION fn81( f1 smallint) returns smallint
BEGIN
@@ -15667,7 +16950,11 @@ return f1;
END//
SELECT fn84(-32601);
fn84(-32601)
-0
+65535
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn85;
CREATE FUNCTION fn85( f1 tinyint) returns tinyint
BEGIN
@@ -15703,45 +16990,37 @@ return f1;
END//
SELECT fn88(-101);
fn88(-101)
-0
+255
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn89;
CREATE FUNCTION fn89( f1 enum('1enum', '2enum')) returns enum('1enum', '2enum')
BEGIN
-if f1 eq "1enum" then
-set f1 = '2enum';
-else
-set f1 = '1enum';
-END if;
-return f1;
+IF f1 = '1enum' THEN
+SET f1 = '2enum';
+ELSE
+SET f1 = '1enum';
+END IF;
+RETURN f1;
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 'eq "1enum" then
-set f1 = '2enum';
-else
-set f1 = '1enum';
-END if;
-return f1;
-END' at line 3
SELECT fn89( '1enum');
-ERROR 42000: FUNCTION d1.fn89 does not exist
+fn89( '1enum')
+2enum
DROP FUNCTION IF EXISTS fn90;
-CREATE FUNCTION fn90( f1 set("1set", "2set")) returns set("1set", "2set")
+CREATE FUNCTION fn90( f1 set('1set', '2set')) returns set('1set', '2set')
BEGIN
-if(f1 == "1set") then
-set f1 = "2set";
-else
-set f1 = "1set";
-END if;
-return f1;
+IF f1 = '1set' THEN
+SET f1 = '2set';
+ELSE
+SET f1 = '1set';
+END IF;
+RETURN f1;
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 '== "1set") then
-set f1 = "2set";
-else
-set f1 = "1set";
-END if;
-return f1;
-END' at line 3
SELECT fn90( '1set');
-ERROR 42000: FUNCTION d1.fn90 does not exist
+fn90( '1set')
+2set
DROP FUNCTION IF EXISTS fn91;
CREATE FUNCTION fn91( f1 date) returns date
BEGIN
@@ -15759,7 +17038,7 @@ return f1;
END//
SELECT fn92( '23:59:59.999999');
fn92( '23:59:59.999999')
-26:00:00
+25:59:59
DROP FUNCTION IF EXISTS fn93;
CREATE FUNCTION fn93( f1 datetime) returns datetime
BEGIN
@@ -15768,7 +17047,7 @@ return f1;
END//
SELECT fn93('1997-12-31 23:59:59.999999');
fn93('1997-12-31 23:59:59.999999')
-1998-01-02 01:01:01
+1998-01-02 01:01:00
DROP FUNCTION IF EXISTS fn94;
CREATE FUNCTION fn94( f1 char) returns char
BEGIN
@@ -15778,6 +17057,8 @@ END//
SELECT fn94( 'h');
fn94( 'h')
a
+Warnings:
+Warning 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn95;
CREATE FUNCTION fn95( f1 char ascii) returns char ascii
BEGIN
@@ -15787,15 +17068,19 @@ END//
SELECT fn95('h');
fn95('h')
a
+Warnings:
+Warning 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn96;
-CREATE FUNCTION fn96( f1 char binary) returns char binary
+CREATE FUNCTION fn96( f1 binary) returns binary(2)
BEGIN
set f1 = concat('a', f1);
return f1;
END//
SELECT fn96( 'h');
fn96( 'h')
-a
+a
+Warnings:
+Warning 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn97;
CREATE FUNCTION fn97( f1 longtext) returns longtext
BEGIN
@@ -15917,7 +17202,7 @@ SELECT f1;
END//
CALL sp2(1.84e+19);
f1
--9223372036854775808
+18400000000000000000
DROP PROCEDURE IF EXISTS sp3;
CREATE PROCEDURE sp3( f1 bigint unsigned zerofill)
BEGIN
@@ -15926,7 +17211,7 @@ SELECT f1;
END//
CALL sp3(1.84e+17);
f1
-184000000000000000
+00184000000000000000
DROP PROCEDURE IF EXISTS sp4;
CREATE PROCEDURE sp4( f1 bigint zerofill)
BEGIN
@@ -15935,31 +17220,27 @@ SELECT f1;
END//
CALL sp4(-9.22e+15);
f1
--9220000000000000
+00000000000000000000
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp5;
CREATE PROCEDURE sp5( f1 decimal)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: default (10) for DECIMAL not checked, decimal digits shown although not defined
CALL sp5(-1.00e+09);
f1
--1000000000.000000000
+-1000000000
DROP PROCEDURE IF EXISTS sp6;
CREATE PROCEDURE sp6( f1 decimal (0))
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
CALL sp6(-1.00e+09);
f1
--1000000000.000000000
+-1000000000
DROP PROCEDURE IF EXISTS sp7;
CREATE PROCEDURE sp7( f1 decimal (0) unsigned)
BEGIN
@@ -15968,7 +17249,11 @@ SELECT f1;
END//
CALL sp7(99999999999);
f1
-99999999999.000000000
+9999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp8;
CREATE PROCEDURE sp8( f1 decimal (0) unsigned zerofill)
BEGIN
@@ -15977,199 +17262,201 @@ SELECT f1;
END//
CALL sp8(999999999);
f1
-999999999.000000000
+1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp9;
CREATE PROCEDURE sp9( f1 decimal (0) zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
CALL sp9(-1.00e+09);
f1
--1000000000.000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp10;
CREATE PROCEDURE sp10( f1 decimal (0, 0))
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
CALL sp10(-1.00e+09);
f1
--1000000000.000000000
+-1000000000
DROP PROCEDURE IF EXISTS sp11;
CREATE PROCEDURE sp11( f1 decimal (0, 0) unsigned)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
CALL sp11(99999999999);
f1
-99999999999.000000000
+9999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp12;
CREATE PROCEDURE sp12( f1 decimal (0, 0) unsigned zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
CALL sp12(999999999);
f1
-999999999.000000000
+1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp13;
CREATE PROCEDURE sp13( f1 decimal (0, 0) zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
CALL sp13(-1.00e+09);
f1
--1000000000.000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp14;
CREATE PROCEDURE sp14( f1 decimal (63, 30))
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: wrong number of decimal digits shown
CALL sp14(-1.00e+21);
f1
--1000000000000000000000.000000000
+-1000000000000000000000.000000000000000000000000000000
DROP PROCEDURE IF EXISTS sp15;
CREATE PROCEDURE sp15( f1 decimal (63, 30) unsigned)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: wrong number of decimal digits shown
CALL sp15(1.00e+16);
f1
-10000000000000000.000000000
+10000000000000000.000000000000000000000000000000
DROP PROCEDURE IF EXISTS sp16;
CREATE PROCEDURE sp16( f1 decimal (63, 30) unsigned zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: wrong number of decimal digits shown
CALL sp16(1.00e+16);
f1
-10000000000000000.000000000
+000000000000000010000000000000000.000000000000000000000000000000
DROP PROCEDURE IF EXISTS sp17;
CREATE PROCEDURE sp17( f1 decimal (63, 30) zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: wrong number of decimal digits shown
CALL sp17(-1.00e+21);
f1
--1000000000000000000000.000000000
+000000000000000000000000000000010.000000000000000000000000000000
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp18_d;
CREATE PROCEDURE sp18_d( f1 decimal (64))
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
+CALL sp18_d(-1.00e+30);
+f1
+-1000000000000000000000000000000
CALL sp18_d( -1000000000000000000000000000000 );
f1
--1000000000000000000000000000000.000000000
+-1000000000000000000000000000000
DROP PROCEDURE IF EXISTS sp19_du;
CREATE PROCEDURE sp19_du( f1 decimal (64) unsigned)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
+CALL sp19_du(1.00e+20);
+f1
+100000000000000000000
CALL sp19_du( 100000000000000000000 );
f1
-100000000000000000000.000000000
+100000000000000000000
+CALL sp19_du(1.00e+24);
+f1
+1000000000000000000000000
CALL sp19_du( 1000000000000000000000000 );
f1
-1000000000000000000000000.000000000
+1000000000000000000000000
DROP PROCEDURE IF EXISTS sp20_duz;
CREATE PROCEDURE sp20_duz( f1 decimal (64) unsigned zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
+CALL sp20_duz(1.00e+20);
+f1
+0000000000000000000000000000000000000000000100000000000000000000
CALL sp20_duz( 100000000000000000000 );
f1
-100000000000000000000.000000000
+0000000000000000000000000000000000000000000100000000000000000000
+CALL sp20_duz(1.00e+24);
+f1
+0000000000000000000000000000000000000001000000000000000000000000
CALL sp20_duz( 1000000000000000000000000 );
f1
-1000000000000000000000000.000000000
+0000000000000000000000000000000000000001000000000000000000000000
DROP PROCEDURE IF EXISTS sp21;
CREATE PROCEDURE sp21( f1 decimal (64) zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
CALL sp21(1.00e+00);
f1
-1.000000000
+0000000000000000000000000000000000000000000000000000000000000010
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp22;
CREATE PROCEDURE sp22( f1 decimal unsigned)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
CALL sp22(1.00e+00);
f1
-1.000000000
+10
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp23;
CREATE PROCEDURE sp23( f1 decimal unsigned zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
CALL sp23(1.00e+00);
f1
-1.000000000
+0000000010
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp24;
CREATE PROCEDURE sp24( f1 decimal zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
CALL sp24(-1.00e+09);
f1
--1000000000.000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp25;
CREATE PROCEDURE sp25( f1 double)
BEGIN
@@ -16187,7 +17474,9 @@ SELECT f1;
END//
CALL sp26(1.00e+00);
f1
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp27;
CREATE PROCEDURE sp27( f1 double unsigned zerofill)
BEGIN
@@ -16196,7 +17485,9 @@ SELECT f1;
END//
CALL sp27(1.00e+00);
f1
-1
+0000000000000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp28;
CREATE PROCEDURE sp28( f1 double zerofill)
BEGIN
@@ -16205,7 +17496,9 @@ SELECT f1;
END//
CALL sp28(1.00e+00);
f1
-1
+0000000000000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp29;
CREATE PROCEDURE sp29( f1 float)
BEGIN
@@ -16223,7 +17516,9 @@ SELECT f1;
END//
CALL sp30(1.00e+00);
f1
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp31;
CREATE PROCEDURE sp31( f1 float unsigned zerofill)
BEGIN
@@ -16232,7 +17527,9 @@ SELECT f1;
END//
CALL sp31(1.00e+00);
f1
-1
+000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp32;
CREATE PROCEDURE sp32( f1 float zerofill)
BEGIN
@@ -16241,7 +17538,9 @@ SELECT f1;
END//
CALL sp32(1.00e+00);
f1
-1
+000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp33;
CREATE PROCEDURE sp33( f1 float(0))
BEGIN
@@ -16259,7 +17558,9 @@ SELECT f1;
END//
CALL sp34(1.00e+00);
f1
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp35;
CREATE PROCEDURE sp35( f1 float(0) unsigned zerofill)
BEGIN
@@ -16268,7 +17569,9 @@ SELECT f1;
END//
CALL sp35(1.00e+00);
f1
-1
+000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp36;
CREATE PROCEDURE sp36( f1 float(0) zerofill)
BEGIN
@@ -16277,7 +17580,9 @@ SELECT f1;
END//
CALL sp36(1.00e+00);
f1
-1
+000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp37;
CREATE PROCEDURE sp37( f1 float(23))
BEGIN
@@ -16295,7 +17600,9 @@ SELECT f1;
END//
CALL sp38(1.00e+00);
f1
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp39;
CREATE PROCEDURE sp39( f1 float(23) unsigned zerofill)
BEGIN
@@ -16304,7 +17611,9 @@ SELECT f1;
END//
CALL sp39(1.00e+00);
f1
-1
+000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp40;
CREATE PROCEDURE sp40( f1 float(23) zerofill)
BEGIN
@@ -16313,7 +17622,9 @@ SELECT f1;
END//
CALL sp40(1.00e+00);
f1
-1
+000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp41;
CREATE PROCEDURE sp41( f1 float(24))
BEGIN
@@ -16331,7 +17642,9 @@ SELECT f1;
END//
CALL sp42(1.00e+00);
f1
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp43;
CREATE PROCEDURE sp43( f1 float(24) unsigned zerofill)
BEGIN
@@ -16340,7 +17653,9 @@ SELECT f1;
END//
CALL sp43(1.00e+00);
f1
-1
+000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp44;
CREATE PROCEDURE sp44( f1 float(24) zerofill)
BEGIN
@@ -16349,7 +17664,9 @@ SELECT f1;
END//
CALL sp44(1.00e+00);
f1
-1
+000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp45;
CREATE PROCEDURE sp45( f1 float(53))
BEGIN
@@ -16367,7 +17684,9 @@ SELECT f1;
END//
CALL sp46(1.00e+00);
f1
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp47;
CREATE PROCEDURE sp47( f1 float(53) unsigned zerofill)
BEGIN
@@ -16376,7 +17695,9 @@ SELECT f1;
END//
CALL sp47(1.00e+00);
f1
-1
+0000000000000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp48;
CREATE PROCEDURE sp48( f1 float(53) zerofill)
BEGIN
@@ -16385,7 +17706,9 @@ SELECT f1;
END//
CALL sp48(1.00e+00);
f1
-1
+0000000000000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp49;
CREATE PROCEDURE sp49( f1 int)
BEGIN
@@ -16394,7 +17717,10 @@ SELECT f1;
END//
CALL sp49(-2.15e+09);
f1
--2150000000
+-2147483638
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp50;
CREATE PROCEDURE sp50( f1 int unsigned)
BEGIN
@@ -16421,7 +17747,7 @@ SELECT f1;
END//
CALL sp52(2.15e+08);
f1
-215000000
+0215000000
DROP PROCEDURE IF EXISTS sp53;
CREATE PROCEDURE sp53( f1 mediumint)
BEGIN
@@ -16430,7 +17756,9 @@ SELECT f1;
END//
CALL sp53(-8388600);
f1
--8388600
+-8388598
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp54;
CREATE PROCEDURE sp54( f1 mediumint unsigned)
BEGIN
@@ -16457,7 +17785,11 @@ SELECT f1;
END//
CALL sp56(-8388601);
f1
--8388602
+16777215
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp57;
CREATE PROCEDURE sp57( f1 numeric)
BEGIN
@@ -16466,7 +17798,9 @@ SELECT f1;
END//
CALL sp57(-999999999);
f1
--999999999.000000000
+-1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp58;
CREATE PROCEDURE sp58( f1 numeric (0))
BEGIN
@@ -16475,7 +17809,9 @@ SELECT f1;
END//
CALL sp58(-999999999);
f1
--999999999.000000000
+-1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp59;
CREATE PROCEDURE sp59( f1 numeric (0) unsigned)
BEGIN
@@ -16484,7 +17820,10 @@ SELECT f1;
END//
CALL sp59(9999999999);
f1
-9999999999.000000000
+9999999999
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp60;
CREATE PROCEDURE sp60( f1 numeric (0) unsigned zerofill)
BEGIN
@@ -16493,7 +17832,9 @@ SELECT f1;
END//
CALL sp60(99999999);
f1
-99999999.000000000
+0100000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp61;
CREATE PROCEDURE sp61( f1 numeric (0) zerofill)
BEGIN
@@ -16502,7 +17843,10 @@ SELECT f1;
END//
CALL sp61(-99999999);
f1
--99999999.000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp62;
CREATE PROCEDURE sp62( f1 numeric (0, 0))
BEGIN
@@ -16511,7 +17855,9 @@ SELECT f1;
END//
CALL sp62(-999999999);
f1
--999999999.000000000
+-1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp63;
CREATE PROCEDURE sp63( f1 numeric (0, 0) unsigned)
BEGIN
@@ -16520,7 +17866,10 @@ SELECT f1;
END//
CALL sp63(9999999999);
f1
-9999999999.000000000
+9999999999
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp64;
CREATE PROCEDURE sp64( f1 numeric (0, 0) unsigned zerofill)
BEGIN
@@ -16529,7 +17878,9 @@ SELECT f1;
END//
CALL sp64(99999999);
f1
-99999999.000000000
+0100000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp65;
CREATE PROCEDURE sp65( f1 numeric (0, 0) zerofill)
BEGIN
@@ -16538,79 +17889,146 @@ SELECT f1;
END//
CALL sp65(-99999999);
f1
--99999999.000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp66_n;
CREATE PROCEDURE sp66_n( f1 numeric (63, 30))
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
+CALL sp66_n(-1e+36);
+f1
+-999999999999999999999999999999989.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
CALL sp66_n( -1000000000000000000000000000000000000 );
f1
--1000000000000000000000000000000000000.000000000
+-999999999999999999999999999999989.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp67_nu;
CREATE PROCEDURE sp67_nu( f1 numeric (63, 30) unsigned)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
+CALL sp67_nu(1e+36);
+f1
+999999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
CALL sp67_nu( 1000000000000000000000000000000000000 );
f1
-1000000000000000000000000000000000000.000000000
+999999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp68_nuz;
CREATE PROCEDURE sp68_nuz( f1 numeric (63, 30) unsigned zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
+CALL sp68_nuz(1e+36);
+f1
+999999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
CALL sp68_nuz( 1000000000000000000000000000000000000 );
f1
-1000000000000000000000000000000000000.000000000
+999999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp69_n_z;
CREATE PROCEDURE sp69_n_z( f1 numeric (63, 30) zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
+CALL sp69_n_z(-1e+36);
+f1
+000000000000000000000000000000010.000000000000000000000000000000
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
CALL sp69_n_z( -1000000000000000000000000000000000000 );
f1
--1000000000000000000000000000000000000.000000000
+000000000000000000000000000000010.000000000000000000000000000000
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp70_n;
CREATE PROCEDURE sp70_n( f1 numeric (64))
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
+CALL sp70_n(-1e+40);
+f1
+-10000000000000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
CALL sp70_n( -10000000000000000000000000000000000000000 );
f1
--10000000000000000000000000000000000000000.000000000
+-10000000000000000000000000000000000000000
DROP PROCEDURE IF EXISTS sp71_nu;
CREATE PROCEDURE sp71_nu( f1 numeric (64) unsigned)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
+CALL sp71_nu(1.00e+40);
+f1
+10000000000000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
CALL sp71_nu( 10000000000000000000000000000000000000000 );
f1
-10000000000000000000000000000000000000000.000000000
+10000000000000000000000000000000000000000
DROP PROCEDURE IF EXISTS sp72_nuz;
CREATE PROCEDURE sp72_nuz( f1 numeric (64) unsigned zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
+CALL sp72_nuz(1.00e+40);
+f1
+0000000000000000000000010000000000000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
CALL sp72_nuz( 10000000000000000000000000000000000000000 );
f1
-10000000000000000000000000000000000000000.000000000
+0000000000000000000000010000000000000000000000000000000000000000
DROP PROCEDURE IF EXISTS sp73_n_z;
CREATE PROCEDURE sp73_n_z( f1 numeric (64) zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
+CALL sp73_n_z(1.00e+40);
+f1
+0000000000000000000000010000000000000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
CALL sp73_n_z( 10000000000000000000000000000000000000000 );
f1
-10000000000000000000000000000000000000000.000000000
+0000000000000000000000010000000000000000000000000000000000000000
DROP PROCEDURE IF EXISTS sp74;
CREATE PROCEDURE sp74( f1 numeric unsigned)
BEGIN
@@ -16619,7 +18037,9 @@ SELECT f1;
END//
CALL sp74(999999999);
f1
-999999999.000000000
+1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp75;
CREATE PROCEDURE sp75( f1 numeric unsigned zerofill)
BEGIN
@@ -16628,7 +18048,9 @@ SELECT f1;
END//
CALL sp75(999999999);
f1
-999999999.000000000
+1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp76;
CREATE PROCEDURE sp76( f1 numeric zerofill)
BEGIN
@@ -16637,7 +18059,10 @@ SELECT f1;
END//
CALL sp76(-999999999);
f1
--999999999.000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp77;
CREATE PROCEDURE sp77( f1 real)
BEGIN
@@ -16646,7 +18071,7 @@ SELECT f1;
END//
CALL sp77(1.1);
f1
-1.10000
+1.1
DROP PROCEDURE IF EXISTS sp78;
CREATE PROCEDURE sp78( f1 real unsigned)
BEGIN
@@ -16655,7 +18080,9 @@ SELECT f1;
END//
CALL sp78(1.1);
f1
-1.10000
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp79;
CREATE PROCEDURE sp79( f1 real unsigned zerofill)
BEGIN
@@ -16664,7 +18091,9 @@ SELECT f1;
END//
CALL sp79(1.1);
f1
-1.10000
+0000000000000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp80;
CREATE PROCEDURE sp80( f1 real zerofill)
BEGIN
@@ -16673,7 +18102,9 @@ SELECT f1;
END//
CALL sp80(1.1);
f1
-1.10000
+0000000000000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp81;
CREATE PROCEDURE sp81( f1 smallint)
BEGIN
@@ -16709,7 +18140,11 @@ SELECT f1;
END//
CALL sp84(-32601);
f1
--32602
+65535
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp85;
CREATE PROCEDURE sp85( f1 tinyint)
BEGIN
@@ -16745,9 +18180,23 @@ SELECT f1;
END//
CALL sp88(-101);
f1
--102
+255
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp89;
+CREATE PROCEDURE sp89( f1 enum('1enum', '2enum'))
+BEGIN
+IF f1 = '1enum' THEN set f1 = '2enum'; ELSE set f1 = '1enum'; END IF;
+END//
+CALL sp89( '1enum');
DROP PROCEDURE IF EXISTS sp90;
+CREATE PROCEDURE sp90( f1 set('1set', '2set'))
+BEGIN
+IF f1 = '1set' THEN set f1 = '2set'; ELSE set f1 = '1set'; END IF;
+END//
+CALL sp90( '1set');
DROP PROCEDURE IF EXISTS sp91;
CREATE PROCEDURE sp91( f1 date)
BEGIN
@@ -16765,7 +18214,7 @@ SELECT f1;
END//
CALL sp92( '23:59:59.999999');
f1
-26:00:00.999997
+25:59:59
DROP PROCEDURE IF EXISTS sp93;
CREATE PROCEDURE sp93( f1 datetime)
BEGIN
@@ -16774,7 +18223,7 @@ SELECT f1;
END//
CALL sp93('1997-12-31 23:59:59.999999');
f1
-1998-01-02 01:01:01.000001
+1998-01-02 01:01:00
DROP PROCEDURE IF EXISTS sp94;
CREATE PROCEDURE sp94( f1 char)
BEGIN
@@ -16783,7 +18232,9 @@ SELECT f1;
END//
CALL sp94( 'h');
f1
-ah
+a
+Warnings:
+Warning 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp95;
CREATE PROCEDURE sp95( f1 char ascii)
BEGIN
@@ -16792,7 +18243,9 @@ SELECT f1;
END//
CALL sp95( 'h');
f1
-ah
+a
+Warnings:
+Warning 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp96;
CREATE PROCEDURE sp96( f1 char binary)
BEGIN
@@ -16801,7 +18254,9 @@ SELECT f1;
END//
CALL sp96( 'h');
f1
-ah
+a
+Warnings:
+Warning 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp97;
CREATE PROCEDURE sp97( f1 longtext)
BEGIN
@@ -16846,7 +18301,7 @@ SELECT f1;
END//
CALL sp101(51);
f1
-61
+2061
DROP PROCEDURE IF EXISTS sp102;
CREATE PROCEDURE sp102( f1 year(4))
BEGIN
@@ -16901,6 +18356,8 @@ END//
CALL sp107(2.00e+13);
f1
returned
+Warnings:
+returned 1265 Data truncated for column 'f1' at row 1
USE db_storedproc;
DROP DATABASE db1;
DROP DATABASE IF EXISTS db1;
@@ -16937,9 +18394,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute01();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-61 61 71 61 61 71 2033 2033 2084 2033 2033 2084
+2061 2061 2071 2061 2061 2071 2033 2033 2084 2033 2033 2084
var1 var2 var3 var4 var5 var6 var7 var8
-61 71 61 71 2033 2084 2033 2084
+2061 2071 2061 2071 2033 2084 2033 2084
DROP PROCEDURE spexecute01;
DROP PROCEDURE sp1;
DROP PROCEDURE IF EXISTS sp2;
@@ -17010,9 +18467,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute03();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-ah ah aah ah ah aah helloworld helloworld NULL helloworld helloworld hellohelloworld
+a a a a a a helloworld helloworld NULL helloworld helloworld hellohelloworld
var1 var2 var3 var4 var5 var6 var7 var8
-ah aah ah aah helloworld NULL helloworld hellohelloworld
+a a a a helloworld NULL helloworld hellohelloworld
DROP PROCEDURE spexecute03;
DROP PROCEDURE sp3;
DROP PROCEDURE IF EXISTS sp4;
@@ -17155,7 +18612,7 @@ SELECT var7, var8;
END//
CALL spexecute07();
var1 var2
-9223372036854775807 NULL
+18400000000000000000 NULL
var3 var4
-9220000000000000000 NULL
var5 var6
@@ -17163,7 +18620,7 @@ var5 var6
var7 var8
-9220000000000000000 NULL
f1 f2 f3
-9223372036854775807 9223372036854775807 NULL
+18400000000000000000 18400000000000000000 NULL
f4 f5 f6
-9220000000000000000 -9220000000000000000 NULL
f7 f8 f9
@@ -17171,7 +18628,7 @@ f7 f8 f9
f10 f11 f12
-9220000000000000000 -9220000000000000000 NULL
f1 f2 f3
--2 -2 -2
+18353255926290448384 18353255926290448384 18353255926290448384
f4 f5 f6
-9220000000000000000 6744073709551616 6744073709551616
f7 f8 f9
@@ -17179,7 +18636,7 @@ f7 f8 f9
f10 f11 f12
-9220000000000000000 6744073709551616 6744073709551616
var1 var2
--2 -2
+18353255926290448384 18353255926290448384
var3 var4
6744073709551616 6744073709551616
var5 var6
@@ -17237,9 +18694,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute08();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-368000000000000000 368000000000000000 368000000000000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+00368000000000000000 00368000000000000000 00368000000000000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-368000000000000000 368000000000000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+00368000000000000000 00368000000000000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute08;
DROP PROCEDURE sp8;
DROP PROCEDURE IF EXISTS sp9;
@@ -17291,9 +18748,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute09();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--18440000000000000 -18440000000000000 -18439999999999990 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+00000000000000000000 00000000000000000000 00000000000000000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--18440000000000000 -18439999999999990 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+00000000000000000000 00000000000000000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute09;
DROP PROCEDURE sp9;
DROP PROCEDURE IF EXISTS sp10;
@@ -17337,9 +18794,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute10();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--1000000000.000000000 -1000000000.000000000 -999999990.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-1000000000 -1000000000 -999999990 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--1000000000.000000000 -999999990.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-1000000000 -999999990 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute10;
DROP PROCEDURE sp10;
DROP PROCEDURE IF EXISTS sp11;
@@ -17372,9 +18829,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute11();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1000000000.000000000 1000000000.000000000 1000000010.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+1000000000 1000000000 1000000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1000000000.000000000 1000000010.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+1000000000 1000000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute11;
DROP PROCEDURE sp11;
DROP PROCEDURE IF EXISTS sp12;
@@ -17407,9 +18864,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute12();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-99999999999.000000000 99999999999.000000000 100000000009.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+9999999999 9999999999 9999999999 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-99999999999.000000000 100000000009.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+9999999999 9999999999 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute12;
DROP PROCEDURE sp12;
DROP PROCEDURE IF EXISTS sp13;
@@ -17442,9 +18899,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute13();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--1000000000.000000000 -1000000000.000000000 -999999990.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000010 0000000010 0000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--1000000000.000000000 -999999990.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000010 0000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute13;
DROP PROCEDURE sp13;
DROP PROCEDURE IF EXISTS sp14;
@@ -17477,9 +18934,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute14();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--1000000000000000000000.000000000 -1000000000000000000000.000000000 -999999999999999999990.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-1000000000000000000000.000000000000000000000000000000 -1000000000000000000000.000000000000000000000000000000 -999999999999999999990.000000000000000000000000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--1000000000000000000000.000000000 -999999999999999999990.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-1000000000000000000000.000000000000000000000000000000 -999999999999999999990.000000000000000000000000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute14;
DROP PROCEDURE sp14;
DROP PROCEDURE IF EXISTS sp15;
@@ -17545,9 +19002,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute16();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000010 0000000000000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute16;
DROP PROCEDURE sp16;
DROP PROCEDURE IF EXISTS sp17;
@@ -17579,9 +19036,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute17();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+10 10 20 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10 20 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute17;
DROP PROCEDURE sp17;
DROP PROCEDURE IF EXISTS sp18;
@@ -17613,9 +19070,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute18();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000010 0000000000000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute18;
DROP PROCEDURE sp18;
DROP PROCEDURE IF EXISTS sp19;
@@ -17647,9 +19104,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute19();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+10 10 20 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10 20 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute19;
DROP PROCEDURE sp19;
DROP PROCEDURE IF EXISTS sp20;
@@ -17681,9 +19138,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute20();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000010 000000000010 000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000010 000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute20;
DROP PROCEDURE sp20;
DROP PROCEDURE IF EXISTS sp21;
@@ -17715,9 +19172,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute21();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000010 000000000010 000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000010 000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute21;
DROP PROCEDURE sp21;
DROP PROCEDURE IF EXISTS sp22;
@@ -17783,9 +19240,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute23();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--999999999.000000000 -999999999.000000000 -999999989.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-1000000000 -1000000000 -999999990 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--999999999.000000000 -999999989.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-1000000000 -999999990 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute23;
DROP PROCEDURE sp23;
DROP PROCEDURE IF EXISTS sp24;
@@ -17817,9 +19274,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute24();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1.10000 1.10000 11.10000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+1.1 1.1 11.1 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1.10000 11.10000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+1.1 11.1 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute24;
DROP PROCEDURE sp24;
DROP PROCEDURE IF EXISTS sp25;
@@ -17851,9 +19308,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute25();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--65402 -65402 -65392 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-32758 -32758 -32748 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--65402 -65392 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-32758 -32748 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute25;
DROP PROCEDURE sp25;
DROP PROCEDURE IF EXISTS sp26;
@@ -17919,9 +19376,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute27();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-26:00:00.999997 26:00:00.999997 28:00:01.999995 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+25:59:59 25:59:59 27:59:59 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-26:00:00.999997 28:00:01.999995 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+25:59:59 27:59:59 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute27;
DROP PROCEDURE sp27;
DROP PROCEDURE IF EXISTS sp28;
@@ -17953,9 +19410,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute28();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1998-01-02 01:01:01.000001 1998-01-02 01:01:01.000001 1998-01-03 02:02:02.000003 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+1998-01-02 01:01:00 1998-01-02 01:01:00 1998-01-03 02:02:01 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1998-01-02 01:01:01.000001 1998-01-03 02:02:02.000003 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+1998-01-02 01:01:00 1998-01-03 02:02:01 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute28;
DROP PROCEDURE sp28;
DROP PROCEDURE IF EXISTS sp29;
@@ -17987,9 +19444,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute29();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+10 10 20 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10 20 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute29;
DROP PROCEDURE sp29;
DROP PROCEDURE IF EXISTS sp30;
@@ -18021,9 +19478,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute30();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000010 000000000010 000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000010 000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute30;
DROP PROCEDURE sp30;
DROP PROCEDURE IF EXISTS sp31;
@@ -18089,9 +19546,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute32();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+10 10 20 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10 20 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute32;
DROP PROCEDURE sp32;
DROP PROCEDURE IF EXISTS sp33;
@@ -18123,9 +19580,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute33();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000010 000000000010 000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000010 000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute33;
DROP PROCEDURE sp33;
DROP PROCEDURE IF EXISTS sp34;
@@ -18191,9 +19648,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute35();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+10 10 20 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10 20 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute35;
DROP PROCEDURE sp35;
DROP PROCEDURE IF EXISTS sp36;
@@ -18225,9 +19682,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute36();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000010 000000000010 000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000010 000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute36;
DROP PROCEDURE sp36;
DROP PROCEDURE IF EXISTS sp37;
@@ -18293,9 +19750,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute38();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+10 10 20 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10 20 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute38;
DROP PROCEDURE sp38;
DROP PROCEDURE IF EXISTS sp39;
@@ -18327,9 +19784,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute39();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000010 0000000000000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute39;
DROP PROCEDURE sp39;
DROP PROCEDURE IF EXISTS sp40;
@@ -18361,9 +19818,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute40();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1.10000 1.10000 11.10000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+10 10 20 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1.10000 11.10000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10 20 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute40;
DROP PROCEDURE sp40;
DROP PROCEDURE IF EXISTS sp41;
@@ -18395,9 +19852,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute41();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1.10000 1.10000 11.10000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000010 0000000000000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1.10000 11.10000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute41;
DROP PROCEDURE sp41;
DROP PROCEDURE IF EXISTS sp42;
@@ -18429,9 +19886,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute42();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1.10000 1.10000 11.10000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000010 0000000000000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1.10000 11.10000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute42;
DROP PROCEDURE sp42;
DROP PROCEDURE IF EXISTS sp43;
@@ -18463,9 +19920,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute43();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--999999999.000000000 -999999999.000000000 -999999989.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-1000000000 -1000000000 -999999990 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--999999999.000000000 -999999989.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-1000000000 -999999990 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute43;
DROP PROCEDURE sp43;
DROP PROCEDURE IF EXISTS sp44;
@@ -18497,9 +19954,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute44();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-9999999999.000000000 9999999999.000000000 10000000009.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+9999999999 9999999999 9999999999 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-9999999999.000000000 10000000009.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+9999999999 9999999999 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute44;
DROP PROCEDURE sp44;
DROP PROCEDURE IF EXISTS sp45;
@@ -18531,9 +19988,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute45();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--99999999.000000000 -99999999.000000000 -99999989.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000010 0000000010 0000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--99999999.000000000 -99999989.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000010 0000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute45;
DROP PROCEDURE sp45;
DROP PROCEDURE IF EXISTS sp46;
@@ -18565,9 +20022,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute46();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--999999999.000000000 -999999999.000000000 -999999989.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-1000000000 -1000000000 -999999990 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--999999999.000000000 -999999989.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-1000000000 -999999990 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute46;
DROP PROCEDURE sp46;
DROP PROCEDURE IF EXISTS sp47;
@@ -18599,9 +20056,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute47();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-9999999999.000000000 9999999999.000000000 10000000009.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+9999999999 9999999999 9999999999 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-9999999999.000000000 10000000009.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+9999999999 9999999999 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute47;
DROP PROCEDURE sp47;
DROP PROCEDURE IF EXISTS sp48;
@@ -18633,9 +20090,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute48();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--99999999.000000000 -99999999.000000000 -99999989.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000010 0000000010 0000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--99999999.000000000 -99999989.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000010 0000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute48;
DROP PROCEDURE sp48;
DROP PROCEDURE IF EXISTS sp49;
@@ -18667,9 +20124,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute49();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--999999999.000000000 -999999999.000000000 -999999989.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+10 10 20 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--999999999.000000000 -999999989.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10 20 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute49;
DROP PROCEDURE sp49;
DROP PROCEDURE IF EXISTS sp50;
@@ -18701,9 +20158,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute50();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-9999999999.000000000 9999999999.000000000 10000000009.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+9999999999 9999999999 9999999999 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-9999999999.000000000 10000000009.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+9999999999 9999999999 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute50;
DROP PROCEDURE sp50;
DROP PROCEDURE IF EXISTS sp51;
@@ -18735,9 +20192,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute51();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--99999999.000000000 -99999999.000000000 -99999989.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000010 0000000010 0000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--99999999.000000000 -99999989.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000010 0000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute51;
DROP PROCEDURE sp51;
DROP PROCEDURE IF EXISTS sp52;
@@ -18769,9 +20226,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute52();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--100000000000000000000.000000000 -10000000000000000000000.000000000 -99999999999999999990.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-100000000000000000000.000000000000000000000000000000 -10000000000000000000000.000000000000000000000000000000 -99999999999999999990.000000000000000000000000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--10000000000000000000000.000000000 -99999999999999999990.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-10000000000000000000000.000000000000000000000000000000 -99999999999999999990.000000000000000000000000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute52;
DROP PROCEDURE sp52;
DROP PROCEDURE IF EXISTS sp53;
@@ -18803,9 +20260,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute53();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--100000000000000000000.000000000 -10000000000000000000000.000000000 -99999999999999999990.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-100000000000000000000 -10000000000000000000000 -99999999999999999990 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--10000000000000000000000.000000000 -99999999999999999990.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-10000000000000000000000 -99999999999999999990 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute53;
DROP PROCEDURE sp53;
DROP PROCEDURE IF EXISTS sp54;
@@ -18837,9 +20294,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute54();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-100000000000000000000.000000000 10000000000000000000000.000000000 100000000000000000010.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+100000000000000000000 10000000000000000000000 100000000000000000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-10000000000000000000000.000000000 100000000000000000010.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10000000000000000000000 100000000000000000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute54;
DROP PROCEDURE sp54;
DROP PROCEDURE IF EXISTS sp55;
@@ -18871,9 +20328,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute55();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--100000000000000000000.000000000 -10000000000000000000000.000000000 -99999999999999999990.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000000000000000000000000000000000000000000000000000000000010 0000000000000000000000000000000000000000000000000000000000000010 0000000000000000000000000000000000000000000000000000000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--10000000000000000000000.000000000 -99999999999999999990.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000000000000000000000000000000000000000000000000000000000010 0000000000000000000000000000000000000000000000000000000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute55;
DROP PROCEDURE sp55;
DROP PROCEDURE IF EXISTS sp56;
@@ -18905,9 +20362,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute56();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-61 61 71 61 61 71 61 61 71 61 61 71
+2061 2061 2071 2061 2061 2071 2061 2061 2071 2061 2061 2071
var1 var2 var3 var4 var5 var6 var7 var8
-61 71 61 71 61 71 61 71
+2061 2071 2061 2071 2061 2071 2061 2071
DROP PROCEDURE spexecute56;
DROP PROCEDURE sp56;
DROP PROCEDURE IF EXISTS sp57;
@@ -19041,9 +20498,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute60();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-ah ah aah ah ah aah ah ah aah ah ah aah
+a a a a a a a a a a a a
var1 var2 var3 var4 var5 var6 var7 var8
-ah aah ah aah ah aah ah aah
+a a a a a a a a
DROP PROCEDURE spexecute60;
DROP PROCEDURE sp60;
DROP PROCEDURE IF EXISTS sp61;
@@ -19075,9 +20532,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute61();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-ah ah aah ah ah aah ah ah NULL ah ah aah
+a a a a a a a a NULL a a a
var1 var2 var3 var4 var5 var6 var7 var8
-ah aah ah aah ah NULL ah aah
+a a a a a NULL a a
DROP PROCEDURE spexecute61;
DROP PROCEDURE sp61;
DROP PROCEDURE IF EXISTS sp62;
@@ -19177,9 +20634,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute64();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1000000000.000000000 1000000000.000000000 1000000010.000000000 1000000000.000000000 1000000000.000000000 1000000010.000000000 1000000000.000000000 1000000000.000000000 1000000010.000000000 1000000000.000000000 1000000000.000000000 1000000010.000000000
+1000000000 1000000000 1000000010 1000000000 1000000000 1000000010 1000000000 1000000000 1000000010 1000000000 1000000000 1000000010
var1 var2 var3 var4 var5 var6 var7 var8
-1000000000.000000000 1000000010.000000000 1000000000.000000000 1000000010.000000000 1000000000.000000000 1000000010.000000000 1000000000.000000000 1000000010.000000000
+1000000000 1000000010 1000000000 1000000010 1000000000 1000000010 1000000000 1000000010
DROP PROCEDURE spexecute64;
DROP PROCEDURE sp64;
DROP PROCEDURE IF EXISTS sp65;
@@ -19211,9 +20668,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute65();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-999999999.000000000 999999999.000000000 1000000009.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+1000000000 1000000000 1000000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-999999999.000000000 1000000009.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+1000000000 1000000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute65;
DROP PROCEDURE sp65;
DROP PROCEDURE IF EXISTS sp66;
@@ -19245,9 +20702,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute66();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-10000000000000000.000000000 10000000000000000.000000000 10000000000000010.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+10000000000000000.000000000000000000000000000000 10000000000000000.000000000000000000000000000000 10000000000000010.000000000000000000000000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-10000000000000000.000000000 10000000000000010.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10000000000000000.000000000000000000000000000000 10000000000000010.000000000000000000000000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute66;
DROP PROCEDURE sp66;
DROP PROCEDURE IF EXISTS sp67;
@@ -19279,9 +20736,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute67();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-10000000000000000.000000000 10000000000000000.000000000 10000000000000010.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000000000010000000000000000.000000000000000000000000000000 000000000000000010000000000000000.000000000000000000000000000000 000000000000000010000000000000010.000000000000000000000000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-10000000000000000.000000000 10000000000000010.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000000000010000000000000000.000000000000000000000000000000 000000000000000010000000000000010.000000000000000000000000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute67;
DROP PROCEDURE sp67;
DROP PROCEDURE IF EXISTS sp68;
@@ -19313,9 +20770,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute68();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--1000000000000000000000.000000000 -1000000000000000000000.000000000 -999999999999999999990.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000000000000000000000000010.000000000000000000000000000000 000000000000000000000000000000010.000000000000000000000000000000 000000000000000000000000000000020.000000000000000000000000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--1000000000000000000000.000000000 -999999999999999999990.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000000000000000000000000010.000000000000000000000000000000 000000000000000000000000000000020.000000000000000000000000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute68;
DROP PROCEDURE sp68;
DROP PROCEDURE IF EXISTS sp69;
@@ -19347,9 +20804,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute69();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--100000000000000000000.000000000 -10000000000000000000000.000000000 -99999999999999999990.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-100000000000000000000 -10000000000000000000000 -99999999999999999990 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--10000000000000000000000.000000000 -99999999999999999990.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-10000000000000000000000 -99999999999999999990 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute69;
DROP PROCEDURE sp69;
DROP PROCEDURE IF EXISTS sp70;
@@ -19381,9 +20838,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute70();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-100000000000000000000.000000000 10000000000000000000000.000000000 100000000000000000010.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+100000000000000000000 10000000000000000000000 100000000000000000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-10000000000000000000000.000000000 100000000000000000010.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10000000000000000000000 100000000000000000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute70;
DROP PROCEDURE sp70;
DROP PROCEDURE IF EXISTS sp71;
@@ -19415,9 +20872,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute71();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-100000000000000000000.000000000 10000000000000000000000.000000000 100000000000000000010.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000000000000000000000000000000000000000100000000000000000000 0000000000000000000000000000000000000000010000000000000000000000 0000000000000000000000000000000000000000000100000000000000000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-10000000000000000000000.000000000 100000000000000000010.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000000000000000000000000000000000000010000000000000000000000 0000000000000000000000000000000000000000000100000000000000000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute71;
DROP PROCEDURE sp71;
DROP PROCEDURE IF EXISTS sp72;
@@ -19449,9 +20906,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute72();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1.000000000 1.000000000 11.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000000000000000000000000000000000000000000000000000000000010 0000000000000000000000000000000000000000000000000000000000000010 0000000000000000000000000000000000000000000000000000000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1.000000000 11.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000000000000000000000000000000000000000000000000000000000010 0000000000000000000000000000000000000000000000000000000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute72;
DROP PROCEDURE sp72;
DROP PROCEDURE IF EXISTS sp73;
@@ -19483,9 +20940,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute73();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1.000000000 1.000000000 11.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+10 10 20 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1.000000000 11.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10 20 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute73;
DROP PROCEDURE sp73;
DROP PROCEDURE IF EXISTS sp74;
@@ -19517,9 +20974,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute74();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1.000000000 1.000000000 11.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000010 0000000010 0000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1.000000000 11.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000010 0000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute74;
DROP PROCEDURE sp74;
DROP PROCEDURE IF EXISTS sp75;
@@ -19551,9 +21008,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute75();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--1000000000.000000000 -1000000000.000000000 -999999990.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000010 0000000010 0000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--1000000000.000000000 -999999990.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000010 0000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute75;
DROP PROCEDURE sp75;
DROP PROCEDURE IF EXISTS sp76;
@@ -19585,9 +21042,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute76();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000010 000000000010 000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000010 000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute76;
DROP PROCEDURE sp76;
DROP PROCEDURE IF EXISTS sp77;
@@ -19619,9 +21076,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute77();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000010 000000000010 000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000010 000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute77;
DROP PROCEDURE sp77;
DROP PROCEDURE IF EXISTS sp78;
@@ -19653,9 +21110,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute78();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000010 000000000010 000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000010 000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute78;
DROP PROCEDURE sp78;
DROP PROCEDURE IF EXISTS sp79;
@@ -19687,9 +21144,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute79();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000010 0000000000000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute79;
DROP PROCEDURE sp79;
DROP PROCEDURE IF EXISTS sp80;
@@ -19721,9 +21178,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute80();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--2150000000 -2150000000 -2149999990 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-2147483638 -2147483638 -2147483628 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--2150000000 -2149999990 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-2147483638 -2147483628 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute80;
DROP PROCEDURE sp80;
DROP PROCEDURE IF EXISTS sp81;
@@ -19823,9 +21280,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute83();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-215000000 215000000 215000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0215000000 0215000000 0215000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-215000000 215000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0215000000 0215000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute83;
DROP PROCEDURE sp83;
DROP PROCEDURE IF EXISTS sp84;
@@ -19857,9 +21314,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute84();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--8388600 -8388600 -8388590 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-8388598 -8388598 -8388588 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--8388600 -8388590 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-8388598 -8388588 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute84;
DROP PROCEDURE sp84;
DROP PROCEDURE IF EXISTS sp85;
@@ -19925,9 +21382,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute86();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-16777210 16777210 16777220 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+16777210 16777210 16777215 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-16777210 16777220 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+16777210 16777215 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute86;
DROP PROCEDURE sp86;
DROP PROCEDURE IF EXISTS sp87;
@@ -19959,9 +21416,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute87();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--8388602 -8388602 -8388592 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+16777215 16777215 16777215 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--8388602 -8388592 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+16777215 16777215 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute87;
DROP PROCEDURE sp87;
DROP PROCEDURE IF EXISTS sp88;
@@ -19993,9 +21450,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute88();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-99999999.000000000 99999999.000000000 100000009.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0100000000 0100000000 0100000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-99999999.000000000 100000009.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0100000000 0100000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute88;
DROP PROCEDURE sp88;
DROP PROCEDURE IF EXISTS sp89;
@@ -20027,9 +21484,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute89();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-99999999.000000000 99999999.000000000 100000009.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0100000000 0100000000 0100000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-99999999.000000000 100000009.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0100000000 0100000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute89;
DROP PROCEDURE sp89;
DROP PROCEDURE IF EXISTS sp90;
@@ -20061,9 +21518,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute90();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-100000000000000000000.000000000 10000000000000000000000.000000000 100000000000000000010.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+100000000000000000000.000000000000000000000000000000 10000000000000000000000.000000000000000000000000000000 100000000000000000010.000000000000000000000000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-10000000000000000000000.000000000 100000000000000000010.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10000000000000000000000.000000000000000000000000000000 100000000000000000010.000000000000000000000000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute90;
DROP PROCEDURE sp90;
DROP PROCEDURE IF EXISTS sp91;
@@ -20095,9 +21552,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute91();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-100000000000000000000.000000000 10000000000000000000000.000000000 100000000000000000010.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000000100000000000000000000.000000000000000000000000000000 000000000010000000000000000000000.000000000000000000000000000000 000000000000100000000000000000010.000000000000000000000000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-10000000000000000000000.000000000 100000000000000000010.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000010000000000000000000000.000000000000000000000000000000 000000000000100000000000000000010.000000000000000000000000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute91;
DROP PROCEDURE sp91;
DROP PROCEDURE IF EXISTS sp92;
@@ -20129,9 +21586,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute92();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--100000000000000000000.000000000 -10000000000000000000000.000000000 -99999999999999999990.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000000000000000000000000010.000000000000000000000000000000 000000000000000000000000000000010.000000000000000000000000000000 000000000000000000000000000000020.000000000000000000000000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--10000000000000000000000.000000000 -99999999999999999990.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000000000000000000000000010.000000000000000000000000000000 000000000000000000000000000000020.000000000000000000000000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute92;
DROP PROCEDURE sp92;
DROP PROCEDURE IF EXISTS sp93;
@@ -20163,9 +21620,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute93();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-100000000000000000000.000000000 10000000000000000000000.000000000 100000000000000000010.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000000000000000000000000000000000000000100000000000000000000 0000000000000000000000000000000000000000010000000000000000000000 0000000000000000000000000000000000000000000100000000000000000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-10000000000000000000000.000000000 100000000000000000010.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000000000000000000000000000000000000010000000000000000000000 0000000000000000000000000000000000000000000100000000000000000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute93;
DROP PROCEDURE sp93;
DROP PROCEDURE IF EXISTS sp94;
@@ -20231,9 +21688,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute95();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-65532 65532 65542 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+65532 65532 65535 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-65532 65542 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+65532 65535 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute95;
DROP PROCEDURE sp95;
DROP PROCEDURE IF EXISTS sp96;
@@ -20265,9 +21722,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute96();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-65532 65532 65542 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+65532 65532 65535 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-65532 65542 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+65532 65535 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute96;
DROP PROCEDURE sp96;
DROP PROCEDURE IF EXISTS sp97;
@@ -20299,9 +21756,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute97();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--32602 -32602 -32592 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+65535 65535 65535 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--32602 -32592 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+65535 65535 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute97;
DROP PROCEDURE sp97;
DROP PROCEDURE IF EXISTS sp98;
@@ -20367,9 +21824,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute99();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-252 252 262 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+252 252 255 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-252 262 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+252 255 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute99;
DROP PROCEDURE sp99;
DROP PROCEDURE IF EXISTS sp100;
@@ -20435,9 +21892,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute101();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--102 -102 -92 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+255 255 255 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--102 -92 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+255 255 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute101;
DROP PROCEDURE sp101;
USE db_storedproc;
@@ -20462,13 +21919,13 @@ set a = '2005-03-14 01:01:02';
insert into temp_table values(a);
END//
show CREATE PROCEDURE sp2;
-Procedure sql_mode Create Procedure
-sp2 ALLOW_INVALID_DATES CREATE PROCEDURE `sp2`()
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp2 ALLOW_INVALID_DATES CREATE DEFINER=`root`@`localhost` PROCEDURE `sp2`()
BEGIN
declare a datetime;
set a = '2005-03-14 01:01:02';
insert into temp_table values(a);
-END
+END latin1 latin1_swedish_ci latin1_swedish_ci
set @@sql_mode = 'traditional';
CALL sp2 ();
SELECT * from temp_table;
@@ -20498,15 +21955,15 @@ set b = 5;
SELECT not 1 between a and b;
END//
show CREATE PROCEDURE sp3;
-Procedure sql_mode Create Procedure
-sp3 HIGH_NOT_PRECEDENCE CREATE PROCEDURE `sp3`()
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp3 HIGH_NOT_PRECEDENCE CREATE DEFINER=`root`@`localhost` PROCEDURE `sp3`()
BEGIN
declare a int signed;
declare b int unsigned;
set a = -5;
set b = 5;
SELECT not 1 between a and b;
-END
+END latin1 latin1_swedish_ci latin1_swedish_ci
set @@sql_mode='';
CALL sp3();
not 1 between a and b
@@ -20541,8 +21998,8 @@ set c = b/a;
show warnings;
END//
show CREATE PROCEDURE sp4;
-Procedure sql_mode Create Procedure
-sp4 REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI,ERROR_FOR_DIVISION_BY_ZERO CREATE PROCEDURE "sp4"()
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp4 REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI,ERROR_FOR_DIVISION_BY_ZERO CREATE DEFINER="root"@"localhost" PROCEDURE "sp4"()
BEGIN
declare a int;
declare b int;
@@ -20551,7 +22008,7 @@ set a = 0;
set b = 1;
set c = b/a;
show warnings;
-END
+END latin1 latin1_swedish_ci latin1_swedish_ci
set @@sql_mode='';
CALL sp4();
Level Code Message
@@ -20589,37 +22046,37 @@ set @x=i1;
set @y=@x;
END//
show CREATE PROCEDURE sp6a;
-Procedure sql_mode Create Procedure
-sp6a CREATE PROCEDURE `sp6a`(i1 longtext, out i2 mediumint , inout i3 longblob, in i4 year, out i5 real)
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp6a CREATE DEFINER=`root`@`localhost` PROCEDURE `sp6a`(i1 longtext, out i2 mediumint , inout i3 longblob, in i4 year, out i5 real)
BEGIN
set @x=i1;
set @y=@x;
-END
+END latin1 latin1_swedish_ci latin1_swedish_ci
show CREATE PROCEDURE sp6b;
-Procedure sql_mode Create Procedure
-sp6b CREATE PROCEDURE `sp6b`(out i1 longtext, out i2 mediumint , out i3 longblob, out i4 year, out i5 real)
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp6b CREATE DEFINER=`root`@`localhost` PROCEDURE `sp6b`(out i1 longtext, out i2 mediumint , out i3 longblob, out i4 year, out i5 real)
DETERMINISTIC
BEGIN
set @x=i1;
set @y=@x;
-END
+END latin1 latin1_swedish_ci latin1_swedish_ci
show CREATE PROCEDURE sp6c;
-Procedure sql_mode Create Procedure
-sp6c CREATE PROCEDURE `sp6c`(inout i1 longtext, inout i2 mediumint , inout i3 longblob, inout i4 year, inout i5 real)
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp6c CREATE DEFINER=`root`@`localhost` PROCEDURE `sp6c`(inout i1 longtext, inout i2 mediumint , inout i3 longblob, inout i4 year, inout i5 real)
COMMENT 'this is a comment'
BEGIN
set @x=i1;
set @y=@x;
-END
+END latin1 latin1_swedish_ci latin1_swedish_ci
SHOW PROCEDURE status like 'sp6a';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp6a PROCEDURE root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp6a PROCEDURE root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
SHOW PROCEDURE status like 'sp6b';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp6b PROCEDURE root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp6b PROCEDURE root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
SHOW PROCEDURE status like 'sp6c';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp6c PROCEDURE root@localhost modified created DEFINER this is a comment
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp6c PROCEDURE root@localhost modified created DEFINER this is a comment latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE sp6a;
DROP PROCEDURE sp6b;
DROP PROCEDURE sp6c;
@@ -20633,8 +22090,8 @@ set @x=i1;
set @y=@x;
END//
SHOW PROCEDURE status like 'sp6';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp6 PROCEDURE root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp6 PROCEDURE root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE sp6;
Testcase 4.8.3:
@@ -20659,8 +22116,8 @@ set @y=@x;
return 0;
END//
show function status like 'sp6';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp6 FUNCTION root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp6 FUNCTION root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION sp6;
Testcase 4.8.5:
@@ -20673,7 +22130,7 @@ Testcase 4.8.6:
--------------------------------------------------------------------------------
DROP PROCEDURE IF EXISTS sp6;
show procedure status like 'sp6';
-Db Name Type Definer Modified Created Security_type Comment
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
Testcase 4.8.7:
--------------------------------------------------------------------------------
@@ -20694,7 +22151,7 @@ BEGIN
return i1;
END//
show procedure status like 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
DROP FUNCTION fn1;
Testcase 4.8.9:
@@ -20708,8 +22165,8 @@ BEGIN
return i1;
END//
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION fn1;
Testcase 4.8.11:
@@ -20738,7 +22195,7 @@ Testcase 4.8.13:
--------------------------------------------------------------------------------
DROP FUNCTION IF EXISTS f1000;
SHOW FUNCTION STATUS LIKE 'f1000';
-Db Name Type Definer Modified Created Security_type Comment
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
Testcase 4.8.14:
--------------------------------------------------------------------------------
@@ -20760,7 +22217,7 @@ set @x=i1;
set @y=@x;
END//
show function status like 'sp6';
-Db Name Type Definer Modified Created Security_type Comment
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
DROP PROCEDURE sp6;
Testcase 4.8.16:
@@ -20777,8 +22234,8 @@ END//
alter procedure sp6 sql security invoker;
alter procedure sp6 comment 'this is a new comment';
SHOW PROCEDURE status like 'sp6';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp6 PROCEDURE root@localhost modified created INVOKER this is a new comment
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp6 PROCEDURE root@localhost modified created INVOKER this is a new comment latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE sp6;
Testcase 4.8.18:
@@ -20790,12 +22247,12 @@ return x;
END//
alter function fn1 sql security invoker;
show create function fn1;
-Function sql_mode Create Function
-fn1 CREATE FUNCTION `fn1`(x int) RETURNS int(11)
+Function sql_mode Create Function character_set_client collation_connection Database Collation
+fn1 CREATE DEFINER=`root`@`localhost` FUNCTION `fn1`(x int) RETURNS int(11)
SQL SECURITY INVOKER
BEGIN
return x;
-END
+END latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION fn1;
Testcase 4.8.19:
@@ -20808,8 +22265,8 @@ END//
alter function fn1 sql security invoker;
alter function fn1 comment 'this is a function 3242#@%$#@';
show function status like 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created INVOKER this is a function 3242#@%$#@
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created INVOKER this is a function 3242#@%$#@ latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION fn1;
Testcase 4.8.20:
@@ -20822,13 +22279,13 @@ set @y=@x;
END//
alter procedure sp6 comment 'this is simple';
show CREATE PROCEDURE sp6;
-Procedure sql_mode Create Procedure
-sp6 CREATE PROCEDURE `sp6`(i1 int , i2 int)
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp6 CREATE DEFINER=`root`@`localhost` PROCEDURE `sp6`(i1 int , i2 int)
COMMENT 'this is simple'
BEGIN
set @x=i1;
set @y=@x;
-END
+END latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE sp6;
Testcase 4.8.21:
@@ -20853,7 +22310,7 @@ set @y=@x;
END//
DROP PROCEDURE sp6;
SHOW PROCEDURE status like 'sp6';
-Db Name Type Definer Modified Created Security_type Comment
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
Testcase 4.8.23:
--------------------------------------------------------------------------------
@@ -20875,7 +22332,7 @@ return i1;
END//
DROP FUNCTION fn1;
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
Section 3.1.9 - Routine body checks:
--------------------------------------------------------------------------------
@@ -20894,16 +22351,16 @@ SELECT * from t9 limit 0, 100;
END//
CALL sp6 (10, 20, 30, 40, 50);
f1 f2 f3
--5000 a` -5000
--4999 aaa -4999
--4998 abaa -4998
--4997 acaaa -4997
--4996 adaaaa -4996
--4995 aeaaaaa -4995
--4994 afaaaaaa -4994
--4993 agaaaaaaa -4993
--4992 a^aaaaaaaa -4992
-4991 a_aaaaaaaaa -4991
+-4992 a^aaaaaaaa -4992
+-4993 agaaaaaaa -4993
+-4994 afaaaaaa -4994
+-4995 aeaaaaa -4995
+-4996 adaaaa -4996
+-4997 acaaa -4997
+-4998 abaa -4998
+-4999 aaa -4999
+-5000 a` -5000
DROP PROCEDURE sp6;
Testcase 4.9.2:
@@ -21363,9 +22820,16 @@ until done END repeat;
SELECT done;
close cur1;
END//
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+CALL h1();
+done
+0
+done
+1
+done
+1
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.14:
--------------------------------------------------------------------------------
@@ -21392,9 +22856,16 @@ until done END repeat;
SELECT done;
close cur1;
END//
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+CALL h1();
+done
+0
+done
+1
+done
+1
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.15:
--------------------------------------------------------------------------------
@@ -21422,9 +22893,16 @@ until done END repeat;
SELECT done;
close cur1;
END//
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+CALL h1();
+done
+0
+@x=1
+0
+done
+1
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.16:
--------------------------------------------------------------------------------
@@ -21452,17 +22930,16 @@ until done END repeat;
SELECT done;
close cur1;
END//
-CALL h1()
-# cleanup;
+CALL h1();
done
0
@x=1
0
done
1
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.17:
--------------------------------------------------------------------------------
@@ -21490,9 +22967,9 @@ done
0
done
1
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.18:
--------------------------------------------------------------------------------
@@ -21520,9 +22997,9 @@ done
0
done
1
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.19:
--------------------------------------------------------------------------------
@@ -21550,9 +23027,9 @@ END//
CALL h1();
done
0
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.20:
--------------------------------------------------------------------------------
@@ -21580,9 +23057,9 @@ END//
CALL h1();
done
0
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.21:
--------------------------------------------------------------------------------
@@ -21610,9 +23087,9 @@ done
0
done
1
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.22:
--------------------------------------------------------------------------------
@@ -21641,9 +23118,9 @@ done
0
done @x
1 1
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.23:
--------------------------------------------------------------------------------
@@ -21671,9 +23148,9 @@ END//
CALL h1();
done
0
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.24:
--------------------------------------------------------------------------------
@@ -21701,9 +23178,9 @@ END//
CALL h1();
done
0
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.25:
--------------------------------------------------------------------------------
@@ -21728,9 +23205,9 @@ END//
CALL h1();
done @x
1 1
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.26:
--------------------------------------------------------------------------------
@@ -21755,9 +23232,9 @@ END//
CALL h1();
done @x
1 1
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.27:
--------------------------------------------------------------------------------
@@ -21780,9 +23257,9 @@ set @x=1;
SELECT done, @x;
END//
CALL h1();
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.28:
--------------------------------------------------------------------------------
@@ -21805,9 +23282,9 @@ set @x=1;
SELECT done, @x;
END//
CALL h1();
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+drop table IF EXISTS res_t1;
+drop table IF EXISTS res_t2;
Testcase 4.11.29:
--------------------------------------------------------------------------------
@@ -21835,9 +23312,9 @@ END//
CALL h1();
done @x
1 1
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+drop table IF EXISTS res_t1;
+drop table IF EXISTS res_t2;
Testcase 4.11.30:
--------------------------------------------------------------------------------
@@ -21865,9 +23342,9 @@ END//
CALL h1();
done @x
1 1
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+drop table IF EXISTS res_t1;
+drop table IF EXISTS res_t2;
Testcase 4.11.31:
--------------------------------------------------------------------------------
@@ -21893,9 +23370,9 @@ set @x=1;
SELECT done, @x;
END//
CALL h1();
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+drop table IF EXISTS res_t1;
+drop table IF EXISTS res_t2;
Testcase 4.11.32:
--------------------------------------------------------------------------------
@@ -21921,9 +23398,9 @@ set @x=1;
SELECT done, @x;
END//
CALL h1();
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.33:
--------------------------------------------------------------------------------
@@ -21948,7 +23425,7 @@ set @x=1;
SELECT done, @x;
END//
ERROR 42000: Duplicate condition: condname
-drop table res_t1;
+DROP TABLE IF EXISTS res_t1;
Testcase 4.11.35:
--------------------------------------------------------------------------------
@@ -21973,7 +23450,21 @@ insert into res_t1 values (3, 'c');
END begin2_label;
END begin1_label//
ERROR 42000: Bad SQLSTATE: '020'
-drop table res_t1;
+CREATE PROCEDURE h1 ()
+begin1_label:BEGIN
+declare condname1 condition for sqlstate '020';
+declare condname2 condition for sqlstate 'wewe';
+declare condname3 condition for 9999;
+set @var2 = 1;
+insert into res_t1 values (2, 'b');
+begin2_label: BEGIN
+declare continue handler for sqlstate '90000023' set @var3= 1;
+set @var4 = 1;
+insert into res_t1 values (3, 'c');
+END begin2_label;
+END begin1_label//
+ERROR 42000: Bad SQLSTATE: '020'
+DROP TABLE IF EXISTS res_t1;
Testcase 4.11.36:
--------------------------------------------------------------------------------
@@ -21989,7 +23480,7 @@ set x1 = 2;
END;
SELECT @x, x1;
END//
-DROP PROCEDURE h1;
+DROP PROCEDURE IF EXISTS h1;
Testcase 4.11.40:
--------------------------------------------------------------------------------
@@ -22010,7 +23501,7 @@ declare exit handler for condname2 set x5 = 1;
END//
ERROR 42000: Duplicate handler declared in the same block
DROP PROCEDURE IF EXISTS h1;
-drop table res_t1;
+DROP TABLE IF EXISTS res_t1;
Testcase 4.11.41:
--------------------------------------------------------------------------------
@@ -22026,6 +23517,9 @@ set x1 = 2;
END;
SELECT @x, x1;
END//
+CALL h1();
+@x x1
+0 2
DROP PROCEDURE IF EXISTS h1;
* Testcase 3.1.2.53 (4.11.42):
@@ -22076,8 +23570,8 @@ CALL h1();
SELECT @done, @x;
@done @x
1 1
-DROP PROCEDURE h1;
-DROP TABLE res_t1;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
--source suite/funcs_1/storedproc/cleanup_sp_tb.inc
--------------------------------------------------------------------------------
diff --git a/mysql-test/suite/funcs_1/r/memory_storedproc_10.result b/mysql-test/suite/funcs_1/r/memory_storedproc_10.result
index c316ce36dde..b5c70ec1c95 100755
--- a/mysql-test/suite/funcs_1/r/memory_storedproc_10.result
+++ b/mysql-test/suite/funcs_1/r/memory_storedproc_10.result
@@ -58,6 +58,7 @@ load data infile 'MYSQL_TEST_DIR/suite/funcs_1/data/t4.txt' into table t11;
Section 3.1.10 - CALL checks:
--------------------------------------------------------------------------------
+USE db_storedproc;
Testcase 3.1.10.2 + 3.1.10.5:
-----------------------------
@@ -94,6 +95,7 @@ CALL sp31102();
ERROR 42000: execute command denied to user 'user_2'@'localhost' for routine 'db_storedproc.sp31102'
SELECT fn31105( 9 );
ERROR 42000: execute command denied to user 'user_2'@'localhost' for routine 'db_storedproc.fn31105'
+connection default;
USE db_storedproc;
root@localhost db_storedproc
@@ -114,6 +116,7 @@ a` a` 1000-01-01 -5000 a` -5000
SELECT fn31105( 9 );
fn31105( 9 )
81
+connection default;
USE db_storedproc;
root@localhost db_storedproc
@@ -180,6 +183,8 @@ DROP PROCEDURE IF EXISTS sp_ins_1;
DROP PROCEDURE IF EXISTS sp_ins_3;
DROP PROCEDURE IF EXISTS sp_upd;
DROP PROCEDURE IF EXISTS sp_ins_upd;
+DROP PROCEDURE IF EXISTS sp_del;
+DROP PROCEDURE IF EXISTS sp_with_rowcount;
CREATE TABLE temp(f1 CHAR(20),f2 CHAR(25),f3 DATE,f4 INT,f5 CHAR(25),f6 INT);
INSERT INTO temp SELECT * FROM t10;
CREATE PROCEDURE sp_ins_1()
@@ -207,49 +212,72 @@ END;
SELECT COUNT( f1 ), f1 FROM temp GROUP BY f1;
UPDATE temp SET temp.f1 = 'updated_2' WHERE temp.f1 ='qwe' AND temp.f2 = 'abc';
END//
+CREATE PROCEDURE sp_del()
+BEGIN
+DELETE FROM temp WHERE temp.f1 ='qwe' OR temp.f1 = 'updated_2';
+END//
+CREATE PROCEDURE sp_with_rowcount()
+BEGIN
+BEGIN
+INSERT INTO temp VALUES ('qwe', 'abc', '1989-11-09', 100, 'uvw', 1000),
+('qwe', 'xyz', '1998-03-26', 100, 'uvw', 1000),
+('qwe', 'abc', '2000-11-09', 100, 'uvw', 1000),
+('qwe', 'xyz', '2005-11-07', 100, 'uvw', 1000);
+END;
+SELECT row_count() AS 'row_count() after insert';
+SELECT row_count() AS 'row_count() after select row_count()';
+SELECT f1,f2,f3 FROM temp ORDER BY f1,f2,f3;
+UPDATE temp SET temp.f1 = 'updated_2' WHERE temp.f2 = 'abc';
+SELECT row_count() AS 'row_count() after update';
+SELECT f1,f2,f3 FROM temp ORDER BY f1,f2,f3;
+DELETE FROM temp WHERE temp.f1 = 'updated_2';
+SELECT row_count() AS 'row_count() after delete';
+END//
CALL sp_ins_1();
SELECT row_count();
row_count()
1
-SELECT * FROM temp ORDER BY f4;
+SELECT * FROM temp;
f1 f2 f3 f4 f5 f6
+a^aaaaaaaa a^aaaaaaaa 1000-01-09 -4992 a^aaaaaaaa -4992
+a_aaaaaaaaa a_aaaaaaaaa 1000-01-10 -4991 a_aaaaaaaaa -4991
a` a` 1000-01-01 -5000 a` -5000
aaa aaa 1000-01-02 -4999 aaa -4999
abaa abaa 1000-01-03 -4998 abaa -4998
+abc abc 2005-10-03 100 uvw 1000
acaaa acaaa 1000-01-04 -4997 acaaa -4997
adaaaa adaaaa 1000-01-05 -4996 adaaaa -4996
aeaaaaa aeaaaaa 1000-01-06 -4995 aeaaaaa -4995
afaaaaaa afaaaaaa 1000-01-07 -4994 afaaaaaa -4994
agaaaaaaa agaaaaaaa 1000-01-08 -4993 agaaaaaaa -4993
-a^aaaaaaaa a^aaaaaaaa 1000-01-09 -4992 a^aaaaaaaa -4992
-a_aaaaaaaaa a_aaaaaaaaa 1000-01-10 -4991 a_aaaaaaaaa -4991
-abc abc 2005-10-03 100 uvw 1000
CALL sp_ins_3();
SELECT row_count();
row_count()
1
-SELECT * FROM temp ORDER BY f4;
+SELECT * FROM temp;
f1 f2 f3 f4 f5 f6
+a^aaaaaaaa a^aaaaaaaa 1000-01-09 -4992 a^aaaaaaaa -4992
+a_aaaaaaaaa a_aaaaaaaaa 1000-01-10 -4991 a_aaaaaaaaa -4991
a` a` 1000-01-01 -5000 a` -5000
aaa aaa 1000-01-02 -4999 aaa -4999
abaa abaa 1000-01-03 -4998 abaa -4998
+abc abc 2005-10-03 100 uvw 1000
+abc xyz 1949-05-23 100 uvw 1000
+abc xyz 1989-11-09 100 uvw 1000
+abc xyz 2005-10-24 100 uvw 1000
acaaa acaaa 1000-01-04 -4997 acaaa -4997
adaaaa adaaaa 1000-01-05 -4996 adaaaa -4996
aeaaaaa aeaaaaa 1000-01-06 -4995 aeaaaaa -4995
afaaaaaa afaaaaaa 1000-01-07 -4994 afaaaaaa -4994
agaaaaaaa agaaaaaaa 1000-01-08 -4993 agaaaaaaa -4993
-a^aaaaaaaa a^aaaaaaaa 1000-01-09 -4992 a^aaaaaaaa -4992
-a_aaaaaaaaa a_aaaaaaaaa 1000-01-10 -4991 a_aaaaaaaaa -4991
-abc abc 2005-10-03 100 uvw 1000
-abc xyz 1949-05-23 100 uvw 1000
-abc xyz 1989-11-09 100 uvw 1000
-abc xyz 2005-10-24 100 uvw 1000
CALL sp_upd();
SELECT row_count();
row_count()
4
-SELECT * FROM temp ORDER BY f4;
+SELECT * FROM temp;
f1 f2 f3 f4 f5 f6
+a^aaaaaaaa a^aaaaaaaa 1000-01-09 -4992 a^aaaaaaaa -4992
+a_aaaaaaaaa a_aaaaaaaaa 1000-01-10 -4991 a_aaaaaaaaa -4991
a` a` 1000-01-01 -5000 a` -5000
aaa aaa 1000-01-02 -4999 aaa -4999
abaa abaa 1000-01-03 -4998 abaa -4998
@@ -258,8 +286,6 @@ adaaaa adaaaa 1000-01-05 -4996 adaaaa -4996
aeaaaaa aeaaaaa 1000-01-06 -4995 aeaaaaa -4995
afaaaaaa afaaaaaa 1000-01-07 -4994 afaaaaaa -4994
agaaaaaaa agaaaaaaa 1000-01-08 -4993 agaaaaaaa -4993
-a^aaaaaaaa a^aaaaaaaa 1000-01-09 -4992 a^aaaaaaaa -4992
-a_aaaaaaaaa a_aaaaaaaaa 1000-01-10 -4991 a_aaaaaaaaa -4991
updated abc 2005-10-03 100 uvw 1000
updated xyz 1949-05-23 100 uvw 1000
updated xyz 1989-11-09 100 uvw 1000
@@ -281,8 +307,10 @@ COUNT( f1 ) f1
SELECT row_count();
row_count()
3
-SELECT * FROM temp ORDER BY f4;
+SELECT * FROM temp;
f1 f2 f3 f4 f5 f6
+a^aaaaaaaa a^aaaaaaaa 1000-01-09 -4992 a^aaaaaaaa -4992
+a_aaaaaaaaa a_aaaaaaaaa 1000-01-10 -4991 a_aaaaaaaaa -4991
a` a` 1000-01-01 -5000 a` -5000
aaa aaa 1000-01-02 -4999 aaa -4999
abaa abaa 1000-01-03 -4998 abaa -4998
@@ -291,20 +319,67 @@ adaaaa adaaaa 1000-01-05 -4996 adaaaa -4996
aeaaaaa aeaaaaa 1000-01-06 -4995 aeaaaaa -4995
afaaaaaa afaaaaaa 1000-01-07 -4994 afaaaaaa -4994
agaaaaaaa agaaaaaaa 1000-01-08 -4993 agaaaaaaa -4993
-a^aaaaaaaa a^aaaaaaaa 1000-01-09 -4992 a^aaaaaaaa -4992
-a_aaaaaaaaa a_aaaaaaaaa 1000-01-10 -4991 a_aaaaaaaaa -4991
+qwe xyz 1998-03-26 100 uvw 1000
updated abc 2005-10-03 100 uvw 1000
updated xyz 1949-05-23 100 uvw 1000
updated xyz 1989-11-09 100 uvw 1000
updated xyz 2005-10-24 100 uvw 1000
updated_2 abc 1989-11-09 100 uvw 1000
-qwe xyz 1998-03-26 100 uvw 1000
updated_2 abc 2000-11-09 100 uvw 1000
updated_2 abc 2005-11-07 100 uvw 1000
+CALL sp_del();
+SELECT row_count();
+row_count()
+4
+SELECT * FROM temp;
+f1 f2 f3 f4 f5 f6
+a^aaaaaaaa a^aaaaaaaa 1000-01-09 -4992 a^aaaaaaaa -4992
+a_aaaaaaaaa a_aaaaaaaaa 1000-01-10 -4991 a_aaaaaaaaa -4991
+a` a` 1000-01-01 -5000 a` -5000
+aaa aaa 1000-01-02 -4999 aaa -4999
+abaa abaa 1000-01-03 -4998 abaa -4998
+acaaa acaaa 1000-01-04 -4997 acaaa -4997
+adaaaa adaaaa 1000-01-05 -4996 adaaaa -4996
+aeaaaaa aeaaaaa 1000-01-06 -4995 aeaaaaa -4995
+afaaaaaa afaaaaaa 1000-01-07 -4994 afaaaaaa -4994
+agaaaaaaa agaaaaaaa 1000-01-08 -4993 agaaaaaaa -4993
+updated abc 2005-10-03 100 uvw 1000
+updated xyz 1949-05-23 100 uvw 1000
+updated xyz 1989-11-09 100 uvw 1000
+updated xyz 2005-10-24 100 uvw 1000
+DELETE FROM temp;
+CALL sp_with_rowcount();
+row_count() after insert
+4
+row_count() after select row_count()
+-1
+f1 f2 f3
+qwe abc 1989-11-09
+qwe abc 2000-11-09
+qwe xyz 1998-03-26
+qwe xyz 2005-11-07
+row_count() after update
+2
+f1 f2 f3
+qwe xyz 1998-03-26
+qwe xyz 2005-11-07
+updated_2 abc 1989-11-09
+updated_2 abc 2000-11-09
+row_count() after delete
+2
+SELECT row_count();
+row_count()
+-1
+SELECT * FROM temp;
+f1 f2 f3 f4 f5 f6
+qwe xyz 1998-03-26 100 uvw 1000
+qwe xyz 2005-11-07 100 uvw 1000
DROP PROCEDURE sp_ins_1;
DROP PROCEDURE sp_ins_3;
DROP PROCEDURE sp_upd;
DROP PROCEDURE sp_ins_upd;
+DROP PROCEDURE sp_del;
+DROP PROCEDURE sp_with_rowcount;
DROP TABLE temp;
Testcase 3.1.10.8:
diff --git a/mysql-test/suite/funcs_1/r/memory_trig_03.result b/mysql-test/suite/funcs_1/r/memory_trig_03.result
index ae7b83f820d..072237f55de 100644
--- a/mysql-test/suite/funcs_1/r/memory_trig_03.result
+++ b/mysql-test/suite/funcs_1/r/memory_trig_03.result
@@ -180,15 +180,14 @@ insert 3.5.3.2-no
insert 3.5.3.6-no
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
-
-Trigger create disabled - should fail - Bug 8884
-------------------------------------------------
+create trigger trg4a_1 before INSERT on t1 for each row
+set new.f1 = 'trig 3.5.3.7-1a';
insert into t1 (f1) values ('insert 3.5.3.7-1a');
+ERROR 42000: UPDATE command denied to user 'test_noprivs'@'localhost' for column 'f1' in table 't1'
select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
insert 3.5.3.6-no
-insert 3.5.3.7-1a
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
drop trigger trg4a_1;
@@ -206,7 +205,6 @@ select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
insert 3.5.3.6-no
-insert 3.5.3.7-1a
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
trig 3.5.3.7-2a
@@ -235,29 +233,27 @@ Grants for test_noprivs@localhost
GRANT USAGE ON *.* TO 'test_noprivs'@'localhost' IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
GRANT SELECT, INSERT, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `priv_db`.* TO 'test_noprivs'@'localhost'
use priv_db;
-
-Trigger create disabled - should fail - Bug 8884
-------------------------------------------------
+create trigger trg4b_1 before UPDATE on t1 for each row
+set new.f1 = 'trig 3.5.3.7-1b';
insert into t1 (f1) values ('insert 3.5.3.7-1b');
select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
insert 3.5.3.6-no
-insert 3.5.3.7-1a
insert 3.5.3.7-1b
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
trig 3.5.3.7-2a
update t1 set f1 = 'update 3.5.3.7-1b' where f1 = 'insert 3.5.3.7-1b';
+ERROR 42000: UPDATE command denied to user 'test_noprivs'@'localhost' for column 'f1' in table 't1'
select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
insert 3.5.3.6-no
-insert 3.5.3.7-1a
+insert 3.5.3.7-1b
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
trig 3.5.3.7-2a
-update 3.5.3.7-1b
drop trigger trg4b_1;
show grants;
Grants for test_yesprivs@localhost
@@ -271,23 +267,21 @@ select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
insert 3.5.3.6-no
-insert 3.5.3.7-1a
+insert 3.5.3.7-1b
insert 3.5.3.7-2b
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
trig 3.5.3.7-2a
-update 3.5.3.7-1b
update t1 set f1 = 'update 3.5.3.7-2b' where f1 = 'insert 3.5.3.7-2b';
select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
insert 3.5.3.6-no
-insert 3.5.3.7-1a
+insert 3.5.3.7-1b
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
trig 3.5.3.7-2a
trig 3.5.3.7-2b
-update 3.5.3.7-1b
drop trigger trg4b_2;
Testcase 3.5.3.7c
@@ -313,21 +307,19 @@ Grants for test_noprivs@localhost
GRANT TRIGGER ON *.* TO 'test_noprivs'@'localhost' IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
GRANT SELECT, INSERT, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE VIEW, SHOW VIEW, TRIGGER ON `priv_db`.`t1` TO 'test_noprivs'@'localhost'
use priv_db;
-
-Trigger create disabled - should fail - Bug 8884
-------------------------------------------------
+create trigger trg4c_1 before INSERT on t1 for each row
+set new.f1 = 'trig 3.5.3.7-1c';
insert into t1 (f1) values ('insert 3.5.3.7-1c');
+ERROR 42000: UPDATE command denied to user 'test_noprivs'@'localhost' for column 'f1' in table 't1'
select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
insert 3.5.3.6-no
-insert 3.5.3.7-1a
-insert 3.5.3.7-1c
+insert 3.5.3.7-1b
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
trig 3.5.3.7-2a
trig 3.5.3.7-2b
-update 3.5.3.7-1b
drop trigger trg4c_1;
show grants;
Grants for test_yesprivs@localhost
@@ -341,14 +333,12 @@ select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
insert 3.5.3.6-no
-insert 3.5.3.7-1a
-insert 3.5.3.7-1c
+insert 3.5.3.7-1b
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
trig 3.5.3.7-2a
trig 3.5.3.7-2b
trig 3.5.3.7-2c
-update 3.5.3.7-1b
drop trigger trg4c_2;
Testcase 3.5.3.7d:
@@ -372,23 +362,20 @@ Grants for test_noprivs@localhost
GRANT TRIGGER ON *.* TO 'test_noprivs'@'localhost' IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
GRANT SELECT (f1), INSERT (f1) ON `priv_db`.`t1` TO 'test_noprivs'@'localhost'
use priv_db;
-
-Trigger create disabled - should fail - Bug 8884
-------------------------------------------------
+create trigger trg4d_1 before INSERT on t1 for each row
+set new.f1 = 'trig 3.5.3.7-1d';
insert into t1 (f1) values ('insert 3.5.3.7-1d');
+ERROR 42000: UPDATE command denied to user 'test_noprivs'@'localhost' for column 'f1' in table 't1'
select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
insert 3.5.3.6-no
-insert 3.5.3.7-1a
-insert 3.5.3.7-1c
-insert 3.5.3.7-1d
+insert 3.5.3.7-1b
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
trig 3.5.3.7-2a
trig 3.5.3.7-2b
trig 3.5.3.7-2c
-update 3.5.3.7-1b
drop trigger trg4d_1;
show grants;
Grants for test_yesprivs@localhost
@@ -402,16 +389,13 @@ select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
insert 3.5.3.6-no
-insert 3.5.3.7-1a
-insert 3.5.3.7-1c
-insert 3.5.3.7-1d
+insert 3.5.3.7-1b
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
trig 3.5.3.7-2a
trig 3.5.3.7-2b
trig 3.5.3.7-2c
trig 3.5.3.7-2d
-update 3.5.3.7-1b
drop trigger trg4d_2;
Testcase 3.5.3.8a:
@@ -436,14 +420,14 @@ use priv_db;
show grants;
Grants for test_noprivs@localhost
GRANT INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO 'test_noprivs'@'localhost' IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
-
-Trigger create disabled - should fail - Bug 8887
-------------------------------------------------
+create trigger trg5a_1 before INSERT on t1 for each row
+set @test_var = new.f1;
set @test_var = 'before trig 3.5.3.8-1a';
select @test_var;
@test_var
before trig 3.5.3.8-1a
insert into t1 (f1) values ('insert 3.5.3.8-1a');
+ERROR 42000: SELECT command denied to user 'test_noprivs'@'localhost' for column 'f1' in table 't1'
select @test_var;
@test_var
before trig 3.5.3.8-1a
@@ -491,15 +475,15 @@ Grants for test_noprivs@localhost
GRANT TRIGGER ON *.* TO 'test_noprivs'@'localhost' IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
GRANT INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `priv_db`.* TO 'test_noprivs'@'localhost'
use priv_db;
-
-Trigger create disabled - should fail - Bug 8887
-------------------------------------------------
+create trigger trg5b_1 before UPDATE on t1 for each row
+set @test_var= new.f1;
set @test_var= 'before trig 3.5.3.8-1b';
insert into t1 (f1) values ('insert 3.5.3.8-1b');
select @test_var;
@test_var
before trig 3.5.3.8-1b
update t1 set f1= 'update 3.5.3.8-1b' where f1 = 'insert 3.5.3.8-1b';
+ERROR 42000: SELECT command denied to user 'test_noprivs'@'localhost' for column 'f1' in table 't1'
select @test_var;
@test_var
before trig 3.5.3.8-1b
@@ -546,11 +530,11 @@ Grants for test_noprivs@localhost
GRANT TRIGGER ON *.* TO 'test_noprivs'@'localhost' IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
GRANT INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE VIEW, SHOW VIEW, TRIGGER ON `priv_db`.`t1` TO 'test_noprivs'@'localhost'
use priv_db;
-
-Trigger create disabled - should fail - Bug 8887
-------------------------------------------------
+create trigger trg5c_1 before INSERT on t1 for each row
+set @test_var= new.f1;
set @test_var= 'before trig 3.5.3.8-1c';
insert into t1 (f1) values ('insert 3.5.3.8-1c');
+ERROR 42000: SELECT command denied to user 'test_noprivs'@'localhost' for column 'f1' in table 't1'
select @test_var;
@test_var
before trig 3.5.3.8-1c
@@ -592,11 +576,11 @@ Grants for test_noprivs@localhost
GRANT TRIGGER ON *.* TO 'test_noprivs'@'localhost' IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
GRANT INSERT (f1), UPDATE (f1) ON `priv_db`.`t1` TO 'test_noprivs'@'localhost'
use priv_db;
-
-Trigger create disabled - should fail - Bug 8887
-------------------------------------------------
+create trigger trg5d_1 before INSERT on t1 for each row
+set @test_var= new.f1;
set @test_var='before trig 3.5.3.8-1d';
insert into t1 (f1) values ('insert 3.5.3.8-1d');
+ERROR 42000: SELECT command denied to user 'test_noprivs'@'localhost' for column 'f1' in table 't1'
select @test_var;
@test_var
before trig 3.5.3.8-1d
diff --git a/mysql-test/suite/funcs_1/r/memory_trig_03e.result b/mysql-test/suite/funcs_1/r/memory_trig_03e.result
index 78c07dc6d92..6078c48c8d7 100644
--- a/mysql-test/suite/funcs_1/r/memory_trig_03e.result
+++ b/mysql-test/suite/funcs_1/r/memory_trig_03e.result
@@ -571,10 +571,8 @@ test_yesprivs@localhost
use priv_db;
show triggers;
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 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;
diff --git a/mysql-test/suite/funcs_1/r/memory_trig_08.result b/mysql-test/suite/funcs_1/r/memory_trig_08.result
index c445f03a2c0..f1ef5e5211a 100644
--- a/mysql-test/suite/funcs_1/r/memory_trig_08.result
+++ b/mysql-test/suite/funcs_1/r/memory_trig_08.result
@@ -135,10 +135,10 @@ values ('1', 'Test 3.5.8.4', 222, 23456, 1.05);
Select f120, f122, f136, f144, f163 from tb3 where f122= 'Test 3.5.8.4';
f120 f122 f136 f144 f163
1 Test 3.5.8.4 00222 0000023456 1.050000000000000000000000000000
-select * from db_test.t1_i order by i120;
+select * from db_test.t1_i;
i120 i136 i144 i163
1 00222 0000023456 1.050000000000000000000000000000
-select * from db_test.t1_u order by u120;
+select * from db_test.t1_u;
u120 u136 u144 u163
a 00111 0000099999 999.990000000000000000000000000000
b 00222 0000023456 1.050000000000000000000000000000
@@ -146,7 +146,7 @@ c 00333 0000099999 999.990000000000000000000000000000
d 00222 0000023456 1.050000000000000000000000000000
e 00222 0000023456 1.050000000000000000000000000000
f 00333 0000099999 999.990000000000000000000000000000
-select * from db_test.t1_d order by d120;
+select * from db_test.t1_d;
d120 d136 d144 d163
a 00111 0000099999 999.990000000000000000000000000000
c 00333 0000099999 999.990000000000000000000000000000
@@ -339,20 +339,20 @@ set @test_var='Empty';
Insert into tb3 (f120, f122, f136, f144)
values ('a', 'Test 3.5.8.5-case', 5, 7);
select f120, f122, f136, f144, @test_var
-from tb3 where f122 = 'Test 3.5.8.5-case' order by f120;
+from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;
f120 f122 f136 f144 @test_var
A Test 3.5.8.5-case 00125 0000000007 A*seven
Insert into tb3 (f120, f122, f136, f144)
values ('b', 'Test 3.5.8.5-case', 71,16);
select f120, f122, f136, f144, @test_var
-from tb3 where f122 = 'Test 3.5.8.5-case' order by f120;
+from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;
f120 f122 f136 f144 @test_var
A Test 3.5.8.5-case 00125 0000000007 B*0000000016
B Test 3.5.8.5-case 00191 0000000016 B*0000000016
Insert into tb3 (f120, f122, f136, f144)
values ('c', 'Test 3.5.8.5-case', 80,1);
select f120, f122, f136, f144, @test_var
-from tb3 where f122 = 'Test 3.5.8.5-case' order by f120;
+from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;
f120 f122 f136 f144 @test_var
A Test 3.5.8.5-case 00125 0000000007 C=one
B Test 3.5.8.5-case 00191 0000000016 C=one
@@ -362,7 +362,7 @@ values ('d', 'Test 3.5.8.5-case', 152);
Warnings:
Warning 1265 Data truncated for column 'f120' at row 1
select f120, f122, f136, f144, @test_var
-from tb3 where f122 = 'Test 3.5.8.5-case' order by f120;
+from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;
f120 f122 f136 f144 @test_var
1 Test 3.5.8.5-case 00152 0000099999 1*0000099999
A Test 3.5.8.5-case 00125 0000000007 1*0000099999
@@ -373,7 +373,7 @@ values ('e', 'Test 3.5.8.5-case', 200, 8);
Warnings:
Warning 1265 Data truncated for column 'f120' at row 1
select f120, f122, f136, f144, @test_var
-from tb3 where f122 = 'Test 3.5.8.5-case' order by f120;
+from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;
f120 f122 f136 f144 @test_var
1 Test 3.5.8.5-case 00152 0000099999 1=eight
1 Test 3.5.8.5-case 00200 0000000008 1=eight
@@ -383,7 +383,7 @@ C Test 3.5.8.5-case 00200 0000000001 1=eight
Insert into tb3 (f120, f122, f136, f144)
values ('f', 'Test 3.5.8.5-case', 100, 8);
select f120, f122, f136, f144, @test_var
-from tb3 where f122 = 'Test 3.5.8.5-case' order by f120;
+from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;
f120 f122 f136 f144 @test_var
1 Test 3.5.8.5-case 00152 0000099999 1=eight
1 Test 3.5.8.5-case 00200 0000000008 1=eight
@@ -495,9 +495,38 @@ drop trigger trg7;
Testcase 3.5.8.6: (requirement void)
------------------------------------
+CREATE PROCEDURE sp_01 () BEGIN set @v1=1; END//
+CREATE TRIGGER trg8_1 BEFORE UPDATE ON tb3 FOR EACH ROW
+BEGIN
+CALL sp_01 ();
+END//
+Insert into tb3 (f120, f122, f136) values ('6', 'Test 3.5.8.6-insert', 101);
+update tb3 set f120='S', f136=111,
+f122='Test 3.5.8.6-tr8_1'
+ where f122='Test 3.5.8.6-insert';
+select f120, f122
+from tb3 where f122 like 'Test 3.5.8.6%' order by f120;
+f120 f122
+S Test 3.5.8.6-tr8_1
+DROP TRIGGER trg8_1;
+DROP PROCEDURE sp_01;
-Testcase 3.5.8.7: (Disabled as a result of bug _____)
------------------------------------------------------
+Testcase 3.5.8.7
+----------------
+Create trigger trg9_1 before update on tb3 for each row
+BEGIN
+Start transaction;
+Set new.f120='U';
+Commit;
+END//
+ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger.
+Create trigger trg9_2 before delete on tb3 for each row
+BEGIN
+Start transaction;
+Set @var2=old.f120;
+Rollback;
+END//
+ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger.
drop user test_general@localhost;
drop user test_general;
drop user test_super@localhost;
diff --git a/mysql-test/suite/funcs_1/r/memory_trig_1011ext.result b/mysql-test/suite/funcs_1/r/memory_trig_1011ext.result
index 451041575af..c0a7009737a 100644
--- a/mysql-test/suite/funcs_1/r/memory_trig_1011ext.result
+++ b/mysql-test/suite/funcs_1/r/memory_trig_1011ext.result
@@ -294,8 +294,8 @@ drop table t2;
drop table t3;
drop table t4;
-Testcase y.y.y.4: Recursive trigger/SP references (disabled bug 11889)
-----------------------------------------------------------------------
+Testcase y.y.y.4: Recursive trigger/SP references
+-------------------------------------------------
set @sql_mode='traditional';
create table t1_sp (
count integer,
diff --git a/mysql-test/suite/funcs_1/r/memory_views.result b/mysql-test/suite/funcs_1/r/memory_views.result
index 4bc0c4a3fa4..602f4de0264 100644
--- a/mysql-test/suite/funcs_1/r/memory_views.result
+++ b/mysql-test/suite/funcs_1/r/memory_views.result
@@ -127,11 +127,7 @@ USE test;
--------------------------------------------------------------------------------
There are some statements where the ps-protocol is switched off.
-Bug#11589: mysqltest, --ps-protocol, strange output, float/double/real with zerofill
---------------------------------------------------------------------------------
-
-! Attention: The file with the expected results suffers from
-Bug#10713: mysqldump includes database in create view and referenced tables
+Bug#32285: mysqltest, --ps-protocol, strange output, float/double/real with zerofill
--------------------------------------------------------------------------------
insert into test.tb2 (f59,f60) values (76710,226546);
insert into test.tb2 (f59,f60) values(2760,985654);
@@ -173,6 +169,58 @@ insert into tb2 (f59,f60,f61) values (109,108,104);
INSERT INTO tb2 (f59,f60) VALUES( 299,899 );
INSERT INTO tb2 (f59,f60) VALUES( 242,79 );
INSERT INTO tb2 (f59,f60) VALUES( 424,89 );
+SELECT * FROM tb2 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
+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
+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
+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
+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
Use test;
Testcase 3.3.1.1
@@ -207,27 +255,27 @@ f59 f60 f61
8 8 0000000008
9 9 0000000009
CREATE or REPLACE VIEW v1 AS select f59,f60,f61
-FROM test.tb2 limit 4,3;
-select * FROM v1 order by f59,f60,f61 limit 0,10;
+FROM test.tb2;
+select * FROM v1 order by f59,f60,f61 limit 4,3;
f59 f60 f61
+4 74 NULL
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 order by f59 limit 0,10;
+FROM test.tb2;
+select * FROM v1 order by f59 limit 4,3;
f59
5
6
7
ALTER VIEW v1 AS select f59
-FROM test.tb2 limit 6,2;
-select * FROM v1 order by f59 limit 0,10;
+FROM test.tb2;
+select * FROM v1 order by f59 limit 6,2;
f59
+6
7
-8
CREATE or REPLACE VIEW v1 AS select f59
-from tb2 order by f59 limit 100;
+from tb2 order by f59;
select * FROM v1 order by f59 limit 0,10;
f59
1
@@ -241,7 +289,7 @@ f59
8
9
CREATE or REPLACE VIEW v1 AS select f59
-from tb2 order by f59 asc limit 100;
+from tb2 order by f59 asc;
select * FROM v1 limit 0,10;
f59
1
@@ -255,7 +303,7 @@ f59
8
9
CREATE or REPLACE VIEW v1 AS select f59
-from tb2 order by f59 desc limit 100;
+from tb2 order by f59 desc;
select * FROM v1 limit 0,10;
f59
569300
@@ -269,7 +317,7 @@ f59
987
660
CREATE or REPLACE VIEW v1 AS select f59
-from tb2 group by f59 limit 100;
+from tb2 group by f59;
select * FROM v1 order by f59 limit 0,10;
f59
1
@@ -283,7 +331,7 @@ f59
9
10
CREATE or REPLACE VIEW v1 AS select f59
-from tb2 group by f59 asc limit 100;
+from tb2 group by f59 asc;
select * FROM v1 order by f59 limit 0,10;
f59
1
@@ -297,7 +345,7 @@ f59
9
10
CREATE or REPLACE VIEW v1 AS select f59
-from tb2 group by f59 desc limit 100;
+from tb2 group by f59 desc;
select * FROM v1 order by f59 limit 0,10;
f59
1
@@ -311,7 +359,7 @@ f59
9
10
CREATE or REPLACE VIEW v1 AS (select f59 from tb2)
-union (select f59 from t1) limit 100;
+union (select f59 from t1);
select * FROM v1 order by f59 limit 0,10;
f59
1
@@ -355,71 +403,3069 @@ f59
CREATE or REPLACE VIEW v1 AS select *
FROM test.tb2 WITH LOCAL CHECK OPTION ;
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
-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
-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
-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
+f59 1
+f60 1
+f61 0000000001
+f62 0000000000000000000000000000000000000000000000000000000000000001
+f63 0000000001
+f64 0000000000000000000000000000000000000000000000000000000000000001
+f65 -5
+f66 0.000000000000000000000000000000
+f67 1
+f68 0.000000000000000000000000000000
+f69 0000000001
+f70 000000000000000000000000000000000.000000000000000000000000000000
+f71 0000000001
+f72 000000000000000000000000000000000.000000000000000000000000000000
+f73 -1.17549435e-38
+f74 1.175494352e-38
+f75 00000001.175494352e-38
+f76 00000001.175494352e-38
+f77 -1.17549435e-38
+f78 1.175494352e-38
+f79 00000001.175494352e-38
+f80 00000001.175494352e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.17549435e-38
+f95 1.17549e-38
+f96 1.175494352e-38
+f97 01.17549e-38
+f98 00000001.175494352e-38
+f99 01.17549e-38
+f100 00000001.175494352e-38
+f101 1000-01-01
+f102 838:59:58
+f103 1970-01-02 00:00:01
+f104 1970-01-02 00:00:01
+f105 1902
+f106 1902
+f107 1902
+f108 2enum
+f109 2set
+f59 2
+f60 2
+f61 0000000002
+f62 0000000000000000000000000000000000000000000000000000000000000002
+f63 0000000002
+f64 0000000000000000000000000000000000000000000000000000000000000002
+f65 -4
+f66 1.100000000000000000000000000000
+f67 2
+f68 1.100000000000000000000000000000
+f69 0000000002
+f70 000000000000000000000000000000001.100000000000000000000000000000
+f71 0000000002
+f72 000000000000000000000000000000001.100000000000000000000000000000
+f73 -1.175494349e-38
+f74 1.175494353e-38
+f75 00000001.175494353e-38
+f76 00000001.175494353e-38
+f77 -1.175494349e-38
+f78 1.175494353e-38
+f79 00000001.175494353e-38
+f80 00000001.175494353e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494349e-38
+f95 1.17549e-38
+f96 1.175494353e-38
+f97 01.17549e-38
+f98 00000001.175494353e-38
+f99 01.17549e-38
+f100 00000001.175494353e-38
+f101 1000-01-02
+f102 838:59:57
+f103 1970-01-03 00:00:02
+f104 1970-01-03 00:00:02
+f105 1903
+f106 1903
+f107 1903
+f108 1enum
+f109 1set,2set
+f59 3
+f60 3
+f61 0000000003
+f62 0000000000000000000000000000000000000000000000000000000000000003
+f63 0000000003
+f64 0000000000000000000000000000000000000000000000000000000000000003
+f65 -3
+f66 2.200000000000000000000000000000
+f67 3
+f68 2.200000000000000000000000000000
+f69 0000000003
+f70 000000000000000000000000000000002.200000000000000000000000000000
+f71 0000000003
+f72 000000000000000000000000000000002.200000000000000000000000000000
+f73 -1.175494348e-38
+f74 1.175494354e-38
+f75 00000001.175494354e-38
+f76 00000001.175494354e-38
+f77 -1.175494348e-38
+f78 1.175494354e-38
+f79 00000001.175494354e-38
+f80 00000001.175494354e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494348e-38
+f95 1.17549e-38
+f96 1.175494354e-38
+f97 01.17549e-38
+f98 00000001.175494354e-38
+f99 01.17549e-38
+f100 00000001.175494354e-38
+f101 1000-01-03
+f102 838:59:56
+f103 1970-01-04 00:00:03
+f104 1970-01-04 00:00:03
+f105 1904
+f106 1904
+f107 1904
+f108 2enum
+f109 1set
+f59 4
+f60 4
+f61 0000000004
+f62 0000000000000000000000000000000000000000000000000000000000000004
+f63 0000000004
+f64 0000000000000000000000000000000000000000000000000000000000000004
+f65 -2
+f66 3.300000000000000000000000000000
+f67 4
+f68 3.300000000000000000000000000000
+f69 0000000004
+f70 000000000000000000000000000000003.300000000000000000000000000000
+f71 0000000004
+f72 000000000000000000000000000000003.300000000000000000000000000000
+f73 -1.175494347e-38
+f74 1.175494355e-38
+f75 00000001.175494355e-38
+f76 00000001.175494355e-38
+f77 -1.175494347e-38
+f78 1.175494355e-38
+f79 00000001.175494355e-38
+f80 00000001.175494355e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494347e-38
+f95 1.17549e-38
+f96 1.175494355e-38
+f97 01.17549e-38
+f98 00000001.175494355e-38
+f99 01.17549e-38
+f100 00000001.175494355e-38
+f101 1000-01-04
+f102 838:59:55
+f103 1970-01-05 00:00:04
+f104 1970-01-05 00:00:04
+f105 1905
+f106 1905
+f107 1905
+f108 1enum
+f109 2set
+f59 4
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 5
+f60 5
+f61 0000000005
+f62 0000000000000000000000000000000000000000000000000000000000000005
+f63 0000000005
+f64 0000000000000000000000000000000000000000000000000000000000000005
+f65 -1
+f66 4.400000000000000000000000000000
+f67 5
+f68 4.400000000000000000000000000000
+f69 0000000005
+f70 000000000000000000000000000000004.400000000000000000000000000000
+f71 0000000005
+f72 000000000000000000000000000000004.400000000000000000000000000000
+f73 -1.175494346e-38
+f74 1.175494356e-38
+f75 00000001.175494356e-38
+f76 00000001.175494356e-38
+f77 -1.175494346e-38
+f78 1.175494356e-38
+f79 00000001.175494356e-38
+f80 00000001.175494356e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494346e-38
+f95 1.17549e-38
+f96 1.175494356e-38
+f97 01.17549e-38
+f98 00000001.175494356e-38
+f99 01.17549e-38
+f100 00000001.175494356e-38
+f101 1000-01-05
+f102 838:59:54
+f103 1970-01-06 00:00:05
+f104 1970-01-06 00:00:05
+f105 1906
+f106 1906
+f107 1906
+f108 2enum
+f109 1set,2set
+f59 6
+f60 6
+f61 0000000006
+f62 0000000000000000000000000000000000000000000000000000000000000006
+f63 0000000006
+f64 0000000000000000000000000000000000000000000000000000000000000006
+f65 0
+f66 5.500000000000000000000000000000
+f67 6
+f68 5.500000000000000000000000000000
+f69 0000000006
+f70 000000000000000000000000000000005.500000000000000000000000000000
+f71 0000000006
+f72 000000000000000000000000000000005.500000000000000000000000000000
+f73 -1.175494345e-38
+f74 1.175494357e-38
+f75 00000001.175494357e-38
+f76 00000001.175494357e-38
+f77 -1.175494345e-38
+f78 1.175494357e-38
+f79 00000001.175494357e-38
+f80 00000001.175494357e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494345e-38
+f95 1.17549e-38
+f96 1.175494357e-38
+f97 01.17549e-38
+f98 00000001.175494357e-38
+f99 01.17549e-38
+f100 00000001.175494357e-38
+f101 1000-01-06
+f102 838:59:53
+f103 1970-01-07 00:00:06
+f104 1970-01-07 00:00:06
+f105 1907
+f106 1907
+f107 1907
+f108 1enum
+f109 1set
+f59 7
+f60 7
+f61 0000000007
+f62 0000000000000000000000000000000000000000000000000000000000000007
+f63 0000000007
+f64 0000000000000000000000000000000000000000000000000000000000000007
+f65 1
+f66 6.600000000000000000000000000000
+f67 7
+f68 6.600000000000000000000000000000
+f69 0000000007
+f70 000000000000000000000000000000006.600000000000000000000000000000
+f71 0000000007
+f72 000000000000000000000000000000006.600000000000000000000000000000
+f73 -1.175494344e-38
+f74 1.175494358e-38
+f75 00000001.175494358e-38
+f76 00000001.175494358e-38
+f77 -1.175494344e-38
+f78 1.175494358e-38
+f79 00000001.175494358e-38
+f80 00000001.175494358e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494344e-38
+f95 1.17549e-38
+f96 1.175494358e-38
+f97 01.17549e-38
+f98 00000001.175494358e-38
+f99 01.17549e-38
+f100 00000001.175494358e-38
+f101 1000-01-07
+f102 838:59:52
+f103 1970-01-08 00:00:07
+f104 1970-01-08 00:00:07
+f105 1908
+f106 1908
+f107 1908
+f108 2enum
+f109 2set
+f59 8
+f60 8
+f61 0000000008
+f62 0000000000000000000000000000000000000000000000000000000000000008
+f63 0000000008
+f64 0000000000000000000000000000000000000000000000000000000000000008
+f65 2
+f66 7.700000000000000000000000000000
+f67 8
+f68 7.700000000000000000000000000000
+f69 0000000008
+f70 000000000000000000000000000000007.700000000000000000000000000000
+f71 0000000008
+f72 000000000000000000000000000000007.700000000000000000000000000000
+f73 -1.175494343e-38
+f74 1.175494359e-38
+f75 00000001.175494359e-38
+f76 00000001.175494359e-38
+f77 -1.175494343e-38
+f78 1.175494359e-38
+f79 00000001.175494359e-38
+f80 00000001.175494359e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494343e-38
+f95 1.17549e-38
+f96 1.175494359e-38
+f97 01.17549e-38
+f98 00000001.175494359e-38
+f99 01.17549e-38
+f100 00000001.175494359e-38
+f101 1000-01-08
+f102 838:59:51
+f103 1970-01-09 00:00:08
+f104 1970-01-09 00:00:08
+f105 1909
+f106 1909
+f107 1909
+f108 1enum
+f109 1set,2set
+f59 9
+f60 9
+f61 0000000009
+f62 0000000000000000000000000000000000000000000000000000000000000009
+f63 0000000009
+f64 0000000000000000000000000000000000000000000000000000000000000009
+f65 3
+f66 8.800000000000000000000000000000
+f67 9
+f68 8.800000000000000000000000000000
+f69 0000000009
+f70 000000000000000000000000000000008.800000000000000000000000000000
+f71 0000000009
+f72 000000000000000000000000000000008.800000000000000000000000000000
+f73 -1.175494342e-38
+f74 1.17549436e-38
+f75 000000001.17549436e-38
+f76 000000001.17549436e-38
+f77 -1.175494342e-38
+f78 1.17549436e-38
+f79 000000001.17549436e-38
+f80 000000001.17549436e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494342e-38
+f95 1.17549e-38
+f96 1.17549436e-38
+f97 01.17549e-38
+f98 000000001.17549436e-38
+f99 01.17549e-38
+f100 000000001.17549436e-38
+f101 1000-01-09
+f102 838:59:50
+f103 1970-01-10 00:00:09
+f104 1970-01-10 00:00:09
+f105 1910
+f106 1910
+f107 1910
+f108 2enum
+f109 1set
+f59 10
+f60 10
+f61 0000000010
+f62 0000000000000000000000000000000000000000000000000000000000000010
+f63 0000000010
+f64 0000000000000000000000000000000000000000000000000000000000000010
+f65 4
+f66 9.900000000000000000000000000000
+f67 10
+f68 9.900000000000000000000000000000
+f69 0000000010
+f70 000000000000000000000000000000009.900000000000000000000000000000
+f71 0000000010
+f72 000000000000000000000000000000009.900000000000000000000000000000
+f73 -1.175494341e-38
+f74 1.175494361e-38
+f75 00000001.175494361e-38
+f76 00000001.175494361e-38
+f77 -1.175494341e-38
+f78 1.175494361e-38
+f79 00000001.175494361e-38
+f80 00000001.175494361e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494341e-38
+f95 1.17549e-38
+f96 1.175494361e-38
+f97 01.17549e-38
+f98 00000001.175494361e-38
+f99 01.17549e-38
+f100 00000001.175494361e-38
+f101 1000-01-10
+f102 838:59:49
+f103 1970-01-11 00:00:10
+f104 1970-01-11 00:00:10
+f105 1911
+f106 1911
+f107 1911
+f108 1enum
+f109 2set
+f59 15
+f60 87
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 17
+f60 15
+f61 0000000016
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 19
+f60 18
+f61 0000000014
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 22
+f60 93
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 24
+f60 51654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 27
+f60 25
+f61 0000000026
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 29
+f60 28
+f61 0000000024
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 34
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 94
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 107
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 107
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 109
+f60 108
+f61 0000000104
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 109
+f60 108
+f61 0000000104
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 195
+f60 87
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 207
+f60 205
+f61 0000000206
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 209
+f60 208
+f61 0000000204
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 242
+f60 79
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 250
+f60 87895654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 292
+f60 93
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 299
+f60 899
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 321
+f60 NULL
+f61 0000000765
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 323
+f60 14376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 340
+f60 9984376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 394
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 424
+f60 89
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 441
+f60 16546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 660
+f60 876546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 987
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 2550
+f60 775654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 2760
+f60 985654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 3330
+f60 764376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 3410
+f60 996546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 7876
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 9112
+f60 NULL
+f61 0000008771
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 76710
+f60 226546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 569300
+f60 9114376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
CREATE or REPLACE VIEW v1 AS select *
FROM test.tb2 WITH CASCADED CHECK OPTION ;
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
+f59 1
+f60 1
+f61 0000000001
+f62 0000000000000000000000000000000000000000000000000000000000000001
+f63 0000000001
+f64 0000000000000000000000000000000000000000000000000000000000000001
+f65 -5
+f66 0.000000000000000000000000000000
+f67 1
+f68 0.000000000000000000000000000000
+f69 0000000001
+f70 000000000000000000000000000000000.000000000000000000000000000000
+f71 0000000001
+f72 000000000000000000000000000000000.000000000000000000000000000000
+f73 -1.17549435e-38
+f74 1.175494352e-38
+f75 00000001.175494352e-38
+f76 00000001.175494352e-38
+f77 -1.17549435e-38
+f78 1.175494352e-38
+f79 00000001.175494352e-38
+f80 00000001.175494352e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.17549435e-38
+f95 1.17549e-38
+f96 1.175494352e-38
+f97 01.17549e-38
+f98 00000001.175494352e-38
+f99 01.17549e-38
+f100 00000001.175494352e-38
+f101 1000-01-01
+f102 838:59:58
+f103 1970-01-02 00:00:01
+f104 1970-01-02 00:00:01
+f105 1902
+f106 1902
+f107 1902
+f108 2enum
+f109 2set
+f59 2
+f60 2
+f61 0000000002
+f62 0000000000000000000000000000000000000000000000000000000000000002
+f63 0000000002
+f64 0000000000000000000000000000000000000000000000000000000000000002
+f65 -4
+f66 1.100000000000000000000000000000
+f67 2
+f68 1.100000000000000000000000000000
+f69 0000000002
+f70 000000000000000000000000000000001.100000000000000000000000000000
+f71 0000000002
+f72 000000000000000000000000000000001.100000000000000000000000000000
+f73 -1.175494349e-38
+f74 1.175494353e-38
+f75 00000001.175494353e-38
+f76 00000001.175494353e-38
+f77 -1.175494349e-38
+f78 1.175494353e-38
+f79 00000001.175494353e-38
+f80 00000001.175494353e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494349e-38
+f95 1.17549e-38
+f96 1.175494353e-38
+f97 01.17549e-38
+f98 00000001.175494353e-38
+f99 01.17549e-38
+f100 00000001.175494353e-38
+f101 1000-01-02
+f102 838:59:57
+f103 1970-01-03 00:00:02
+f104 1970-01-03 00:00:02
+f105 1903
+f106 1903
+f107 1903
+f108 1enum
+f109 1set,2set
+f59 3
+f60 3
+f61 0000000003
+f62 0000000000000000000000000000000000000000000000000000000000000003
+f63 0000000003
+f64 0000000000000000000000000000000000000000000000000000000000000003
+f65 -3
+f66 2.200000000000000000000000000000
+f67 3
+f68 2.200000000000000000000000000000
+f69 0000000003
+f70 000000000000000000000000000000002.200000000000000000000000000000
+f71 0000000003
+f72 000000000000000000000000000000002.200000000000000000000000000000
+f73 -1.175494348e-38
+f74 1.175494354e-38
+f75 00000001.175494354e-38
+f76 00000001.175494354e-38
+f77 -1.175494348e-38
+f78 1.175494354e-38
+f79 00000001.175494354e-38
+f80 00000001.175494354e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494348e-38
+f95 1.17549e-38
+f96 1.175494354e-38
+f97 01.17549e-38
+f98 00000001.175494354e-38
+f99 01.17549e-38
+f100 00000001.175494354e-38
+f101 1000-01-03
+f102 838:59:56
+f103 1970-01-04 00:00:03
+f104 1970-01-04 00:00:03
+f105 1904
+f106 1904
+f107 1904
+f108 2enum
+f109 1set
+f59 4
+f60 4
+f61 0000000004
+f62 0000000000000000000000000000000000000000000000000000000000000004
+f63 0000000004
+f64 0000000000000000000000000000000000000000000000000000000000000004
+f65 -2
+f66 3.300000000000000000000000000000
+f67 4
+f68 3.300000000000000000000000000000
+f69 0000000004
+f70 000000000000000000000000000000003.300000000000000000000000000000
+f71 0000000004
+f72 000000000000000000000000000000003.300000000000000000000000000000
+f73 -1.175494347e-38
+f74 1.175494355e-38
+f75 00000001.175494355e-38
+f76 00000001.175494355e-38
+f77 -1.175494347e-38
+f78 1.175494355e-38
+f79 00000001.175494355e-38
+f80 00000001.175494355e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494347e-38
+f95 1.17549e-38
+f96 1.175494355e-38
+f97 01.17549e-38
+f98 00000001.175494355e-38
+f99 01.17549e-38
+f100 00000001.175494355e-38
+f101 1000-01-04
+f102 838:59:55
+f103 1970-01-05 00:00:04
+f104 1970-01-05 00:00:04
+f105 1905
+f106 1905
+f107 1905
+f108 1enum
+f109 2set
+f59 4
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 5
+f60 5
+f61 0000000005
+f62 0000000000000000000000000000000000000000000000000000000000000005
+f63 0000000005
+f64 0000000000000000000000000000000000000000000000000000000000000005
+f65 -1
+f66 4.400000000000000000000000000000
+f67 5
+f68 4.400000000000000000000000000000
+f69 0000000005
+f70 000000000000000000000000000000004.400000000000000000000000000000
+f71 0000000005
+f72 000000000000000000000000000000004.400000000000000000000000000000
+f73 -1.175494346e-38
+f74 1.175494356e-38
+f75 00000001.175494356e-38
+f76 00000001.175494356e-38
+f77 -1.175494346e-38
+f78 1.175494356e-38
+f79 00000001.175494356e-38
+f80 00000001.175494356e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494346e-38
+f95 1.17549e-38
+f96 1.175494356e-38
+f97 01.17549e-38
+f98 00000001.175494356e-38
+f99 01.17549e-38
+f100 00000001.175494356e-38
+f101 1000-01-05
+f102 838:59:54
+f103 1970-01-06 00:00:05
+f104 1970-01-06 00:00:05
+f105 1906
+f106 1906
+f107 1906
+f108 2enum
+f109 1set,2set
+f59 6
+f60 6
+f61 0000000006
+f62 0000000000000000000000000000000000000000000000000000000000000006
+f63 0000000006
+f64 0000000000000000000000000000000000000000000000000000000000000006
+f65 0
+f66 5.500000000000000000000000000000
+f67 6
+f68 5.500000000000000000000000000000
+f69 0000000006
+f70 000000000000000000000000000000005.500000000000000000000000000000
+f71 0000000006
+f72 000000000000000000000000000000005.500000000000000000000000000000
+f73 -1.175494345e-38
+f74 1.175494357e-38
+f75 00000001.175494357e-38
+f76 00000001.175494357e-38
+f77 -1.175494345e-38
+f78 1.175494357e-38
+f79 00000001.175494357e-38
+f80 00000001.175494357e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494345e-38
+f95 1.17549e-38
+f96 1.175494357e-38
+f97 01.17549e-38
+f98 00000001.175494357e-38
+f99 01.17549e-38
+f100 00000001.175494357e-38
+f101 1000-01-06
+f102 838:59:53
+f103 1970-01-07 00:00:06
+f104 1970-01-07 00:00:06
+f105 1907
+f106 1907
+f107 1907
+f108 1enum
+f109 1set
+f59 7
+f60 7
+f61 0000000007
+f62 0000000000000000000000000000000000000000000000000000000000000007
+f63 0000000007
+f64 0000000000000000000000000000000000000000000000000000000000000007
+f65 1
+f66 6.600000000000000000000000000000
+f67 7
+f68 6.600000000000000000000000000000
+f69 0000000007
+f70 000000000000000000000000000000006.600000000000000000000000000000
+f71 0000000007
+f72 000000000000000000000000000000006.600000000000000000000000000000
+f73 -1.175494344e-38
+f74 1.175494358e-38
+f75 00000001.175494358e-38
+f76 00000001.175494358e-38
+f77 -1.175494344e-38
+f78 1.175494358e-38
+f79 00000001.175494358e-38
+f80 00000001.175494358e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494344e-38
+f95 1.17549e-38
+f96 1.175494358e-38
+f97 01.17549e-38
+f98 00000001.175494358e-38
+f99 01.17549e-38
+f100 00000001.175494358e-38
+f101 1000-01-07
+f102 838:59:52
+f103 1970-01-08 00:00:07
+f104 1970-01-08 00:00:07
+f105 1908
+f106 1908
+f107 1908
+f108 2enum
+f109 2set
+f59 8
+f60 8
+f61 0000000008
+f62 0000000000000000000000000000000000000000000000000000000000000008
+f63 0000000008
+f64 0000000000000000000000000000000000000000000000000000000000000008
+f65 2
+f66 7.700000000000000000000000000000
+f67 8
+f68 7.700000000000000000000000000000
+f69 0000000008
+f70 000000000000000000000000000000007.700000000000000000000000000000
+f71 0000000008
+f72 000000000000000000000000000000007.700000000000000000000000000000
+f73 -1.175494343e-38
+f74 1.175494359e-38
+f75 00000001.175494359e-38
+f76 00000001.175494359e-38
+f77 -1.175494343e-38
+f78 1.175494359e-38
+f79 00000001.175494359e-38
+f80 00000001.175494359e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494343e-38
+f95 1.17549e-38
+f96 1.175494359e-38
+f97 01.17549e-38
+f98 00000001.175494359e-38
+f99 01.17549e-38
+f100 00000001.175494359e-38
+f101 1000-01-08
+f102 838:59:51
+f103 1970-01-09 00:00:08
+f104 1970-01-09 00:00:08
+f105 1909
+f106 1909
+f107 1909
+f108 1enum
+f109 1set,2set
+f59 9
+f60 9
+f61 0000000009
+f62 0000000000000000000000000000000000000000000000000000000000000009
+f63 0000000009
+f64 0000000000000000000000000000000000000000000000000000000000000009
+f65 3
+f66 8.800000000000000000000000000000
+f67 9
+f68 8.800000000000000000000000000000
+f69 0000000009
+f70 000000000000000000000000000000008.800000000000000000000000000000
+f71 0000000009
+f72 000000000000000000000000000000008.800000000000000000000000000000
+f73 -1.175494342e-38
+f74 1.17549436e-38
+f75 000000001.17549436e-38
+f76 000000001.17549436e-38
+f77 -1.175494342e-38
+f78 1.17549436e-38
+f79 000000001.17549436e-38
+f80 000000001.17549436e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494342e-38
+f95 1.17549e-38
+f96 1.17549436e-38
+f97 01.17549e-38
+f98 000000001.17549436e-38
+f99 01.17549e-38
+f100 000000001.17549436e-38
+f101 1000-01-09
+f102 838:59:50
+f103 1970-01-10 00:00:09
+f104 1970-01-10 00:00:09
+f105 1910
+f106 1910
+f107 1910
+f108 2enum
+f109 1set
CREATE OR REPLACE VIEW v1 AS SELECT F59, F60
FROM test.tb2 WITH CASCADED CHECK OPTION;
SELECT * FROM v1 order by f59,f60 limit 0,10;
@@ -499,8 +3545,8 @@ DROP VIEW v1;
Testcase 3.3.1.3 + 3.1.1.4
--------------------------------------------------------------------------------
DROP VIEW IF EXISTS v1 ;
-CREATE VIEW v1 or REPLACE AS Select * from tb2 my_table limit 50;
-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 'or REPLACE AS Select * from tb2 my_table limit 50' at line 1
+CREATE VIEW v1 or REPLACE AS Select * from tb2 my_table;
+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 'or REPLACE AS Select * from tb2 my_table' at line 1
CREATE VIEW v1 WITH CASCADED CHECK OPTION AS Select *
from tb2 my_table limit 50;
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 'WITH CASCADED CHECK OPTION AS Select *
@@ -509,8 +3555,8 @@ CREATE VIEW v1 WITH LOCAL CHECK OPTION AS Select *
from tb2 my_table limit 50;
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 'WITH LOCAL CHECK OPTION AS Select *
from tb2 my_table limit 50' at line 1
-SELECT * FROM tb2 my_table CREATE VIEW As v1 limit 100 ;
-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 'CREATE VIEW As v1 limit 100' at line 1
+SELECT * FROM tb2 my_table CREATE VIEW As v1;
+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 'CREATE VIEW As v1' at line 1
CREATE or REPLACE VIEW v1 Select f59, f60
from test.tb2 my_table where f59 = 250 ;
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 'Select f59, f60
@@ -585,8 +3631,8 @@ Union ALL (Select from f1 t1);
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from f59 tb2)
Union ALL (Select from f1 t1)' at line 1
CREATE or REPLACE view v1 as Select f59, f60
-from tb2 by order f59 limit 100 ;
-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 'by order f59 limit 100' at line 2
+from tb2 by order f59;
+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 'by order f59' at line 2
CREATE or REPLACE view v1 as Select f59, f60
from tb2 by group f59 ;
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 'by group f59' at line 2
@@ -594,12 +3640,12 @@ ERROR 42000: You have an error in your SQL syntax; check the manual that corresp
Testcase 3.3.1.5
--------------------------------------------------------------------------------
DROP VIEW IF EXISTS v1 ;
-CREATE VIEW v1 SELECT * FROM tb2 limit 100 ;
-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 'SELECT * FROM tb2 limit 100' at line 1
-CREATE v1 AS SELECT * FROM tb2 limit 100 ;
-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 'v1 AS SELECT * FROM tb2 limit 100' at line 1
-VIEW v1 AS SELECT * FROM tb2 limit 100 ;
-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 'VIEW v1 AS SELECT * FROM tb2 limit 100' at line 1
+CREATE VIEW v1 SELECT * FROM tb2;
+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 'SELECT * FROM tb2' at line 1
+CREATE v1 AS SELECT * FROM tb2;
+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 'v1 AS SELECT * FROM tb2' at line 1
+VIEW v1 AS SELECT * FROM tb2;
+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 'VIEW v1 AS SELECT * FROM tb2' at line 1
CREATE VIEW v1 AS SELECT 1;
DROP VIEW v1;
VIEW v1 AS SELECT 1;
@@ -617,45 +3663,43 @@ Testcase 3.3.1.6
--------------------------------------------------------------------------------
DROP VIEW IF EXISTS v1 ;
CREATE or REPLACE VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
CREATE or REPLACE ALGORITHM = UNDEFINED VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
CREATE or REPLACE ALGORITHM = MERGE VIEW v1
-as SELECT * from tb2 limit 100 ;
-Warnings:
-Warning 1354 View merge algorithm can't be used here for now (assumed undefined algorithm)
+as SELECT * from tb2;
CREATE or REPLACE ALGORITHM = TEMPTABLE VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
CREATE or REPLACE ALGORITHM = TEMPTABLE VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
CREATE or REPLACE = TEMPTABLE VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
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 '= TEMPTABLE VIEW v1
-as SELECT * from tb2 limit 100' at line 1
+as SELECT * from tb2' at line 1
CREATE or REPLACE ALGORITHM TEMPTABLE VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
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 'TEMPTABLE VIEW v1
-as SELECT * from tb2 limit 100' at line 1
+as SELECT * from tb2' at line 1
CREATE or REPLACE ALGORITHM = VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
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 'VIEW v1
-as SELECT * from tb2 limit 100' at line 1
+as SELECT * from tb2' at line 1
CREATE or REPLACE TEMPTABLE = ALGORITHM VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
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 'TEMPTABLE = ALGORITHM VIEW v1
-as SELECT * from tb2 limit 100' at line 1
+as SELECT * from tb2' at line 1
CREATE or REPLACE TEMPTABLE - ALGORITHM VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
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 'TEMPTABLE - ALGORITHM VIEW v1
-as SELECT * from tb2 limit 100' at line 1
+as SELECT * from tb2' at line 1
CREATE or REPLACE GARBAGE = TEMPTABLE VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
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 'GARBAGE = TEMPTABLE VIEW v1
-as SELECT * from tb2 limit 100' at line 1
+as SELECT * from tb2' at line 1
CREATE or REPLACE ALGORITHM = GARBAGE VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
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 'GARBAGE VIEW v1
-as SELECT * from tb2 limit 100' at line 1
+as SELECT * from tb2' at line 1
Drop view if exists v1 ;
CREATE or REPLACE VIEW v1
AS SELECT * from tb2 where f59 < 1;
@@ -681,7 +3725,7 @@ ERROR 42000: You have an error in your SQL syntax; check the manual that corresp
Testcase 3.3.1.7
--------------------------------------------------------------------------------
DROP VIEW IF EXISTS v1 ;
-Create view test.v1 AS Select * from test.tb2 limit 100 ;
+Create view test.v1 AS Select * from test.tb2;
Alter view test.v1 AS Select F59 from test. tb2 limit 100 ;
Drop view test.v1 ;
Create view v1 AS Select * from test.tb2 limit 100 ;
@@ -885,16 +3929,115 @@ 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` 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;
+f59 1
+f60 1
+f61 0000000001
+f62 0000000000000000000000000000000000000000000000000000000000000001
+f63 0000000001
+f64 0000000000000000000000000000000000000000000000000000000000000001
+f65 -5
+f66 0.000000000000000000000000000000
+f67 1
+f68 0.000000000000000000000000000000
+f69 0000000001
+f70 000000000000000000000000000000000.000000000000000000000000000000
+f71 0000000001
+f72 000000000000000000000000000000000.000000000000000000000000000000
+f73 -1.17549435e-38
+f74 1.175494352e-38
+f75 00000001.175494352e-38
+f76 00000001.175494352e-38
+f77 -1.17549435e-38
+f78 1.175494352e-38
+f79 00000001.175494352e-38
+f80 00000001.175494352e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.17549435e-38
+f95 1.17549e-38
+f96 1.175494352e-38
+f97 01.17549e-38
+f98 00000001.175494352e-38
+f99 01.17549e-38
+f100 00000001.175494352e-38
+f101 1000-01-01
+f102 838:59:58
+f103 1970-01-02 00:00:01
+f104 1970-01-02 00:00:01
+f105 1902
+f106 1902
+f107 1902
+f108 2enum
+f109 2set
+f59 2
+f60 2
+f61 0000000002
+f62 0000000000000000000000000000000000000000000000000000000000000002
+f63 0000000002
+f64 0000000000000000000000000000000000000000000000000000000000000002
+f65 -4
+f66 1.100000000000000000000000000000
+f67 2
+f68 1.100000000000000000000000000000
+f69 0000000002
+f70 000000000000000000000000000000001.100000000000000000000000000000
+f71 0000000002
+f72 000000000000000000000000000000001.100000000000000000000000000000
+f73 -1.175494349e-38
+f74 1.175494353e-38
+f75 00000001.175494353e-38
+f76 00000001.175494353e-38
+f77 -1.175494349e-38
+f78 1.175494353e-38
+f79 00000001.175494353e-38
+f80 00000001.175494353e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494349e-38
+f95 1.17549e-38
+f96 1.175494353e-38
+f97 01.17549e-38
+f98 00000001.175494353e-38
+f99 01.17549e-38
+f100 00000001.175494353e-38
+f101 1000-01-02
+f102 838:59:57
+f103 1970-01-03 00:00:02
+f104 1970-01-03 00:00:02
+f105 1903
+f106 1903
+f107 1903
+f108 1enum
+f109 1set,2set
+CREATE OR REPLACE VIEW test.v1 AS SELECT F59 FROM tb2;
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 order by F59;
+v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `tb2`.`f59` AS `F59` from `tb2` latin1 latin1_swedish_ci
+SELECT * FROM test.v1 order by F59 limit 10,100;
F59
-4
+10
15
17
19
@@ -947,11 +4090,59 @@ ERROR HY000: 'test.tb2' is not VIEW
Testcase 3.3.1.15
--------------------------------------------------------------------------------
Drop table if exists test.v1 ;
-CREATE OR REPLACE view test.v1 as select * from tb2 LIMIT 2;
+CREATE OR REPLACE view test.v1 as select * from tb2;
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
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
+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
+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
+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
+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
+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
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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
Drop view test.v1 ;
Testcase 3.3.1.16 + 3.3.1.17
@@ -1084,8 +4275,8 @@ ERROR HY000: View's SELECT and view's field list have different column counts
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 order by F59, F60 desc;
+CREATE VIEW test.v1( F59, F60 ) AS SELECT F59, F60 From tb2;
+SELECT * FROM test.v1 order by F59, F60 desc LIMIT 2;
F59 F60
1 1
2 2
@@ -1094,7 +4285,7 @@ Drop view if exists test.v1 ;
Testcase 3.3.1.22
--------------------------------------------------------------------------------
DROP VIEW IF EXISTS v1;
-CREATE VIEW test.v1( product ) AS SELECT f59*f60 From tb2 LIMIT 2;
+CREATE VIEW test.v1( product ) AS SELECT f59*f60 From tb2 WHERE f59 < 3;
SELECT * FROM test.v1;
product
1
@@ -1181,85 +4372,2632 @@ DROP TEMPORARY TABLE t2;
Testcase 3.3.1.26
--------------------------------------------------------------------------------
DROP VIEW IF EXISTS v1;
-Create view test.v1 AS Select * from test.tb2 limit 2 ;
+Create view test.v1 AS Select * from test.tb2;
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
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
---------------------------------------------------------------------------------
-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 order by F59 limit 20 ;
-F59
-1
-2
-Drop view test.v1 ;
-Drop view test.v1_1 ;
-
-Testcase 3.3.1.28
---------------------------------------------------------------------------------
-Drop database if exists test2 ;
-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 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
-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
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
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
+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
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
+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
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
+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
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
+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
+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
+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
+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
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
+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
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
+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
+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
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
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
+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
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
+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
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
+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
+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
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
+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
+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
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
+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
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
+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
+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
+Drop view test.v1 ;
+
+Testcase 3.3.1.27
+--------------------------------------------------------------------------------
+DROP VIEW IF EXISTS test.v1;
+Drop VIEW IF EXISTS test.v1_1 ;
+Create view test.v1 AS Select * from test.tb2;
+Create view test.v1_1 AS Select F59 from test.v1 ;
+Select * from test.v1_1 order by F59 limit 2;
+F59
+1
+2
+Drop view test.v1 ;
+Drop view test.v1_1 ;
+
+Testcase 3.3.1.28
+--------------------------------------------------------------------------------
+Drop database if exists test2 ;
+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 order by f59,f60,f61,f62,f63,f64,f65;
+f59 1
+f60 1
+f61 0000000001
+f62 0000000000000000000000000000000000000000000000000000000000000001
+f63 0000000001
+f64 0000000000000000000000000000000000000000000000000000000000000001
+f65 -5
+f66 0.000000000000000000000000000000
+f67 1
+f68 0.000000000000000000000000000000
+f69 0000000001
+f70 000000000000000000000000000000000.000000000000000000000000000000
+f71 0000000001
+f72 000000000000000000000000000000000.000000000000000000000000000000
+f73 -1.17549435e-38
+f74 1.175494352e-38
+f75 00000001.175494352e-38
+f76 00000001.175494352e-38
+f77 -1.17549435e-38
+f78 1.175494352e-38
+f79 00000001.175494352e-38
+f80 00000001.175494352e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.17549435e-38
+f95 1.17549e-38
+f96 1.175494352e-38
+f97 01.17549e-38
+f98 00000001.175494352e-38
+f99 01.17549e-38
+f100 00000001.175494352e-38
+f101 1000-01-01
+f102 838:59:58
+f103 1970-01-02 00:00:01
+f104 1970-01-02 00:00:01
+f105 1902
+f106 1902
+f107 1902
+f108 2enum
+f109 2set
+f59 2
+f60 2
+f61 0000000002
+f62 0000000000000000000000000000000000000000000000000000000000000002
+f63 0000000002
+f64 0000000000000000000000000000000000000000000000000000000000000002
+f65 -4
+f66 1.100000000000000000000000000000
+f67 2
+f68 1.100000000000000000000000000000
+f69 0000000002
+f70 000000000000000000000000000000001.100000000000000000000000000000
+f71 0000000002
+f72 000000000000000000000000000000001.100000000000000000000000000000
+f73 -1.175494349e-38
+f74 1.175494353e-38
+f75 00000001.175494353e-38
+f76 00000001.175494353e-38
+f77 -1.175494349e-38
+f78 1.175494353e-38
+f79 00000001.175494353e-38
+f80 00000001.175494353e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494349e-38
+f95 1.17549e-38
+f96 1.175494353e-38
+f97 01.17549e-38
+f98 00000001.175494353e-38
+f99 01.17549e-38
+f100 00000001.175494353e-38
+f101 1000-01-02
+f102 838:59:57
+f103 1970-01-03 00:00:02
+f104 1970-01-03 00:00:02
+f105 1903
+f106 1903
+f107 1903
+f108 1enum
+f109 1set,2set
+f59 3
+f60 3
+f61 0000000003
+f62 0000000000000000000000000000000000000000000000000000000000000003
+f63 0000000003
+f64 0000000000000000000000000000000000000000000000000000000000000003
+f65 -3
+f66 2.200000000000000000000000000000
+f67 3
+f68 2.200000000000000000000000000000
+f69 0000000003
+f70 000000000000000000000000000000002.200000000000000000000000000000
+f71 0000000003
+f72 000000000000000000000000000000002.200000000000000000000000000000
+f73 -1.175494348e-38
+f74 1.175494354e-38
+f75 00000001.175494354e-38
+f76 00000001.175494354e-38
+f77 -1.175494348e-38
+f78 1.175494354e-38
+f79 00000001.175494354e-38
+f80 00000001.175494354e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494348e-38
+f95 1.17549e-38
+f96 1.175494354e-38
+f97 01.17549e-38
+f98 00000001.175494354e-38
+f99 01.17549e-38
+f100 00000001.175494354e-38
+f101 1000-01-03
+f102 838:59:56
+f103 1970-01-04 00:00:03
+f104 1970-01-04 00:00:03
+f105 1904
+f106 1904
+f107 1904
+f108 2enum
+f109 1set
+f59 4
+f60 4
+f61 0000000004
+f62 0000000000000000000000000000000000000000000000000000000000000004
+f63 0000000004
+f64 0000000000000000000000000000000000000000000000000000000000000004
+f65 -2
+f66 3.300000000000000000000000000000
+f67 4
+f68 3.300000000000000000000000000000
+f69 0000000004
+f70 000000000000000000000000000000003.300000000000000000000000000000
+f71 0000000004
+f72 000000000000000000000000000000003.300000000000000000000000000000
+f73 -1.175494347e-38
+f74 1.175494355e-38
+f75 00000001.175494355e-38
+f76 00000001.175494355e-38
+f77 -1.175494347e-38
+f78 1.175494355e-38
+f79 00000001.175494355e-38
+f80 00000001.175494355e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494347e-38
+f95 1.17549e-38
+f96 1.175494355e-38
+f97 01.17549e-38
+f98 00000001.175494355e-38
+f99 01.17549e-38
+f100 00000001.175494355e-38
+f101 1000-01-04
+f102 838:59:55
+f103 1970-01-05 00:00:04
+f104 1970-01-05 00:00:04
+f105 1905
+f106 1905
+f107 1905
+f108 1enum
+f109 2set
+f59 4
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 5
+f60 5
+f61 0000000005
+f62 0000000000000000000000000000000000000000000000000000000000000005
+f63 0000000005
+f64 0000000000000000000000000000000000000000000000000000000000000005
+f65 -1
+f66 4.400000000000000000000000000000
+f67 5
+f68 4.400000000000000000000000000000
+f69 0000000005
+f70 000000000000000000000000000000004.400000000000000000000000000000
+f71 0000000005
+f72 000000000000000000000000000000004.400000000000000000000000000000
+f73 -1.175494346e-38
+f74 1.175494356e-38
+f75 00000001.175494356e-38
+f76 00000001.175494356e-38
+f77 -1.175494346e-38
+f78 1.175494356e-38
+f79 00000001.175494356e-38
+f80 00000001.175494356e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494346e-38
+f95 1.17549e-38
+f96 1.175494356e-38
+f97 01.17549e-38
+f98 00000001.175494356e-38
+f99 01.17549e-38
+f100 00000001.175494356e-38
+f101 1000-01-05
+f102 838:59:54
+f103 1970-01-06 00:00:05
+f104 1970-01-06 00:00:05
+f105 1906
+f106 1906
+f107 1906
+f108 2enum
+f109 1set,2set
+f59 6
+f60 6
+f61 0000000006
+f62 0000000000000000000000000000000000000000000000000000000000000006
+f63 0000000006
+f64 0000000000000000000000000000000000000000000000000000000000000006
+f65 0
+f66 5.500000000000000000000000000000
+f67 6
+f68 5.500000000000000000000000000000
+f69 0000000006
+f70 000000000000000000000000000000005.500000000000000000000000000000
+f71 0000000006
+f72 000000000000000000000000000000005.500000000000000000000000000000
+f73 -1.175494345e-38
+f74 1.175494357e-38
+f75 00000001.175494357e-38
+f76 00000001.175494357e-38
+f77 -1.175494345e-38
+f78 1.175494357e-38
+f79 00000001.175494357e-38
+f80 00000001.175494357e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494345e-38
+f95 1.17549e-38
+f96 1.175494357e-38
+f97 01.17549e-38
+f98 00000001.175494357e-38
+f99 01.17549e-38
+f100 00000001.175494357e-38
+f101 1000-01-06
+f102 838:59:53
+f103 1970-01-07 00:00:06
+f104 1970-01-07 00:00:06
+f105 1907
+f106 1907
+f107 1907
+f108 1enum
+f109 1set
+f59 7
+f60 7
+f61 0000000007
+f62 0000000000000000000000000000000000000000000000000000000000000007
+f63 0000000007
+f64 0000000000000000000000000000000000000000000000000000000000000007
+f65 1
+f66 6.600000000000000000000000000000
+f67 7
+f68 6.600000000000000000000000000000
+f69 0000000007
+f70 000000000000000000000000000000006.600000000000000000000000000000
+f71 0000000007
+f72 000000000000000000000000000000006.600000000000000000000000000000
+f73 -1.175494344e-38
+f74 1.175494358e-38
+f75 00000001.175494358e-38
+f76 00000001.175494358e-38
+f77 -1.175494344e-38
+f78 1.175494358e-38
+f79 00000001.175494358e-38
+f80 00000001.175494358e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494344e-38
+f95 1.17549e-38
+f96 1.175494358e-38
+f97 01.17549e-38
+f98 00000001.175494358e-38
+f99 01.17549e-38
+f100 00000001.175494358e-38
+f101 1000-01-07
+f102 838:59:52
+f103 1970-01-08 00:00:07
+f104 1970-01-08 00:00:07
+f105 1908
+f106 1908
+f107 1908
+f108 2enum
+f109 2set
+f59 8
+f60 8
+f61 0000000008
+f62 0000000000000000000000000000000000000000000000000000000000000008
+f63 0000000008
+f64 0000000000000000000000000000000000000000000000000000000000000008
+f65 2
+f66 7.700000000000000000000000000000
+f67 8
+f68 7.700000000000000000000000000000
+f69 0000000008
+f70 000000000000000000000000000000007.700000000000000000000000000000
+f71 0000000008
+f72 000000000000000000000000000000007.700000000000000000000000000000
+f73 -1.175494343e-38
+f74 1.175494359e-38
+f75 00000001.175494359e-38
+f76 00000001.175494359e-38
+f77 -1.175494343e-38
+f78 1.175494359e-38
+f79 00000001.175494359e-38
+f80 00000001.175494359e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494343e-38
+f95 1.17549e-38
+f96 1.175494359e-38
+f97 01.17549e-38
+f98 00000001.175494359e-38
+f99 01.17549e-38
+f100 00000001.175494359e-38
+f101 1000-01-08
+f102 838:59:51
+f103 1970-01-09 00:00:08
+f104 1970-01-09 00:00:08
+f105 1909
+f106 1909
+f107 1909
+f108 1enum
+f109 1set,2set
+f59 9
+f60 9
+f61 0000000009
+f62 0000000000000000000000000000000000000000000000000000000000000009
+f63 0000000009
+f64 0000000000000000000000000000000000000000000000000000000000000009
+f65 3
+f66 8.800000000000000000000000000000
+f67 9
+f68 8.800000000000000000000000000000
+f69 0000000009
+f70 000000000000000000000000000000008.800000000000000000000000000000
+f71 0000000009
+f72 000000000000000000000000000000008.800000000000000000000000000000
+f73 -1.175494342e-38
+f74 1.17549436e-38
+f75 000000001.17549436e-38
+f76 000000001.17549436e-38
+f77 -1.175494342e-38
+f78 1.17549436e-38
+f79 000000001.17549436e-38
+f80 000000001.17549436e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494342e-38
+f95 1.17549e-38
+f96 1.17549436e-38
+f97 01.17549e-38
+f98 000000001.17549436e-38
+f99 01.17549e-38
+f100 000000001.17549436e-38
+f101 1000-01-09
+f102 838:59:50
+f103 1970-01-10 00:00:09
+f104 1970-01-10 00:00:09
+f105 1910
+f106 1910
+f107 1910
+f108 2enum
+f109 1set
+f59 10
+f60 10
+f61 0000000010
+f62 0000000000000000000000000000000000000000000000000000000000000010
+f63 0000000010
+f64 0000000000000000000000000000000000000000000000000000000000000010
+f65 4
+f66 9.900000000000000000000000000000
+f67 10
+f68 9.900000000000000000000000000000
+f69 0000000010
+f70 000000000000000000000000000000009.900000000000000000000000000000
+f71 0000000010
+f72 000000000000000000000000000000009.900000000000000000000000000000
+f73 -1.175494341e-38
+f74 1.175494361e-38
+f75 00000001.175494361e-38
+f76 00000001.175494361e-38
+f77 -1.175494341e-38
+f78 1.175494361e-38
+f79 00000001.175494361e-38
+f80 00000001.175494361e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494341e-38
+f95 1.17549e-38
+f96 1.175494361e-38
+f97 01.17549e-38
+f98 00000001.175494361e-38
+f99 01.17549e-38
+f100 00000001.175494361e-38
+f101 1000-01-10
+f102 838:59:49
+f103 1970-01-11 00:00:10
+f104 1970-01-11 00:00:10
+f105 1911
+f106 1911
+f107 1911
+f108 1enum
+f109 2set
+f59 15
+f60 87
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 17
+f60 15
+f61 0000000016
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 19
+f60 18
+f61 0000000014
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 22
+f60 93
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 24
+f60 51654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 27
+f60 25
+f61 0000000026
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 29
+f60 28
+f61 0000000024
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 34
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 94
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 107
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 107
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 109
+f60 108
+f61 0000000104
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 109
+f60 108
+f61 0000000104
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 195
+f60 87
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 207
+f60 205
+f61 0000000206
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 209
+f60 208
+f61 0000000204
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 242
+f60 79
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 250
+f60 87895654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 292
+f60 93
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 299
+f60 899
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 321
+f60 NULL
+f61 0000000765
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 323
+f60 14376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 340
+f60 9984376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 394
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 424
+f60 89
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 441
+f60 16546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 660
+f60 876546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 987
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 2550
+f60 775654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 2760
+f60 985654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 3330
+f60 764376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 3410
+f60 996546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 7876
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 9112
+f60 NULL
+f61 0000008771
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 76710
+f60 226546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 569300
+f60 9114376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 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 ;
@@ -1741,29 +7479,29 @@ Drop view if exists test.v1 ;
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 order by f59,f60;
+Create view test.v1 as Select f59, f60 FROM test.tb2;
+Select * from test.v1 order by f59,f60 limit 20;
f59 f60
1 1
2 2
3 3
4 4
+4 74
5 5
6 6
7 7
8 8
9 9
10 10
-250 87895654
-340 9984376
-441 16546
-660 876546
-2550 775654
-2760 985654
-3330 764376
-3410 996546
-76710 226546
-569300 9114376
+15 87
+17 15
+19 18
+22 93
+24 51654
+27 25
+29 28
+34 41
+94 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 ;
@@ -1850,12 +7588,110 @@ Drop view if exists test.v1 ;
CREATE VIEW test.v1 AS SELECT f59,f60 FROM test.tb2;
INSERT INTO test.v1 values(122,432);
SELECT * FROM test.tb2 where f59 = 122 and f60 = 432 limit 0,20;
-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
-122 432 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set
+f59 122
+f60 432
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
UPDATE test.v1 SET f59 = 3000 WHERE test.v1.f59 = 122 ;
SELECT * FROM test.tb2 where f59 = 3000 limit 0,20;
-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
-3000 432 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set
+f59 3000
+f60 432
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
DELETE FROM test.v1
where test.v1.f59 = 3000 and test.v1.f60 = 432;
SELECT * FROM test.tb2 where f59 = 3000 and f60 = 432;
@@ -1880,16 +7716,214 @@ info: Rows matched: 2 Changed: 2 Warnings: 0
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
-30 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
-30 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
+f59 30
+f60 4
+f61 0000000004
+f62 0000000000000000000000000000000000000000000000000000000000000004
+f63 0000000004
+f64 0000000000000000000000000000000000000000000000000000000000000004
+f65 -2
+f66 3.300000000000000000000000000000
+f67 4
+f68 3.300000000000000000000000000000
+f69 0000000004
+f70 000000000000000000000000000000003.300000000000000000000000000000
+f71 0000000004
+f72 000000000000000000000000000000003.300000000000000000000000000000
+f73 -1.175494347e-38
+f74 1.175494355e-38
+f75 00000001.175494355e-38
+f76 00000001.175494355e-38
+f77 -1.175494347e-38
+f78 1.175494355e-38
+f79 00000001.175494355e-38
+f80 00000001.175494355e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494347e-38
+f95 1.17549e-38
+f96 1.175494355e-38
+f97 01.17549e-38
+f98 00000001.175494355e-38
+f99 01.17549e-38
+f100 00000001.175494355e-38
+f101 1000-01-04
+f102 838:59:55
+f103 1970-01-05 00:00:04
+f104 1970-01-05 00:00:04
+f105 1905
+f106 1905
+f107 1905
+f108 1enum
+f109 2set
+f59 30
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
UPDATE tb2 SET f59 = 100 where f59 = 30 ;
affected rows: 2
info: Rows matched: 2 Changed: 2 Warnings: 0
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
+f59 100
+f60 4
+f61 0000000004
+f62 0000000000000000000000000000000000000000000000000000000000000004
+f63 0000000004
+f64 0000000000000000000000000000000000000000000000000000000000000004
+f65 -2
+f66 3.300000000000000000000000000000
+f67 4
+f68 3.300000000000000000000000000000
+f69 0000000004
+f70 000000000000000000000000000000003.300000000000000000000000000000
+f71 0000000004
+f72 000000000000000000000000000000003.300000000000000000000000000000
+f73 -1.175494347e-38
+f74 1.175494355e-38
+f75 00000001.175494355e-38
+f76 00000001.175494355e-38
+f77 -1.175494347e-38
+f78 1.175494355e-38
+f79 00000001.175494355e-38
+f80 00000001.175494355e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494347e-38
+f95 1.17549e-38
+f96 1.175494355e-38
+f97 01.17549e-38
+f98 00000001.175494355e-38
+f99 01.17549e-38
+f100 00000001.175494355e-38
+f101 1000-01-04
+f102 838:59:55
+f103 1970-01-05 00:00:04
+f104 1970-01-05 00:00:04
+f105 1905
+f106 1905
+f107 1905
+f108 1enum
+f109 2set
+f59 100
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
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 ;
@@ -9654,8 +15688,8 @@ WHERE v3_to_v1_options LIKE ' %' AND errno <> 0
ORDER BY v3_to_v1_options;
v3_to_v1_options statement v3_to_v1_violation errno
SELECT * FROM t1_results
-WHERE v3_to_v1_options LIKE 'WITH %'
-AND v3_to_v1_violation LIKE 'v3_%' AND errno = 0
+WHERE v3_to_v1_options LIKE 'WITH %'
+ AND v3_to_v1_violation LIKE 'v3_%' AND errno = 0
ORDER BY v3_to_v1_options;
v3_to_v1_options statement v3_to_v1_violation errno
SELECT * FROM t1_results
@@ -9675,17 +15709,2561 @@ DROP TABLE t1_results;
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 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
-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
+CREATE VIEW test.v1 AS SELECT * FROM test.tb2;
+SELECT * FROM test.v1 order by f59,f60,f61 ;
+f59 1
+f60 1
+f61 0000000001
+f62 0000000000000000000000000000000000000000000000000000000000000001
+f63 0000000001
+f64 0000000000000000000000000000000000000000000000000000000000000001
+f65 -5
+f66 0.000000000000000000000000000000
+f67 1
+f68 0.000000000000000000000000000000
+f69 0000000001
+f70 000000000000000000000000000000000.000000000000000000000000000000
+f71 0000000001
+f72 000000000000000000000000000000000.000000000000000000000000000000
+f73 -1.17549435e-38
+f74 1.175494352e-38
+f75 00000001.175494352e-38
+f76 00000001.175494352e-38
+f77 -1.17549435e-38
+f78 1.175494352e-38
+f79 00000001.175494352e-38
+f80 00000001.175494352e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.17549435e-38
+f95 1.17549e-38
+f96 1.175494352e-38
+f97 01.17549e-38
+f98 00000001.175494352e-38
+f99 01.17549e-38
+f100 00000001.175494352e-38
+f101 1000-01-01
+f102 838:59:58
+f103 1970-01-02 00:00:01
+f104 1970-01-02 00:00:01
+f105 1902
+f106 1902
+f107 1902
+f108 2enum
+f109 2set
+f59 2
+f60 2
+f61 0000000002
+f62 0000000000000000000000000000000000000000000000000000000000000002
+f63 0000000002
+f64 0000000000000000000000000000000000000000000000000000000000000002
+f65 -4
+f66 1.100000000000000000000000000000
+f67 2
+f68 1.100000000000000000000000000000
+f69 0000000002
+f70 000000000000000000000000000000001.100000000000000000000000000000
+f71 0000000002
+f72 000000000000000000000000000000001.100000000000000000000000000000
+f73 -1.175494349e-38
+f74 1.175494353e-38
+f75 00000001.175494353e-38
+f76 00000001.175494353e-38
+f77 -1.175494349e-38
+f78 1.175494353e-38
+f79 00000001.175494353e-38
+f80 00000001.175494353e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494349e-38
+f95 1.17549e-38
+f96 1.175494353e-38
+f97 01.17549e-38
+f98 00000001.175494353e-38
+f99 01.17549e-38
+f100 00000001.175494353e-38
+f101 1000-01-02
+f102 838:59:57
+f103 1970-01-03 00:00:02
+f104 1970-01-03 00:00:02
+f105 1903
+f106 1903
+f107 1903
+f108 1enum
+f109 1set,2set
+f59 3
+f60 3
+f61 0000000003
+f62 0000000000000000000000000000000000000000000000000000000000000003
+f63 0000000003
+f64 0000000000000000000000000000000000000000000000000000000000000003
+f65 -3
+f66 2.200000000000000000000000000000
+f67 3
+f68 2.200000000000000000000000000000
+f69 0000000003
+f70 000000000000000000000000000000002.200000000000000000000000000000
+f71 0000000003
+f72 000000000000000000000000000000002.200000000000000000000000000000
+f73 -1.175494348e-38
+f74 1.175494354e-38
+f75 00000001.175494354e-38
+f76 00000001.175494354e-38
+f77 -1.175494348e-38
+f78 1.175494354e-38
+f79 00000001.175494354e-38
+f80 00000001.175494354e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494348e-38
+f95 1.17549e-38
+f96 1.175494354e-38
+f97 01.17549e-38
+f98 00000001.175494354e-38
+f99 01.17549e-38
+f100 00000001.175494354e-38
+f101 1000-01-03
+f102 838:59:56
+f103 1970-01-04 00:00:03
+f104 1970-01-04 00:00:03
+f105 1904
+f106 1904
+f107 1904
+f108 2enum
+f109 1set
+f59 5
+f60 5
+f61 0000000005
+f62 0000000000000000000000000000000000000000000000000000000000000005
+f63 0000000005
+f64 0000000000000000000000000000000000000000000000000000000000000005
+f65 -1
+f66 4.400000000000000000000000000000
+f67 5
+f68 4.400000000000000000000000000000
+f69 0000000005
+f70 000000000000000000000000000000004.400000000000000000000000000000
+f71 0000000005
+f72 000000000000000000000000000000004.400000000000000000000000000000
+f73 -1.175494346e-38
+f74 1.175494356e-38
+f75 00000001.175494356e-38
+f76 00000001.175494356e-38
+f77 -1.175494346e-38
+f78 1.175494356e-38
+f79 00000001.175494356e-38
+f80 00000001.175494356e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494346e-38
+f95 1.17549e-38
+f96 1.175494356e-38
+f97 01.17549e-38
+f98 00000001.175494356e-38
+f99 01.17549e-38
+f100 00000001.175494356e-38
+f101 1000-01-05
+f102 838:59:54
+f103 1970-01-06 00:00:05
+f104 1970-01-06 00:00:05
+f105 1906
+f106 1906
+f107 1906
+f108 2enum
+f109 1set,2set
+f59 6
+f60 6
+f61 0000000006
+f62 0000000000000000000000000000000000000000000000000000000000000006
+f63 0000000006
+f64 0000000000000000000000000000000000000000000000000000000000000006
+f65 0
+f66 5.500000000000000000000000000000
+f67 6
+f68 5.500000000000000000000000000000
+f69 0000000006
+f70 000000000000000000000000000000005.500000000000000000000000000000
+f71 0000000006
+f72 000000000000000000000000000000005.500000000000000000000000000000
+f73 -1.175494345e-38
+f74 1.175494357e-38
+f75 00000001.175494357e-38
+f76 00000001.175494357e-38
+f77 -1.175494345e-38
+f78 1.175494357e-38
+f79 00000001.175494357e-38
+f80 00000001.175494357e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494345e-38
+f95 1.17549e-38
+f96 1.175494357e-38
+f97 01.17549e-38
+f98 00000001.175494357e-38
+f99 01.17549e-38
+f100 00000001.175494357e-38
+f101 1000-01-06
+f102 838:59:53
+f103 1970-01-07 00:00:06
+f104 1970-01-07 00:00:06
+f105 1907
+f106 1907
+f107 1907
+f108 1enum
+f109 1set
+f59 7
+f60 7
+f61 0000000007
+f62 0000000000000000000000000000000000000000000000000000000000000007
+f63 0000000007
+f64 0000000000000000000000000000000000000000000000000000000000000007
+f65 1
+f66 6.600000000000000000000000000000
+f67 7
+f68 6.600000000000000000000000000000
+f69 0000000007
+f70 000000000000000000000000000000006.600000000000000000000000000000
+f71 0000000007
+f72 000000000000000000000000000000006.600000000000000000000000000000
+f73 -1.175494344e-38
+f74 1.175494358e-38
+f75 00000001.175494358e-38
+f76 00000001.175494358e-38
+f77 -1.175494344e-38
+f78 1.175494358e-38
+f79 00000001.175494358e-38
+f80 00000001.175494358e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494344e-38
+f95 1.17549e-38
+f96 1.175494358e-38
+f97 01.17549e-38
+f98 00000001.175494358e-38
+f99 01.17549e-38
+f100 00000001.175494358e-38
+f101 1000-01-07
+f102 838:59:52
+f103 1970-01-08 00:00:07
+f104 1970-01-08 00:00:07
+f105 1908
+f106 1908
+f107 1908
+f108 2enum
+f109 2set
+f59 8
+f60 8
+f61 0000000008
+f62 0000000000000000000000000000000000000000000000000000000000000008
+f63 0000000008
+f64 0000000000000000000000000000000000000000000000000000000000000008
+f65 2
+f66 7.700000000000000000000000000000
+f67 8
+f68 7.700000000000000000000000000000
+f69 0000000008
+f70 000000000000000000000000000000007.700000000000000000000000000000
+f71 0000000008
+f72 000000000000000000000000000000007.700000000000000000000000000000
+f73 -1.175494343e-38
+f74 1.175494359e-38
+f75 00000001.175494359e-38
+f76 00000001.175494359e-38
+f77 -1.175494343e-38
+f78 1.175494359e-38
+f79 00000001.175494359e-38
+f80 00000001.175494359e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494343e-38
+f95 1.17549e-38
+f96 1.175494359e-38
+f97 01.17549e-38
+f98 00000001.175494359e-38
+f99 01.17549e-38
+f100 00000001.175494359e-38
+f101 1000-01-08
+f102 838:59:51
+f103 1970-01-09 00:00:08
+f104 1970-01-09 00:00:08
+f105 1909
+f106 1909
+f107 1909
+f108 1enum
+f109 1set,2set
+f59 9
+f60 9
+f61 0000000009
+f62 0000000000000000000000000000000000000000000000000000000000000009
+f63 0000000009
+f64 0000000000000000000000000000000000000000000000000000000000000009
+f65 3
+f66 8.800000000000000000000000000000
+f67 9
+f68 8.800000000000000000000000000000
+f69 0000000009
+f70 000000000000000000000000000000008.800000000000000000000000000000
+f71 0000000009
+f72 000000000000000000000000000000008.800000000000000000000000000000
+f73 -1.175494342e-38
+f74 1.17549436e-38
+f75 000000001.17549436e-38
+f76 000000001.17549436e-38
+f77 -1.175494342e-38
+f78 1.17549436e-38
+f79 000000001.17549436e-38
+f80 000000001.17549436e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494342e-38
+f95 1.17549e-38
+f96 1.17549436e-38
+f97 01.17549e-38
+f98 000000001.17549436e-38
+f99 01.17549e-38
+f100 000000001.17549436e-38
+f101 1000-01-09
+f102 838:59:50
+f103 1970-01-10 00:00:09
+f104 1970-01-10 00:00:09
+f105 1910
+f106 1910
+f107 1910
+f108 2enum
+f109 1set
+f59 10
+f60 10
+f61 0000000010
+f62 0000000000000000000000000000000000000000000000000000000000000010
+f63 0000000010
+f64 0000000000000000000000000000000000000000000000000000000000000010
+f65 4
+f66 9.900000000000000000000000000000
+f67 10
+f68 9.900000000000000000000000000000
+f69 0000000010
+f70 000000000000000000000000000000009.900000000000000000000000000000
+f71 0000000010
+f72 000000000000000000000000000000009.900000000000000000000000000000
+f73 -1.175494341e-38
+f74 1.175494361e-38
+f75 00000001.175494361e-38
+f76 00000001.175494361e-38
+f77 -1.175494341e-38
+f78 1.175494361e-38
+f79 00000001.175494361e-38
+f80 00000001.175494361e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494341e-38
+f95 1.17549e-38
+f96 1.175494361e-38
+f97 01.17549e-38
+f98 00000001.175494361e-38
+f99 01.17549e-38
+f100 00000001.175494361e-38
+f101 1000-01-10
+f102 838:59:49
+f103 1970-01-11 00:00:10
+f104 1970-01-11 00:00:10
+f105 1911
+f106 1911
+f107 1911
+f108 1enum
+f109 2set
+f59 15
+f60 87
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 17
+f60 15
+f61 0000000016
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 19
+f60 18
+f61 0000000014
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 22
+f60 93
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 24
+f60 51654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 27
+f60 25
+f61 0000000026
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 29
+f60 28
+f61 0000000024
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 34
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 94
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 100
+f60 4
+f61 0000000004
+f62 0000000000000000000000000000000000000000000000000000000000000004
+f63 0000000004
+f64 0000000000000000000000000000000000000000000000000000000000000004
+f65 -2
+f66 3.300000000000000000000000000000
+f67 4
+f68 3.300000000000000000000000000000
+f69 0000000004
+f70 000000000000000000000000000000003.300000000000000000000000000000
+f71 0000000004
+f72 000000000000000000000000000000003.300000000000000000000000000000
+f73 -1.175494347e-38
+f74 1.175494355e-38
+f75 00000001.175494355e-38
+f76 00000001.175494355e-38
+f77 -1.175494347e-38
+f78 1.175494355e-38
+f79 00000001.175494355e-38
+f80 00000001.175494355e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494347e-38
+f95 1.17549e-38
+f96 1.175494355e-38
+f97 01.17549e-38
+f98 00000001.175494355e-38
+f99 01.17549e-38
+f100 00000001.175494355e-38
+f101 1000-01-04
+f102 838:59:55
+f103 1970-01-05 00:00:04
+f104 1970-01-05 00:00:04
+f105 1905
+f106 1905
+f107 1905
+f108 1enum
+f109 2set
+f59 100
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 107
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 107
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 109
+f60 108
+f61 0000000104
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 109
+f60 108
+f61 0000000104
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 195
+f60 87
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 207
+f60 205
+f61 0000000206
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 209
+f60 208
+f61 0000000204
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 242
+f60 79
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 250
+f60 87895654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 292
+f60 93
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 299
+f60 899
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 321
+f60 NULL
+f61 0000000765
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 323
+f60 14376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 340
+f60 9984376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 394
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 424
+f60 89
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 441
+f60 16546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 660
+f60 876546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 987
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 2550
+f60 775654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 2760
+f60 985654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 3330
+f60 764376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 3410
+f60 996546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 7876
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 9112
+f60 NULL
+f61 0000008771
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 76710
+f60 226546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 569300
+f60 9114376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
drop view test.v1 ;
-CREATE VIEW test.v1 AS SELECT F59,F61 FROM test.tb2 limit 50 ;
-SELECT * FROM test.v1 order by F59, F61 ;
+CREATE VIEW test.v1 AS SELECT F59,F61 FROM test.tb2;
+SELECT * FROM test.v1 order by F59, F61 limit 50;
F59 F61
1 0000000001
2 0000000002
@@ -9738,32 +18316,2561 @@ F59 F61
76710 NULL
569300 NULL
drop view test.v1 ;
-CREATE VIEW test.v1 AS SELECT * FROM test.tb2 order by f59, f60, f61 limit 20 ;
+CREATE VIEW test.v1 AS SELECT * FROM test.tb2 order by f59, f60, f61;
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
-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
-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
+f59 1
+f60 1
+f61 0000000001
+f62 0000000000000000000000000000000000000000000000000000000000000001
+f63 0000000001
+f64 0000000000000000000000000000000000000000000000000000000000000001
+f65 -5
+f66 0.000000000000000000000000000000
+f67 1
+f68 0.000000000000000000000000000000
+f69 0000000001
+f70 000000000000000000000000000000000.000000000000000000000000000000
+f71 0000000001
+f72 000000000000000000000000000000000.000000000000000000000000000000
+f73 -1.17549435e-38
+f74 1.175494352e-38
+f75 00000001.175494352e-38
+f76 00000001.175494352e-38
+f77 -1.17549435e-38
+f78 1.175494352e-38
+f79 00000001.175494352e-38
+f80 00000001.175494352e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.17549435e-38
+f95 1.17549e-38
+f96 1.175494352e-38
+f97 01.17549e-38
+f98 00000001.175494352e-38
+f99 01.17549e-38
+f100 00000001.175494352e-38
+f101 1000-01-01
+f102 838:59:58
+f103 1970-01-02 00:00:01
+f104 1970-01-02 00:00:01
+f105 1902
+f106 1902
+f107 1902
+f108 2enum
+f109 2set
+f59 2
+f60 2
+f61 0000000002
+f62 0000000000000000000000000000000000000000000000000000000000000002
+f63 0000000002
+f64 0000000000000000000000000000000000000000000000000000000000000002
+f65 -4
+f66 1.100000000000000000000000000000
+f67 2
+f68 1.100000000000000000000000000000
+f69 0000000002
+f70 000000000000000000000000000000001.100000000000000000000000000000
+f71 0000000002
+f72 000000000000000000000000000000001.100000000000000000000000000000
+f73 -1.175494349e-38
+f74 1.175494353e-38
+f75 00000001.175494353e-38
+f76 00000001.175494353e-38
+f77 -1.175494349e-38
+f78 1.175494353e-38
+f79 00000001.175494353e-38
+f80 00000001.175494353e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494349e-38
+f95 1.17549e-38
+f96 1.175494353e-38
+f97 01.17549e-38
+f98 00000001.175494353e-38
+f99 01.17549e-38
+f100 00000001.175494353e-38
+f101 1000-01-02
+f102 838:59:57
+f103 1970-01-03 00:00:02
+f104 1970-01-03 00:00:02
+f105 1903
+f106 1903
+f107 1903
+f108 1enum
+f109 1set,2set
+f59 3
+f60 3
+f61 0000000003
+f62 0000000000000000000000000000000000000000000000000000000000000003
+f63 0000000003
+f64 0000000000000000000000000000000000000000000000000000000000000003
+f65 -3
+f66 2.200000000000000000000000000000
+f67 3
+f68 2.200000000000000000000000000000
+f69 0000000003
+f70 000000000000000000000000000000002.200000000000000000000000000000
+f71 0000000003
+f72 000000000000000000000000000000002.200000000000000000000000000000
+f73 -1.175494348e-38
+f74 1.175494354e-38
+f75 00000001.175494354e-38
+f76 00000001.175494354e-38
+f77 -1.175494348e-38
+f78 1.175494354e-38
+f79 00000001.175494354e-38
+f80 00000001.175494354e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494348e-38
+f95 1.17549e-38
+f96 1.175494354e-38
+f97 01.17549e-38
+f98 00000001.175494354e-38
+f99 01.17549e-38
+f100 00000001.175494354e-38
+f101 1000-01-03
+f102 838:59:56
+f103 1970-01-04 00:00:03
+f104 1970-01-04 00:00:03
+f105 1904
+f106 1904
+f107 1904
+f108 2enum
+f109 1set
+f59 5
+f60 5
+f61 0000000005
+f62 0000000000000000000000000000000000000000000000000000000000000005
+f63 0000000005
+f64 0000000000000000000000000000000000000000000000000000000000000005
+f65 -1
+f66 4.400000000000000000000000000000
+f67 5
+f68 4.400000000000000000000000000000
+f69 0000000005
+f70 000000000000000000000000000000004.400000000000000000000000000000
+f71 0000000005
+f72 000000000000000000000000000000004.400000000000000000000000000000
+f73 -1.175494346e-38
+f74 1.175494356e-38
+f75 00000001.175494356e-38
+f76 00000001.175494356e-38
+f77 -1.175494346e-38
+f78 1.175494356e-38
+f79 00000001.175494356e-38
+f80 00000001.175494356e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494346e-38
+f95 1.17549e-38
+f96 1.175494356e-38
+f97 01.17549e-38
+f98 00000001.175494356e-38
+f99 01.17549e-38
+f100 00000001.175494356e-38
+f101 1000-01-05
+f102 838:59:54
+f103 1970-01-06 00:00:05
+f104 1970-01-06 00:00:05
+f105 1906
+f106 1906
+f107 1906
+f108 2enum
+f109 1set,2set
+f59 6
+f60 6
+f61 0000000006
+f62 0000000000000000000000000000000000000000000000000000000000000006
+f63 0000000006
+f64 0000000000000000000000000000000000000000000000000000000000000006
+f65 0
+f66 5.500000000000000000000000000000
+f67 6
+f68 5.500000000000000000000000000000
+f69 0000000006
+f70 000000000000000000000000000000005.500000000000000000000000000000
+f71 0000000006
+f72 000000000000000000000000000000005.500000000000000000000000000000
+f73 -1.175494345e-38
+f74 1.175494357e-38
+f75 00000001.175494357e-38
+f76 00000001.175494357e-38
+f77 -1.175494345e-38
+f78 1.175494357e-38
+f79 00000001.175494357e-38
+f80 00000001.175494357e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494345e-38
+f95 1.17549e-38
+f96 1.175494357e-38
+f97 01.17549e-38
+f98 00000001.175494357e-38
+f99 01.17549e-38
+f100 00000001.175494357e-38
+f101 1000-01-06
+f102 838:59:53
+f103 1970-01-07 00:00:06
+f104 1970-01-07 00:00:06
+f105 1907
+f106 1907
+f107 1907
+f108 1enum
+f109 1set
+f59 7
+f60 7
+f61 0000000007
+f62 0000000000000000000000000000000000000000000000000000000000000007
+f63 0000000007
+f64 0000000000000000000000000000000000000000000000000000000000000007
+f65 1
+f66 6.600000000000000000000000000000
+f67 7
+f68 6.600000000000000000000000000000
+f69 0000000007
+f70 000000000000000000000000000000006.600000000000000000000000000000
+f71 0000000007
+f72 000000000000000000000000000000006.600000000000000000000000000000
+f73 -1.175494344e-38
+f74 1.175494358e-38
+f75 00000001.175494358e-38
+f76 00000001.175494358e-38
+f77 -1.175494344e-38
+f78 1.175494358e-38
+f79 00000001.175494358e-38
+f80 00000001.175494358e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494344e-38
+f95 1.17549e-38
+f96 1.175494358e-38
+f97 01.17549e-38
+f98 00000001.175494358e-38
+f99 01.17549e-38
+f100 00000001.175494358e-38
+f101 1000-01-07
+f102 838:59:52
+f103 1970-01-08 00:00:07
+f104 1970-01-08 00:00:07
+f105 1908
+f106 1908
+f107 1908
+f108 2enum
+f109 2set
+f59 8
+f60 8
+f61 0000000008
+f62 0000000000000000000000000000000000000000000000000000000000000008
+f63 0000000008
+f64 0000000000000000000000000000000000000000000000000000000000000008
+f65 2
+f66 7.700000000000000000000000000000
+f67 8
+f68 7.700000000000000000000000000000
+f69 0000000008
+f70 000000000000000000000000000000007.700000000000000000000000000000
+f71 0000000008
+f72 000000000000000000000000000000007.700000000000000000000000000000
+f73 -1.175494343e-38
+f74 1.175494359e-38
+f75 00000001.175494359e-38
+f76 00000001.175494359e-38
+f77 -1.175494343e-38
+f78 1.175494359e-38
+f79 00000001.175494359e-38
+f80 00000001.175494359e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494343e-38
+f95 1.17549e-38
+f96 1.175494359e-38
+f97 01.17549e-38
+f98 00000001.175494359e-38
+f99 01.17549e-38
+f100 00000001.175494359e-38
+f101 1000-01-08
+f102 838:59:51
+f103 1970-01-09 00:00:08
+f104 1970-01-09 00:00:08
+f105 1909
+f106 1909
+f107 1909
+f108 1enum
+f109 1set,2set
+f59 9
+f60 9
+f61 0000000009
+f62 0000000000000000000000000000000000000000000000000000000000000009
+f63 0000000009
+f64 0000000000000000000000000000000000000000000000000000000000000009
+f65 3
+f66 8.800000000000000000000000000000
+f67 9
+f68 8.800000000000000000000000000000
+f69 0000000009
+f70 000000000000000000000000000000008.800000000000000000000000000000
+f71 0000000009
+f72 000000000000000000000000000000008.800000000000000000000000000000
+f73 -1.175494342e-38
+f74 1.17549436e-38
+f75 000000001.17549436e-38
+f76 000000001.17549436e-38
+f77 -1.175494342e-38
+f78 1.17549436e-38
+f79 000000001.17549436e-38
+f80 000000001.17549436e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494342e-38
+f95 1.17549e-38
+f96 1.17549436e-38
+f97 01.17549e-38
+f98 000000001.17549436e-38
+f99 01.17549e-38
+f100 000000001.17549436e-38
+f101 1000-01-09
+f102 838:59:50
+f103 1970-01-10 00:00:09
+f104 1970-01-10 00:00:09
+f105 1910
+f106 1910
+f107 1910
+f108 2enum
+f109 1set
+f59 10
+f60 10
+f61 0000000010
+f62 0000000000000000000000000000000000000000000000000000000000000010
+f63 0000000010
+f64 0000000000000000000000000000000000000000000000000000000000000010
+f65 4
+f66 9.900000000000000000000000000000
+f67 10
+f68 9.900000000000000000000000000000
+f69 0000000010
+f70 000000000000000000000000000000009.900000000000000000000000000000
+f71 0000000010
+f72 000000000000000000000000000000009.900000000000000000000000000000
+f73 -1.175494341e-38
+f74 1.175494361e-38
+f75 00000001.175494361e-38
+f76 00000001.175494361e-38
+f77 -1.175494341e-38
+f78 1.175494361e-38
+f79 00000001.175494361e-38
+f80 00000001.175494361e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494341e-38
+f95 1.17549e-38
+f96 1.175494361e-38
+f97 01.17549e-38
+f98 00000001.175494361e-38
+f99 01.17549e-38
+f100 00000001.175494361e-38
+f101 1000-01-10
+f102 838:59:49
+f103 1970-01-11 00:00:10
+f104 1970-01-11 00:00:10
+f105 1911
+f106 1911
+f107 1911
+f108 1enum
+f109 2set
+f59 15
+f60 87
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 17
+f60 15
+f61 0000000016
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 19
+f60 18
+f61 0000000014
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 22
+f60 93
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 24
+f60 51654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 27
+f60 25
+f61 0000000026
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 29
+f60 28
+f61 0000000024
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 34
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 94
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 100
+f60 4
+f61 0000000004
+f62 0000000000000000000000000000000000000000000000000000000000000004
+f63 0000000004
+f64 0000000000000000000000000000000000000000000000000000000000000004
+f65 -2
+f66 3.300000000000000000000000000000
+f67 4
+f68 3.300000000000000000000000000000
+f69 0000000004
+f70 000000000000000000000000000000003.300000000000000000000000000000
+f71 0000000004
+f72 000000000000000000000000000000003.300000000000000000000000000000
+f73 -1.175494347e-38
+f74 1.175494355e-38
+f75 00000001.175494355e-38
+f76 00000001.175494355e-38
+f77 -1.175494347e-38
+f78 1.175494355e-38
+f79 00000001.175494355e-38
+f80 00000001.175494355e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494347e-38
+f95 1.17549e-38
+f96 1.175494355e-38
+f97 01.17549e-38
+f98 00000001.175494355e-38
+f99 01.17549e-38
+f100 00000001.175494355e-38
+f101 1000-01-04
+f102 838:59:55
+f103 1970-01-05 00:00:04
+f104 1970-01-05 00:00:04
+f105 1905
+f106 1905
+f107 1905
+f108 1enum
+f109 2set
+f59 100
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 107
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 107
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 109
+f60 108
+f61 0000000104
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 109
+f60 108
+f61 0000000104
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 195
+f60 87
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 207
+f60 205
+f61 0000000206
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 209
+f60 208
+f61 0000000204
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 242
+f60 79
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 250
+f60 87895654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 292
+f60 93
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 299
+f60 899
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 321
+f60 NULL
+f61 0000000765
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 323
+f60 14376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 340
+f60 9984376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 394
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 424
+f60 89
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 441
+f60 16546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 660
+f60 876546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 987
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 2550
+f60 775654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 2760
+f60 985654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 3330
+f60 764376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 3410
+f60 996546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 7876
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 9112
+f60 NULL
+f61 0000008771
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 76710
+f60 226546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 569300
+f60 9114376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
drop view test.v1 ;
-CREATE VIEW test.v1 AS SELECT F59,f61 FROM test.tb2 limit 20 ;
-SELECT * FROM test.v1 order by f59,f61 desc limit 50;
+CREATE VIEW test.v1 AS SELECT F59,f61 FROM test.tb2;
+SELECT * FROM test.v1 order by f59,f61 desc limit 20;
F59 f61
1 0000000001
2 0000000002
@@ -9774,17 +20881,17 @@ F59 f61
8 0000000008
9 0000000009
10 0000000010
+15 NULL
+17 0000000016
+19 0000000014
+22 NULL
+24 NULL
+27 0000000026
+29 0000000024
+34 NULL
+94 NULL
100 0000000004
-250 NULL
-340 NULL
-441 NULL
-660 NULL
-2550 NULL
-2760 NULL
-3330 NULL
-3410 NULL
-76710 NULL
-569300 NULL
+100 NULL
drop view test.v1 ;
Testcase 3.3.1.54
@@ -9841,16 +20948,23 @@ f2
two
SET sql_mode = 'traditional,ansi';
CREATE OR REPLACE VIEW v1 AS
+SELECT f3 AS "pure column f3:", f1 + f3 AS "sum of columns f1 + f3 =",
+3 * (- 0.11111E+1) AS "product of constants 3 * (- 0.11111E+1):",
+'->' || CAST(f3 AS CHAR) || '<-'
+ AS "expression with '||'=CONCAT and CAST(DECIMAL column AS CHAR):"
+FROM t1 WHERE f1 = 2;
+CREATE OR REPLACE VIEW v1 AS
SELECT f3 AS "pure column f3: ", f1 + f3 AS "sum of columns f1 + f3 = ",
3 * (- 0.11111E+1) AS "product of constants 3 * (- 0.11111E+1): ",
'->' || CAST(f3 AS CHAR) || '<-'
AS "expression with '||'=CONCAT and CAST(DECIMAL column AS CHAR): "
FROM t1 WHERE f1 = 2;
+ERROR 42000: Incorrect column name 'pure column f3: '
SELECT * FROM v1;
-pure column f3: 2.20000
-sum of columns f1 + f3 = 4.20000
-product of constants 3 * (- 0.11111E+1): -3.3333
-expression with '||'=CONCAT and CAST(DECIMAL column AS CHAR): ->2.20000<-
+pure column f3: 2.20000
+sum of columns f1 + f3 = 4.20000
+product of constants 3 * (- 0.11111E+1): -3.3333
+expression with '||'=CONCAT and CAST(DECIMAL column AS CHAR): ->2.20000<-
SET sql_mode = '';
Testcases 3.3.1.55 - 3.3.1.62
@@ -10128,8 +21242,57 @@ F59
ALTER VIEW test.v1 AS SELECT *
FROM test.tb2 WHERE test.tb2.f59 = 242 ;
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
+f59 242
+f60 79
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
Drop view test.v1 ;
Testcase 3.3.1.65, 3.3.1.A4, 3.3.1.66, 3.3.1.67
@@ -10418,9 +21581,9 @@ FIXME Is this a bug ?
EXPLAIN SELECT CAST(f1 AS SIGNED INTEGER) AS f1,
CAST(f2 AS CHAR) AS f2 FROM test1.v28;
DROP VIEW IF EXISTS test1.v28;
-CREATE OR REPLACE VIEW test1.v0 AS
+CREATE OR REPLACE VIEW test1.v0 AS
SELECT f1 as f2, f2 as f1 FROM test2.t1;
-CREATE OR REPLACE VIEW test2.v0 AS
+CREATE OR REPLACE VIEW test2.v0 AS
SELECT CAST('0001-01-01' AS DATE) as f1, f2 FROM test3.t1;
SHOW CREATE VIEW test1.v27;
SELECT CAST(f1 AS SIGNED INTEGER) AS f1,
@@ -10492,8 +21655,57 @@ Create view test.v1 AS SELECT f59,f60,f61 FROM tb2 ;
INSERT INTO test.v1 ( f59 , f60 ) values (2005,0101) ;
affected rows: 1
SELECT * FROM tb2 where f59 = 2005 and f60 = 0101 ;
-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
-2005 101 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set
+f59 2005
+f60 101
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
SELECT f59,f60 FROM test.v1 where f59 = 2005 and f60 = 0101 ;
f59 f60
2005 101
@@ -10509,8 +21721,57 @@ UPDATE test.v1 SET f59 = 8 WHERE f59 = 780 and f60 = 105;
affected rows: 1
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
+f59 8
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
SELECT f59,f60 FROM test.v1 where f59 = 8 and f60 = 105 ;
f59 f60
8 105
@@ -10525,11 +21786,210 @@ UPDATE test.v1 SET f59 = 891 WHERE f60 = 105 ;
affected rows: 4
info: Rows matched: 4 Changed: 4 Warnings: 0
SELECT * FROM tb2 where f59 = 891 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
-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
-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
+f59 891
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 891
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 891
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 891
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
SELECT f59,f60 FROM test.v1 where f59 = 891 and f60 = 105 ;
f59 f60
891 105
@@ -10878,17 +22338,13 @@ SET @variant4= 'CREATE VIEW v1 AS SELECT f61 FROM t1 GROUP BY f61';
SET @variant5= 'CREATE VIEW v1 AS SELECT f61 FROM t1 HAVING f61 > 0';
SET @variant6= 'CREATE VIEW v1 AS SELECT (SELECT f60 FROM t2 WHERE f59=19) AS f61 FROM t1';
SET @variant7= 'CREATE VIEW v1 AS SELECT f61 FROM v2';
-
-Some server responses suffer from
-Bug#10773 Incorrect message is displayed while updating a view
---------------------------------------------------------------------------------
SET @variant8= 'CREATE VIEW v1 AS SELECT f59 AS f61 FROM t1 WHERE f60 IN (SELECT f59 FROM t1)';
SET @variant9= 'CREATE ALGORITHM = TEMPTABLE VIEW v1 (f61) AS select f60 from t1';
CREATE ALGORITHM = TEMPTABLE VIEW v1 (f61) AS select f60 from t1;
INSERT INTO v1 VALUES (1002);
ERROR HY000: The target table v1 of the INSERT is not insertable-into
UPDATE v1 SET f61=1007;
-Got one of the listed errors
+ERROR HY000: The target table v1 of the UPDATE is not updatable
DELETE FROM v1;
ERROR HY000: The target table v1 of the DELETE is not updatable
DROP VIEW v1;
@@ -10896,7 +22352,7 @@ CREATE VIEW v1 AS SELECT f59 AS f61 FROM t1 WHERE f60 IN (SELECT f59 FROM t1);
INSERT INTO v1 VALUES (1002);
ERROR HY000: The target table v1 of the INSERT is not insertable-into
UPDATE v1 SET f61=1007;
-Got one of the listed errors
+ERROR HY000: The target table v1 of the UPDATE is not updatable
DELETE FROM v1;
ERROR HY000: The target table v1 of the DELETE is not updatable
DROP VIEW v1;
@@ -10904,7 +22360,7 @@ CREATE VIEW v1 AS SELECT f61 FROM v2;
INSERT INTO v1 VALUES (1002);
ERROR HY000: The target table v1 of the INSERT is not insertable-into
UPDATE v1 SET f61=1007;
-Got one of the listed errors
+ERROR HY000: The target table v1 of the UPDATE is not updatable
DELETE FROM v1;
ERROR HY000: The target table v1 of the DELETE is not updatable
DROP VIEW v1;
@@ -10912,7 +22368,7 @@ CREATE VIEW v1 AS SELECT (SELECT f60 FROM t2 WHERE f59=19) AS f61 FROM t1;
INSERT INTO v1 VALUES (1002);
ERROR HY000: The target table v1 of the INSERT is not insertable-into
UPDATE v1 SET f61=1007;
-Got one of the listed errors
+ERROR HY000: The target table v1 of the UPDATE is not updatable
DELETE FROM v1;
ERROR HY000: The target table v1 of the DELETE is not updatable
DROP VIEW v1;
@@ -10920,7 +22376,7 @@ CREATE VIEW v1 AS SELECT f61 FROM t1 HAVING f61 > 0;
INSERT INTO v1 VALUES (1002);
ERROR HY000: The target table v1 of the INSERT is not insertable-into
UPDATE v1 SET f61=1007;
-Got one of the listed errors
+ERROR HY000: The target table v1 of the UPDATE is not updatable
DELETE FROM v1;
ERROR HY000: The target table v1 of the DELETE is not updatable
DROP VIEW v1;
@@ -10928,7 +22384,7 @@ CREATE VIEW v1 AS SELECT f61 FROM t1 GROUP BY f61;
INSERT INTO v1 VALUES (1002);
ERROR HY000: The target table v1 of the INSERT is not insertable-into
UPDATE v1 SET f61=1007;
-Got one of the listed errors
+ERROR HY000: The target table v1 of the UPDATE is not updatable
DELETE FROM v1;
ERROR HY000: The target table v1 of the DELETE is not updatable
DROP VIEW v1;
@@ -10936,7 +22392,7 @@ CREATE VIEW v1 AS SELECT SUM(f59) AS f61 FROM t1;
INSERT INTO v1 VALUES (1002);
ERROR HY000: The target table v1 of the INSERT is not insertable-into
UPDATE v1 SET f61=1007;
-Got one of the listed errors
+ERROR HY000: The target table v1 of the UPDATE is not updatable
DELETE FROM v1;
ERROR HY000: The target table v1 of the DELETE is not updatable
DROP VIEW v1;
@@ -10944,7 +22400,7 @@ CREATE VIEW v1 AS SELECT DISTINCTROW(f61) FROM t1;
INSERT INTO v1 VALUES (1002);
ERROR HY000: The target table v1 of the INSERT is not insertable-into
UPDATE v1 SET f61=1007;
-Got one of the listed errors
+ERROR HY000: The target table v1 of the UPDATE is not updatable
DELETE FROM v1;
ERROR HY000: The target table v1 of the DELETE is not updatable
DROP VIEW v1;
@@ -10952,7 +22408,7 @@ CREATE VIEW v1 AS SELECT DISTINCT(f61) FROM t1;
INSERT INTO v1 VALUES (1002);
ERROR HY000: The target table v1 of the INSERT is not insertable-into
UPDATE v1 SET f61=1007;
-Got one of the listed errors
+ERROR HY000: The target table v1 of the UPDATE is not updatable
DELETE FROM v1;
ERROR HY000: The target table v1 of the DELETE is not updatable
DROP VIEW v1;
@@ -11121,9 +22577,9 @@ f1 f2 f4 report
4 NULL <------ 20 --------> t1 4
4 NULL <------ 20 --------> v1 4
ALTER TABLE t1 CHANGE COLUMN f1 f1 VARCHAR(30);
-INSERT INTO t1 SET f1 = '<------------- 30 ----------->',
+INSERT INTO t1 SET f1 = '<------------- 30 ----------->',
f4 = '<------ 20 -------->', report = 't1 5';
-INSERT INTO v1 SET f1 = '<------------- 30 ----------->',
+INSERT INTO v1 SET f1 = '<------------- 30 ----------->',
f4 = '<------ 20 -------->', report = 'v1 5';
DESCRIBE t1;
Field Type Null Key Default Extra
@@ -11413,21 +22869,24 @@ ABC 0
ABC 1.7320508075689
CREATE TABLE t2 AS SELECT f1, SQRT(f2) my_sqrt FROM t1;
SELECT * FROM t2 order by 2;
-f1 my_sqrt
-ABC 0
-ABC 1.73205080756888
+f1 ABC
+my_sqrt 0
+f1 ABC
+my_sqrt 1.73205080756888
DROP TABLE t2;
CREATE TABLE t2 AS SELECT * FROM v1;
SELECT * FROM t2 order by 2;
-f1 my_sqrt
-ABC 0
-ABC 1.73205080756888
+f1 ABC
+my_sqrt 0
+f1 ABC
+my_sqrt 1.73205080756888
DROP TABLE t2;
CREATE TABLE t2 AS SELECT * FROM v2;
SELECT * FROM t2 order by 2;
-f1 my_sqrt
-ABC 0
-ABC 1.73205080756888
+f1 ABC
+my_sqrt 0
+f1 ABC
+my_sqrt 1.73205080756888
DROP TABLE t1;
DROP TABLE t2;
DROP VIEW v1;
diff --git a/mysql-test/suite/funcs_1/r/myisam__datadict.result b/mysql-test/suite/funcs_1/r/myisam__datadict.result
index d4571c5d718..29fcc8a378f 100644
--- a/mysql-test/suite/funcs_1/r/myisam__datadict.result
+++ b/mysql-test/suite/funcs_1/r/myisam__datadict.result
@@ -10,8 +10,9 @@
. *__datadict.test are started. This can be a result of showing e.g. maximum
. values of the number of rows of tables.
.
-. This .result file has been checked OK with Linux 5.0.23-bk,
-. ChangeSet@1.2211, 2006-06-28 10:11:43-07:00.
+. This .result file has been checked OK with Linux 5.0.48,
+. build tree ChangeSet@1.2477.6.3, 2007-07-30
+. except that the not fixed Bug#30020 causes a difference.
.
--------------------------------------------------------------------------------
@@ -20,11 +21,21 @@ FIXME: There are subtests that are switched off due to known bugs:
SELECT 1 AS "have_bug_11589";
have_bug_11589
1
+SELECT 1 AS "have_bug_30689";
+have_bug_30689
+1
There are some statements where the ps-protocol is switched off.
This may come from the bug listed below, ir from other problems.
Bug#11589: mysqltest, --ps-protocol, strange output, float/double/real with zerofill
--------------------------------------------------------------------------------
+
+Selects on INFORMATION_SCHEMA.VIEWS present incomplete
+content for the column VIEW_DEFINITION in cases where
+the view selects(=is based) on an INFORMATION_SCHEMA table.
+---> VIEWS vu and vu1
+Bug#30689 Wrong content in I_S.VIEWS.VIEW_DEFINITION if VIEW is based on I_S
+--------------------------------------------------------------------------------
SET @NO_REFRESH = IF( '' = '', 0, 1);
DROP DATABASE IF EXISTS test1;
CREATE DATABASE test1;
@@ -1063,7 +1074,8 @@ CHECKSUM NULL
CREATE_OPTIONS #CO#
TABLE_COMMENT
SELECT * FROM tables
-WHERE NOT( table_schema = 'information_schema');
+WHERE NOT( table_schema = 'information_schema')
+AND NOT (table_schema = 'mysql' AND table_name LIKE 'help_%');
TABLE_CATALOG NULL
TABLE_SCHEMA db_datadict
TABLE_NAME v1
@@ -1234,90 +1246,6 @@ CREATE_OPTIONS
TABLE_COMMENT General log
TABLE_CATALOG NULL
TABLE_SCHEMA mysql
-TABLE_NAME help_category
-TABLE_TYPE BASE TABLE
-ENGINE MyISAM
-VERSION 10
-ROW_FORMAT Fixed
-TABLE_ROWS 37
-AVG_ROW_LENGTH #ARL#
-DATA_LENGTH #DL#
-MAX_DATA_LENGTH #MDL#
-INDEX_LENGTH #IL#
-DATA_FREE #DF#
-AUTO_INCREMENT NULL
-CREATE_TIME YYYY-MM-DD hh:mm:ss
-UPDATE_TIME YYYY-MM-DD hh:mm:ss
-CHECK_TIME YYYY-MM-DD hh:mm:ss
-TABLE_COLLATION utf8_general_ci
-CHECKSUM NULL
-CREATE_OPTIONS
-TABLE_COMMENT help categories
-TABLE_CATALOG NULL
-TABLE_SCHEMA mysql
-TABLE_NAME help_keyword
-TABLE_TYPE BASE TABLE
-ENGINE MyISAM
-VERSION 10
-ROW_FORMAT Fixed
-TABLE_ROWS 424
-AVG_ROW_LENGTH #ARL#
-DATA_LENGTH #DL#
-MAX_DATA_LENGTH #MDL#
-INDEX_LENGTH #IL#
-DATA_FREE #DF#
-AUTO_INCREMENT NULL
-CREATE_TIME YYYY-MM-DD hh:mm:ss
-UPDATE_TIME YYYY-MM-DD hh:mm:ss
-CHECK_TIME YYYY-MM-DD hh:mm:ss
-TABLE_COLLATION utf8_general_ci
-CHECKSUM NULL
-CREATE_OPTIONS
-TABLE_COMMENT help keywords
-TABLE_CATALOG NULL
-TABLE_SCHEMA mysql
-TABLE_NAME help_relation
-TABLE_TYPE BASE TABLE
-ENGINE MyISAM
-VERSION 10
-ROW_FORMAT Fixed
-TABLE_ROWS 901
-AVG_ROW_LENGTH #ARL#
-DATA_LENGTH #DL#
-MAX_DATA_LENGTH #MDL#
-INDEX_LENGTH #IL#
-DATA_FREE #DF#
-AUTO_INCREMENT NULL
-CREATE_TIME YYYY-MM-DD hh:mm:ss
-UPDATE_TIME YYYY-MM-DD hh:mm:ss
-CHECK_TIME YYYY-MM-DD hh:mm:ss
-TABLE_COLLATION utf8_general_ci
-CHECKSUM NULL
-CREATE_OPTIONS
-TABLE_COMMENT keyword-topic relation
-TABLE_CATALOG NULL
-TABLE_SCHEMA mysql
-TABLE_NAME help_topic
-TABLE_TYPE BASE TABLE
-ENGINE MyISAM
-VERSION 10
-ROW_FORMAT Dynamic
-TABLE_ROWS 479
-AVG_ROW_LENGTH #ARL#
-DATA_LENGTH #DL#
-MAX_DATA_LENGTH #MDL#
-INDEX_LENGTH #IL#
-DATA_FREE #DF#
-AUTO_INCREMENT NULL
-CREATE_TIME YYYY-MM-DD hh:mm:ss
-UPDATE_TIME YYYY-MM-DD hh:mm:ss
-CHECK_TIME YYYY-MM-DD hh:mm:ss
-TABLE_COLLATION utf8_general_ci
-CHECKSUM NULL
-CREATE_OPTIONS
-TABLE_COMMENT help topics
-TABLE_CATALOG NULL
-TABLE_SCHEMA mysql
TABLE_NAME host
TABLE_TYPE BASE TABLE
ENGINE MyISAM
@@ -2366,9 +2294,9 @@ NULL information_schema COLUMNS NUMERIC_PRECISION 11 NULL YES bigint NULL NULL 1
NULL information_schema COLUMNS NUMERIC_SCALE 12 NULL YES bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned select
NULL information_schema COLUMNS CHARACTER_SET_NAME 13 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema COLUMNS COLLATION_NAME 14 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
-NULL information_schema COLUMNS COLUMN_TYPE 15 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema COLUMNS COLUMN_TYPE 15 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema COLUMNS COLUMN_KEY 16 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
-NULL information_schema COLUMNS EXTRA 17 NO varchar 20 60 NULL NULL utf8 utf8_general_ci varchar(20) select
+NULL information_schema COLUMNS EXTRA 17 NO varchar 27 81 NULL NULL utf8 utf8_general_ci varchar(27) select
NULL information_schema COLUMNS PRIVILEGES 18 NO varchar 80 240 NULL NULL utf8 utf8_general_ci varchar(80) select
NULL information_schema COLUMNS COLUMN_COMMENT 19 NO varchar 255 765 NULL NULL utf8 utf8_general_ci varchar(255) select
NULL information_schema COLUMN_PRIVILEGES GRANTEE 1 NO varchar 81 243 NULL NULL utf8 utf8_general_ci varchar(81) select
@@ -2390,12 +2318,12 @@ NULL information_schema EVENTS EVENT_NAME 3 NO varchar 64 192 NULL NULL utf8 ut
NULL information_schema EVENTS DEFINER 4 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
NULL information_schema EVENTS TIME_ZONE 5 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema EVENTS EVENT_BODY 6 NO varchar 8 24 NULL NULL utf8 utf8_general_ci varchar(8) select
-NULL information_schema EVENTS EVENT_DEFINITION 7 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema EVENTS EVENT_DEFINITION 7 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema EVENTS EVENT_TYPE 8 NO varchar 9 27 NULL NULL utf8 utf8_general_ci varchar(9) select
NULL information_schema EVENTS EXECUTE_AT 9 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS INTERVAL_VALUE 10 NULL YES varchar 256 768 NULL NULL utf8 utf8_general_ci varchar(256) select
NULL information_schema EVENTS INTERVAL_FIELD 11 NULL YES varchar 18 54 NULL NULL utf8 utf8_general_ci varchar(18) select
-NULL information_schema EVENTS SQL_MODE 12 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema EVENTS SQL_MODE 12 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema EVENTS STARTS 13 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS ENDS 14 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS STATUS 15 NO varchar 18 54 NULL NULL utf8 utf8_general_ci varchar(18) select
@@ -2533,7 +2461,7 @@ NULL information_schema ROUTINES SQL_PATH 14 NULL YES varchar 64 192 NULL NULL u
NULL information_schema ROUTINES SECURITY_TYPE 15 NO varchar 7 21 NULL NULL utf8 utf8_general_ci varchar(7) select
NULL information_schema ROUTINES CREATED 16 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema ROUTINES LAST_ALTERED 17 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime select
-NULL information_schema ROUTINES SQL_MODE 18 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema ROUTINES SQL_MODE 18 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema ROUTINES ROUTINE_COMMENT 19 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema ROUTINES DEFINER 20 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
NULL information_schema ROUTINES CHARACTER_SET_CLIENT 21 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
@@ -2610,7 +2538,7 @@ NULL information_schema TRIGGERS EVENT_OBJECT_SCHEMA 6 NO varchar 64 192 NULL N
NULL information_schema TRIGGERS EVENT_OBJECT_TABLE 7 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema TRIGGERS ACTION_ORDER 8 0 NO bigint NULL NULL 19 0 NULL NULL bigint(4) select
NULL information_schema TRIGGERS ACTION_CONDITION 9 NULL YES longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
-NULL information_schema TRIGGERS ACTION_STATEMENT 10 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS ACTION_STATEMENT 10 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema TRIGGERS ACTION_ORIENTATION 11 NO varchar 9 27 NULL NULL utf8 utf8_general_ci varchar(9) select
NULL information_schema TRIGGERS ACTION_TIMING 12 NO varchar 6 18 NULL NULL utf8 utf8_general_ci varchar(6) select
NULL information_schema TRIGGERS ACTION_REFERENCE_OLD_TABLE 13 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
@@ -2618,8 +2546,8 @@ NULL information_schema TRIGGERS ACTION_REFERENCE_NEW_TABLE 14 NULL YES varchar
NULL information_schema TRIGGERS ACTION_REFERENCE_OLD_ROW 15 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema TRIGGERS ACTION_REFERENCE_NEW_ROW 16 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema TRIGGERS CREATED 17 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
-NULL information_schema TRIGGERS SQL_MODE 18 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
-NULL information_schema TRIGGERS DEFINER 19 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS SQL_MODE 18 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS DEFINER 19 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema TRIGGERS CHARACTER_SET_CLIENT 20 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
NULL information_schema TRIGGERS COLLATION_CONNECTION 21 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
NULL information_schema TRIGGERS DATABASE_COLLATION 22 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
@@ -2630,7 +2558,7 @@ NULL information_schema USER_PRIVILEGES IS_GRANTABLE 4 NO varchar 3 9 NULL NULL
NULL information_schema VIEWS TABLE_CATALOG 1 NULL YES varchar 4096 12288 NULL NULL utf8 utf8_general_ci varchar(4096) select
NULL information_schema VIEWS TABLE_SCHEMA 2 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema VIEWS TABLE_NAME 3 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
-NULL information_schema VIEWS VIEW_DEFINITION 4 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema VIEWS VIEW_DEFINITION 4 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema VIEWS CHECK_OPTION 5 NO varchar 8 24 NULL NULL utf8 utf8_general_ci varchar(8) select
NULL information_schema VIEWS IS_UPDATABLE 6 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema VIEWS DEFINER 7 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
@@ -2667,7 +2595,7 @@ NULL mysql columns_priv Db 2 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PR
NULL mysql columns_priv User 3 NO char 16 48 NULL NULL utf8 utf8_bin char(16) PRI select,insert,update,references
NULL mysql columns_priv Table_name 4 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PRI select,insert,update,references
NULL mysql columns_priv Column_name 5 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PRI select,insert,update,references
-NULL mysql columns_priv Timestamp 6 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL mysql columns_priv Timestamp 6 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL mysql columns_priv Column_priv 7 NO set 31 93 NULL NULL utf8 utf8_general_ci set('Select','Insert','Update','References') select,insert,update,references
NULL mysql db Host 1 NO char 60 180 NULL NULL utf8 utf8_bin char(60) PRI select,insert,update,references
NULL mysql db Db 2 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PRI select,insert,update,references
@@ -2698,7 +2626,7 @@ NULL mysql event definer 4 NO char 77 231 NULL NULL utf8 utf8_bin char(77) se
NULL mysql event execute_at 5 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select,insert,update,references
NULL mysql event interval_value 6 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
NULL mysql event interval_field 7 NULL YES enum 18 54 NULL NULL utf8 utf8_general_ci enum('YEAR','QUARTER','MONTH','DAY','HOUR','MINUTE','WEEK','SECOND','MICROSECOND','YEAR_MONTH','DAY_HOUR','DAY_MINUTE','DAY_SECOND','HOUR_MINUTE','HOUR_SECOND','MINUTE_SECOND','DAY_MICROSECOND','HOUR_MICROSECOND','MINUTE_MICROSECOND','SECOND_MICROSECOND') select,insert,update,references
-NULL mysql event created 8 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL mysql event created 8 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL mysql event modified 9 0000-00-00 00:00:00 NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
NULL mysql event last_executed 10 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select,insert,update,references
NULL mysql event starts 11 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select,insert,update,references
@@ -2717,12 +2645,12 @@ NULL mysql func name 1 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PRI sel
NULL mysql func ret 2 0 NO tinyint NULL NULL 3 0 NULL NULL tinyint(1) select,insert,update,references
NULL mysql func dl 3 NO char 128 384 NULL NULL utf8 utf8_bin char(128) select,insert,update,references
NULL mysql func type 4 NULL NO enum 9 27 NULL NULL utf8 utf8_general_ci enum('function','aggregate') select,insert,update,references
-NULL mysql general_log event_time 1 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
-NULL mysql general_log user_host 2 NULL YES mediumtext 16777215 16777215 NULL NULL utf8 utf8_general_ci mediumtext select,insert,update,references
-NULL mysql general_log thread_id 3 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
-NULL mysql general_log server_id 4 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
-NULL mysql general_log command_type 5 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references
-NULL mysql general_log argument 6 NULL YES mediumtext 16777215 16777215 NULL NULL utf8 utf8_general_ci mediumtext select,insert,update,references
+NULL mysql general_log event_time 1 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
+NULL mysql general_log user_host 2 NULL NO mediumtext 16777215 16777215 NULL NULL utf8 utf8_general_ci mediumtext select,insert,update,references
+NULL mysql general_log thread_id 3 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
+NULL mysql general_log server_id 4 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
+NULL mysql general_log command_type 5 NULL NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references
+NULL mysql general_log argument 6 NULL NO mediumtext 16777215 16777215 NULL NULL utf8 utf8_general_ci mediumtext select,insert,update,references
NULL mysql help_category help_category_id 1 NULL NO smallint NULL NULL 5 0 NULL NULL smallint(5) unsigned PRI select,insert,update,references
NULL mysql help_category name 2 NULL NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) UNI select,insert,update,references
NULL mysql help_category parent_category_id 3 NULL YES smallint NULL NULL 5 0 NULL NULL smallint(5) unsigned select,insert,update,references
@@ -2775,10 +2703,10 @@ NULL mysql proc sql_data_access 6 CONTAINS_SQL NO enum 17 51 NULL NULL utf8 utf8
NULL mysql proc is_deterministic 7 NO NO enum 3 9 NULL NULL utf8 utf8_general_ci enum('YES','NO') select,insert,update,references
NULL mysql proc security_type 8 DEFINER NO enum 7 21 NULL NULL utf8 utf8_general_ci enum('INVOKER','DEFINER') select,insert,update,references
NULL mysql proc param_list 9 NULL NO blob 65535 65535 NULL NULL NULL NULL blob select,insert,update,references
-NULL mysql proc returns 10 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
+NULL mysql proc returns 10 NULL NO longblob 4294967295 4294967295 NULL NULL NULL NULL longblob select,insert,update,references
NULL mysql proc body 11 NULL NO longblob 4294967295 4294967295 NULL NULL NULL NULL longblob select,insert,update,references
NULL mysql proc definer 12 NO char 77 231 NULL NULL utf8 utf8_bin char(77) select,insert,update,references
-NULL mysql proc created 13 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL mysql proc created 13 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL mysql proc modified 14 0000-00-00 00:00:00 NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
NULL mysql proc sql_mode 15 NO set 431 1293 NULL NULL utf8 utf8_general_ci set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','NOT_USED','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE') select,insert,update,references
NULL mysql proc comment 16 NO char 64 192 NULL NULL utf8 utf8_bin char(64) select,insert,update,references
@@ -2793,7 +2721,7 @@ NULL mysql procs_priv Routine_name 4 NO char 64 192 NULL NULL utf8 utf8_bin cha
NULL mysql procs_priv Routine_type 5 NULL NO enum 9 27 NULL NULL utf8 utf8_bin enum('FUNCTION','PROCEDURE') PRI select,insert,update,references
NULL mysql procs_priv Grantor 6 NO char 77 231 NULL NULL utf8 utf8_bin char(77) MUL select,insert,update,references
NULL mysql procs_priv Proc_priv 7 NO set 27 81 NULL NULL utf8 utf8_general_ci set('Execute','Alter Routine','Grant') select,insert,update,references
-NULL mysql procs_priv Timestamp 8 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL mysql procs_priv Timestamp 8 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL mysql servers Server_name 1 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) PRI select,insert,update,references
NULL mysql servers Host 2 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
NULL mysql servers Db 3 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
@@ -2803,23 +2731,23 @@ NULL mysql servers Port 6 0 NO int NULL NULL 10 0 NULL NULL int(4) select,inse
NULL mysql servers Socket 7 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
NULL mysql servers Wrapper 8 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
NULL mysql servers Owner 9 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
-NULL mysql slow_log start_time 1 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL mysql slow_log start_time 1 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL mysql slow_log user_host 2 NULL NO mediumtext 16777215 16777215 NULL NULL utf8 utf8_general_ci mediumtext select,insert,update,references
NULL mysql slow_log query_time 3 NULL NO time NULL NULL NULL NULL NULL NULL time select,insert,update,references
NULL mysql slow_log lock_time 4 NULL NO time NULL NULL NULL NULL NULL NULL time select,insert,update,references
NULL mysql slow_log rows_sent 5 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
NULL mysql slow_log rows_examined 6 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
-NULL mysql slow_log db 7 NULL YES varchar 4096 12288 NULL NULL utf8 utf8_general_ci varchar(4096) select,insert,update,references
-NULL mysql slow_log last_insert_id 8 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
-NULL mysql slow_log insert_id 9 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
-NULL mysql slow_log server_id 10 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
+NULL mysql slow_log db 7 NULL NO varchar 4096 12288 NULL NULL utf8 utf8_general_ci varchar(4096) select,insert,update,references
+NULL mysql slow_log last_insert_id 8 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
+NULL mysql slow_log insert_id 9 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
+NULL mysql slow_log server_id 10 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
NULL mysql slow_log sql_text 11 NULL NO mediumtext 16777215 16777215 NULL NULL utf8 utf8_general_ci mediumtext select,insert,update,references
NULL mysql tables_priv Host 1 NO char 60 180 NULL NULL utf8 utf8_bin char(60) PRI select,insert,update,references
NULL mysql tables_priv Db 2 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PRI select,insert,update,references
NULL mysql tables_priv User 3 NO char 16 48 NULL NULL utf8 utf8_bin char(16) PRI select,insert,update,references
NULL mysql tables_priv Table_name 4 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PRI select,insert,update,references
NULL mysql tables_priv Grantor 5 NO char 77 231 NULL NULL utf8 utf8_bin char(77) MUL select,insert,update,references
-NULL mysql tables_priv Timestamp 6 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL mysql tables_priv Timestamp 6 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL mysql tables_priv Table_priv 7 NO set 98 294 NULL NULL utf8 utf8_general_ci set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter','Create View','Show view','Trigger') select,insert,update,references
NULL mysql tables_priv Column_priv 8 NO set 31 93 NULL NULL utf8 utf8_general_ci set('Select','Insert','Update','References') select,insert,update,references
NULL mysql time_zone Time_zone_id 1 NULL NO int NULL NULL 10 0 NULL NULL int(10) unsigned PRI auto_increment select,insert,update,references
@@ -3139,7 +3067,7 @@ NULL test tb4 f217 42 NULL YES double unsigned zerofill NULL NULL 22 NULL NULL N
NULL test tb4 f218 43 NULL YES date NULL NULL NULL NULL NULL NULL date select,insert,update,references
NULL test tb4 f219 44 NULL YES time NULL NULL NULL NULL NULL NULL time select,insert,update,references
NULL test tb4 f220 45 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select,insert,update,references
-NULL test tb4 f221 46 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL test tb4 f221 46 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL test tb4 f222 47 NULL YES year NULL NULL NULL NULL NULL NULL year(4) select,insert,update,references
NULL test tb4 f223 48 NULL YES year NULL NULL NULL NULL NULL NULL year(4) select,insert,update,references
NULL test tb4 f224 49 NULL YES year NULL NULL NULL NULL NULL NULL year(4) select,insert,update,references
@@ -3264,7 +3192,7 @@ binary binary Binary pseudo charset 1
geostd8 geostd8_general_ci GEOSTD8 Georgian 1
cp932 cp932_japanese_ci SJIS for Windows Japanese 2
eucjpms eucjpms_japanese_ci UJIS for Windows Japanese 3
-select sum(id) from collations;
+select sum(id) from collations where collation_name <> 'utf8_general_cs';
sum(id)
10840
select collation_name, character_set_name into @x,@y
@@ -3280,7 +3208,8 @@ END NULL NULL SQL NO CONTAINS SQL NULL DEFINER YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh
select count(*) from routines;
count(*)
1
-select * from statistics;
+select * from statistics
+where not (table_schema = 'mysql' and table_name like 'help_%');
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME NON_UNIQUE INDEX_SCHEMA INDEX_NAME SEQ_IN_INDEX COLUMN_NAME COLLATION CARDINALITY SUB_PART PACKED NULLABLE INDEX_TYPE COMMENT
NULL mysql columns_priv 0 mysql PRIMARY 1 Host A NULL NULL NULL BTREE
NULL mysql columns_priv 0 mysql PRIMARY 2 Db A NULL NULL NULL BTREE
@@ -3294,14 +3223,6 @@ NULL mysql db 1 mysql User 1 User A 1 NULL NULL BTREE
NULL mysql event 0 mysql PRIMARY 1 db A NULL NULL NULL BTREE
NULL mysql event 0 mysql PRIMARY 2 name A 0 NULL NULL BTREE
NULL mysql func 0 mysql PRIMARY 1 name A 0 NULL NULL BTREE
-NULL mysql help_category 0 mysql PRIMARY 1 help_category_id A 37 NULL NULL BTREE
-NULL mysql help_category 0 mysql name 1 name A 37 NULL NULL BTREE
-NULL mysql help_keyword 0 mysql PRIMARY 1 help_keyword_id A 424 NULL NULL BTREE
-NULL mysql help_keyword 0 mysql name 1 name A 424 NULL NULL BTREE
-NULL mysql help_relation 0 mysql PRIMARY 1 help_keyword_id A NULL NULL NULL BTREE
-NULL mysql help_relation 0 mysql PRIMARY 2 help_topic_id A 901 NULL NULL BTREE
-NULL mysql help_topic 0 mysql PRIMARY 1 help_topic_id A 479 NULL NULL BTREE
-NULL mysql help_topic 0 mysql name 1 name A 479 NULL NULL BTREE
NULL mysql host 0 mysql PRIMARY 1 Host A NULL NULL NULL BTREE
NULL mysql host 0 mysql PRIMARY 2 Db A 0 NULL NULL BTREE
NULL mysql ndb_binlog_index 0 mysql PRIMARY 1 epoch A 0 NULL NULL BTREE
@@ -3333,8 +3254,16 @@ NULL mysql user 0 mysql PRIMARY 2 User A 3 NULL NULL BTREE
select * from views;
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION
NULL db_datadict v1 SELECT * FROM information_schema.tables NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
-NULL db_datadict vu SELECT DISTINCT u, NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
-NULL db_datadict vu1 SELECT grantee AS u NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
+NULL db_datadict vu SELECT DISTINCT u,
+SUBSTRING( u, LENGTH(SUBSTRING_INDEX(u,'@',1))+3 )
+AS server,
+SUBSTRING( u, LENGTH(SUBSTRING_INDEX(u,'@',1))+3,
+LENGTH( SUBSTRING( u,
+LENGTH( SUBSTRING_INDEX(u, '@',1)) +3 )) - 1 )
+AS Server_Clean
+FROM db_datadict.vu1 NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
+NULL db_datadict vu1 SELECT grantee AS u
+FROM information_schema.user_privileges NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
select * from user_privileges order by grantee, privilege_type;
GRANTEE TABLE_CATALOG PRIVILEGE_TYPE IS_GRANTABLE
'root'@'127.0.0.1' NULL ALTER YES
@@ -3532,9 +3461,10 @@ NULL mysql PRIMARY NULL mysql user User 2 NULL NULL NULL NULL
select count(*) as max_recs from key_column_usage;
max_recs
45
-select max(cardinality) from statistics;
+select max(cardinality) from statistics
+where not (table_schema = 'mysql' and table_name like 'help_%');
max(cardinality)
-901
+393
select concat("View '",
table_name, "' is associated with the database '", table_schema, "'.")
AS "Who is Who for the Views"
@@ -3733,10 +3663,10 @@ NULL information_schema CHARACTER_SETS CHARACTER_SET_NAME 1 NO varchar 64 192 N
SELECT * FROM character_sets LIMIT 1;
CHARACTER_SET_NAME DEFAULT_COLLATE_NAME DESCRIPTION MAXLEN
big5 big5_chinese_ci Big5 Traditional Chinese 2
-SELECT * FROM collations LIMIT 1;
+SELECT * FROM collations where collation_name <> 'utf8_general_cs' LIMIT 1;
COLLATION_NAME CHARACTER_SET_NAME ID IS_DEFAULT IS_COMPILED SORTLEN
big5_chinese_ci big5 1 Yes Yes 1
-SELECT * FROM collation_character_set_applicability LIMIT 1;
+SELECT * FROM collation_character_set_applicability where collation_name <> 'utf8_general_cs' LIMIT 1;
COLLATION_NAME CHARACTER_SET_NAME
big5_chinese_ci big5
SELECT * FROM routines LIMIT 1;
@@ -4424,7 +4354,8 @@ CHECKSUM NULL
CREATE_OPTIONS #CO#
TABLE_COMMENT
SELECT * FROM information_schema.tables
-WHERE NOT( table_schema = 'information_schema');
+WHERE NOT( table_schema = 'information_schema')
+AND NOT (table_schema = 'mysql' AND table_name LIKE 'help_%');
TABLE_CATALOG NULL
TABLE_SCHEMA db_datadict
TABLE_NAME v1
@@ -4595,90 +4526,6 @@ CREATE_OPTIONS
TABLE_COMMENT General log
TABLE_CATALOG NULL
TABLE_SCHEMA mysql
-TABLE_NAME help_category
-TABLE_TYPE BASE TABLE
-ENGINE MyISAM
-VERSION 10
-ROW_FORMAT Fixed
-TABLE_ROWS 37
-AVG_ROW_LENGTH #ARL#
-DATA_LENGTH #DL#
-MAX_DATA_LENGTH #MDL#
-INDEX_LENGTH #IL#
-DATA_FREE #DF#
-AUTO_INCREMENT NULL
-CREATE_TIME YYYY-MM-DD hh:mm:ss
-UPDATE_TIME YYYY-MM-DD hh:mm:ss
-CHECK_TIME YYYY-MM-DD hh:mm:ss
-TABLE_COLLATION utf8_general_ci
-CHECKSUM NULL
-CREATE_OPTIONS
-TABLE_COMMENT help categories
-TABLE_CATALOG NULL
-TABLE_SCHEMA mysql
-TABLE_NAME help_keyword
-TABLE_TYPE BASE TABLE
-ENGINE MyISAM
-VERSION 10
-ROW_FORMAT Fixed
-TABLE_ROWS 424
-AVG_ROW_LENGTH #ARL#
-DATA_LENGTH #DL#
-MAX_DATA_LENGTH #MDL#
-INDEX_LENGTH #IL#
-DATA_FREE #DF#
-AUTO_INCREMENT NULL
-CREATE_TIME YYYY-MM-DD hh:mm:ss
-UPDATE_TIME YYYY-MM-DD hh:mm:ss
-CHECK_TIME YYYY-MM-DD hh:mm:ss
-TABLE_COLLATION utf8_general_ci
-CHECKSUM NULL
-CREATE_OPTIONS
-TABLE_COMMENT help keywords
-TABLE_CATALOG NULL
-TABLE_SCHEMA mysql
-TABLE_NAME help_relation
-TABLE_TYPE BASE TABLE
-ENGINE MyISAM
-VERSION 10
-ROW_FORMAT Fixed
-TABLE_ROWS 901
-AVG_ROW_LENGTH #ARL#
-DATA_LENGTH #DL#
-MAX_DATA_LENGTH #MDL#
-INDEX_LENGTH #IL#
-DATA_FREE #DF#
-AUTO_INCREMENT NULL
-CREATE_TIME YYYY-MM-DD hh:mm:ss
-UPDATE_TIME YYYY-MM-DD hh:mm:ss
-CHECK_TIME YYYY-MM-DD hh:mm:ss
-TABLE_COLLATION utf8_general_ci
-CHECKSUM NULL
-CREATE_OPTIONS
-TABLE_COMMENT keyword-topic relation
-TABLE_CATALOG NULL
-TABLE_SCHEMA mysql
-TABLE_NAME help_topic
-TABLE_TYPE BASE TABLE
-ENGINE MyISAM
-VERSION 10
-ROW_FORMAT Dynamic
-TABLE_ROWS 479
-AVG_ROW_LENGTH #ARL#
-DATA_LENGTH #DL#
-MAX_DATA_LENGTH #MDL#
-INDEX_LENGTH #IL#
-DATA_FREE #DF#
-AUTO_INCREMENT NULL
-CREATE_TIME YYYY-MM-DD hh:mm:ss
-UPDATE_TIME YYYY-MM-DD hh:mm:ss
-CHECK_TIME YYYY-MM-DD hh:mm:ss
-TABLE_COLLATION utf8_general_ci
-CHECKSUM NULL
-CREATE_OPTIONS
-TABLE_COMMENT help topics
-TABLE_CATALOG NULL
-TABLE_SCHEMA mysql
TABLE_NAME host
TABLE_TYPE BASE TABLE
ENGINE MyISAM
@@ -5742,8 +5589,16 @@ NULL mysql columns_priv 0 mysql PRIMARY 5 Column_name A 0 NULL NULL BTREE
select * from information_schema.views limit 0, 5;
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION
NULL db_datadict v1 SELECT * FROM information_schema.tables NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
-NULL db_datadict vu SELECT DISTINCT u, NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
-NULL db_datadict vu1 SELECT grantee AS u NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
+NULL db_datadict vu SELECT DISTINCT u,
+SUBSTRING( u, LENGTH(SUBSTRING_INDEX(u,'@',1))+3 )
+AS server,
+SUBSTRING( u, LENGTH(SUBSTRING_INDEX(u,'@',1))+3,
+LENGTH( SUBSTRING( u,
+LENGTH( SUBSTRING_INDEX(u, '@',1)) +3 )) - 1 )
+AS Server_Clean
+FROM db_datadict.vu1 NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
+NULL db_datadict vu1 SELECT grantee AS u
+FROM information_schema.user_privileges NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
select * from information_schema.user_privileges limit 0, 5;
GRANTEE TABLE_CATALOG PRIVILEGE_TYPE IS_GRANTABLE
'root'@'localhost' NULL SELECT YES
@@ -5794,10 +5649,10 @@ COUNT(*)
SELECT COUNT(*) FROM information_schema. character_sets ;
COUNT(*)
36
-SELECT COUNT(*) FROM information_schema. collations ;
+SELECT COUNT(*) FROM information_schema. collations where collation_name <> 'utf8_general_cs' ;
COUNT(*)
127
-SELECT COUNT(*) FROM information_schema. collation_character_set_applicability ;
+SELECT COUNT(*) FROM information_schema. collation_character_set_applicability where collation_name <> 'utf8_general_cs' ;
COUNT(*)
128
SELECT COUNT(*) FROM information_schema. routines ;
@@ -5876,10 +5731,10 @@ utf8_esperanto_ci utf8
utf8_estonian_ci utf8
select routine_definition from routines;
routine_definition
-select * from statistics group by index_name asc limit 0, 5;
+select * from statistics where table_name not like 'help_%'
+group by index_name asc limit 0, 5;
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME NON_UNIQUE INDEX_SCHEMA INDEX_NAME SEQ_IN_INDEX COLUMN_NAME COLLATION CARDINALITY SUB_PART PACKED NULLABLE INDEX_TYPE COMMENT
NULL mysql procs_priv 1 mysql Grantor 1 Grantor A NULL NULL NULL BTREE
-NULL mysql help_category 0 mysql name 1 name A 37 NULL NULL BTREE
NULL mysql columns_priv 0 mysql PRIMARY 1 Host A NULL NULL NULL BTREE
NULL mysql db 1 mysql User 1 User A 1 NULL NULL BTREE
select concat(table_schema, ', ', table_name, ', ', view_definition) view_info
@@ -5993,9 +5848,9 @@ NULL test latin1 latin1_swedish_ci NULL
NULL test1 latin1 latin1_swedish_ci NULL
select distinct grantee from user_privileges;
grantee
-'root'@'localhost'
-'root'@'<SERVER_NAME>'
'root'@'127.0.0.1'
+'root'@'<SERVER_NAME>'
+'root'@'localhost'
select all grantee from user_privileges order by grantee, privilege_type;
grantee
'root'@'127.0.0.1'
@@ -7552,7 +7407,7 @@ from information_schema.statistics
where table_schema like 'db_datadict%';
table_name index_schema index_name index_type
select *
-from information_schema.user_privileges order by grantee, privilege_type;
+from information_schema.user_privileges;
GRANTEE TABLE_CATALOG PRIVILEGE_TYPE IS_GRANTABLE
'root'@'127.0.0.1' NULL ALTER YES
'root'@'127.0.0.1' NULL ALTER ROUTINE YES
@@ -7703,7 +7558,7 @@ where table_schema like 'db_datadict%';
table_name index_schema index_name index_type
res_t_401013 db_datadict i_6_401013 BTREE
select *
-from information_schema.user_privileges order by grantee, privilege_type;
+from information_schema.user_privileges;
GRANTEE TABLE_CATALOG PRIVILEGE_TYPE IS_GRANTABLE
'root'@'127.0.0.1' NULL ALTER YES
'root'@'127.0.0.1' NULL ALTER ROUTINE YES
@@ -7840,7 +7695,7 @@ from information_schema.statistics
where table_schema like 'db_datadict%';
table_name index_schema index_name index_type
select *
-from information_schema.user_privileges order by grantee, privilege_type;
+from information_schema.user_privileges;
GRANTEE TABLE_CATALOG PRIVILEGE_TYPE IS_GRANTABLE
'root'@'127.0.0.1' NULL ALTER YES
'root'@'127.0.0.1' NULL ALTER ROUTINE YES
@@ -7945,7 +7800,7 @@ Testcase 3.2.1.14:
DROP DATABASE IF EXISTS db_datadict;
CREATE DATABASE db_datadict;
USE db_datadict;
-create table res_t_401014(f1 char(10), f2 text(25), f3 int);
+create table res_t_401014(f1 char(10), f2 varchar(25), f3 int);
create view res_v_401014 as select * from res_t_401014;
create procedure sp_6_401014() select 'db_datadict';
create function fn_6_401014() returns int return 0;
@@ -7968,10 +7823,10 @@ from information_schema.columns
where table_schema like 'db_datadict%';
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION COLUMN_DEFAULT IS_NULLABLE DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE CHARACTER_SET_NAME COLLATION_NAME COLUMN_TYPE COLUMN_KEY EXTRA PRIVILEGES COLUMN_COMMENT
NULL db_datadict res_t_401014 f1 1 NULL YES char 10 10 NULL NULL latin1 latin1_swedish_ci char(10) select,insert,update,references
-NULL db_datadict res_t_401014 f2 2 NULL YES tinytext 255 255 NULL NULL latin1 latin1_swedish_ci tinytext select,insert,update,references
+NULL db_datadict res_t_401014 f2 2 NULL YES varchar 25 25 NULL NULL latin1 latin1_swedish_ci varchar(25) select,insert,update,references
NULL db_datadict res_t_401014 f3 3 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
NULL db_datadict res_v_401014 f1 1 NULL YES char 10 10 NULL NULL latin1 latin1_swedish_ci char(10) select,insert,update,references
-NULL db_datadict res_v_401014 f2 2 NULL YES tinytext 255 255 NULL NULL latin1 latin1_swedish_ci tinytext select,insert,update,references
+NULL db_datadict res_v_401014 f2 2 NULL YES varchar 25 25 NULL NULL latin1 latin1_swedish_ci varchar(25) select,insert,update,references
NULL db_datadict res_v_401014 f3 3 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
select table_schema, table_name, is_updatable
from information_schema.views
@@ -7989,7 +7844,7 @@ from information_schema.statistics
where table_schema like 'db_datadict%';
table_name index_schema index_name index_type
select *
-from information_schema.user_privileges order by grantee, privilege_type;
+from information_schema.user_privileges;
GRANTEE TABLE_CATALOG PRIVILEGE_TYPE IS_GRANTABLE
'root'@'127.0.0.1' NULL ALTER YES
'root'@'127.0.0.1' NULL ALTER ROUTINE YES
@@ -8090,7 +7945,7 @@ WHERE trigger_schema LIKE 'db_datadict%';
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
use db_datadict;
alter table res_t_401014 change f1 ff1 int;
-alter table res_t_401014 engine = innodb;
+alter table res_t_401014 engine = MEMORY;
alter table res_t_401014 change f3 f3_new bigint;
alter view res_v_401014 as select ff1 from res_t_401014;
alter procedure sp_6_401014 sql security invoker;
@@ -8108,14 +7963,14 @@ select table_catalog, table_schema, engine
from information_schema.tables
where table_schema like 'db_datadict%';
table_catalog table_schema engine
-NULL db_datadict InnoDB
+NULL db_datadict MEMORY
NULL db_datadict NULL
select *
from information_schema.columns
where table_schema like 'db_datadict%';
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION COLUMN_DEFAULT IS_NULLABLE DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE CHARACTER_SET_NAME COLLATION_NAME COLUMN_TYPE COLUMN_KEY EXTRA PRIVILEGES COLUMN_COMMENT
NULL db_datadict res_t_401014 ff1 1 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
-NULL db_datadict res_t_401014 f2 2 NULL YES tinytext 255 255 NULL NULL latin1 latin1_swedish_ci tinytext select,insert,update,references
+NULL db_datadict res_t_401014 f2 2 NULL YES varchar 25 25 NULL NULL latin1 latin1_swedish_ci varchar(25) select,insert,update,references
NULL db_datadict res_t_401014 f3_new 3 NULL YES bigint NULL NULL 19 0 NULL NULL bigint(20) select,insert,update,references
NULL db_datadict res_v_401014 ff1 1 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
select table_schema, table_name, is_updatable
@@ -8134,7 +7989,7 @@ from information_schema.statistics
where table_schema like 'db_datadict%';
table_name index_schema index_name index_type
select *
-from information_schema.user_privileges order by grantee, privilege_type;
+from information_schema.user_privileges;
GRANTEE TABLE_CATALOG PRIVILEGE_TYPE IS_GRANTABLE
'root'@'127.0.0.1' NULL ALTER YES
'root'@'127.0.0.1' NULL ALTER ROUTINE YES
@@ -8292,7 +8147,7 @@ where table_schema like 'db_datadict%';
table_name index_schema index_name index_type
res_t_401015 db_datadict i_6_401015 BTREE
select *
-from information_schema.user_privileges order by grantee, privilege_type;
+from information_schema.user_privileges;
GRANTEE TABLE_CATALOG PRIVILEGE_TYPE IS_GRANTABLE
'root'@'127.0.0.1' NULL ALTER YES
'root'@'127.0.0.1' NULL ALTER ROUTINE YES
@@ -8428,7 +8283,7 @@ from information_schema.statistics
where table_schema like 'db_datadict%';
table_name index_schema index_name index_type
select *
-from information_schema.user_privileges order by grantee, privilege_type;
+from information_schema.user_privileges;
GRANTEE TABLE_CATALOG PRIVILEGE_TYPE IS_GRANTABLE
'root'@'127.0.0.1' NULL ALTER YES
'root'@'127.0.0.1' NULL ALTER ROUTINE YES
@@ -8678,7 +8533,8 @@ ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_
FLUSH PRIVILEGES;
connect(localhost,u_6_401017,,test,MYSQL_PORT,MYSQL_SOCK);
use information_schema;
-select * from collation_character_set_applicability;
+select * from collation_character_set_applicability
+where collation_name <> 'utf8_general_cs';
COLLATION_NAME CHARACTER_SET_NAME
big5_chinese_ci big5
big5_bin big5
@@ -8884,7 +8740,7 @@ COLUMNS CHARACTER_SET_NAME varchar(64)
COLUMNS COLLATION_NAME varchar(64)
COLUMNS COLUMN_TYPE longtext
COLUMNS COLUMN_KEY varchar(3)
-COLUMNS EXTRA varchar(20)
+COLUMNS EXTRA varchar(27)
COLUMNS PRIVILEGES varchar(80)
COLUMNS COLUMN_COMMENT varchar(255)
COLUMN_PRIVILEGES GRANTEE varchar(81)
@@ -9477,7 +9333,7 @@ binary
geostd8
cp932
eucjpms
-select collation_name from collations;
+select collation_name from collations where collation_name <> 'utf8_general_cs';
collation_name
big5_chinese_ci
big5_bin
@@ -9842,7 +9698,7 @@ NULL information_schema collations SORTLEN 6 0 NO bigint NULL NULL 19 0 NULL NUL
Testcase 3.2.3.2:
--------------------------------------------------------------------------------
-SELECT * FROM collations;
+SELECT * FROM collations where collation_name <> 'utf8_general_cs';
COLLATION_NAME CHARACTER_SET_NAME ID IS_DEFAULT IS_COMPILED SORTLEN
big5_chinese_ci big5 1 Yes Yes 1
big5_bin big5 84 Yes 1
@@ -10004,7 +9860,8 @@ NULL information_schema collation_character_set_applicability CHARACTER_SET_NAME
Testcase 3.2.4.2:
--------------------------------------------------------------------------------
-SELECT * FROM collation_character_set_applicability;
+SELECT * FROM collation_character_set_applicability
+where collation_name <> 'utf8_general_cs';
COLLATION_NAME CHARACTER_SET_NAME
big5_chinese_ci big5
big5_bin big5
@@ -10317,9 +10174,9 @@ NUMERIC_PRECISION bigint(21) unsigned YES NULL
NUMERIC_SCALE bigint(21) unsigned YES NULL
CHARACTER_SET_NAME varchar(64) YES NULL
COLLATION_NAME varchar(64) YES NULL
-COLUMN_TYPE longtext NO
+COLUMN_TYPE longtext NO NULL
COLUMN_KEY varchar(3) NO
-EXTRA varchar(20) NO
+EXTRA varchar(27) NO
PRIVILEGES varchar(80) NO
COLUMN_COMMENT varchar(255) NO
SHOW CREATE TABLE columns;
@@ -10341,7 +10198,7 @@ COLUMNS CREATE TEMPORARY TABLE `COLUMNS` (
`COLLATION_NAME` varchar(64) DEFAULT NULL,
`COLUMN_TYPE` longtext NOT NULL,
`COLUMN_KEY` varchar(3) NOT NULL DEFAULT '',
- `EXTRA` varchar(20) NOT NULL DEFAULT '',
+ `EXTRA` varchar(27) NOT NULL DEFAULT '',
`PRIVILEGES` varchar(80) NOT NULL DEFAULT '',
`COLUMN_COMMENT` varchar(255) NOT NULL DEFAULT ''
) ENGINE=MyISAM DEFAULT CHARSET=utf8
@@ -10370,9 +10227,9 @@ NULL information_schema columns NUMERIC_PRECISION 11 NULL YES bigint NULL NULL 1
NULL information_schema columns NUMERIC_SCALE 12 NULL YES bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned select
NULL information_schema columns CHARACTER_SET_NAME 13 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema columns COLLATION_NAME 14 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
-NULL information_schema columns COLUMN_TYPE 15 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema columns COLUMN_TYPE 15 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema columns COLUMN_KEY 16 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
-NULL information_schema columns EXTRA 17 NO varchar 20 60 NULL NULL utf8 utf8_general_ci varchar(20) select
+NULL information_schema columns EXTRA 17 NO varchar 27 81 NULL NULL utf8 utf8_general_ci varchar(27) select
NULL information_schema columns PRIVILEGES 18 NO varchar 80 240 NULL NULL utf8 utf8_general_ci varchar(80) select
NULL information_schema columns COLUMN_COMMENT 19 NO varchar 255 765 NULL NULL utf8 utf8_general_ci varchar(255) select
@@ -10425,9 +10282,9 @@ NULL information_schema COLUMNS NUMERIC_PRECISION 11 NULL YES bigint NULL NULL 1
NULL information_schema COLUMNS NUMERIC_SCALE 12 NULL YES bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned select
NULL information_schema COLUMNS CHARACTER_SET_NAME 13 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema COLUMNS COLLATION_NAME 14 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
-NULL information_schema COLUMNS COLUMN_TYPE 15 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema COLUMNS COLUMN_TYPE 15 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema COLUMNS COLUMN_KEY 16 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
-NULL information_schema COLUMNS EXTRA 17 NO varchar 20 60 NULL NULL utf8 utf8_general_ci varchar(20) select
+NULL information_schema COLUMNS EXTRA 17 NO varchar 27 81 NULL NULL utf8 utf8_general_ci varchar(27) select
NULL information_schema COLUMNS PRIVILEGES 18 NO varchar 80 240 NULL NULL utf8 utf8_general_ci varchar(80) select
NULL information_schema COLUMNS COLUMN_COMMENT 19 NO varchar 255 765 NULL NULL utf8 utf8_general_ci varchar(255) select
NULL information_schema COLUMN_PRIVILEGES GRANTEE 1 NO varchar 81 243 NULL NULL utf8 utf8_general_ci varchar(81) select
@@ -10449,12 +10306,12 @@ NULL information_schema EVENTS EVENT_NAME 3 NO varchar 64 192 NULL NULL utf8 ut
NULL information_schema EVENTS DEFINER 4 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
NULL information_schema EVENTS TIME_ZONE 5 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema EVENTS EVENT_BODY 6 NO varchar 8 24 NULL NULL utf8 utf8_general_ci varchar(8) select
-NULL information_schema EVENTS EVENT_DEFINITION 7 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema EVENTS EVENT_DEFINITION 7 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema EVENTS EVENT_TYPE 8 NO varchar 9 27 NULL NULL utf8 utf8_general_ci varchar(9) select
NULL information_schema EVENTS EXECUTE_AT 9 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS INTERVAL_VALUE 10 NULL YES varchar 256 768 NULL NULL utf8 utf8_general_ci varchar(256) select
NULL information_schema EVENTS INTERVAL_FIELD 11 NULL YES varchar 18 54 NULL NULL utf8 utf8_general_ci varchar(18) select
-NULL information_schema EVENTS SQL_MODE 12 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema EVENTS SQL_MODE 12 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema EVENTS STARTS 13 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS ENDS 14 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS STATUS 15 NO varchar 18 54 NULL NULL utf8 utf8_general_ci varchar(18) select
@@ -10592,7 +10449,7 @@ NULL information_schema ROUTINES SQL_PATH 14 NULL YES varchar 64 192 NULL NULL u
NULL information_schema ROUTINES SECURITY_TYPE 15 NO varchar 7 21 NULL NULL utf8 utf8_general_ci varchar(7) select
NULL information_schema ROUTINES CREATED 16 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema ROUTINES LAST_ALTERED 17 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime select
-NULL information_schema ROUTINES SQL_MODE 18 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema ROUTINES SQL_MODE 18 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema ROUTINES ROUTINE_COMMENT 19 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema ROUTINES DEFINER 20 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
NULL information_schema ROUTINES CHARACTER_SET_CLIENT 21 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
@@ -10669,7 +10526,7 @@ NULL information_schema TRIGGERS EVENT_OBJECT_SCHEMA 6 NO varchar 64 192 NULL N
NULL information_schema TRIGGERS EVENT_OBJECT_TABLE 7 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema TRIGGERS ACTION_ORDER 8 0 NO bigint NULL NULL 19 0 NULL NULL bigint(4) select
NULL information_schema TRIGGERS ACTION_CONDITION 9 NULL YES longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
-NULL information_schema TRIGGERS ACTION_STATEMENT 10 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS ACTION_STATEMENT 10 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema TRIGGERS ACTION_ORIENTATION 11 NO varchar 9 27 NULL NULL utf8 utf8_general_ci varchar(9) select
NULL information_schema TRIGGERS ACTION_TIMING 12 NO varchar 6 18 NULL NULL utf8 utf8_general_ci varchar(6) select
NULL information_schema TRIGGERS ACTION_REFERENCE_OLD_TABLE 13 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
@@ -10677,8 +10534,8 @@ NULL information_schema TRIGGERS ACTION_REFERENCE_NEW_TABLE 14 NULL YES varchar
NULL information_schema TRIGGERS ACTION_REFERENCE_OLD_ROW 15 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema TRIGGERS ACTION_REFERENCE_NEW_ROW 16 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema TRIGGERS CREATED 17 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
-NULL information_schema TRIGGERS SQL_MODE 18 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
-NULL information_schema TRIGGERS DEFINER 19 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS SQL_MODE 18 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS DEFINER 19 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema TRIGGERS CHARACTER_SET_CLIENT 20 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
NULL information_schema TRIGGERS COLLATION_CONNECTION 21 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
NULL information_schema TRIGGERS DATABASE_COLLATION 22 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
@@ -10689,7 +10546,7 @@ NULL information_schema USER_PRIVILEGES IS_GRANTABLE 4 NO varchar 3 9 NULL NULL
NULL information_schema VIEWS TABLE_CATALOG 1 NULL YES varchar 4096 12288 NULL NULL utf8 utf8_general_ci varchar(4096) select
NULL information_schema VIEWS TABLE_SCHEMA 2 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema VIEWS TABLE_NAME 3 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
-NULL information_schema VIEWS VIEW_DEFINITION 4 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema VIEWS VIEW_DEFINITION 4 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema VIEWS CHECK_OPTION 5 NO varchar 8 24 NULL NULL utf8 utf8_general_ci varchar(8) select
NULL information_schema VIEWS IS_UPDATABLE 6 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema VIEWS DEFINER 7 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
@@ -10701,7 +10558,7 @@ NULL mysql columns_priv Db 2 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PR
NULL mysql columns_priv User 3 NO char 16 48 NULL NULL utf8 utf8_bin char(16) PRI select,insert,update,references
NULL mysql columns_priv Table_name 4 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PRI select,insert,update,references
NULL mysql columns_priv Column_name 5 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PRI select,insert,update,references
-NULL mysql columns_priv Timestamp 6 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL mysql columns_priv Timestamp 6 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL mysql columns_priv Column_priv 7 NO set 31 93 NULL NULL utf8 utf8_general_ci set('Select','Insert','Update','References') select,insert,update,references
NULL mysql db Host 1 NO char 60 180 NULL NULL utf8 utf8_bin char(60) PRI select,insert,update,references
NULL mysql db Db 2 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PRI select,insert,update,references
@@ -10732,7 +10589,7 @@ NULL mysql event definer 4 NO char 77 231 NULL NULL utf8 utf8_bin char(77) se
NULL mysql event execute_at 5 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select,insert,update,references
NULL mysql event interval_value 6 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
NULL mysql event interval_field 7 NULL YES enum 18 54 NULL NULL utf8 utf8_general_ci enum('YEAR','QUARTER','MONTH','DAY','HOUR','MINUTE','WEEK','SECOND','MICROSECOND','YEAR_MONTH','DAY_HOUR','DAY_MINUTE','DAY_SECOND','HOUR_MINUTE','HOUR_SECOND','MINUTE_SECOND','DAY_MICROSECOND','HOUR_MICROSECOND','MINUTE_MICROSECOND','SECOND_MICROSECOND') select,insert,update,references
-NULL mysql event created 8 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL mysql event created 8 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL mysql event modified 9 0000-00-00 00:00:00 NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
NULL mysql event last_executed 10 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select,insert,update,references
NULL mysql event starts 11 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select,insert,update,references
@@ -10751,12 +10608,12 @@ NULL mysql func name 1 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PRI sel
NULL mysql func ret 2 0 NO tinyint NULL NULL 3 0 NULL NULL tinyint(1) select,insert,update,references
NULL mysql func dl 3 NO char 128 384 NULL NULL utf8 utf8_bin char(128) select,insert,update,references
NULL mysql func type 4 NULL NO enum 9 27 NULL NULL utf8 utf8_general_ci enum('function','aggregate') select,insert,update,references
-NULL mysql general_log event_time 1 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
-NULL mysql general_log user_host 2 NULL YES mediumtext 16777215 16777215 NULL NULL utf8 utf8_general_ci mediumtext select,insert,update,references
-NULL mysql general_log thread_id 3 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
-NULL mysql general_log server_id 4 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
-NULL mysql general_log command_type 5 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references
-NULL mysql general_log argument 6 NULL YES mediumtext 16777215 16777215 NULL NULL utf8 utf8_general_ci mediumtext select,insert,update,references
+NULL mysql general_log event_time 1 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
+NULL mysql general_log user_host 2 NULL NO mediumtext 16777215 16777215 NULL NULL utf8 utf8_general_ci mediumtext select,insert,update,references
+NULL mysql general_log thread_id 3 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
+NULL mysql general_log server_id 4 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
+NULL mysql general_log command_type 5 NULL NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select,insert,update,references
+NULL mysql general_log argument 6 NULL NO mediumtext 16777215 16777215 NULL NULL utf8 utf8_general_ci mediumtext select,insert,update,references
NULL mysql help_category help_category_id 1 NULL NO smallint NULL NULL 5 0 NULL NULL smallint(5) unsigned PRI select,insert,update,references
NULL mysql help_category name 2 NULL NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) UNI select,insert,update,references
NULL mysql help_category parent_category_id 3 NULL YES smallint NULL NULL 5 0 NULL NULL smallint(5) unsigned select,insert,update,references
@@ -10809,10 +10666,10 @@ NULL mysql proc sql_data_access 6 CONTAINS_SQL NO enum 17 51 NULL NULL utf8 utf8
NULL mysql proc is_deterministic 7 NO NO enum 3 9 NULL NULL utf8 utf8_general_ci enum('YES','NO') select,insert,update,references
NULL mysql proc security_type 8 DEFINER NO enum 7 21 NULL NULL utf8 utf8_general_ci enum('INVOKER','DEFINER') select,insert,update,references
NULL mysql proc param_list 9 NULL NO blob 65535 65535 NULL NULL NULL NULL blob select,insert,update,references
-NULL mysql proc returns 10 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
+NULL mysql proc returns 10 NULL NO longblob 4294967295 4294967295 NULL NULL NULL NULL longblob select,insert,update,references
NULL mysql proc body 11 NULL NO longblob 4294967295 4294967295 NULL NULL NULL NULL longblob select,insert,update,references
NULL mysql proc definer 12 NO char 77 231 NULL NULL utf8 utf8_bin char(77) select,insert,update,references
-NULL mysql proc created 13 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL mysql proc created 13 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL mysql proc modified 14 0000-00-00 00:00:00 NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
NULL mysql proc sql_mode 15 NO set 431 1293 NULL NULL utf8 utf8_general_ci set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','NOT_USED','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE') select,insert,update,references
NULL mysql proc comment 16 NO char 64 192 NULL NULL utf8 utf8_bin char(64) select,insert,update,references
@@ -10827,7 +10684,7 @@ NULL mysql procs_priv Routine_name 4 NO char 64 192 NULL NULL utf8 utf8_bin cha
NULL mysql procs_priv Routine_type 5 NULL NO enum 9 27 NULL NULL utf8 utf8_bin enum('FUNCTION','PROCEDURE') PRI select,insert,update,references
NULL mysql procs_priv Grantor 6 NO char 77 231 NULL NULL utf8 utf8_bin char(77) MUL select,insert,update,references
NULL mysql procs_priv Proc_priv 7 NO set 27 81 NULL NULL utf8 utf8_general_ci set('Execute','Alter Routine','Grant') select,insert,update,references
-NULL mysql procs_priv Timestamp 8 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL mysql procs_priv Timestamp 8 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL mysql servers Server_name 1 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) PRI select,insert,update,references
NULL mysql servers Host 2 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
NULL mysql servers Db 3 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
@@ -10837,23 +10694,23 @@ NULL mysql servers Port 6 0 NO int NULL NULL 10 0 NULL NULL int(4) select,inse
NULL mysql servers Socket 7 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
NULL mysql servers Wrapper 8 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
NULL mysql servers Owner 9 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
-NULL mysql slow_log start_time 1 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL mysql slow_log start_time 1 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL mysql slow_log user_host 2 NULL NO mediumtext 16777215 16777215 NULL NULL utf8 utf8_general_ci mediumtext select,insert,update,references
NULL mysql slow_log query_time 3 NULL NO time NULL NULL NULL NULL NULL NULL time select,insert,update,references
NULL mysql slow_log lock_time 4 NULL NO time NULL NULL NULL NULL NULL NULL time select,insert,update,references
NULL mysql slow_log rows_sent 5 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
NULL mysql slow_log rows_examined 6 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
-NULL mysql slow_log db 7 NULL YES varchar 4096 12288 NULL NULL utf8 utf8_general_ci varchar(4096) select,insert,update,references
-NULL mysql slow_log last_insert_id 8 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
-NULL mysql slow_log insert_id 9 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
-NULL mysql slow_log server_id 10 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
+NULL mysql slow_log db 7 NULL NO varchar 4096 12288 NULL NULL utf8 utf8_general_ci varchar(4096) select,insert,update,references
+NULL mysql slow_log last_insert_id 8 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
+NULL mysql slow_log insert_id 9 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
+NULL mysql slow_log server_id 10 NULL NO int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
NULL mysql slow_log sql_text 11 NULL NO mediumtext 16777215 16777215 NULL NULL utf8 utf8_general_ci mediumtext select,insert,update,references
NULL mysql tables_priv Host 1 NO char 60 180 NULL NULL utf8 utf8_bin char(60) PRI select,insert,update,references
NULL mysql tables_priv Db 2 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PRI select,insert,update,references
NULL mysql tables_priv User 3 NO char 16 48 NULL NULL utf8 utf8_bin char(16) PRI select,insert,update,references
NULL mysql tables_priv Table_name 4 NO char 64 192 NULL NULL utf8 utf8_bin char(64) PRI select,insert,update,references
NULL mysql tables_priv Grantor 5 NO char 77 231 NULL NULL utf8 utf8_bin char(77) MUL select,insert,update,references
-NULL mysql tables_priv Timestamp 6 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL mysql tables_priv Timestamp 6 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL mysql tables_priv Table_priv 7 NO set 98 294 NULL NULL utf8 utf8_general_ci set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter','Create View','Show view','Trigger') select,insert,update,references
NULL mysql tables_priv Column_priv 8 NO set 31 93 NULL NULL utf8 utf8_general_ci set('Select','Insert','Update','References') select,insert,update,references
NULL mysql time_zone Time_zone_id 1 NULL NO int NULL NULL 10 0 NULL NULL int(10) unsigned PRI auto_increment select,insert,update,references
@@ -11173,7 +11030,7 @@ NULL test tb4 f217 42 NULL YES double unsigned zerofill NULL NULL 22 NULL NULL N
NULL test tb4 f218 43 NULL YES date NULL NULL NULL NULL NULL NULL date select,insert,update,references
NULL test tb4 f219 44 NULL YES time NULL NULL NULL NULL NULL NULL time select,insert,update,references
NULL test tb4 f220 45 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select,insert,update,references
-NULL test tb4 f221 46 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL test tb4 f221 46 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL test tb4 f222 47 NULL YES year NULL NULL NULL NULL NULL NULL year(4) select,insert,update,references
NULL test tb4 f223 48 NULL YES year NULL NULL NULL NULL NULL NULL year(4) select,insert,update,references
NULL test tb4 f224 49 NULL YES year NULL NULL NULL NULL NULL NULL year(4) select,insert,update,references
@@ -11292,9 +11149,9 @@ NULL information_schema COLUMNS NUMERIC_PRECISION 11 NULL YES bigint NULL NULL 1
NULL information_schema COLUMNS NUMERIC_SCALE 12 NULL YES bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned select
NULL information_schema COLUMNS CHARACTER_SET_NAME 13 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema COLUMNS COLLATION_NAME 14 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
-NULL information_schema COLUMNS COLUMN_TYPE 15 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema COLUMNS COLUMN_TYPE 15 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema COLUMNS COLUMN_KEY 16 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
-NULL information_schema COLUMNS EXTRA 17 NO varchar 20 60 NULL NULL utf8 utf8_general_ci varchar(20) select
+NULL information_schema COLUMNS EXTRA 17 NO varchar 27 81 NULL NULL utf8 utf8_general_ci varchar(27) select
NULL information_schema COLUMNS PRIVILEGES 18 NO varchar 80 240 NULL NULL utf8 utf8_general_ci varchar(80) select
NULL information_schema COLUMNS COLUMN_COMMENT 19 NO varchar 255 765 NULL NULL utf8 utf8_general_ci varchar(255) select
NULL information_schema COLUMN_PRIVILEGES GRANTEE 1 NO varchar 81 243 NULL NULL utf8 utf8_general_ci varchar(81) select
@@ -11316,12 +11173,12 @@ NULL information_schema EVENTS EVENT_NAME 3 NO varchar 64 192 NULL NULL utf8 ut
NULL information_schema EVENTS DEFINER 4 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
NULL information_schema EVENTS TIME_ZONE 5 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema EVENTS EVENT_BODY 6 NO varchar 8 24 NULL NULL utf8 utf8_general_ci varchar(8) select
-NULL information_schema EVENTS EVENT_DEFINITION 7 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema EVENTS EVENT_DEFINITION 7 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema EVENTS EVENT_TYPE 8 NO varchar 9 27 NULL NULL utf8 utf8_general_ci varchar(9) select
NULL information_schema EVENTS EXECUTE_AT 9 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS INTERVAL_VALUE 10 NULL YES varchar 256 768 NULL NULL utf8 utf8_general_ci varchar(256) select
NULL information_schema EVENTS INTERVAL_FIELD 11 NULL YES varchar 18 54 NULL NULL utf8 utf8_general_ci varchar(18) select
-NULL information_schema EVENTS SQL_MODE 12 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema EVENTS SQL_MODE 12 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema EVENTS STARTS 13 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS ENDS 14 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS STATUS 15 NO varchar 18 54 NULL NULL utf8 utf8_general_ci varchar(18) select
@@ -11459,7 +11316,7 @@ NULL information_schema ROUTINES SQL_PATH 14 NULL YES varchar 64 192 NULL NULL u
NULL information_schema ROUTINES SECURITY_TYPE 15 NO varchar 7 21 NULL NULL utf8 utf8_general_ci varchar(7) select
NULL information_schema ROUTINES CREATED 16 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema ROUTINES LAST_ALTERED 17 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime select
-NULL information_schema ROUTINES SQL_MODE 18 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema ROUTINES SQL_MODE 18 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema ROUTINES ROUTINE_COMMENT 19 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema ROUTINES DEFINER 20 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
NULL information_schema ROUTINES CHARACTER_SET_CLIENT 21 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
@@ -11536,7 +11393,7 @@ NULL information_schema TRIGGERS EVENT_OBJECT_SCHEMA 6 NO varchar 64 192 NULL N
NULL information_schema TRIGGERS EVENT_OBJECT_TABLE 7 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema TRIGGERS ACTION_ORDER 8 0 NO bigint NULL NULL 19 0 NULL NULL bigint(4) select
NULL information_schema TRIGGERS ACTION_CONDITION 9 NULL YES longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
-NULL information_schema TRIGGERS ACTION_STATEMENT 10 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS ACTION_STATEMENT 10 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema TRIGGERS ACTION_ORIENTATION 11 NO varchar 9 27 NULL NULL utf8 utf8_general_ci varchar(9) select
NULL information_schema TRIGGERS ACTION_TIMING 12 NO varchar 6 18 NULL NULL utf8 utf8_general_ci varchar(6) select
NULL information_schema TRIGGERS ACTION_REFERENCE_OLD_TABLE 13 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
@@ -11544,8 +11401,8 @@ NULL information_schema TRIGGERS ACTION_REFERENCE_NEW_TABLE 14 NULL YES varchar
NULL information_schema TRIGGERS ACTION_REFERENCE_OLD_ROW 15 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema TRIGGERS ACTION_REFERENCE_NEW_ROW 16 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema TRIGGERS CREATED 17 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
-NULL information_schema TRIGGERS SQL_MODE 18 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
-NULL information_schema TRIGGERS DEFINER 19 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS SQL_MODE 18 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS DEFINER 19 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema TRIGGERS CHARACTER_SET_CLIENT 20 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
NULL information_schema TRIGGERS COLLATION_CONNECTION 21 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
NULL information_schema TRIGGERS DATABASE_COLLATION 22 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
@@ -11556,7 +11413,7 @@ NULL information_schema USER_PRIVILEGES IS_GRANTABLE 4 NO varchar 3 9 NULL NULL
NULL information_schema VIEWS TABLE_CATALOG 1 NULL YES varchar 4096 12288 NULL NULL utf8 utf8_general_ci varchar(4096) select
NULL information_schema VIEWS TABLE_SCHEMA 2 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema VIEWS TABLE_NAME 3 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
-NULL information_schema VIEWS VIEW_DEFINITION 4 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema VIEWS VIEW_DEFINITION 4 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema VIEWS CHECK_OPTION 5 NO varchar 8 24 NULL NULL utf8 utf8_general_ci varchar(8) select
NULL information_schema VIEWS IS_UPDATABLE 6 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema VIEWS DEFINER 7 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
@@ -11827,7 +11684,7 @@ NULL test tb4 f217 42 NULL YES double unsigned zerofill NULL NULL 22 NULL NULL N
NULL test tb4 f218 43 NULL YES date NULL NULL NULL NULL NULL NULL date select,insert,update,references
NULL test tb4 f219 44 NULL YES time NULL NULL NULL NULL NULL NULL time select,insert,update,references
NULL test tb4 f220 45 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select,insert,update,references
-NULL test tb4 f221 46 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL test tb4 f221 46 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL test tb4 f222 47 NULL YES year NULL NULL NULL NULL NULL NULL year(4) select,insert,update,references
NULL test tb4 f223 48 NULL YES year NULL NULL NULL NULL NULL NULL year(4) select,insert,update,references
NULL test tb4 f224 49 NULL YES year NULL NULL NULL NULL NULL NULL year(4) select,insert,update,references
@@ -11881,9 +11738,9 @@ NULL information_schema COLUMNS NUMERIC_PRECISION 11 NULL YES bigint NULL NULL 1
NULL information_schema COLUMNS NUMERIC_SCALE 12 NULL YES bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned select
NULL information_schema COLUMNS CHARACTER_SET_NAME 13 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema COLUMNS COLLATION_NAME 14 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
-NULL information_schema COLUMNS COLUMN_TYPE 15 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema COLUMNS COLUMN_TYPE 15 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema COLUMNS COLUMN_KEY 16 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
-NULL information_schema COLUMNS EXTRA 17 NO varchar 20 60 NULL NULL utf8 utf8_general_ci varchar(20) select
+NULL information_schema COLUMNS EXTRA 17 NO varchar 27 81 NULL NULL utf8 utf8_general_ci varchar(27) select
NULL information_schema COLUMNS PRIVILEGES 18 NO varchar 80 240 NULL NULL utf8 utf8_general_ci varchar(80) select
NULL information_schema COLUMNS COLUMN_COMMENT 19 NO varchar 255 765 NULL NULL utf8 utf8_general_ci varchar(255) select
NULL information_schema COLUMN_PRIVILEGES GRANTEE 1 NO varchar 81 243 NULL NULL utf8 utf8_general_ci varchar(81) select
@@ -11905,12 +11762,12 @@ NULL information_schema EVENTS EVENT_NAME 3 NO varchar 64 192 NULL NULL utf8 ut
NULL information_schema EVENTS DEFINER 4 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
NULL information_schema EVENTS TIME_ZONE 5 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema EVENTS EVENT_BODY 6 NO varchar 8 24 NULL NULL utf8 utf8_general_ci varchar(8) select
-NULL information_schema EVENTS EVENT_DEFINITION 7 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema EVENTS EVENT_DEFINITION 7 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema EVENTS EVENT_TYPE 8 NO varchar 9 27 NULL NULL utf8 utf8_general_ci varchar(9) select
NULL information_schema EVENTS EXECUTE_AT 9 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS INTERVAL_VALUE 10 NULL YES varchar 256 768 NULL NULL utf8 utf8_general_ci varchar(256) select
NULL information_schema EVENTS INTERVAL_FIELD 11 NULL YES varchar 18 54 NULL NULL utf8 utf8_general_ci varchar(18) select
-NULL information_schema EVENTS SQL_MODE 12 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema EVENTS SQL_MODE 12 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema EVENTS STARTS 13 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS ENDS 14 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS STATUS 15 NO varchar 18 54 NULL NULL utf8 utf8_general_ci varchar(18) select
@@ -12048,7 +11905,7 @@ NULL information_schema ROUTINES SQL_PATH 14 NULL YES varchar 64 192 NULL NULL u
NULL information_schema ROUTINES SECURITY_TYPE 15 NO varchar 7 21 NULL NULL utf8 utf8_general_ci varchar(7) select
NULL information_schema ROUTINES CREATED 16 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema ROUTINES LAST_ALTERED 17 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime select
-NULL information_schema ROUTINES SQL_MODE 18 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema ROUTINES SQL_MODE 18 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema ROUTINES ROUTINE_COMMENT 19 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema ROUTINES DEFINER 20 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
NULL information_schema ROUTINES CHARACTER_SET_CLIENT 21 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
@@ -12125,7 +11982,7 @@ NULL information_schema TRIGGERS EVENT_OBJECT_SCHEMA 6 NO varchar 64 192 NULL N
NULL information_schema TRIGGERS EVENT_OBJECT_TABLE 7 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema TRIGGERS ACTION_ORDER 8 0 NO bigint NULL NULL 19 0 NULL NULL bigint(4) select
NULL information_schema TRIGGERS ACTION_CONDITION 9 NULL YES longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
-NULL information_schema TRIGGERS ACTION_STATEMENT 10 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS ACTION_STATEMENT 10 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema TRIGGERS ACTION_ORIENTATION 11 NO varchar 9 27 NULL NULL utf8 utf8_general_ci varchar(9) select
NULL information_schema TRIGGERS ACTION_TIMING 12 NO varchar 6 18 NULL NULL utf8 utf8_general_ci varchar(6) select
NULL information_schema TRIGGERS ACTION_REFERENCE_OLD_TABLE 13 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
@@ -12133,8 +11990,8 @@ NULL information_schema TRIGGERS ACTION_REFERENCE_NEW_TABLE 14 NULL YES varchar
NULL information_schema TRIGGERS ACTION_REFERENCE_OLD_ROW 15 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema TRIGGERS ACTION_REFERENCE_NEW_ROW 16 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema TRIGGERS CREATED 17 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
-NULL information_schema TRIGGERS SQL_MODE 18 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
-NULL information_schema TRIGGERS DEFINER 19 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS SQL_MODE 18 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS DEFINER 19 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema TRIGGERS CHARACTER_SET_CLIENT 20 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
NULL information_schema TRIGGERS COLLATION_CONNECTION 21 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
NULL information_schema TRIGGERS DATABASE_COLLATION 22 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
@@ -12145,7 +12002,7 @@ NULL information_schema USER_PRIVILEGES IS_GRANTABLE 4 NO varchar 3 9 NULL NULL
NULL information_schema VIEWS TABLE_CATALOG 1 NULL YES varchar 4096 12288 NULL NULL utf8 utf8_general_ci varchar(4096) select
NULL information_schema VIEWS TABLE_SCHEMA 2 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema VIEWS TABLE_NAME 3 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
-NULL information_schema VIEWS VIEW_DEFINITION 4 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema VIEWS VIEW_DEFINITION 4 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema VIEWS CHECK_OPTION 5 NO varchar 8 24 NULL NULL utf8 utf8_general_ci varchar(8) select
NULL information_schema VIEWS IS_UPDATABLE 6 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema VIEWS DEFINER 7 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
@@ -12416,7 +12273,7 @@ NULL test tb4 f217 42 NULL YES double unsigned zerofill NULL NULL 22 NULL NULL N
NULL test tb4 f218 43 NULL YES date NULL NULL NULL NULL NULL NULL date select,insert,update,references
NULL test tb4 f219 44 NULL YES time NULL NULL NULL NULL NULL NULL time select,insert,update,references
NULL test tb4 f220 45 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select,insert,update,references
-NULL test tb4 f221 46 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp select,insert,update,references
+NULL test tb4 f221 46 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
NULL test tb4 f222 47 NULL YES year NULL NULL NULL NULL NULL NULL year(4) select,insert,update,references
NULL test tb4 f223 48 NULL YES year NULL NULL NULL NULL NULL NULL year(4) select,insert,update,references
NULL test tb4 f224 49 NULL YES year NULL NULL NULL NULL NULL NULL year(4) select,insert,update,references
@@ -12568,7 +12425,7 @@ NULL information_schema COLUMNS NUMERIC_SCALE bigint NULL NULL NULL NULL bigint(
3.0000 information_schema COLUMNS COLLATION_NAME varchar 64 192 utf8 utf8_general_ci varchar(64)
1.0000 information_schema COLUMNS COLUMN_TYPE longtext 4294967295 4294967295 utf8 utf8_general_ci longtext
3.0000 information_schema COLUMNS COLUMN_KEY varchar 3 9 utf8 utf8_general_ci varchar(3)
-3.0000 information_schema COLUMNS EXTRA varchar 20 60 utf8 utf8_general_ci varchar(20)
+3.0000 information_schema COLUMNS EXTRA varchar 27 81 utf8 utf8_general_ci varchar(27)
3.0000 information_schema COLUMNS PRIVILEGES varchar 80 240 utf8 utf8_general_ci varchar(80)
3.0000 information_schema COLUMNS COLUMN_COMMENT varchar 255 765 utf8 utf8_general_ci varchar(255)
3.0000 information_schema COLUMN_PRIVILEGES GRANTEE varchar 81 243 utf8 utf8_general_ci varchar(81)
@@ -12950,7 +12807,7 @@ NULL mysql ndb_binlog_index schemaops bigint NULL NULL NULL NULL bigint(20) unsi
3.0000 mysql proc is_deterministic enum 3 9 utf8 utf8_general_ci enum('YES','NO')
3.0000 mysql proc security_type enum 7 21 utf8 utf8_general_ci enum('INVOKER','DEFINER')
1.0000 mysql proc param_list blob 65535 65535 NULL NULL blob
-3.0000 mysql proc returns char 64 192 utf8 utf8_general_ci char(64)
+1.0000 mysql proc returns longblob 4294967295 4294967295 NULL NULL longblob
1.0000 mysql proc body longblob 4294967295 4294967295 NULL NULL longblob
3.0000 mysql proc definer char 77 231 utf8 utf8_bin char(77)
NULL mysql proc created timestamp NULL NULL NULL NULL timestamp
@@ -13575,7 +13432,7 @@ SQL_PATH varchar(64) YES NULL
SECURITY_TYPE varchar(7) NO
CREATED datetime NO 0000-00-00 00:00:00
LAST_ALTERED datetime NO 0000-00-00 00:00:00
-SQL_MODE longtext NO
+SQL_MODE longtext NO NULL
ROUTINE_COMMENT varchar(64) NO
DEFINER varchar(77) NO
CHARACTER_SET_CLIENT varchar(32) NO
@@ -13636,7 +13493,7 @@ NULL information_schema routines SQL_PATH 14 NULL YES varchar 64 192 NULL NULL u
NULL information_schema routines SECURITY_TYPE 15 NO varchar 7 21 NULL NULL utf8 utf8_general_ci varchar(7) select
NULL information_schema routines CREATED 16 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema routines LAST_ALTERED 17 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime select
-NULL information_schema routines SQL_MODE 18 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema routines SQL_MODE 18 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema routines ROUTINE_COMMENT 19 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema routines DEFINER 20 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
NULL information_schema routines CHARACTER_SET_CLIENT 21 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
@@ -14488,7 +14345,7 @@ NULL information_schema TRIGGERS SYSTEM VIEW MyISAM 10 Dynamic NULL #ARL# #DL# #
NULL information_schema USER_PRIVILEGES SYSTEM VIEW MEMORY 10 Fixed NULL #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_general_ci NULL #CO#
NULL information_schema VIEWS SYSTEM VIEW MyISAM 10 Dynamic NULL #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_general_ci NULL #CO#
SELECT * FROM information_schema.tables
-WHERE NOT( table_schema = 'information_schema');
+WHERE NOT( table_schema = 'information_schema') AND NOT (table_schema = 'mysql' AND table_name LIKE 'help_%');
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE ENGINE VERSION ROW_FORMAT TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE AUTO_INCREMENT CREATE_TIME UPDATE_TIME CHECK_TIME TABLE_COLLATION CHECKSUM CREATE_OPTIONS TABLE_COMMENT
NULL db_datadict tb1 BASE TABLE MyISAM 10 Fixed 0 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
NULL db_datadict tb2 BASE TABLE MyISAM 10 Fixed 0 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
@@ -14499,10 +14356,6 @@ NULL mysql db BASE TABLE MyISAM 10 Fixed 3 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-
NULL mysql event BASE TABLE MyISAM 10 Dynamic 0 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_general_ci NULL Events
NULL mysql func BASE TABLE MyISAM 10 Fixed 0 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_bin NULL User defined functions
NULL mysql general_log BASE TABLE CSV 10 Dynamic 1 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_general_ci NULL General log
-NULL mysql help_category BASE TABLE MyISAM 10 Fixed 37 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_general_ci NULL help categories
-NULL mysql help_keyword BASE TABLE MyISAM 10 Fixed 424 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_general_ci NULL help keywords
-NULL mysql help_relation BASE TABLE MyISAM 10 Fixed 901 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_general_ci NULL keyword-topic relation
-NULL mysql help_topic BASE TABLE MyISAM 10 Dynamic 479 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_general_ci NULL help topics
NULL mysql host BASE TABLE MyISAM 10 Fixed 0 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_bin NULL Host privileges; Merged with database privileges
NULL mysql ndb_binlog_index BASE TABLE MyISAM 10 Dynamic 0 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
NULL mysql plugin BASE TABLE MyISAM 10 Fixed 0 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_bin NULL MySQL plugins
@@ -14549,7 +14402,7 @@ Field Type Null Key Default Extra
TABLE_CATALOG varchar(4096) YES NULL
TABLE_SCHEMA varchar(64) NO
TABLE_NAME varchar(64) NO
-VIEW_DEFINITION longtext NO
+VIEW_DEFINITION longtext NO NULL
CHECK_OPTION varchar(8) NO
IS_UPDATABLE varchar(3) NO
DEFINER varchar(77) NO
@@ -14584,7 +14437,7 @@ TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION COLUMN_DEFAUL
NULL information_schema views TABLE_CATALOG 1 NULL YES varchar 4096 12288 NULL NULL utf8 utf8_general_ci varchar(4096) select
NULL information_schema views TABLE_SCHEMA 2 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema views TABLE_NAME 3 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
-NULL information_schema views VIEW_DEFINITION 4 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema views VIEW_DEFINITION 4 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema views CHECK_OPTION 5 NO varchar 8 24 NULL NULL utf8 utf8_general_ci varchar(8) select
NULL information_schema views IS_UPDATABLE 6 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema views DEFINER 7 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
@@ -14731,7 +14584,8 @@ TABLE_CATALOG TABLE_SCHEMA TABLE_NAME NON_UNIQUE INDEX_SCHEMA INDEX_NAME SEQ_IN_
root@localhost db_datadict_2
REVOKE SELECT ON db_datadict.tb_6_401402_1 FROM 'user_1'@'localhost';
-SELECT * FROM information_schema.statistics;
+SELECT * FROM information_schema.statistics
+WHERE NOT (table_schema = 'mysql' AND table_name LIKE 'help_%');
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME NON_UNIQUE INDEX_SCHEMA INDEX_NAME SEQ_IN_INDEX COLUMN_NAME COLLATION CARDINALITY SUB_PART PACKED NULLABLE INDEX_TYPE COMMENT
NULL db_datadict tb_6_401402_1 0 db_datadict PRIMARY 1 f1 A 0 NULL NULL BTREE
NULL db_datadict tb_6_401402_1 1 db_datadict f2_ind 1 f2 A NULL NULL NULL YES BTREE
@@ -14753,14 +14607,6 @@ NULL mysql db 1 mysql User 1 User A 1 NULL NULL BTREE
NULL mysql event 0 mysql PRIMARY 1 db A NULL NULL NULL BTREE
NULL mysql event 0 mysql PRIMARY 2 name A 0 NULL NULL BTREE
NULL mysql func 0 mysql PRIMARY 1 name A 0 NULL NULL BTREE
-NULL mysql help_category 0 mysql PRIMARY 1 help_category_id A 37 NULL NULL BTREE
-NULL mysql help_category 0 mysql name 1 name A 37 NULL NULL BTREE
-NULL mysql help_keyword 0 mysql PRIMARY 1 help_keyword_id A 424 NULL NULL BTREE
-NULL mysql help_keyword 0 mysql name 1 name A 424 NULL NULL BTREE
-NULL mysql help_relation 0 mysql PRIMARY 1 help_keyword_id A NULL NULL NULL BTREE
-NULL mysql help_relation 0 mysql PRIMARY 2 help_topic_id A 901 NULL NULL BTREE
-NULL mysql help_topic 0 mysql PRIMARY 1 help_topic_id A 479 NULL NULL BTREE
-NULL mysql help_topic 0 mysql name 1 name A 479 NULL NULL BTREE
NULL mysql host 0 mysql PRIMARY 1 Host A NULL NULL NULL BTREE
NULL mysql host 0 mysql PRIMARY 2 Db A 0 NULL NULL BTREE
NULL mysql ndb_binlog_index 0 mysql PRIMARY 1 epoch A 0 NULL NULL BTREE
@@ -15364,7 +15210,7 @@ EVENT_OBJECT_SCHEMA varchar(64) NO
EVENT_OBJECT_TABLE varchar(64) NO
ACTION_ORDER bigint(4) NO 0
ACTION_CONDITION longtext YES NULL
-ACTION_STATEMENT longtext NO
+ACTION_STATEMENT longtext NO NULL
ACTION_ORIENTATION varchar(9) NO
ACTION_TIMING varchar(6) NO
ACTION_REFERENCE_OLD_TABLE varchar(64) YES NULL
@@ -15372,8 +15218,8 @@ ACTION_REFERENCE_NEW_TABLE varchar(64) YES NULL
ACTION_REFERENCE_OLD_ROW varchar(3) NO
ACTION_REFERENCE_NEW_ROW varchar(3) NO
CREATED datetime YES NULL
-SQL_MODE longtext NO
-DEFINER longtext NO
+SQL_MODE longtext NO NULL
+DEFINER longtext NO NULL
CHARACTER_SET_CLIENT varchar(32) NO
COLLATION_CONNECTION varchar(32) NO
DATABASE_COLLATION varchar(32) NO
@@ -15423,7 +15269,7 @@ NULL information_schema triggers EVENT_OBJECT_SCHEMA 6 NO varchar 64 192 NULL N
NULL information_schema triggers EVENT_OBJECT_TABLE 7 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema triggers ACTION_ORDER 8 0 NO bigint NULL NULL 19 0 NULL NULL bigint(4) select
NULL information_schema triggers ACTION_CONDITION 9 NULL YES longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
-NULL information_schema triggers ACTION_STATEMENT 10 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema triggers ACTION_STATEMENT 10 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema triggers ACTION_ORIENTATION 11 NO varchar 9 27 NULL NULL utf8 utf8_general_ci varchar(9) select
NULL information_schema triggers ACTION_TIMING 12 NO varchar 6 18 NULL NULL utf8 utf8_general_ci varchar(6) select
NULL information_schema triggers ACTION_REFERENCE_OLD_TABLE 13 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
@@ -15431,8 +15277,8 @@ NULL information_schema triggers ACTION_REFERENCE_NEW_TABLE 14 NULL YES varchar
NULL information_schema triggers ACTION_REFERENCE_OLD_ROW 15 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema triggers ACTION_REFERENCE_NEW_ROW 16 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema triggers CREATED 17 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
-NULL information_schema triggers SQL_MODE 18 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
-NULL information_schema triggers DEFINER 19 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema triggers SQL_MODE 18 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema triggers DEFINER 19 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema triggers CHARACTER_SET_CLIENT 20 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
NULL information_schema triggers COLLATION_CONNECTION 21 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
NULL information_schema triggers DATABASE_COLLATION 22 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
diff --git a/mysql-test/suite/funcs_1/r/myisam_func_view.result b/mysql-test/suite/funcs_1/r/myisam_func_view.result
index 02ef728fad5..14568643665 100644
--- a/mysql-test/suite/funcs_1/r/myisam_func_view.result
+++ b/mysql-test/suite/funcs_1/r/myisam_func_view.result
@@ -1,7 +1,3 @@
-
-! Attention: The file with the expected results suffers from
-Bug#10713: mysqldump includes database in create view and referenced tables
---------------------------------------------------------------------------------
DROP TABLE IF EXISTS t1_selects, t1_modes, t1_values;
DROP VIEW IF EXISTS v1;
CREATE TABLE t1_values
@@ -89,6 +85,9 @@ INSERT INTO t1_values SET select_id = @select_id,
my_bigint = 4;
INSERT INTO t1_values SET select_id = @select_id,
my_bigint = -25;
+##### 1.1.1. CAST --> BINARY
+##### 1.1.2. CAST --> CHAR
+##### 1.1.3. CAST --> DATE
INSERT INTO t1_values SET select_id = @select_id,
my_char_30 = '2005-06-27';
INSERT INTO t1_values SET select_id = @select_id,
@@ -101,6 +100,7 @@ INSERT INTO t1_values SET select_id = @select_id,
my_bigint = 20050627;
INSERT INTO t1_values SET select_id = @select_id,
my_double = +20.050627E+6;
+##### 1.1.4. CAST --> DATETIME
INSERT INTO t1_values SET select_id = @select_id,
my_char_30 = '2005-06-27 17:58';
INSERT INTO t1_values SET select_id = @select_id,
@@ -113,6 +113,7 @@ INSERT INTO t1_values SET select_id = @select_id,
my_bigint = 200506271758;
INSERT INTO t1_values SET select_id = @select_id,
my_double = +0.0200506271758E+13;
+##### 1.1.5. CAST --> TIME
INSERT INTO t1_values SET select_id = @select_id,
my_char_30 = '1 17:58';
INSERT INTO t1_values SET select_id = @select_id,
@@ -125,6 +126,7 @@ INSERT INTO t1_values SET select_id = @select_id,
my_bigint = 1758;
INSERT INTO t1_values SET select_id = @select_id,
my_double = +1.758E+3;
+##### 1.1.6. CAST --> DECIMAL
INSERT INTO t1_values SET select_id = @select_id,
my_char_30 = '-3333.3333';
INSERT INTO t1_values SET select_id = @select_id,
@@ -135,11 +137,13 @@ INSERT INTO t1_values SET select_id = @select_id,
my_varbinary_1000 = '-3333.3333';
INSERT INTO t1_values SET select_id = @select_id,
my_double = -0.33333333E+4;
+##### 1.1.7. CAST --> SIGNED INTEGER
"Attention: CAST --> SIGNED INTEGER
Bug#5913 Traditional mode: BIGINT range not correctly delimited
Status: To be fixed later"
--------------------------------------------------------------------------------
+##### 1.1.8. CAST --> UNSIGNED INTEGER
"Attention: CAST --> UNSIGNED INTEGER
The file with expected results suffers from Bug 5913"
@@ -184,14 +188,12 @@ SET @my_select =
'SELECT LEFT(my_binary_30, 2), my_binary_30, id FROM t1_values';
SET @my_select =
'SELECT LEFT(my_varbinary_1000, 2), my_varbinary_1000, id FROM t1_values';
-
-"Attention: LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', <numeric column>)
- The file with expected results suffers from Bug 10963"
- and the testcases with length = BIGINT or DOUBLE column are deactivated,
-because there are 32/64 Bit differences
---------------------------------------------------------------------------------
+SET @my_select =
+'SELECT LEFT(''AaBbCcDdEeFfGgHhIiJjÄäÜüÖö'', my_bigint), my_bigint, id FROM t1_values';
SET @my_select =
'SELECT LEFT(''AaBbCcDdEeFfGgHhIiJjÄäÜüÖö'', my_decimal), my_decimal, id FROM t1_values';
+SET @my_select =
+'SELECT LEFT(''AaBbCcDdEeFfGgHhIiJjÄäÜüÖö'', my_double), my_double, id FROM t1_values';
SET @my_select = 'SELECT LENGTH(my_char_30),
my_char_30, id FROM t1_values';
SET @my_select = 'SELECT LENGTH(my_varchar_1000),
@@ -284,19 +286,19 @@ SET sql_mode = '';
--------------------------------------------------------------------------------
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;
+WHERE select_id = 193 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 193 OR select_id IS NULL) order by id;
DROP VIEW v1;
CREATE VIEW v1 AS SELECT CONCAT('A',my_char_30), my_char_30, id FROM t1_values;
SELECT CONCAT('A',my_char_30), my_char_30, id FROM t1_values
-WHERE select_id = 189 OR select_id IS NULL order by id;
+WHERE select_id = 192 OR select_id IS NULL order by id;
CONCAT('A',my_char_30) my_char_30 id
NULL NULL 1
A 2
@@ -308,7 +310,7 @@ 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;
+WHERE select_id = 192 OR select_id IS NULL) order by id;
CONCAT('A',my_char_30) my_char_30 id
NULL NULL 1
A 2
@@ -322,13 +324,13 @@ CREATE VIEW v1 AS SELECT LTRIM(my_varbinary_1000),
my_varbinary_1000, id FROM t1_values;
SELECT LTRIM(my_varbinary_1000),
my_varbinary_1000, id FROM t1_values
-WHERE select_id = 188 OR select_id IS NULL order by id;
+WHERE select_id = 191 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 191 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -336,13 +338,13 @@ CREATE VIEW v1 AS SELECT LTRIM(my_binary_30),
my_binary_30, id FROM t1_values;
SELECT LTRIM(my_binary_30),
my_binary_30, id FROM t1_values
-WHERE select_id = 187 OR select_id IS NULL order by id;
+WHERE select_id = 190 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 190 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -350,13 +352,13 @@ CREATE VIEW v1 AS SELECT LTRIM(my_varchar_1000),
my_varchar_1000, id FROM t1_values;
SELECT LTRIM(my_varchar_1000),
my_varchar_1000, id FROM t1_values
-WHERE select_id = 186 OR select_id IS NULL order by id;
+WHERE select_id = 189 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 189 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -364,13 +366,13 @@ CREATE VIEW v1 AS SELECT LTRIM(my_char_30),
my_char_30, id FROM t1_values;
SELECT LTRIM(my_char_30),
my_char_30, id FROM t1_values
-WHERE select_id = 185 OR select_id IS NULL order by id;
+WHERE select_id = 188 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 188 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -378,13 +380,13 @@ CREATE VIEW v1 AS SELECT LOWER(my_varbinary_1000),
my_varbinary_1000, id FROM t1_values;
SELECT LOWER(my_varbinary_1000),
my_varbinary_1000, id FROM t1_values
-WHERE select_id = 184 OR select_id IS NULL order by id;
+WHERE select_id = 187 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 187 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -392,13 +394,13 @@ CREATE VIEW v1 AS SELECT LOWER(my_binary_30),
my_binary_30, id FROM t1_values;
SELECT LOWER(my_binary_30),
my_binary_30, id FROM t1_values
-WHERE select_id = 183 OR select_id IS NULL order by id;
+WHERE select_id = 186 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 186 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -406,13 +408,13 @@ CREATE VIEW v1 AS SELECT LOWER(my_varchar_1000),
my_varchar_1000, id FROM t1_values;
SELECT LOWER(my_varchar_1000),
my_varchar_1000, id FROM t1_values
-WHERE select_id = 182 OR select_id IS NULL order by id;
+WHERE select_id = 185 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 185 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -420,13 +422,13 @@ CREATE VIEW v1 AS SELECT LOWER(my_char_30),
my_char_30, id FROM t1_values;
SELECT LOWER(my_char_30),
my_char_30, id FROM t1_values
-WHERE select_id = 181 OR select_id IS NULL order by id;
+WHERE select_id = 184 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 184 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -434,13 +436,13 @@ CREATE VIEW v1 AS SELECT LOCATE('-', ' - -ABC', my_decimal),
my_decimal, id FROM t1_values;
SELECT LOCATE('-', ' - -ABC', my_decimal),
my_decimal, id FROM t1_values
-WHERE select_id = 180 OR select_id IS NULL order by id;
+WHERE select_id = 183 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 183 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -448,13 +450,13 @@ CREATE VIEW v1 AS SELECT LOCATE('-', ' - -ABC', my_double),
my_double, id FROM t1_values;
SELECT LOCATE('-', ' - -ABC', my_double),
my_double, id FROM t1_values
-WHERE select_id = 179 OR select_id IS NULL order by id;
+WHERE select_id = 182 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 182 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -462,13 +464,13 @@ CREATE VIEW v1 AS SELECT LOCATE('-', ' - -ABC', my_bigint),
my_bigint, id FROM t1_values;
SELECT LOCATE('-', ' - -ABC', my_bigint),
my_bigint, id FROM t1_values
-WHERE select_id = 178 OR select_id IS NULL order by id;
+WHERE select_id = 181 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 181 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -476,13 +478,13 @@ CREATE VIEW v1 AS SELECT LOCATE('-', my_varbinary_1000, 3),
my_varbinary_1000, id FROM t1_values;
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;
+WHERE select_id = 180 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 180 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -490,13 +492,13 @@ CREATE VIEW v1 AS SELECT LOCATE('-', my_binary_30, 3),
my_binary_30, id FROM t1_values;
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;
+WHERE select_id = 179 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 179 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -504,13 +506,13 @@ CREATE VIEW v1 AS SELECT LOCATE('-', my_varchar_1000, 3),
my_varchar_1000, id FROM t1_values;
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;
+WHERE select_id = 178 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 178 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -518,13 +520,13 @@ CREATE VIEW v1 AS SELECT LOCATE('-', my_char_30, 3),
my_char_30, id FROM t1_values;
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;
+WHERE select_id = 177 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 177 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -532,13 +534,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_varbinary_1000, my_binary_30 ),
my_varbinary_1000, my_binary_30 id FROM t1_values;
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;
+WHERE select_id = 176 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 176 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -546,13 +548,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_varbinary_1000, my_varchar_1000 ),
my_varbinary_1000, my_varchar_1000 id FROM t1_values;
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;
+WHERE select_id = 175 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 175 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -560,13 +562,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_varbinary_1000, my_char_30 ),
my_varbinary_1000, my_char_30 id FROM t1_values;
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;
+WHERE select_id = 174 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 174 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -574,13 +576,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_varbinary_1000, my_varbinary_1000 ),
my_varbinary_1000, id FROM t1_values;
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;
+WHERE select_id = 173 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 173 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -588,13 +590,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_binary_30, my_varbinary_1000 ),
my_binary_30, my_varbinary_1000 id FROM t1_values;
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;
+WHERE select_id = 172 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 172 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -602,13 +604,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_binary_30, my_varchar_1000 ),
my_binary_30, my_varchar_1000 id FROM t1_values;
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;
+WHERE select_id = 171 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 171 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -616,13 +618,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_binary_30, my_char_30 ),
my_binary_30, my_char_30 id FROM t1_values;
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;
+WHERE select_id = 170 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 170 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -630,13 +632,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_binary_30, my_binary_30 ),
my_binary_30, id FROM t1_values;
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;
+WHERE select_id = 169 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 169 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -644,13 +646,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_varchar_1000, my_varbinary_1000 ),
my_varchar_1000, my_varbinary_1000 id FROM t1_values;
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;
+WHERE select_id = 168 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 168 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -658,13 +660,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_varchar_1000, my_binary_30 ),
my_varchar_1000, my_binary_30 id FROM t1_values;
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;
+WHERE select_id = 167 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 167 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -672,13 +674,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_varchar_1000, my_char_30 ),
my_varchar_1000, my_char_30 id FROM t1_values;
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;
+WHERE select_id = 166 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 166 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -686,13 +688,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_varchar_1000, my_varchar_1000 ),
my_varchar_1000, id FROM t1_values;
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;
+WHERE select_id = 165 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 165 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -700,13 +702,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_char_30, my_varbinary_1000 ),
my_char_30, my_varbinary_1000 id FROM t1_values;
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;
+WHERE select_id = 164 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 164 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -714,13 +716,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_char_30, my_binary_30 ),
my_char_30, my_binary_30 id FROM t1_values;
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;
+WHERE select_id = 163 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 163 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -728,13 +730,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_char_30, my_varchar_1000 ),
my_char_30, my_varchar_1000 id FROM t1_values;
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;
+WHERE select_id = 162 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 162 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -742,13 +744,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_char_30, my_char_30 ),
my_char_30, id FROM t1_values;
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;
+WHERE select_id = 161 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 161 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -756,13 +758,13 @@ CREATE VIEW v1 AS SELECT LOCATE('char', my_varbinary_1000),
my_varbinary_1000, id FROM t1_values;
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;
+WHERE select_id = 160 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 160 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -770,13 +772,13 @@ CREATE VIEW v1 AS SELECT LOCATE('char', my_binary_30),
my_binary_30, id FROM t1_values;
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;
+WHERE select_id = 159 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 159 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -784,13 +786,13 @@ CREATE VIEW v1 AS SELECT LOCATE('char', my_varchar_1000),
my_varchar_1000, id FROM t1_values;
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;
+WHERE select_id = 158 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 158 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -798,19 +800,19 @@ CREATE VIEW v1 AS SELECT LOCATE('char', my_char_30),
my_char_30, id FROM t1_values;
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;
+WHERE select_id = 157 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 157 OR select_id IS NULL) order by id;
DROP VIEW v1;
CREATE VIEW v1 AS SELECT LOAD_FILE('../tmp/func_view.dat'), id FROM t1_values;
SELECT LOAD_FILE('../tmp/func_view.dat'), id FROM t1_values
-WHERE select_id = 153 OR select_id IS NULL order by id;
+WHERE select_id = 156 OR select_id IS NULL order by id;
LOAD_FILE('../tmp/func_view.dat') id
äÄ@
1
@@ -827,7 +829,7 @@ 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;
+WHERE select_id = 156 OR select_id IS NULL) order by id;
LOAD_FILE('../tmp/func_view.dat') id
äÄ@
1
@@ -846,13 +848,13 @@ CREATE VIEW v1 AS SELECT LENGTH(my_varbinary_1000),
my_varbinary_1000, id FROM t1_values;
SELECT LENGTH(my_varbinary_1000),
my_varbinary_1000, id FROM t1_values
-WHERE select_id = 152 OR select_id IS NULL order by id;
+WHERE select_id = 155 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 155 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -860,13 +862,13 @@ CREATE VIEW v1 AS SELECT LENGTH(my_binary_30),
my_binary_30, id FROM t1_values;
SELECT LENGTH(my_binary_30),
my_binary_30, id FROM t1_values
-WHERE select_id = 151 OR select_id IS NULL order by id;
+WHERE select_id = 154 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 154 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -874,13 +876,13 @@ CREATE VIEW v1 AS SELECT LENGTH(my_varchar_1000),
my_varchar_1000, id FROM t1_values;
SELECT LENGTH(my_varchar_1000),
my_varchar_1000, id FROM t1_values
-WHERE select_id = 150 OR select_id IS NULL order by id;
+WHERE select_id = 153 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 153 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -888,19 +890,49 @@ CREATE VIEW v1 AS SELECT LENGTH(my_char_30),
my_char_30, id FROM t1_values;
SELECT LENGTH(my_char_30),
my_char_30, id FROM t1_values
-WHERE select_id = 149 OR select_id IS NULL order by id;
+WHERE select_id = 152 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 152 OR select_id IS NULL) order by id;
+DROP VIEW v1;
+
+
+CREATE VIEW v1 AS SELECT LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_double), my_double, id FROM t1_values;
+SELECT LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_double), my_double, id FROM t1_values
+WHERE select_id = 151 OR select_id IS NULL order by id;
+LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_double) my_double id
+NULL NULL 1
+ -1.7976931348623e+308 2
+AaBbCcDdEeFfGgHhIiJjÄäÜüÖö 1.7976931348623e+308 3
+ 0 4
+ -1 5
+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 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_double`) AS `LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', 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 = 151 OR select_id IS NULL) order by id;
+LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_double) my_double id
+NULL NULL 1
+ -1.7976931348623e+308 2
+AaBbCcDdEeFfGgHhIiJjÄäÜüÖö 1.7976931348623e+308 3
+ 0 4
+ -1 5
+Warnings:
+Warning 1292 Truncated incorrect INTEGER value: '-1.7976931348623e+308'
+Warning 1292 Truncated incorrect INTEGER value: '1.7976931348623e+308'
DROP VIEW v1;
CREATE VIEW v1 AS SELECT LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_decimal), my_decimal, id FROM t1_values;
SELECT LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_decimal), my_decimal, id FROM t1_values
-WHERE select_id = 148 OR select_id IS NULL order by id;
+WHERE select_id = 150 OR select_id IS NULL order by id;
LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_decimal) my_decimal id
NULL NULL 1
-9999999999999999999999999999999999.999999999999999999999999999999 2
@@ -915,7 +947,7 @@ 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;
+WHERE select_id = 150 OR select_id IS NULL) order by id;
LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_decimal) my_decimal id
NULL NULL 1
-9999999999999999999999999999999999.999999999999999999999999999999 2
@@ -928,9 +960,33 @@ Error 1292 Truncated incorrect DECIMAL value: ''
DROP VIEW v1;
+CREATE VIEW v1 AS SELECT LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_bigint), my_bigint, id FROM t1_values;
+SELECT LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_bigint), my_bigint, id FROM t1_values
+WHERE select_id = 149 OR select_id IS NULL order by id;
+LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_bigint) my_bigint id
+NULL NULL 1
+ -9223372036854775808 2
+AaBbCcDdEeFfGgHhIiJjÄäÜüÖö 9223372036854775807 3
+ 0 4
+ -1 5
+SHOW CREATE VIEW v1;
+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_bigint`) AS `LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', 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 = 149 OR select_id IS NULL) order by id;
+LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_bigint) my_bigint id
+NULL NULL 1
+ -9223372036854775808 2
+AaBbCcDdEeFfGgHhIiJjÄäÜüÖö 9223372036854775807 3
+ 0 4
+ -1 5
+DROP VIEW v1;
+
+
CREATE VIEW v1 AS SELECT LEFT(my_varbinary_1000, 2), my_varbinary_1000, id FROM t1_values;
SELECT LEFT(my_varbinary_1000, 2), my_varbinary_1000, id FROM t1_values
-WHERE select_id = 147 OR select_id IS NULL order by id;
+WHERE select_id = 148 OR select_id IS NULL order by id;
LEFT(my_varbinary_1000, 2) my_varbinary_1000 id
NULL NULL 1
2
@@ -942,7 +998,7 @@ 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;
+WHERE select_id = 148 OR select_id IS NULL) order by id;
LEFT(my_varbinary_1000, 2) my_varbinary_1000 id
NULL NULL 1
2
@@ -954,7 +1010,7 @@ DROP VIEW v1;
CREATE VIEW v1 AS SELECT LEFT(my_binary_30, 2), my_binary_30, id FROM t1_values;
SELECT LEFT(my_binary_30, 2), my_binary_30, id FROM t1_values
-WHERE select_id = 146 OR select_id IS NULL order by id;
+WHERE select_id = 147 OR select_id IS NULL order by id;
LEFT(my_binary_30, 2) my_binary_30 id
NULL NULL 1
@@ -966,7 +1022,7 @@ 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;
+WHERE select_id = 147 OR select_id IS NULL) order by id;
LEFT(my_binary_30, 2) my_binary_30 id
NULL NULL 1
@@ -978,7 +1034,7 @@ DROP VIEW v1;
CREATE VIEW v1 AS SELECT LEFT(my_varchar_1000, 2), my_varchar_1000, id FROM t1_values;
SELECT LEFT(my_varchar_1000, 2), my_varchar_1000, id FROM t1_values
-WHERE select_id = 145 OR select_id IS NULL order by id;
+WHERE select_id = 146 OR select_id IS NULL order by id;
LEFT(my_varchar_1000, 2) my_varchar_1000 id
NULL NULL 1
2
@@ -990,7 +1046,7 @@ 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;
+WHERE select_id = 146 OR select_id IS NULL) order by id;
LEFT(my_varchar_1000, 2) my_varchar_1000 id
NULL NULL 1
2
@@ -1002,7 +1058,7 @@ DROP VIEW v1;
CREATE VIEW v1 AS SELECT LEFT(my_char_30, 2), my_char_30, id FROM t1_values;
SELECT LEFT(my_char_30, 2), my_char_30, id FROM t1_values
-WHERE select_id = 144 OR select_id IS NULL order by id;
+WHERE select_id = 145 OR select_id IS NULL order by id;
LEFT(my_char_30, 2) my_char_30 id
NULL NULL 1
2
@@ -1014,7 +1070,7 @@ 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;
+WHERE select_id = 145 OR select_id IS NULL) order by id;
LEFT(my_char_30, 2) my_char_30 id
NULL NULL 1
2
@@ -1028,13 +1084,13 @@ CREATE VIEW v1 AS SELECT LCASE(my_varchar_1000),
my_varchar_1000, id FROM t1_values;
SELECT LCASE(my_varchar_1000),
my_varchar_1000, id FROM t1_values
-WHERE select_id = 143 OR select_id IS NULL order by id;
+WHERE select_id = 144 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 144 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -1042,13 +1098,13 @@ CREATE VIEW v1 AS SELECT INSTR(my_char_30, 'char'),
my_char_30, id FROM t1_values;
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;
+WHERE select_id = 143 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 143 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -1056,7 +1112,7 @@ CREATE VIEW v1 AS SELECT BIT_LENGTH(my_varbinary_1000),
my_varbinary_1000, id FROM t1_values;
SELECT BIT_LENGTH(my_varbinary_1000),
my_varbinary_1000, id FROM t1_values
-WHERE select_id = 141 OR select_id IS NULL order by id;
+WHERE select_id = 142 OR select_id IS NULL order by id;
BIT_LENGTH(my_varbinary_1000) my_varbinary_1000 id
NULL NULL 1
0 2
@@ -1068,7 +1124,7 @@ 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;
+WHERE select_id = 142 OR select_id IS NULL) order by id;
BIT_LENGTH(my_varbinary_1000) my_varbinary_1000 id
NULL NULL 1
0 2
@@ -1082,7 +1138,7 @@ CREATE VIEW v1 AS SELECT BIT_LENGTH(my_binary_30),
my_binary_30, id FROM t1_values;
SELECT BIT_LENGTH(my_binary_30),
my_binary_30, id FROM t1_values
-WHERE select_id = 140 OR select_id IS NULL order by id;
+WHERE select_id = 141 OR select_id IS NULL order by id;
BIT_LENGTH(my_binary_30) my_binary_30 id
NULL NULL 1
240
@@ -1094,7 +1150,7 @@ 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;
+WHERE select_id = 141 OR select_id IS NULL) order by id;
BIT_LENGTH(my_binary_30) my_binary_30 id
NULL NULL 1
240
@@ -1108,7 +1164,7 @@ CREATE VIEW v1 AS SELECT BIT_LENGTH(my_varchar_1000),
my_varchar_1000, id FROM t1_values;
SELECT BIT_LENGTH(my_varchar_1000),
my_varchar_1000, id FROM t1_values
-WHERE select_id = 139 OR select_id IS NULL order by id;
+WHERE select_id = 140 OR select_id IS NULL order by id;
BIT_LENGTH(my_varchar_1000) my_varchar_1000 id
NULL NULL 1
0 2
@@ -1120,7 +1176,7 @@ 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;
+WHERE select_id = 140 OR select_id IS NULL) order by id;
BIT_LENGTH(my_varchar_1000) my_varchar_1000 id
NULL NULL 1
0 2
@@ -1134,7 +1190,7 @@ CREATE VIEW v1 AS SELECT BIT_LENGTH(my_char_30),
my_char_30, id FROM t1_values;
SELECT BIT_LENGTH(my_char_30),
my_char_30, id FROM t1_values
-WHERE select_id = 138 OR select_id IS NULL order by id;
+WHERE select_id = 139 OR select_id IS NULL order by id;
BIT_LENGTH(my_char_30) my_char_30 id
NULL NULL 1
0 2
@@ -1146,7 +1202,7 @@ 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;
+WHERE select_id = 139 OR select_id IS NULL) order by id;
BIT_LENGTH(my_char_30) my_char_30 id
NULL NULL 1
0 2
@@ -1160,7 +1216,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_year,'IS_NULL'),
my_year, id FROM t1_values;
SELECT IFNULL(my_year,'IS_NULL'),
my_year, id FROM t1_values
-WHERE select_id = 137 OR select_id IS NULL order by id;
+WHERE select_id = 138 OR select_id IS NULL order by id;
IFNULL(my_year,'IS_NULL') my_year id
IS_NULL NULL 1
1901 1901 2
@@ -1172,7 +1228,7 @@ 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;
+WHERE select_id = 138 OR select_id IS NULL) order by id;
IFNULL(my_year,'IS_NULL') my_year id
IS_NULL NULL 1
1901 1901 2
@@ -1186,7 +1242,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_time,'IS_NULL'),
my_time, id FROM t1_values;
SELECT IFNULL(my_time,'IS_NULL'),
my_time, id FROM t1_values
-WHERE select_id = 136 OR select_id IS NULL order by id;
+WHERE select_id = 137 OR select_id IS NULL order by id;
IFNULL(my_time,'IS_NULL') my_time id
IS_NULL NULL 1
-838:59:59 -838:59:59 2
@@ -1198,7 +1254,7 @@ 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;
+WHERE select_id = 137 OR select_id IS NULL) order by id;
IFNULL(my_time,'IS_NULL') my_time id
IS_NULL NULL 1
-838:59:59 -838:59:59 2
@@ -1212,7 +1268,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_timestamp,'IS_NULL'),
my_timestamp, id FROM t1_values;
SELECT IFNULL(my_timestamp,'IS_NULL'),
my_timestamp, id FROM t1_values
-WHERE select_id = 135 OR select_id IS NULL order by id;
+WHERE select_id = 136 OR select_id IS NULL order by id;
IFNULL(my_timestamp,'IS_NULL') my_timestamp id
0000-00-00 00:00:00 0000-00-00 00:00:00 1
1970-01-01 03:00:01 1970-01-01 03:00:01 2
@@ -1224,7 +1280,7 @@ 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;
+WHERE select_id = 136 OR select_id IS NULL) order by id;
IFNULL(my_timestamp,'IS_NULL') my_timestamp id
0000-00-00 00:00:00 0000-00-00 00:00:00 1
1970-01-01 03:00:01 1970-01-01 03:00:01 2
@@ -1238,7 +1294,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_date,'IS_NULL'),
my_date, id FROM t1_values;
SELECT IFNULL(my_date,'IS_NULL'),
my_date, id FROM t1_values
-WHERE select_id = 134 OR select_id IS NULL order by id;
+WHERE select_id = 135 OR select_id IS NULL order by id;
IFNULL(my_date,'IS_NULL') my_date id
IS_NULL NULL 1
0001-01-01 0001-01-01 2
@@ -1250,7 +1306,7 @@ 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;
+WHERE select_id = 135 OR select_id IS NULL) order by id;
IFNULL(my_date,'IS_NULL') my_date id
IS_NULL NULL 1
0001-01-01 0001-01-01 2
@@ -1264,7 +1320,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_datetime,'IS_NULL'),
my_datetime, id FROM t1_values;
SELECT IFNULL(my_datetime,'IS_NULL'),
my_datetime, id FROM t1_values
-WHERE select_id = 133 OR select_id IS NULL order by id;
+WHERE select_id = 134 OR select_id IS NULL order by id;
IFNULL(my_datetime,'IS_NULL') my_datetime id
IS_NULL NULL 1
0001-01-01 00:00:00 0001-01-01 00:00:00 2
@@ -1276,7 +1332,7 @@ 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;
+WHERE select_id = 134 OR select_id IS NULL) order by id;
IFNULL(my_datetime,'IS_NULL') my_datetime id
IS_NULL NULL 1
0001-01-01 00:00:00 0001-01-01 00:00:00 2
@@ -1290,7 +1346,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_double,'IS_NULL'),
my_double, id FROM t1_values;
SELECT IFNULL(my_double,'IS_NULL'),
my_double, id FROM t1_values
-WHERE select_id = 132 OR select_id IS NULL order by id;
+WHERE select_id = 133 OR select_id IS NULL order by id;
IFNULL(my_double,'IS_NULL') my_double id
IS_NULL NULL 1
-1.7976931348623e+308 -1.7976931348623e+308 2
@@ -1302,7 +1358,7 @@ 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;
+WHERE select_id = 133 OR select_id IS NULL) order by id;
IFNULL(my_double,'IS_NULL') my_double id
IS_NULL NULL 1
-1.7976931348623e+308 -1.7976931348623e+308 2
@@ -1316,7 +1372,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_decimal,'IS_NULL'),
my_decimal, id FROM t1_values;
SELECT IFNULL(my_decimal,'IS_NULL'),
my_decimal, id FROM t1_values
-WHERE select_id = 131 OR select_id IS NULL order by id;
+WHERE select_id = 132 OR select_id IS NULL order by id;
IFNULL(my_decimal,'IS_NULL') my_decimal id
IS_NULL NULL 1
-9999999999999999999999999999999999.999999999999999999999999999999 -9999999999999999999999999999999999.999999999999999999999999999999 2
@@ -1328,7 +1384,7 @@ 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;
+WHERE select_id = 132 OR select_id IS NULL) order by id;
IFNULL(my_decimal,'IS_NULL') my_decimal id
IS_NULL NULL 1
-9999999999999999999999999999999999.999999999999999999999999999999 -9999999999999999999999999999999999.999999999999999999999999999999 2
@@ -1342,7 +1398,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_bigint,'IS_NULL'),
my_bigint, id FROM t1_values;
SELECT IFNULL(my_bigint,'IS_NULL'),
my_bigint, id FROM t1_values
-WHERE select_id = 130 OR select_id IS NULL order by id;
+WHERE select_id = 131 OR select_id IS NULL order by id;
IFNULL(my_bigint,'IS_NULL') my_bigint id
IS_NULL NULL 1
-9223372036854775808 -9223372036854775808 2
@@ -1354,7 +1410,7 @@ 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;
+WHERE select_id = 131 OR select_id IS NULL) order by id;
IFNULL(my_bigint,'IS_NULL') my_bigint id
IS_NULL NULL 1
-9223372036854775808 -9223372036854775808 2
@@ -1368,7 +1424,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_varbinary_1000,'IS_NULL'),
my_varbinary_1000, id FROM t1_values;
SELECT IFNULL(my_varbinary_1000,'IS_NULL'),
my_varbinary_1000, id FROM t1_values
-WHERE select_id = 129 OR select_id IS NULL order by id;
+WHERE select_id = 130 OR select_id IS NULL order by id;
IFNULL(my_varbinary_1000,'IS_NULL') my_varbinary_1000 id
IS_NULL NULL 1
2
@@ -1380,7 +1436,7 @@ 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;
+WHERE select_id = 130 OR select_id IS NULL) order by id;
IFNULL(my_varbinary_1000,'IS_NULL') my_varbinary_1000 id
IS_NULL NULL 1
2
@@ -1394,7 +1450,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_binary_30,'IS_NULL'),
my_binary_30, id FROM t1_values;
SELECT IFNULL(my_binary_30,'IS_NULL'),
my_binary_30, id FROM t1_values
-WHERE select_id = 128 OR select_id IS NULL order by id;
+WHERE select_id = 129 OR select_id IS NULL order by id;
IFNULL(my_binary_30,'IS_NULL') my_binary_30 id
IS_NULL NULL 1
@@ -1406,7 +1462,7 @@ 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;
+WHERE select_id = 129 OR select_id IS NULL) order by id;
IFNULL(my_binary_30,'IS_NULL') my_binary_30 id
IS_NULL NULL 1
@@ -1420,7 +1476,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_varchar_1000,'IS_NULL'),
my_varchar_1000, id FROM t1_values;
SELECT IFNULL(my_varchar_1000,'IS_NULL'),
my_varchar_1000, id FROM t1_values
-WHERE select_id = 127 OR select_id IS NULL order by id;
+WHERE select_id = 128 OR select_id IS NULL order by id;
IFNULL(my_varchar_1000,'IS_NULL') my_varchar_1000 id
IS_NULL NULL 1
2
@@ -1432,7 +1488,7 @@ 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;
+WHERE select_id = 128 OR select_id IS NULL) order by id;
IFNULL(my_varchar_1000,'IS_NULL') my_varchar_1000 id
IS_NULL NULL 1
2
@@ -1446,7 +1502,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_char_30,'IS_NULL'),
my_char_30, id FROM t1_values;
SELECT IFNULL(my_char_30,'IS_NULL'),
my_char_30, id FROM t1_values
-WHERE select_id = 126 OR select_id IS NULL order by id;
+WHERE select_id = 127 OR select_id IS NULL order by id;
IFNULL(my_char_30,'IS_NULL') my_char_30 id
IS_NULL NULL 1
2
@@ -1458,7 +1514,7 @@ 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;
+WHERE select_id = 127 OR select_id IS NULL) order by id;
IFNULL(my_char_30,'IS_NULL') my_char_30 id
IS_NULL NULL 1
2
@@ -1472,7 +1528,7 @@ CREATE VIEW v1 AS SELECT IF(my_year IS NULL, 'IS NULL',
'IS NOT NULL'), my_year, id FROM t1_values;
SELECT IF(my_year IS NULL, 'IS NULL',
'IS NOT NULL'), my_year, id FROM t1_values
-WHERE select_id = 125 OR select_id IS NULL order by id;
+WHERE select_id = 126 OR select_id IS NULL order by id;
IF(my_year IS NULL, 'IS NULL',
'IS NOT NULL') my_year id
IS NULL NULL 1
@@ -1486,7 +1542,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 126 OR select_id IS NULL) order by id;
IF(my_year IS NULL, 'IS NULL',
'IS NOT NULL') my_year id
IS NULL NULL 1
@@ -1501,7 +1557,7 @@ CREATE VIEW v1 AS SELECT IF(my_time IS NULL, 'IS NULL',
'IS NOT NULL'), my_time, id FROM t1_values;
SELECT IF(my_time IS NULL, 'IS NULL',
'IS NOT NULL'), my_time, id FROM t1_values
-WHERE select_id = 124 OR select_id IS NULL order by id;
+WHERE select_id = 125 OR select_id IS NULL order by id;
IF(my_time IS NULL, 'IS NULL',
'IS NOT NULL') my_time id
IS NULL NULL 1
@@ -1515,7 +1571,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 125 OR select_id IS NULL) order by id;
IF(my_time IS NULL, 'IS NULL',
'IS NOT NULL') my_time id
IS NULL NULL 1
@@ -1530,7 +1586,7 @@ CREATE VIEW v1 AS SELECT IF(my_timestamp IS NULL, 'IS NULL',
'IS NOT NULL'), my_timestamp, id FROM t1_values;
SELECT IF(my_timestamp IS NULL, 'IS NULL',
'IS NOT NULL'), my_timestamp, id FROM t1_values
-WHERE select_id = 123 OR select_id IS NULL order by id;
+WHERE select_id = 124 OR select_id IS NULL order by id;
IF(my_timestamp IS NULL, 'IS NULL',
'IS NOT NULL') my_timestamp id
IS NOT NULL 0000-00-00 00:00:00 1
@@ -1544,7 +1600,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 124 OR select_id IS NULL) order by id;
IF(my_timestamp IS NULL, 'IS NULL',
'IS NOT NULL') my_timestamp id
IS NOT NULL 0000-00-00 00:00:00 1
@@ -1559,7 +1615,7 @@ CREATE VIEW v1 AS SELECT IF(my_date IS NULL, 'IS NULL',
'IS NOT NULL'), my_date, id FROM t1_values;
SELECT IF(my_date IS NULL, 'IS NULL',
'IS NOT NULL'), my_date, id FROM t1_values
-WHERE select_id = 122 OR select_id IS NULL order by id;
+WHERE select_id = 123 OR select_id IS NULL order by id;
IF(my_date IS NULL, 'IS NULL',
'IS NOT NULL') my_date id
IS NULL NULL 1
@@ -1573,7 +1629,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 123 OR select_id IS NULL) order by id;
IF(my_date IS NULL, 'IS NULL',
'IS NOT NULL') my_date id
IS NULL NULL 1
@@ -1588,7 +1644,7 @@ CREATE VIEW v1 AS SELECT IF(my_datetime IS NULL, 'IS NULL',
'IS NOT NULL'), my_datetime, id FROM t1_values;
SELECT IF(my_datetime IS NULL, 'IS NULL',
'IS NOT NULL'), my_datetime, id FROM t1_values
-WHERE select_id = 121 OR select_id IS NULL order by id;
+WHERE select_id = 122 OR select_id IS NULL order by id;
IF(my_datetime IS NULL, 'IS NULL',
'IS NOT NULL') my_datetime id
IS NULL NULL 1
@@ -1602,7 +1658,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 122 OR select_id IS NULL) order by id;
IF(my_datetime IS NULL, 'IS NULL',
'IS NOT NULL') my_datetime id
IS NULL NULL 1
@@ -1617,7 +1673,7 @@ CREATE VIEW v1 AS SELECT IF(my_double IS NULL, 'IS NULL',
'IS NOT NULL'), my_double, id FROM t1_values;
SELECT IF(my_double IS NULL, 'IS NULL',
'IS NOT NULL'), my_double, id FROM t1_values
-WHERE select_id = 120 OR select_id IS NULL order by id;
+WHERE select_id = 121 OR select_id IS NULL order by id;
IF(my_double IS NULL, 'IS NULL',
'IS NOT NULL') my_double id
IS NULL NULL 1
@@ -1631,7 +1687,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 121 OR select_id IS NULL) order by id;
IF(my_double IS NULL, 'IS NULL',
'IS NOT NULL') my_double id
IS NULL NULL 1
@@ -1646,7 +1702,7 @@ CREATE VIEW v1 AS SELECT IF(my_decimal IS NULL, 'IS NULL',
'IS NOT NULL'), my_decimal, id FROM t1_values;
SELECT IF(my_decimal IS NULL, 'IS NULL',
'IS NOT NULL'), my_decimal, id FROM t1_values
-WHERE select_id = 119 OR select_id IS NULL order by id;
+WHERE select_id = 120 OR select_id IS NULL order by id;
IF(my_decimal IS NULL, 'IS NULL',
'IS NOT NULL') my_decimal id
IS NULL NULL 1
@@ -1660,7 +1716,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 120 OR select_id IS NULL) order by id;
IF(my_decimal IS NULL, 'IS NULL',
'IS NOT NULL') my_decimal id
IS NULL NULL 1
@@ -1675,7 +1731,7 @@ CREATE VIEW v1 AS SELECT IF(my_bigint IS NULL, 'IS NULL',
'IS NOT NULL'), my_bigint, id FROM t1_values;
SELECT IF(my_bigint IS NULL, 'IS NULL',
'IS NOT NULL'), my_bigint, id FROM t1_values
-WHERE select_id = 118 OR select_id IS NULL order by id;
+WHERE select_id = 119 OR select_id IS NULL order by id;
IF(my_bigint IS NULL, 'IS NULL',
'IS NOT NULL') my_bigint id
IS NULL NULL 1
@@ -1689,7 +1745,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 119 OR select_id IS NULL) order by id;
IF(my_bigint IS NULL, 'IS NULL',
'IS NOT NULL') my_bigint id
IS NULL NULL 1
@@ -1704,7 +1760,7 @@ CREATE VIEW v1 AS SELECT IF(my_varbinary_1000 IS NULL, 'IS NULL',
'IS NOT NULL'), my_varbinary_1000, id FROM t1_values;
SELECT IF(my_varbinary_1000 IS NULL, 'IS NULL',
'IS NOT NULL'), my_varbinary_1000, id FROM t1_values
-WHERE select_id = 117 OR select_id IS NULL order by id;
+WHERE select_id = 118 OR select_id IS NULL order by id;
IF(my_varbinary_1000 IS NULL, 'IS NULL',
'IS NOT NULL') my_varbinary_1000 id
IS NULL NULL 1
@@ -1718,7 +1774,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 118 OR select_id IS NULL) order by id;
IF(my_varbinary_1000 IS NULL, 'IS NULL',
'IS NOT NULL') my_varbinary_1000 id
IS NULL NULL 1
@@ -1733,7 +1789,7 @@ CREATE VIEW v1 AS SELECT IF(my_binary_30 IS NULL, 'IS NULL',
'IS NOT NULL'), my_binary_30, id FROM t1_values;
SELECT IF(my_binary_30 IS NULL, 'IS NULL',
'IS NOT NULL'), my_binary_30, id FROM t1_values
-WHERE select_id = 116 OR select_id IS NULL order by id;
+WHERE select_id = 117 OR select_id IS NULL order by id;
IF(my_binary_30 IS NULL, 'IS NULL',
'IS NOT NULL') my_binary_30 id
IS NULL NULL 1
@@ -1747,7 +1803,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 117 OR select_id IS NULL) order by id;
IF(my_binary_30 IS NULL, 'IS NULL',
'IS NOT NULL') my_binary_30 id
IS NULL NULL 1
@@ -1762,7 +1818,7 @@ CREATE VIEW v1 AS SELECT IF(my_varchar_1000 IS NULL, 'IS NULL',
'IS NOT NULL'), my_varchar_1000, id FROM t1_values;
SELECT IF(my_varchar_1000 IS NULL, 'IS NULL',
'IS NOT NULL'), my_varchar_1000, id FROM t1_values
-WHERE select_id = 115 OR select_id IS NULL order by id;
+WHERE select_id = 116 OR select_id IS NULL order by id;
IF(my_varchar_1000 IS NULL, 'IS NULL',
'IS NOT NULL') my_varchar_1000 id
IS NULL NULL 1
@@ -1776,7 +1832,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 116 OR select_id IS NULL) order by id;
IF(my_varchar_1000 IS NULL, 'IS NULL',
'IS NOT NULL') my_varchar_1000 id
IS NULL NULL 1
@@ -1791,7 +1847,7 @@ CREATE VIEW v1 AS SELECT IF(my_char_30 IS NULL, 'IS NULL',
'IS NOT NULL'), my_char_30, id FROM t1_values;
SELECT IF(my_char_30 IS NULL, 'IS NULL',
'IS NOT NULL'), my_char_30, id FROM t1_values
-WHERE select_id = 114 OR select_id IS NULL order by id;
+WHERE select_id = 115 OR select_id IS NULL order by id;
IF(my_char_30 IS NULL, 'IS NULL',
'IS NOT NULL') my_char_30 id
IS NULL NULL 1
@@ -1805,7 +1861,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 115 OR select_id IS NULL) order by id;
IF(my_char_30 IS NULL, 'IS NULL',
'IS NOT NULL') my_char_30 id
IS NULL NULL 1
@@ -1820,7 +1876,7 @@ CREATE VIEW v1 AS SELECT IF(my_year, 'IS TRUE', 'IS NOT TRUE'),
my_year, id FROM t1_values;
SELECT IF(my_year, 'IS TRUE', 'IS NOT TRUE'),
my_year, id FROM t1_values
-WHERE select_id = 113 OR select_id IS NULL order by id;
+WHERE select_id = 114 OR select_id IS NULL order by id;
IF(my_year, 'IS TRUE', 'IS NOT TRUE') my_year id
IS NOT TRUE NULL 1
IS TRUE 1901 2
@@ -1832,7 +1888,7 @@ 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;
+WHERE select_id = 114 OR select_id IS NULL) order by id;
IF(my_year, 'IS TRUE', 'IS NOT TRUE') my_year id
IS NOT TRUE NULL 1
IS TRUE 1901 2
@@ -1846,7 +1902,7 @@ CREATE VIEW v1 AS SELECT IF(my_time, 'IS TRUE', 'IS NOT TRUE'),
my_time, id FROM t1_values;
SELECT IF(my_time, 'IS TRUE', 'IS NOT TRUE'),
my_time, id FROM t1_values
-WHERE select_id = 112 OR select_id IS NULL order by id;
+WHERE select_id = 113 OR select_id IS NULL order by id;
IF(my_time, 'IS TRUE', 'IS NOT TRUE') my_time id
IS NOT TRUE NULL 1
IS TRUE -838:59:59 2
@@ -1858,7 +1914,7 @@ 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;
+WHERE select_id = 113 OR select_id IS NULL) order by id;
IF(my_time, 'IS TRUE', 'IS NOT TRUE') my_time id
IS NOT TRUE NULL 1
IS TRUE -838:59:59 2
@@ -1872,7 +1928,7 @@ CREATE VIEW v1 AS SELECT IF(my_timestamp, 'IS TRUE', 'IS NOT TRUE'),
my_timestamp, id FROM t1_values;
SELECT IF(my_timestamp, 'IS TRUE', 'IS NOT TRUE'),
my_timestamp, id FROM t1_values
-WHERE select_id = 111 OR select_id IS NULL order by id;
+WHERE select_id = 112 OR select_id IS NULL order by id;
IF(my_timestamp, 'IS TRUE', 'IS NOT TRUE') my_timestamp id
IS NOT TRUE 0000-00-00 00:00:00 1
IS TRUE 1970-01-01 03:00:01 2
@@ -1884,7 +1940,7 @@ 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;
+WHERE select_id = 112 OR select_id IS NULL) order by id;
IF(my_timestamp, 'IS TRUE', 'IS NOT TRUE') my_timestamp id
IS NOT TRUE 0000-00-00 00:00:00 1
IS TRUE 1970-01-01 03:00:01 2
@@ -1898,7 +1954,7 @@ CREATE VIEW v1 AS SELECT IF(my_date, 'IS TRUE', 'IS NOT TRUE'),
my_date, id FROM t1_values;
SELECT IF(my_date, 'IS TRUE', 'IS NOT TRUE'),
my_date, id FROM t1_values
-WHERE select_id = 110 OR select_id IS NULL order by id;
+WHERE select_id = 111 OR select_id IS NULL order by id;
IF(my_date, 'IS TRUE', 'IS NOT TRUE') my_date id
IS NOT TRUE NULL 1
IS TRUE 0001-01-01 2
@@ -1910,7 +1966,7 @@ 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;
+WHERE select_id = 111 OR select_id IS NULL) order by id;
IF(my_date, 'IS TRUE', 'IS NOT TRUE') my_date id
IS NOT TRUE NULL 1
IS TRUE 0001-01-01 2
@@ -1924,7 +1980,7 @@ CREATE VIEW v1 AS SELECT IF(my_datetime, 'IS TRUE', 'IS NOT TRUE'),
my_datetime, id FROM t1_values;
SELECT IF(my_datetime, 'IS TRUE', 'IS NOT TRUE'),
my_datetime, id FROM t1_values
-WHERE select_id = 109 OR select_id IS NULL order by id;
+WHERE select_id = 110 OR select_id IS NULL order by id;
IF(my_datetime, 'IS TRUE', 'IS NOT TRUE') my_datetime id
IS NOT TRUE NULL 1
IS TRUE 0001-01-01 00:00:00 2
@@ -1936,7 +1992,7 @@ 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;
+WHERE select_id = 110 OR select_id IS NULL) order by id;
IF(my_datetime, 'IS TRUE', 'IS NOT TRUE') my_datetime id
IS NOT TRUE NULL 1
IS TRUE 0001-01-01 00:00:00 2
@@ -1950,7 +2006,7 @@ CREATE VIEW v1 AS SELECT IF(my_double, 'IS TRUE', 'IS NOT TRUE'),
my_double, id FROM t1_values;
SELECT IF(my_double, 'IS TRUE', 'IS NOT TRUE'),
my_double, id FROM t1_values
-WHERE select_id = 108 OR select_id IS NULL order by id;
+WHERE select_id = 109 OR select_id IS NULL order by id;
IF(my_double, 'IS TRUE', 'IS NOT TRUE') my_double id
IS NOT TRUE NULL 1
IS TRUE -1.7976931348623e+308 2
@@ -1962,7 +2018,7 @@ 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;
+WHERE select_id = 109 OR select_id IS NULL) order by id;
IF(my_double, 'IS TRUE', 'IS NOT TRUE') my_double id
IS NOT TRUE NULL 1
IS TRUE -1.7976931348623e+308 2
@@ -1976,7 +2032,7 @@ CREATE VIEW v1 AS SELECT IF(my_decimal, 'IS TRUE', 'IS NOT TRUE'),
my_decimal, id FROM t1_values;
SELECT IF(my_decimal, 'IS TRUE', 'IS NOT TRUE'),
my_decimal, id FROM t1_values
-WHERE select_id = 107 OR select_id IS NULL order by id;
+WHERE select_id = 108 OR select_id IS NULL order by id;
IF(my_decimal, 'IS TRUE', 'IS NOT TRUE') my_decimal id
IS NOT TRUE NULL 1
IS TRUE -9999999999999999999999999999999999.999999999999999999999999999999 2
@@ -1988,7 +2044,7 @@ 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;
+WHERE select_id = 108 OR select_id IS NULL) order by id;
IF(my_decimal, 'IS TRUE', 'IS NOT TRUE') my_decimal id
IS NOT TRUE NULL 1
IS TRUE -9999999999999999999999999999999999.999999999999999999999999999999 2
@@ -2002,7 +2058,7 @@ CREATE VIEW v1 AS SELECT IF(my_bigint, 'IS TRUE', 'IS NOT TRUE'),
my_bigint, id FROM t1_values;
SELECT IF(my_bigint, 'IS TRUE', 'IS NOT TRUE'),
my_bigint, id FROM t1_values
-WHERE select_id = 106 OR select_id IS NULL order by id;
+WHERE select_id = 107 OR select_id IS NULL order by id;
IF(my_bigint, 'IS TRUE', 'IS NOT TRUE') my_bigint id
IS NOT TRUE NULL 1
IS TRUE -9223372036854775808 2
@@ -2014,7 +2070,7 @@ 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;
+WHERE select_id = 107 OR select_id IS NULL) order by id;
IF(my_bigint, 'IS TRUE', 'IS NOT TRUE') my_bigint id
IS NOT TRUE NULL 1
IS TRUE -9223372036854775808 2
@@ -2028,7 +2084,7 @@ CREATE VIEW v1 AS SELECT IF(my_varbinary_1000, 'IS TRUE', 'IS NOT TRUE'),
my_varbinary_1000, id FROM t1_values;
SELECT IF(my_varbinary_1000, 'IS TRUE', 'IS NOT TRUE'),
my_varbinary_1000, id FROM t1_values
-WHERE select_id = 105 OR select_id IS NULL order by id;
+WHERE select_id = 106 OR select_id IS NULL order by id;
IF(my_varbinary_1000, 'IS TRUE', 'IS NOT TRUE') my_varbinary_1000 id
IS NOT TRUE NULL 1
IS NOT TRUE 2
@@ -2040,7 +2096,7 @@ 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;
+WHERE select_id = 106 OR select_id IS NULL) order by id;
IF(my_varbinary_1000, 'IS TRUE', 'IS NOT TRUE') my_varbinary_1000 id
IS NOT TRUE NULL 1
IS NOT TRUE 2
@@ -2054,7 +2110,7 @@ CREATE VIEW v1 AS SELECT IF(my_binary_30, 'IS TRUE', 'IS NOT TRUE'),
my_binary_30, id FROM t1_values;
SELECT IF(my_binary_30, 'IS TRUE', 'IS NOT TRUE'),
my_binary_30, id FROM t1_values
-WHERE select_id = 104 OR select_id IS NULL order by id;
+WHERE select_id = 105 OR select_id IS NULL order by id;
IF(my_binary_30, 'IS TRUE', 'IS NOT TRUE') my_binary_30 id
IS NOT TRUE NULL 1
IS NOT TRUE
@@ -2071,7 +2127,7 @@ 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;
+WHERE select_id = 105 OR select_id IS NULL) order by id;
IF(my_binary_30, 'IS TRUE', 'IS NOT TRUE') my_binary_30 id
IS NOT TRUE NULL 1
IS NOT TRUE
@@ -2090,7 +2146,7 @@ CREATE VIEW v1 AS SELECT IF(my_varchar_1000, 'IS TRUE', 'IS NOT TRUE'),
my_varchar_1000, id FROM t1_values;
SELECT IF(my_varchar_1000, 'IS TRUE', 'IS NOT TRUE'),
my_varchar_1000, id FROM t1_values
-WHERE select_id = 103 OR select_id IS NULL order by id;
+WHERE select_id = 104 OR select_id IS NULL order by id;
IF(my_varchar_1000, 'IS TRUE', 'IS NOT TRUE') my_varchar_1000 id
IS NOT TRUE NULL 1
IS NOT TRUE 2
@@ -2102,7 +2158,7 @@ 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;
+WHERE select_id = 104 OR select_id IS NULL) order by id;
IF(my_varchar_1000, 'IS TRUE', 'IS NOT TRUE') my_varchar_1000 id
IS NOT TRUE NULL 1
IS NOT TRUE 2
@@ -2116,7 +2172,7 @@ CREATE VIEW v1 AS SELECT IF(my_char_30, 'IS TRUE', 'IS NOT TRUE'),
my_char_30, id FROM t1_values;
SELECT IF(my_char_30, 'IS TRUE', 'IS NOT TRUE'),
my_char_30, id FROM t1_values
-WHERE select_id = 102 OR select_id IS NULL order by id;
+WHERE select_id = 103 OR select_id IS NULL order by id;
IF(my_char_30, 'IS TRUE', 'IS NOT TRUE') my_char_30 id
IS NOT TRUE NULL 1
IS NOT TRUE 2
@@ -2131,7 +2187,7 @@ 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;
+WHERE select_id = 103 OR select_id IS NULL) order by id;
IF(my_char_30, 'IS TRUE', 'IS NOT TRUE') my_char_30 id
IS NOT TRUE NULL 1
IS NOT TRUE 2
@@ -2148,7 +2204,7 @@ CREATE VIEW v1 AS SELECT CONVERT(my_varbinary_1000 USING koi8r),
my_varbinary_1000, id FROM t1_values;
SELECT CONVERT(my_varbinary_1000 USING koi8r),
my_varbinary_1000, id FROM t1_values
-WHERE select_id = 101 OR select_id IS NULL order by id;
+WHERE select_id = 102 OR select_id IS NULL order by id;
CONVERT(my_varbinary_1000 USING koi8r) my_varbinary_1000 id
NULL NULL 1
2
@@ -2160,7 +2216,7 @@ 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;
+WHERE select_id = 102 OR select_id IS NULL) order by id;
CONVERT(my_varbinary_1000 USING koi8r) my_varbinary_1000 id
NULL NULL 1
2
@@ -2174,7 +2230,7 @@ CREATE VIEW v1 AS SELECT CONVERT(my_binary_30 USING koi8r),
my_binary_30, id FROM t1_values;
SELECT CONVERT(my_binary_30 USING koi8r),
my_binary_30, id FROM t1_values
-WHERE select_id = 100 OR select_id IS NULL order by id;
+WHERE select_id = 101 OR select_id IS NULL order by id;
CONVERT(my_binary_30 USING koi8r) my_binary_30 id
NULL NULL 1
@@ -2186,7 +2242,7 @@ 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;
+WHERE select_id = 101 OR select_id IS NULL) order by id;
CONVERT(my_binary_30 USING koi8r) my_binary_30 id
NULL NULL 1
@@ -2200,7 +2256,7 @@ CREATE VIEW v1 AS SELECT CONVERT(my_varchar_1000 USING koi8r),
my_varchar_1000, id FROM t1_values;
SELECT CONVERT(my_varchar_1000 USING koi8r),
my_varchar_1000, id FROM t1_values
-WHERE select_id = 99 OR select_id IS NULL order by id;
+WHERE select_id = 100 OR select_id IS NULL order by id;
CONVERT(my_varchar_1000 USING koi8r) my_varchar_1000 id
NULL NULL 1
2
@@ -2212,7 +2268,7 @@ 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;
+WHERE select_id = 100 OR select_id IS NULL) order by id;
CONVERT(my_varchar_1000 USING koi8r) my_varchar_1000 id
NULL NULL 1
2
@@ -2226,7 +2282,7 @@ CREATE VIEW v1 AS SELECT CONVERT(my_char_30 USING koi8r),
my_char_30, id FROM t1_values;
SELECT CONVERT(my_char_30 USING koi8r),
my_char_30, id FROM t1_values
-WHERE select_id = 98 OR select_id IS NULL order by id;
+WHERE select_id = 99 OR select_id IS NULL order by id;
CONVERT(my_char_30 USING koi8r) my_char_30 id
NULL NULL 1
2
@@ -2238,7 +2294,7 @@ 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;
+WHERE select_id = 99 OR select_id IS NULL) order by id;
CONVERT(my_char_30 USING koi8r) my_char_30 id
NULL NULL 1
2
@@ -2252,7 +2308,7 @@ CREATE VIEW v1 AS SELECT CONVERT(my_varbinary_1000 USING utf8),
my_varbinary_1000, id FROM t1_values;
SELECT CONVERT(my_varbinary_1000 USING utf8),
my_varbinary_1000, id FROM t1_values
-WHERE select_id = 97 OR select_id IS NULL order by id;
+WHERE select_id = 98 OR select_id IS NULL order by id;
CONVERT(my_varbinary_1000 USING utf8) my_varbinary_1000 id
NULL NULL 1
2
@@ -2264,7 +2320,7 @@ 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;
+WHERE select_id = 98 OR select_id IS NULL) order by id;
CONVERT(my_varbinary_1000 USING utf8) my_varbinary_1000 id
NULL NULL 1
2
@@ -2278,7 +2334,7 @@ CREATE VIEW v1 AS SELECT CONVERT(my_binary_30 USING utf8),
my_binary_30, id FROM t1_values;
SELECT CONVERT(my_binary_30 USING utf8),
my_binary_30, id FROM t1_values
-WHERE select_id = 96 OR select_id IS NULL order by id;
+WHERE select_id = 97 OR select_id IS NULL order by id;
CONVERT(my_binary_30 USING utf8) my_binary_30 id
NULL NULL 1
@@ -2290,7 +2346,7 @@ 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;
+WHERE select_id = 97 OR select_id IS NULL) order by id;
CONVERT(my_binary_30 USING utf8) my_binary_30 id
NULL NULL 1
@@ -2304,7 +2360,7 @@ CREATE VIEW v1 AS SELECT CONVERT(my_varchar_1000 USING utf8),
my_varchar_1000, id FROM t1_values;
SELECT CONVERT(my_varchar_1000 USING utf8),
my_varchar_1000, id FROM t1_values
-WHERE select_id = 95 OR select_id IS NULL order by id;
+WHERE select_id = 96 OR select_id IS NULL order by id;
CONVERT(my_varchar_1000 USING utf8) my_varchar_1000 id
NULL NULL 1
2
@@ -2316,7 +2372,7 @@ 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;
+WHERE select_id = 96 OR select_id IS NULL) order by id;
CONVERT(my_varchar_1000 USING utf8) my_varchar_1000 id
NULL NULL 1
2
@@ -2330,7 +2386,7 @@ CREATE VIEW v1 AS SELECT CONVERT(my_char_30 USING utf8),
my_char_30, id FROM t1_values;
SELECT CONVERT(my_char_30 USING utf8),
my_char_30, id FROM t1_values
-WHERE select_id = 94 OR select_id IS NULL order by id;
+WHERE select_id = 95 OR select_id IS NULL order by id;
CONVERT(my_char_30 USING utf8) my_char_30 id
NULL NULL 1
2
@@ -2342,7 +2398,7 @@ 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;
+WHERE select_id = 95 OR select_id IS NULL) order by id;
CONVERT(my_char_30 USING utf8) my_char_30 id
NULL NULL 1
2
@@ -2356,7 +2412,7 @@ CREATE VIEW v1 AS SELECT CAST(my_year AS UNSIGNED INTEGER),
my_year, id FROM t1_values;
SELECT CAST(my_year AS UNSIGNED INTEGER),
my_year, id FROM t1_values
-WHERE select_id = 93 OR select_id IS NULL order by id;
+WHERE select_id = 94 OR select_id IS NULL order by id;
CAST(my_year AS UNSIGNED INTEGER) my_year id
NULL NULL 1
1901 1901 2
@@ -2368,7 +2424,7 @@ 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;
+WHERE select_id = 94 OR select_id IS NULL) order by id;
CAST(my_year AS UNSIGNED INTEGER) my_year id
NULL NULL 1
1901 1901 2
@@ -2382,7 +2438,7 @@ CREATE VIEW v1 AS SELECT CAST(my_time AS UNSIGNED INTEGER),
my_time, id FROM t1_values;
SELECT CAST(my_time AS UNSIGNED INTEGER),
my_time, id FROM t1_values
-WHERE select_id = 92 OR select_id IS NULL order by id;
+WHERE select_id = 93 OR select_id IS NULL order by id;
CAST(my_time AS UNSIGNED INTEGER) my_time id
NULL NULL 1
18446744073701165657 -838:59:59 2
@@ -2394,7 +2450,7 @@ 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;
+WHERE select_id = 93 OR select_id IS NULL) order by id;
CAST(my_time AS UNSIGNED INTEGER) my_time id
NULL NULL 1
18446744073701165657 -838:59:59 2
@@ -2408,7 +2464,7 @@ CREATE VIEW v1 AS SELECT CAST(my_timestamp AS UNSIGNED INTEGER),
my_timestamp, id FROM t1_values;
SELECT CAST(my_timestamp AS UNSIGNED INTEGER),
my_timestamp, id FROM t1_values
-WHERE select_id = 91 OR select_id IS NULL order by id;
+WHERE select_id = 92 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
19700101030001 1970-01-01 03:00:01 2
@@ -2420,7 +2476,7 @@ 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;
+WHERE select_id = 92 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
19700101030001 1970-01-01 03:00:01 2
@@ -2434,7 +2490,7 @@ CREATE VIEW v1 AS SELECT CAST(my_date AS UNSIGNED INTEGER),
my_date, id FROM t1_values;
SELECT CAST(my_date AS UNSIGNED INTEGER),
my_date, id FROM t1_values
-WHERE select_id = 90 OR select_id IS NULL order by id;
+WHERE select_id = 91 OR select_id IS NULL order by id;
CAST(my_date AS UNSIGNED INTEGER) my_date id
NULL NULL 1
10101 0001-01-01 2
@@ -2446,7 +2502,7 @@ 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;
+WHERE select_id = 91 OR select_id IS NULL) order by id;
CAST(my_date AS UNSIGNED INTEGER) my_date id
NULL NULL 1
10101 0001-01-01 2
@@ -2460,7 +2516,7 @@ CREATE VIEW v1 AS SELECT CAST(my_datetime AS UNSIGNED INTEGER),
my_datetime, id FROM t1_values;
SELECT CAST(my_datetime AS UNSIGNED INTEGER),
my_datetime, id FROM t1_values
-WHERE select_id = 89 OR select_id IS NULL order by id;
+WHERE select_id = 90 OR select_id IS NULL order by id;
CAST(my_datetime AS UNSIGNED INTEGER) my_datetime id
NULL NULL 1
10101000000 0001-01-01 00:00:00 2
@@ -2472,7 +2528,7 @@ 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;
+WHERE select_id = 90 OR select_id IS NULL) order by id;
CAST(my_datetime AS UNSIGNED INTEGER) my_datetime id
NULL NULL 1
10101000000 0001-01-01 00:00:00 2
@@ -2482,6 +2538,38 @@ NULL NULL 1
DROP VIEW v1;
+CREATE VIEW v1 AS SELECT CAST(my_double AS UNSIGNED INTEGER),
+my_double, id FROM t1_values;
+SELECT CAST(my_double AS UNSIGNED INTEGER),
+my_double, id FROM t1_values
+WHERE select_id = 89 OR select_id IS NULL order by id;
+CAST(my_double AS UNSIGNED INTEGER) my_double id
+NULL NULL 1
+9223372036854775808 -1.7976931348623e+308 2
+9223372036854775807 1.7976931348623e+308 3
+0 0 4
+18446744073709551615 -1 5
+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 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 unsigned) AS `CAST(my_double AS UNSIGNED 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 = 89 OR select_id IS NULL) order by id;
+CAST(my_double AS UNSIGNED INTEGER) my_double id
+NULL NULL 1
+9223372036854775808 -1.7976931348623e+308 2
+9223372036854775807 1.7976931348623e+308 3
+0 0 4
+18446744073709551615 -1 5
+Warnings:
+Warning 1292 Truncated incorrect INTEGER value: '-1.7976931348623e+308'
+Warning 1292 Truncated incorrect INTEGER value: '1.7976931348623e+308'
+DROP VIEW v1;
+
+
CREATE VIEW v1 AS SELECT CAST(my_decimal AS UNSIGNED INTEGER),
my_decimal, id FROM t1_values;
SELECT CAST(my_decimal AS UNSIGNED INTEGER),
diff --git a/mysql-test/suite/funcs_1/r/myisam_storedproc.result b/mysql-test/suite/funcs_1/r/myisam_storedproc.result
index b52f0dbbbf0..629f275dd4a 100644
--- a/mysql-test/suite/funcs_1/r/myisam_storedproc.result
+++ b/mysql-test/suite/funcs_1/r/myisam_storedproc.result
@@ -1,29 +1,4 @@
-.
-. IMPORTANT NOTICE:
-. -----------------
-.
-. FIXME: The .result files are still NOT CHECKED for correctness!
-.
-. FIXME: Several tests are affected by known problems around DECIMAL
-. FIXME: and NUMERIC that will be checked again after WL#2984 once
-. FIXME: has been completed. Some of them are marked in the result.
-.
-. Currently (Dec 06, 2005) this .result file is checked OK for Linux
-. with 5.0.17-bk (ChangeSet@1.1975.1.2, 2005-12-05 18:33:48+01:00).
-. Using the available Windows version 5.0.16 there are differences
-. that can be ignored (e.g. WL#2984).
-.
---------------------------------------------------------------------------------
- FIXME: There are subtests that are switched off due to known bugs:
- ------------------------------------------------------------------
-WL#2984: DECIMAL and NUMERIC problems with differences on some machines
-0
-
-There are some statements where the ps-protocol is switched off.
-Bug#11589: mysqltest, --ps-protocol, strange output, float/double/real with zerofill
---------------------------------------------------------------------------------
-
--source suite/funcs_1/storedproc/load_sp_tb.inc
--------------------------------------------------------------------------------
SET @@global.max_heap_table_size=4294967295;
@@ -94,23 +69,24 @@ CREATE PROCEDURE
--------------------------------------------------------------------------------
USE db_storedproc;
DROP PROCEDURE IF EXISTS sp1_thisisaveryverylongname234872934_thisisaveryverylongname234872934;
+ERROR 42000: Identifier name 'sp1_thisisaveryverylongname234872934_thisisaveryverylongname234872934' is too long
CREATE PROCEDURE sp1_thisisaveryverylongname234872934_thisisaveryverylongname234872934 (f1 char(20) )
SELECT * from t1 where f2 = f1;
+ERROR 42000: Identifier name 'sp1_thisisaveryverylongname234872934_thisisaveryverylongname234872934' is too long
CALL sp1_thisisaveryverylongname234872934_thisisaveryverylongname234872934('aaaa');
-f1 f2 f3 f4 f5 f6
+ERROR 42000: Identifier name 'sp1_thisisaveryverylongname234872934_thisisaveryverylongname234872934' is too long
DROP PROCEDURE IF EXISTS sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcde;
+ERROR 42000: Identifier name 'sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcde' is too long
CREATE PROCEDURE sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcde( f1 tinytext ) language sql deterministic sql security definer comment 'this is simple'
BEGIN
set @v1 = f1;
SELECT @v1, @v1;
END//
+ERROR 42000: Identifier name 'sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcde' is too long
CALL sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcde( 'abc' );
-@v1 @v1
-abc abc
+ERROR 42000: Identifier name 'sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcde' is too long
SHOW PROCEDURE status;
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongname2348 PROCEDURE root@localhost modified created DEFINER
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcd PROCEDURE root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 binary ) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
@@ -119,12 +95,12 @@ SELECT @v1;
END//
CALL sp1( 34 );
@v1
-34
+3
+Warnings:
+Warning 1265 Data truncated for column 'f1' at row 1
SHOW PROCEDURE status;
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongname2348 PROCEDURE root@localhost modified created DEFINER
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcd PROCEDURE root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 blob ) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
@@ -135,10 +111,8 @@ CALL sp1( 34 );
@v1
34
SHOW PROCEDURE status;
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongname2348 PROCEDURE root@localhost modified created DEFINER
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcd PROCEDURE root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 int ) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
@@ -149,25 +123,27 @@ CALL sp1( 34 );
@v1
34
SHOW PROCEDURE status;
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongname2348 PROCEDURE root@localhost modified created DEFINER
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcd PROCEDURE root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed: SP definition accepted with m>60 in DECIMAL(m,n)
CREATE PROCEDURE sp1( f1 decimal(256, 30) ) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
set @v1 = f1;
SELECT @v1;
END//
+ERROR 42000: Too big precision 256 specified for column ''. Maximum is 65.
DROP PROCEDURE IF EXISTS sp1//
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( f1 decimal(66, 30) ) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
set @v1 = f1;
SELECT @v1;
END//
+ERROR 42000: Too big precision 66 specified for column ''. Maximum is 65.
DROP PROCEDURE IF EXISTS sp1//
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( f1 decimal(60, 30) ) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
set @v1 = f1;
@@ -175,101 +151,1123 @@ SELECT @v1;
END//
CALL sp1( 17976931340000 );
@v1
-17976931340000
+17976931340000.000000000000000000000000000000
+CALL sp1( 1.797693134e+13 );
+@v1
+17976931340000.000000000000000000000000000000
+CALL sp1( 1.7976931348623157493578e+308 );
+ERROR 22007: Illegal double '1.7976931348623157493578e+308' value found during parsing
+CALL sp1( 0.1234567890987654321e+100 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-100 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+99 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-99 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+98 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-98 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+97 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-97 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+96 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-96 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+95 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-95 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+94 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-94 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+93 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-93 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+92 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-92 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+91 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-91 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+90 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-90 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+89 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-89 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+88 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-88 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+87 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-87 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+86 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-86 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+85 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-85 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+84 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-84 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+83 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-83 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+82 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-82 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+81 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-81 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+80 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-80 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+79 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-79 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+78 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-78 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+77 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-77 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+76 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-76 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+75 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-75 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+74 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-74 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+73 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-73 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+72 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-72 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+71 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-71 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+70 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-70 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+69 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-69 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+68 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-68 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+67 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-67 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+66 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-66 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+65 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-65 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+64 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-64 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+63 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-63 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+62 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-62 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+61 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-61 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+60 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-60 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+59 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-59 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+58 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-58 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+57 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-57 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+56 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-56 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+55 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-55 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+54 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-54 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+53 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-53 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+52 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-52 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+51 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-51 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+50 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-50 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+49 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-49 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+48 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-48 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+47 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-47 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+46 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-46 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+45 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-45 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+44 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-44 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+43 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-43 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+42 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-42 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+41 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-41 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+40 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-40 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+39 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-39 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+38 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-38 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+37 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-37 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+36 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-36 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+35 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-35 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+34 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-34 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+33 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-33 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+32 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-32 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+31 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-31 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+30 );
+@v1
+123456789098765400000000000000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-30 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+29 );
+@v1
+12345678909876540000000000000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-29 );
+@v1
+0.000000000000000000000000000001
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+28 );
+@v1
+1234567890987654000000000000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-28 );
+@v1
+0.000000000000000000000000000012
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+27 );
+@v1
+123456789098765400000000000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-27 );
+@v1
+0.000000000000000000000000000123
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+26 );
+@v1
+12345678909876540000000000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-26 );
+@v1
+0.000000000000000000000000001235
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+25 );
+@v1
+1234567890987654000000000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-25 );
+@v1
+0.000000000000000000000000012346
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+24 );
+@v1
+123456789098765400000000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-24 );
+@v1
+0.000000000000000000000000123457
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+23 );
+@v1
+12345678909876540000000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-23 );
+@v1
+0.000000000000000000000001234568
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+22 );
+@v1
+1234567890987654000000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-22 );
+@v1
+0.000000000000000000000012345679
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+21 );
+@v1
+123456789098765400000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-21 );
+@v1
+0.000000000000000000000123456789
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+20 );
+@v1
+12345678909876540000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-20 );
+@v1
+0.000000000000000000001234567891
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+19 );
+@v1
+1234567890987654000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-19 );
+@v1
+0.000000000000000000012345678910
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+18 );
+@v1
+123456789098765400.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-18 );
+@v1
+0.000000000000000000123456789099
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+17 );
+@v1
+12345678909876540.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-17 );
+@v1
+0.000000000000000001234567890988
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+16 );
+@v1
+1234567890987654.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-16 );
+@v1
+0.000000000000000012345678909877
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+15 );
+@v1
+123456789098765.400000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-15 );
+@v1
+0.000000000000000123456789098765
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+14 );
+@v1
+12345678909876.540000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-14 );
+@v1
+0.000000000000001234567890987654
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+13 );
+@v1
+1234567890987.654000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-13 );
+@v1
+0.000000000000012345678909876540
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+12 );
+@v1
+123456789098.765400000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-12 );
+@v1
+0.000000000000123456789098765400
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+11 );
+@v1
+12345678909.876540000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-11 );
+@v1
+0.000000000001234567890987654000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+10 );
+@v1
+1234567890.987654000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-10 );
+@v1
+0.000000000012345678909876540000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+9 );
+@v1
+123456789.098765400000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-9 );
+@v1
+0.000000000123456789098765400000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+8 );
+@v1
+12345678.909876540000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-8 );
+@v1
+0.000000001234567890987654000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+7 );
+@v1
+1234567.890987654000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-7 );
+@v1
+0.000000012345678909876540000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+6 );
+@v1
+123456.789098765400000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-6 );
+@v1
+0.000000123456789098765400000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+5 );
+@v1
+12345.678909876540000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-5 );
+@v1
+0.000001234567890987654000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+4 );
+@v1
+1234.567890987654000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-4 );
+@v1
+0.000012345678909876550000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+3 );
+@v1
+123.456789098765400000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-3 );
+@v1
+0.000123456789098765400000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+2 );
+@v1
+12.345678909876540000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-2 );
+@v1
+0.001234567890987654000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+1 );
+@v1
+1.234567890987654000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-1 );
+@v1
+0.012345678909876540000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+0 );
+@v1
+0.123456789098765400000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-0 );
+@v1
+0.123456789098765400000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
SHOW PROCEDURE status;
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongname2348 PROCEDURE root@localhost modified created DEFINER
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcd PROCEDURE root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 enum("value1", "value1") ) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
SELECT f1;
END//
+Warnings:
+Note 1291 Column '' has duplicated value 'value1' in ENUM
CALL sp1( "value1" );
f1
value1
+Warnings:
+Note 1291 Column '' has duplicated value 'value1' in ENUM
SHOW PROCEDURE status;
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongname2348 PROCEDURE root@localhost modified created DEFINER
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcd PROCEDURE root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 set("value1", "value1") ) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
SELECT f1;
END//
+Warnings:
+Note 1291 Column '' has duplicated value 'value1' in SET
CALL sp1( "value1, value1" );
f1
-value1, value1
+value1
+Warnings:
+Note 1291 Column '' has duplicated value 'value1' in SET
+Warning 1265 Data truncated for column 'f1' at row 1
SHOW PROCEDURE status;
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongname2348 PROCEDURE root@localhost modified created DEFINER
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcd PROCEDURE root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 enum("value1", "value1") ) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
SELECT f1;
END//
+Warnings:
+Note 1291 Column '' has duplicated value 'value1' in ENUM
CALL sp1( "value1" );
f1
value1
+Warnings:
+Note 1291 Column '' has duplicated value 'value1' in ENUM
SHOW PROCEDURE status;
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongname2348 PROCEDURE root@localhost modified created DEFINER
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcd PROCEDURE root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 text ) language sql SELECT f1;
CALL sp1( 'abc' );
f1
abc
SHOW PROCEDURE status like 'sp1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 text ) deterministic SELECT f1;
CALL sp1( 'abc' );
f1
abc
SHOW PROCEDURE status like 'sp1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 text ) not deterministic SELECT f1;
CALL sp1( 'abc' );
f1
abc
SHOW PROCEDURE status like 'sp1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 text ) sql security definer SELECT f1;
CALL sp1( 'abc' );
f1
abc
SHOW PROCEDURE status like 'sp1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 text ) sql security invoker SELECT f1;
CALL sp1( 'abc' );
f1
abc
SHOW PROCEDURE status like 'sp1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 text ) comment 'this is simple' SELECT f1;
CALL sp1( 'abc' );
f1
abc
SHOW PROCEDURE status like 'sp1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created DEFINER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE sp1_thisisaveryverylongname234872934_thisisaveryverylongname234872934;
+ERROR 42000: Identifier name 'sp1_thisisaveryverylongname234872934_thisisaveryverylongname234872934' is too long
DROP PROCEDURE sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcde;
+ERROR 42000: Identifier name 'sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcde' is too long
DROP PROCEDURE sp1;
Testcase 4.1.2:
@@ -294,8 +1292,8 @@ SELECT fn1( ' world');
fn1( ' world')
hello world
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created DEFINER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1( f1 smallint ) returns smallint language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
@@ -306,8 +1304,8 @@ SELECT fn1( 126 );
fn1( 126 )
127
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created INVOKER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1( f1 decimal(63, 31) ) returns decimal(63, 31) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
@@ -326,34 +1324,34 @@ SELECT fn1( 1.3326e+8 );
fn1( 1.3326e+8 )
134260000.000000000000000000000000000000
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created INVOKER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1( f1 enum("value1", "value1") ) returns decimal(63, 30) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
return f1;
END//
+Warnings:
+Note 1291 Column '' has duplicated value 'value1' in ENUM
SELECT fn1( "value1" );
fn1( "value1" )
-0.000000000000000000000000000000
-Warnings:
-Warning 1292 Truncated incorrect DECIMAL value: 'value1'
+1.000000000000000000000000000000
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created INVOKER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1( f1 set("value1", "value1") ) returns decimal(63, 30) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
return f1;
END//
+Warnings:
+Note 1291 Column '' has duplicated value 'value1' in SET
SELECT fn1( "value1, value1" );
fn1( "value1, value1" )
-0.000000000000000000000000000000
-Warnings:
-Warning 1292 Truncated incorrect DECIMAL value: 'value1, value1'
+1.000000000000000000000000000000
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created INVOKER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1( f1 smallint ) returns smallint language sql
BEGIN
@@ -364,8 +1362,8 @@ SELECT fn1( 126 );
fn1( 126 )
127
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1( f1 smallint ) returns smallint deterministic
BEGIN
@@ -376,8 +1374,8 @@ SELECT fn1( 126 );
fn1( 126 )
127
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1( f1 smallint ) returns smallint not deterministic
BEGIN
@@ -388,8 +1386,8 @@ SELECT fn1( 126 );
fn1( 126 )
127
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1( f1 smallint ) returns smallint
sql security definer
@@ -401,8 +1399,8 @@ SELECT fn1( 126 );
fn1( 126 )
127
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1( f1 smallint ) returns smallint
sql security invoker
@@ -414,8 +1412,8 @@ SELECT fn1( 126 );
fn1( 126 )
127
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created INVOKER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created INVOKER latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1( f1 smallint ) returns smallint
comment 'this is simple'
@@ -427,8 +1425,8 @@ SELECT fn1( 126 );
fn1( 126 )
127
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created DEFINER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION fn1;
Testcase 4.1.3:
@@ -440,9 +1438,9 @@ DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1 (f1 char(20) )
SELECT * from t1 where f2 = f1;
show CREATE PROCEDURE sp1;
-Procedure sql_mode Create Procedure
-sp1 CREATE PROCEDURE `sp1`(f1 char(20) )
-SELECT * from t1 where f2 = f1
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp1 CREATE DEFINER=`root`@`localhost` PROCEDURE `sp1`(f1 char(20) )
+SELECT * from t1 where f2 = f1 latin1 modified created
DROP PROCEDURE sp1;
Testcase 4.1.4:
@@ -453,9 +1451,9 @@ DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1 (s char(20)) returns char(50)
return concat('hello, ', s, '!');
show CREATE FUNCTION fn1;
-Function sql_mode Create Function
-fn1 CREATE FUNCTION `fn1`(s char(20)) RETURNS char(50)
-return concat('hello, ', s, '!')
+Function sql_mode Create Function character_set_client collation_connection Database Collation
+fn1 CREATE DEFINER=`root`@`localhost` FUNCTION `fn1`(s char(20)) RETURNS char(50) CHARSET latin1
+return concat('hello, ', s, '!') latin1 modified created
DROP FUNCTION fn1;
Testcase 4.1.5:
@@ -465,8 +1463,8 @@ SHOW PROCEDURE status
CREATE PROCEDURE sp5()
SELECT * from t1;
SHOW PROCEDURE status like 'sp5';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp5 PROCEDURE root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp5 PROCEDURE root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE sp5;
Testcase 4.1.6:
@@ -479,8 +1477,8 @@ set @b = 0.9 * a;
return @b;
END//
SHOW FUNCTION STATUS LIKE 'fn5';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn5 FUNCTION root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn5 FUNCTION root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION fn5;
Testcase 4.1.7:
@@ -498,7 +1496,7 @@ CREATE PROCEDURE sp7b (a char (20), out b char(20))
SELECT f1 into b from t1 where t1.f2= a;
CALL sp7b('xyz', @out_param);
Warnings:
-Warning 1329 No data to FETCH
+Warning 1329 No data - zero rows fetched, selected, or processed
SELECT @out_param;
@out_param
NULL
@@ -510,9 +1508,6 @@ SELECT f2 into c from t1 where t1.f2=999;
END//
set @c=1;
CALL sp7c('xyz', @out_param, @c);
-Warnings:
-Warning 1329 No data to FETCH
-Warning 1329 No data to FETCH
SELECT @out_param;
@out_param
NULL
@@ -539,48 +1534,48 @@ Testcase 4.1.9:
drop procedure
--------------------------------------------------------------------------------
SELECT * from mysql.proc where specific_name='sp9';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
DROP PROCEDURE IF EXISTS sp9;
SELECT * from mysql.proc where specific_name='sp9';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
CREATE PROCEDURE sp9()SELECT * from t1;
SELECT * from mysql.proc where specific_name='sp9';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
-db_storedproc sp9 PROCEDURE sp9 SQL CONTAINS_SQL NO DEFINER SELECT * from t1 root@localhost created modified
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
+db_storedproc sp9 PROCEDURE sp9 SQL CONTAINS_SQL NO DEFINER SELECT * from t1 root@localhost created modified latin1 latin1_swedish_ci latin1_swedish_ci SELECT * from t1
DROP PROCEDURE sp9;
SELECT * from mysql.proc where specific_name='sp9';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
CREATE PROCEDURE sp9()SELECT * from t1;
SELECT * from mysql.proc where specific_name='sp9';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
-db_storedproc sp9 PROCEDURE sp9 SQL CONTAINS_SQL NO DEFINER SELECT * from t1 root@localhost created modified
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
+db_storedproc sp9 PROCEDURE sp9 SQL CONTAINS_SQL NO DEFINER SELECT * from t1 root@localhost created modified latin1 latin1_swedish_ci latin1_swedish_ci SELECT * from t1
DROP PROCEDURE IF EXISTS sp9;
SELECT * from mysql.proc where specific_name='sp9';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
Testcase 4.1.10:
----------------
DROP FUNCTION
--------------------------------------------------------------------------------
SELECT * from mysql.proc where specific_name='fn10' and type='function';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
DROP FUNCTION IF EXISTS fn10;
SELECT * from mysql.proc where specific_name='fn10' and type='function';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
CREATE FUNCTION fn10() returns int return 100;
SELECT * from mysql.proc where specific_name='fn10' and type='function';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
-db_storedproc fn10 FUNCTION fn10 SQL CONTAINS_SQL NO DEFINER int(11) return 100 root@localhost created modified
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
+db_storedproc fn10 FUNCTION fn10 SQL CONTAINS_SQL NO DEFINER int(11) return 100 root@localhost created modified latin1 latin1_swedish_ci latin1_swedish_ci return 100
DROP FUNCTION fn10;
SELECT * from mysql.proc where specific_name='fn10' and type='function';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
CREATE FUNCTION fn10() returns int return 100;
SELECT * from mysql.proc where specific_name='fn10' and type='function';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
-db_storedproc fn10 FUNCTION fn10 SQL CONTAINS_SQL NO DEFINER int(11) return 100 root@localhost created modified
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
+db_storedproc fn10 FUNCTION fn10 SQL CONTAINS_SQL NO DEFINER int(11) return 100 root@localhost created modified latin1 latin1_swedish_ci latin1_swedish_ci return 100
DROP FUNCTION IF EXISTS fn10;
SELECT * from mysql.proc where specific_name='fn10' and type='function';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
Testcase 4.1.11:
----------------
@@ -604,6 +1599,7 @@ connect(localhost,user_1,,db_storedproc,MYSQL_PORT,MYSQL_SOCK);
user_1@localhost db_storedproc
CALL sp11();
+USE db_storedproc;
root@localhost db_storedproc
alter procedure sp11 sql security invoker;
@@ -612,6 +1608,7 @@ security_type
INVOKER
user_1@localhost db_storedproc
+USE db_storedproc;
CALL sp11();
ERROR 42000: INSERT command denied to user 'user_1'@'localhost' for table 't1'
commit work;
@@ -705,6 +1702,10 @@ SELECT * from t1 where f2 = f1' at line 1
CREATE PROCEDURE function()
SELECT * from t1 where f2=f1;
DROP PROCEDURE function;
+CREATE PROCEDURE accessible()
+SELECT * from t1 where f2=f1;
+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 'accessible()
+SELECT * from t1 where f2=f1' at line 1
CREATE PROCEDURE add()
SELECT * from t1 where f2=f1;
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 'add()
@@ -765,9 +1766,9 @@ CREATE PROCEDURE by()
SELECT * from t1 where f2=f1;
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 'by()
SELECT * from t1 where f2=f1' at line 1
-CREATE PROCEDURE CALL()
+CREATE PROCEDURE call()
SELECT * from t1 where f2=f1;
-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 'CALL()
+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 'call()
SELECT * from t1 where f2=f1' at line 1
CREATE PROCEDURE cascade()
SELECT * from t1 where f2=f1;
@@ -801,17 +1802,10 @@ CREATE PROCEDURE column()
SELECT * from t1 where f2=f1;
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 'column()
SELECT * from t1 where f2=f1' at line 1
-CREATE PROCEDURE columns()
-SELECT * from t1 where f2=f1;
-DROP PROCEDURE columns;
CREATE PROCEDURE condition()
SELECT * from t1 where f2=f1;
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 'condition()
SELECT * from t1 where f2=f1' at line 1
-CREATE PROCEDURE connection()
-SELECT * from t1 where f2=f1;
-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 'connection()
-SELECT * from t1 where f2=f1' at line 1
CREATE PROCEDURE constraint()
SELECT * from t1 where f2=f1;
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 'constraint()
@@ -995,9 +1989,6 @@ CREATE PROCEDURE foreign()
SELECT * from t1 where f2=f1;
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 'foreign()
SELECT * from t1 where f2=f1' at line 1
-CREATE PROCEDURE found()
-SELECT * from t1 where f2=f1;
-DROP PROCEDURE found;
CREATE PROCEDURE from()
SELECT * from t1 where f2=f1;
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 'from()
@@ -1006,9 +1997,6 @@ CREATE PROCEDURE fulltext()
SELECT * from t1 where f2=f1;
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 'fulltext()
SELECT * from t1 where f2=f1' at line 1
-CREATE PROCEDURE goto()
-SELECT * from t1 where f2=f1;
-DROP PROCEDURE goto;
CREATE PROCEDURE grant()
SELECT * from t1 where f2=f1;
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 'grant()
@@ -1077,6 +2065,26 @@ CREATE PROCEDURE int()
SELECT * from t1 where f2=f1;
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 'int()
SELECT * from t1 where f2=f1' at line 1
+CREATE PROCEDURE int1()
+SELECT * from t1 where f2=f1;
+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 'int1()
+SELECT * from t1 where f2=f1' at line 1
+CREATE PROCEDURE int2()
+SELECT * from t1 where f2=f1;
+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 'int2()
+SELECT * from t1 where f2=f1' at line 1
+CREATE PROCEDURE int3()
+SELECT * from t1 where f2=f1;
+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 'int3()
+SELECT * from t1 where f2=f1' at line 1
+CREATE PROCEDURE int4()
+SELECT * from t1 where f2=f1;
+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 'int4()
+SELECT * from t1 where f2=f1' at line 1
+CREATE PROCEDURE int8()
+SELECT * from t1 where f2=f1;
+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 'int8()
+SELECT * from t1 where f2=f1' at line 1
CREATE PROCEDURE integer()
SELECT * from t1 where f2=f1;
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 'integer()
@@ -1133,6 +2141,10 @@ CREATE PROCEDURE limit()
SELECT * from t1 where f2=f1;
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 'limit()
SELECT * from t1 where f2=f1' at line 1
+CREATE PROCEDURE linear()
+SELECT * from t1 where f2=f1;
+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 'linear()
+SELECT * from t1 where f2=f1' at line 1
CREATE PROCEDURE lines()
SELECT * from t1 where f2=f1;
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 'lines()
@@ -1173,6 +2185,10 @@ CREATE PROCEDURE low_priority()
SELECT * from t1 where f2=f1;
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 'low_priority()
SELECT * from t1 where f2=f1' at line 1
+CREATE PROCEDURE master_ssl_verify_server_cert()
+SELECT * from t1 where f2=f1;
+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 'master_ssl_verify_server_cert()
+SELECT * from t1 where f2=f1' at line 1
CREATE PROCEDURE match()
SELECT * from t1 where f2=f1;
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 'match()
@@ -1273,9 +2289,6 @@ CREATE PROCEDURE primary()
SELECT * from t1 where f2=f1;
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 'primary()
SELECT * from t1 where f2=f1' at line 1
-CREATE PROCEDURE privileges()
-SELECT * from t1 where f2=f1;
-DROP PROCEDURE privileges;
CREATE PROCEDURE procedure()
SELECT * from t1 where f2=f1;
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 'procedure()
@@ -1284,6 +2297,10 @@ CREATE PROCEDURE purge()
SELECT * from t1 where f2=f1;
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 'purge()
SELECT * from t1 where f2=f1' at line 1
+CREATE PROCEDURE range()
+SELECT * from t1 where f2=f1;
+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 'range()
+SELECT * from t1 where f2=f1' at line 1
CREATE PROCEDURE read()
SELECT * from t1 where f2=f1;
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 'read()
@@ -1304,6 +2321,10 @@ CREATE PROCEDURE regexp()
SELECT * from t1 where f2=f1;
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 'regexp()
SELECT * from t1 where f2=f1' at line 1
+CREATE PROCEDURE release()
+SELECT * from t1 where f2=f1;
+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 'release()
+SELECT * from t1 where f2=f1' at line 1
CREATE PROCEDURE rename()
SELECT * from t1 where f2=f1;
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 'rename()
@@ -1376,10 +2397,6 @@ CREATE PROCEDURE smallint()
SELECT * from t1 where f2=f1;
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 'smallint()
SELECT * from t1 where f2=f1' at line 1
-CREATE PROCEDURE soname()
-SELECT * from t1 where f2=f1;
-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 'soname()
-SELECT * from t1 where f2=f1' at line 1
CREATE PROCEDURE spatial()
SELECT * from t1 where f2=f1;
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 'spatial()
@@ -1432,9 +2449,6 @@ CREATE PROCEDURE table()
SELECT * from t1 where f2=f1;
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 'table()
SELECT * from t1 where f2=f1' at line 1
-CREATE PROCEDURE tables()
-SELECT * from t1 where f2=f1;
-DROP PROCEDURE tables;
CREATE PROCEDURE terminated()
SELECT * from t1 where f2=f1;
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 'terminated()
@@ -1725,6 +2739,26 @@ CREATE FUNCTION int(f1 int) returns int
return f1;
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 'int(f1 int) returns int
return f1' at line 1
+CREATE FUNCTION int1(f1 int1) returns int1
+return f1;
+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 'int1(f1 int1) returns int1
+return f1' at line 1
+CREATE FUNCTION int2(f1 int2) returns int2
+return f1;
+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 'int2(f1 int2) returns int2
+return f1' at line 1
+CREATE FUNCTION int3(f1 int3) returns int3
+return f1;
+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 'int3(f1 int3) returns int3
+return f1' at line 1
+CREATE FUNCTION int4(f1 int4) returns int4
+return f1;
+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 'int4(f1 int4) returns int4
+return f1' at line 1
+CREATE FUNCTION int8(f1 int8) returns int8
+return f1;
+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 'int8(f1 int8) returns int8
+return f1' at line 1
CREATE FUNCTION int unsigned(f1 int unsigned) returns int unsigned
return f1;
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 'int unsigned(f1 int unsigned) returns int unsigned
@@ -1846,485 +2880,291 @@ return f' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(char f1 ) returns char
+CREATE FUNCTION fn1(f1 char ) returns char
return f1;
-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 'char f1 ) returns char
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(char binary f1 ) returns char binary
+CREATE FUNCTION fn1(f1 char binary ) returns char binary
return f1;
-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 'char binary f1 ) returns char binary
-return f1' at line 1
+ERROR 42000: This version of MySQL doesn't yet support 'return value collation'
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(char ascii f1 ) returns char ascii
+CREATE FUNCTION fn1(f1 char ascii ) returns char ascii
return f1;
-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 'char ascii f1 ) returns char ascii
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(char not null f1 ) returns char not null
+CREATE FUNCTION fn1(f1 char not null ) returns char not null
return f1;
-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 'char not null f1 ) returns char not null
+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 'not null ) returns char not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(char binary not null f1 ) returns char binary not null
+CREATE FUNCTION fn1(f1 char binary not null ) returns char binary not null
return f1;
-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 'char binary not null f1 ) returns char binary not null
+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 'not null ) returns char binary not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(char ascii not null f1 ) returns char ascii not null
+CREATE FUNCTION fn1(f1 char ascii not null ) returns char ascii not null
return f1;
-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 'char ascii not null f1 ) returns char ascii not null
+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 'not null ) returns char ascii not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(tinytext f1 ) returns tinytext
+CREATE FUNCTION fn1(f1 tinytext ) returns tinytext
return f1;
-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 'tinytext f1 ) returns tinytext
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(text f1 ) returns text
+CREATE FUNCTION fn1(f1 text ) returns text
return f1;
-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 'f1 ) returns text
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(mediumtext f1 ) returns mediumtext
+CREATE FUNCTION fn1(f1 mediumtext ) returns mediumtext
return f1;
-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 'mediumtext f1 ) returns mediumtext
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(longtext f1 ) returns longtext
+CREATE FUNCTION fn1(f1 longtext ) returns longtext
return f1;
-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 'longtext f1 ) returns longtext
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(tinytext not null f1 ) returns tinytext not null
+CREATE FUNCTION fn1(f1 tinytext not null ) returns tinytext not null
return f1;
-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 'tinytext not null f1 ) returns tinytext not null
+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 'not null ) returns tinytext not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(text not null f1 ) returns text not null
+CREATE FUNCTION fn1(f1 text not null ) returns text not null
return f1;
-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 'not null f1 ) returns text not null
+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 'not null ) returns text not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(mediumtext not null f1 ) returns mediumtext not null
+CREATE FUNCTION fn1(f1 mediumtext not null ) returns mediumtext not null
return f1;
-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 'mediumtext not null f1 ) returns mediumtext not null
+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 'not null ) returns mediumtext not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(longtext not null f1 ) returns longtext not null
+CREATE FUNCTION fn1(f1 longtext not null ) returns longtext not null
return f1;
-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 'longtext not null f1 ) returns longtext not null
+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 'not null ) returns longtext not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(tinyblob f1 ) returns tinyblob
+CREATE FUNCTION fn1(f1 tinyblob ) returns tinyblob
return f1;
-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 'tinyblob f1 ) returns tinyblob
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(blob f1 ) returns blob
+CREATE FUNCTION fn1(f1 blob ) returns blob
return f1;
-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 'blob f1 ) returns blob
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(mediumblob f1 ) returns mediumblob
+CREATE FUNCTION fn1(f1 mediumblob ) returns mediumblob
return f1;
-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 'mediumblob f1 ) returns mediumblob
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(longblob f1 ) returns longblob
+CREATE FUNCTION fn1(f1 longblob ) returns longblob
return f1;
-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 'longblob f1 ) returns longblob
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(tinyblob not null f1 ) returns tinyblob not null
+CREATE FUNCTION fn1(f1 tinyblob not null ) returns tinyblob not null
return f1;
-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 'tinyblob not null f1 ) returns tinyblob not null
+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 'not null ) returns tinyblob not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(blob not null f1 ) returns blob not null
+CREATE FUNCTION fn1(f1 blob not null ) returns blob not null
return f1;
-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 'blob not null f1 ) returns blob not null
+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 'not null ) returns blob not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(mediumblob not null f1 ) returns mediumblob not null
+CREATE FUNCTION fn1(f1 mediumblob not null ) returns mediumblob not null
return f1;
-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 'mediumblob not null f1 ) returns mediumblob not null
+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 'not null ) returns mediumblob not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(longblob not null f1 ) returns longblob not null
+CREATE FUNCTION fn1(f1 longblob not null ) returns longblob not null
return f1;
-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 'longblob not null f1 ) returns longblob not null
+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 'not null ) returns longblob not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(binary f1 ) returns binary
+CREATE FUNCTION fn1(f1 binary ) returns binary
return f1;
-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 'binary f1 ) returns binary
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(binary not null f1 ) returns binary not null
+CREATE FUNCTION fn1(f1 binary not null ) returns binary not null
return f1;
-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 'binary not null f1 ) returns binary not null
+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 'not null ) returns binary not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(tinyint f1 ) returns tinyint
+CREATE FUNCTION fn1(f1 tinyint ) returns tinyint
return f1;
-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 'tinyint f1 ) returns tinyint
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(tinyint unsigned f1 ) returns tinyint unsigned
+CREATE FUNCTION fn1(f1 tinyint unsigned ) returns tinyint unsigned
return f1;
-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 'tinyint unsigned f1 ) returns tinyint unsigned
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(tinyint zerofill f1 ) returns tinyint zerofill
+CREATE FUNCTION fn1(f1 tinyint zerofill ) returns tinyint zerofill
return f1;
-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 'tinyint zerofill f1 ) returns tinyint zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(tinyint unsigned zerofill f1 ) returns tinyint unsigned zerofill
+CREATE FUNCTION fn1(f1 tinyint unsigned zerofill ) returns tinyint unsigned zerofill
return f1;
-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 'tinyint unsigned zerofill f1 ) returns tinyint unsigned zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(smallint f1 ) returns smallint
+CREATE FUNCTION fn1(f1 smallint ) returns smallint
return f1;
-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 'smallint f1 ) returns smallint
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(smallint unsigned f1 ) returns smallint unsigned
+CREATE FUNCTION fn1(f1 smallint unsigned ) returns smallint unsigned
return f1;
-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 'smallint unsigned f1 ) returns smallint unsigned
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(smallint zerofill f1 ) returns smallint zerofill
+CREATE FUNCTION fn1(f1 smallint zerofill ) returns smallint zerofill
return f1;
-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 'smallint zerofill f1 ) returns smallint zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(smallint unsigned zerofill f1 ) returns smallint unsigned zerofill
+CREATE FUNCTION fn1(f1 smallint unsigned zerofill ) returns smallint unsigned zerofill
return f1;
-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 'smallint unsigned zerofill f1 ) returns smallint unsigned zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(mediumint f1 ) returns mediumint
+CREATE FUNCTION fn1(f1 mediumint ) returns mediumint
return f1;
-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 'mediumint f1 ) returns mediumint
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(mediumint unsigned f1 ) returns mediumint unsigned
+CREATE FUNCTION fn1(f1 mediumint unsigned ) returns mediumint unsigned
return f1;
-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 'mediumint unsigned f1 ) returns mediumint unsigned
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(mediumint zerofill f1 ) returns mediumint zerofill
+CREATE FUNCTION fn1(f1 mediumint zerofill ) returns mediumint zerofill
return f1;
-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 'mediumint zerofill f1 ) returns mediumint zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(mediumint unsigned zerofill f1 ) returns mediumint unsigned zerofill
+CREATE FUNCTION fn1(f1 mediumint unsigned zerofill ) returns mediumint unsigned zerofill
return f1;
-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 'mediumint unsigned zerofill f1 ) returns mediumint unsigned zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(int f1 ) returns int
+CREATE FUNCTION fn1(f1 int ) returns int
return f1;
-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 'int f1 ) returns int
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(int unsigned f1 ) returns int unsigned
+CREATE FUNCTION fn1(f1 int unsigned ) returns int unsigned
return f1;
-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 'int unsigned f1 ) returns int unsigned
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(int zerofill f1 ) returns int zerofill
+CREATE FUNCTION fn1(f1 int1 unsigned ) returns int1 unsigned
return f1;
-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 'int zerofill f1 ) returns int zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(int unsigned zerofill f1 ) returns int unsigned zerofill
+CREATE FUNCTION fn1(f1 int2 unsigned ) returns int2 unsigned
return f1;
-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 'int unsigned zerofill f1 ) returns int unsigned zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(bigint f1 ) returns bigint
+CREATE FUNCTION fn1(f1 int3 unsigned ) returns int3 unsigned
return f1;
-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 'bigint f1 ) returns bigint
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(bigint unsigned f1 ) returns bigint unsigned
+CREATE FUNCTION fn1(f1 int4 unsigned ) returns int4 unsigned
return f1;
-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 'bigint unsigned f1 ) returns bigint unsigned
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(bigint zerofill f1 ) returns bigint zerofill
+CREATE FUNCTION fn1(f1 int8 unsigned ) returns int8 unsigned
return f1;
-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 'bigint zerofill f1 ) returns bigint zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(bigint unsigned zerofill f1 ) returns bigint unsigned zerofill
+CREATE FUNCTION fn1(f1 int zerofill ) returns int zerofill
return f1;
-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 'bigint unsigned zerofill f1 ) returns bigint unsigned zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(decimal f1 ) returns decimal
+CREATE FUNCTION fn1(f1 int unsigned zerofill ) returns int unsigned zerofill
return f1;
-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 'decimal f1 ) returns decimal
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(decimal unsigned f1 ) returns decimal unsigned
+CREATE FUNCTION fn1(f1 bigint ) returns bigint
return f1;
-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 'decimal unsigned f1 ) returns decimal unsigned
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(decimal zerofill f1 ) returns decimal zerofill
+CREATE FUNCTION fn1(f1 bigint unsigned ) returns bigint unsigned
return f1;
-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 'decimal zerofill f1 ) returns decimal zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(decimal unsigned zerofill f1 ) returns decimal unsigned zerofill
+CREATE FUNCTION fn1(f1 bigint zerofill ) returns bigint zerofill
return f1;
-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 'decimal unsigned zerofill f1 ) returns decimal unsigned zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(numeric f1 ) returns numeric
+CREATE FUNCTION fn1(f1 bigint unsigned zerofill ) returns bigint unsigned zerofill
return f1;
-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 'numeric f1 ) returns numeric
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(numeric unsigned f1 ) returns numeric unsigned
+CREATE FUNCTION fn1(f1 decimal ) returns decimal
return f1;
-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 'numeric unsigned f1 ) returns numeric unsigned
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(numeric zerofill f1 ) returns numeric zerofill
+CREATE FUNCTION fn1(f1 decimal unsigned ) returns decimal unsigned
return f1;
-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 'numeric zerofill f1 ) returns numeric zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(numeric unsigned zerofill f1 ) returns numeric unsigned zerofill
+CREATE FUNCTION fn1(f1 decimal zerofill ) returns decimal zerofill
return f1;
-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 'numeric unsigned zerofill f1 ) returns numeric unsigned zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(real f1 ) returns real
+CREATE FUNCTION fn1(f1 decimal unsigned zerofill ) returns decimal unsigned zerofill
return f1;
-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 'real f1 ) returns real
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(real unsigned f1 ) returns real unsigned
+CREATE FUNCTION fn1(f1 numeric ) returns numeric
return f1;
-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 'real unsigned f1 ) returns real unsigned
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(real zerofill f1 ) returns real zerofill
+CREATE FUNCTION fn1(f1 numeric unsigned ) returns numeric unsigned
return f1;
-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 'real zerofill f1 ) returns real zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(real unsigned zerofill f1 ) returns real unsigned zerofill
+CREATE FUNCTION fn1(f1 numeric zerofill ) returns numeric zerofill
return f1;
-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 'real unsigned zerofill f1 ) returns real unsigned zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(float f1 ) returns float
+CREATE FUNCTION fn1(f1 numeric unsigned zerofill ) returns numeric unsigned zerofill
return f1;
-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 'float f1 ) returns float
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(float unsigned f1 ) returns float unsigned
+CREATE FUNCTION fn1(f1 real ) returns real
return f1;
-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 'float unsigned f1 ) returns float unsigned
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(float zerofill f1 ) returns float zerofill
+CREATE FUNCTION fn1(f1 real unsigned ) returns real unsigned
return f1;
-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 'float zerofill f1 ) returns float zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(float unsigned zerofill f1 ) returns float unsigned zerofill
+CREATE FUNCTION fn1(f1 real zerofill ) returns real zerofill
return f1;
-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 'float unsigned zerofill f1 ) returns float unsigned zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(date f1 ) returns date
+CREATE FUNCTION fn1(f1 real unsigned zerofill ) returns real unsigned zerofill
return f1;
-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 'f1 ) returns date
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(time f1 ) returns time
+CREATE FUNCTION fn1(f1 float ) returns float
return f1;
-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 'f1 ) returns time
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(datetime f1 ) returns datetime
+CREATE FUNCTION fn1(f1 float unsigned ) returns float unsigned
return f1;
-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 'f1 ) returns datetime
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(timestamp f1 ) returns timestamp
+CREATE FUNCTION fn1(f1 float zerofill ) returns float zerofill
return f1;
-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 'f1 ) returns timestamp
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(year f1 ) returns year
+CREATE FUNCTION fn1(f1 float unsigned zerofill ) returns float unsigned zerofill
return f1;
-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 'f1 ) returns year
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(year(3) f1 ) returns year(3)
+CREATE FUNCTION fn1(f1 date ) returns date
+return f1;
+DROP FUNCTION IF EXISTS fn1;
+CREATE FUNCTION fn1(f1 time ) returns time
return f1;
-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 '(3) f1 ) returns year(3)
+DROP FUNCTION IF EXISTS fn1;
+CREATE FUNCTION fn1(f1 datetime ) returns datetime
+return f1;
+DROP FUNCTION IF EXISTS fn1;
+CREATE FUNCTION fn1(f1 timestamp ) returns timestamp
+return f1;
+DROP FUNCTION IF EXISTS fn1;
+CREATE FUNCTION fn1(f1 year ) returns year
+return f1;
+DROP FUNCTION IF EXISTS fn1;
+CREATE FUNCTION fn1(f1 year(f1 3) ) returns year(3)
+return f1;
+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 'f1 3) ) returns year(3)
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(year(4) f1 ) returns year(4)
+CREATE FUNCTION fn1(f1 year(f1 4) ) returns year(4)
return f1;
-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 '(4) f1 ) returns year(4)
+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 'f1 4) ) returns year(4)
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(enum("1enum", "2enum") f1 ) returns enum("1enum", "2enum")
+CREATE FUNCTION fn1(f1 enum(f1 "1enum", "2enum") ) returns enum("1enum", "2enum")
return f1;
-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 '("1enum", "2enum") f1 ) returns enum("1enum", "2enum")
+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 'f1 "1enum", "2enum") ) returns enum("1enum", "2enum")
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(set("1set", "2set") f1 ) returns set("1set", "2set")
+CREATE FUNCTION fn1(f1 set(f1 "1set", "2set") ) returns set("1set", "2set")
return f1;
-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("1set", "2set") f1 ) returns set("1set", "2set")
+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 'f1 "1set", "2set") ) returns set("1set", "2set")
return f1' at line 1
Testcase 4.1.16:
@@ -2564,15 +3404,15 @@ alter function sp1 sql security invoker comment 'this is a function';
alter procedure sp1 sql security definer;
alter function sp1 sql security definer;
show CREATE PROCEDURE sp1;
-Procedure sql_mode Create Procedure
-sp1 CREATE PROCEDURE `sp1`()
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp1 CREATE DEFINER=`root`@`localhost` PROCEDURE `sp1`()
COMMENT 'this is a procedure'
-set @x= 3
+set @x= 3 latin1 modified created
show CREATE FUNCTION sp1;
-Function sql_mode Create Function
-sp1 CREATE FUNCTION `sp1`() RETURNS int(11)
+Function sql_mode Create Function character_set_client collation_connection Database Collation
+sp1 CREATE DEFINER=`root`@`localhost` FUNCTION `sp1`() RETURNS int(11)
COMMENT 'this is a function'
-return 4
+return 4 latin1 modified created
USE db_storedproc;
DROP DATABASE db_storedproc_3122;
DROP FUNCTION db_storedproc.sp1;
@@ -2789,7 +3629,7 @@ SELECT count(*) into cnt from t2;
set @count = cnt;
SELECT @count;
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 'SELECT count(*) into cnt from t2;
+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 @count = cnt;
SELECT @count;
END' at line 2
@@ -2841,6 +3681,14 @@ Testcase ....:
--------------------------------------------------------------------------------
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
+accessible:BEGIN
+SELECT @x;
+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 'accessible:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
add:BEGIN
SELECT @x;
END//
@@ -2860,9 +3708,7 @@ CREATE PROCEDURE sp1()
alter:BEGIN
SELECT @x;
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 ':BEGIN
-SELECT @x;
-END' at line 2
+ERROR 0A000: ALTER VIEW is not allowed in stored procedures
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
analyze:BEGIN
@@ -2961,7 +3807,7 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
-CALL:BEGIN
+call:BEGIN
SELECT @x;
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 ':BEGIN
@@ -3033,11 +3879,6 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
-columns:BEGIN
-SELECT @x;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
condition:BEGIN
SELECT @x;
END//
@@ -3046,14 +3887,6 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
-connection:BEGIN
-SELECT @x;
-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 'connection:BEGIN
-SELECT @x;
-END' at line 2
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
constraint:BEGIN
SELECT @x;
END//
@@ -3382,15 +4215,26 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
-fields:BEGIN
+float:BEGIN
SELECT @x;
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 'float:BEGIN
+SELECT @x;
+END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
-float:BEGIN
+float4:BEGIN
SELECT @x;
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 'float:BEGIN
+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 'float4:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+float8:BEGIN
+SELECT @x;
+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 'float8:BEGIN
SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
@@ -3419,11 +4263,6 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
-found:BEGIN
-SELECT @x;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
from:BEGIN
SELECT @x;
END//
@@ -3440,11 +4279,6 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
-goto:BEGIN
-SELECT @x;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
grant:BEGIN
SELECT @x;
END//
@@ -3581,6 +4415,46 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
+int1:BEGIN
+SELECT @x;
+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 'int1:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+int2:BEGIN
+SELECT @x;
+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 'int2:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+int3:BEGIN
+SELECT @x;
+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 'int3:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+int4:BEGIN
+SELECT @x;
+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 'int4:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+int8:BEGIN
+SELECT @x;
+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 'int8:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
integer:BEGIN
SELECT @x;
END//
@@ -3693,6 +4567,14 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
+linear:BEGIN
+SELECT @x;
+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 'linear:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
lines:BEGIN
SELECT @x;
END//
@@ -3773,6 +4655,14 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
+master_ssl_verify_server_cert:BEGIN
+SELECT @x;
+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 'master_ssl_verify_server_cert:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
match:BEGIN
SELECT @x;
END//
@@ -3973,11 +4863,6 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
-privileges:BEGIN
-SELECT @x;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
procedure:BEGIN
SELECT @x;
END//
@@ -3994,6 +4879,14 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
+range:BEGIN
+SELECT @x;
+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 'range:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
read:BEGIN
SELECT @x;
END//
@@ -4010,6 +4903,22 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
+read_only:BEGIN
+SELECT @x;
+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 'read_only:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+read_write:BEGIN
+SELECT @x;
+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 'read_write:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
real:BEGIN
SELECT @x;
END//
@@ -4034,6 +4943,14 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
+release:BEGIN
+SELECT @x;
+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 ':BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
rename:BEGIN
SELECT @x;
END//
@@ -4178,14 +5095,6 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
-soname:BEGIN
-SELECT @x;
-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 'soname:BEGIN
-SELECT @x;
-END' at line 2
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
spatial:BEGIN
SELECT @x;
END//
@@ -4290,11 +5199,6 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
-tables:BEGIN
-SELECT @x;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
terminated:BEGIN
SELECT @x;
END//
@@ -4587,6 +5491,9 @@ END begin_label//
CALL sp1();
@v1 @v2
1 2
+Warnings:
+Warning 1265 Data truncated for column 'x' at row 1
+Warning 1265 Data truncated for column 'y' at row 1
DROP PROCEDURE sp1;
Testcase 4.2.7:
@@ -4621,6 +5528,9 @@ declare y char;
SELECT f1, f2 into x, y from t2 limit 1;
END//
CALL sp1();
+Warnings:
+Warning 1265 Data truncated for column 'x' at row 1
+Warning 1265 Data truncated for column 'y' at row 1
DROP PROCEDURE sp1;
Testcase 4.2.9:
@@ -4684,8 +5594,6 @@ Ensure that the variables, cursors, conditions, and handlers declared for
a stored procedure (with the declare statement) may only be properly defined
--------------------------------------------------------------------------------
DROP PROCEDURE IF EXISTS sp6;
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed: DECIMAL(255,255) is not rejected
CREATE PROCEDURE sp6( )
BEGIN
declare x char default 'a';
@@ -4703,9 +5611,9 @@ fetch cur1 into e;
SELECT x, y, z, a, b, c, d, e;
close cur1;
END//
+ERROR 42000: Too big scale 255 specified for column ''. Maximum is 30.
CALL sp6();
-x y z a b c d e
-a 1 1.1 value1 1200000000000 mediumtext 2005-02-02 12:12:12 a`
+ERROR 42000: PROCEDURE db_storedproc.sp6 does not exist
DROP PROCEDURE IF EXISTS sp6;
CREATE PROCEDURE sp6( )
BEGIN
@@ -5828,13 +6736,6 @@ declare continue handler for sqlstate '23000' set @x2 = 1;
declare x char;
END//
ERROR 42000: Variable or condition declaration after cursor or handler declaration
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
-BEGIN
-declare continue handler for sqlstate '23000' set @x2 = 1;
-declare x char;
-END//
-ERROR 42000: Variable or condition declaration after cursor or handler declaration
DROP PROCEDURE IF EXISTS sp6;
CREATE PROCEDURE sp6( )
BEGIN
@@ -5864,6 +6765,15 @@ Ensure that the declare statement can declare multiple variables both separately
and all at once from a variable list. (multiple declaration)
--------------------------------------------------------------------------------
DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
+DECLARE x1 CHAR(100) DEFAULT 'outer';
+BEGIN
+DECLARE x1 CHAR(100) DEFAULT x1;
+END;
+END//
+CALL sp1();
+DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
declare x, y, z char default null;
@@ -5988,7 +6898,11 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
--1 -1 -1
+000 000 000
+Warnings:
+Warning 1264 Out of range value for column 'x' at row 1
+Warning 1264 Out of range value for column 'y' at row 1
+Warning 1264 Out of range value for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -5997,7 +6911,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1 1 1
+001 001 001
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6024,7 +6938,11 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
--1 -1 -1
+00000 00000 00000
+Warnings:
+Warning 1264 Out of range value for column 'x' at row 1
+Warning 1264 Out of range value for column 'y' at row 1
+Warning 1264 Out of range value for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6033,7 +6951,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1 1 1
+00001 00001 00001
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6060,7 +6978,11 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
--1 -1 -1
+00000000 00000000 00000000
+Warnings:
+Warning 1264 Out of range value for column 'x' at row 1
+Warning 1264 Out of range value for column 'y' at row 1
+Warning 1264 Out of range value for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6069,7 +6991,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1 1 1
+00000001 00000001 00000001
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6096,7 +7018,11 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
--1 -1 -1
+0000000000 0000000000 0000000000
+Warnings:
+Warning 1264 Out of range value for column 'x' at row 1
+Warning 1264 Out of range value for column 'y' at row 1
+Warning 1264 Out of range value for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6105,7 +7031,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1 1 1
+0000000001 0000000001 0000000001
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6123,7 +7049,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
--1 -1 -1
+18446744073709551615 18446744073709551615 18446744073709551615
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6132,7 +7058,11 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
--1 -1 -1
+00000000000000000000 00000000000000000000 00000000000000000000
+Warnings:
+Warning 1264 Out of range value for column 'x' at row 1
+Warning 1264 Out of range value for column 'y' at row 1
+Warning 1264 Out of range value for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6141,7 +7071,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1 1 1
+00000000000000000001 00000000000000000001 00000000000000000001
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6150,18 +7080,24 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
--34028234660123456789012345678901234567 -34028234660123456789012345678901234567 -34028234660123456789012345678901234567
+-9999999999 -9999999999 -9999999999
+Warnings:
+Warning 1264 Out of range value for column 'x' at row 1
+Warning 1264 Out of range value for column 'y' at row 1
+Warning 1264 Out of range value for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
declare x, y, z decimal unsigned default 1.175494351e-38;
SELECT x, y, z;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed: default (10,0) for DECIMAL not checked
CALL sp1();
x y z
-0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351
+0 0 0
+Warnings:
+Note 1265 Data truncated for column 'x' at row 1
+Note 1265 Data truncated for column 'y' at row 1
+Note 1265 Data truncated for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6170,62 +7106,76 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
--34028234660123456789012345678901234567 -34028234660123456789012345678901234567 -34028234660123456789012345678901234567
+0000000000 0000000000 0000000000
+Warnings:
+Warning 1264 Out of range value for column 'x' at row 1
+Warning 1264 Out of range value for column 'y' at row 1
+Warning 1264 Out of range value for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
declare x, y, z decimal unsigned zerofill default 1.175494351e-38;
SELECT x, y, z;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed: default (10,0) for DECIMAL not checked
CALL sp1();
x y z
-0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351
+0000000000 0000000000 0000000000
+Warnings:
+Note 1265 Data truncated for column 'x' at row 1
+Note 1265 Data truncated for column 'y' at row 1
+Note 1265 Data truncated for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
declare x, y, z numeric default 1.175494351e-38;
SELECT x, y, z;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed: default (10,0) for DECIMAL not checked
CALL sp1();
x y z
-0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351
+0 0 0
+Warnings:
+Note 1265 Data truncated for column 'x' at row 1
+Note 1265 Data truncated for column 'y' at row 1
+Note 1265 Data truncated for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
declare x, y, z numeric unsigned default 1.175494351e-38;
SELECT x, y, z;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed: default (10,0) for DECIMAL not checked
CALL sp1();
x y z
-0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351
+0 0 0
+Warnings:
+Note 1265 Data truncated for column 'x' at row 1
+Note 1265 Data truncated for column 'y' at row 1
+Note 1265 Data truncated for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
declare x, y, z numeric zerofill default 1.175494351e-38;
SELECT x, y, z;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed: default (10,0) for DECIMAL not checked
CALL sp1();
x y z
-0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351
+0000000000 0000000000 0000000000
+Warnings:
+Note 1265 Data truncated for column 'x' at row 1
+Note 1265 Data truncated for column 'y' at row 1
+Note 1265 Data truncated for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
declare x, y, z numeric unsigned zerofill default 1.175494351e-38;
SELECT x, y, z;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed: default (10,0) for DECIMAL not checked
CALL sp1();
x y z
-0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351
+0000000000 0000000000 0000000000
+Warnings:
+Note 1265 Data truncated for column 'x' at row 1
+Note 1265 Data truncated for column 'y' at row 1
+Note 1265 Data truncated for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6252,7 +7202,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1.175494351e-38 1.175494351e-38 1.175494351e-38
+00000001.175494351e-38 00000001.175494351e-38 00000001.175494351e-38
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6261,7 +7211,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1.175494351e-38 1.175494351e-38 1.175494351e-38
+00000001.175494351e-38 00000001.175494351e-38 00000001.175494351e-38
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6270,7 +7220,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1.175494351e-38 1.175494351e-38 1.175494351e-38
+1.17549e-38 1.17549e-38 1.17549e-38
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6279,7 +7229,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1.175494351e-38 1.175494351e-38 1.175494351e-38
+1.17549e-38 1.17549e-38 1.17549e-38
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6288,7 +7238,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1.175494351e-38 1.175494351e-38 1.175494351e-38
+01.17549e-38 01.17549e-38 01.17549e-38
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6297,7 +7247,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1.175494351e-38 1.175494351e-38 1.175494351e-38
+01.17549e-38 01.17549e-38 01.17549e-38
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6333,7 +7283,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-20050202122012 20050202122012 20050202122012
+2005-02-02 12:20:12 2005-02-02 12:20:12 2005-02-02 12:20:12
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6419,6 +7369,13 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
+declare accessible char;
+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 'accessible char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
declare add char;
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 'add char;
@@ -6524,9 +7481,9 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
-declare CALL char;
+declare call char;
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 'CALL char;
+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 'call char;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
@@ -6587,11 +7544,6 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
-declare columns char;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
-BEGIN
declare condition char;
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 'condition char;
@@ -6599,13 +7551,6 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
-declare connection char;
-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 'connection char;
-END' at line 3
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
-BEGIN
declare constraint char;
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 'constraint char;
@@ -6893,14 +7838,23 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
-declare fields char;
+declare float char;
+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 'float char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
+declare float4 char;
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 'float4 char;
+END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
-declare float char;
+declare float8 char;
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 'float char;
+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 'float8 char;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
@@ -6926,11 +7880,6 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
-declare found char;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
-BEGIN
declare from char;
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 'from char;
@@ -6945,11 +7894,6 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
-declare goto char;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
-BEGIN
declare grant char;
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 'grant char;
@@ -7069,6 +8013,41 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
+declare int1 char;
+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 'int1 char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
+declare int2 char;
+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 'int2 char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
+declare int3 char;
+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 'int3 char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
+declare int4 char;
+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 'int4 char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
+declare int8 char;
+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 'int8 char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
declare integer char;
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 'integer char;
@@ -7167,6 +8146,13 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
+declare linear char;
+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 'linear char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
declare lines char;
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 'lines char;
@@ -7237,6 +8223,13 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
+declare master_ssl_verify_server_cert char;
+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 'master_ssl_verify_server_cert char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
declare match char;
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 'match char;
@@ -7412,11 +8405,6 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
-declare privileges char;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
-BEGIN
declare procedure char;
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 'procedure char;
@@ -7431,6 +8419,13 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
+declare range char;
+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 'range char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
declare read char;
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 'read char;
@@ -7445,6 +8440,18 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
+declare read_only char;
+END//
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
+declare read_write char;
+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 'read_write char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
declare real char;
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 'real char;
@@ -7466,6 +8473,13 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
+declare release char;
+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 'release char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
declare rename char;
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 'rename char;
@@ -7624,15 +8638,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1()
BEGIN
-declare soname char;
-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 'soname char;
-END' at line 3
-DROP PROCEDURE IF EXISTS sp1;
-Warnings:
-Note 1305 PROCEDURE sp1 does not exist
-CREATE PROCEDURE sp1()
-BEGIN
declare spatial char;
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 'spatial char;
@@ -7750,11 +8755,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1()
BEGIN
-declare tables char;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
-BEGIN
declare terminated char;
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 'terminated char;
@@ -7899,9 +8899,9 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1()
BEGIN
-declare USE char;
+declare use char;
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 'USE char;
+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 'use char;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
@@ -8150,6 +9150,16 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare accessible condition for sqlstate '02000';
+declare exit handler for add set @var2 = 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 'accessible condition for sqlstate '02000';
+declare exit handler for add set @var' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare add condition for sqlstate '02000';
declare exit handler for add set @var2 = 1;
END//
@@ -8306,10 +9316,10 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare CALL condition for sqlstate '02000';
+declare call condition for sqlstate '02000';
declare exit handler for CALL set @var2 = 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 'CALL condition for sqlstate '02000';
+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 'call condition for sqlstate '02000';
declare exit handler for CALL set @var2 = 1' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
@@ -8409,11 +9419,7 @@ BEGIN
declare connection condition for sqlstate '02000';
declare exit handler for connection set @var2 = 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 'connection condition for sqlstate '02000';
-declare exit handler for connection s' at line 3
DROP PROCEDURE IF EXISTS sp1;
-Warnings:
-Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
declare constraint condition for sqlstate '02000';
@@ -8829,12 +9835,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare fields condition for sqlstate '02000';
-declare exit handler for fields set @var2 = 1;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1( )
-BEGIN
declare float condition for sqlstate '02000';
declare exit handler for float set @var2 = 1;
END//
@@ -8845,6 +9845,26 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare float4 condition for sqlstate '02000';
+declare exit handler for add set @var2 = 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 'float4 condition for sqlstate '02000';
+declare exit handler for add set @var2 = ' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare float8 condition for sqlstate '02000';
+declare exit handler for add set @var2 = 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 'float8 condition for sqlstate '02000';
+declare exit handler for add set @var2 = ' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare for condition for sqlstate '02000';
declare exit handler for for set @var2 = 1;
END//
@@ -8876,12 +9896,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare found condition for sqlstate '02000';
-declare exit handler for found set @var2 = 1;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1( )
-BEGIN
declare from condition for sqlstate '02000';
declare exit handler for from set @var2 = 1;
END//
@@ -8902,12 +9916,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare goto condition for sqlstate '02000';
-declare exit handler for goto set @var2 = 1;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1( )
-BEGIN
declare grant condition for sqlstate '02000';
declare exit handler for grant set @var2 = 1;
END//
@@ -9081,6 +10089,56 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare int1 condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'int1 condition for sqlstate '02000';
+declare exit handler for int set @var2 = 1;' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare int2 condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'int2 condition for sqlstate '02000';
+declare exit handler for int set @var2 = 1;' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare int3 condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'int3 condition for sqlstate '02000';
+declare exit handler for int set @var2 = 1;' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare int4 condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'int4 condition for sqlstate '02000';
+declare exit handler for int set @var2 = 1;' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare int8 condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'int8 condition for sqlstate '02000';
+declare exit handler for int set @var2 = 1;' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare integer condition for sqlstate '02000';
declare exit handler for integer set @var2 = 1;
END//
@@ -9223,6 +10281,16 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare linear condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'linear condition for sqlstate '02000';
+declare exit handler for int set @var2 = ' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare lines condition for sqlstate '02000';
declare exit handler for lines set @var2 = 1;
END//
@@ -9323,6 +10391,16 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare master_ssl_verify_server_cert condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'master_ssl_verify_server_cert condition for sqlstate '02000';
+declare exit handl' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare match condition for sqlstate '02000';
declare exit handler for match set @var2 = 1;
END//
@@ -9578,12 +10656,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare privileges condition for sqlstate '02000';
-declare exit handler for privileges set @var2 = 1;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1( )
-BEGIN
declare procedure condition for sqlstate '02000';
declare exit handler for procedure set @var2 = 1;
END//
@@ -9604,6 +10676,16 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare range condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'range condition for sqlstate '02000';
+declare exit handler for int set @var2 = 1' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare read condition for sqlstate '02000';
declare exit handler for read set @var2 = 1;
END//
@@ -9624,6 +10706,26 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare read_only condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'int set @var2 = 1;
+END' at line 4
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare read_write condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'read_write condition for sqlstate '02000';
+declare exit handler for int set @var' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare real condition for sqlstate '02000';
declare exit handler for real set @var2 = 1;
END//
@@ -9654,6 +10756,16 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare release condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'release condition for sqlstate '02000';
+declare exit handler for int set @var2 =' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare rename condition for sqlstate '02000';
declare exit handler for rename set @var2 = 1;
END//
@@ -9774,10 +10886,10 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare SELECT condition for sqlstate '02000';
+declare select condition for sqlstate '02000';
declare exit handler for SELECT set @var2 = 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 'SELECT condition for sqlstate '02000';
+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 'select condition for sqlstate '02000';
declare exit handler for SELECT set @var2' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
@@ -9835,16 +10947,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare soname condition for sqlstate '02000';
-declare exit handler for soname set @var2 = 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 'soname condition for sqlstate '02000';
-declare exit handler for soname set @var2' at line 3
-DROP PROCEDURE IF EXISTS sp1;
-Warnings:
-Note 1305 PROCEDURE sp1 does not exist
-CREATE PROCEDURE sp1( )
-BEGIN
declare spatial condition for sqlstate '02000';
declare exit handler for spatial set @var2 = 1;
END//
@@ -9977,12 +11079,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare tables condition for sqlstate '02000';
-declare exit handler for tables set @var2 = 1;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1( )
-BEGIN
declare terminated condition for sqlstate '02000';
declare exit handler for terminated set @var2 = 1;
END//
@@ -10144,10 +11240,10 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare USE condition for sqlstate '02000';
+declare use condition for sqlstate '02000';
declare exit handler for USE set @var2 = 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 'USE condition for sqlstate '02000';
+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 'use condition for sqlstate '02000';
declare exit handler for USE set @var2 = 1;
' at line 3
DROP PROCEDURE IF EXISTS sp1;
@@ -10409,6 +11505,15 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare accessible handler for sqlstate '02000' set @var2 = 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 'accessible handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare add handler for sqlstate '02000' set @var2 = 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 'add handler for sqlstate '02000' set @var2 = 1;
@@ -10544,9 +11649,9 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare CALL handler for sqlstate '02000' set @var2 = 1;
+declare call handler for sqlstate '02000' set @var2 = 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 'CALL handler for sqlstate '02000' set @var2 = 1;
+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 'call handler for sqlstate '02000' set @var2 = 1;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
@@ -10625,15 +11730,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare columns handler for sqlstate '02000' set @var2 = 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 'handler for sqlstate '02000' set @var2 = 1;
-END' at line 3
-DROP PROCEDURE IF EXISTS sp1;
-Warnings:
-Note 1305 PROCEDURE sp1 does not exist
-CREATE PROCEDURE sp1( )
-BEGIN
declare condition handler for sqlstate '02000' set @var2 = 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 'condition handler for sqlstate '02000' set @var2 = 1;
@@ -10643,22 +11739,18 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare connection handler for sqlstate '02000' set @var2 = 1;
+declare constraint handler for sqlstate '02000' set @var2 = 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 'connection handler for sqlstate '02000' set @var2 = 1;
+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 'constraint handler for sqlstate '02000' set @var2 = 1;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare constraint handler for sqlstate '02000' set @var2 = 1;
+declare continue handler for sqlstate '02000' set @var2 = 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 'constraint handler for sqlstate '02000' set @var2 = 1;
-END' at line 3
DROP PROCEDURE IF EXISTS sp1;
-Warnings:
-Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
declare convert handler for sqlstate '02000' set @var2 = 1;
@@ -10976,6 +12068,11 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare exit handler for sqlstate '02000' set @var2 = 1;
+END//
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1( )
+BEGIN
declare explain handler for sqlstate '02000' set @var2 = 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 'explain handler for sqlstate '02000' set @var2 = 1;
@@ -11003,54 +12100,54 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare fields handler for sqlstate '02000' set @var2 = 1;
+declare float handler for sqlstate '02000' set @var2 = 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 'handler for sqlstate '02000' set @var2 = 1;
+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 'float handler for sqlstate '02000' set @var2 = 1;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare float handler for sqlstate '02000' set @var2 = 1;
+declare float4 handler for sqlstate '02000' set @var2 = 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 'float handler for sqlstate '02000' set @var2 = 1;
+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 'float4 handler for sqlstate '02000' set @var2 = 1;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare for handler for sqlstate '02000' set @var2 = 1;
+declare float8 handler for sqlstate '02000' set @var2 = 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 'for handler for sqlstate '02000' set @var2 = 1;
+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 'float8 handler for sqlstate '02000' set @var2 = 1;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare force handler for sqlstate '02000' set @var2 = 1;
+declare for handler for sqlstate '02000' set @var2 = 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 'force handler for sqlstate '02000' set @var2 = 1;
+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 'for handler for sqlstate '02000' set @var2 = 1;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare foreign handler for sqlstate '02000' set @var2 = 1;
+declare force handler for sqlstate '02000' set @var2 = 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 'foreign handler for sqlstate '02000' set @var2 = 1;
+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 'force handler for sqlstate '02000' set @var2 = 1;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare found handler for sqlstate '02000' set @var2 = 1;
+declare foreign handler for sqlstate '02000' set @var2 = 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 'handler for sqlstate '02000' set @var2 = 1;
+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 'foreign handler for sqlstate '02000' set @var2 = 1;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
@@ -11075,15 +12172,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare goto handler for sqlstate '02000' set @var2 = 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 'handler for sqlstate '02000' set @var2 = 1;
-END' at line 3
-DROP PROCEDURE IF EXISTS sp1;
-Warnings:
-Note 1305 PROCEDURE sp1 does not exist
-CREATE PROCEDURE sp1( )
-BEGIN
declare grant handler for sqlstate '02000' set @var2 = 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 'grant handler for sqlstate '02000' set @var2 = 1;
@@ -11237,6 +12325,51 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare int1 handler for sqlstate '02000' set @var2 = 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 'int1 handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare int2 handler for sqlstate '02000' set @var2 = 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 'int2 handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare int3 handler for sqlstate '02000' set @var2 = 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 'int3 handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare int4 handler for sqlstate '02000' set @var2 = 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 'int4 handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare int8 handler for sqlstate '02000' set @var2 = 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 'int8 handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare integer handler for sqlstate '02000' set @var2 = 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 'integer handler for sqlstate '02000' set @var2 = 1;
@@ -11363,6 +12496,15 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare linear handler for sqlstate '02000' set @var2 = 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 'linear handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare lines handler for sqlstate '02000' set @var2 = 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 'lines handler for sqlstate '02000' set @var2 = 1;
@@ -11453,6 +12595,15 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare master_ssl_verify_server_cert handler for sqlstate '02000' set @var2 = 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 'master_ssl_verify_server_cert handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare match handler for sqlstate '02000' set @var2 = 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 'match handler for sqlstate '02000' set @var2 = 1;
@@ -11705,6 +12856,15 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare range handler for sqlstate '02000' set @var2 = 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 'range handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare read handler for sqlstate '02000' set @var2 = 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 'read handler for sqlstate '02000' set @var2 = 1;
@@ -11723,6 +12883,24 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare read_only handler for sqlstate '02000' set @var2 = 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 'handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare read_write handler for sqlstate '02000' set @var2 = 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 'read_write handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare real handler for sqlstate '02000' set @var2 = 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 'real handler for sqlstate '02000' set @var2 = 1;
@@ -11750,6 +12928,15 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare release handler for sqlstate '02000' set @var2 = 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 'release handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare rename handler for sqlstate '02000' set @var2 = 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 'rename handler for sqlstate '02000' set @var2 = 1;
@@ -11858,9 +13045,9 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare SELECT handler for sqlstate '02000' set @var2 = 1;
+declare select handler for sqlstate '02000' set @var2 = 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 'SELECT handler for sqlstate '02000' set @var2 = 1;
+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 'select handler for sqlstate '02000' set @var2 = 1;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
@@ -11912,15 +13099,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare soname handler for sqlstate '02000' set @var2 = 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 'soname handler for sqlstate '02000' set @var2 = 1;
-END' at line 3
-DROP PROCEDURE IF EXISTS sp1;
-Warnings:
-Note 1305 PROCEDURE sp1 does not exist
-CREATE PROCEDURE sp1( )
-BEGIN
declare spatial handler for sqlstate '02000' set @var2 = 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 'spatial handler for sqlstate '02000' set @var2 = 1;
@@ -12038,15 +13216,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare tables handler for sqlstate '02000' set @var2 = 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 'handler for sqlstate '02000' set @var2 = 1;
-END' at line 3
-DROP PROCEDURE IF EXISTS sp1;
-Warnings:
-Note 1305 PROCEDURE sp1 does not exist
-CREATE PROCEDURE sp1( )
-BEGIN
declare terminated handler for sqlstate '02000' set @var2 = 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 'terminated handler for sqlstate '02000' set @var2 = 1;
@@ -12191,9 +13360,9 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare USE handler for sqlstate '02000' set @var2 = 1;
+declare use handler for sqlstate '02000' set @var2 = 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 'USE handler for sqlstate '02000' set @var2 = 1;
+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 'use handler for sqlstate '02000' set @var2 = 1;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
@@ -12384,10 +13553,13 @@ set @v2 = y;
END//
CALL sp1();
x y @x
-NULL abaa 3
+NULL a 3
+Warnings:
+Warning 1265 Data truncated for column 'y' at row 3
+Warning 1265 Data truncated for column 'y' at row 1
SELECT @v1, @v2;
@v1 @v2
-4 a`
+4 a
DROP PROCEDURE sp1;
Testcase 4.2.28:
@@ -12454,7 +13626,7 @@ CALL sp1();
@xx
0
Warnings:
-Warning 1292 Truncated incorrect INTEGER value: 'asd'
+Warning 1366 Incorrect integer value: 'asd' for column 'xx' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12481,9 +13653,11 @@ set xx = 'temp';
set @xx = xx;
END//
CALL sp1();
+Warnings:
+Warning 1265 Data truncated for column 'xx' at row 1
SELECT @xx;
@xx
-temp
+t
DROP PROCEDURE sp1;
Testcase 4.2.31 - b:
@@ -12501,7 +13675,7 @@ CALL sp1();
xx
0
Warnings:
-Warning 1292 Truncated incorrect DOUBLE value: 'asd'
+Warning 1265 Data truncated for column 'xx' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12527,7 +13701,9 @@ SELECT xx;
END//
CALL sp1();
xx
-asd
+0000-00-00 00:00:00
+Warnings:
+Warning 1264 Out of range value for column 'xx' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12571,7 +13747,7 @@ CALL sp1();
xx
0
Warnings:
-Warning 1292 Truncated incorrect INTEGER value: 'asd'
+Warning 1366 Incorrect integer value: 'asd' for column 'xx' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12602,6 +13778,8 @@ declare x char ascii;
SELECT f1 into x from t2 limit 1;
END//
CALL sp1();
+Warnings:
+Warning 1265 Data truncated for column 'x' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12665,6 +13843,8 @@ declare x binary;
SELECT f1 into x from t2 limit 1;
END//
CALL sp1();
+Warnings:
+Warning 1265 Data truncated for column 'x' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12812,8 +13992,6 @@ declare x decimal;
SELECT f1 into x from t2 limit 1;
END//
CALL sp1();
-Warnings:
-Error 1366 Incorrect decimal value: '' for column '' at row -1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12821,8 +13999,6 @@ declare x decimal unsigned;
SELECT f1 into x from t2 limit 1;
END//
CALL sp1();
-Warnings:
-Error 1366 Incorrect decimal value: '' for column '' at row -1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12830,8 +14006,6 @@ declare x decimal zerofill;
SELECT f1 into x from t2 limit 1;
END//
CALL sp1();
-Warnings:
-Error 1366 Incorrect decimal value: '' for column '' at row -1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12839,8 +14013,6 @@ declare x decimal unsigned zerofill;
SELECT f1 into x from t2 limit 1;
END//
CALL sp1();
-Warnings:
-Error 1366 Incorrect decimal value: '' for column '' at row -1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12848,8 +14020,6 @@ declare x numeric;
SELECT f1 into x from t2 limit 1;
END//
CALL sp1();
-Warnings:
-Error 1366 Incorrect decimal value: '' for column '' at row -1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12857,8 +14027,6 @@ declare x numeric unsigned;
SELECT f1 into x from t2 limit 1;
END//
CALL sp1();
-Warnings:
-Error 1366 Incorrect decimal value: '' for column '' at row -1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12866,8 +14034,6 @@ declare x numeric zerofill;
SELECT f1 into x from t2 limit 1;
END//
CALL sp1();
-Warnings:
-Error 1366 Incorrect decimal value: '' for column '' at row -1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12875,8 +14041,6 @@ declare x numeric unsigned zerofill;
SELECT f1 into x from t2 limit 1;
END//
CALL sp1();
-Warnings:
-Error 1366 Incorrect decimal value: '' for column '' at row -1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -13254,7 +14418,7 @@ declare continue handler for sqlstate '02000' set done = 1;
BEGIN
open cur1;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newlf1, newf3, newsal;
set count = count - 1;
END while;
@@ -13279,7 +14443,7 @@ declare continue handler for sqlstate '02000' set done = 1;
BEGIN
open cur1;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newlf1, newf3, newsal;
set count = count - 1;
END while;
@@ -13306,7 +14470,7 @@ declare continue handler for sqlstate '02000' set done = 1;
BEGIN
open cur1;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
set count = count - 1;
END while;
@@ -13330,7 +14494,7 @@ open cur1;
BEGIN
open cur1;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2, newf3, newf4;
set count = count - 1;
END while;
@@ -13358,7 +14522,7 @@ BEGIN
open cur1;
open cur1;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
set count = count - 1;
END while;
@@ -13388,7 +14552,7 @@ declare continue handler for sqlstate '02000' set done = 1;
BEGIN
open cur2;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
set count = count - 1;
END while;
@@ -13416,7 +14580,7 @@ declare cur1 cursor for SELECT f1, f2, f4, f5 from t2 limit 20, 10;
declare continue handler for sqlstate '02000' set done = 1;
BEGIN
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
set count = count - 1;
END while;
@@ -13430,7 +14594,7 @@ DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
declare done int default 0;
-declare count integer default 0;
+declare count integer default 10;
declare newf1 char(20);
declare newf2 char(20);
declare newf3 char(20);
@@ -13441,7 +14605,7 @@ open cur1;
BEGIN
declare cur1 cursor for SELECT f1, f2, f3, f4 from t2;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2, newf3, newf4;
set count = count - 1;
END while;
@@ -13473,7 +14637,7 @@ BEGIN
open cur1;
close cur1;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
set count = count - 1;
END while;
@@ -13485,7 +14649,7 @@ DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
declare done int default 0;
-declare count integer default 0;
+declare count integer default 20;
declare newf1 char(20);
declare newf2 char(20);
declare newf3 char(20);
@@ -13514,13 +14678,13 @@ BEGIN
declare done int default 0;
declare count integer default 20;
declare newf2 char(20);
-declare newf1 date;
+declare newf1 int1;
declare cur1 cursor for SELECT f1, f3 from t2 limit 20, 10;
declare continue handler for sqlstate '02000' set done = 1;
BEGIN
open cur1;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2;
set @x = newf1;
set @y = newf2;
@@ -13590,7 +14754,7 @@ BEGIN
close cur1;
open cur1;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
set count = count - 1;
END while;
@@ -13643,7 +14807,7 @@ fetch cur1 into newf1, newf2, newf4, newf3;
END;
END//
CALL sp1();
-ERROR 02000: No data to FETCH
+ERROR 02000: No data - zero rows fetched, selected, or processed
DROP PROCEDURE sp1;
Testcase 4.2.65:
@@ -13669,7 +14833,7 @@ commit;
END;
END//
CALL sp1();
-ERROR 02000: No data to FETCH
+ERROR 02000: No data - zero rows fetched, selected, or processed
DROP PROCEDURE sp1;
Testcase 4.2.66:
@@ -13690,7 +14854,7 @@ declare continue handler for sqlstate '02000' set done = 1;
BEGIN
open cur1;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
set count = count - 1;
END while;
@@ -13719,12 +14883,13 @@ declare cur1 cursor for SELECT f1, f2, f4, f5 from t2 limit 20, 10;
declare continue handler for sqlstate '02000' set done = 1;
BEGIN
open cur1;
-set count = count - 1;
-while count <> 0 do
+# set count = count - 1;
+# while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
-set count = count - 1;
-END while;
+# set count = count - 1;
+# END while;
END;
+fetch cur1 into newf1, newf2, newf4, newf3;
END//
CALL sp1();
DROP PROCEDURE sp1;
@@ -13756,7 +14921,7 @@ BEGIN
set count = 10;
BEGIN
open cur2;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
set count = count - 1;
END while;
@@ -13765,7 +14930,8 @@ insert into temp1 values(newf1, newf2, newf4, newf3);
close cur1;
END;
BEGIN
-while count <> 0 do
+set count = 10;
+while count > 0 do
fetch cur2 into newf21, newf22, newf24, newf23;
set count = count - 1;
END while;
@@ -13774,9 +14940,9 @@ insert into temp2 values(newf21, newf22, newf24, newf23);
close cur2;
END//
CALL sp1();
-SELECT * from temp1;
-f1 f2 f3 f4
-agaaaaaaa agaaaaaaa -4993 agaaaaaaa
+SELECT count(*) from temp1;
+count(*)
+1
SELECT * from temp2;
f1 f2 f3 f4
NULL NULL NULL NULL
@@ -13797,7 +14963,7 @@ CREATE TABLE res_t3_itisalongname_1381742_itsaverylongname_1381742(
middleinitial CHAR,
lastname VARCHAR(50),
age_averylongfieldname_averylongname_1234569 int,
-COMMENT TEXT) ENGINE=innodb;
+COMMENT TEXT) ENGINE=myisam;
INSERT INTO res_t3_itisalongname_1381742_itsaverylongname_1381742
VALUES('a', 'aaaaaaaaaabbbbbbbbc', 0, 'default');
CREATE PROCEDURE sp1(a int)
@@ -14023,7 +15189,7 @@ delete from res_t3_itisalongname_1381742_itsaverylongname_1381742;
END case;
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 'when 'delete' then
-delete from res_t3_itisalongname_1381742_itsaverylongname_13' at line 10
+delete from res_t3_itisalongname_1381742_itsaverylongname_13' at line 11
DROP PROCEDURE IF EXISTS sp3;
CREATE PROCEDURE sp3( action char(20) )
BEGIN
@@ -14041,8 +15207,9 @@ label2: while count < 10 do
BEGIN
insert into res_t3_itisalongname_1381742_itsaverylongname_1381742
values('xxxxxxxxxxxxxxxxxxx', '1231230981(*&(*&)(*&(', count);
-if done=1 then
-set count=10;
+set count = count + 1;
+if count= 10 then
+set done=1;
END if;
END;
END while label2;
@@ -14056,6 +15223,19 @@ END if;
END loop label1;
SELECT count, done;
END//
+CALL sp3('insert');
+count done
+10 1
+Warnings:
+Warning 1265 Data truncated for column 'name' at row 1
+Warning 1265 Data truncated for column 'name' at row 2
+Warning 1265 Data truncated for column 'name' at row 3
+Warning 1265 Data truncated for column 'name' at row 4
+Warning 1265 Data truncated for column 'name' at row 5
+Warning 1265 Data truncated for column 'name' at row 6
+Warning 1265 Data truncated for column 'name' at row 7
+Warning 1265 Data truncated for column 'name' at row 8
+Warning 1265 Data truncated for column 'name' at row 9
DROP PROCEDURE sp3;
drop table res_t3_itisalongname_1381742_itsaverylongname_1381742;
@@ -14330,11 +15510,14 @@ CREATE PROCEDURE sp6()
BEGIN
declare count1 integer default 1;
label1: repeat
-set count1 = count1;
+set count1 = count1-1;
until count1 < 0
END repeat label1;
SELECT count1;
END//
+CALL sp6();
+count1
+-1
DROP PROCEDURE sp6;
Testcase 4.3.7:
@@ -14403,7 +15586,7 @@ do v1 > 0 while
set v1 = v1 - 1;
END while;
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 'do v1 > 0 while
+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
set v1 = v1 - 1;
END while;
END' at line 4
@@ -14606,7 +15789,7 @@ until count1 < 3
END repeat label1;
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 'label1;
-END' at line 7
+END' at line 8
Testcase 4.3.21:
--------------------------------------------------------------------------------
@@ -14789,15 +15972,15 @@ insert into t43 values('abcde', 'a!@#$%^&*(');
CREATE PROCEDURE d1.sp4()
SELECT * from d1.t43;
SELECT * from mysql.proc where specific_name = 'sp4';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
-d1 sp4 PROCEDURE sp4 SQL CONTAINS_SQL NO DEFINER SELECT * from d1.t43 root@localhost modified created
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
+d1 sp4 PROCEDURE sp4 SQL CONTAINS_SQL NO DEFINER SELECT * from d1.t43 root@localhost modified created latin1 latin1_swedish_ci latin1_swedish_ci SELECT * from d1.t43
USE db_storedproc;
DROP DATABASE d1;
CREATE DATABASE d1;
USE d1;
create table t44(a char(5), b char(10));
SELECT * from mysql.proc where specific_name = 'sp4';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
USE db_storedproc;
DROP DATABASE d1;
@@ -14839,8 +16022,8 @@ CREATE PROCEDURE sp8 ( n char(20) ) sql security definer comment 'initial'
USE d2;
alter procedure d1.sp8 sql security definer comment 'updated';
SELECT * from mysql.proc where specific_name='sp8' and db='d1';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
-d1 sp8 PROCEDURE sp8 SQL CONTAINS_SQL NO DEFINER n char(20) SELECT * from t1 where t1.f1 = n root@localhost modified created updated
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
+d1 sp8 PROCEDURE sp8 SQL CONTAINS_SQL NO DEFINER n char(20) SELECT * from t1 where t1.f1 = n root@localhost modified created updated latin1 latin1_swedish_ci latin1_swedish_ci SELECT * from t1 where t1.f1 = n
Testcase 4.4.9:
--------------------------------------------------------------------------------
@@ -14856,12 +16039,16 @@ END//
USE d2;
alter function d1.fn2 sql security definer comment 'updated';
SELECT * from mysql.proc where specific_name='fn2' and db='d1';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
d1 fn2 FUNCTION fn2 SQL CONTAINS_SQL NO DEFINER n int int(11) BEGIN
declare a int;
set a = 0.9 * n;
return a;
-END root@localhost modified created updated
+END root@localhost modified created updated latin1 latin1_swedish_ci latin1_swedish_ci BEGIN
+declare a int;
+set a = 0.9 * n;
+return a;
+END
Testcase 4.4.10:
--------------------------------------------------------------------------------
@@ -14871,7 +16058,7 @@ SELECT * from t1 where t1.f1 = n;
USE d2;
DROP PROCEDURE d1.sp9;
SELECT * from mysql.proc where specific_name='sp9' and db='d1';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
Testcase 4.4.11:
--------------------------------------------------------------------------------
@@ -14885,7 +16072,7 @@ END//
USE d2;
DROP FUNCTION d1.fn3;
SELECT * from mysql.proc where specific_name='fn3' and db='d1';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
USE db_storedproc;
DROP DATABASE d1;
DROP DATABASE d2;
@@ -14893,19 +16080,6 @@ DROP DATABASE d2;
Section 3.1.5 - Parameter use checks:
Functions with all data types
--------------------------------------------------------------------------------
-SELECT 1 as 'bug_dec_num';
-bug_dec_num
-1
-
-.
-FIXME: There are differences with datatypes DECIMAL and NUMERIC if large
-FIXME: exponent values are used. The diffs are shown only on some machines like
-FIXME: AIX52 and HPUX11. Until this has been solved we use numbers that
-FIXME: *should* be equal to the exponent representation but have no exponents
-FIXME: and use the specified count of *0*s instead.
-FIXME: In the source file these tests are marked with the comment hpux11
-.
---------------------------------------------------------------------------------
DROP DATABASE IF EXISTS d1;
CREATE DATABASE d1;
USE d1;
@@ -14926,7 +16100,7 @@ return f1;
END//
SELECT fn2(1.84e+19);
fn2(1.84e+19)
-0
+18400000000000000000
DROP FUNCTION IF EXISTS fn3;
CREATE FUNCTION fn3( f1 bigint unsigned zerofill) returns bigint unsigned zerofill
BEGIN
@@ -14945,6 +16119,8 @@ END//
SELECT fn4(-9.22e+15);
fn4(-9.22e+15)
0
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn5;
CREATE FUNCTION fn5( f1 decimal) returns decimal
BEGIN
@@ -14972,6 +16148,10 @@ END//
SELECT fn7(99999999999);
fn7(99999999999)
9999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn8;
CREATE FUNCTION fn8( f1 decimal (0) unsigned zerofill) returns decimal (0) unsigned zerofill
BEGIN
@@ -14980,7 +16160,9 @@ return f1;
END//
SELECT fn8(999999999);
fn8(999999999)
-0999999999
+1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn9;
CREATE FUNCTION fn9( f1 decimal (0) zerofill) returns decimal (0) zerofill
BEGIN
@@ -14989,7 +16171,10 @@ return f1;
END//
SELECT fn9(-1.00e+09);
fn9(-1.00e+09)
-0000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn10;
CREATE FUNCTION fn10( f1 decimal (0, 0)) returns decimal (0, 0)
BEGIN
@@ -15008,6 +16193,10 @@ END//
SELECT fn11(99999999999);
fn11(99999999999)
9999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn12;
CREATE FUNCTION fn12( f1 decimal (0, 0) unsigned zerofill) returns decimal (0, 0) unsigned zerofill
BEGIN
@@ -15016,7 +16205,9 @@ return f1;
END//
SELECT fn12(999999999);
fn12(999999999)
-0999999999
+1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn13;
CREATE FUNCTION fn13( f1 decimal (0, 0) zerofill) returns decimal (0, 0) zerofill
BEGIN
@@ -15025,7 +16216,10 @@ return f1;
END//
SELECT fn13(-1.00e+09);
fn13(-1.00e+09)
-0000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn14;
CREATE FUNCTION fn14( f1 decimal (63, 30)) returns decimal (63, 30)
BEGIN
@@ -15061,7 +16255,10 @@ return f1;
END//
SELECT fn17(-1.00e+21);
fn17(-1.00e+21)
-000000000000000000000000000000000.000000000000000000000000000000
+000000000000000000000000000000010.000000000000000000000000000000
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn18_d;
CREATE FUNCTION fn18_d( f1 decimal (64)) returns decimal (64)
BEGIN
@@ -15097,7 +16294,10 @@ return f1;
END//
SELECT fn21_d_z(1.00e+00);
fn21_d_z(1.00e+00)
-0000000000000000000000000000000000000000000000000000000000000001
+0000000000000000000000000000000000000000000000000000000000000010
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn22;
CREATE FUNCTION fn22( f1 decimal unsigned) returns decimal unsigned
BEGIN
@@ -15106,7 +16306,10 @@ return f1;
END//
SELECT fn22(1.00e+00);
fn22(1.00e+00)
-1
+10
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn23;
CREATE FUNCTION fn23( f1 decimal unsigned zerofill) returns decimal unsigned zerofill
BEGIN
@@ -15115,7 +16318,10 @@ return f1;
END//
SELECT fn23(1.00e+00);
fn23(1.00e+00)
-0000000001
+0000000010
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn24;
CREATE FUNCTION fn24( f1 decimal zerofill) returns decimal zerofill
BEGIN
@@ -15124,7 +16330,10 @@ return f1;
END//
SELECT fn24(-1.00e+09);
fn24(-1.00e+09)
-0000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn25;
CREATE FUNCTION fn25( f1 double) returns double
BEGIN
@@ -15142,7 +16351,9 @@ return f1;
END//
SELECT fn26(1.00e+00);
fn26(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn27;
CREATE FUNCTION fn27( f1 double unsigned zerofill) returns double unsigned zerofill
BEGIN
@@ -15151,7 +16362,9 @@ return f1;
END//
SELECT fn27(1.00e+00);
fn27(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn28;
CREATE FUNCTION fn28( f1 double zerofill) returns double zerofill
BEGIN
@@ -15160,7 +16373,9 @@ return f1;
END//
SELECT fn28(1.00e+00);
fn28(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn29;
CREATE FUNCTION fn29( f1 float) returns float
BEGIN
@@ -15178,7 +16393,9 @@ return f1;
END//
SELECT fn30(1.00e+00);
fn30(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn31;
CREATE FUNCTION fn31( f1 float unsigned zerofill) returns float unsigned zerofill
BEGIN
@@ -15187,7 +16404,9 @@ return f1;
END//
SELECT fn31(1.00e+00);
fn31(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn32;
CREATE FUNCTION fn32( f1 float zerofill) returns float zerofill
BEGIN
@@ -15196,7 +16415,9 @@ return f1;
END//
SELECT fn32(1.00e+00);
fn32(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn33;
CREATE FUNCTION fn33( f1 float(0)) returns float(0)
BEGIN
@@ -15214,7 +16435,9 @@ return f1;
END//
SELECT fn34(1.00e+00);
fn34(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn35;
CREATE FUNCTION fn35( f1 float(0) unsigned zerofill) returns float(0) unsigned zerofill
BEGIN
@@ -15223,7 +16446,9 @@ return f1;
END//
SELECT fn35(1.00e+00);
fn35(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn36;
CREATE FUNCTION fn36( f1 float(0) zerofill) returns float(0) zerofill
BEGIN
@@ -15232,7 +16457,9 @@ return f1;
END//
SELECT fn36(1.00e+00);
fn36(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn37;
CREATE FUNCTION fn37( f1 float(23)) returns float(23)
BEGIN
@@ -15250,7 +16477,9 @@ return f1;
END//
SELECT fn38(1.00e+00);
fn38(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn39;
CREATE FUNCTION fn39( f1 float(23) unsigned zerofill) returns float(23) unsigned zerofill
BEGIN
@@ -15259,7 +16488,9 @@ return f1;
END//
SELECT fn39(1.00e+00);
fn39(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn40;
CREATE FUNCTION fn40( f1 float(23) zerofill) returns float(23) zerofill
BEGIN
@@ -15268,7 +16499,9 @@ return f1;
END//
SELECT fn40(1.00e+00);
fn40(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn41;
CREATE FUNCTION fn41( f1 float(24)) returns float(24)
BEGIN
@@ -15286,7 +16519,9 @@ return f1;
END//
SELECT fn42(1.00e+00);
fn42(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn43;
CREATE FUNCTION fn43( f1 float(24) unsigned zerofill) returns float(24) unsigned zerofill
BEGIN
@@ -15295,7 +16530,9 @@ return f1;
END//
SELECT fn43(1.00e+00);
fn43(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn44;
CREATE FUNCTION fn44( f1 float(24) zerofill) returns float(24) zerofill
BEGIN
@@ -15304,7 +16541,9 @@ return f1;
END//
SELECT fn44(1.00e+00);
fn44(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn45;
CREATE FUNCTION fn45( f1 float(53)) returns float(53)
BEGIN
@@ -15322,7 +16561,9 @@ return f1;
END//
SELECT fn46(1.00e+00);
fn46(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn47;
CREATE FUNCTION fn47( f1 float(53) unsigned zerofill) returns float(53) unsigned zerofill
BEGIN
@@ -15331,7 +16572,9 @@ return f1;
END//
SELECT fn47(1.00e+00);
fn47(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn48;
CREATE FUNCTION fn48( f1 float(53) zerofill) returns float(53) zerofill
BEGIN
@@ -15340,7 +16583,9 @@ return f1;
END//
SELECT fn48(1.00e+00);
fn48(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn49;
CREATE FUNCTION fn49( f1 int) returns int
BEGIN
@@ -15349,7 +16594,10 @@ return f1;
END//
SELECT fn49(-2.15e+09);
fn49(-2.15e+09)
--2147483648
+-2147483638
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn50;
CREATE FUNCTION fn50( f1 int unsigned) returns int unsigned
BEGIN
@@ -15385,7 +16633,9 @@ return f1;
END//
SELECT fn53(-8388600);
fn53(-8388600)
--8388600
+-8388598
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn54;
CREATE FUNCTION fn54( f1 mediumint unsigned) returns mediumint unsigned
BEGIN
@@ -15412,7 +16662,11 @@ return f1;
END//
SELECT fn56(-8388601);
fn56(-8388601)
-0
+16777215
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn57;
CREATE FUNCTION fn57( f1 numeric) returns numeric
BEGIN
@@ -15421,7 +16675,9 @@ return f1;
END//
SELECT fn57(-999999999);
fn57(-999999999)
--999999999
+-1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn58;
CREATE FUNCTION fn58( f1 numeric (0)) returns numeric (0)
BEGIN
@@ -15430,7 +16686,9 @@ return f1;
END//
SELECT fn58(-999999999);
fn58(-999999999)
--999999999
+-1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn59;
CREATE FUNCTION fn59( f1 numeric (0) unsigned) returns numeric (0) unsigned
BEGIN
@@ -15440,6 +16698,9 @@ END//
SELECT fn59(9999999999);
fn59(9999999999)
9999999999
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn60;
CREATE FUNCTION fn60( f1 numeric (0) unsigned zerofill) returns numeric (0) unsigned zerofill
BEGIN
@@ -15448,7 +16709,9 @@ return f1;
END//
SELECT fn60(99999999);
fn60(99999999)
-0099999999
+0100000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn61;
CREATE FUNCTION fn61( f1 numeric (0) zerofill) returns numeric (0) zerofill
BEGIN
@@ -15457,7 +16720,10 @@ return f1;
END//
SELECT fn61(-99999999);
fn61(-99999999)
-0000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn62;
CREATE FUNCTION fn62( f1 numeric (0, 0)) returns numeric (0, 0)
BEGIN
@@ -15466,7 +16732,9 @@ return f1;
END//
SELECT fn62(-999999999);
fn62(-999999999)
--999999999
+-1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn63;
CREATE FUNCTION fn63( f1 numeric (0, 0) unsigned) returns numeric (0, 0) unsigned
BEGIN
@@ -15476,6 +16744,9 @@ END//
SELECT fn63(9999999999);
fn63(9999999999)
9999999999
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn64;
CREATE FUNCTION fn64( f1 numeric (0, 0) unsigned zerofill) returns numeric (0, 0) unsigned zerofill
BEGIN
@@ -15484,7 +16755,9 @@ return f1;
END//
SELECT fn64(99999999);
fn64(99999999)
-0099999999
+0100000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn65;
CREATE FUNCTION fn65( f1 numeric (0, 0) zerofill) returns numeric (0, 0) zerofill
BEGIN
@@ -15493,7 +16766,10 @@ return f1;
END//
SELECT fn65(-99999999);
fn65(-99999999)
-0000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn66;
CREATE FUNCTION fn66( f1 numeric (63, 30)) returns numeric (63, 30)
BEGIN
@@ -15502,7 +16778,12 @@ return f1;
END//
SELECT fn66(-1e+36);
fn66(-1e+36)
--999999999999999999999999999999999.999999999999999999999999999999
+-999999999999999999999999999999989.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn67;
CREATE FUNCTION fn67( f1 numeric (63, 30) unsigned) returns numeric (63, 30) unsigned
BEGIN
@@ -15512,6 +16793,10 @@ END//
SELECT fn67(1e+36);
fn67(1e+36)
999999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn68;
CREATE FUNCTION fn68( f1 numeric (63, 30) unsigned zerofill) returns numeric (63, 30) unsigned zerofill
BEGIN
@@ -15521,6 +16806,10 @@ END//
SELECT fn68(1e+36);
fn68(1e+36)
999999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn69;
CREATE FUNCTION fn69( f1 numeric (63, 30) zerofill) returns numeric (63, 30) zerofill
BEGIN
@@ -15529,7 +16818,10 @@ return f1;
END//
SELECT fn69(-1e+36);
fn69(-1e+36)
-000000000000000000000000000000000.000000000000000000000000000000
+000000000000000000000000000000010.000000000000000000000000000000
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn70_n;
CREATE FUNCTION fn70_n( f1 numeric (64)) returns numeric (64)
BEGIN
@@ -15577,7 +16869,9 @@ return f1;
END//
SELECT fn74(999999999);
fn74(999999999)
-999999999
+1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn75;
CREATE FUNCTION fn75( f1 numeric unsigned zerofill) returns numeric unsigned zerofill
BEGIN
@@ -15586,7 +16880,9 @@ return f1;
END//
SELECT fn75(999999999);
fn75(999999999)
-0999999999
+1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn76;
CREATE FUNCTION fn76( f1 numeric zerofill) returns numeric zerofill
BEGIN
@@ -15595,7 +16891,10 @@ return f1;
END//
SELECT fn76(-999999999);
fn76(-999999999)
-0000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn77;
CREATE FUNCTION fn77( f1 real) returns real
BEGIN
@@ -15613,7 +16912,9 @@ return f1;
END//
SELECT fn78(1.1);
fn78(1.1)
-1.1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn79;
CREATE FUNCTION fn79( f1 real unsigned zerofill) returns real unsigned zerofill
BEGIN
@@ -15622,7 +16923,9 @@ return f1;
END//
SELECT fn79(1.1);
fn79(1.1)
-1.1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn80;
CREATE FUNCTION fn80( f1 real zerofill) returns real zerofill
BEGIN
@@ -15631,7 +16934,9 @@ return f1;
END//
SELECT fn80(1.1);
fn80(1.1)
-1.1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn81;
CREATE FUNCTION fn81( f1 smallint) returns smallint
BEGIN
@@ -15667,7 +16972,11 @@ return f1;
END//
SELECT fn84(-32601);
fn84(-32601)
-0
+65535
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn85;
CREATE FUNCTION fn85( f1 tinyint) returns tinyint
BEGIN
@@ -15703,45 +17012,37 @@ return f1;
END//
SELECT fn88(-101);
fn88(-101)
-0
+255
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn89;
CREATE FUNCTION fn89( f1 enum('1enum', '2enum')) returns enum('1enum', '2enum')
BEGIN
-if f1 eq "1enum" then
-set f1 = '2enum';
-else
-set f1 = '1enum';
-END if;
-return f1;
+IF f1 = '1enum' THEN
+SET f1 = '2enum';
+ELSE
+SET f1 = '1enum';
+END IF;
+RETURN f1;
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 'eq "1enum" then
-set f1 = '2enum';
-else
-set f1 = '1enum';
-END if;
-return f1;
-END' at line 3
SELECT fn89( '1enum');
-ERROR 42000: FUNCTION d1.fn89 does not exist
+fn89( '1enum')
+2enum
DROP FUNCTION IF EXISTS fn90;
-CREATE FUNCTION fn90( f1 set("1set", "2set")) returns set("1set", "2set")
+CREATE FUNCTION fn90( f1 set('1set', '2set')) returns set('1set', '2set')
BEGIN
-if(f1 == "1set") then
-set f1 = "2set";
-else
-set f1 = "1set";
-END if;
-return f1;
+IF f1 = '1set' THEN
+SET f1 = '2set';
+ELSE
+SET f1 = '1set';
+END IF;
+RETURN f1;
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 '== "1set") then
-set f1 = "2set";
-else
-set f1 = "1set";
-END if;
-return f1;
-END' at line 3
SELECT fn90( '1set');
-ERROR 42000: FUNCTION d1.fn90 does not exist
+fn90( '1set')
+2set
DROP FUNCTION IF EXISTS fn91;
CREATE FUNCTION fn91( f1 date) returns date
BEGIN
@@ -15759,7 +17060,7 @@ return f1;
END//
SELECT fn92( '23:59:59.999999');
fn92( '23:59:59.999999')
-26:00:00
+25:59:59
DROP FUNCTION IF EXISTS fn93;
CREATE FUNCTION fn93( f1 datetime) returns datetime
BEGIN
@@ -15768,7 +17069,7 @@ return f1;
END//
SELECT fn93('1997-12-31 23:59:59.999999');
fn93('1997-12-31 23:59:59.999999')
-1998-01-02 01:01:01
+1998-01-02 01:01:00
DROP FUNCTION IF EXISTS fn94;
CREATE FUNCTION fn94( f1 char) returns char
BEGIN
@@ -15778,6 +17079,8 @@ END//
SELECT fn94( 'h');
fn94( 'h')
a
+Warnings:
+Warning 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn95;
CREATE FUNCTION fn95( f1 char ascii) returns char ascii
BEGIN
@@ -15787,15 +17090,19 @@ END//
SELECT fn95('h');
fn95('h')
a
+Warnings:
+Warning 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn96;
-CREATE FUNCTION fn96( f1 char binary) returns char binary
+CREATE FUNCTION fn96( f1 binary) returns binary(2)
BEGIN
set f1 = concat('a', f1);
return f1;
END//
SELECT fn96( 'h');
fn96( 'h')
-a
+a
+Warnings:
+Warning 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn97;
CREATE FUNCTION fn97( f1 longtext) returns longtext
BEGIN
@@ -15917,7 +17224,7 @@ SELECT f1;
END//
CALL sp2(1.84e+19);
f1
--9223372036854775808
+18400000000000000000
DROP PROCEDURE IF EXISTS sp3;
CREATE PROCEDURE sp3( f1 bigint unsigned zerofill)
BEGIN
@@ -15926,7 +17233,7 @@ SELECT f1;
END//
CALL sp3(1.84e+17);
f1
-184000000000000000
+00184000000000000000
DROP PROCEDURE IF EXISTS sp4;
CREATE PROCEDURE sp4( f1 bigint zerofill)
BEGIN
@@ -15935,31 +17242,27 @@ SELECT f1;
END//
CALL sp4(-9.22e+15);
f1
--9220000000000000
+00000000000000000000
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp5;
CREATE PROCEDURE sp5( f1 decimal)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: default (10) for DECIMAL not checked, decimal digits shown although not defined
CALL sp5(-1.00e+09);
f1
--1000000000.000000000
+-1000000000
DROP PROCEDURE IF EXISTS sp6;
CREATE PROCEDURE sp6( f1 decimal (0))
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
CALL sp6(-1.00e+09);
f1
--1000000000.000000000
+-1000000000
DROP PROCEDURE IF EXISTS sp7;
CREATE PROCEDURE sp7( f1 decimal (0) unsigned)
BEGIN
@@ -15968,7 +17271,11 @@ SELECT f1;
END//
CALL sp7(99999999999);
f1
-99999999999.000000000
+9999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp8;
CREATE PROCEDURE sp8( f1 decimal (0) unsigned zerofill)
BEGIN
@@ -15977,199 +17284,201 @@ SELECT f1;
END//
CALL sp8(999999999);
f1
-999999999.000000000
+1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp9;
CREATE PROCEDURE sp9( f1 decimal (0) zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
CALL sp9(-1.00e+09);
f1
--1000000000.000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp10;
CREATE PROCEDURE sp10( f1 decimal (0, 0))
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
CALL sp10(-1.00e+09);
f1
--1000000000.000000000
+-1000000000
DROP PROCEDURE IF EXISTS sp11;
CREATE PROCEDURE sp11( f1 decimal (0, 0) unsigned)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
CALL sp11(99999999999);
f1
-99999999999.000000000
+9999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp12;
CREATE PROCEDURE sp12( f1 decimal (0, 0) unsigned zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
CALL sp12(999999999);
f1
-999999999.000000000
+1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp13;
CREATE PROCEDURE sp13( f1 decimal (0, 0) zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
CALL sp13(-1.00e+09);
f1
--1000000000.000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp14;
CREATE PROCEDURE sp14( f1 decimal (63, 30))
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: wrong number of decimal digits shown
CALL sp14(-1.00e+21);
f1
--1000000000000000000000.000000000
+-1000000000000000000000.000000000000000000000000000000
DROP PROCEDURE IF EXISTS sp15;
CREATE PROCEDURE sp15( f1 decimal (63, 30) unsigned)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: wrong number of decimal digits shown
CALL sp15(1.00e+16);
f1
-10000000000000000.000000000
+10000000000000000.000000000000000000000000000000
DROP PROCEDURE IF EXISTS sp16;
CREATE PROCEDURE sp16( f1 decimal (63, 30) unsigned zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: wrong number of decimal digits shown
CALL sp16(1.00e+16);
f1
-10000000000000000.000000000
+000000000000000010000000000000000.000000000000000000000000000000
DROP PROCEDURE IF EXISTS sp17;
CREATE PROCEDURE sp17( f1 decimal (63, 30) zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: wrong number of decimal digits shown
CALL sp17(-1.00e+21);
f1
--1000000000000000000000.000000000
+000000000000000000000000000000010.000000000000000000000000000000
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp18_d;
CREATE PROCEDURE sp18_d( f1 decimal (64))
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
+CALL sp18_d(-1.00e+30);
+f1
+-1000000000000000000000000000000
CALL sp18_d( -1000000000000000000000000000000 );
f1
--1000000000000000000000000000000.000000000
+-1000000000000000000000000000000
DROP PROCEDURE IF EXISTS sp19_du;
CREATE PROCEDURE sp19_du( f1 decimal (64) unsigned)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
+CALL sp19_du(1.00e+20);
+f1
+100000000000000000000
CALL sp19_du( 100000000000000000000 );
f1
-100000000000000000000.000000000
+100000000000000000000
+CALL sp19_du(1.00e+24);
+f1
+1000000000000000000000000
CALL sp19_du( 1000000000000000000000000 );
f1
-1000000000000000000000000.000000000
+1000000000000000000000000
DROP PROCEDURE IF EXISTS sp20_duz;
CREATE PROCEDURE sp20_duz( f1 decimal (64) unsigned zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
+CALL sp20_duz(1.00e+20);
+f1
+0000000000000000000000000000000000000000000100000000000000000000
CALL sp20_duz( 100000000000000000000 );
f1
-100000000000000000000.000000000
+0000000000000000000000000000000000000000000100000000000000000000
+CALL sp20_duz(1.00e+24);
+f1
+0000000000000000000000000000000000000001000000000000000000000000
CALL sp20_duz( 1000000000000000000000000 );
f1
-1000000000000000000000000.000000000
+0000000000000000000000000000000000000001000000000000000000000000
DROP PROCEDURE IF EXISTS sp21;
CREATE PROCEDURE sp21( f1 decimal (64) zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
CALL sp21(1.00e+00);
f1
-1.000000000
+0000000000000000000000000000000000000000000000000000000000000010
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp22;
CREATE PROCEDURE sp22( f1 decimal unsigned)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
CALL sp22(1.00e+00);
f1
-1.000000000
+10
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp23;
CREATE PROCEDURE sp23( f1 decimal unsigned zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
CALL sp23(1.00e+00);
f1
-1.000000000
+0000000010
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp24;
CREATE PROCEDURE sp24( f1 decimal zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
CALL sp24(-1.00e+09);
f1
--1000000000.000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp25;
CREATE PROCEDURE sp25( f1 double)
BEGIN
@@ -16187,7 +17496,9 @@ SELECT f1;
END//
CALL sp26(1.00e+00);
f1
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp27;
CREATE PROCEDURE sp27( f1 double unsigned zerofill)
BEGIN
@@ -16196,7 +17507,9 @@ SELECT f1;
END//
CALL sp27(1.00e+00);
f1
-1
+0000000000000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp28;
CREATE PROCEDURE sp28( f1 double zerofill)
BEGIN
@@ -16205,7 +17518,9 @@ SELECT f1;
END//
CALL sp28(1.00e+00);
f1
-1
+0000000000000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp29;
CREATE PROCEDURE sp29( f1 float)
BEGIN
@@ -16223,7 +17538,9 @@ SELECT f1;
END//
CALL sp30(1.00e+00);
f1
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp31;
CREATE PROCEDURE sp31( f1 float unsigned zerofill)
BEGIN
@@ -16232,7 +17549,9 @@ SELECT f1;
END//
CALL sp31(1.00e+00);
f1
-1
+000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp32;
CREATE PROCEDURE sp32( f1 float zerofill)
BEGIN
@@ -16241,7 +17560,9 @@ SELECT f1;
END//
CALL sp32(1.00e+00);
f1
-1
+000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp33;
CREATE PROCEDURE sp33( f1 float(0))
BEGIN
@@ -16259,7 +17580,9 @@ SELECT f1;
END//
CALL sp34(1.00e+00);
f1
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp35;
CREATE PROCEDURE sp35( f1 float(0) unsigned zerofill)
BEGIN
@@ -16268,7 +17591,9 @@ SELECT f1;
END//
CALL sp35(1.00e+00);
f1
-1
+000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp36;
CREATE PROCEDURE sp36( f1 float(0) zerofill)
BEGIN
@@ -16277,7 +17602,9 @@ SELECT f1;
END//
CALL sp36(1.00e+00);
f1
-1
+000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp37;
CREATE PROCEDURE sp37( f1 float(23))
BEGIN
@@ -16295,7 +17622,9 @@ SELECT f1;
END//
CALL sp38(1.00e+00);
f1
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp39;
CREATE PROCEDURE sp39( f1 float(23) unsigned zerofill)
BEGIN
@@ -16304,7 +17633,9 @@ SELECT f1;
END//
CALL sp39(1.00e+00);
f1
-1
+000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp40;
CREATE PROCEDURE sp40( f1 float(23) zerofill)
BEGIN
@@ -16313,7 +17644,9 @@ SELECT f1;
END//
CALL sp40(1.00e+00);
f1
-1
+000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp41;
CREATE PROCEDURE sp41( f1 float(24))
BEGIN
@@ -16331,7 +17664,9 @@ SELECT f1;
END//
CALL sp42(1.00e+00);
f1
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp43;
CREATE PROCEDURE sp43( f1 float(24) unsigned zerofill)
BEGIN
@@ -16340,7 +17675,9 @@ SELECT f1;
END//
CALL sp43(1.00e+00);
f1
-1
+000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp44;
CREATE PROCEDURE sp44( f1 float(24) zerofill)
BEGIN
@@ -16349,7 +17686,9 @@ SELECT f1;
END//
CALL sp44(1.00e+00);
f1
-1
+000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp45;
CREATE PROCEDURE sp45( f1 float(53))
BEGIN
@@ -16367,7 +17706,9 @@ SELECT f1;
END//
CALL sp46(1.00e+00);
f1
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp47;
CREATE PROCEDURE sp47( f1 float(53) unsigned zerofill)
BEGIN
@@ -16376,7 +17717,9 @@ SELECT f1;
END//
CALL sp47(1.00e+00);
f1
-1
+0000000000000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp48;
CREATE PROCEDURE sp48( f1 float(53) zerofill)
BEGIN
@@ -16385,7 +17728,9 @@ SELECT f1;
END//
CALL sp48(1.00e+00);
f1
-1
+0000000000000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp49;
CREATE PROCEDURE sp49( f1 int)
BEGIN
@@ -16394,7 +17739,10 @@ SELECT f1;
END//
CALL sp49(-2.15e+09);
f1
--2150000000
+-2147483638
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp50;
CREATE PROCEDURE sp50( f1 int unsigned)
BEGIN
@@ -16421,7 +17769,7 @@ SELECT f1;
END//
CALL sp52(2.15e+08);
f1
-215000000
+0215000000
DROP PROCEDURE IF EXISTS sp53;
CREATE PROCEDURE sp53( f1 mediumint)
BEGIN
@@ -16430,7 +17778,9 @@ SELECT f1;
END//
CALL sp53(-8388600);
f1
--8388600
+-8388598
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp54;
CREATE PROCEDURE sp54( f1 mediumint unsigned)
BEGIN
@@ -16457,7 +17807,11 @@ SELECT f1;
END//
CALL sp56(-8388601);
f1
--8388602
+16777215
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp57;
CREATE PROCEDURE sp57( f1 numeric)
BEGIN
@@ -16466,7 +17820,9 @@ SELECT f1;
END//
CALL sp57(-999999999);
f1
--999999999.000000000
+-1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp58;
CREATE PROCEDURE sp58( f1 numeric (0))
BEGIN
@@ -16475,7 +17831,9 @@ SELECT f1;
END//
CALL sp58(-999999999);
f1
--999999999.000000000
+-1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp59;
CREATE PROCEDURE sp59( f1 numeric (0) unsigned)
BEGIN
@@ -16484,7 +17842,10 @@ SELECT f1;
END//
CALL sp59(9999999999);
f1
-9999999999.000000000
+9999999999
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp60;
CREATE PROCEDURE sp60( f1 numeric (0) unsigned zerofill)
BEGIN
@@ -16493,7 +17854,9 @@ SELECT f1;
END//
CALL sp60(99999999);
f1
-99999999.000000000
+0100000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp61;
CREATE PROCEDURE sp61( f1 numeric (0) zerofill)
BEGIN
@@ -16502,7 +17865,10 @@ SELECT f1;
END//
CALL sp61(-99999999);
f1
--99999999.000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp62;
CREATE PROCEDURE sp62( f1 numeric (0, 0))
BEGIN
@@ -16511,7 +17877,9 @@ SELECT f1;
END//
CALL sp62(-999999999);
f1
--999999999.000000000
+-1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp63;
CREATE PROCEDURE sp63( f1 numeric (0, 0) unsigned)
BEGIN
@@ -16520,7 +17888,10 @@ SELECT f1;
END//
CALL sp63(9999999999);
f1
-9999999999.000000000
+9999999999
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp64;
CREATE PROCEDURE sp64( f1 numeric (0, 0) unsigned zerofill)
BEGIN
@@ -16529,7 +17900,9 @@ SELECT f1;
END//
CALL sp64(99999999);
f1
-99999999.000000000
+0100000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp65;
CREATE PROCEDURE sp65( f1 numeric (0, 0) zerofill)
BEGIN
@@ -16538,79 +17911,146 @@ SELECT f1;
END//
CALL sp65(-99999999);
f1
--99999999.000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp66_n;
CREATE PROCEDURE sp66_n( f1 numeric (63, 30))
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
+CALL sp66_n(-1e+36);
+f1
+-999999999999999999999999999999989.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
CALL sp66_n( -1000000000000000000000000000000000000 );
f1
--1000000000000000000000000000000000000.000000000
+-999999999999999999999999999999989.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp67_nu;
CREATE PROCEDURE sp67_nu( f1 numeric (63, 30) unsigned)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
+CALL sp67_nu(1e+36);
+f1
+999999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
CALL sp67_nu( 1000000000000000000000000000000000000 );
f1
-1000000000000000000000000000000000000.000000000
+999999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp68_nuz;
CREATE PROCEDURE sp68_nuz( f1 numeric (63, 30) unsigned zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
+CALL sp68_nuz(1e+36);
+f1
+999999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
CALL sp68_nuz( 1000000000000000000000000000000000000 );
f1
-1000000000000000000000000000000000000.000000000
+999999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp69_n_z;
CREATE PROCEDURE sp69_n_z( f1 numeric (63, 30) zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
+CALL sp69_n_z(-1e+36);
+f1
+000000000000000000000000000000010.000000000000000000000000000000
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
CALL sp69_n_z( -1000000000000000000000000000000000000 );
f1
--1000000000000000000000000000000000000.000000000
+000000000000000000000000000000010.000000000000000000000000000000
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp70_n;
CREATE PROCEDURE sp70_n( f1 numeric (64))
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
+CALL sp70_n(-1e+40);
+f1
+-10000000000000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
CALL sp70_n( -10000000000000000000000000000000000000000 );
f1
--10000000000000000000000000000000000000000.000000000
+-10000000000000000000000000000000000000000
DROP PROCEDURE IF EXISTS sp71_nu;
CREATE PROCEDURE sp71_nu( f1 numeric (64) unsigned)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
+CALL sp71_nu(1.00e+40);
+f1
+10000000000000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
CALL sp71_nu( 10000000000000000000000000000000000000000 );
f1
-10000000000000000000000000000000000000000.000000000
+10000000000000000000000000000000000000000
DROP PROCEDURE IF EXISTS sp72_nuz;
CREATE PROCEDURE sp72_nuz( f1 numeric (64) unsigned zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
+CALL sp72_nuz(1.00e+40);
+f1
+0000000000000000000000010000000000000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
CALL sp72_nuz( 10000000000000000000000000000000000000000 );
f1
-10000000000000000000000000000000000000000.000000000
+0000000000000000000000010000000000000000000000000000000000000000
DROP PROCEDURE IF EXISTS sp73_n_z;
CREATE PROCEDURE sp73_n_z( f1 numeric (64) zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
+CALL sp73_n_z(1.00e+40);
+f1
+0000000000000000000000010000000000000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
CALL sp73_n_z( 10000000000000000000000000000000000000000 );
f1
-10000000000000000000000000000000000000000.000000000
+0000000000000000000000010000000000000000000000000000000000000000
DROP PROCEDURE IF EXISTS sp74;
CREATE PROCEDURE sp74( f1 numeric unsigned)
BEGIN
@@ -16619,7 +18059,9 @@ SELECT f1;
END//
CALL sp74(999999999);
f1
-999999999.000000000
+1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp75;
CREATE PROCEDURE sp75( f1 numeric unsigned zerofill)
BEGIN
@@ -16628,7 +18070,9 @@ SELECT f1;
END//
CALL sp75(999999999);
f1
-999999999.000000000
+1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp76;
CREATE PROCEDURE sp76( f1 numeric zerofill)
BEGIN
@@ -16637,7 +18081,10 @@ SELECT f1;
END//
CALL sp76(-999999999);
f1
--999999999.000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp77;
CREATE PROCEDURE sp77( f1 real)
BEGIN
@@ -16646,7 +18093,7 @@ SELECT f1;
END//
CALL sp77(1.1);
f1
-1.10000
+1.1
DROP PROCEDURE IF EXISTS sp78;
CREATE PROCEDURE sp78( f1 real unsigned)
BEGIN
@@ -16655,7 +18102,9 @@ SELECT f1;
END//
CALL sp78(1.1);
f1
-1.10000
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp79;
CREATE PROCEDURE sp79( f1 real unsigned zerofill)
BEGIN
@@ -16664,7 +18113,9 @@ SELECT f1;
END//
CALL sp79(1.1);
f1
-1.10000
+0000000000000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp80;
CREATE PROCEDURE sp80( f1 real zerofill)
BEGIN
@@ -16673,7 +18124,9 @@ SELECT f1;
END//
CALL sp80(1.1);
f1
-1.10000
+0000000000000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp81;
CREATE PROCEDURE sp81( f1 smallint)
BEGIN
@@ -16709,7 +18162,11 @@ SELECT f1;
END//
CALL sp84(-32601);
f1
--32602
+65535
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp85;
CREATE PROCEDURE sp85( f1 tinyint)
BEGIN
@@ -16745,9 +18202,23 @@ SELECT f1;
END//
CALL sp88(-101);
f1
--102
+255
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp89;
+CREATE PROCEDURE sp89( f1 enum('1enum', '2enum'))
+BEGIN
+IF f1 = '1enum' THEN set f1 = '2enum'; ELSE set f1 = '1enum'; END IF;
+END//
+CALL sp89( '1enum');
DROP PROCEDURE IF EXISTS sp90;
+CREATE PROCEDURE sp90( f1 set('1set', '2set'))
+BEGIN
+IF f1 = '1set' THEN set f1 = '2set'; ELSE set f1 = '1set'; END IF;
+END//
+CALL sp90( '1set');
DROP PROCEDURE IF EXISTS sp91;
CREATE PROCEDURE sp91( f1 date)
BEGIN
@@ -16765,7 +18236,7 @@ SELECT f1;
END//
CALL sp92( '23:59:59.999999');
f1
-26:00:00.999997
+25:59:59
DROP PROCEDURE IF EXISTS sp93;
CREATE PROCEDURE sp93( f1 datetime)
BEGIN
@@ -16774,7 +18245,7 @@ SELECT f1;
END//
CALL sp93('1997-12-31 23:59:59.999999');
f1
-1998-01-02 01:01:01.000001
+1998-01-02 01:01:00
DROP PROCEDURE IF EXISTS sp94;
CREATE PROCEDURE sp94( f1 char)
BEGIN
@@ -16783,7 +18254,9 @@ SELECT f1;
END//
CALL sp94( 'h');
f1
-ah
+a
+Warnings:
+Warning 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp95;
CREATE PROCEDURE sp95( f1 char ascii)
BEGIN
@@ -16792,7 +18265,9 @@ SELECT f1;
END//
CALL sp95( 'h');
f1
-ah
+a
+Warnings:
+Warning 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp96;
CREATE PROCEDURE sp96( f1 char binary)
BEGIN
@@ -16801,7 +18276,9 @@ SELECT f1;
END//
CALL sp96( 'h');
f1
-ah
+a
+Warnings:
+Warning 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp97;
CREATE PROCEDURE sp97( f1 longtext)
BEGIN
@@ -16846,7 +18323,7 @@ SELECT f1;
END//
CALL sp101(51);
f1
-61
+2061
DROP PROCEDURE IF EXISTS sp102;
CREATE PROCEDURE sp102( f1 year(4))
BEGIN
@@ -16901,6 +18378,8 @@ END//
CALL sp107(2.00e+13);
f1
returned
+Warnings:
+returned 1265 Data truncated for column 'f1' at row 1
USE db_storedproc;
DROP DATABASE db1;
DROP DATABASE IF EXISTS db1;
@@ -16937,9 +18416,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute01();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-61 61 71 61 61 71 2033 2033 2084 2033 2033 2084
+2061 2061 2071 2061 2061 2071 2033 2033 2084 2033 2033 2084
var1 var2 var3 var4 var5 var6 var7 var8
-61 71 61 71 2033 2084 2033 2084
+2061 2071 2061 2071 2033 2084 2033 2084
DROP PROCEDURE spexecute01;
DROP PROCEDURE sp1;
DROP PROCEDURE IF EXISTS sp2;
@@ -17010,9 +18489,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute03();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-ah ah aah ah ah aah helloworld helloworld NULL helloworld helloworld hellohelloworld
+a a a a a a helloworld helloworld NULL helloworld helloworld hellohelloworld
var1 var2 var3 var4 var5 var6 var7 var8
-ah aah ah aah helloworld NULL helloworld hellohelloworld
+a a a a helloworld NULL helloworld hellohelloworld
DROP PROCEDURE spexecute03;
DROP PROCEDURE sp3;
DROP PROCEDURE IF EXISTS sp4;
@@ -17155,7 +18634,7 @@ SELECT var7, var8;
END//
CALL spexecute07();
var1 var2
-9223372036854775807 NULL
+18400000000000000000 NULL
var3 var4
-9220000000000000000 NULL
var5 var6
@@ -17163,7 +18642,7 @@ var5 var6
var7 var8
-9220000000000000000 NULL
f1 f2 f3
-9223372036854775807 9223372036854775807 NULL
+18400000000000000000 18400000000000000000 NULL
f4 f5 f6
-9220000000000000000 -9220000000000000000 NULL
f7 f8 f9
@@ -17171,7 +18650,7 @@ f7 f8 f9
f10 f11 f12
-9220000000000000000 -9220000000000000000 NULL
f1 f2 f3
--2 -2 -2
+18353255926290448384 18353255926290448384 18353255926290448384
f4 f5 f6
-9220000000000000000 6744073709551616 6744073709551616
f7 f8 f9
@@ -17179,7 +18658,7 @@ f7 f8 f9
f10 f11 f12
-9220000000000000000 6744073709551616 6744073709551616
var1 var2
--2 -2
+18353255926290448384 18353255926290448384
var3 var4
6744073709551616 6744073709551616
var5 var6
@@ -17237,9 +18716,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute08();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-368000000000000000 368000000000000000 368000000000000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+00368000000000000000 00368000000000000000 00368000000000000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-368000000000000000 368000000000000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+00368000000000000000 00368000000000000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute08;
DROP PROCEDURE sp8;
DROP PROCEDURE IF EXISTS sp9;
@@ -17291,9 +18770,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute09();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--18440000000000000 -18440000000000000 -18439999999999990 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+00000000000000000000 00000000000000000000 00000000000000000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--18440000000000000 -18439999999999990 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+00000000000000000000 00000000000000000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute09;
DROP PROCEDURE sp9;
DROP PROCEDURE IF EXISTS sp10;
@@ -17337,9 +18816,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute10();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--1000000000.000000000 -1000000000.000000000 -999999990.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-1000000000 -1000000000 -999999990 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--1000000000.000000000 -999999990.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-1000000000 -999999990 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute10;
DROP PROCEDURE sp10;
DROP PROCEDURE IF EXISTS sp11;
@@ -17372,9 +18851,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute11();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1000000000.000000000 1000000000.000000000 1000000010.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+1000000000 1000000000 1000000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1000000000.000000000 1000000010.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+1000000000 1000000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute11;
DROP PROCEDURE sp11;
DROP PROCEDURE IF EXISTS sp12;
@@ -17407,9 +18886,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute12();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-99999999999.000000000 99999999999.000000000 100000000009.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+9999999999 9999999999 9999999999 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-99999999999.000000000 100000000009.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+9999999999 9999999999 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute12;
DROP PROCEDURE sp12;
DROP PROCEDURE IF EXISTS sp13;
@@ -17442,9 +18921,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute13();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--1000000000.000000000 -1000000000.000000000 -999999990.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000010 0000000010 0000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--1000000000.000000000 -999999990.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000010 0000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute13;
DROP PROCEDURE sp13;
DROP PROCEDURE IF EXISTS sp14;
@@ -17477,9 +18956,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute14();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--1000000000000000000000.000000000 -1000000000000000000000.000000000 -999999999999999999990.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-1000000000000000000000.000000000000000000000000000000 -1000000000000000000000.000000000000000000000000000000 -999999999999999999990.000000000000000000000000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--1000000000000000000000.000000000 -999999999999999999990.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-1000000000000000000000.000000000000000000000000000000 -999999999999999999990.000000000000000000000000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute14;
DROP PROCEDURE sp14;
DROP PROCEDURE IF EXISTS sp15;
@@ -17545,9 +19024,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute16();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000010 0000000000000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute16;
DROP PROCEDURE sp16;
DROP PROCEDURE IF EXISTS sp17;
@@ -17579,9 +19058,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute17();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+10 10 20 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10 20 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute17;
DROP PROCEDURE sp17;
DROP PROCEDURE IF EXISTS sp18;
@@ -17613,9 +19092,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute18();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000010 0000000000000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute18;
DROP PROCEDURE sp18;
DROP PROCEDURE IF EXISTS sp19;
@@ -17647,9 +19126,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute19();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+10 10 20 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10 20 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute19;
DROP PROCEDURE sp19;
DROP PROCEDURE IF EXISTS sp20;
@@ -17681,9 +19160,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute20();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000010 000000000010 000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000010 000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute20;
DROP PROCEDURE sp20;
DROP PROCEDURE IF EXISTS sp21;
@@ -17715,9 +19194,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute21();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000010 000000000010 000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000010 000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute21;
DROP PROCEDURE sp21;
DROP PROCEDURE IF EXISTS sp22;
@@ -17783,9 +19262,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute23();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--999999999.000000000 -999999999.000000000 -999999989.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-1000000000 -1000000000 -999999990 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--999999999.000000000 -999999989.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-1000000000 -999999990 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute23;
DROP PROCEDURE sp23;
DROP PROCEDURE IF EXISTS sp24;
@@ -17817,9 +19296,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute24();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1.10000 1.10000 11.10000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+1.1 1.1 11.1 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1.10000 11.10000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+1.1 11.1 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute24;
DROP PROCEDURE sp24;
DROP PROCEDURE IF EXISTS sp25;
@@ -17851,9 +19330,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute25();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--65402 -65402 -65392 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-32758 -32758 -32748 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--65402 -65392 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-32758 -32748 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute25;
DROP PROCEDURE sp25;
DROP PROCEDURE IF EXISTS sp26;
@@ -17919,9 +19398,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute27();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-26:00:00.999997 26:00:00.999997 28:00:01.999995 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+25:59:59 25:59:59 27:59:59 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-26:00:00.999997 28:00:01.999995 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+25:59:59 27:59:59 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute27;
DROP PROCEDURE sp27;
DROP PROCEDURE IF EXISTS sp28;
@@ -17953,9 +19432,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute28();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1998-01-02 01:01:01.000001 1998-01-02 01:01:01.000001 1998-01-03 02:02:02.000003 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+1998-01-02 01:01:00 1998-01-02 01:01:00 1998-01-03 02:02:01 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1998-01-02 01:01:01.000001 1998-01-03 02:02:02.000003 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+1998-01-02 01:01:00 1998-01-03 02:02:01 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute28;
DROP PROCEDURE sp28;
DROP PROCEDURE IF EXISTS sp29;
@@ -17987,9 +19466,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute29();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+10 10 20 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10 20 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute29;
DROP PROCEDURE sp29;
DROP PROCEDURE IF EXISTS sp30;
@@ -18021,9 +19500,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute30();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000010 000000000010 000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000010 000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute30;
DROP PROCEDURE sp30;
DROP PROCEDURE IF EXISTS sp31;
@@ -18089,9 +19568,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute32();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+10 10 20 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10 20 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute32;
DROP PROCEDURE sp32;
DROP PROCEDURE IF EXISTS sp33;
@@ -18123,9 +19602,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute33();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000010 000000000010 000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000010 000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute33;
DROP PROCEDURE sp33;
DROP PROCEDURE IF EXISTS sp34;
@@ -18191,9 +19670,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute35();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+10 10 20 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10 20 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute35;
DROP PROCEDURE sp35;
DROP PROCEDURE IF EXISTS sp36;
@@ -18225,9 +19704,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute36();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000010 000000000010 000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000010 000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute36;
DROP PROCEDURE sp36;
DROP PROCEDURE IF EXISTS sp37;
@@ -18293,9 +19772,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute38();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+10 10 20 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10 20 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute38;
DROP PROCEDURE sp38;
DROP PROCEDURE IF EXISTS sp39;
@@ -18327,9 +19806,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute39();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000010 0000000000000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute39;
DROP PROCEDURE sp39;
DROP PROCEDURE IF EXISTS sp40;
@@ -18361,9 +19840,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute40();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1.10000 1.10000 11.10000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+10 10 20 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1.10000 11.10000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10 20 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute40;
DROP PROCEDURE sp40;
DROP PROCEDURE IF EXISTS sp41;
@@ -18395,9 +19874,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute41();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1.10000 1.10000 11.10000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000010 0000000000000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1.10000 11.10000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute41;
DROP PROCEDURE sp41;
DROP PROCEDURE IF EXISTS sp42;
@@ -18429,9 +19908,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute42();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1.10000 1.10000 11.10000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000010 0000000000000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1.10000 11.10000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute42;
DROP PROCEDURE sp42;
DROP PROCEDURE IF EXISTS sp43;
@@ -18463,9 +19942,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute43();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--999999999.000000000 -999999999.000000000 -999999989.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-1000000000 -1000000000 -999999990 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--999999999.000000000 -999999989.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-1000000000 -999999990 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute43;
DROP PROCEDURE sp43;
DROP PROCEDURE IF EXISTS sp44;
@@ -18497,9 +19976,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute44();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-9999999999.000000000 9999999999.000000000 10000000009.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+9999999999 9999999999 9999999999 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-9999999999.000000000 10000000009.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+9999999999 9999999999 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute44;
DROP PROCEDURE sp44;
DROP PROCEDURE IF EXISTS sp45;
@@ -18531,9 +20010,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute45();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--99999999.000000000 -99999999.000000000 -99999989.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000010 0000000010 0000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--99999999.000000000 -99999989.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000010 0000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute45;
DROP PROCEDURE sp45;
DROP PROCEDURE IF EXISTS sp46;
@@ -18565,9 +20044,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute46();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--999999999.000000000 -999999999.000000000 -999999989.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-1000000000 -1000000000 -999999990 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--999999999.000000000 -999999989.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-1000000000 -999999990 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute46;
DROP PROCEDURE sp46;
DROP PROCEDURE IF EXISTS sp47;
@@ -18599,9 +20078,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute47();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-9999999999.000000000 9999999999.000000000 10000000009.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+9999999999 9999999999 9999999999 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-9999999999.000000000 10000000009.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+9999999999 9999999999 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute47;
DROP PROCEDURE sp47;
DROP PROCEDURE IF EXISTS sp48;
@@ -18633,9 +20112,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute48();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--99999999.000000000 -99999999.000000000 -99999989.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000010 0000000010 0000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--99999999.000000000 -99999989.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000010 0000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute48;
DROP PROCEDURE sp48;
DROP PROCEDURE IF EXISTS sp49;
@@ -18667,9 +20146,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute49();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--999999999.000000000 -999999999.000000000 -999999989.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+10 10 20 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--999999999.000000000 -999999989.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10 20 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute49;
DROP PROCEDURE sp49;
DROP PROCEDURE IF EXISTS sp50;
@@ -18701,9 +20180,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute50();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-9999999999.000000000 9999999999.000000000 10000000009.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+9999999999 9999999999 9999999999 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-9999999999.000000000 10000000009.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+9999999999 9999999999 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute50;
DROP PROCEDURE sp50;
DROP PROCEDURE IF EXISTS sp51;
@@ -18735,9 +20214,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute51();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--99999999.000000000 -99999999.000000000 -99999989.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000010 0000000010 0000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--99999999.000000000 -99999989.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000010 0000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute51;
DROP PROCEDURE sp51;
DROP PROCEDURE IF EXISTS sp52;
@@ -18769,9 +20248,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute52();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--100000000000000000000.000000000 -10000000000000000000000.000000000 -99999999999999999990.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-100000000000000000000.000000000000000000000000000000 -10000000000000000000000.000000000000000000000000000000 -99999999999999999990.000000000000000000000000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--10000000000000000000000.000000000 -99999999999999999990.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-10000000000000000000000.000000000000000000000000000000 -99999999999999999990.000000000000000000000000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute52;
DROP PROCEDURE sp52;
DROP PROCEDURE IF EXISTS sp53;
@@ -18803,9 +20282,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute53();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--100000000000000000000.000000000 -10000000000000000000000.000000000 -99999999999999999990.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-100000000000000000000 -10000000000000000000000 -99999999999999999990 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--10000000000000000000000.000000000 -99999999999999999990.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-10000000000000000000000 -99999999999999999990 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute53;
DROP PROCEDURE sp53;
DROP PROCEDURE IF EXISTS sp54;
@@ -18837,9 +20316,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute54();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-100000000000000000000.000000000 10000000000000000000000.000000000 100000000000000000010.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+100000000000000000000 10000000000000000000000 100000000000000000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-10000000000000000000000.000000000 100000000000000000010.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10000000000000000000000 100000000000000000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute54;
DROP PROCEDURE sp54;
DROP PROCEDURE IF EXISTS sp55;
@@ -18871,9 +20350,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute55();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--100000000000000000000.000000000 -10000000000000000000000.000000000 -99999999999999999990.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000000000000000000000000000000000000000000000000000000000010 0000000000000000000000000000000000000000000000000000000000000010 0000000000000000000000000000000000000000000000000000000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--10000000000000000000000.000000000 -99999999999999999990.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000000000000000000000000000000000000000000000000000000000010 0000000000000000000000000000000000000000000000000000000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute55;
DROP PROCEDURE sp55;
DROP PROCEDURE IF EXISTS sp56;
@@ -18905,9 +20384,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute56();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-61 61 71 61 61 71 61 61 71 61 61 71
+2061 2061 2071 2061 2061 2071 2061 2061 2071 2061 2061 2071
var1 var2 var3 var4 var5 var6 var7 var8
-61 71 61 71 61 71 61 71
+2061 2071 2061 2071 2061 2071 2061 2071
DROP PROCEDURE spexecute56;
DROP PROCEDURE sp56;
DROP PROCEDURE IF EXISTS sp57;
@@ -19041,9 +20520,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute60();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-ah ah aah ah ah aah ah ah aah ah ah aah
+a a a a a a a a a a a a
var1 var2 var3 var4 var5 var6 var7 var8
-ah aah ah aah ah aah ah aah
+a a a a a a a a
DROP PROCEDURE spexecute60;
DROP PROCEDURE sp60;
DROP PROCEDURE IF EXISTS sp61;
@@ -19075,9 +20554,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute61();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-ah ah aah ah ah aah ah ah NULL ah ah aah
+a a a a a a a a NULL a a a
var1 var2 var3 var4 var5 var6 var7 var8
-ah aah ah aah ah NULL ah aah
+a a a a a NULL a a
DROP PROCEDURE spexecute61;
DROP PROCEDURE sp61;
DROP PROCEDURE IF EXISTS sp62;
@@ -19177,9 +20656,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute64();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1000000000.000000000 1000000000.000000000 1000000010.000000000 1000000000.000000000 1000000000.000000000 1000000010.000000000 1000000000.000000000 1000000000.000000000 1000000010.000000000 1000000000.000000000 1000000000.000000000 1000000010.000000000
+1000000000 1000000000 1000000010 1000000000 1000000000 1000000010 1000000000 1000000000 1000000010 1000000000 1000000000 1000000010
var1 var2 var3 var4 var5 var6 var7 var8
-1000000000.000000000 1000000010.000000000 1000000000.000000000 1000000010.000000000 1000000000.000000000 1000000010.000000000 1000000000.000000000 1000000010.000000000
+1000000000 1000000010 1000000000 1000000010 1000000000 1000000010 1000000000 1000000010
DROP PROCEDURE spexecute64;
DROP PROCEDURE sp64;
DROP PROCEDURE IF EXISTS sp65;
@@ -19211,9 +20690,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute65();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-999999999.000000000 999999999.000000000 1000000009.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+1000000000 1000000000 1000000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-999999999.000000000 1000000009.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+1000000000 1000000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute65;
DROP PROCEDURE sp65;
DROP PROCEDURE IF EXISTS sp66;
@@ -19245,9 +20724,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute66();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-10000000000000000.000000000 10000000000000000.000000000 10000000000000010.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+10000000000000000.000000000000000000000000000000 10000000000000000.000000000000000000000000000000 10000000000000010.000000000000000000000000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-10000000000000000.000000000 10000000000000010.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10000000000000000.000000000000000000000000000000 10000000000000010.000000000000000000000000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute66;
DROP PROCEDURE sp66;
DROP PROCEDURE IF EXISTS sp67;
@@ -19279,9 +20758,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute67();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-10000000000000000.000000000 10000000000000000.000000000 10000000000000010.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000000000010000000000000000.000000000000000000000000000000 000000000000000010000000000000000.000000000000000000000000000000 000000000000000010000000000000010.000000000000000000000000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-10000000000000000.000000000 10000000000000010.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000000000010000000000000000.000000000000000000000000000000 000000000000000010000000000000010.000000000000000000000000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute67;
DROP PROCEDURE sp67;
DROP PROCEDURE IF EXISTS sp68;
@@ -19313,9 +20792,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute68();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--1000000000000000000000.000000000 -1000000000000000000000.000000000 -999999999999999999990.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000000000000000000000000010.000000000000000000000000000000 000000000000000000000000000000010.000000000000000000000000000000 000000000000000000000000000000020.000000000000000000000000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--1000000000000000000000.000000000 -999999999999999999990.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000000000000000000000000010.000000000000000000000000000000 000000000000000000000000000000020.000000000000000000000000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute68;
DROP PROCEDURE sp68;
DROP PROCEDURE IF EXISTS sp69;
@@ -19347,9 +20826,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute69();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--100000000000000000000.000000000 -10000000000000000000000.000000000 -99999999999999999990.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-100000000000000000000 -10000000000000000000000 -99999999999999999990 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--10000000000000000000000.000000000 -99999999999999999990.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-10000000000000000000000 -99999999999999999990 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute69;
DROP PROCEDURE sp69;
DROP PROCEDURE IF EXISTS sp70;
@@ -19381,9 +20860,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute70();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-100000000000000000000.000000000 10000000000000000000000.000000000 100000000000000000010.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+100000000000000000000 10000000000000000000000 100000000000000000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-10000000000000000000000.000000000 100000000000000000010.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10000000000000000000000 100000000000000000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute70;
DROP PROCEDURE sp70;
DROP PROCEDURE IF EXISTS sp71;
@@ -19415,9 +20894,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute71();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-100000000000000000000.000000000 10000000000000000000000.000000000 100000000000000000010.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000000000000000000000000000000000000000100000000000000000000 0000000000000000000000000000000000000000010000000000000000000000 0000000000000000000000000000000000000000000100000000000000000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-10000000000000000000000.000000000 100000000000000000010.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000000000000000000000000000000000000010000000000000000000000 0000000000000000000000000000000000000000000100000000000000000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute71;
DROP PROCEDURE sp71;
DROP PROCEDURE IF EXISTS sp72;
@@ -19449,9 +20928,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute72();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1.000000000 1.000000000 11.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000000000000000000000000000000000000000000000000000000000010 0000000000000000000000000000000000000000000000000000000000000010 0000000000000000000000000000000000000000000000000000000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1.000000000 11.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000000000000000000000000000000000000000000000000000000000010 0000000000000000000000000000000000000000000000000000000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute72;
DROP PROCEDURE sp72;
DROP PROCEDURE IF EXISTS sp73;
@@ -19483,9 +20962,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute73();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1.000000000 1.000000000 11.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+10 10 20 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1.000000000 11.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10 20 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute73;
DROP PROCEDURE sp73;
DROP PROCEDURE IF EXISTS sp74;
@@ -19517,9 +20996,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute74();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1.000000000 1.000000000 11.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000010 0000000010 0000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1.000000000 11.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000010 0000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute74;
DROP PROCEDURE sp74;
DROP PROCEDURE IF EXISTS sp75;
@@ -19551,9 +21030,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute75();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--1000000000.000000000 -1000000000.000000000 -999999990.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000010 0000000010 0000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--1000000000.000000000 -999999990.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000010 0000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute75;
DROP PROCEDURE sp75;
DROP PROCEDURE IF EXISTS sp76;
@@ -19585,9 +21064,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute76();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000010 000000000010 000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000010 000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute76;
DROP PROCEDURE sp76;
DROP PROCEDURE IF EXISTS sp77;
@@ -19619,9 +21098,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute77();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000010 000000000010 000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000010 000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute77;
DROP PROCEDURE sp77;
DROP PROCEDURE IF EXISTS sp78;
@@ -19653,9 +21132,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute78();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000010 000000000010 000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000010 000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute78;
DROP PROCEDURE sp78;
DROP PROCEDURE IF EXISTS sp79;
@@ -19687,9 +21166,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute79();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000010 0000000000000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute79;
DROP PROCEDURE sp79;
DROP PROCEDURE IF EXISTS sp80;
@@ -19721,9 +21200,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute80();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--2150000000 -2150000000 -2149999990 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-2147483638 -2147483638 -2147483628 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--2150000000 -2149999990 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-2147483638 -2147483628 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute80;
DROP PROCEDURE sp80;
DROP PROCEDURE IF EXISTS sp81;
@@ -19823,9 +21302,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute83();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-215000000 215000000 215000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0215000000 0215000000 0215000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-215000000 215000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0215000000 0215000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute83;
DROP PROCEDURE sp83;
DROP PROCEDURE IF EXISTS sp84;
@@ -19857,9 +21336,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute84();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--8388600 -8388600 -8388590 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-8388598 -8388598 -8388588 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--8388600 -8388590 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-8388598 -8388588 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute84;
DROP PROCEDURE sp84;
DROP PROCEDURE IF EXISTS sp85;
@@ -19925,9 +21404,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute86();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-16777210 16777210 16777220 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+16777210 16777210 16777215 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-16777210 16777220 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+16777210 16777215 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute86;
DROP PROCEDURE sp86;
DROP PROCEDURE IF EXISTS sp87;
@@ -19959,9 +21438,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute87();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--8388602 -8388602 -8388592 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+16777215 16777215 16777215 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--8388602 -8388592 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+16777215 16777215 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute87;
DROP PROCEDURE sp87;
DROP PROCEDURE IF EXISTS sp88;
@@ -19993,9 +21472,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute88();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-99999999.000000000 99999999.000000000 100000009.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0100000000 0100000000 0100000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-99999999.000000000 100000009.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0100000000 0100000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute88;
DROP PROCEDURE sp88;
DROP PROCEDURE IF EXISTS sp89;
@@ -20027,9 +21506,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute89();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-99999999.000000000 99999999.000000000 100000009.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0100000000 0100000000 0100000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-99999999.000000000 100000009.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0100000000 0100000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute89;
DROP PROCEDURE sp89;
DROP PROCEDURE IF EXISTS sp90;
@@ -20061,9 +21540,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute90();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-100000000000000000000.000000000 10000000000000000000000.000000000 100000000000000000010.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+100000000000000000000.000000000000000000000000000000 10000000000000000000000.000000000000000000000000000000 100000000000000000010.000000000000000000000000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-10000000000000000000000.000000000 100000000000000000010.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10000000000000000000000.000000000000000000000000000000 100000000000000000010.000000000000000000000000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute90;
DROP PROCEDURE sp90;
DROP PROCEDURE IF EXISTS sp91;
@@ -20095,9 +21574,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute91();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-100000000000000000000.000000000 10000000000000000000000.000000000 100000000000000000010.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000000100000000000000000000.000000000000000000000000000000 000000000010000000000000000000000.000000000000000000000000000000 000000000000100000000000000000010.000000000000000000000000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-10000000000000000000000.000000000 100000000000000000010.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000010000000000000000000000.000000000000000000000000000000 000000000000100000000000000000010.000000000000000000000000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute91;
DROP PROCEDURE sp91;
DROP PROCEDURE IF EXISTS sp92;
@@ -20129,9 +21608,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute92();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--100000000000000000000.000000000 -10000000000000000000000.000000000 -99999999999999999990.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000000000000000000000000010.000000000000000000000000000000 000000000000000000000000000000010.000000000000000000000000000000 000000000000000000000000000000020.000000000000000000000000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--10000000000000000000000.000000000 -99999999999999999990.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000000000000000000000000010.000000000000000000000000000000 000000000000000000000000000000020.000000000000000000000000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute92;
DROP PROCEDURE sp92;
DROP PROCEDURE IF EXISTS sp93;
@@ -20163,9 +21642,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute93();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-100000000000000000000.000000000 10000000000000000000000.000000000 100000000000000000010.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000000000000000000000000000000000000000100000000000000000000 0000000000000000000000000000000000000000010000000000000000000000 0000000000000000000000000000000000000000000100000000000000000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-10000000000000000000000.000000000 100000000000000000010.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000000000000000000000000000000000000010000000000000000000000 0000000000000000000000000000000000000000000100000000000000000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute93;
DROP PROCEDURE sp93;
DROP PROCEDURE IF EXISTS sp94;
@@ -20231,9 +21710,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute95();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-65532 65532 65542 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+65532 65532 65535 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-65532 65542 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+65532 65535 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute95;
DROP PROCEDURE sp95;
DROP PROCEDURE IF EXISTS sp96;
@@ -20265,9 +21744,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute96();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-65532 65532 65542 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+65532 65532 65535 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-65532 65542 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+65532 65535 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute96;
DROP PROCEDURE sp96;
DROP PROCEDURE IF EXISTS sp97;
@@ -20299,9 +21778,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute97();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--32602 -32602 -32592 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+65535 65535 65535 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--32602 -32592 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+65535 65535 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute97;
DROP PROCEDURE sp97;
DROP PROCEDURE IF EXISTS sp98;
@@ -20367,9 +21846,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute99();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-252 252 262 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+252 252 255 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-252 262 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+252 255 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute99;
DROP PROCEDURE sp99;
DROP PROCEDURE IF EXISTS sp100;
@@ -20435,9 +21914,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute101();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--102 -102 -92 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+255 255 255 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--102 -92 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+255 255 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute101;
DROP PROCEDURE sp101;
USE db_storedproc;
@@ -20462,13 +21941,13 @@ set a = '2005-03-14 01:01:02';
insert into temp_table values(a);
END//
show CREATE PROCEDURE sp2;
-Procedure sql_mode Create Procedure
-sp2 ALLOW_INVALID_DATES CREATE PROCEDURE `sp2`()
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp2 ALLOW_INVALID_DATES CREATE DEFINER=`root`@`localhost` PROCEDURE `sp2`()
BEGIN
declare a datetime;
set a = '2005-03-14 01:01:02';
insert into temp_table values(a);
-END
+END latin1 latin1_swedish_ci latin1_swedish_ci
set @@sql_mode = 'traditional';
CALL sp2 ();
SELECT * from temp_table;
@@ -20498,15 +21977,15 @@ set b = 5;
SELECT not 1 between a and b;
END//
show CREATE PROCEDURE sp3;
-Procedure sql_mode Create Procedure
-sp3 HIGH_NOT_PRECEDENCE CREATE PROCEDURE `sp3`()
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp3 HIGH_NOT_PRECEDENCE CREATE DEFINER=`root`@`localhost` PROCEDURE `sp3`()
BEGIN
declare a int signed;
declare b int unsigned;
set a = -5;
set b = 5;
SELECT not 1 between a and b;
-END
+END latin1 latin1_swedish_ci latin1_swedish_ci
set @@sql_mode='';
CALL sp3();
not 1 between a and b
@@ -20541,8 +22020,8 @@ set c = b/a;
show warnings;
END//
show CREATE PROCEDURE sp4;
-Procedure sql_mode Create Procedure
-sp4 REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI,ERROR_FOR_DIVISION_BY_ZERO CREATE PROCEDURE "sp4"()
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp4 REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI,ERROR_FOR_DIVISION_BY_ZERO CREATE DEFINER="root"@"localhost" PROCEDURE "sp4"()
BEGIN
declare a int;
declare b int;
@@ -20551,7 +22030,7 @@ set a = 0;
set b = 1;
set c = b/a;
show warnings;
-END
+END latin1 latin1_swedish_ci latin1_swedish_ci
set @@sql_mode='';
CALL sp4();
Level Code Message
@@ -20589,37 +22068,37 @@ set @x=i1;
set @y=@x;
END//
show CREATE PROCEDURE sp6a;
-Procedure sql_mode Create Procedure
-sp6a CREATE PROCEDURE `sp6a`(i1 longtext, out i2 mediumint , inout i3 longblob, in i4 year, out i5 real)
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp6a CREATE DEFINER=`root`@`localhost` PROCEDURE `sp6a`(i1 longtext, out i2 mediumint , inout i3 longblob, in i4 year, out i5 real)
BEGIN
set @x=i1;
set @y=@x;
-END
+END latin1 latin1_swedish_ci latin1_swedish_ci
show CREATE PROCEDURE sp6b;
-Procedure sql_mode Create Procedure
-sp6b CREATE PROCEDURE `sp6b`(out i1 longtext, out i2 mediumint , out i3 longblob, out i4 year, out i5 real)
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp6b CREATE DEFINER=`root`@`localhost` PROCEDURE `sp6b`(out i1 longtext, out i2 mediumint , out i3 longblob, out i4 year, out i5 real)
DETERMINISTIC
BEGIN
set @x=i1;
set @y=@x;
-END
+END latin1 latin1_swedish_ci latin1_swedish_ci
show CREATE PROCEDURE sp6c;
-Procedure sql_mode Create Procedure
-sp6c CREATE PROCEDURE `sp6c`(inout i1 longtext, inout i2 mediumint , inout i3 longblob, inout i4 year, inout i5 real)
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp6c CREATE DEFINER=`root`@`localhost` PROCEDURE `sp6c`(inout i1 longtext, inout i2 mediumint , inout i3 longblob, inout i4 year, inout i5 real)
COMMENT 'this is a comment'
BEGIN
set @x=i1;
set @y=@x;
-END
+END latin1 latin1_swedish_ci latin1_swedish_ci
SHOW PROCEDURE status like 'sp6a';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp6a PROCEDURE root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp6a PROCEDURE root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
SHOW PROCEDURE status like 'sp6b';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp6b PROCEDURE root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp6b PROCEDURE root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
SHOW PROCEDURE status like 'sp6c';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp6c PROCEDURE root@localhost modified created DEFINER this is a comment
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp6c PROCEDURE root@localhost modified created DEFINER this is a comment latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE sp6a;
DROP PROCEDURE sp6b;
DROP PROCEDURE sp6c;
@@ -20633,8 +22112,8 @@ set @x=i1;
set @y=@x;
END//
SHOW PROCEDURE status like 'sp6';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp6 PROCEDURE root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp6 PROCEDURE root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE sp6;
Testcase 4.8.3:
@@ -20659,8 +22138,8 @@ set @y=@x;
return 0;
END//
show function status like 'sp6';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp6 FUNCTION root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp6 FUNCTION root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION sp6;
Testcase 4.8.5:
@@ -20673,7 +22152,7 @@ Testcase 4.8.6:
--------------------------------------------------------------------------------
DROP PROCEDURE IF EXISTS sp6;
show procedure status like 'sp6';
-Db Name Type Definer Modified Created Security_type Comment
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
Testcase 4.8.7:
--------------------------------------------------------------------------------
@@ -20694,7 +22173,7 @@ BEGIN
return i1;
END//
show procedure status like 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
DROP FUNCTION fn1;
Testcase 4.8.9:
@@ -20708,8 +22187,8 @@ BEGIN
return i1;
END//
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION fn1;
Testcase 4.8.11:
@@ -20738,7 +22217,7 @@ Testcase 4.8.13:
--------------------------------------------------------------------------------
DROP FUNCTION IF EXISTS f1000;
SHOW FUNCTION STATUS LIKE 'f1000';
-Db Name Type Definer Modified Created Security_type Comment
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
Testcase 4.8.14:
--------------------------------------------------------------------------------
@@ -20760,7 +22239,7 @@ set @x=i1;
set @y=@x;
END//
show function status like 'sp6';
-Db Name Type Definer Modified Created Security_type Comment
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
DROP PROCEDURE sp6;
Testcase 4.8.16:
@@ -20777,8 +22256,8 @@ END//
alter procedure sp6 sql security invoker;
alter procedure sp6 comment 'this is a new comment';
SHOW PROCEDURE status like 'sp6';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp6 PROCEDURE root@localhost modified created INVOKER this is a new comment
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp6 PROCEDURE root@localhost modified created INVOKER this is a new comment latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE sp6;
Testcase 4.8.18:
@@ -20790,12 +22269,12 @@ return x;
END//
alter function fn1 sql security invoker;
show create function fn1;
-Function sql_mode Create Function
-fn1 CREATE FUNCTION `fn1`(x int) RETURNS int(11)
+Function sql_mode Create Function character_set_client collation_connection Database Collation
+fn1 CREATE DEFINER=`root`@`localhost` FUNCTION `fn1`(x int) RETURNS int(11)
SQL SECURITY INVOKER
BEGIN
return x;
-END
+END latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION fn1;
Testcase 4.8.19:
@@ -20808,8 +22287,8 @@ END//
alter function fn1 sql security invoker;
alter function fn1 comment 'this is a function 3242#@%$#@';
show function status like 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created INVOKER this is a function 3242#@%$#@
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created INVOKER this is a function 3242#@%$#@ latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION fn1;
Testcase 4.8.20:
@@ -20822,13 +22301,13 @@ set @y=@x;
END//
alter procedure sp6 comment 'this is simple';
show CREATE PROCEDURE sp6;
-Procedure sql_mode Create Procedure
-sp6 CREATE PROCEDURE `sp6`(i1 int , i2 int)
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp6 CREATE DEFINER=`root`@`localhost` PROCEDURE `sp6`(i1 int , i2 int)
COMMENT 'this is simple'
BEGIN
set @x=i1;
set @y=@x;
-END
+END latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE sp6;
Testcase 4.8.21:
@@ -20853,7 +22332,7 @@ set @y=@x;
END//
DROP PROCEDURE sp6;
SHOW PROCEDURE status like 'sp6';
-Db Name Type Definer Modified Created Security_type Comment
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
Testcase 4.8.23:
--------------------------------------------------------------------------------
@@ -20875,7 +22354,7 @@ return i1;
END//
DROP FUNCTION fn1;
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
Section 3.1.9 - Routine body checks:
--------------------------------------------------------------------------------
@@ -20894,16 +22373,16 @@ SELECT * from t9 limit 0, 100;
END//
CALL sp6 (10, 20, 30, 40, 50);
f1 f2 f3
--5000 a` -5000
--4999 aaa -4999
--4998 abaa -4998
--4997 acaaa -4997
--4996 adaaaa -4996
--4995 aeaaaaa -4995
--4994 afaaaaaa -4994
--4993 agaaaaaaa -4993
--4992 a^aaaaaaaa -4992
-4991 a_aaaaaaaaa -4991
+-4992 a^aaaaaaaa -4992
+-4993 agaaaaaaa -4993
+-4994 afaaaaaa -4994
+-4995 aeaaaaa -4995
+-4996 adaaaa -4996
+-4997 acaaa -4997
+-4998 abaa -4998
+-4999 aaa -4999
+-5000 a` -5000
DROP PROCEDURE sp6;
Testcase 4.9.2:
@@ -21363,9 +22842,16 @@ until done END repeat;
SELECT done;
close cur1;
END//
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+CALL h1();
+done
+0
+done
+1
+done
+1
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.14:
--------------------------------------------------------------------------------
@@ -21392,9 +22878,16 @@ until done END repeat;
SELECT done;
close cur1;
END//
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+CALL h1();
+done
+0
+done
+1
+done
+1
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.15:
--------------------------------------------------------------------------------
@@ -21422,9 +22915,16 @@ until done END repeat;
SELECT done;
close cur1;
END//
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+CALL h1();
+done
+0
+@x=1
+0
+done
+1
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.16:
--------------------------------------------------------------------------------
@@ -21452,17 +22952,16 @@ until done END repeat;
SELECT done;
close cur1;
END//
-CALL h1()
-# cleanup;
+CALL h1();
done
0
@x=1
0
done
1
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.17:
--------------------------------------------------------------------------------
@@ -21490,9 +22989,9 @@ done
0
done
1
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.18:
--------------------------------------------------------------------------------
@@ -21520,9 +23019,9 @@ done
0
done
1
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.19:
--------------------------------------------------------------------------------
@@ -21550,9 +23049,9 @@ END//
CALL h1();
done
0
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.20:
--------------------------------------------------------------------------------
@@ -21580,9 +23079,9 @@ END//
CALL h1();
done
0
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.21:
--------------------------------------------------------------------------------
@@ -21610,9 +23109,9 @@ done
0
done
1
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.22:
--------------------------------------------------------------------------------
@@ -21641,9 +23140,9 @@ done
0
done @x
1 1
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.23:
--------------------------------------------------------------------------------
@@ -21671,9 +23170,9 @@ END//
CALL h1();
done
0
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.24:
--------------------------------------------------------------------------------
@@ -21701,9 +23200,9 @@ END//
CALL h1();
done
0
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.25:
--------------------------------------------------------------------------------
@@ -21728,9 +23227,9 @@ END//
CALL h1();
done @x
1 1
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.26:
--------------------------------------------------------------------------------
@@ -21755,9 +23254,9 @@ END//
CALL h1();
done @x
1 1
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.27:
--------------------------------------------------------------------------------
@@ -21780,9 +23279,9 @@ set @x=1;
SELECT done, @x;
END//
CALL h1();
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.28:
--------------------------------------------------------------------------------
@@ -21805,9 +23304,9 @@ set @x=1;
SELECT done, @x;
END//
CALL h1();
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+drop table IF EXISTS res_t1;
+drop table IF EXISTS res_t2;
Testcase 4.11.29:
--------------------------------------------------------------------------------
@@ -21835,9 +23334,9 @@ END//
CALL h1();
done @x
1 1
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+drop table IF EXISTS res_t1;
+drop table IF EXISTS res_t2;
Testcase 4.11.30:
--------------------------------------------------------------------------------
@@ -21865,9 +23364,9 @@ END//
CALL h1();
done @x
1 1
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+drop table IF EXISTS res_t1;
+drop table IF EXISTS res_t2;
Testcase 4.11.31:
--------------------------------------------------------------------------------
@@ -21893,9 +23392,9 @@ set @x=1;
SELECT done, @x;
END//
CALL h1();
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+drop table IF EXISTS res_t1;
+drop table IF EXISTS res_t2;
Testcase 4.11.32:
--------------------------------------------------------------------------------
@@ -21921,9 +23420,9 @@ set @x=1;
SELECT done, @x;
END//
CALL h1();
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.33:
--------------------------------------------------------------------------------
@@ -21948,7 +23447,7 @@ set @x=1;
SELECT done, @x;
END//
ERROR 42000: Duplicate condition: condname
-drop table res_t1;
+DROP TABLE IF EXISTS res_t1;
Testcase 4.11.35:
--------------------------------------------------------------------------------
@@ -21973,7 +23472,21 @@ insert into res_t1 values (3, 'c');
END begin2_label;
END begin1_label//
ERROR 42000: Bad SQLSTATE: '020'
-drop table res_t1;
+CREATE PROCEDURE h1 ()
+begin1_label:BEGIN
+declare condname1 condition for sqlstate '020';
+declare condname2 condition for sqlstate 'wewe';
+declare condname3 condition for 9999;
+set @var2 = 1;
+insert into res_t1 values (2, 'b');
+begin2_label: BEGIN
+declare continue handler for sqlstate '90000023' set @var3= 1;
+set @var4 = 1;
+insert into res_t1 values (3, 'c');
+END begin2_label;
+END begin1_label//
+ERROR 42000: Bad SQLSTATE: '020'
+DROP TABLE IF EXISTS res_t1;
Testcase 4.11.36:
--------------------------------------------------------------------------------
@@ -21989,7 +23502,7 @@ set x1 = 2;
END;
SELECT @x, x1;
END//
-DROP PROCEDURE h1;
+DROP PROCEDURE IF EXISTS h1;
Testcase 4.11.40:
--------------------------------------------------------------------------------
@@ -22010,7 +23523,7 @@ declare exit handler for condname2 set x5 = 1;
END//
ERROR 42000: Duplicate handler declared in the same block
DROP PROCEDURE IF EXISTS h1;
-drop table res_t1;
+DROP TABLE IF EXISTS res_t1;
Testcase 4.11.41:
--------------------------------------------------------------------------------
@@ -22026,6 +23539,9 @@ set x1 = 2;
END;
SELECT @x, x1;
END//
+CALL h1();
+@x x1
+0 2
DROP PROCEDURE IF EXISTS h1;
* Testcase 3.1.2.53 (4.11.42):
@@ -22076,8 +23592,8 @@ CALL h1();
SELECT @done, @x;
@done @x
1 1
-DROP PROCEDURE h1;
-DROP TABLE res_t1;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
--source suite/funcs_1/storedproc/cleanup_sp_tb.inc
--------------------------------------------------------------------------------
diff --git a/mysql-test/suite/funcs_1/r/myisam_storedproc_10.result b/mysql-test/suite/funcs_1/r/myisam_storedproc_10.result
index 13b14b242fe..a5a52acbc1d 100755
--- a/mysql-test/suite/funcs_1/r/myisam_storedproc_10.result
+++ b/mysql-test/suite/funcs_1/r/myisam_storedproc_10.result
@@ -58,6 +58,7 @@ load data infile 'MYSQL_TEST_DIR/suite/funcs_1/data/t4.txt' into table t11;
Section 3.1.10 - CALL checks:
--------------------------------------------------------------------------------
+USE db_storedproc;
Testcase 3.1.10.2 + 3.1.10.5:
-----------------------------
@@ -94,6 +95,7 @@ CALL sp31102();
ERROR 42000: execute command denied to user 'user_2'@'localhost' for routine 'db_storedproc.sp31102'
SELECT fn31105( 9 );
ERROR 42000: execute command denied to user 'user_2'@'localhost' for routine 'db_storedproc.fn31105'
+connection default;
USE db_storedproc;
root@localhost db_storedproc
@@ -114,6 +116,7 @@ a` a` 1000-01-01 -5000 a` -5000
SELECT fn31105( 9 );
fn31105( 9 )
81
+connection default;
USE db_storedproc;
root@localhost db_storedproc
@@ -180,6 +183,8 @@ DROP PROCEDURE IF EXISTS sp_ins_1;
DROP PROCEDURE IF EXISTS sp_ins_3;
DROP PROCEDURE IF EXISTS sp_upd;
DROP PROCEDURE IF EXISTS sp_ins_upd;
+DROP PROCEDURE IF EXISTS sp_del;
+DROP PROCEDURE IF EXISTS sp_with_rowcount;
CREATE TABLE temp(f1 CHAR(20),f2 CHAR(25),f3 DATE,f4 INT,f5 CHAR(25),f6 INT);
INSERT INTO temp SELECT * FROM t10;
CREATE PROCEDURE sp_ins_1()
@@ -207,49 +212,72 @@ END;
SELECT COUNT( f1 ), f1 FROM temp GROUP BY f1;
UPDATE temp SET temp.f1 = 'updated_2' WHERE temp.f1 ='qwe' AND temp.f2 = 'abc';
END//
+CREATE PROCEDURE sp_del()
+BEGIN
+DELETE FROM temp WHERE temp.f1 ='qwe' OR temp.f1 = 'updated_2';
+END//
+CREATE PROCEDURE sp_with_rowcount()
+BEGIN
+BEGIN
+INSERT INTO temp VALUES ('qwe', 'abc', '1989-11-09', 100, 'uvw', 1000),
+('qwe', 'xyz', '1998-03-26', 100, 'uvw', 1000),
+('qwe', 'abc', '2000-11-09', 100, 'uvw', 1000),
+('qwe', 'xyz', '2005-11-07', 100, 'uvw', 1000);
+END;
+SELECT row_count() AS 'row_count() after insert';
+SELECT row_count() AS 'row_count() after select row_count()';
+SELECT f1,f2,f3 FROM temp ORDER BY f1,f2,f3;
+UPDATE temp SET temp.f1 = 'updated_2' WHERE temp.f2 = 'abc';
+SELECT row_count() AS 'row_count() after update';
+SELECT f1,f2,f3 FROM temp ORDER BY f1,f2,f3;
+DELETE FROM temp WHERE temp.f1 = 'updated_2';
+SELECT row_count() AS 'row_count() after delete';
+END//
CALL sp_ins_1();
SELECT row_count();
row_count()
1
-SELECT * FROM temp ORDER BY f4;
+SELECT * FROM temp;
f1 f2 f3 f4 f5 f6
+a^aaaaaaaa a^aaaaaaaa 1000-01-09 -4992 a^aaaaaaaa -4992
+a_aaaaaaaaa a_aaaaaaaaa 1000-01-10 -4991 a_aaaaaaaaa -4991
a` a` 1000-01-01 -5000 a` -5000
aaa aaa 1000-01-02 -4999 aaa -4999
abaa abaa 1000-01-03 -4998 abaa -4998
+abc abc 2005-10-03 100 uvw 1000
acaaa acaaa 1000-01-04 -4997 acaaa -4997
adaaaa adaaaa 1000-01-05 -4996 adaaaa -4996
aeaaaaa aeaaaaa 1000-01-06 -4995 aeaaaaa -4995
afaaaaaa afaaaaaa 1000-01-07 -4994 afaaaaaa -4994
agaaaaaaa agaaaaaaa 1000-01-08 -4993 agaaaaaaa -4993
-a^aaaaaaaa a^aaaaaaaa 1000-01-09 -4992 a^aaaaaaaa -4992
-a_aaaaaaaaa a_aaaaaaaaa 1000-01-10 -4991 a_aaaaaaaaa -4991
-abc abc 2005-10-03 100 uvw 1000
CALL sp_ins_3();
SELECT row_count();
row_count()
1
-SELECT * FROM temp ORDER BY f4;
+SELECT * FROM temp;
f1 f2 f3 f4 f5 f6
+a^aaaaaaaa a^aaaaaaaa 1000-01-09 -4992 a^aaaaaaaa -4992
+a_aaaaaaaaa a_aaaaaaaaa 1000-01-10 -4991 a_aaaaaaaaa -4991
a` a` 1000-01-01 -5000 a` -5000
aaa aaa 1000-01-02 -4999 aaa -4999
abaa abaa 1000-01-03 -4998 abaa -4998
+abc abc 2005-10-03 100 uvw 1000
+abc xyz 1949-05-23 100 uvw 1000
+abc xyz 1989-11-09 100 uvw 1000
+abc xyz 2005-10-24 100 uvw 1000
acaaa acaaa 1000-01-04 -4997 acaaa -4997
adaaaa adaaaa 1000-01-05 -4996 adaaaa -4996
aeaaaaa aeaaaaa 1000-01-06 -4995 aeaaaaa -4995
afaaaaaa afaaaaaa 1000-01-07 -4994 afaaaaaa -4994
agaaaaaaa agaaaaaaa 1000-01-08 -4993 agaaaaaaa -4993
-a^aaaaaaaa a^aaaaaaaa 1000-01-09 -4992 a^aaaaaaaa -4992
-a_aaaaaaaaa a_aaaaaaaaa 1000-01-10 -4991 a_aaaaaaaaa -4991
-abc abc 2005-10-03 100 uvw 1000
-abc xyz 1949-05-23 100 uvw 1000
-abc xyz 1989-11-09 100 uvw 1000
-abc xyz 2005-10-24 100 uvw 1000
CALL sp_upd();
SELECT row_count();
row_count()
4
-SELECT * FROM temp ORDER BY f4;
+SELECT * FROM temp;
f1 f2 f3 f4 f5 f6
+a^aaaaaaaa a^aaaaaaaa 1000-01-09 -4992 a^aaaaaaaa -4992
+a_aaaaaaaaa a_aaaaaaaaa 1000-01-10 -4991 a_aaaaaaaaa -4991
a` a` 1000-01-01 -5000 a` -5000
aaa aaa 1000-01-02 -4999 aaa -4999
abaa abaa 1000-01-03 -4998 abaa -4998
@@ -258,8 +286,6 @@ adaaaa adaaaa 1000-01-05 -4996 adaaaa -4996
aeaaaaa aeaaaaa 1000-01-06 -4995 aeaaaaa -4995
afaaaaaa afaaaaaa 1000-01-07 -4994 afaaaaaa -4994
agaaaaaaa agaaaaaaa 1000-01-08 -4993 agaaaaaaa -4993
-a^aaaaaaaa a^aaaaaaaa 1000-01-09 -4992 a^aaaaaaaa -4992
-a_aaaaaaaaa a_aaaaaaaaa 1000-01-10 -4991 a_aaaaaaaaa -4991
updated abc 2005-10-03 100 uvw 1000
updated xyz 1949-05-23 100 uvw 1000
updated xyz 1989-11-09 100 uvw 1000
@@ -281,8 +307,10 @@ COUNT( f1 ) f1
SELECT row_count();
row_count()
3
-SELECT * FROM temp ORDER BY f4;
+SELECT * FROM temp;
f1 f2 f3 f4 f5 f6
+a^aaaaaaaa a^aaaaaaaa 1000-01-09 -4992 a^aaaaaaaa -4992
+a_aaaaaaaaa a_aaaaaaaaa 1000-01-10 -4991 a_aaaaaaaaa -4991
a` a` 1000-01-01 -5000 a` -5000
aaa aaa 1000-01-02 -4999 aaa -4999
abaa abaa 1000-01-03 -4998 abaa -4998
@@ -291,20 +319,67 @@ adaaaa adaaaa 1000-01-05 -4996 adaaaa -4996
aeaaaaa aeaaaaa 1000-01-06 -4995 aeaaaaa -4995
afaaaaaa afaaaaaa 1000-01-07 -4994 afaaaaaa -4994
agaaaaaaa agaaaaaaa 1000-01-08 -4993 agaaaaaaa -4993
-a^aaaaaaaa a^aaaaaaaa 1000-01-09 -4992 a^aaaaaaaa -4992
-a_aaaaaaaaa a_aaaaaaaaa 1000-01-10 -4991 a_aaaaaaaaa -4991
+qwe xyz 1998-03-26 100 uvw 1000
updated abc 2005-10-03 100 uvw 1000
updated xyz 1949-05-23 100 uvw 1000
updated xyz 1989-11-09 100 uvw 1000
updated xyz 2005-10-24 100 uvw 1000
updated_2 abc 1989-11-09 100 uvw 1000
-qwe xyz 1998-03-26 100 uvw 1000
updated_2 abc 2000-11-09 100 uvw 1000
updated_2 abc 2005-11-07 100 uvw 1000
+CALL sp_del();
+SELECT row_count();
+row_count()
+4
+SELECT * FROM temp;
+f1 f2 f3 f4 f5 f6
+a^aaaaaaaa a^aaaaaaaa 1000-01-09 -4992 a^aaaaaaaa -4992
+a_aaaaaaaaa a_aaaaaaaaa 1000-01-10 -4991 a_aaaaaaaaa -4991
+a` a` 1000-01-01 -5000 a` -5000
+aaa aaa 1000-01-02 -4999 aaa -4999
+abaa abaa 1000-01-03 -4998 abaa -4998
+acaaa acaaa 1000-01-04 -4997 acaaa -4997
+adaaaa adaaaa 1000-01-05 -4996 adaaaa -4996
+aeaaaaa aeaaaaa 1000-01-06 -4995 aeaaaaa -4995
+afaaaaaa afaaaaaa 1000-01-07 -4994 afaaaaaa -4994
+agaaaaaaa agaaaaaaa 1000-01-08 -4993 agaaaaaaa -4993
+updated abc 2005-10-03 100 uvw 1000
+updated xyz 1949-05-23 100 uvw 1000
+updated xyz 1989-11-09 100 uvw 1000
+updated xyz 2005-10-24 100 uvw 1000
+DELETE FROM temp;
+CALL sp_with_rowcount();
+row_count() after insert
+4
+row_count() after select row_count()
+-1
+f1 f2 f3
+qwe abc 1989-11-09
+qwe abc 2000-11-09
+qwe xyz 1998-03-26
+qwe xyz 2005-11-07
+row_count() after update
+2
+f1 f2 f3
+qwe xyz 1998-03-26
+qwe xyz 2005-11-07
+updated_2 abc 1989-11-09
+updated_2 abc 2000-11-09
+row_count() after delete
+2
+SELECT row_count();
+row_count()
+-1
+SELECT * FROM temp;
+f1 f2 f3 f4 f5 f6
+qwe xyz 1998-03-26 100 uvw 1000
+qwe xyz 2005-11-07 100 uvw 1000
DROP PROCEDURE sp_ins_1;
DROP PROCEDURE sp_ins_3;
DROP PROCEDURE sp_upd;
DROP PROCEDURE sp_ins_upd;
+DROP PROCEDURE sp_del;
+DROP PROCEDURE sp_with_rowcount;
DROP TABLE temp;
Testcase 3.1.10.8:
diff --git a/mysql-test/suite/funcs_1/r/myisam_trig_03.result b/mysql-test/suite/funcs_1/r/myisam_trig_03.result
index 73befa606c9..3bd8db3880a 100644
--- a/mysql-test/suite/funcs_1/r/myisam_trig_03.result
+++ b/mysql-test/suite/funcs_1/r/myisam_trig_03.result
@@ -184,15 +184,14 @@ insert 3.5.3.2-no
insert 3.5.3.6-no
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
-
-Trigger create disabled - should fail - Bug 8884
-------------------------------------------------
+create trigger trg4a_1 before INSERT on t1 for each row
+set new.f1 = 'trig 3.5.3.7-1a';
insert into t1 (f1) values ('insert 3.5.3.7-1a');
+ERROR 42000: UPDATE command denied to user 'test_noprivs'@'localhost' for column 'f1' in table 't1'
select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
insert 3.5.3.6-no
-insert 3.5.3.7-1a
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
drop trigger trg4a_1;
@@ -210,7 +209,6 @@ select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
insert 3.5.3.6-no
-insert 3.5.3.7-1a
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
trig 3.5.3.7-2a
@@ -239,29 +237,27 @@ Grants for test_noprivs@localhost
GRANT USAGE ON *.* TO 'test_noprivs'@'localhost' IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
GRANT SELECT, INSERT, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `priv_db`.* TO 'test_noprivs'@'localhost'
use priv_db;
-
-Trigger create disabled - should fail - Bug 8884
-------------------------------------------------
+create trigger trg4b_1 before UPDATE on t1 for each row
+set new.f1 = 'trig 3.5.3.7-1b';
insert into t1 (f1) values ('insert 3.5.3.7-1b');
select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
insert 3.5.3.6-no
-insert 3.5.3.7-1a
insert 3.5.3.7-1b
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
trig 3.5.3.7-2a
update t1 set f1 = 'update 3.5.3.7-1b' where f1 = 'insert 3.5.3.7-1b';
+ERROR 42000: UPDATE command denied to user 'test_noprivs'@'localhost' for column 'f1' in table 't1'
select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
insert 3.5.3.6-no
-insert 3.5.3.7-1a
+insert 3.5.3.7-1b
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
trig 3.5.3.7-2a
-update 3.5.3.7-1b
drop trigger trg4b_1;
show grants;
Grants for test_yesprivs@localhost
@@ -275,23 +271,21 @@ select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
insert 3.5.3.6-no
-insert 3.5.3.7-1a
+insert 3.5.3.7-1b
insert 3.5.3.7-2b
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
trig 3.5.3.7-2a
-update 3.5.3.7-1b
update t1 set f1 = 'update 3.5.3.7-2b' where f1 = 'insert 3.5.3.7-2b';
select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
insert 3.5.3.6-no
-insert 3.5.3.7-1a
+insert 3.5.3.7-1b
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
trig 3.5.3.7-2a
trig 3.5.3.7-2b
-update 3.5.3.7-1b
drop trigger trg4b_2;
Testcase 3.5.3.7c
@@ -317,21 +311,19 @@ Grants for test_noprivs@localhost
GRANT TRIGGER ON *.* TO 'test_noprivs'@'localhost' IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
GRANT SELECT, INSERT, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE VIEW, SHOW VIEW, TRIGGER ON `priv_db`.`t1` TO 'test_noprivs'@'localhost'
use priv_db;
-
-Trigger create disabled - should fail - Bug 8884
-------------------------------------------------
+create trigger trg4c_1 before INSERT on t1 for each row
+set new.f1 = 'trig 3.5.3.7-1c';
insert into t1 (f1) values ('insert 3.5.3.7-1c');
+ERROR 42000: UPDATE command denied to user 'test_noprivs'@'localhost' for column 'f1' in table 't1'
select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
insert 3.5.3.6-no
-insert 3.5.3.7-1a
-insert 3.5.3.7-1c
+insert 3.5.3.7-1b
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
trig 3.5.3.7-2a
trig 3.5.3.7-2b
-update 3.5.3.7-1b
drop trigger trg4c_1;
show grants;
Grants for test_yesprivs@localhost
@@ -345,14 +337,12 @@ select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
insert 3.5.3.6-no
-insert 3.5.3.7-1a
-insert 3.5.3.7-1c
+insert 3.5.3.7-1b
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
trig 3.5.3.7-2a
trig 3.5.3.7-2b
trig 3.5.3.7-2c
-update 3.5.3.7-1b
drop trigger trg4c_2;
Testcase 3.5.3.7d:
@@ -376,23 +366,20 @@ Grants for test_noprivs@localhost
GRANT TRIGGER ON *.* TO 'test_noprivs'@'localhost' IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
GRANT SELECT (f1), INSERT (f1) ON `priv_db`.`t1` TO 'test_noprivs'@'localhost'
use priv_db;
-
-Trigger create disabled - should fail - Bug 8884
-------------------------------------------------
+create trigger trg4d_1 before INSERT on t1 for each row
+set new.f1 = 'trig 3.5.3.7-1d';
insert into t1 (f1) values ('insert 3.5.3.7-1d');
+ERROR 42000: UPDATE command denied to user 'test_noprivs'@'localhost' for column 'f1' in table 't1'
select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
insert 3.5.3.6-no
-insert 3.5.3.7-1a
-insert 3.5.3.7-1c
-insert 3.5.3.7-1d
+insert 3.5.3.7-1b
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
trig 3.5.3.7-2a
trig 3.5.3.7-2b
trig 3.5.3.7-2c
-update 3.5.3.7-1b
drop trigger trg4d_1;
show grants;
Grants for test_yesprivs@localhost
@@ -406,16 +393,13 @@ select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
insert 3.5.3.6-no
-insert 3.5.3.7-1a
-insert 3.5.3.7-1c
-insert 3.5.3.7-1d
+insert 3.5.3.7-1b
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
trig 3.5.3.7-2a
trig 3.5.3.7-2b
trig 3.5.3.7-2c
trig 3.5.3.7-2d
-update 3.5.3.7-1b
drop trigger trg4d_2;
Testcase 3.5.3.8a:
@@ -440,14 +424,14 @@ use priv_db;
show grants;
Grants for test_noprivs@localhost
GRANT INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO 'test_noprivs'@'localhost' IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
-
-Trigger create disabled - should fail - Bug 8887
-------------------------------------------------
+create trigger trg5a_1 before INSERT on t1 for each row
+set @test_var = new.f1;
set @test_var = 'before trig 3.5.3.8-1a';
select @test_var;
@test_var
before trig 3.5.3.8-1a
insert into t1 (f1) values ('insert 3.5.3.8-1a');
+ERROR 42000: SELECT command denied to user 'test_noprivs'@'localhost' for column 'f1' in table 't1'
select @test_var;
@test_var
before trig 3.5.3.8-1a
@@ -495,15 +479,15 @@ Grants for test_noprivs@localhost
GRANT TRIGGER ON *.* TO 'test_noprivs'@'localhost' IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
GRANT INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `priv_db`.* TO 'test_noprivs'@'localhost'
use priv_db;
-
-Trigger create disabled - should fail - Bug 8887
-------------------------------------------------
+create trigger trg5b_1 before UPDATE on t1 for each row
+set @test_var= new.f1;
set @test_var= 'before trig 3.5.3.8-1b';
insert into t1 (f1) values ('insert 3.5.3.8-1b');
select @test_var;
@test_var
before trig 3.5.3.8-1b
update t1 set f1= 'update 3.5.3.8-1b' where f1 = 'insert 3.5.3.8-1b';
+ERROR 42000: SELECT command denied to user 'test_noprivs'@'localhost' for column 'f1' in table 't1'
select @test_var;
@test_var
before trig 3.5.3.8-1b
@@ -550,11 +534,11 @@ Grants for test_noprivs@localhost
GRANT TRIGGER ON *.* TO 'test_noprivs'@'localhost' IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
GRANT INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE VIEW, SHOW VIEW, TRIGGER ON `priv_db`.`t1` TO 'test_noprivs'@'localhost'
use priv_db;
-
-Trigger create disabled - should fail - Bug 8887
-------------------------------------------------
+create trigger trg5c_1 before INSERT on t1 for each row
+set @test_var= new.f1;
set @test_var= 'before trig 3.5.3.8-1c';
insert into t1 (f1) values ('insert 3.5.3.8-1c');
+ERROR 42000: SELECT command denied to user 'test_noprivs'@'localhost' for column 'f1' in table 't1'
select @test_var;
@test_var
before trig 3.5.3.8-1c
@@ -596,11 +580,11 @@ Grants for test_noprivs@localhost
GRANT TRIGGER ON *.* TO 'test_noprivs'@'localhost' IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
GRANT INSERT (f1), UPDATE (f1) ON `priv_db`.`t1` TO 'test_noprivs'@'localhost'
use priv_db;
-
-Trigger create disabled - should fail - Bug 8887
-------------------------------------------------
+create trigger trg5d_1 before INSERT on t1 for each row
+set @test_var= new.f1;
set @test_var='before trig 3.5.3.8-1d';
insert into t1 (f1) values ('insert 3.5.3.8-1d');
+ERROR 42000: SELECT command denied to user 'test_noprivs'@'localhost' for column 'f1' in table 't1'
select @test_var;
@test_var
before trig 3.5.3.8-1d
diff --git a/mysql-test/suite/funcs_1/r/myisam_trig_03e.result b/mysql-test/suite/funcs_1/r/myisam_trig_03e.result
index a51a79f9b88..58b3a37ee3f 100644
--- a/mysql-test/suite/funcs_1/r/myisam_trig_03e.result
+++ b/mysql-test/suite/funcs_1/r/myisam_trig_03e.result
@@ -571,10 +571,8 @@ test_yesprivs@localhost
use priv_db;
show triggers;
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 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;
diff --git a/mysql-test/suite/funcs_1/r/myisam_trig_08.result b/mysql-test/suite/funcs_1/r/myisam_trig_08.result
index 4f350191099..69e8d2313e7 100644
--- a/mysql-test/suite/funcs_1/r/myisam_trig_08.result
+++ b/mysql-test/suite/funcs_1/r/myisam_trig_08.result
@@ -139,10 +139,10 @@ values ('1', 'Test 3.5.8.4', 222, 23456, 1.05);
Select f120, f122, f136, f144, f163 from tb3 where f122= 'Test 3.5.8.4';
f120 f122 f136 f144 f163
1 Test 3.5.8.4 00222 0000023456 1.050000000000000000000000000000
-select * from db_test.t1_i order by i120;
+select * from db_test.t1_i;
i120 i136 i144 i163
1 00222 0000023456 1.050000000000000000000000000000
-select * from db_test.t1_u order by u120;
+select * from db_test.t1_u;
u120 u136 u144 u163
a 00111 0000099999 999.990000000000000000000000000000
b 00222 0000023456 1.050000000000000000000000000000
@@ -150,7 +150,7 @@ c 00333 0000099999 999.990000000000000000000000000000
d 00222 0000023456 1.050000000000000000000000000000
e 00222 0000023456 1.050000000000000000000000000000
f 00333 0000099999 999.990000000000000000000000000000
-select * from db_test.t1_d order by d120;
+select * from db_test.t1_d;
d120 d136 d144 d163
a 00111 0000099999 999.990000000000000000000000000000
c 00333 0000099999 999.990000000000000000000000000000
@@ -343,20 +343,20 @@ set @test_var='Empty';
Insert into tb3 (f120, f122, f136, f144)
values ('a', 'Test 3.5.8.5-case', 5, 7);
select f120, f122, f136, f144, @test_var
-from tb3 where f122 = 'Test 3.5.8.5-case' order by f120;
+from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;
f120 f122 f136 f144 @test_var
A Test 3.5.8.5-case 00125 0000000007 A*seven
Insert into tb3 (f120, f122, f136, f144)
values ('b', 'Test 3.5.8.5-case', 71,16);
select f120, f122, f136, f144, @test_var
-from tb3 where f122 = 'Test 3.5.8.5-case' order by f120;
+from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;
f120 f122 f136 f144 @test_var
A Test 3.5.8.5-case 00125 0000000007 B*0000000016
B Test 3.5.8.5-case 00191 0000000016 B*0000000016
Insert into tb3 (f120, f122, f136, f144)
values ('c', 'Test 3.5.8.5-case', 80,1);
select f120, f122, f136, f144, @test_var
-from tb3 where f122 = 'Test 3.5.8.5-case' order by f120;
+from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;
f120 f122 f136 f144 @test_var
A Test 3.5.8.5-case 00125 0000000007 C=one
B Test 3.5.8.5-case 00191 0000000016 C=one
@@ -366,7 +366,7 @@ values ('d', 'Test 3.5.8.5-case', 152);
Warnings:
Warning 1265 Data truncated for column 'f120' at row 1
select f120, f122, f136, f144, @test_var
-from tb3 where f122 = 'Test 3.5.8.5-case' order by f120;
+from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;
f120 f122 f136 f144 @test_var
1 Test 3.5.8.5-case 00152 0000099999 1*0000099999
A Test 3.5.8.5-case 00125 0000000007 1*0000099999
@@ -377,7 +377,7 @@ values ('e', 'Test 3.5.8.5-case', 200, 8);
Warnings:
Warning 1265 Data truncated for column 'f120' at row 1
select f120, f122, f136, f144, @test_var
-from tb3 where f122 = 'Test 3.5.8.5-case' order by f120;
+from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;
f120 f122 f136 f144 @test_var
1 Test 3.5.8.5-case 00152 0000099999 1=eight
1 Test 3.5.8.5-case 00200 0000000008 1=eight
@@ -387,7 +387,7 @@ C Test 3.5.8.5-case 00200 0000000001 1=eight
Insert into tb3 (f120, f122, f136, f144)
values ('f', 'Test 3.5.8.5-case', 100, 8);
select f120, f122, f136, f144, @test_var
-from tb3 where f122 = 'Test 3.5.8.5-case' order by f120;
+from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;
f120 f122 f136 f144 @test_var
1 Test 3.5.8.5-case 00152 0000099999 1=eight
1 Test 3.5.8.5-case 00200 0000000008 1=eight
@@ -499,9 +499,38 @@ drop trigger trg7;
Testcase 3.5.8.6: (requirement void)
------------------------------------
+CREATE PROCEDURE sp_01 () BEGIN set @v1=1; END//
+CREATE TRIGGER trg8_1 BEFORE UPDATE ON tb3 FOR EACH ROW
+BEGIN
+CALL sp_01 ();
+END//
+Insert into tb3 (f120, f122, f136) values ('6', 'Test 3.5.8.6-insert', 101);
+update tb3 set f120='S', f136=111,
+f122='Test 3.5.8.6-tr8_1'
+ where f122='Test 3.5.8.6-insert';
+select f120, f122
+from tb3 where f122 like 'Test 3.5.8.6%' order by f120;
+f120 f122
+S Test 3.5.8.6-tr8_1
+DROP TRIGGER trg8_1;
+DROP PROCEDURE sp_01;
-Testcase 3.5.8.7: (Disabled as a result of bug _____)
------------------------------------------------------
+Testcase 3.5.8.7
+----------------
+Create trigger trg9_1 before update on tb3 for each row
+BEGIN
+Start transaction;
+Set new.f120='U';
+Commit;
+END//
+ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger.
+Create trigger trg9_2 before delete on tb3 for each row
+BEGIN
+Start transaction;
+Set @var2=old.f120;
+Rollback;
+END//
+ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger.
drop user test_general@localhost;
drop user test_general;
drop user test_super@localhost;
diff --git a/mysql-test/suite/funcs_1/r/myisam_trig_1011ext.result b/mysql-test/suite/funcs_1/r/myisam_trig_1011ext.result
index d1ab6daa423..5d26ea7d8c9 100644
--- a/mysql-test/suite/funcs_1/r/myisam_trig_1011ext.result
+++ b/mysql-test/suite/funcs_1/r/myisam_trig_1011ext.result
@@ -298,8 +298,8 @@ drop table t2;
drop table t3;
drop table t4;
-Testcase y.y.y.4: Recursive trigger/SP references (disabled bug 11889)
-----------------------------------------------------------------------
+Testcase y.y.y.4: Recursive trigger/SP references
+-------------------------------------------------
set @sql_mode='traditional';
create table t1_sp (
count integer,
diff --git a/mysql-test/suite/funcs_1/r/myisam_views.result b/mysql-test/suite/funcs_1/r/myisam_views.result
index 3f4ad45f79a..d6585d90374 100644
--- a/mysql-test/suite/funcs_1/r/myisam_views.result
+++ b/mysql-test/suite/funcs_1/r/myisam_views.result
@@ -145,11 +145,7 @@ SET @limit1 = 20;
--------------------------------------------------------------------------------
There are some statements where the ps-protocol is switched off.
-Bug#11589: mysqltest, --ps-protocol, strange output, float/double/real with zerofill
---------------------------------------------------------------------------------
-
-! Attention: The file with the expected results suffers from
-Bug#10713: mysqldump includes database in create view and referenced tables
+Bug#32285: mysqltest, --ps-protocol, strange output, float/double/real with zerofill
--------------------------------------------------------------------------------
insert into test.tb2 (f59,f60) values (76710,226546);
insert into test.tb2 (f59,f60) values(2760,985654);
@@ -191,6 +187,58 @@ insert into tb2 (f59,f60,f61) values (109,108,104);
INSERT INTO tb2 (f59,f60) VALUES( 299,899 );
INSERT INTO tb2 (f59,f60) VALUES( 242,79 );
INSERT INTO tb2 (f59,f60) VALUES( 424,89 );
+SELECT * FROM tb2 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
+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 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
+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
+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
+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
+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
Use test;
Testcase 3.3.1.1
@@ -225,27 +273,27 @@ f59 f60 f61
8 8 0000000008
9 9 0000000009
CREATE or REPLACE VIEW v1 AS select f59,f60,f61
-FROM test.tb2 limit 4,3;
-select * FROM v1 order by f59,f60,f61 limit 0,10;
+FROM test.tb2;
+select * FROM v1 order by f59,f60,f61 limit 4,3;
f59 f60 f61
+4 74 NULL
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 order by f59 limit 0,10;
+FROM test.tb2;
+select * FROM v1 order by f59 limit 4,3;
f59
5
6
7
ALTER VIEW v1 AS select f59
-FROM test.tb2 limit 6,2;
-select * FROM v1 order by f59 limit 0,10;
+FROM test.tb2;
+select * FROM v1 order by f59 limit 6,2;
f59
+6
7
-8
CREATE or REPLACE VIEW v1 AS select f59
-from tb2 order by f59 limit 100;
+from tb2 order by f59;
select * FROM v1 order by f59 limit 0,10;
f59
1
@@ -259,7 +307,7 @@ f59
8
9
CREATE or REPLACE VIEW v1 AS select f59
-from tb2 order by f59 asc limit 100;
+from tb2 order by f59 asc;
select * FROM v1 limit 0,10;
f59
1
@@ -273,7 +321,7 @@ f59
8
9
CREATE or REPLACE VIEW v1 AS select f59
-from tb2 order by f59 desc limit 100;
+from tb2 order by f59 desc;
select * FROM v1 limit 0,10;
f59
569300
@@ -287,7 +335,7 @@ f59
987
660
CREATE or REPLACE VIEW v1 AS select f59
-from tb2 group by f59 limit 100;
+from tb2 group by f59;
select * FROM v1 order by f59 limit 0,10;
f59
1
@@ -301,7 +349,7 @@ f59
9
10
CREATE or REPLACE VIEW v1 AS select f59
-from tb2 group by f59 asc limit 100;
+from tb2 group by f59 asc;
select * FROM v1 order by f59 limit 0,10;
f59
1
@@ -315,7 +363,7 @@ f59
9
10
CREATE or REPLACE VIEW v1 AS select f59
-from tb2 group by f59 desc limit 100;
+from tb2 group by f59 desc;
select * FROM v1 order by f59 limit 0,10;
f59
1
@@ -329,7 +377,7 @@ f59
9
10
CREATE or REPLACE VIEW v1 AS (select f59 from tb2)
-union (select f59 from t1) limit 100;
+union (select f59 from t1);
select * FROM v1 order by f59 limit 0,10;
f59
1
@@ -373,71 +421,3549 @@ f59
CREATE or REPLACE VIEW v1 AS select *
FROM test.tb2 WITH LOCAL CHECK OPTION ;
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
-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 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
-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
-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
-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
-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
+f59 1
+f60 1
+f61 0000000001
+f62 0000000000000000000000000000000000000000000000000000000000000001
+f63 0000000001
+f64 0000000000000000000000000000000000000000000000000000000000000001
+f65 -5
+f66 0.000000000000000000000000000000
+f67 1
+f68 0.000000000000000000000000000000
+f69 0000000001
+f70 000000000000000000000000000000000.000000000000000000000000000000
+f71 0000000001
+f72 000000000000000000000000000000000.000000000000000000000000000000
+f73 -1.17549435e-38
+f74 1.175494352e-38
+f75 00000001.175494352e-38
+f76 00000001.175494352e-38
+f77 -1.17549435e-38
+f78 1.175494352e-38
+f79 00000001.175494352e-38
+f80 00000001.175494352e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.17549435e-38
+f95 1.17549e-38
+f96 1.175494352e-38
+f97 01.17549e-38
+f98 00000001.175494352e-38
+f99 01.17549e-38
+f100 00000001.175494352e-38
+f101 1000-01-01
+f102 838:59:58
+f103 1970-01-02 00:00:01
+f104 1970-01-02 00:00:01
+f105 1902
+f106 1902
+f107 1902
+f108 2enum
+f109 2set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
+f59 2
+f60 2
+f61 0000000002
+f62 0000000000000000000000000000000000000000000000000000000000000002
+f63 0000000002
+f64 0000000000000000000000000000000000000000000000000000000000000002
+f65 -4
+f66 1.100000000000000000000000000000
+f67 2
+f68 1.100000000000000000000000000000
+f69 0000000002
+f70 000000000000000000000000000000001.100000000000000000000000000000
+f71 0000000002
+f72 000000000000000000000000000000001.100000000000000000000000000000
+f73 -1.175494349e-38
+f74 1.175494353e-38
+f75 00000001.175494353e-38
+f76 00000001.175494353e-38
+f77 -1.175494349e-38
+f78 1.175494353e-38
+f79 00000001.175494353e-38
+f80 00000001.175494353e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494349e-38
+f95 1.17549e-38
+f96 1.175494353e-38
+f97 01.17549e-38
+f98 00000001.175494353e-38
+f99 01.17549e-38
+f100 00000001.175494353e-38
+f101 1000-01-02
+f102 838:59:57
+f103 1970-01-03 00:00:02
+f104 1970-01-03 00:00:02
+f105 1903
+f106 1903
+f107 1903
+f108 1enum
+f109 1set,2set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
+f59 3
+f60 3
+f61 0000000003
+f62 0000000000000000000000000000000000000000000000000000000000000003
+f63 0000000003
+f64 0000000000000000000000000000000000000000000000000000000000000003
+f65 -3
+f66 2.200000000000000000000000000000
+f67 3
+f68 2.200000000000000000000000000000
+f69 0000000003
+f70 000000000000000000000000000000002.200000000000000000000000000000
+f71 0000000003
+f72 000000000000000000000000000000002.200000000000000000000000000000
+f73 -1.175494348e-38
+f74 1.175494354e-38
+f75 00000001.175494354e-38
+f76 00000001.175494354e-38
+f77 -1.175494348e-38
+f78 1.175494354e-38
+f79 00000001.175494354e-38
+f80 00000001.175494354e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494348e-38
+f95 1.17549e-38
+f96 1.175494354e-38
+f97 01.17549e-38
+f98 00000001.175494354e-38
+f99 01.17549e-38
+f100 00000001.175494354e-38
+f101 1000-01-03
+f102 838:59:56
+f103 1970-01-04 00:00:03
+f104 1970-01-04 00:00:03
+f105 1904
+f106 1904
+f107 1904
+f108 2enum
+f109 1set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
+f59 4
+f60 4
+f61 0000000004
+f62 0000000000000000000000000000000000000000000000000000000000000004
+f63 0000000004
+f64 0000000000000000000000000000000000000000000000000000000000000004
+f65 -2
+f66 3.300000000000000000000000000000
+f67 4
+f68 3.300000000000000000000000000000
+f69 0000000004
+f70 000000000000000000000000000000003.300000000000000000000000000000
+f71 0000000004
+f72 000000000000000000000000000000003.300000000000000000000000000000
+f73 -1.175494347e-38
+f74 1.175494355e-38
+f75 00000001.175494355e-38
+f76 00000001.175494355e-38
+f77 -1.175494347e-38
+f78 1.175494355e-38
+f79 00000001.175494355e-38
+f80 00000001.175494355e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494347e-38
+f95 1.17549e-38
+f96 1.175494355e-38
+f97 01.17549e-38
+f98 00000001.175494355e-38
+f99 01.17549e-38
+f100 00000001.175494355e-38
+f101 1000-01-04
+f102 838:59:55
+f103 1970-01-05 00:00:04
+f104 1970-01-05 00:00:04
+f105 1905
+f106 1905
+f107 1905
+f108 1enum
+f109 2set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117 NULL
+f59 4
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 5
+f60 5
+f61 0000000005
+f62 0000000000000000000000000000000000000000000000000000000000000005
+f63 0000000005
+f64 0000000000000000000000000000000000000000000000000000000000000005
+f65 -1
+f66 4.400000000000000000000000000000
+f67 5
+f68 4.400000000000000000000000000000
+f69 0000000005
+f70 000000000000000000000000000000004.400000000000000000000000000000
+f71 0000000005
+f72 000000000000000000000000000000004.400000000000000000000000000000
+f73 -1.175494346e-38
+f74 1.175494356e-38
+f75 00000001.175494356e-38
+f76 00000001.175494356e-38
+f77 -1.175494346e-38
+f78 1.175494356e-38
+f79 00000001.175494356e-38
+f80 00000001.175494356e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494346e-38
+f95 1.17549e-38
+f96 1.175494356e-38
+f97 01.17549e-38
+f98 00000001.175494356e-38
+f99 01.17549e-38
+f100 00000001.175494356e-38
+f101 1000-01-05
+f102 838:59:54
+f103 1970-01-06 00:00:05
+f104 1970-01-06 00:00:05
+f105 1906
+f106 1906
+f107 1906
+f108 2enum
+f109 1set,2set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
+f59 6
+f60 6
+f61 0000000006
+f62 0000000000000000000000000000000000000000000000000000000000000006
+f63 0000000006
+f64 0000000000000000000000000000000000000000000000000000000000000006
+f65 0
+f66 5.500000000000000000000000000000
+f67 6
+f68 5.500000000000000000000000000000
+f69 0000000006
+f70 000000000000000000000000000000005.500000000000000000000000000000
+f71 0000000006
+f72 000000000000000000000000000000005.500000000000000000000000000000
+f73 -1.175494345e-38
+f74 1.175494357e-38
+f75 00000001.175494357e-38
+f76 00000001.175494357e-38
+f77 -1.175494345e-38
+f78 1.175494357e-38
+f79 00000001.175494357e-38
+f80 00000001.175494357e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494345e-38
+f95 1.17549e-38
+f96 1.175494357e-38
+f97 01.17549e-38
+f98 00000001.175494357e-38
+f99 01.17549e-38
+f100 00000001.175494357e-38
+f101 1000-01-06
+f102 838:59:53
+f103 1970-01-07 00:00:06
+f104 1970-01-07 00:00:06
+f105 1907
+f106 1907
+f107 1907
+f108 1enum
+f109 1set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
+f59 7
+f60 7
+f61 0000000007
+f62 0000000000000000000000000000000000000000000000000000000000000007
+f63 0000000007
+f64 0000000000000000000000000000000000000000000000000000000000000007
+f65 1
+f66 6.600000000000000000000000000000
+f67 7
+f68 6.600000000000000000000000000000
+f69 0000000007
+f70 000000000000000000000000000000006.600000000000000000000000000000
+f71 0000000007
+f72 000000000000000000000000000000006.600000000000000000000000000000
+f73 -1.175494344e-38
+f74 1.175494358e-38
+f75 00000001.175494358e-38
+f76 00000001.175494358e-38
+f77 -1.175494344e-38
+f78 1.175494358e-38
+f79 00000001.175494358e-38
+f80 00000001.175494358e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494344e-38
+f95 1.17549e-38
+f96 1.175494358e-38
+f97 01.17549e-38
+f98 00000001.175494358e-38
+f99 01.17549e-38
+f100 00000001.175494358e-38
+f101 1000-01-07
+f102 838:59:52
+f103 1970-01-08 00:00:07
+f104 1970-01-08 00:00:07
+f105 1908
+f106 1908
+f107 1908
+f108 2enum
+f109 2set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
+f59 8
+f60 8
+f61 0000000008
+f62 0000000000000000000000000000000000000000000000000000000000000008
+f63 0000000008
+f64 0000000000000000000000000000000000000000000000000000000000000008
+f65 2
+f66 7.700000000000000000000000000000
+f67 8
+f68 7.700000000000000000000000000000
+f69 0000000008
+f70 000000000000000000000000000000007.700000000000000000000000000000
+f71 0000000008
+f72 000000000000000000000000000000007.700000000000000000000000000000
+f73 -1.175494343e-38
+f74 1.175494359e-38
+f75 00000001.175494359e-38
+f76 00000001.175494359e-38
+f77 -1.175494343e-38
+f78 1.175494359e-38
+f79 00000001.175494359e-38
+f80 00000001.175494359e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494343e-38
+f95 1.17549e-38
+f96 1.175494359e-38
+f97 01.17549e-38
+f98 00000001.175494359e-38
+f99 01.17549e-38
+f100 00000001.175494359e-38
+f101 1000-01-08
+f102 838:59:51
+f103 1970-01-09 00:00:08
+f104 1970-01-09 00:00:08
+f105 1909
+f106 1909
+f107 1909
+f108 1enum
+f109 1set,2set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
+f59 9
+f60 9
+f61 0000000009
+f62 0000000000000000000000000000000000000000000000000000000000000009
+f63 0000000009
+f64 0000000000000000000000000000000000000000000000000000000000000009
+f65 3
+f66 8.800000000000000000000000000000
+f67 9
+f68 8.800000000000000000000000000000
+f69 0000000009
+f70 000000000000000000000000000000008.800000000000000000000000000000
+f71 0000000009
+f72 000000000000000000000000000000008.800000000000000000000000000000
+f73 -1.175494342e-38
+f74 1.17549436e-38
+f75 000000001.17549436e-38
+f76 000000001.17549436e-38
+f77 -1.175494342e-38
+f78 1.17549436e-38
+f79 000000001.17549436e-38
+f80 000000001.17549436e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494342e-38
+f95 1.17549e-38
+f96 1.17549436e-38
+f97 01.17549e-38
+f98 000000001.17549436e-38
+f99 01.17549e-38
+f100 000000001.17549436e-38
+f101 1000-01-09
+f102 838:59:50
+f103 1970-01-10 00:00:09
+f104 1970-01-10 00:00:09
+f105 1910
+f106 1910
+f107 1910
+f108 2enum
+f109 1set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
+f59 10
+f60 10
+f61 0000000010
+f62 0000000000000000000000000000000000000000000000000000000000000010
+f63 0000000010
+f64 0000000000000000000000000000000000000000000000000000000000000010
+f65 4
+f66 9.900000000000000000000000000000
+f67 10
+f68 9.900000000000000000000000000000
+f69 0000000010
+f70 000000000000000000000000000000009.900000000000000000000000000000
+f71 0000000010
+f72 000000000000000000000000000000009.900000000000000000000000000000
+f73 -1.175494341e-38
+f74 1.175494361e-38
+f75 00000001.175494361e-38
+f76 00000001.175494361e-38
+f77 -1.175494341e-38
+f78 1.175494361e-38
+f79 00000001.175494361e-38
+f80 00000001.175494361e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494341e-38
+f95 1.17549e-38
+f96 1.175494361e-38
+f97 01.17549e-38
+f98 00000001.175494361e-38
+f99 01.17549e-38
+f100 00000001.175494361e-38
+f101 1000-01-10
+f102 838:59:49
+f103 1970-01-11 00:00:10
+f104 1970-01-11 00:00:10
+f105 1911
+f106 1911
+f107 1911
+f108 1enum
+f109 2set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117 NULL
+f59 15
+f60 87
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 17
+f60 15
+f61 0000000016
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 19
+f60 18
+f61 0000000014
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 22
+f60 93
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 24
+f60 51654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 27
+f60 25
+f61 0000000026
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 29
+f60 28
+f61 0000000024
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 34
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 94
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 107
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 107
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 109
+f60 108
+f61 0000000104
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 109
+f60 108
+f61 0000000104
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 195
+f60 87
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 207
+f60 205
+f61 0000000206
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 209
+f60 208
+f61 0000000204
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 242
+f60 79
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 250
+f60 87895654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 292
+f60 93
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 299
+f60 899
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 321
+f60 NULL
+f61 0000000765
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 323
+f60 14376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 340
+f60 9984376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 394
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 424
+f60 89
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 441
+f60 16546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 660
+f60 876546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 987
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 2550
+f60 775654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 2760
+f60 985654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 3330
+f60 764376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 3410
+f60 996546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 7876
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 9112
+f60 NULL
+f61 0000008771
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 76710
+f60 226546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 569300
+f60 9114376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
CREATE or REPLACE VIEW v1 AS select *
FROM test.tb2 WITH CASCADED CHECK OPTION ;
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
-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 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
-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
+f59 1
+f60 1
+f61 0000000001
+f62 0000000000000000000000000000000000000000000000000000000000000001
+f63 0000000001
+f64 0000000000000000000000000000000000000000000000000000000000000001
+f65 -5
+f66 0.000000000000000000000000000000
+f67 1
+f68 0.000000000000000000000000000000
+f69 0000000001
+f70 000000000000000000000000000000000.000000000000000000000000000000
+f71 0000000001
+f72 000000000000000000000000000000000.000000000000000000000000000000
+f73 -1.17549435e-38
+f74 1.175494352e-38
+f75 00000001.175494352e-38
+f76 00000001.175494352e-38
+f77 -1.17549435e-38
+f78 1.175494352e-38
+f79 00000001.175494352e-38
+f80 00000001.175494352e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.17549435e-38
+f95 1.17549e-38
+f96 1.175494352e-38
+f97 01.17549e-38
+f98 00000001.175494352e-38
+f99 01.17549e-38
+f100 00000001.175494352e-38
+f101 1000-01-01
+f102 838:59:58
+f103 1970-01-02 00:00:01
+f104 1970-01-02 00:00:01
+f105 1902
+f106 1902
+f107 1902
+f108 2enum
+f109 2set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
+f59 2
+f60 2
+f61 0000000002
+f62 0000000000000000000000000000000000000000000000000000000000000002
+f63 0000000002
+f64 0000000000000000000000000000000000000000000000000000000000000002
+f65 -4
+f66 1.100000000000000000000000000000
+f67 2
+f68 1.100000000000000000000000000000
+f69 0000000002
+f70 000000000000000000000000000000001.100000000000000000000000000000
+f71 0000000002
+f72 000000000000000000000000000000001.100000000000000000000000000000
+f73 -1.175494349e-38
+f74 1.175494353e-38
+f75 00000001.175494353e-38
+f76 00000001.175494353e-38
+f77 -1.175494349e-38
+f78 1.175494353e-38
+f79 00000001.175494353e-38
+f80 00000001.175494353e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494349e-38
+f95 1.17549e-38
+f96 1.175494353e-38
+f97 01.17549e-38
+f98 00000001.175494353e-38
+f99 01.17549e-38
+f100 00000001.175494353e-38
+f101 1000-01-02
+f102 838:59:57
+f103 1970-01-03 00:00:02
+f104 1970-01-03 00:00:02
+f105 1903
+f106 1903
+f107 1903
+f108 1enum
+f109 1set,2set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
+f59 3
+f60 3
+f61 0000000003
+f62 0000000000000000000000000000000000000000000000000000000000000003
+f63 0000000003
+f64 0000000000000000000000000000000000000000000000000000000000000003
+f65 -3
+f66 2.200000000000000000000000000000
+f67 3
+f68 2.200000000000000000000000000000
+f69 0000000003
+f70 000000000000000000000000000000002.200000000000000000000000000000
+f71 0000000003
+f72 000000000000000000000000000000002.200000000000000000000000000000
+f73 -1.175494348e-38
+f74 1.175494354e-38
+f75 00000001.175494354e-38
+f76 00000001.175494354e-38
+f77 -1.175494348e-38
+f78 1.175494354e-38
+f79 00000001.175494354e-38
+f80 00000001.175494354e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494348e-38
+f95 1.17549e-38
+f96 1.175494354e-38
+f97 01.17549e-38
+f98 00000001.175494354e-38
+f99 01.17549e-38
+f100 00000001.175494354e-38
+f101 1000-01-03
+f102 838:59:56
+f103 1970-01-04 00:00:03
+f104 1970-01-04 00:00:03
+f105 1904
+f106 1904
+f107 1904
+f108 2enum
+f109 1set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
+f59 4
+f60 4
+f61 0000000004
+f62 0000000000000000000000000000000000000000000000000000000000000004
+f63 0000000004
+f64 0000000000000000000000000000000000000000000000000000000000000004
+f65 -2
+f66 3.300000000000000000000000000000
+f67 4
+f68 3.300000000000000000000000000000
+f69 0000000004
+f70 000000000000000000000000000000003.300000000000000000000000000000
+f71 0000000004
+f72 000000000000000000000000000000003.300000000000000000000000000000
+f73 -1.175494347e-38
+f74 1.175494355e-38
+f75 00000001.175494355e-38
+f76 00000001.175494355e-38
+f77 -1.175494347e-38
+f78 1.175494355e-38
+f79 00000001.175494355e-38
+f80 00000001.175494355e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494347e-38
+f95 1.17549e-38
+f96 1.175494355e-38
+f97 01.17549e-38
+f98 00000001.175494355e-38
+f99 01.17549e-38
+f100 00000001.175494355e-38
+f101 1000-01-04
+f102 838:59:55
+f103 1970-01-05 00:00:04
+f104 1970-01-05 00:00:04
+f105 1905
+f106 1905
+f107 1905
+f108 1enum
+f109 2set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117 NULL
+f59 4
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 5
+f60 5
+f61 0000000005
+f62 0000000000000000000000000000000000000000000000000000000000000005
+f63 0000000005
+f64 0000000000000000000000000000000000000000000000000000000000000005
+f65 -1
+f66 4.400000000000000000000000000000
+f67 5
+f68 4.400000000000000000000000000000
+f69 0000000005
+f70 000000000000000000000000000000004.400000000000000000000000000000
+f71 0000000005
+f72 000000000000000000000000000000004.400000000000000000000000000000
+f73 -1.175494346e-38
+f74 1.175494356e-38
+f75 00000001.175494356e-38
+f76 00000001.175494356e-38
+f77 -1.175494346e-38
+f78 1.175494356e-38
+f79 00000001.175494356e-38
+f80 00000001.175494356e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494346e-38
+f95 1.17549e-38
+f96 1.175494356e-38
+f97 01.17549e-38
+f98 00000001.175494356e-38
+f99 01.17549e-38
+f100 00000001.175494356e-38
+f101 1000-01-05
+f102 838:59:54
+f103 1970-01-06 00:00:05
+f104 1970-01-06 00:00:05
+f105 1906
+f106 1906
+f107 1906
+f108 2enum
+f109 1set,2set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
+f59 6
+f60 6
+f61 0000000006
+f62 0000000000000000000000000000000000000000000000000000000000000006
+f63 0000000006
+f64 0000000000000000000000000000000000000000000000000000000000000006
+f65 0
+f66 5.500000000000000000000000000000
+f67 6
+f68 5.500000000000000000000000000000
+f69 0000000006
+f70 000000000000000000000000000000005.500000000000000000000000000000
+f71 0000000006
+f72 000000000000000000000000000000005.500000000000000000000000000000
+f73 -1.175494345e-38
+f74 1.175494357e-38
+f75 00000001.175494357e-38
+f76 00000001.175494357e-38
+f77 -1.175494345e-38
+f78 1.175494357e-38
+f79 00000001.175494357e-38
+f80 00000001.175494357e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494345e-38
+f95 1.17549e-38
+f96 1.175494357e-38
+f97 01.17549e-38
+f98 00000001.175494357e-38
+f99 01.17549e-38
+f100 00000001.175494357e-38
+f101 1000-01-06
+f102 838:59:53
+f103 1970-01-07 00:00:06
+f104 1970-01-07 00:00:06
+f105 1907
+f106 1907
+f107 1907
+f108 1enum
+f109 1set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
+f59 7
+f60 7
+f61 0000000007
+f62 0000000000000000000000000000000000000000000000000000000000000007
+f63 0000000007
+f64 0000000000000000000000000000000000000000000000000000000000000007
+f65 1
+f66 6.600000000000000000000000000000
+f67 7
+f68 6.600000000000000000000000000000
+f69 0000000007
+f70 000000000000000000000000000000006.600000000000000000000000000000
+f71 0000000007
+f72 000000000000000000000000000000006.600000000000000000000000000000
+f73 -1.175494344e-38
+f74 1.175494358e-38
+f75 00000001.175494358e-38
+f76 00000001.175494358e-38
+f77 -1.175494344e-38
+f78 1.175494358e-38
+f79 00000001.175494358e-38
+f80 00000001.175494358e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494344e-38
+f95 1.17549e-38
+f96 1.175494358e-38
+f97 01.17549e-38
+f98 00000001.175494358e-38
+f99 01.17549e-38
+f100 00000001.175494358e-38
+f101 1000-01-07
+f102 838:59:52
+f103 1970-01-08 00:00:07
+f104 1970-01-08 00:00:07
+f105 1908
+f106 1908
+f107 1908
+f108 2enum
+f109 2set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
+f59 8
+f60 8
+f61 0000000008
+f62 0000000000000000000000000000000000000000000000000000000000000008
+f63 0000000008
+f64 0000000000000000000000000000000000000000000000000000000000000008
+f65 2
+f66 7.700000000000000000000000000000
+f67 8
+f68 7.700000000000000000000000000000
+f69 0000000008
+f70 000000000000000000000000000000007.700000000000000000000000000000
+f71 0000000008
+f72 000000000000000000000000000000007.700000000000000000000000000000
+f73 -1.175494343e-38
+f74 1.175494359e-38
+f75 00000001.175494359e-38
+f76 00000001.175494359e-38
+f77 -1.175494343e-38
+f78 1.175494359e-38
+f79 00000001.175494359e-38
+f80 00000001.175494359e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494343e-38
+f95 1.17549e-38
+f96 1.175494359e-38
+f97 01.17549e-38
+f98 00000001.175494359e-38
+f99 01.17549e-38
+f100 00000001.175494359e-38
+f101 1000-01-08
+f102 838:59:51
+f103 1970-01-09 00:00:08
+f104 1970-01-09 00:00:08
+f105 1909
+f106 1909
+f107 1909
+f108 1enum
+f109 1set,2set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
+f59 9
+f60 9
+f61 0000000009
+f62 0000000000000000000000000000000000000000000000000000000000000009
+f63 0000000009
+f64 0000000000000000000000000000000000000000000000000000000000000009
+f65 3
+f66 8.800000000000000000000000000000
+f67 9
+f68 8.800000000000000000000000000000
+f69 0000000009
+f70 000000000000000000000000000000008.800000000000000000000000000000
+f71 0000000009
+f72 000000000000000000000000000000008.800000000000000000000000000000
+f73 -1.175494342e-38
+f74 1.17549436e-38
+f75 000000001.17549436e-38
+f76 000000001.17549436e-38
+f77 -1.175494342e-38
+f78 1.17549436e-38
+f79 000000001.17549436e-38
+f80 000000001.17549436e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494342e-38
+f95 1.17549e-38
+f96 1.17549436e-38
+f97 01.17549e-38
+f98 000000001.17549436e-38
+f99 01.17549e-38
+f100 000000001.17549436e-38
+f101 1000-01-09
+f102 838:59:50
+f103 1970-01-10 00:00:09
+f104 1970-01-10 00:00:09
+f105 1910
+f106 1910
+f107 1910
+f108 2enum
+f109 1set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
CREATE OR REPLACE VIEW v1 AS SELECT F59, F60
FROM test.tb2 WITH CASCADED CHECK OPTION;
SELECT * FROM v1 order by f59,f60 limit 0,10;
@@ -517,8 +4043,8 @@ DROP VIEW v1;
Testcase 3.3.1.3 + 3.1.1.4
--------------------------------------------------------------------------------
DROP VIEW IF EXISTS v1 ;
-CREATE VIEW v1 or REPLACE AS Select * from tb2 my_table limit 50;
-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 'or REPLACE AS Select * from tb2 my_table limit 50' at line 1
+CREATE VIEW v1 or REPLACE AS Select * from tb2 my_table;
+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 'or REPLACE AS Select * from tb2 my_table' at line 1
CREATE VIEW v1 WITH CASCADED CHECK OPTION AS Select *
from tb2 my_table limit 50;
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 'WITH CASCADED CHECK OPTION AS Select *
@@ -527,8 +4053,8 @@ CREATE VIEW v1 WITH LOCAL CHECK OPTION AS Select *
from tb2 my_table limit 50;
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 'WITH LOCAL CHECK OPTION AS Select *
from tb2 my_table limit 50' at line 1
-SELECT * FROM tb2 my_table CREATE VIEW As v1 limit 100 ;
-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 'CREATE VIEW As v1 limit 100' at line 1
+SELECT * FROM tb2 my_table CREATE VIEW As v1;
+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 'CREATE VIEW As v1' at line 1
CREATE or REPLACE VIEW v1 Select f59, f60
from test.tb2 my_table where f59 = 250 ;
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 'Select f59, f60
@@ -603,8 +4129,8 @@ Union ALL (Select from f1 t1);
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from f59 tb2)
Union ALL (Select from f1 t1)' at line 1
CREATE or REPLACE view v1 as Select f59, f60
-from tb2 by order f59 limit 100 ;
-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 'by order f59 limit 100' at line 2
+from tb2 by order f59;
+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 'by order f59' at line 2
CREATE or REPLACE view v1 as Select f59, f60
from tb2 by group f59 ;
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 'by group f59' at line 2
@@ -612,12 +4138,12 @@ ERROR 42000: You have an error in your SQL syntax; check the manual that corresp
Testcase 3.3.1.5
--------------------------------------------------------------------------------
DROP VIEW IF EXISTS v1 ;
-CREATE VIEW v1 SELECT * FROM tb2 limit 100 ;
-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 'SELECT * FROM tb2 limit 100' at line 1
-CREATE v1 AS SELECT * FROM tb2 limit 100 ;
-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 'v1 AS SELECT * FROM tb2 limit 100' at line 1
-VIEW v1 AS SELECT * FROM tb2 limit 100 ;
-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 'VIEW v1 AS SELECT * FROM tb2 limit 100' at line 1
+CREATE VIEW v1 SELECT * FROM tb2;
+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 'SELECT * FROM tb2' at line 1
+CREATE v1 AS SELECT * FROM tb2;
+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 'v1 AS SELECT * FROM tb2' at line 1
+VIEW v1 AS SELECT * FROM tb2;
+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 'VIEW v1 AS SELECT * FROM tb2' at line 1
CREATE VIEW v1 AS SELECT 1;
DROP VIEW v1;
VIEW v1 AS SELECT 1;
@@ -635,45 +4161,43 @@ Testcase 3.3.1.6
--------------------------------------------------------------------------------
DROP VIEW IF EXISTS v1 ;
CREATE or REPLACE VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
CREATE or REPLACE ALGORITHM = UNDEFINED VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
CREATE or REPLACE ALGORITHM = MERGE VIEW v1
-as SELECT * from tb2 limit 100 ;
-Warnings:
-Warning 1354 View merge algorithm can't be used here for now (assumed undefined algorithm)
+as SELECT * from tb2;
CREATE or REPLACE ALGORITHM = TEMPTABLE VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
CREATE or REPLACE ALGORITHM = TEMPTABLE VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
CREATE or REPLACE = TEMPTABLE VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
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 '= TEMPTABLE VIEW v1
-as SELECT * from tb2 limit 100' at line 1
+as SELECT * from tb2' at line 1
CREATE or REPLACE ALGORITHM TEMPTABLE VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
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 'TEMPTABLE VIEW v1
-as SELECT * from tb2 limit 100' at line 1
+as SELECT * from tb2' at line 1
CREATE or REPLACE ALGORITHM = VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
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 'VIEW v1
-as SELECT * from tb2 limit 100' at line 1
+as SELECT * from tb2' at line 1
CREATE or REPLACE TEMPTABLE = ALGORITHM VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
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 'TEMPTABLE = ALGORITHM VIEW v1
-as SELECT * from tb2 limit 100' at line 1
+as SELECT * from tb2' at line 1
CREATE or REPLACE TEMPTABLE - ALGORITHM VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
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 'TEMPTABLE - ALGORITHM VIEW v1
-as SELECT * from tb2 limit 100' at line 1
+as SELECT * from tb2' at line 1
CREATE or REPLACE GARBAGE = TEMPTABLE VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
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 'GARBAGE = TEMPTABLE VIEW v1
-as SELECT * from tb2 limit 100' at line 1
+as SELECT * from tb2' at line 1
CREATE or REPLACE ALGORITHM = GARBAGE VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
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 'GARBAGE VIEW v1
-as SELECT * from tb2 limit 100' at line 1
+as SELECT * from tb2' at line 1
Drop view if exists v1 ;
CREATE or REPLACE VIEW v1
AS SELECT * from tb2 where f59 < 1;
@@ -699,7 +4223,7 @@ ERROR 42000: You have an error in your SQL syntax; check the manual that corresp
Testcase 3.3.1.7
--------------------------------------------------------------------------------
DROP VIEW IF EXISTS v1 ;
-Create view test.v1 AS Select * from test.tb2 limit 100 ;
+Create view test.v1 AS Select * from test.tb2;
Alter view test.v1 AS Select F59 from test. tb2 limit 100 ;
Drop view test.v1 ;
Create view v1 AS Select * from test.tb2 limit 100 ;
@@ -903,16 +4427,131 @@ 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` 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
-CREATE OR REPLACE VIEW test.v1 AS SELECT F59 FROM tb2 limit 10,100;
+f59 1
+f60 1
+f61 0000000001
+f62 0000000000000000000000000000000000000000000000000000000000000001
+f63 0000000001
+f64 0000000000000000000000000000000000000000000000000000000000000001
+f65 -5
+f66 0.000000000000000000000000000000
+f67 1
+f68 0.000000000000000000000000000000
+f69 0000000001
+f70 000000000000000000000000000000000.000000000000000000000000000000
+f71 0000000001
+f72 000000000000000000000000000000000.000000000000000000000000000000
+f73 -1.17549435e-38
+f74 1.175494352e-38
+f75 00000001.175494352e-38
+f76 00000001.175494352e-38
+f77 -1.17549435e-38
+f78 1.175494352e-38
+f79 00000001.175494352e-38
+f80 00000001.175494352e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.17549435e-38
+f95 1.17549e-38
+f96 1.175494352e-38
+f97 01.17549e-38
+f98 00000001.175494352e-38
+f99 01.17549e-38
+f100 00000001.175494352e-38
+f101 1000-01-01
+f102 838:59:58
+f103 1970-01-02 00:00:01
+f104 1970-01-02 00:00:01
+f105 1902
+f106 1902
+f107 1902
+f108 2enum
+f109 2set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
+f59 2
+f60 2
+f61 0000000002
+f62 0000000000000000000000000000000000000000000000000000000000000002
+f63 0000000002
+f64 0000000000000000000000000000000000000000000000000000000000000002
+f65 -4
+f66 1.100000000000000000000000000000
+f67 2
+f68 1.100000000000000000000000000000
+f69 0000000002
+f70 000000000000000000000000000000001.100000000000000000000000000000
+f71 0000000002
+f72 000000000000000000000000000000001.100000000000000000000000000000
+f73 -1.175494349e-38
+f74 1.175494353e-38
+f75 00000001.175494353e-38
+f76 00000001.175494353e-38
+f77 -1.175494349e-38
+f78 1.175494353e-38
+f79 00000001.175494353e-38
+f80 00000001.175494353e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494349e-38
+f95 1.17549e-38
+f96 1.175494353e-38
+f97 01.17549e-38
+f98 00000001.175494353e-38
+f99 01.17549e-38
+f100 00000001.175494353e-38
+f101 1000-01-02
+f102 838:59:57
+f103 1970-01-03 00:00:02
+f104 1970-01-03 00:00:02
+f105 1903
+f106 1903
+f107 1903
+f108 1enum
+f109 1set,2set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
+CREATE OR REPLACE VIEW test.v1 AS SELECT F59 FROM tb2;
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 order by F59;
+v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `tb2`.`f59` AS `F59` from `tb2` latin1 latin1_swedish_ci
+SELECT * FROM test.v1 order by F59 limit 10,100;
F59
-4
+10
15
17
19
@@ -965,11 +4604,10 @@ ERROR HY000: 'test.tb2' is not VIEW
Testcase 3.3.1.15
--------------------------------------------------------------------------------
Drop table if exists test.v1 ;
-CREATE OR REPLACE view test.v1 as select * from tb2 LIMIT 2;
+CREATE OR REPLACE view test.v1 as select * from tb2;
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 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
+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
Drop view test.v1 ;
Testcase 3.3.1.16 + 3.3.1.17
@@ -1102,8 +4740,8 @@ ERROR HY000: View's SELECT and view's field list have different column counts
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 order by F59, F60 desc;
+CREATE VIEW test.v1( F59, F60 ) AS SELECT F59, F60 From tb2;
+SELECT * FROM test.v1 order by F59, F60 desc LIMIT 2;
F59 F60
1 1
2 2
@@ -1112,7 +4750,7 @@ Drop view if exists test.v1 ;
Testcase 3.3.1.22
--------------------------------------------------------------------------------
DROP VIEW IF EXISTS v1;
-CREATE VIEW test.v1( product ) AS SELECT f59*f60 From tb2 LIMIT 2;
+CREATE VIEW test.v1( product ) AS SELECT f59*f60 From tb2 WHERE f59 < 3;
SELECT * FROM test.v1;
product
1
@@ -1199,20 +4837,19 @@ DROP TEMPORARY TABLE t2;
Testcase 3.3.1.26
--------------------------------------------------------------------------------
DROP VIEW IF EXISTS v1;
-Create view test.v1 AS Select * from test.tb2 limit 2 ;
+Create view test.v1 AS Select * from test.tb2;
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 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
+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
Drop view test.v1 ;
Testcase 3.3.1.27
--------------------------------------------------------------------------------
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 AS Select * from test.tb2;
Create view test.v1_1 AS Select F59 from test.v1 ;
-Select * from test.v1_1 order by F59 limit 20 ;
+Select * from test.v1_1 order by F59 limit 2;
F59
1
2
@@ -1227,57 +4864,2956 @@ 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 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
-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 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
-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
-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
-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
-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
+f59 1
+f60 1
+f61 0000000001
+f62 0000000000000000000000000000000000000000000000000000000000000001
+f63 0000000001
+f64 0000000000000000000000000000000000000000000000000000000000000001
+f65 -5
+f66 0.000000000000000000000000000000
+f67 1
+f68 0.000000000000000000000000000000
+f69 0000000001
+f70 000000000000000000000000000000000.000000000000000000000000000000
+f71 0000000001
+f72 000000000000000000000000000000000.000000000000000000000000000000
+f73 -1.17549435e-38
+f74 1.175494352e-38
+f75 00000001.175494352e-38
+f76 00000001.175494352e-38
+f77 -1.17549435e-38
+f78 1.175494352e-38
+f79 00000001.175494352e-38
+f80 00000001.175494352e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.17549435e-38
+f95 1.17549e-38
+f96 1.175494352e-38
+f97 01.17549e-38
+f98 00000001.175494352e-38
+f99 01.17549e-38
+f100 00000001.175494352e-38
+f101 1000-01-01
+f102 838:59:58
+f103 1970-01-02 00:00:01
+f104 1970-01-02 00:00:01
+f105 1902
+f106 1902
+f107 1902
+f108 2enum
+f109 2set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
+f59 2
+f60 2
+f61 0000000002
+f62 0000000000000000000000000000000000000000000000000000000000000002
+f63 0000000002
+f64 0000000000000000000000000000000000000000000000000000000000000002
+f65 -4
+f66 1.100000000000000000000000000000
+f67 2
+f68 1.100000000000000000000000000000
+f69 0000000002
+f70 000000000000000000000000000000001.100000000000000000000000000000
+f71 0000000002
+f72 000000000000000000000000000000001.100000000000000000000000000000
+f73 -1.175494349e-38
+f74 1.175494353e-38
+f75 00000001.175494353e-38
+f76 00000001.175494353e-38
+f77 -1.175494349e-38
+f78 1.175494353e-38
+f79 00000001.175494353e-38
+f80 00000001.175494353e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494349e-38
+f95 1.17549e-38
+f96 1.175494353e-38
+f97 01.17549e-38
+f98 00000001.175494353e-38
+f99 01.17549e-38
+f100 00000001.175494353e-38
+f101 1000-01-02
+f102 838:59:57
+f103 1970-01-03 00:00:02
+f104 1970-01-03 00:00:02
+f105 1903
+f106 1903
+f107 1903
+f108 1enum
+f109 1set,2set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
+f59 3
+f60 3
+f61 0000000003
+f62 0000000000000000000000000000000000000000000000000000000000000003
+f63 0000000003
+f64 0000000000000000000000000000000000000000000000000000000000000003
+f65 -3
+f66 2.200000000000000000000000000000
+f67 3
+f68 2.200000000000000000000000000000
+f69 0000000003
+f70 000000000000000000000000000000002.200000000000000000000000000000
+f71 0000000003
+f72 000000000000000000000000000000002.200000000000000000000000000000
+f73 -1.175494348e-38
+f74 1.175494354e-38
+f75 00000001.175494354e-38
+f76 00000001.175494354e-38
+f77 -1.175494348e-38
+f78 1.175494354e-38
+f79 00000001.175494354e-38
+f80 00000001.175494354e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494348e-38
+f95 1.17549e-38
+f96 1.175494354e-38
+f97 01.17549e-38
+f98 00000001.175494354e-38
+f99 01.17549e-38
+f100 00000001.175494354e-38
+f101 1000-01-03
+f102 838:59:56
+f103 1970-01-04 00:00:03
+f104 1970-01-04 00:00:03
+f105 1904
+f106 1904
+f107 1904
+f108 2enum
+f109 1set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
+f59 4
+f60 4
+f61 0000000004
+f62 0000000000000000000000000000000000000000000000000000000000000004
+f63 0000000004
+f64 0000000000000000000000000000000000000000000000000000000000000004
+f65 -2
+f66 3.300000000000000000000000000000
+f67 4
+f68 3.300000000000000000000000000000
+f69 0000000004
+f70 000000000000000000000000000000003.300000000000000000000000000000
+f71 0000000004
+f72 000000000000000000000000000000003.300000000000000000000000000000
+f73 -1.175494347e-38
+f74 1.175494355e-38
+f75 00000001.175494355e-38
+f76 00000001.175494355e-38
+f77 -1.175494347e-38
+f78 1.175494355e-38
+f79 00000001.175494355e-38
+f80 00000001.175494355e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494347e-38
+f95 1.17549e-38
+f96 1.175494355e-38
+f97 01.17549e-38
+f98 00000001.175494355e-38
+f99 01.17549e-38
+f100 00000001.175494355e-38
+f101 1000-01-04
+f102 838:59:55
+f103 1970-01-05 00:00:04
+f104 1970-01-05 00:00:04
+f105 1905
+f106 1905
+f107 1905
+f108 1enum
+f109 2set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117 NULL
+f59 4
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 5
+f60 5
+f61 0000000005
+f62 0000000000000000000000000000000000000000000000000000000000000005
+f63 0000000005
+f64 0000000000000000000000000000000000000000000000000000000000000005
+f65 -1
+f66 4.400000000000000000000000000000
+f67 5
+f68 4.400000000000000000000000000000
+f69 0000000005
+f70 000000000000000000000000000000004.400000000000000000000000000000
+f71 0000000005
+f72 000000000000000000000000000000004.400000000000000000000000000000
+f73 -1.175494346e-38
+f74 1.175494356e-38
+f75 00000001.175494356e-38
+f76 00000001.175494356e-38
+f77 -1.175494346e-38
+f78 1.175494356e-38
+f79 00000001.175494356e-38
+f80 00000001.175494356e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494346e-38
+f95 1.17549e-38
+f96 1.175494356e-38
+f97 01.17549e-38
+f98 00000001.175494356e-38
+f99 01.17549e-38
+f100 00000001.175494356e-38
+f101 1000-01-05
+f102 838:59:54
+f103 1970-01-06 00:00:05
+f104 1970-01-06 00:00:05
+f105 1906
+f106 1906
+f107 1906
+f108 2enum
+f109 1set,2set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
+f59 6
+f60 6
+f61 0000000006
+f62 0000000000000000000000000000000000000000000000000000000000000006
+f63 0000000006
+f64 0000000000000000000000000000000000000000000000000000000000000006
+f65 0
+f66 5.500000000000000000000000000000
+f67 6
+f68 5.500000000000000000000000000000
+f69 0000000006
+f70 000000000000000000000000000000005.500000000000000000000000000000
+f71 0000000006
+f72 000000000000000000000000000000005.500000000000000000000000000000
+f73 -1.175494345e-38
+f74 1.175494357e-38
+f75 00000001.175494357e-38
+f76 00000001.175494357e-38
+f77 -1.175494345e-38
+f78 1.175494357e-38
+f79 00000001.175494357e-38
+f80 00000001.175494357e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494345e-38
+f95 1.17549e-38
+f96 1.175494357e-38
+f97 01.17549e-38
+f98 00000001.175494357e-38
+f99 01.17549e-38
+f100 00000001.175494357e-38
+f101 1000-01-06
+f102 838:59:53
+f103 1970-01-07 00:00:06
+f104 1970-01-07 00:00:06
+f105 1907
+f106 1907
+f107 1907
+f108 1enum
+f109 1set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
+f59 7
+f60 7
+f61 0000000007
+f62 0000000000000000000000000000000000000000000000000000000000000007
+f63 0000000007
+f64 0000000000000000000000000000000000000000000000000000000000000007
+f65 1
+f66 6.600000000000000000000000000000
+f67 7
+f68 6.600000000000000000000000000000
+f69 0000000007
+f70 000000000000000000000000000000006.600000000000000000000000000000
+f71 0000000007
+f72 000000000000000000000000000000006.600000000000000000000000000000
+f73 -1.175494344e-38
+f74 1.175494358e-38
+f75 00000001.175494358e-38
+f76 00000001.175494358e-38
+f77 -1.175494344e-38
+f78 1.175494358e-38
+f79 00000001.175494358e-38
+f80 00000001.175494358e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494344e-38
+f95 1.17549e-38
+f96 1.175494358e-38
+f97 01.17549e-38
+f98 00000001.175494358e-38
+f99 01.17549e-38
+f100 00000001.175494358e-38
+f101 1000-01-07
+f102 838:59:52
+f103 1970-01-08 00:00:07
+f104 1970-01-08 00:00:07
+f105 1908
+f106 1908
+f107 1908
+f108 2enum
+f109 2set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
+f59 8
+f60 8
+f61 0000000008
+f62 0000000000000000000000000000000000000000000000000000000000000008
+f63 0000000008
+f64 0000000000000000000000000000000000000000000000000000000000000008
+f65 2
+f66 7.700000000000000000000000000000
+f67 8
+f68 7.700000000000000000000000000000
+f69 0000000008
+f70 000000000000000000000000000000007.700000000000000000000000000000
+f71 0000000008
+f72 000000000000000000000000000000007.700000000000000000000000000000
+f73 -1.175494343e-38
+f74 1.175494359e-38
+f75 00000001.175494359e-38
+f76 00000001.175494359e-38
+f77 -1.175494343e-38
+f78 1.175494359e-38
+f79 00000001.175494359e-38
+f80 00000001.175494359e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494343e-38
+f95 1.17549e-38
+f96 1.175494359e-38
+f97 01.17549e-38
+f98 00000001.175494359e-38
+f99 01.17549e-38
+f100 00000001.175494359e-38
+f101 1000-01-08
+f102 838:59:51
+f103 1970-01-09 00:00:08
+f104 1970-01-09 00:00:08
+f105 1909
+f106 1909
+f107 1909
+f108 1enum
+f109 1set,2set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
+f59 9
+f60 9
+f61 0000000009
+f62 0000000000000000000000000000000000000000000000000000000000000009
+f63 0000000009
+f64 0000000000000000000000000000000000000000000000000000000000000009
+f65 3
+f66 8.800000000000000000000000000000
+f67 9
+f68 8.800000000000000000000000000000
+f69 0000000009
+f70 000000000000000000000000000000008.800000000000000000000000000000
+f71 0000000009
+f72 000000000000000000000000000000008.800000000000000000000000000000
+f73 -1.175494342e-38
+f74 1.17549436e-38
+f75 000000001.17549436e-38
+f76 000000001.17549436e-38
+f77 -1.175494342e-38
+f78 1.17549436e-38
+f79 000000001.17549436e-38
+f80 000000001.17549436e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494342e-38
+f95 1.17549e-38
+f96 1.17549436e-38
+f97 01.17549e-38
+f98 000000001.17549436e-38
+f99 01.17549e-38
+f100 000000001.17549436e-38
+f101 1000-01-09
+f102 838:59:50
+f103 1970-01-10 00:00:09
+f104 1970-01-10 00:00:09
+f105 1910
+f106 1910
+f107 1910
+f108 2enum
+f109 1set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
+f59 10
+f60 10
+f61 0000000010
+f62 0000000000000000000000000000000000000000000000000000000000000010
+f63 0000000010
+f64 0000000000000000000000000000000000000000000000000000000000000010
+f65 4
+f66 9.900000000000000000000000000000
+f67 10
+f68 9.900000000000000000000000000000
+f69 0000000010
+f70 000000000000000000000000000000009.900000000000000000000000000000
+f71 0000000010
+f72 000000000000000000000000000000009.900000000000000000000000000000
+f73 -1.175494341e-38
+f74 1.175494361e-38
+f75 00000001.175494361e-38
+f76 00000001.175494361e-38
+f77 -1.175494341e-38
+f78 1.175494361e-38
+f79 00000001.175494361e-38
+f80 00000001.175494361e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494341e-38
+f95 1.17549e-38
+f96 1.175494361e-38
+f97 01.17549e-38
+f98 00000001.175494361e-38
+f99 01.17549e-38
+f100 00000001.175494361e-38
+f101 1000-01-10
+f102 838:59:49
+f103 1970-01-11 00:00:10
+f104 1970-01-11 00:00:10
+f105 1911
+f106 1911
+f107 1911
+f108 1enum
+f109 2set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117 NULL
+f59 15
+f60 87
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 17
+f60 15
+f61 0000000016
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 19
+f60 18
+f61 0000000014
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 22
+f60 93
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 24
+f60 51654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 27
+f60 25
+f61 0000000026
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 29
+f60 28
+f61 0000000024
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 34
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 94
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 107
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 107
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 109
+f60 108
+f61 0000000104
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 109
+f60 108
+f61 0000000104
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 195
+f60 87
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 207
+f60 205
+f61 0000000206
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 209
+f60 208
+f61 0000000204
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 242
+f60 79
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 250
+f60 87895654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 292
+f60 93
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 299
+f60 899
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 321
+f60 NULL
+f61 0000000765
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 323
+f60 14376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 340
+f60 9984376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 394
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 424
+f60 89
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 441
+f60 16546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 660
+f60 876546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 987
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 2550
+f60 775654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 2760
+f60 985654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 3330
+f60 764376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 3410
+f60 996546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 7876
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 9112
+f60 NULL
+f61 0000008771
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 76710
+f60 226546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 569300
+f60 9114376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 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 ;
@@ -1759,29 +8295,29 @@ Drop view if exists test.v1 ;
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 order by f59,f60;
+Create view test.v1 as Select f59, f60 FROM test.tb2;
+Select * from test.v1 order by f59,f60 limit 20;
f59 f60
1 1
2 2
3 3
4 4
+4 74
5 5
6 6
7 7
8 8
9 9
10 10
-250 87895654
-340 9984376
-441 16546
-660 876546
-2550 775654
-2760 985654
-3330 764376
-3410 996546
-76710 226546
-569300 9114376
+15 87
+17 15
+19 18
+22 93
+24 51654
+27 25
+29 28
+34 41
+94 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 ;
@@ -1868,12 +8404,126 @@ Drop view if exists test.v1 ;
CREATE VIEW test.v1 AS SELECT f59,f60 FROM test.tb2;
INSERT INTO test.v1 values(122,432);
SELECT * FROM test.tb2 where f59 = 122 and f60 = 432 limit 0,20;
-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
-122 432 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.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
+f59 122
+f60 432
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
UPDATE test.v1 SET f59 = 3000 WHERE test.v1.f59 = 122 ;
SELECT * FROM test.tb2 where f59 = 3000 limit 0,20;
-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
-3000 432 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.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
+f59 3000
+f60 432
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
DELETE FROM test.v1
where test.v1.f59 = 3000 and test.v1.f60 = 432;
SELECT * FROM test.tb2 where f59 = 3000 and f60 = 432;
@@ -1898,16 +8548,246 @@ info: Rows matched: 2 Changed: 2 Warnings: 0
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
-30 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
-30 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
+f59 30
+f60 4
+f61 0000000004
+f62 0000000000000000000000000000000000000000000000000000000000000004
+f63 0000000004
+f64 0000000000000000000000000000000000000000000000000000000000000004
+f65 -2
+f66 3.300000000000000000000000000000
+f67 4
+f68 3.300000000000000000000000000000
+f69 0000000004
+f70 000000000000000000000000000000003.300000000000000000000000000000
+f71 0000000004
+f72 000000000000000000000000000000003.300000000000000000000000000000
+f73 -1.175494347e-38
+f74 1.175494355e-38
+f75 00000001.175494355e-38
+f76 00000001.175494355e-38
+f77 -1.175494347e-38
+f78 1.175494355e-38
+f79 00000001.175494355e-38
+f80 00000001.175494355e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494347e-38
+f95 1.17549e-38
+f96 1.175494355e-38
+f97 01.17549e-38
+f98 00000001.175494355e-38
+f99 01.17549e-38
+f100 00000001.175494355e-38
+f101 1000-01-04
+f102 838:59:55
+f103 1970-01-05 00:00:04
+f104 1970-01-05 00:00:04
+f105 1905
+f106 1905
+f107 1905
+f108 1enum
+f109 2set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117 NULL
+f59 30
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
UPDATE tb2 SET f59 = 100 where f59 = 30 ;
affected rows: 2
info: Rows matched: 2 Changed: 2 Warnings: 0
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
-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
+f59 100
+f60 4
+f61 0000000004
+f62 0000000000000000000000000000000000000000000000000000000000000004
+f63 0000000004
+f64 0000000000000000000000000000000000000000000000000000000000000004
+f65 -2
+f66 3.300000000000000000000000000000
+f67 4
+f68 3.300000000000000000000000000000
+f69 0000000004
+f70 000000000000000000000000000000003.300000000000000000000000000000
+f71 0000000004
+f72 000000000000000000000000000000003.300000000000000000000000000000
+f73 -1.175494347e-38
+f74 1.175494355e-38
+f75 00000001.175494355e-38
+f76 00000001.175494355e-38
+f77 -1.175494347e-38
+f78 1.175494355e-38
+f79 00000001.175494355e-38
+f80 00000001.175494355e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494347e-38
+f95 1.17549e-38
+f96 1.175494355e-38
+f97 01.17549e-38
+f98 00000001.175494355e-38
+f99 01.17549e-38
+f100 00000001.175494355e-38
+f101 1000-01-04
+f102 838:59:55
+f103 1970-01-05 00:00:04
+f104 1970-01-05 00:00:04
+f105 1905
+f106 1905
+f107 1905
+f108 1enum
+f109 2set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117 NULL
+f59 100
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
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 ;
@@ -9671,8 +16551,8 @@ WHERE v3_to_v1_options LIKE ' %' AND errno <> 0
ORDER BY v3_to_v1_options;
v3_to_v1_options statement v3_to_v1_violation errno
SELECT * FROM t1_results
-WHERE v3_to_v1_options LIKE 'WITH %'
-AND v3_to_v1_violation LIKE 'v3_%' AND errno = 0
+WHERE v3_to_v1_options LIKE 'WITH %'
+ AND v3_to_v1_violation LIKE 'v3_%' AND errno = 0
ORDER BY v3_to_v1_options;
v3_to_v1_options statement v3_to_v1_violation errno
SELECT * FROM t1_results
@@ -9692,17 +16572,2961 @@ DROP TABLE t1_results;
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 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
-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
-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
+CREATE VIEW test.v1 AS SELECT * FROM test.tb2;
+SELECT * FROM test.v1 order by f59,f60,f61 ;
+f59 1
+f60 1
+f61 0000000001
+f62 0000000000000000000000000000000000000000000000000000000000000001
+f63 0000000001
+f64 0000000000000000000000000000000000000000000000000000000000000001
+f65 -5
+f66 0.000000000000000000000000000000
+f67 1
+f68 0.000000000000000000000000000000
+f69 0000000001
+f70 000000000000000000000000000000000.000000000000000000000000000000
+f71 0000000001
+f72 000000000000000000000000000000000.000000000000000000000000000000
+f73 -1.17549435e-38
+f74 1.175494352e-38
+f75 00000001.175494352e-38
+f76 00000001.175494352e-38
+f77 -1.17549435e-38
+f78 1.175494352e-38
+f79 00000001.175494352e-38
+f80 00000001.175494352e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.17549435e-38
+f95 1.17549e-38
+f96 1.175494352e-38
+f97 01.17549e-38
+f98 00000001.175494352e-38
+f99 01.17549e-38
+f100 00000001.175494352e-38
+f101 1000-01-01
+f102 838:59:58
+f103 1970-01-02 00:00:01
+f104 1970-01-02 00:00:01
+f105 1902
+f106 1902
+f107 1902
+f108 2enum
+f109 2set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
+f59 2
+f60 2
+f61 0000000002
+f62 0000000000000000000000000000000000000000000000000000000000000002
+f63 0000000002
+f64 0000000000000000000000000000000000000000000000000000000000000002
+f65 -4
+f66 1.100000000000000000000000000000
+f67 2
+f68 1.100000000000000000000000000000
+f69 0000000002
+f70 000000000000000000000000000000001.100000000000000000000000000000
+f71 0000000002
+f72 000000000000000000000000000000001.100000000000000000000000000000
+f73 -1.175494349e-38
+f74 1.175494353e-38
+f75 00000001.175494353e-38
+f76 00000001.175494353e-38
+f77 -1.175494349e-38
+f78 1.175494353e-38
+f79 00000001.175494353e-38
+f80 00000001.175494353e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494349e-38
+f95 1.17549e-38
+f96 1.175494353e-38
+f97 01.17549e-38
+f98 00000001.175494353e-38
+f99 01.17549e-38
+f100 00000001.175494353e-38
+f101 1000-01-02
+f102 838:59:57
+f103 1970-01-03 00:00:02
+f104 1970-01-03 00:00:02
+f105 1903
+f106 1903
+f107 1903
+f108 1enum
+f109 1set,2set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
+f59 3
+f60 3
+f61 0000000003
+f62 0000000000000000000000000000000000000000000000000000000000000003
+f63 0000000003
+f64 0000000000000000000000000000000000000000000000000000000000000003
+f65 -3
+f66 2.200000000000000000000000000000
+f67 3
+f68 2.200000000000000000000000000000
+f69 0000000003
+f70 000000000000000000000000000000002.200000000000000000000000000000
+f71 0000000003
+f72 000000000000000000000000000000002.200000000000000000000000000000
+f73 -1.175494348e-38
+f74 1.175494354e-38
+f75 00000001.175494354e-38
+f76 00000001.175494354e-38
+f77 -1.175494348e-38
+f78 1.175494354e-38
+f79 00000001.175494354e-38
+f80 00000001.175494354e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494348e-38
+f95 1.17549e-38
+f96 1.175494354e-38
+f97 01.17549e-38
+f98 00000001.175494354e-38
+f99 01.17549e-38
+f100 00000001.175494354e-38
+f101 1000-01-03
+f102 838:59:56
+f103 1970-01-04 00:00:03
+f104 1970-01-04 00:00:03
+f105 1904
+f106 1904
+f107 1904
+f108 2enum
+f109 1set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
+f59 5
+f60 5
+f61 0000000005
+f62 0000000000000000000000000000000000000000000000000000000000000005
+f63 0000000005
+f64 0000000000000000000000000000000000000000000000000000000000000005
+f65 -1
+f66 4.400000000000000000000000000000
+f67 5
+f68 4.400000000000000000000000000000
+f69 0000000005
+f70 000000000000000000000000000000004.400000000000000000000000000000
+f71 0000000005
+f72 000000000000000000000000000000004.400000000000000000000000000000
+f73 -1.175494346e-38
+f74 1.175494356e-38
+f75 00000001.175494356e-38
+f76 00000001.175494356e-38
+f77 -1.175494346e-38
+f78 1.175494356e-38
+f79 00000001.175494356e-38
+f80 00000001.175494356e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494346e-38
+f95 1.17549e-38
+f96 1.175494356e-38
+f97 01.17549e-38
+f98 00000001.175494356e-38
+f99 01.17549e-38
+f100 00000001.175494356e-38
+f101 1000-01-05
+f102 838:59:54
+f103 1970-01-06 00:00:05
+f104 1970-01-06 00:00:05
+f105 1906
+f106 1906
+f107 1906
+f108 2enum
+f109 1set,2set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
+f59 6
+f60 6
+f61 0000000006
+f62 0000000000000000000000000000000000000000000000000000000000000006
+f63 0000000006
+f64 0000000000000000000000000000000000000000000000000000000000000006
+f65 0
+f66 5.500000000000000000000000000000
+f67 6
+f68 5.500000000000000000000000000000
+f69 0000000006
+f70 000000000000000000000000000000005.500000000000000000000000000000
+f71 0000000006
+f72 000000000000000000000000000000005.500000000000000000000000000000
+f73 -1.175494345e-38
+f74 1.175494357e-38
+f75 00000001.175494357e-38
+f76 00000001.175494357e-38
+f77 -1.175494345e-38
+f78 1.175494357e-38
+f79 00000001.175494357e-38
+f80 00000001.175494357e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494345e-38
+f95 1.17549e-38
+f96 1.175494357e-38
+f97 01.17549e-38
+f98 00000001.175494357e-38
+f99 01.17549e-38
+f100 00000001.175494357e-38
+f101 1000-01-06
+f102 838:59:53
+f103 1970-01-07 00:00:06
+f104 1970-01-07 00:00:06
+f105 1907
+f106 1907
+f107 1907
+f108 1enum
+f109 1set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
+f59 7
+f60 7
+f61 0000000007
+f62 0000000000000000000000000000000000000000000000000000000000000007
+f63 0000000007
+f64 0000000000000000000000000000000000000000000000000000000000000007
+f65 1
+f66 6.600000000000000000000000000000
+f67 7
+f68 6.600000000000000000000000000000
+f69 0000000007
+f70 000000000000000000000000000000006.600000000000000000000000000000
+f71 0000000007
+f72 000000000000000000000000000000006.600000000000000000000000000000
+f73 -1.175494344e-38
+f74 1.175494358e-38
+f75 00000001.175494358e-38
+f76 00000001.175494358e-38
+f77 -1.175494344e-38
+f78 1.175494358e-38
+f79 00000001.175494358e-38
+f80 00000001.175494358e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494344e-38
+f95 1.17549e-38
+f96 1.175494358e-38
+f97 01.17549e-38
+f98 00000001.175494358e-38
+f99 01.17549e-38
+f100 00000001.175494358e-38
+f101 1000-01-07
+f102 838:59:52
+f103 1970-01-08 00:00:07
+f104 1970-01-08 00:00:07
+f105 1908
+f106 1908
+f107 1908
+f108 2enum
+f109 2set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
+f59 8
+f60 8
+f61 0000000008
+f62 0000000000000000000000000000000000000000000000000000000000000008
+f63 0000000008
+f64 0000000000000000000000000000000000000000000000000000000000000008
+f65 2
+f66 7.700000000000000000000000000000
+f67 8
+f68 7.700000000000000000000000000000
+f69 0000000008
+f70 000000000000000000000000000000007.700000000000000000000000000000
+f71 0000000008
+f72 000000000000000000000000000000007.700000000000000000000000000000
+f73 -1.175494343e-38
+f74 1.175494359e-38
+f75 00000001.175494359e-38
+f76 00000001.175494359e-38
+f77 -1.175494343e-38
+f78 1.175494359e-38
+f79 00000001.175494359e-38
+f80 00000001.175494359e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494343e-38
+f95 1.17549e-38
+f96 1.175494359e-38
+f97 01.17549e-38
+f98 00000001.175494359e-38
+f99 01.17549e-38
+f100 00000001.175494359e-38
+f101 1000-01-08
+f102 838:59:51
+f103 1970-01-09 00:00:08
+f104 1970-01-09 00:00:08
+f105 1909
+f106 1909
+f107 1909
+f108 1enum
+f109 1set,2set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
+f59 9
+f60 9
+f61 0000000009
+f62 0000000000000000000000000000000000000000000000000000000000000009
+f63 0000000009
+f64 0000000000000000000000000000000000000000000000000000000000000009
+f65 3
+f66 8.800000000000000000000000000000
+f67 9
+f68 8.800000000000000000000000000000
+f69 0000000009
+f70 000000000000000000000000000000008.800000000000000000000000000000
+f71 0000000009
+f72 000000000000000000000000000000008.800000000000000000000000000000
+f73 -1.175494342e-38
+f74 1.17549436e-38
+f75 000000001.17549436e-38
+f76 000000001.17549436e-38
+f77 -1.175494342e-38
+f78 1.17549436e-38
+f79 000000001.17549436e-38
+f80 000000001.17549436e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494342e-38
+f95 1.17549e-38
+f96 1.17549436e-38
+f97 01.17549e-38
+f98 000000001.17549436e-38
+f99 01.17549e-38
+f100 000000001.17549436e-38
+f101 1000-01-09
+f102 838:59:50
+f103 1970-01-10 00:00:09
+f104 1970-01-10 00:00:09
+f105 1910
+f106 1910
+f107 1910
+f108 2enum
+f109 1set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
+f59 10
+f60 10
+f61 0000000010
+f62 0000000000000000000000000000000000000000000000000000000000000010
+f63 0000000010
+f64 0000000000000000000000000000000000000000000000000000000000000010
+f65 4
+f66 9.900000000000000000000000000000
+f67 10
+f68 9.900000000000000000000000000000
+f69 0000000010
+f70 000000000000000000000000000000009.900000000000000000000000000000
+f71 0000000010
+f72 000000000000000000000000000000009.900000000000000000000000000000
+f73 -1.175494341e-38
+f74 1.175494361e-38
+f75 00000001.175494361e-38
+f76 00000001.175494361e-38
+f77 -1.175494341e-38
+f78 1.175494361e-38
+f79 00000001.175494361e-38
+f80 00000001.175494361e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494341e-38
+f95 1.17549e-38
+f96 1.175494361e-38
+f97 01.17549e-38
+f98 00000001.175494361e-38
+f99 01.17549e-38
+f100 00000001.175494361e-38
+f101 1000-01-10
+f102 838:59:49
+f103 1970-01-11 00:00:10
+f104 1970-01-11 00:00:10
+f105 1911
+f106 1911
+f107 1911
+f108 1enum
+f109 2set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117 NULL
+f59 15
+f60 87
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 17
+f60 15
+f61 0000000016
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 19
+f60 18
+f61 0000000014
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 22
+f60 93
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 24
+f60 51654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 27
+f60 25
+f61 0000000026
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 29
+f60 28
+f61 0000000024
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 34
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 94
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 100
+f60 4
+f61 0000000004
+f62 0000000000000000000000000000000000000000000000000000000000000004
+f63 0000000004
+f64 0000000000000000000000000000000000000000000000000000000000000004
+f65 -2
+f66 3.300000000000000000000000000000
+f67 4
+f68 3.300000000000000000000000000000
+f69 0000000004
+f70 000000000000000000000000000000003.300000000000000000000000000000
+f71 0000000004
+f72 000000000000000000000000000000003.300000000000000000000000000000
+f73 -1.175494347e-38
+f74 1.175494355e-38
+f75 00000001.175494355e-38
+f76 00000001.175494355e-38
+f77 -1.175494347e-38
+f78 1.175494355e-38
+f79 00000001.175494355e-38
+f80 00000001.175494355e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494347e-38
+f95 1.17549e-38
+f96 1.175494355e-38
+f97 01.17549e-38
+f98 00000001.175494355e-38
+f99 01.17549e-38
+f100 00000001.175494355e-38
+f101 1000-01-04
+f102 838:59:55
+f103 1970-01-05 00:00:04
+f104 1970-01-05 00:00:04
+f105 1905
+f106 1905
+f107 1905
+f108 1enum
+f109 2set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117 NULL
+f59 100
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 107
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 107
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 109
+f60 108
+f61 0000000104
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 109
+f60 108
+f61 0000000104
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 195
+f60 87
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 207
+f60 205
+f61 0000000206
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 209
+f60 208
+f61 0000000204
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 242
+f60 79
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 250
+f60 87895654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 292
+f60 93
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 299
+f60 899
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 321
+f60 NULL
+f61 0000000765
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 323
+f60 14376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 340
+f60 9984376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 394
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 424
+f60 89
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 441
+f60 16546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 660
+f60 876546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 987
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 2550
+f60 775654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 2760
+f60 985654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 3330
+f60 764376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 3410
+f60 996546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 7876
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 9112
+f60 NULL
+f61 0000008771
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 76710
+f60 226546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 569300
+f60 9114376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
drop view test.v1 ;
-CREATE VIEW test.v1 AS SELECT F59,F61 FROM test.tb2 limit 50 ;
-SELECT * FROM test.v1 order by F59, F61 ;
+CREATE VIEW test.v1 AS SELECT F59,F61 FROM test.tb2;
+SELECT * FROM test.v1 order by F59, F61 limit 50;
F59 F61
1 0000000001
2 0000000002
@@ -9755,32 +19579,2961 @@ F59 F61
76710 NULL
569300 NULL
drop view test.v1 ;
-CREATE VIEW test.v1 AS SELECT * FROM test.tb2 order by f59, f60, f61 limit 20 ;
+CREATE VIEW test.v1 AS SELECT * FROM test.tb2 order by f59, f60, f61;
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
-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
-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
-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
-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
+f59 1
+f60 1
+f61 0000000001
+f62 0000000000000000000000000000000000000000000000000000000000000001
+f63 0000000001
+f64 0000000000000000000000000000000000000000000000000000000000000001
+f65 -5
+f66 0.000000000000000000000000000000
+f67 1
+f68 0.000000000000000000000000000000
+f69 0000000001
+f70 000000000000000000000000000000000.000000000000000000000000000000
+f71 0000000001
+f72 000000000000000000000000000000000.000000000000000000000000000000
+f73 -1.17549435e-38
+f74 1.175494352e-38
+f75 00000001.175494352e-38
+f76 00000001.175494352e-38
+f77 -1.17549435e-38
+f78 1.175494352e-38
+f79 00000001.175494352e-38
+f80 00000001.175494352e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.17549435e-38
+f95 1.17549e-38
+f96 1.175494352e-38
+f97 01.17549e-38
+f98 00000001.175494352e-38
+f99 01.17549e-38
+f100 00000001.175494352e-38
+f101 1000-01-01
+f102 838:59:58
+f103 1970-01-02 00:00:01
+f104 1970-01-02 00:00:01
+f105 1902
+f106 1902
+f107 1902
+f108 2enum
+f109 2set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
+f59 2
+f60 2
+f61 0000000002
+f62 0000000000000000000000000000000000000000000000000000000000000002
+f63 0000000002
+f64 0000000000000000000000000000000000000000000000000000000000000002
+f65 -4
+f66 1.100000000000000000000000000000
+f67 2
+f68 1.100000000000000000000000000000
+f69 0000000002
+f70 000000000000000000000000000000001.100000000000000000000000000000
+f71 0000000002
+f72 000000000000000000000000000000001.100000000000000000000000000000
+f73 -1.175494349e-38
+f74 1.175494353e-38
+f75 00000001.175494353e-38
+f76 00000001.175494353e-38
+f77 -1.175494349e-38
+f78 1.175494353e-38
+f79 00000001.175494353e-38
+f80 00000001.175494353e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494349e-38
+f95 1.17549e-38
+f96 1.175494353e-38
+f97 01.17549e-38
+f98 00000001.175494353e-38
+f99 01.17549e-38
+f100 00000001.175494353e-38
+f101 1000-01-02
+f102 838:59:57
+f103 1970-01-03 00:00:02
+f104 1970-01-03 00:00:02
+f105 1903
+f106 1903
+f107 1903
+f108 1enum
+f109 1set,2set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
+f59 3
+f60 3
+f61 0000000003
+f62 0000000000000000000000000000000000000000000000000000000000000003
+f63 0000000003
+f64 0000000000000000000000000000000000000000000000000000000000000003
+f65 -3
+f66 2.200000000000000000000000000000
+f67 3
+f68 2.200000000000000000000000000000
+f69 0000000003
+f70 000000000000000000000000000000002.200000000000000000000000000000
+f71 0000000003
+f72 000000000000000000000000000000002.200000000000000000000000000000
+f73 -1.175494348e-38
+f74 1.175494354e-38
+f75 00000001.175494354e-38
+f76 00000001.175494354e-38
+f77 -1.175494348e-38
+f78 1.175494354e-38
+f79 00000001.175494354e-38
+f80 00000001.175494354e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494348e-38
+f95 1.17549e-38
+f96 1.175494354e-38
+f97 01.17549e-38
+f98 00000001.175494354e-38
+f99 01.17549e-38
+f100 00000001.175494354e-38
+f101 1000-01-03
+f102 838:59:56
+f103 1970-01-04 00:00:03
+f104 1970-01-04 00:00:03
+f105 1904
+f106 1904
+f107 1904
+f108 2enum
+f109 1set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
+f59 5
+f60 5
+f61 0000000005
+f62 0000000000000000000000000000000000000000000000000000000000000005
+f63 0000000005
+f64 0000000000000000000000000000000000000000000000000000000000000005
+f65 -1
+f66 4.400000000000000000000000000000
+f67 5
+f68 4.400000000000000000000000000000
+f69 0000000005
+f70 000000000000000000000000000000004.400000000000000000000000000000
+f71 0000000005
+f72 000000000000000000000000000000004.400000000000000000000000000000
+f73 -1.175494346e-38
+f74 1.175494356e-38
+f75 00000001.175494356e-38
+f76 00000001.175494356e-38
+f77 -1.175494346e-38
+f78 1.175494356e-38
+f79 00000001.175494356e-38
+f80 00000001.175494356e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494346e-38
+f95 1.17549e-38
+f96 1.175494356e-38
+f97 01.17549e-38
+f98 00000001.175494356e-38
+f99 01.17549e-38
+f100 00000001.175494356e-38
+f101 1000-01-05
+f102 838:59:54
+f103 1970-01-06 00:00:05
+f104 1970-01-06 00:00:05
+f105 1906
+f106 1906
+f107 1906
+f108 2enum
+f109 1set,2set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
+f59 6
+f60 6
+f61 0000000006
+f62 0000000000000000000000000000000000000000000000000000000000000006
+f63 0000000006
+f64 0000000000000000000000000000000000000000000000000000000000000006
+f65 0
+f66 5.500000000000000000000000000000
+f67 6
+f68 5.500000000000000000000000000000
+f69 0000000006
+f70 000000000000000000000000000000005.500000000000000000000000000000
+f71 0000000006
+f72 000000000000000000000000000000005.500000000000000000000000000000
+f73 -1.175494345e-38
+f74 1.175494357e-38
+f75 00000001.175494357e-38
+f76 00000001.175494357e-38
+f77 -1.175494345e-38
+f78 1.175494357e-38
+f79 00000001.175494357e-38
+f80 00000001.175494357e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494345e-38
+f95 1.17549e-38
+f96 1.175494357e-38
+f97 01.17549e-38
+f98 00000001.175494357e-38
+f99 01.17549e-38
+f100 00000001.175494357e-38
+f101 1000-01-06
+f102 838:59:53
+f103 1970-01-07 00:00:06
+f104 1970-01-07 00:00:06
+f105 1907
+f106 1907
+f107 1907
+f108 1enum
+f109 1set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
+f59 7
+f60 7
+f61 0000000007
+f62 0000000000000000000000000000000000000000000000000000000000000007
+f63 0000000007
+f64 0000000000000000000000000000000000000000000000000000000000000007
+f65 1
+f66 6.600000000000000000000000000000
+f67 7
+f68 6.600000000000000000000000000000
+f69 0000000007
+f70 000000000000000000000000000000006.600000000000000000000000000000
+f71 0000000007
+f72 000000000000000000000000000000006.600000000000000000000000000000
+f73 -1.175494344e-38
+f74 1.175494358e-38
+f75 00000001.175494358e-38
+f76 00000001.175494358e-38
+f77 -1.175494344e-38
+f78 1.175494358e-38
+f79 00000001.175494358e-38
+f80 00000001.175494358e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494344e-38
+f95 1.17549e-38
+f96 1.175494358e-38
+f97 01.17549e-38
+f98 00000001.175494358e-38
+f99 01.17549e-38
+f100 00000001.175494358e-38
+f101 1000-01-07
+f102 838:59:52
+f103 1970-01-08 00:00:07
+f104 1970-01-08 00:00:07
+f105 1908
+f106 1908
+f107 1908
+f108 2enum
+f109 2set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
+f59 8
+f60 8
+f61 0000000008
+f62 0000000000000000000000000000000000000000000000000000000000000008
+f63 0000000008
+f64 0000000000000000000000000000000000000000000000000000000000000008
+f65 2
+f66 7.700000000000000000000000000000
+f67 8
+f68 7.700000000000000000000000000000
+f69 0000000008
+f70 000000000000000000000000000000007.700000000000000000000000000000
+f71 0000000008
+f72 000000000000000000000000000000007.700000000000000000000000000000
+f73 -1.175494343e-38
+f74 1.175494359e-38
+f75 00000001.175494359e-38
+f76 00000001.175494359e-38
+f77 -1.175494343e-38
+f78 1.175494359e-38
+f79 00000001.175494359e-38
+f80 00000001.175494359e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494343e-38
+f95 1.17549e-38
+f96 1.175494359e-38
+f97 01.17549e-38
+f98 00000001.175494359e-38
+f99 01.17549e-38
+f100 00000001.175494359e-38
+f101 1000-01-08
+f102 838:59:51
+f103 1970-01-09 00:00:08
+f104 1970-01-09 00:00:08
+f105 1909
+f106 1909
+f107 1909
+f108 1enum
+f109 1set,2set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
+f59 9
+f60 9
+f61 0000000009
+f62 0000000000000000000000000000000000000000000000000000000000000009
+f63 0000000009
+f64 0000000000000000000000000000000000000000000000000000000000000009
+f65 3
+f66 8.800000000000000000000000000000
+f67 9
+f68 8.800000000000000000000000000000
+f69 0000000009
+f70 000000000000000000000000000000008.800000000000000000000000000000
+f71 0000000009
+f72 000000000000000000000000000000008.800000000000000000000000000000
+f73 -1.175494342e-38
+f74 1.17549436e-38
+f75 000000001.17549436e-38
+f76 000000001.17549436e-38
+f77 -1.175494342e-38
+f78 1.17549436e-38
+f79 000000001.17549436e-38
+f80 000000001.17549436e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494342e-38
+f95 1.17549e-38
+f96 1.17549436e-38
+f97 01.17549e-38
+f98 000000001.17549436e-38
+f99 01.17549e-38
+f100 000000001.17549436e-38
+f101 1000-01-09
+f102 838:59:50
+f103 1970-01-10 00:00:09
+f104 1970-01-10 00:00:09
+f105 1910
+f106 1910
+f107 1910
+f108 2enum
+f109 1set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117
+f59 10
+f60 10
+f61 0000000010
+f62 0000000000000000000000000000000000000000000000000000000000000010
+f63 0000000010
+f64 0000000000000000000000000000000000000000000000000000000000000010
+f65 4
+f66 9.900000000000000000000000000000
+f67 10
+f68 9.900000000000000000000000000000
+f69 0000000010
+f70 000000000000000000000000000000009.900000000000000000000000000000
+f71 0000000010
+f72 000000000000000000000000000000009.900000000000000000000000000000
+f73 -1.175494341e-38
+f74 1.175494361e-38
+f75 00000001.175494361e-38
+f76 00000001.175494361e-38
+f77 -1.175494341e-38
+f78 1.175494361e-38
+f79 00000001.175494361e-38
+f80 00000001.175494361e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494341e-38
+f95 1.17549e-38
+f96 1.175494361e-38
+f97 01.17549e-38
+f98 00000001.175494361e-38
+f99 01.17549e-38
+f100 00000001.175494361e-38
+f101 1000-01-10
+f102 838:59:49
+f103 1970-01-11 00:00:10
+f104 1970-01-11 00:00:10
+f105 1911
+f106 1911
+f107 1911
+f108 1enum
+f109 2set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117 NULL
+f59 15
+f60 87
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 17
+f60 15
+f61 0000000016
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 19
+f60 18
+f61 0000000014
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 22
+f60 93
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 24
+f60 51654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 27
+f60 25
+f61 0000000026
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 29
+f60 28
+f61 0000000024
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 34
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 94
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 100
+f60 4
+f61 0000000004
+f62 0000000000000000000000000000000000000000000000000000000000000004
+f63 0000000004
+f64 0000000000000000000000000000000000000000000000000000000000000004
+f65 -2
+f66 3.300000000000000000000000000000
+f67 4
+f68 3.300000000000000000000000000000
+f69 0000000004
+f70 000000000000000000000000000000003.300000000000000000000000000000
+f71 0000000004
+f72 000000000000000000000000000000003.300000000000000000000000000000
+f73 -1.175494347e-38
+f74 1.175494355e-38
+f75 00000001.175494355e-38
+f76 00000001.175494355e-38
+f77 -1.175494347e-38
+f78 1.175494355e-38
+f79 00000001.175494355e-38
+f80 00000001.175494355e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494347e-38
+f95 1.17549e-38
+f96 1.175494355e-38
+f97 01.17549e-38
+f98 00000001.175494355e-38
+f99 01.17549e-38
+f100 00000001.175494355e-38
+f101 1000-01-04
+f102 838:59:55
+f103 1970-01-05 00:00:04
+f104 1970-01-05 00:00:04
+f105 1905
+f106 1905
+f107 1905
+f108 1enum
+f109 2set
+f110
+f111
+f112
+f113
+f114
+f115
+f116
+f117 NULL
+f59 100
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 107
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 107
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 109
+f60 108
+f61 0000000104
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 109
+f60 108
+f61 0000000104
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 195
+f60 87
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 207
+f60 205
+f61 0000000206
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 209
+f60 208
+f61 0000000204
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 242
+f60 79
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 250
+f60 87895654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 292
+f60 93
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 299
+f60 899
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 321
+f60 NULL
+f61 0000000765
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 323
+f60 14376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 340
+f60 9984376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 394
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 424
+f60 89
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 441
+f60 16546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 660
+f60 876546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 987
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 2550
+f60 775654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 2760
+f60 985654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 3330
+f60 764376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 3410
+f60 996546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 7876
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 9112
+f60 NULL
+f61 0000008771
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 76710
+f60 226546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 569300
+f60 9114376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
drop view test.v1 ;
-CREATE VIEW test.v1 AS SELECT F59,f61 FROM test.tb2 limit 20 ;
-SELECT * FROM test.v1 order by f59,f61 desc limit 50;
+CREATE VIEW test.v1 AS SELECT F59,f61 FROM test.tb2;
+SELECT * FROM test.v1 order by f59,f61 desc limit 20;
F59 f61
1 0000000001
2 0000000002
@@ -9791,17 +22544,17 @@ F59 f61
8 0000000008
9 0000000009
10 0000000010
+15 NULL
+17 0000000016
+19 0000000014
+22 NULL
+24 NULL
+27 0000000026
+29 0000000024
+34 NULL
+94 NULL
100 0000000004
-250 NULL
-340 NULL
-441 NULL
-660 NULL
-2550 NULL
-2760 NULL
-3330 NULL
-3410 NULL
-76710 NULL
-569300 NULL
+100 NULL
drop view test.v1 ;
Testcase 3.3.1.54
@@ -9858,16 +22611,23 @@ f2
two
SET sql_mode = 'traditional,ansi';
CREATE OR REPLACE VIEW v1 AS
+SELECT f3 AS "pure column f3:", f1 + f3 AS "sum of columns f1 + f3 =",
+3 * (- 0.11111E+1) AS "product of constants 3 * (- 0.11111E+1):",
+'->' || CAST(f3 AS CHAR) || '<-'
+ AS "expression with '||'=CONCAT and CAST(DECIMAL column AS CHAR):"
+FROM t1 WHERE f1 = 2;
+CREATE OR REPLACE VIEW v1 AS
SELECT f3 AS "pure column f3: ", f1 + f3 AS "sum of columns f1 + f3 = ",
3 * (- 0.11111E+1) AS "product of constants 3 * (- 0.11111E+1): ",
'->' || CAST(f3 AS CHAR) || '<-'
AS "expression with '||'=CONCAT and CAST(DECIMAL column AS CHAR): "
FROM t1 WHERE f1 = 2;
+ERROR 42000: Incorrect column name 'pure column f3: '
SELECT * FROM v1;
-pure column f3: 2.20000
-sum of columns f1 + f3 = 4.20000
-product of constants 3 * (- 0.11111E+1): -3.3333
-expression with '||'=CONCAT and CAST(DECIMAL column AS CHAR): ->2.20000<-
+pure column f3: 2.20000
+sum of columns f1 + f3 = 4.20000
+product of constants 3 * (- 0.11111E+1): -3.3333
+expression with '||'=CONCAT and CAST(DECIMAL column AS CHAR): ->2.20000<-
SET sql_mode = '';
Testcases 3.3.1.55 - 3.3.1.62
@@ -10145,8 +22905,65 @@ F59
ALTER VIEW test.v1 AS SELECT *
FROM test.tb2 WHERE test.tb2.f59 = 242 ;
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
+f59 242
+f60 79
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
Drop view test.v1 ;
Testcase 3.3.1.65, 3.3.1.A4, 3.3.1.66, 3.3.1.67
@@ -10421,9 +23238,9 @@ FIXME Is this a bug ?
EXPLAIN SELECT CAST(f1 AS SIGNED INTEGER) AS f1,
CAST(f2 AS CHAR) AS f2 FROM test1.v21;
DROP VIEW IF EXISTS test1.v21;
-CREATE OR REPLACE VIEW test1.v0 AS
+CREATE OR REPLACE VIEW test1.v0 AS
SELECT f1 as f2, f2 as f1 FROM test2.t1;
-CREATE OR REPLACE VIEW test2.v0 AS
+CREATE OR REPLACE VIEW test2.v0 AS
SELECT CAST('0001-01-01' AS DATE) as f1, f2 FROM test3.t1;
SHOW CREATE VIEW test1.v20;
SELECT CAST(f1 AS SIGNED INTEGER) AS f1,
@@ -10488,8 +23305,65 @@ Create view test.v1 AS SELECT f59,f60,f61 FROM tb2 ;
INSERT INTO test.v1 ( f59 , f60 ) values (2005,0101) ;
affected rows: 1
SELECT * FROM tb2 where f59 = 2005 and f60 = 0101 ;
-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
-2005 101 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.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
+f59 2005
+f60 101
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
SELECT f59,f60 FROM test.v1 where f59 = 2005 and f60 = 0101 ;
f59 f60
2005 101
@@ -10505,8 +23379,65 @@ UPDATE test.v1 SET f59 = 8 WHERE f59 = 780 and f60 = 105;
affected rows: 1
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
+f59 8
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
SELECT f59,f60 FROM test.v1 where f59 = 8 and f60 = 105 ;
f59 f60
8 105
@@ -10521,11 +23452,242 @@ UPDATE test.v1 SET f59 = 891 WHERE f60 = 105 ;
affected rows: 4
info: Rows matched: 4 Changed: 4 Warnings: 0
SELECT * FROM tb2 where f59 = 891 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
-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
-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
+f59 891
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 891
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 891
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
+f59 891
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f110 NULL
+f111 NULL
+f112 NULL
+f113 NULL
+f114 NULL
+f115 NULL
+f116 NULL
+f117 NULL
SELECT f59,f60 FROM test.v1 where f59 = 891 and f60 = 105 ;
f59 f60
891 105
@@ -10874,17 +24036,13 @@ SET @variant4= 'CREATE VIEW v1 AS SELECT f61 FROM t1 GROUP BY f61';
SET @variant5= 'CREATE VIEW v1 AS SELECT f61 FROM t1 HAVING f61 > 0';
SET @variant6= 'CREATE VIEW v1 AS SELECT (SELECT f60 FROM t2 WHERE f59=19) AS f61 FROM t1';
SET @variant7= 'CREATE VIEW v1 AS SELECT f61 FROM v2';
-
-Some server responses suffer from
-Bug#10773 Incorrect message is displayed while updating a view
---------------------------------------------------------------------------------
SET @variant8= 'CREATE VIEW v1 AS SELECT f59 AS f61 FROM t1 WHERE f60 IN (SELECT f59 FROM t1)';
SET @variant9= 'CREATE ALGORITHM = TEMPTABLE VIEW v1 (f61) AS select f60 from t1';
CREATE ALGORITHM = TEMPTABLE VIEW v1 (f61) AS select f60 from t1;
INSERT INTO v1 VALUES (1002);
ERROR HY000: The target table v1 of the INSERT is not insertable-into
UPDATE v1 SET f61=1007;
-Got one of the listed errors
+ERROR HY000: The target table v1 of the UPDATE is not updatable
DELETE FROM v1;
ERROR HY000: The target table v1 of the DELETE is not updatable
DROP VIEW v1;
@@ -10892,7 +24050,7 @@ CREATE VIEW v1 AS SELECT f59 AS f61 FROM t1 WHERE f60 IN (SELECT f59 FROM t1);
INSERT INTO v1 VALUES (1002);
ERROR HY000: The target table v1 of the INSERT is not insertable-into
UPDATE v1 SET f61=1007;
-Got one of the listed errors
+ERROR HY000: The target table v1 of the UPDATE is not updatable
DELETE FROM v1;
ERROR HY000: The target table v1 of the DELETE is not updatable
DROP VIEW v1;
@@ -10900,7 +24058,7 @@ CREATE VIEW v1 AS SELECT f61 FROM v2;
INSERT INTO v1 VALUES (1002);
ERROR HY000: The target table v1 of the INSERT is not insertable-into
UPDATE v1 SET f61=1007;
-Got one of the listed errors
+ERROR HY000: The target table v1 of the UPDATE is not updatable
DELETE FROM v1;
ERROR HY000: The target table v1 of the DELETE is not updatable
DROP VIEW v1;
@@ -10908,7 +24066,7 @@ CREATE VIEW v1 AS SELECT (SELECT f60 FROM t2 WHERE f59=19) AS f61 FROM t1;
INSERT INTO v1 VALUES (1002);
ERROR HY000: The target table v1 of the INSERT is not insertable-into
UPDATE v1 SET f61=1007;
-Got one of the listed errors
+ERROR HY000: The target table v1 of the UPDATE is not updatable
DELETE FROM v1;
ERROR HY000: The target table v1 of the DELETE is not updatable
DROP VIEW v1;
@@ -10916,7 +24074,7 @@ CREATE VIEW v1 AS SELECT f61 FROM t1 HAVING f61 > 0;
INSERT INTO v1 VALUES (1002);
ERROR HY000: The target table v1 of the INSERT is not insertable-into
UPDATE v1 SET f61=1007;
-Got one of the listed errors
+ERROR HY000: The target table v1 of the UPDATE is not updatable
DELETE FROM v1;
ERROR HY000: The target table v1 of the DELETE is not updatable
DROP VIEW v1;
@@ -10924,7 +24082,7 @@ CREATE VIEW v1 AS SELECT f61 FROM t1 GROUP BY f61;
INSERT INTO v1 VALUES (1002);
ERROR HY000: The target table v1 of the INSERT is not insertable-into
UPDATE v1 SET f61=1007;
-Got one of the listed errors
+ERROR HY000: The target table v1 of the UPDATE is not updatable
DELETE FROM v1;
ERROR HY000: The target table v1 of the DELETE is not updatable
DROP VIEW v1;
@@ -10932,7 +24090,7 @@ CREATE VIEW v1 AS SELECT SUM(f59) AS f61 FROM t1;
INSERT INTO v1 VALUES (1002);
ERROR HY000: The target table v1 of the INSERT is not insertable-into
UPDATE v1 SET f61=1007;
-Got one of the listed errors
+ERROR HY000: The target table v1 of the UPDATE is not updatable
DELETE FROM v1;
ERROR HY000: The target table v1 of the DELETE is not updatable
DROP VIEW v1;
@@ -10940,7 +24098,7 @@ CREATE VIEW v1 AS SELECT DISTINCTROW(f61) FROM t1;
INSERT INTO v1 VALUES (1002);
ERROR HY000: The target table v1 of the INSERT is not insertable-into
UPDATE v1 SET f61=1007;
-Got one of the listed errors
+ERROR HY000: The target table v1 of the UPDATE is not updatable
DELETE FROM v1;
ERROR HY000: The target table v1 of the DELETE is not updatable
DROP VIEW v1;
@@ -10948,7 +24106,7 @@ CREATE VIEW v1 AS SELECT DISTINCT(f61) FROM t1;
INSERT INTO v1 VALUES (1002);
ERROR HY000: The target table v1 of the INSERT is not insertable-into
UPDATE v1 SET f61=1007;
-Got one of the listed errors
+ERROR HY000: The target table v1 of the UPDATE is not updatable
DELETE FROM v1;
ERROR HY000: The target table v1 of the DELETE is not updatable
DROP VIEW v1;
@@ -11117,9 +24275,9 @@ f1 f2 f4 report
4 NULL <------ 20 --------> t1 4
4 NULL <------ 20 --------> v1 4
ALTER TABLE t1 CHANGE COLUMN f1 f1 VARCHAR(30);
-INSERT INTO t1 SET f1 = '<------------- 30 ----------->',
+INSERT INTO t1 SET f1 = '<------------- 30 ----------->',
f4 = '<------ 20 -------->', report = 't1 5';
-INSERT INTO v1 SET f1 = '<------------- 30 ----------->',
+INSERT INTO v1 SET f1 = '<------------- 30 ----------->',
f4 = '<------ 20 -------->', report = 'v1 5';
DESCRIBE t1;
Field Type Null Key Default Extra
@@ -11409,21 +24567,24 @@ ABC 0
ABC 1.7320508075689
CREATE TABLE t2 AS SELECT f1, SQRT(f2) my_sqrt FROM t1;
SELECT * FROM t2 order by 2;
-f1 my_sqrt
-ABC 0
-ABC 1.73205080756888
+f1 ABC
+my_sqrt 0
+f1 ABC
+my_sqrt 1.73205080756888
DROP TABLE t2;
CREATE TABLE t2 AS SELECT * FROM v1;
SELECT * FROM t2 order by 2;
-f1 my_sqrt
-ABC 0
-ABC 1.73205080756888
+f1 ABC
+my_sqrt 0
+f1 ABC
+my_sqrt 1.73205080756888
DROP TABLE t2;
CREATE TABLE t2 AS SELECT * FROM v2;
SELECT * FROM t2 order by 2;
-f1 my_sqrt
-ABC 0
-ABC 1.73205080756888
+f1 ABC
+my_sqrt 0
+f1 ABC
+my_sqrt 1.73205080756888
DROP TABLE t1;
DROP TABLE t2;
DROP VIEW v1;
diff --git a/mysql-test/suite/funcs_1/r/ndb__datadict.result b/mysql-test/suite/funcs_1/r/ndb__datadict.result
index ebb45bf6ea2..329375caf2e 100644
--- a/mysql-test/suite/funcs_1/r/ndb__datadict.result
+++ b/mysql-test/suite/funcs_1/r/ndb__datadict.result
@@ -10,8 +10,9 @@
. *__datadict.test are started. This can be a result of showing e.g. maximum
. values of the number of rows of tables.
.
-. This .result file has been checked OK with Linux 5.0.23-bk,
-. ChangeSet@1.2211, 2006-06-28 10:11:43-07:00.
+. This .result file has been checked OK with Linux 5.0.48,
+. build tree ChangeSet@1.2477.6.3, 2007-07-30
+. except that the not fixed Bug#30020 causes a difference.
.
--------------------------------------------------------------------------------
@@ -20,11 +21,21 @@ FIXME: There are subtests that are switched off due to known bugs:
SELECT 1 AS "have_bug_11589";
have_bug_11589
1
+SELECT 1 AS "have_bug_30689";
+have_bug_30689
+1
There are some statements where the ps-protocol is switched off.
This may come from the bug listed below, ir from other problems.
Bug#11589: mysqltest, --ps-protocol, strange output, float/double/real with zerofill
--------------------------------------------------------------------------------
+
+Selects on INFORMATION_SCHEMA.VIEWS present incomplete
+content for the column VIEW_DEFINITION in cases where
+the view selects(=is based) on an INFORMATION_SCHEMA table.
+---> VIEWS vu and vu1
+Bug#30689 Wrong content in I_S.VIEWS.VIEW_DEFINITION if VIEW is based on I_S
+--------------------------------------------------------------------------------
SET @NO_REFRESH = IF( '' = '', 0, 1);
DROP DATABASE IF EXISTS test1;
CREATE DATABASE test1;
@@ -720,7 +731,8 @@ CHECKSUM NULL
CREATE_OPTIONS #CO#
TABLE_COMMENT
SELECT * FROM tables
-WHERE NOT( table_schema = 'information_schema');
+WHERE NOT( table_schema = 'information_schema')
+AND NOT (table_schema = 'mysql' AND table_name LIKE 'help_%');
TABLE_CATALOG NULL
TABLE_SCHEMA db_datadict
TABLE_NAME v1
@@ -912,90 +924,6 @@ CREATE_OPTIONS
TABLE_COMMENT General log
TABLE_CATALOG NULL
TABLE_SCHEMA mysql
-TABLE_NAME help_category
-TABLE_TYPE BASE TABLE
-ENGINE MyISAM
-VERSION 10
-ROW_FORMAT Fixed
-TABLE_ROWS 37
-AVG_ROW_LENGTH #ARL#
-DATA_LENGTH #DL#
-MAX_DATA_LENGTH #MDL#
-INDEX_LENGTH #IL#
-DATA_FREE #DF#
-AUTO_INCREMENT NULL
-CREATE_TIME YYYY-MM-DD hh:mm:ss
-UPDATE_TIME YYYY-MM-DD hh:mm:ss
-CHECK_TIME YYYY-MM-DD hh:mm:ss
-TABLE_COLLATION utf8_general_ci
-CHECKSUM NULL
-CREATE_OPTIONS
-TABLE_COMMENT help categories
-TABLE_CATALOG NULL
-TABLE_SCHEMA mysql
-TABLE_NAME help_keyword
-TABLE_TYPE BASE TABLE
-ENGINE MyISAM
-VERSION 10
-ROW_FORMAT Fixed
-TABLE_ROWS 424
-AVG_ROW_LENGTH #ARL#
-DATA_LENGTH #DL#
-MAX_DATA_LENGTH #MDL#
-INDEX_LENGTH #IL#
-DATA_FREE #DF#
-AUTO_INCREMENT NULL
-CREATE_TIME YYYY-MM-DD hh:mm:ss
-UPDATE_TIME YYYY-MM-DD hh:mm:ss
-CHECK_TIME YYYY-MM-DD hh:mm:ss
-TABLE_COLLATION utf8_general_ci
-CHECKSUM NULL
-CREATE_OPTIONS
-TABLE_COMMENT help keywords
-TABLE_CATALOG NULL
-TABLE_SCHEMA mysql
-TABLE_NAME help_relation
-TABLE_TYPE BASE TABLE
-ENGINE MyISAM
-VERSION 10
-ROW_FORMAT Fixed
-TABLE_ROWS 901
-AVG_ROW_LENGTH #ARL#
-DATA_LENGTH #DL#
-MAX_DATA_LENGTH #MDL#
-INDEX_LENGTH #IL#
-DATA_FREE #DF#
-AUTO_INCREMENT NULL
-CREATE_TIME YYYY-MM-DD hh:mm:ss
-UPDATE_TIME YYYY-MM-DD hh:mm:ss
-CHECK_TIME YYYY-MM-DD hh:mm:ss
-TABLE_COLLATION utf8_general_ci
-CHECKSUM NULL
-CREATE_OPTIONS
-TABLE_COMMENT keyword-topic relation
-TABLE_CATALOG NULL
-TABLE_SCHEMA mysql
-TABLE_NAME help_topic
-TABLE_TYPE BASE TABLE
-ENGINE MyISAM
-VERSION 10
-ROW_FORMAT Dynamic
-TABLE_ROWS 479
-AVG_ROW_LENGTH #ARL#
-DATA_LENGTH #DL#
-MAX_DATA_LENGTH #MDL#
-INDEX_LENGTH #IL#
-DATA_FREE #DF#
-AUTO_INCREMENT NULL
-CREATE_TIME YYYY-MM-DD hh:mm:ss
-UPDATE_TIME YYYY-MM-DD hh:mm:ss
-CHECK_TIME YYYY-MM-DD hh:mm:ss
-TABLE_COLLATION utf8_general_ci
-CHECKSUM NULL
-CREATE_OPTIONS
-TABLE_COMMENT help topics
-TABLE_CATALOG NULL
-TABLE_SCHEMA mysql
TABLE_NAME host
TABLE_TYPE BASE TABLE
ENGINE MyISAM
@@ -1478,90 +1406,6 @@ CHECKSUM NULL
CREATE_OPTIONS
TABLE_COMMENT
TABLE_CATALOG NULL
-TABLE_SCHEMA test
-TABLE_NAME tb1
-TABLE_TYPE BASE TABLE
-ENGINE MyISAM
-VERSION 10
-ROW_FORMAT Dynamic
-TABLE_ROWS 10
-AVG_ROW_LENGTH #ARL#
-DATA_LENGTH #DL#
-MAX_DATA_LENGTH #MDL#
-INDEX_LENGTH #IL#
-DATA_FREE #DF#
-AUTO_INCREMENT NULL
-CREATE_TIME YYYY-MM-DD hh:mm:ss
-UPDATE_TIME YYYY-MM-DD hh:mm:ss
-CHECK_TIME YYYY-MM-DD hh:mm:ss
-TABLE_COLLATION latin1_swedish_ci
-CHECKSUM NULL
-CREATE_OPTIONS
-TABLE_COMMENT
-TABLE_CATALOG NULL
-TABLE_SCHEMA test
-TABLE_NAME tb2
-TABLE_TYPE BASE TABLE
-ENGINE MyISAM
-VERSION 10
-ROW_FORMAT Dynamic
-TABLE_ROWS 54
-AVG_ROW_LENGTH #ARL#
-DATA_LENGTH #DL#
-MAX_DATA_LENGTH #MDL#
-INDEX_LENGTH #IL#
-DATA_FREE #DF#
-AUTO_INCREMENT NULL
-CREATE_TIME YYYY-MM-DD hh:mm:ss
-UPDATE_TIME YYYY-MM-DD hh:mm:ss
-CHECK_TIME YYYY-MM-DD hh:mm:ss
-TABLE_COLLATION latin1_swedish_ci
-CHECKSUM NULL
-CREATE_OPTIONS
-TABLE_COMMENT
-TABLE_CATALOG NULL
-TABLE_SCHEMA test
-TABLE_NAME tb3
-TABLE_TYPE BASE TABLE
-ENGINE MyISAM
-VERSION 10
-ROW_FORMAT Dynamic
-TABLE_ROWS 11
-AVG_ROW_LENGTH #ARL#
-DATA_LENGTH #DL#
-MAX_DATA_LENGTH #MDL#
-INDEX_LENGTH #IL#
-DATA_FREE #DF#
-AUTO_INCREMENT NULL
-CREATE_TIME YYYY-MM-DD hh:mm:ss
-UPDATE_TIME YYYY-MM-DD hh:mm:ss
-CHECK_TIME YYYY-MM-DD hh:mm:ss
-TABLE_COLLATION latin1_swedish_ci
-CHECKSUM NULL
-CREATE_OPTIONS
-TABLE_COMMENT
-TABLE_CATALOG NULL
-TABLE_SCHEMA test
-TABLE_NAME tb4
-TABLE_TYPE BASE TABLE
-ENGINE MyISAM
-VERSION 10
-ROW_FORMAT Dynamic
-TABLE_ROWS 10
-AVG_ROW_LENGTH #ARL#
-DATA_LENGTH #DL#
-MAX_DATA_LENGTH #MDL#
-INDEX_LENGTH #IL#
-DATA_FREE #DF#
-AUTO_INCREMENT NULL
-CREATE_TIME YYYY-MM-DD hh:mm:ss
-UPDATE_TIME YYYY-MM-DD hh:mm:ss
-CHECK_TIME YYYY-MM-DD hh:mm:ss
-TABLE_COLLATION latin1_swedish_ci
-CHECKSUM NULL
-CREATE_OPTIONS
-TABLE_COMMENT
-TABLE_CATALOG NULL
TABLE_SCHEMA test4
TABLE_NAME t6
TABLE_TYPE BASE TABLE
@@ -1642,8 +1486,8 @@ NULL db_datadict latin1 SYSTEM VIEW MEMORY
NULL db_datadict latin1 SYSTEM VIEW MEMORY
NULL db_datadict latin1 SYSTEM VIEW MEMORY
NULL db_datadict latin1 SYSTEM VIEW MEMORY
-NULL db_datadict latin1 SYSTEM VIEW MEMORY
-NULL db_datadict latin1 SYSTEM VIEW MEMORY
+NULL db_datadict latin1 SYSTEM VIEW MyISAM
+NULL db_datadict latin1 SYSTEM VIEW MyISAM
NULL db_datadict latin1 SYSTEM VIEW MyISAM
NULL db_datadict latin1 SYSTEM VIEW MyISAM
NULL db_datadict latin1 SYSTEM VIEW MyISAM
@@ -1710,8 +1554,8 @@ NULL information_schema utf8 SYSTEM VIEW MEMORY
NULL information_schema utf8 SYSTEM VIEW MEMORY
NULL information_schema utf8 SYSTEM VIEW MEMORY
NULL information_schema utf8 SYSTEM VIEW MEMORY
-NULL information_schema utf8 SYSTEM VIEW MEMORY
-NULL information_schema utf8 SYSTEM VIEW MEMORY
+NULL information_schema utf8 SYSTEM VIEW MyISAM
+NULL information_schema utf8 SYSTEM VIEW MyISAM
NULL information_schema utf8 SYSTEM VIEW MyISAM
NULL information_schema utf8 SYSTEM VIEW MyISAM
NULL information_schema utf8 SYSTEM VIEW MyISAM
@@ -1778,8 +1622,8 @@ NULL mysql latin1 SYSTEM VIEW MEMORY
NULL mysql latin1 SYSTEM VIEW MEMORY
NULL mysql latin1 SYSTEM VIEW MEMORY
NULL mysql latin1 SYSTEM VIEW MEMORY
-NULL mysql latin1 SYSTEM VIEW MEMORY
-NULL mysql latin1 SYSTEM VIEW MEMORY
+NULL mysql latin1 SYSTEM VIEW MyISAM
+NULL mysql latin1 SYSTEM VIEW MyISAM
NULL mysql latin1 SYSTEM VIEW MyISAM
NULL mysql latin1 SYSTEM VIEW MyISAM
NULL mysql latin1 SYSTEM VIEW MyISAM
@@ -1846,8 +1690,8 @@ NULL test latin1 SYSTEM VIEW MEMORY
NULL test latin1 SYSTEM VIEW MEMORY
NULL test latin1 SYSTEM VIEW MEMORY
NULL test latin1 SYSTEM VIEW MEMORY
-NULL test latin1 SYSTEM VIEW MEMORY
-NULL test latin1 SYSTEM VIEW MEMORY
+NULL test latin1 SYSTEM VIEW MyISAM
+NULL test latin1 SYSTEM VIEW MyISAM
NULL test latin1 SYSTEM VIEW MyISAM
NULL test latin1 SYSTEM VIEW MyISAM
NULL test latin1 SYSTEM VIEW MyISAM
@@ -1914,8 +1758,8 @@ NULL test1 latin1 SYSTEM VIEW MEMORY
NULL test1 latin1 SYSTEM VIEW MEMORY
NULL test1 latin1 SYSTEM VIEW MEMORY
NULL test1 latin1 SYSTEM VIEW MEMORY
-NULL test1 latin1 SYSTEM VIEW MEMORY
-NULL test1 latin1 SYSTEM VIEW MEMORY
+NULL test1 latin1 SYSTEM VIEW MyISAM
+NULL test1 latin1 SYSTEM VIEW MyISAM
NULL test1 latin1 SYSTEM VIEW MyISAM
NULL test1 latin1 SYSTEM VIEW MyISAM
NULL test1 latin1 SYSTEM VIEW MyISAM
@@ -1982,8 +1826,8 @@ NULL test4 latin1 SYSTEM VIEW MEMORY
NULL test4 latin1 SYSTEM VIEW MEMORY
NULL test4 latin1 SYSTEM VIEW MEMORY
NULL test4 latin1 SYSTEM VIEW MEMORY
-NULL test4 latin1 SYSTEM VIEW MEMORY
-NULL test4 latin1 SYSTEM VIEW MEMORY
+NULL test4 latin1 SYSTEM VIEW MyISAM
+NULL test4 latin1 SYSTEM VIEW MyISAM
NULL test4 latin1 SYSTEM VIEW MyISAM
NULL test4 latin1 SYSTEM VIEW MyISAM
NULL test4 latin1 SYSTEM VIEW MyISAM
@@ -2023,7 +1867,7 @@ NULL information_schema COLUMNS NUMERIC_PRECISION 11 NULL YES bigint NULL NULL 1
NULL information_schema COLUMNS NUMERIC_SCALE 12 NULL YES bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned select
NULL information_schema COLUMNS CHARACTER_SET_NAME 13 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema COLUMNS COLLATION_NAME 14 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
-NULL information_schema COLUMNS COLUMN_TYPE 15 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema COLUMNS COLUMN_TYPE 15 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema COLUMNS COLUMN_KEY 16 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema COLUMNS EXTRA 17 NO varchar 20 60 NULL NULL utf8 utf8_general_ci varchar(20) select
NULL information_schema COLUMNS PRIVILEGES 18 NO varchar 80 240 NULL NULL utf8 utf8_general_ci varchar(80) select
@@ -2047,12 +1891,12 @@ NULL information_schema EVENTS EVENT_NAME 3 NO varchar 64 192 NULL NULL utf8 ut
NULL information_schema EVENTS DEFINER 4 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
NULL information_schema EVENTS TIME_ZONE 5 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema EVENTS EVENT_BODY 6 NO varchar 8 24 NULL NULL utf8 utf8_general_ci varchar(8) select
-NULL information_schema EVENTS EVENT_DEFINITION 7 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema EVENTS EVENT_DEFINITION 7 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema EVENTS EVENT_TYPE 8 NO varchar 9 27 NULL NULL utf8 utf8_general_ci varchar(9) select
NULL information_schema EVENTS EXECUTE_AT 9 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS INTERVAL_VALUE 10 NULL YES varchar 256 768 NULL NULL utf8 utf8_general_ci varchar(256) select
NULL information_schema EVENTS INTERVAL_FIELD 11 NULL YES varchar 18 54 NULL NULL utf8 utf8_general_ci varchar(18) select
-NULL information_schema EVENTS SQL_MODE 12 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema EVENTS SQL_MODE 12 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema EVENTS STARTS 13 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS ENDS 14 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS STATUS 15 NO varchar 18 54 NULL NULL utf8 utf8_general_ci varchar(18) select
@@ -2190,7 +2034,7 @@ NULL information_schema ROUTINES SQL_PATH 14 NULL YES varchar 64 192 NULL NULL u
NULL information_schema ROUTINES SECURITY_TYPE 15 NO varchar 7 21 NULL NULL utf8 utf8_general_ci varchar(7) select
NULL information_schema ROUTINES CREATED 16 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema ROUTINES LAST_ALTERED 17 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime select
-NULL information_schema ROUTINES SQL_MODE 18 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema ROUTINES SQL_MODE 18 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema ROUTINES ROUTINE_COMMENT 19 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema ROUTINES DEFINER 20 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
NULL information_schema ROUTINES CHARACTER_SET_CLIENT 21 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
@@ -2267,7 +2111,7 @@ NULL information_schema TRIGGERS EVENT_OBJECT_SCHEMA 6 NO varchar 64 192 NULL N
NULL information_schema TRIGGERS EVENT_OBJECT_TABLE 7 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema TRIGGERS ACTION_ORDER 8 0 NO bigint NULL NULL 19 0 NULL NULL bigint(4) select
NULL information_schema TRIGGERS ACTION_CONDITION 9 NULL YES longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
-NULL information_schema TRIGGERS ACTION_STATEMENT 10 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS ACTION_STATEMENT 10 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema TRIGGERS ACTION_ORIENTATION 11 NO varchar 9 27 NULL NULL utf8 utf8_general_ci varchar(9) select
NULL information_schema TRIGGERS ACTION_TIMING 12 NO varchar 6 18 NULL NULL utf8 utf8_general_ci varchar(6) select
NULL information_schema TRIGGERS ACTION_REFERENCE_OLD_TABLE 13 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
@@ -2275,8 +2119,8 @@ NULL information_schema TRIGGERS ACTION_REFERENCE_NEW_TABLE 14 NULL YES varchar
NULL information_schema TRIGGERS ACTION_REFERENCE_OLD_ROW 15 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema TRIGGERS ACTION_REFERENCE_NEW_ROW 16 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema TRIGGERS CREATED 17 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
-NULL information_schema TRIGGERS SQL_MODE 18 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
-NULL information_schema TRIGGERS DEFINER 19 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS SQL_MODE 18 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS DEFINER 19 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema TRIGGERS CHARACTER_SET_CLIENT 20 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
NULL information_schema TRIGGERS COLLATION_CONNECTION 21 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
NULL information_schema TRIGGERS DATABASE_COLLATION 22 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
@@ -2287,7 +2131,7 @@ NULL information_schema USER_PRIVILEGES IS_GRANTABLE 4 NO varchar 3 9 NULL NULL
NULL information_schema VIEWS TABLE_CATALOG 1 NULL YES varchar 4096 12288 NULL NULL utf8 utf8_general_ci varchar(4096) select
NULL information_schema VIEWS TABLE_SCHEMA 2 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema VIEWS TABLE_NAME 3 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
-NULL information_schema VIEWS VIEW_DEFINITION 4 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema VIEWS VIEW_DEFINITION 4 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema VIEWS CHECK_OPTION 5 NO varchar 8 24 NULL NULL utf8 utf8_general_ci varchar(8) select
NULL information_schema VIEWS IS_UPDATABLE 6 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema VIEWS DEFINER 7 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
@@ -2869,7 +2713,7 @@ cp932 cp932_japanese_ci SJIS for Windows Japanese 2
eucjpms eucjpms_japanese_ci UJIS for Windows Japanese 3
select sum(id) from collations;
sum(id)
-10840
+11094
select collation_name, character_set_name into @x,@y
from collation_character_set_applicability limit 1;
select @x, @y;
@@ -2883,7 +2727,8 @@ END NULL NULL SQL NO CONTAINS SQL NULL DEFINER YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh
select count(*) from routines;
count(*)
1
-select * from statistics;
+select * from statistics
+where not (table_schema = 'mysql' and table_name like 'help_%');
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME NON_UNIQUE INDEX_SCHEMA INDEX_NAME SEQ_IN_INDEX COLUMN_NAME COLLATION CARDINALITY SUB_PART PACKED NULLABLE INDEX_TYPE COMMENT
NULL mysql user 0 mysql PRIMARY 1 Host A NULL NULL NULL BTREE
NULL mysql user 0 mysql PRIMARY 2 User A 3 NULL NULL BTREE
@@ -2899,14 +2744,6 @@ NULL mysql db 1 mysql User 1 User A 1 NULL NULL BTREE
NULL mysql event 0 mysql PRIMARY 1 db A NULL NULL NULL BTREE
NULL mysql event 0 mysql PRIMARY 2 name A 0 NULL NULL BTREE
NULL mysql func 0 mysql PRIMARY 1 name A 0 NULL NULL BTREE
-NULL mysql help_category 0 mysql PRIMARY 1 help_category_id A 37 NULL NULL BTREE
-NULL mysql help_category 0 mysql name 1 name A 37 NULL NULL BTREE
-NULL mysql help_keyword 0 mysql PRIMARY 1 help_keyword_id A 424 NULL NULL BTREE
-NULL mysql help_keyword 0 mysql name 1 name A 424 NULL NULL BTREE
-NULL mysql help_relation 0 mysql PRIMARY 1 help_keyword_id A NULL NULL NULL BTREE
-NULL mysql help_relation 0 mysql PRIMARY 2 help_topic_id A 901 NULL NULL BTREE
-NULL mysql help_topic 0 mysql PRIMARY 1 help_topic_id A 479 NULL NULL BTREE
-NULL mysql help_topic 0 mysql name 1 name A 479 NULL NULL BTREE
NULL mysql host 0 mysql PRIMARY 1 Host A NULL NULL NULL BTREE
NULL mysql host 0 mysql PRIMARY 2 Db A 0 NULL NULL BTREE
NULL mysql ndb_apply_status 0 mysql PRIMARY 1 server_id NULL 0 NULL NULL HASH
@@ -3138,9 +2975,10 @@ NULL mysql PRIMARY NULL mysql time_zone_transition_type Transition_type_id 2 NUL
select count(*) as max_recs from key_column_usage;
max_recs
46
-select max(cardinality) from statistics;
+select max(cardinality) from statistics
+where not (table_schema = 'mysql' and table_name like 'help_%');
max(cardinality)
-901
+393
select concat("View '",
table_name, "' is associated with the database '", table_schema, "'.")
AS "Who is Who for the Views"
@@ -4031,7 +3869,8 @@ CHECKSUM NULL
CREATE_OPTIONS #CO#
TABLE_COMMENT
SELECT * FROM information_schema.tables
-WHERE NOT( table_schema = 'information_schema');
+WHERE NOT( table_schema = 'information_schema')
+AND NOT (table_schema = 'mysql' AND table_name LIKE 'help_%');
TABLE_CATALOG NULL
TABLE_SCHEMA db_datadict
TABLE_NAME v1
@@ -4223,90 +4062,6 @@ CREATE_OPTIONS
TABLE_COMMENT General log
TABLE_CATALOG NULL
TABLE_SCHEMA mysql
-TABLE_NAME help_category
-TABLE_TYPE BASE TABLE
-ENGINE MyISAM
-VERSION 10
-ROW_FORMAT Fixed
-TABLE_ROWS 37
-AVG_ROW_LENGTH #ARL#
-DATA_LENGTH #DL#
-MAX_DATA_LENGTH #MDL#
-INDEX_LENGTH #IL#
-DATA_FREE #DF#
-AUTO_INCREMENT NULL
-CREATE_TIME YYYY-MM-DD hh:mm:ss
-UPDATE_TIME YYYY-MM-DD hh:mm:ss
-CHECK_TIME YYYY-MM-DD hh:mm:ss
-TABLE_COLLATION utf8_general_ci
-CHECKSUM NULL
-CREATE_OPTIONS
-TABLE_COMMENT help categories
-TABLE_CATALOG NULL
-TABLE_SCHEMA mysql
-TABLE_NAME help_keyword
-TABLE_TYPE BASE TABLE
-ENGINE MyISAM
-VERSION 10
-ROW_FORMAT Fixed
-TABLE_ROWS 424
-AVG_ROW_LENGTH #ARL#
-DATA_LENGTH #DL#
-MAX_DATA_LENGTH #MDL#
-INDEX_LENGTH #IL#
-DATA_FREE #DF#
-AUTO_INCREMENT NULL
-CREATE_TIME YYYY-MM-DD hh:mm:ss
-UPDATE_TIME YYYY-MM-DD hh:mm:ss
-CHECK_TIME YYYY-MM-DD hh:mm:ss
-TABLE_COLLATION utf8_general_ci
-CHECKSUM NULL
-CREATE_OPTIONS
-TABLE_COMMENT help keywords
-TABLE_CATALOG NULL
-TABLE_SCHEMA mysql
-TABLE_NAME help_relation
-TABLE_TYPE BASE TABLE
-ENGINE MyISAM
-VERSION 10
-ROW_FORMAT Fixed
-TABLE_ROWS 901
-AVG_ROW_LENGTH #ARL#
-DATA_LENGTH #DL#
-MAX_DATA_LENGTH #MDL#
-INDEX_LENGTH #IL#
-DATA_FREE #DF#
-AUTO_INCREMENT NULL
-CREATE_TIME YYYY-MM-DD hh:mm:ss
-UPDATE_TIME YYYY-MM-DD hh:mm:ss
-CHECK_TIME YYYY-MM-DD hh:mm:ss
-TABLE_COLLATION utf8_general_ci
-CHECKSUM NULL
-CREATE_OPTIONS
-TABLE_COMMENT keyword-topic relation
-TABLE_CATALOG NULL
-TABLE_SCHEMA mysql
-TABLE_NAME help_topic
-TABLE_TYPE BASE TABLE
-ENGINE MyISAM
-VERSION 10
-ROW_FORMAT Dynamic
-TABLE_ROWS 479
-AVG_ROW_LENGTH #ARL#
-DATA_LENGTH #DL#
-MAX_DATA_LENGTH #MDL#
-INDEX_LENGTH #IL#
-DATA_FREE #DF#
-AUTO_INCREMENT NULL
-CREATE_TIME YYYY-MM-DD hh:mm:ss
-UPDATE_TIME YYYY-MM-DD hh:mm:ss
-CHECK_TIME YYYY-MM-DD hh:mm:ss
-TABLE_COLLATION utf8_general_ci
-CHECKSUM NULL
-CREATE_OPTIONS
-TABLE_COMMENT help topics
-TABLE_CATALOG NULL
-TABLE_SCHEMA mysql
TABLE_NAME host
TABLE_TYPE BASE TABLE
ENGINE MyISAM
@@ -4953,8 +4708,8 @@ NULL db_datadict latin1 SYSTEM VIEW MEMORY
NULL db_datadict latin1 SYSTEM VIEW MEMORY
NULL db_datadict latin1 SYSTEM VIEW MEMORY
NULL db_datadict latin1 SYSTEM VIEW MEMORY
-NULL db_datadict latin1 SYSTEM VIEW MEMORY
-NULL db_datadict latin1 SYSTEM VIEW MEMORY
+NULL db_datadict latin1 SYSTEM VIEW MyISAM
+NULL db_datadict latin1 SYSTEM VIEW MyISAM
NULL db_datadict latin1 SYSTEM VIEW MyISAM
NULL db_datadict latin1 SYSTEM VIEW MyISAM
NULL db_datadict latin1 SYSTEM VIEW MyISAM
@@ -5021,8 +4776,8 @@ NULL information_schema utf8 SYSTEM VIEW MEMORY
NULL information_schema utf8 SYSTEM VIEW MEMORY
NULL information_schema utf8 SYSTEM VIEW MEMORY
NULL information_schema utf8 SYSTEM VIEW MEMORY
-NULL information_schema utf8 SYSTEM VIEW MEMORY
-NULL information_schema utf8 SYSTEM VIEW MEMORY
+NULL information_schema utf8 SYSTEM VIEW MyISAM
+NULL information_schema utf8 SYSTEM VIEW MyISAM
NULL information_schema utf8 SYSTEM VIEW MyISAM
NULL information_schema utf8 SYSTEM VIEW MyISAM
NULL information_schema utf8 SYSTEM VIEW MyISAM
@@ -5089,8 +4844,8 @@ NULL mysql latin1 SYSTEM VIEW MEMORY
NULL mysql latin1 SYSTEM VIEW MEMORY
NULL mysql latin1 SYSTEM VIEW MEMORY
NULL mysql latin1 SYSTEM VIEW MEMORY
-NULL mysql latin1 SYSTEM VIEW MEMORY
-NULL mysql latin1 SYSTEM VIEW MEMORY
+NULL mysql latin1 SYSTEM VIEW MyISAM
+NULL mysql latin1 SYSTEM VIEW MyISAM
NULL mysql latin1 SYSTEM VIEW MyISAM
NULL mysql latin1 SYSTEM VIEW MyISAM
NULL mysql latin1 SYSTEM VIEW MyISAM
@@ -5157,8 +4912,8 @@ NULL test latin1 SYSTEM VIEW MEMORY
NULL test latin1 SYSTEM VIEW MEMORY
NULL test latin1 SYSTEM VIEW MEMORY
NULL test latin1 SYSTEM VIEW MEMORY
-NULL test latin1 SYSTEM VIEW MEMORY
-NULL test latin1 SYSTEM VIEW MEMORY
+NULL test latin1 SYSTEM VIEW MyISAM
+NULL test latin1 SYSTEM VIEW MyISAM
NULL test latin1 SYSTEM VIEW MyISAM
NULL test latin1 SYSTEM VIEW MyISAM
NULL test latin1 SYSTEM VIEW MyISAM
@@ -5225,8 +4980,8 @@ NULL test1 latin1 SYSTEM VIEW MEMORY
NULL test1 latin1 SYSTEM VIEW MEMORY
NULL test1 latin1 SYSTEM VIEW MEMORY
NULL test1 latin1 SYSTEM VIEW MEMORY
-NULL test1 latin1 SYSTEM VIEW MEMORY
-NULL test1 latin1 SYSTEM VIEW MEMORY
+NULL test1 latin1 SYSTEM VIEW MyISAM
+NULL test1 latin1 SYSTEM VIEW MyISAM
NULL test1 latin1 SYSTEM VIEW MyISAM
NULL test1 latin1 SYSTEM VIEW MyISAM
NULL test1 latin1 SYSTEM VIEW MyISAM
@@ -5293,8 +5048,8 @@ NULL test4 latin1 SYSTEM VIEW MEMORY
NULL test4 latin1 SYSTEM VIEW MEMORY
NULL test4 latin1 SYSTEM VIEW MEMORY
NULL test4 latin1 SYSTEM VIEW MEMORY
-NULL test4 latin1 SYSTEM VIEW MEMORY
-NULL test4 latin1 SYSTEM VIEW MEMORY
+NULL test4 latin1 SYSTEM VIEW MyISAM
+NULL test4 latin1 SYSTEM VIEW MyISAM
NULL test4 latin1 SYSTEM VIEW MyISAM
NULL test4 latin1 SYSTEM VIEW MyISAM
NULL test4 latin1 SYSTEM VIEW MyISAM
@@ -5394,19 +5149,19 @@ COUNT(*)
6
SELECT COUNT(*) FROM information_schema. tables ;
COUNT(*)
-68
+64
SELECT COUNT(*) FROM information_schema. columns ;
COUNT(*)
-832
+590
SELECT COUNT(*) FROM information_schema. character_sets ;
COUNT(*)
36
SELECT COUNT(*) FROM information_schema. collations ;
COUNT(*)
-127
+128
SELECT COUNT(*) FROM information_schema. collation_character_set_applicability ;
COUNT(*)
-128
+129
SELECT COUNT(*) FROM information_schema. routines ;
COUNT(*)
1
@@ -5459,10 +5214,10 @@ NULL test1 latin1
NULL test4 latin1
select count(*) as tot_tabs from tables;
tot_tabs
-65
+61
select count(*) as the_cols from columns;
the_cols
-807
+565
select max(maxlen) as the_max from character_sets;
the_max
3
@@ -5483,10 +5238,10 @@ utf8_esperanto_ci utf8
utf8_estonian_ci utf8
select routine_definition from routines;
routine_definition
-select * from statistics group by index_name asc limit 0, 5;
+select * from statistics where table_name not like 'help_%'
+group by index_name asc limit 0, 5;
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME NON_UNIQUE INDEX_SCHEMA INDEX_NAME SEQ_IN_INDEX COLUMN_NAME COLLATION CARDINALITY SUB_PART PACKED NULLABLE INDEX_TYPE COMMENT
NULL mysql procs_priv 1 mysql Grantor 1 Grantor A NULL NULL NULL BTREE
-NULL mysql help_category 0 mysql name 1 name A 37 NULL NULL BTREE
NULL mysql user 0 mysql PRIMARY 1 Host A NULL NULL NULL BTREE
NULL mysql db 1 mysql User 1 User A 1 NULL NULL BTREE
select concat(table_schema, ', ', table_name, ', ', view_definition) view_info
@@ -5600,9 +5355,9 @@ NULL test latin1 latin1_swedish_ci NULL
NULL test1 latin1 latin1_swedish_ci NULL
select distinct grantee from user_privileges;
grantee
-'root'@'localhost'
-'root'@'<SERVER_NAME>'
'root'@'127.0.0.1'
+'root'@'<SERVER_NAME>'
+'root'@'localhost'
select all grantee from user_privileges order by grantee, privilege_type;
grantee
'root'@'127.0.0.1'
@@ -7552,7 +7307,7 @@ Testcase 3.2.1.14:
DROP DATABASE IF EXISTS db_datadict;
CREATE DATABASE db_datadict;
USE db_datadict;
-create table res_t_401014(f1 char(10), f2 text(25), f3 int);
+create table res_t_401014(f1 char(10), f2 varchar(25), f3 int);
create view res_v_401014 as select * from res_t_401014;
create procedure sp_6_401014() select 'db_datadict';
create function fn_6_401014() returns int return 0;
@@ -7575,10 +7330,10 @@ from information_schema.columns
where table_schema like 'db_datadict%';
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION COLUMN_DEFAULT IS_NULLABLE DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE CHARACTER_SET_NAME COLLATION_NAME COLUMN_TYPE COLUMN_KEY EXTRA PRIVILEGES COLUMN_COMMENT
NULL db_datadict res_t_401014 f1 1 NULL YES char 10 10 NULL NULL latin1 latin1_swedish_ci char(10) select,insert,update,references
-NULL db_datadict res_t_401014 f2 2 NULL YES tinytext 255 255 NULL NULL latin1 latin1_swedish_ci tinytext select,insert,update,references
+NULL db_datadict res_t_401014 f2 2 NULL YES varchar 25 25 NULL NULL latin1 latin1_swedish_ci varchar(25) select,insert,update,references
NULL db_datadict res_t_401014 f3 3 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
NULL db_datadict res_v_401014 f1 1 NULL YES char 10 10 NULL NULL latin1 latin1_swedish_ci char(10) select,insert,update,references
-NULL db_datadict res_v_401014 f2 2 NULL YES tinytext 255 255 NULL NULL latin1 latin1_swedish_ci tinytext select,insert,update,references
+NULL db_datadict res_v_401014 f2 2 NULL YES varchar 25 25 NULL NULL latin1 latin1_swedish_ci varchar(25) select,insert,update,references
NULL db_datadict res_v_401014 f3 3 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
select table_schema, table_name, is_updatable
from information_schema.views
@@ -7697,7 +7452,7 @@ WHERE trigger_schema LIKE 'db_datadict%';
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
use db_datadict;
alter table res_t_401014 change f1 ff1 int;
-alter table res_t_401014 engine = innodb;
+alter table res_t_401014 engine = MEMORY;
alter table res_t_401014 change f3 f3_new bigint;
alter view res_v_401014 as select ff1 from res_t_401014;
alter procedure sp_6_401014 sql security invoker;
@@ -7715,14 +7470,14 @@ select table_catalog, table_schema, engine
from information_schema.tables
where table_schema like 'db_datadict%';
table_catalog table_schema engine
-NULL db_datadict InnoDB
+NULL db_datadict MEMORY
NULL db_datadict NULL
select *
from information_schema.columns
where table_schema like 'db_datadict%';
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION COLUMN_DEFAULT IS_NULLABLE DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE CHARACTER_SET_NAME COLLATION_NAME COLUMN_TYPE COLUMN_KEY EXTRA PRIVILEGES COLUMN_COMMENT
NULL db_datadict res_t_401014 ff1 1 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
-NULL db_datadict res_t_401014 f2 2 NULL YES tinytext 255 255 NULL NULL latin1 latin1_swedish_ci tinytext select,insert,update,references
+NULL db_datadict res_t_401014 f2 2 NULL YES varchar 25 25 NULL NULL latin1 latin1_swedish_ci varchar(25) select,insert,update,references
NULL db_datadict res_t_401014 f3_new 3 NULL YES bigint NULL NULL 19 0 NULL NULL bigint(20) select,insert,update,references
NULL db_datadict res_v_401014 ff1 1 NULL YES int NULL NULL 10 0 NULL NULL int(11) select,insert,update,references
select table_schema, table_name, is_updatable
@@ -8363,6 +8118,7 @@ utf8_roman_ci utf8
utf8_persian_ci utf8
utf8_esperanto_ci utf8
utf8_hungarian_ci utf8
+utf8_general_cs utf8
ucs2_general_ci ucs2
ucs2_bin ucs2
ucs2_unicode_ci ucs2
@@ -9161,6 +8917,7 @@ utf8_roman_ci
utf8_persian_ci
utf8_esperanto_ci
utf8_hungarian_ci
+utf8_general_cs
ucs2_general_ci
ucs2_bin
ucs2_unicode_ci
@@ -9526,6 +9283,7 @@ utf8_roman_ci utf8 207 Yes 8
utf8_persian_ci utf8 208 Yes 8
utf8_esperanto_ci utf8 209 Yes 8
utf8_hungarian_ci utf8 210 Yes 8
+utf8_general_cs utf8 254 Yes 1
ucs2_general_ci ucs2 35 Yes Yes 1
ucs2_bin ucs2 90 Yes 1
ucs2_unicode_ci ucs2 128 Yes 8
@@ -9689,6 +9447,7 @@ utf8_roman_ci utf8
utf8_persian_ci utf8
utf8_esperanto_ci utf8
utf8_hungarian_ci utf8
+utf8_general_cs utf8
ucs2_general_ci ucs2
ucs2_bin ucs2
ucs2_unicode_ci ucs2
@@ -9924,7 +9683,7 @@ NUMERIC_PRECISION bigint(21) unsigned YES NULL
NUMERIC_SCALE bigint(21) unsigned YES NULL
CHARACTER_SET_NAME varchar(64) YES NULL
COLLATION_NAME varchar(64) YES NULL
-COLUMN_TYPE longtext NO
+COLUMN_TYPE longtext NO NULL
COLUMN_KEY varchar(3) NO
EXTRA varchar(20) NO
PRIVILEGES varchar(80) NO
@@ -9977,7 +9736,7 @@ NULL information_schema columns NUMERIC_PRECISION 11 NULL YES bigint NULL NULL 1
NULL information_schema columns NUMERIC_SCALE 12 NULL YES bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned select
NULL information_schema columns CHARACTER_SET_NAME 13 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema columns COLLATION_NAME 14 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
-NULL information_schema columns COLUMN_TYPE 15 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema columns COLUMN_TYPE 15 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema columns COLUMN_KEY 16 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema columns EXTRA 17 NO varchar 20 60 NULL NULL utf8 utf8_general_ci varchar(20) select
NULL information_schema columns PRIVILEGES 18 NO varchar 80 240 NULL NULL utf8 utf8_general_ci varchar(80) select
@@ -10032,7 +9791,7 @@ NULL information_schema COLUMNS NUMERIC_PRECISION 11 NULL YES bigint NULL NULL 1
NULL information_schema COLUMNS NUMERIC_SCALE 12 NULL YES bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned select
NULL information_schema COLUMNS CHARACTER_SET_NAME 13 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema COLUMNS COLLATION_NAME 14 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
-NULL information_schema COLUMNS COLUMN_TYPE 15 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema COLUMNS COLUMN_TYPE 15 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema COLUMNS COLUMN_KEY 16 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema COLUMNS EXTRA 17 NO varchar 20 60 NULL NULL utf8 utf8_general_ci varchar(20) select
NULL information_schema COLUMNS PRIVILEGES 18 NO varchar 80 240 NULL NULL utf8 utf8_general_ci varchar(80) select
@@ -10056,12 +9815,12 @@ NULL information_schema EVENTS EVENT_NAME 3 NO varchar 64 192 NULL NULL utf8 ut
NULL information_schema EVENTS DEFINER 4 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
NULL information_schema EVENTS TIME_ZONE 5 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema EVENTS EVENT_BODY 6 NO varchar 8 24 NULL NULL utf8 utf8_general_ci varchar(8) select
-NULL information_schema EVENTS EVENT_DEFINITION 7 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema EVENTS EVENT_DEFINITION 7 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema EVENTS EVENT_TYPE 8 NO varchar 9 27 NULL NULL utf8 utf8_general_ci varchar(9) select
NULL information_schema EVENTS EXECUTE_AT 9 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS INTERVAL_VALUE 10 NULL YES varchar 256 768 NULL NULL utf8 utf8_general_ci varchar(256) select
NULL information_schema EVENTS INTERVAL_FIELD 11 NULL YES varchar 18 54 NULL NULL utf8 utf8_general_ci varchar(18) select
-NULL information_schema EVENTS SQL_MODE 12 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema EVENTS SQL_MODE 12 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema EVENTS STARTS 13 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS ENDS 14 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS STATUS 15 NO varchar 18 54 NULL NULL utf8 utf8_general_ci varchar(18) select
@@ -10199,7 +9958,7 @@ NULL information_schema ROUTINES SQL_PATH 14 NULL YES varchar 64 192 NULL NULL u
NULL information_schema ROUTINES SECURITY_TYPE 15 NO varchar 7 21 NULL NULL utf8 utf8_general_ci varchar(7) select
NULL information_schema ROUTINES CREATED 16 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema ROUTINES LAST_ALTERED 17 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime select
-NULL information_schema ROUTINES SQL_MODE 18 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema ROUTINES SQL_MODE 18 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema ROUTINES ROUTINE_COMMENT 19 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema ROUTINES DEFINER 20 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
NULL information_schema ROUTINES CHARACTER_SET_CLIENT 21 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
@@ -10276,7 +10035,7 @@ NULL information_schema TRIGGERS EVENT_OBJECT_SCHEMA 6 NO varchar 64 192 NULL N
NULL information_schema TRIGGERS EVENT_OBJECT_TABLE 7 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema TRIGGERS ACTION_ORDER 8 0 NO bigint NULL NULL 19 0 NULL NULL bigint(4) select
NULL information_schema TRIGGERS ACTION_CONDITION 9 NULL YES longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
-NULL information_schema TRIGGERS ACTION_STATEMENT 10 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS ACTION_STATEMENT 10 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema TRIGGERS ACTION_ORIENTATION 11 NO varchar 9 27 NULL NULL utf8 utf8_general_ci varchar(9) select
NULL information_schema TRIGGERS ACTION_TIMING 12 NO varchar 6 18 NULL NULL utf8 utf8_general_ci varchar(6) select
NULL information_schema TRIGGERS ACTION_REFERENCE_OLD_TABLE 13 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
@@ -10284,8 +10043,8 @@ NULL information_schema TRIGGERS ACTION_REFERENCE_NEW_TABLE 14 NULL YES varchar
NULL information_schema TRIGGERS ACTION_REFERENCE_OLD_ROW 15 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema TRIGGERS ACTION_REFERENCE_NEW_ROW 16 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema TRIGGERS CREATED 17 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
-NULL information_schema TRIGGERS SQL_MODE 18 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
-NULL information_schema TRIGGERS DEFINER 19 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS SQL_MODE 18 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS DEFINER 19 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema TRIGGERS CHARACTER_SET_CLIENT 20 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
NULL information_schema TRIGGERS COLLATION_CONNECTION 21 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
NULL information_schema TRIGGERS DATABASE_COLLATION 22 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
@@ -10296,7 +10055,7 @@ NULL information_schema USER_PRIVILEGES IS_GRANTABLE 4 NO varchar 3 9 NULL NULL
NULL information_schema VIEWS TABLE_CATALOG 1 NULL YES varchar 4096 12288 NULL NULL utf8 utf8_general_ci varchar(4096) select
NULL information_schema VIEWS TABLE_SCHEMA 2 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema VIEWS TABLE_NAME 3 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
-NULL information_schema VIEWS VIEW_DEFINITION 4 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema VIEWS VIEW_DEFINITION 4 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema VIEWS CHECK_OPTION 5 NO varchar 8 24 NULL NULL utf8 utf8_general_ci varchar(8) select
NULL information_schema VIEWS IS_UPDATABLE 6 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema VIEWS DEFINER 7 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
@@ -10845,7 +10604,7 @@ NULL information_schema COLUMNS NUMERIC_PRECISION 11 NULL YES bigint NULL NULL 1
NULL information_schema COLUMNS NUMERIC_SCALE 12 NULL YES bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned select
NULL information_schema COLUMNS CHARACTER_SET_NAME 13 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema COLUMNS COLLATION_NAME 14 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
-NULL information_schema COLUMNS COLUMN_TYPE 15 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema COLUMNS COLUMN_TYPE 15 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema COLUMNS COLUMN_KEY 16 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema COLUMNS EXTRA 17 NO varchar 20 60 NULL NULL utf8 utf8_general_ci varchar(20) select
NULL information_schema COLUMNS PRIVILEGES 18 NO varchar 80 240 NULL NULL utf8 utf8_general_ci varchar(80) select
@@ -10869,12 +10628,12 @@ NULL information_schema EVENTS EVENT_NAME 3 NO varchar 64 192 NULL NULL utf8 ut
NULL information_schema EVENTS DEFINER 4 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
NULL information_schema EVENTS TIME_ZONE 5 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema EVENTS EVENT_BODY 6 NO varchar 8 24 NULL NULL utf8 utf8_general_ci varchar(8) select
-NULL information_schema EVENTS EVENT_DEFINITION 7 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema EVENTS EVENT_DEFINITION 7 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema EVENTS EVENT_TYPE 8 NO varchar 9 27 NULL NULL utf8 utf8_general_ci varchar(9) select
NULL information_schema EVENTS EXECUTE_AT 9 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS INTERVAL_VALUE 10 NULL YES varchar 256 768 NULL NULL utf8 utf8_general_ci varchar(256) select
NULL information_schema EVENTS INTERVAL_FIELD 11 NULL YES varchar 18 54 NULL NULL utf8 utf8_general_ci varchar(18) select
-NULL information_schema EVENTS SQL_MODE 12 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema EVENTS SQL_MODE 12 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema EVENTS STARTS 13 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS ENDS 14 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS STATUS 15 NO varchar 18 54 NULL NULL utf8 utf8_general_ci varchar(18) select
@@ -11012,7 +10771,7 @@ NULL information_schema ROUTINES SQL_PATH 14 NULL YES varchar 64 192 NULL NULL u
NULL information_schema ROUTINES SECURITY_TYPE 15 NO varchar 7 21 NULL NULL utf8 utf8_general_ci varchar(7) select
NULL information_schema ROUTINES CREATED 16 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema ROUTINES LAST_ALTERED 17 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime select
-NULL information_schema ROUTINES SQL_MODE 18 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema ROUTINES SQL_MODE 18 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema ROUTINES ROUTINE_COMMENT 19 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema ROUTINES DEFINER 20 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
NULL information_schema ROUTINES CHARACTER_SET_CLIENT 21 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
@@ -11089,7 +10848,7 @@ NULL information_schema TRIGGERS EVENT_OBJECT_SCHEMA 6 NO varchar 64 192 NULL N
NULL information_schema TRIGGERS EVENT_OBJECT_TABLE 7 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema TRIGGERS ACTION_ORDER 8 0 NO bigint NULL NULL 19 0 NULL NULL bigint(4) select
NULL information_schema TRIGGERS ACTION_CONDITION 9 NULL YES longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
-NULL information_schema TRIGGERS ACTION_STATEMENT 10 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS ACTION_STATEMENT 10 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema TRIGGERS ACTION_ORIENTATION 11 NO varchar 9 27 NULL NULL utf8 utf8_general_ci varchar(9) select
NULL information_schema TRIGGERS ACTION_TIMING 12 NO varchar 6 18 NULL NULL utf8 utf8_general_ci varchar(6) select
NULL information_schema TRIGGERS ACTION_REFERENCE_OLD_TABLE 13 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
@@ -11097,8 +10856,8 @@ NULL information_schema TRIGGERS ACTION_REFERENCE_NEW_TABLE 14 NULL YES varchar
NULL information_schema TRIGGERS ACTION_REFERENCE_OLD_ROW 15 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema TRIGGERS ACTION_REFERENCE_NEW_ROW 16 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema TRIGGERS CREATED 17 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
-NULL information_schema TRIGGERS SQL_MODE 18 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
-NULL information_schema TRIGGERS DEFINER 19 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS SQL_MODE 18 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS DEFINER 19 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema TRIGGERS CHARACTER_SET_CLIENT 20 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
NULL information_schema TRIGGERS COLLATION_CONNECTION 21 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
NULL information_schema TRIGGERS DATABASE_COLLATION 22 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
@@ -11109,7 +10868,7 @@ NULL information_schema USER_PRIVILEGES IS_GRANTABLE 4 NO varchar 3 9 NULL NULL
NULL information_schema VIEWS TABLE_CATALOG 1 NULL YES varchar 4096 12288 NULL NULL utf8 utf8_general_ci varchar(4096) select
NULL information_schema VIEWS TABLE_SCHEMA 2 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema VIEWS TABLE_NAME 3 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
-NULL information_schema VIEWS VIEW_DEFINITION 4 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema VIEWS VIEW_DEFINITION 4 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema VIEWS CHECK_OPTION 5 NO varchar 8 24 NULL NULL utf8 utf8_general_ci varchar(8) select
NULL information_schema VIEWS IS_UPDATABLE 6 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema VIEWS DEFINER 7 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
@@ -11434,7 +11193,7 @@ NULL information_schema COLUMNS NUMERIC_PRECISION 11 NULL YES bigint NULL NULL 1
NULL information_schema COLUMNS NUMERIC_SCALE 12 NULL YES bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned select
NULL information_schema COLUMNS CHARACTER_SET_NAME 13 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema COLUMNS COLLATION_NAME 14 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
-NULL information_schema COLUMNS COLUMN_TYPE 15 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema COLUMNS COLUMN_TYPE 15 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema COLUMNS COLUMN_KEY 16 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema COLUMNS EXTRA 17 NO varchar 20 60 NULL NULL utf8 utf8_general_ci varchar(20) select
NULL information_schema COLUMNS PRIVILEGES 18 NO varchar 80 240 NULL NULL utf8 utf8_general_ci varchar(80) select
@@ -11458,12 +11217,12 @@ NULL information_schema EVENTS EVENT_NAME 3 NO varchar 64 192 NULL NULL utf8 ut
NULL information_schema EVENTS DEFINER 4 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
NULL information_schema EVENTS TIME_ZONE 5 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema EVENTS EVENT_BODY 6 NO varchar 8 24 NULL NULL utf8 utf8_general_ci varchar(8) select
-NULL information_schema EVENTS EVENT_DEFINITION 7 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema EVENTS EVENT_DEFINITION 7 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema EVENTS EVENT_TYPE 8 NO varchar 9 27 NULL NULL utf8 utf8_general_ci varchar(9) select
NULL information_schema EVENTS EXECUTE_AT 9 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS INTERVAL_VALUE 10 NULL YES varchar 256 768 NULL NULL utf8 utf8_general_ci varchar(256) select
NULL information_schema EVENTS INTERVAL_FIELD 11 NULL YES varchar 18 54 NULL NULL utf8 utf8_general_ci varchar(18) select
-NULL information_schema EVENTS SQL_MODE 12 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema EVENTS SQL_MODE 12 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema EVENTS STARTS 13 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS ENDS 14 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema EVENTS STATUS 15 NO varchar 18 54 NULL NULL utf8 utf8_general_ci varchar(18) select
@@ -11601,7 +11360,7 @@ NULL information_schema ROUTINES SQL_PATH 14 NULL YES varchar 64 192 NULL NULL u
NULL information_schema ROUTINES SECURITY_TYPE 15 NO varchar 7 21 NULL NULL utf8 utf8_general_ci varchar(7) select
NULL information_schema ROUTINES CREATED 16 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema ROUTINES LAST_ALTERED 17 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime select
-NULL information_schema ROUTINES SQL_MODE 18 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema ROUTINES SQL_MODE 18 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema ROUTINES ROUTINE_COMMENT 19 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema ROUTINES DEFINER 20 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
NULL information_schema ROUTINES CHARACTER_SET_CLIENT 21 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
@@ -11678,7 +11437,7 @@ NULL information_schema TRIGGERS EVENT_OBJECT_SCHEMA 6 NO varchar 64 192 NULL N
NULL information_schema TRIGGERS EVENT_OBJECT_TABLE 7 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema TRIGGERS ACTION_ORDER 8 0 NO bigint NULL NULL 19 0 NULL NULL bigint(4) select
NULL information_schema TRIGGERS ACTION_CONDITION 9 NULL YES longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
-NULL information_schema TRIGGERS ACTION_STATEMENT 10 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS ACTION_STATEMENT 10 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema TRIGGERS ACTION_ORIENTATION 11 NO varchar 9 27 NULL NULL utf8 utf8_general_ci varchar(9) select
NULL information_schema TRIGGERS ACTION_TIMING 12 NO varchar 6 18 NULL NULL utf8 utf8_general_ci varchar(6) select
NULL information_schema TRIGGERS ACTION_REFERENCE_OLD_TABLE 13 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
@@ -11686,8 +11445,8 @@ NULL information_schema TRIGGERS ACTION_REFERENCE_NEW_TABLE 14 NULL YES varchar
NULL information_schema TRIGGERS ACTION_REFERENCE_OLD_ROW 15 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema TRIGGERS ACTION_REFERENCE_NEW_ROW 16 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema TRIGGERS CREATED 17 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
-NULL information_schema TRIGGERS SQL_MODE 18 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
-NULL information_schema TRIGGERS DEFINER 19 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS SQL_MODE 18 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema TRIGGERS DEFINER 19 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema TRIGGERS CHARACTER_SET_CLIENT 20 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
NULL information_schema TRIGGERS COLLATION_CONNECTION 21 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
NULL information_schema TRIGGERS DATABASE_COLLATION 22 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
@@ -11698,7 +11457,7 @@ NULL information_schema USER_PRIVILEGES IS_GRANTABLE 4 NO varchar 3 9 NULL NULL
NULL information_schema VIEWS TABLE_CATALOG 1 NULL YES varchar 4096 12288 NULL NULL utf8 utf8_general_ci varchar(4096) select
NULL information_schema VIEWS TABLE_SCHEMA 2 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema VIEWS TABLE_NAME 3 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
-NULL information_schema VIEWS VIEW_DEFINITION 4 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema VIEWS VIEW_DEFINITION 4 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema VIEWS CHECK_OPTION 5 NO varchar 8 24 NULL NULL utf8 utf8_general_ci varchar(8) select
NULL information_schema VIEWS IS_UPDATABLE 6 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema VIEWS DEFINER 7 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
@@ -13076,7 +12835,7 @@ SQL_PATH varchar(64) YES NULL
SECURITY_TYPE varchar(7) NO
CREATED datetime NO 0000-00-00 00:00:00
LAST_ALTERED datetime NO 0000-00-00 00:00:00
-SQL_MODE longtext NO
+SQL_MODE longtext NO NULL
ROUTINE_COMMENT varchar(64) NO
DEFINER varchar(77) NO
CHARACTER_SET_CLIENT varchar(32) NO
@@ -13137,7 +12896,7 @@ NULL information_schema routines SQL_PATH 14 NULL YES varchar 64 192 NULL NULL u
NULL information_schema routines SECURITY_TYPE 15 NO varchar 7 21 NULL NULL utf8 utf8_general_ci varchar(7) select
NULL information_schema routines CREATED 16 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime select
NULL information_schema routines LAST_ALTERED 17 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime select
-NULL information_schema routines SQL_MODE 18 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema routines SQL_MODE 18 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema routines ROUTINE_COMMENT 19 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema routines DEFINER 20 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
NULL information_schema routines CHARACTER_SET_CLIENT 21 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
@@ -13845,15 +13604,15 @@ NULL db_datadict tb1 BASE TABLE MyISAM 10 Fixed 0 #ARL# #DL# #MDL# #IL# #DF# NUL
NULL db_datadict tb2 BASE TABLE MyISAM 10 Fixed 0 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
NULL db_datadict tb3 BASE TABLE MyISAM 10 Dynamic 0 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
NULL db_datadict v3 VIEW NULL NULL NULL NULL #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss NULL NULL NULL VIEW
-NULL test t1 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
-NULL test t10 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
-NULL test t11 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
-NULL test t2 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
-NULL test t3 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
-NULL test t4 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
-NULL test t7 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
-NULL test t8 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
-NULL test t9 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
+NULL test t1 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL number_of_replicas: 2
+NULL test t10 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL number_of_replicas: 2
+NULL test t11 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL number_of_replicas: 2
+NULL test t2 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL number_of_replicas: 2
+NULL test t3 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL number_of_replicas: 2
+NULL test t4 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL number_of_replicas: 2
+NULL test t7 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL number_of_replicas: 2
+NULL test t8 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL number_of_replicas: 2
+NULL test t9 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL number_of_replicas: 2
NULL test tb1 BASE TABLE MyISAM 10 Dynamic 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
NULL test tb2 BASE TABLE MyISAM 10 Dynamic 54 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
NULL test tb3 BASE TABLE MyISAM 10 Dynamic 11 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
@@ -13894,15 +13653,15 @@ WHERE NOT( table_schema = 'information_schema');
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE ENGINE VERSION ROW_FORMAT TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE AUTO_INCREMENT CREATE_TIME UPDATE_TIME CHECK_TIME TABLE_COLLATION CHECKSUM CREATE_OPTIONS TABLE_COMMENT
NULL db_datadict tb1 BASE TABLE MyISAM 10 Fixed 0 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
NULL db_datadict tb3 BASE TABLE MyISAM 10 Dynamic 0 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
-NULL test t1 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
-NULL test t10 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
-NULL test t11 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
-NULL test t2 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
-NULL test t3 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
-NULL test t4 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
-NULL test t7 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
-NULL test t8 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
-NULL test t9 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
+NULL test t1 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL number_of_replicas: 2
+NULL test t10 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL number_of_replicas: 2
+NULL test t11 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL number_of_replicas: 2
+NULL test t2 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL number_of_replicas: 2
+NULL test t3 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL number_of_replicas: 2
+NULL test t4 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL number_of_replicas: 2
+NULL test t7 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL number_of_replicas: 2
+NULL test t8 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL number_of_replicas: 2
+NULL test t9 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL number_of_replicas: 2
NULL test tb1 BASE TABLE MyISAM 10 Dynamic 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
NULL test tb2 BASE TABLE MyISAM 10 Dynamic 54 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
NULL test tb3 BASE TABLE MyISAM 10 Dynamic 11 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
@@ -13943,15 +13702,15 @@ WHERE NOT( table_schema = 'information_schema');
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE ENGINE VERSION ROW_FORMAT TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE AUTO_INCREMENT CREATE_TIME UPDATE_TIME CHECK_TIME TABLE_COLLATION CHECKSUM CREATE_OPTIONS TABLE_COMMENT
NULL db_datadict tb3 BASE TABLE MyISAM 10 Dynamic 0 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
NULL db_datadict v3 VIEW NULL NULL NULL NULL #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss NULL NULL NULL VIEW
-NULL test t1 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
-NULL test t10 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
-NULL test t11 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
-NULL test t2 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
-NULL test t3 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
-NULL test t4 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
-NULL test t7 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
-NULL test t8 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
-NULL test t9 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
+NULL test t1 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL number_of_replicas: 2
+NULL test t10 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL number_of_replicas: 2
+NULL test t11 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL number_of_replicas: 2
+NULL test t2 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL number_of_replicas: 2
+NULL test t3 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL number_of_replicas: 2
+NULL test t4 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL number_of_replicas: 2
+NULL test t7 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL number_of_replicas: 2
+NULL test t8 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL number_of_replicas: 2
+NULL test t9 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL number_of_replicas: 2
NULL test tb1 BASE TABLE MyISAM 10 Dynamic 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
NULL test tb2 BASE TABLE MyISAM 10 Dynamic 54 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
NULL test tb3 BASE TABLE MyISAM 10 Dynamic 11 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
@@ -13989,7 +13748,7 @@ NULL information_schema TRIGGERS SYSTEM VIEW MyISAM 10 Dynamic NULL #ARL# #DL# #
NULL information_schema USER_PRIVILEGES SYSTEM VIEW MEMORY 10 Fixed NULL #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_general_ci NULL #CO#
NULL information_schema VIEWS SYSTEM VIEW MyISAM 10 Dynamic NULL #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_general_ci NULL #CO#
SELECT * FROM information_schema.tables
-WHERE NOT( table_schema = 'information_schema');
+WHERE NOT( table_schema = 'information_schema') AND NOT (table_schema = 'mysql' AND table_name LIKE 'help_%');
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE ENGINE VERSION ROW_FORMAT TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE AUTO_INCREMENT CREATE_TIME UPDATE_TIME CHECK_TIME TABLE_COLLATION CHECKSUM CREATE_OPTIONS TABLE_COMMENT
NULL db_datadict tb1 BASE TABLE MyISAM 10 Fixed 0 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
NULL db_datadict tb2 BASE TABLE MyISAM 10 Fixed 0 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
@@ -14001,10 +13760,6 @@ NULL mysql db BASE TABLE MyISAM 10 Fixed 3 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-
NULL mysql event BASE TABLE MyISAM 10 Dynamic 0 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_general_ci NULL Events
NULL mysql func BASE TABLE MyISAM 10 Fixed 0 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_bin NULL User defined functions
NULL mysql general_log BASE TABLE CSV 10 Dynamic 1 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_general_ci NULL General log
-NULL mysql help_category BASE TABLE MyISAM 10 Fixed 37 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_general_ci NULL help categories
-NULL mysql help_keyword BASE TABLE MyISAM 10 Fixed 424 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_general_ci NULL help keywords
-NULL mysql help_relation BASE TABLE MyISAM 10 Fixed 901 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_general_ci NULL keyword-topic relation
-NULL mysql help_topic BASE TABLE MyISAM 10 Dynamic 479 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_general_ci NULL help topics
NULL mysql host BASE TABLE MyISAM 10 Fixed 0 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_bin NULL Host privileges; Merged with database privileges
NULL mysql ndb_apply_status BASE TABLE ndbcluster 10 Dynamic 0 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
NULL mysql ndb_binlog_index BASE TABLE MyISAM 10 Dynamic 0 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
@@ -14019,20 +13774,20 @@ NULL mysql time_zone_leap_second BASE TABLE MyISAM 10 Fixed 22 #ARL# #DL# #MDL#
NULL mysql time_zone_name BASE TABLE MyISAM 10 Fixed 6 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_general_ci NULL Time zone names
NULL mysql time_zone_transition BASE TABLE MyISAM 10 Fixed 393 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_general_ci NULL Time zone transitions
NULL mysql time_zone_transition_type BASE TABLE MyISAM 10 Fixed 31 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss utf8_general_ci NULL Time zone transition types
-NULL test t1 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
-NULL test t10 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
-NULL test t11 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
-NULL test t2 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
-NULL test t3 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
-NULL test t4 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
-NULL test t7 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
-NULL test t8 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
-NULL test t9 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
+NULL test t1 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL number_of_replicas: 2
+NULL test t10 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL number_of_replicas: 2
+NULL test t11 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL number_of_replicas: 2
+NULL test t2 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL number_of_replicas: 2
+NULL test t3 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL number_of_replicas: 2
+NULL test t4 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL number_of_replicas: 2
+NULL test t7 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL number_of_replicas: 2
+NULL test t8 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL number_of_replicas: 2
+NULL test t9 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL number_of_replicas: 2
NULL test tb1 BASE TABLE MyISAM 10 Dynamic 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
NULL test tb2 BASE TABLE MyISAM 10 Dynamic 54 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
NULL test tb3 BASE TABLE MyISAM 10 Dynamic 11 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
NULL test tb4 BASE TABLE MyISAM 10 Dynamic 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
-NULL test4 t6 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL
+NULL test4 t6 BASE TABLE ndbcluster 10 Fixed 10 #ARL# #DL# #MDL# #IL# #DF# NULL YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss YYYY-MM-DD hh:mm:ss latin1_swedish_ci NULL number_of_replicas: 2
DROP USER 'user_1'@'localhost';
DROP USER 'user_2'@'localhost';
DROP USER 'user_3'@'localhost';
@@ -14050,7 +13805,7 @@ Field Type Null Key Default Extra
TABLE_CATALOG varchar(4096) YES NULL
TABLE_SCHEMA varchar(64) NO
TABLE_NAME varchar(64) NO
-VIEW_DEFINITION longtext NO
+VIEW_DEFINITION longtext NO NULL
CHECK_OPTION varchar(8) NO
IS_UPDATABLE varchar(3) NO
DEFINER varchar(77) NO
@@ -14085,7 +13840,7 @@ TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION COLUMN_DEFAUL
NULL information_schema views TABLE_CATALOG 1 NULL YES varchar 4096 12288 NULL NULL utf8 utf8_general_ci varchar(4096) select
NULL information_schema views TABLE_SCHEMA 2 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema views TABLE_NAME 3 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
-NULL information_schema views VIEW_DEFINITION 4 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema views VIEW_DEFINITION 4 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema views CHECK_OPTION 5 NO varchar 8 24 NULL NULL utf8 utf8_general_ci varchar(8) select
NULL information_schema views IS_UPDATABLE 6 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema views DEFINER 7 NO varchar 77 231 NULL NULL utf8 utf8_general_ci varchar(77) select
@@ -14232,7 +13987,8 @@ TABLE_CATALOG TABLE_SCHEMA TABLE_NAME NON_UNIQUE INDEX_SCHEMA INDEX_NAME SEQ_IN_
root@localhost db_datadict_2
REVOKE SELECT ON db_datadict.tb_6_401402_1 FROM 'user_1'@'localhost';
-SELECT * FROM information_schema.statistics;
+SELECT * FROM information_schema.statistics
+WHERE NOT (table_schema = 'mysql' AND table_name LIKE 'help_%');
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME NON_UNIQUE INDEX_SCHEMA INDEX_NAME SEQ_IN_INDEX COLUMN_NAME COLLATION CARDINALITY SUB_PART PACKED NULLABLE INDEX_TYPE COMMENT
NULL db_datadict tb_6_401402_1 0 db_datadict PRIMARY 1 f1 A 0 NULL NULL BTREE
NULL db_datadict tb_6_401402_1 1 db_datadict f2_ind 1 f2 A NULL NULL NULL YES BTREE
@@ -14256,14 +14012,6 @@ NULL mysql db 1 mysql User 1 User A 1 NULL NULL BTREE
NULL mysql event 0 mysql PRIMARY 1 db A NULL NULL NULL BTREE
NULL mysql event 0 mysql PRIMARY 2 name A 0 NULL NULL BTREE
NULL mysql func 0 mysql PRIMARY 1 name A 0 NULL NULL BTREE
-NULL mysql help_category 0 mysql PRIMARY 1 help_category_id A 37 NULL NULL BTREE
-NULL mysql help_category 0 mysql name 1 name A 37 NULL NULL BTREE
-NULL mysql help_keyword 0 mysql PRIMARY 1 help_keyword_id A 424 NULL NULL BTREE
-NULL mysql help_keyword 0 mysql name 1 name A 424 NULL NULL BTREE
-NULL mysql help_relation 0 mysql PRIMARY 1 help_keyword_id A NULL NULL NULL BTREE
-NULL mysql help_relation 0 mysql PRIMARY 2 help_topic_id A 901 NULL NULL BTREE
-NULL mysql help_topic 0 mysql PRIMARY 1 help_topic_id A 479 NULL NULL BTREE
-NULL mysql help_topic 0 mysql name 1 name A 479 NULL NULL BTREE
NULL mysql host 0 mysql PRIMARY 1 Host A NULL NULL NULL BTREE
NULL mysql host 0 mysql PRIMARY 2 Db A 0 NULL NULL BTREE
NULL mysql ndb_apply_status 0 mysql PRIMARY 1 server_id NULL 0 NULL NULL HASH
@@ -14866,7 +14614,7 @@ EVENT_OBJECT_SCHEMA varchar(64) NO
EVENT_OBJECT_TABLE varchar(64) NO
ACTION_ORDER bigint(4) NO 0
ACTION_CONDITION longtext YES NULL
-ACTION_STATEMENT longtext NO
+ACTION_STATEMENT longtext NO NULL
ACTION_ORIENTATION varchar(9) NO
ACTION_TIMING varchar(6) NO
ACTION_REFERENCE_OLD_TABLE varchar(64) YES NULL
@@ -14874,8 +14622,8 @@ ACTION_REFERENCE_NEW_TABLE varchar(64) YES NULL
ACTION_REFERENCE_OLD_ROW varchar(3) NO
ACTION_REFERENCE_NEW_ROW varchar(3) NO
CREATED datetime YES NULL
-SQL_MODE longtext NO
-DEFINER longtext NO
+SQL_MODE longtext NO NULL
+DEFINER longtext NO NULL
CHARACTER_SET_CLIENT varchar(32) NO
COLLATION_CONNECTION varchar(32) NO
DATABASE_COLLATION varchar(32) NO
@@ -14925,7 +14673,7 @@ NULL information_schema triggers EVENT_OBJECT_SCHEMA 6 NO varchar 64 192 NULL N
NULL information_schema triggers EVENT_OBJECT_TABLE 7 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
NULL information_schema triggers ACTION_ORDER 8 0 NO bigint NULL NULL 19 0 NULL NULL bigint(4) select
NULL information_schema triggers ACTION_CONDITION 9 NULL YES longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
-NULL information_schema triggers ACTION_STATEMENT 10 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema triggers ACTION_STATEMENT 10 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema triggers ACTION_ORIENTATION 11 NO varchar 9 27 NULL NULL utf8 utf8_general_ci varchar(9) select
NULL information_schema triggers ACTION_TIMING 12 NO varchar 6 18 NULL NULL utf8 utf8_general_ci varchar(6) select
NULL information_schema triggers ACTION_REFERENCE_OLD_TABLE 13 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
@@ -14933,8 +14681,8 @@ NULL information_schema triggers ACTION_REFERENCE_NEW_TABLE 14 NULL YES varchar
NULL information_schema triggers ACTION_REFERENCE_OLD_ROW 15 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema triggers ACTION_REFERENCE_NEW_ROW 16 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
NULL information_schema triggers CREATED 17 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select
-NULL information_schema triggers SQL_MODE 18 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
-NULL information_schema triggers DEFINER 19 NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema triggers SQL_MODE 18 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
+NULL information_schema triggers DEFINER 19 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
NULL information_schema triggers CHARACTER_SET_CLIENT 20 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
NULL information_schema triggers COLLATION_CONNECTION 21 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
NULL information_schema triggers DATABASE_COLLATION 22 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
diff --git a/mysql-test/suite/funcs_1/r/ndb_cursors.result b/mysql-test/suite/funcs_1/r/ndb_cursors.result
index cf65b615add..ac1eb46e974 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 1475 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK'
+Error 1478 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 02ef728fad5..14568643665 100644
--- a/mysql-test/suite/funcs_1/r/ndb_func_view.result
+++ b/mysql-test/suite/funcs_1/r/ndb_func_view.result
@@ -1,7 +1,3 @@
-
-! Attention: The file with the expected results suffers from
-Bug#10713: mysqldump includes database in create view and referenced tables
---------------------------------------------------------------------------------
DROP TABLE IF EXISTS t1_selects, t1_modes, t1_values;
DROP VIEW IF EXISTS v1;
CREATE TABLE t1_values
@@ -89,6 +85,9 @@ INSERT INTO t1_values SET select_id = @select_id,
my_bigint = 4;
INSERT INTO t1_values SET select_id = @select_id,
my_bigint = -25;
+##### 1.1.1. CAST --> BINARY
+##### 1.1.2. CAST --> CHAR
+##### 1.1.3. CAST --> DATE
INSERT INTO t1_values SET select_id = @select_id,
my_char_30 = '2005-06-27';
INSERT INTO t1_values SET select_id = @select_id,
@@ -101,6 +100,7 @@ INSERT INTO t1_values SET select_id = @select_id,
my_bigint = 20050627;
INSERT INTO t1_values SET select_id = @select_id,
my_double = +20.050627E+6;
+##### 1.1.4. CAST --> DATETIME
INSERT INTO t1_values SET select_id = @select_id,
my_char_30 = '2005-06-27 17:58';
INSERT INTO t1_values SET select_id = @select_id,
@@ -113,6 +113,7 @@ INSERT INTO t1_values SET select_id = @select_id,
my_bigint = 200506271758;
INSERT INTO t1_values SET select_id = @select_id,
my_double = +0.0200506271758E+13;
+##### 1.1.5. CAST --> TIME
INSERT INTO t1_values SET select_id = @select_id,
my_char_30 = '1 17:58';
INSERT INTO t1_values SET select_id = @select_id,
@@ -125,6 +126,7 @@ INSERT INTO t1_values SET select_id = @select_id,
my_bigint = 1758;
INSERT INTO t1_values SET select_id = @select_id,
my_double = +1.758E+3;
+##### 1.1.6. CAST --> DECIMAL
INSERT INTO t1_values SET select_id = @select_id,
my_char_30 = '-3333.3333';
INSERT INTO t1_values SET select_id = @select_id,
@@ -135,11 +137,13 @@ INSERT INTO t1_values SET select_id = @select_id,
my_varbinary_1000 = '-3333.3333';
INSERT INTO t1_values SET select_id = @select_id,
my_double = -0.33333333E+4;
+##### 1.1.7. CAST --> SIGNED INTEGER
"Attention: CAST --> SIGNED INTEGER
Bug#5913 Traditional mode: BIGINT range not correctly delimited
Status: To be fixed later"
--------------------------------------------------------------------------------
+##### 1.1.8. CAST --> UNSIGNED INTEGER
"Attention: CAST --> UNSIGNED INTEGER
The file with expected results suffers from Bug 5913"
@@ -184,14 +188,12 @@ SET @my_select =
'SELECT LEFT(my_binary_30, 2), my_binary_30, id FROM t1_values';
SET @my_select =
'SELECT LEFT(my_varbinary_1000, 2), my_varbinary_1000, id FROM t1_values';
-
-"Attention: LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', <numeric column>)
- The file with expected results suffers from Bug 10963"
- and the testcases with length = BIGINT or DOUBLE column are deactivated,
-because there are 32/64 Bit differences
---------------------------------------------------------------------------------
+SET @my_select =
+'SELECT LEFT(''AaBbCcDdEeFfGgHhIiJjÄäÜüÖö'', my_bigint), my_bigint, id FROM t1_values';
SET @my_select =
'SELECT LEFT(''AaBbCcDdEeFfGgHhIiJjÄäÜüÖö'', my_decimal), my_decimal, id FROM t1_values';
+SET @my_select =
+'SELECT LEFT(''AaBbCcDdEeFfGgHhIiJjÄäÜüÖö'', my_double), my_double, id FROM t1_values';
SET @my_select = 'SELECT LENGTH(my_char_30),
my_char_30, id FROM t1_values';
SET @my_select = 'SELECT LENGTH(my_varchar_1000),
@@ -284,19 +286,19 @@ SET sql_mode = '';
--------------------------------------------------------------------------------
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;
+WHERE select_id = 193 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 193 OR select_id IS NULL) order by id;
DROP VIEW v1;
CREATE VIEW v1 AS SELECT CONCAT('A',my_char_30), my_char_30, id FROM t1_values;
SELECT CONCAT('A',my_char_30), my_char_30, id FROM t1_values
-WHERE select_id = 189 OR select_id IS NULL order by id;
+WHERE select_id = 192 OR select_id IS NULL order by id;
CONCAT('A',my_char_30) my_char_30 id
NULL NULL 1
A 2
@@ -308,7 +310,7 @@ 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;
+WHERE select_id = 192 OR select_id IS NULL) order by id;
CONCAT('A',my_char_30) my_char_30 id
NULL NULL 1
A 2
@@ -322,13 +324,13 @@ CREATE VIEW v1 AS SELECT LTRIM(my_varbinary_1000),
my_varbinary_1000, id FROM t1_values;
SELECT LTRIM(my_varbinary_1000),
my_varbinary_1000, id FROM t1_values
-WHERE select_id = 188 OR select_id IS NULL order by id;
+WHERE select_id = 191 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 191 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -336,13 +338,13 @@ CREATE VIEW v1 AS SELECT LTRIM(my_binary_30),
my_binary_30, id FROM t1_values;
SELECT LTRIM(my_binary_30),
my_binary_30, id FROM t1_values
-WHERE select_id = 187 OR select_id IS NULL order by id;
+WHERE select_id = 190 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 190 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -350,13 +352,13 @@ CREATE VIEW v1 AS SELECT LTRIM(my_varchar_1000),
my_varchar_1000, id FROM t1_values;
SELECT LTRIM(my_varchar_1000),
my_varchar_1000, id FROM t1_values
-WHERE select_id = 186 OR select_id IS NULL order by id;
+WHERE select_id = 189 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 189 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -364,13 +366,13 @@ CREATE VIEW v1 AS SELECT LTRIM(my_char_30),
my_char_30, id FROM t1_values;
SELECT LTRIM(my_char_30),
my_char_30, id FROM t1_values
-WHERE select_id = 185 OR select_id IS NULL order by id;
+WHERE select_id = 188 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 188 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -378,13 +380,13 @@ CREATE VIEW v1 AS SELECT LOWER(my_varbinary_1000),
my_varbinary_1000, id FROM t1_values;
SELECT LOWER(my_varbinary_1000),
my_varbinary_1000, id FROM t1_values
-WHERE select_id = 184 OR select_id IS NULL order by id;
+WHERE select_id = 187 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 187 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -392,13 +394,13 @@ CREATE VIEW v1 AS SELECT LOWER(my_binary_30),
my_binary_30, id FROM t1_values;
SELECT LOWER(my_binary_30),
my_binary_30, id FROM t1_values
-WHERE select_id = 183 OR select_id IS NULL order by id;
+WHERE select_id = 186 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 186 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -406,13 +408,13 @@ CREATE VIEW v1 AS SELECT LOWER(my_varchar_1000),
my_varchar_1000, id FROM t1_values;
SELECT LOWER(my_varchar_1000),
my_varchar_1000, id FROM t1_values
-WHERE select_id = 182 OR select_id IS NULL order by id;
+WHERE select_id = 185 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 185 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -420,13 +422,13 @@ CREATE VIEW v1 AS SELECT LOWER(my_char_30),
my_char_30, id FROM t1_values;
SELECT LOWER(my_char_30),
my_char_30, id FROM t1_values
-WHERE select_id = 181 OR select_id IS NULL order by id;
+WHERE select_id = 184 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 184 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -434,13 +436,13 @@ CREATE VIEW v1 AS SELECT LOCATE('-', ' - -ABC', my_decimal),
my_decimal, id FROM t1_values;
SELECT LOCATE('-', ' - -ABC', my_decimal),
my_decimal, id FROM t1_values
-WHERE select_id = 180 OR select_id IS NULL order by id;
+WHERE select_id = 183 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 183 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -448,13 +450,13 @@ CREATE VIEW v1 AS SELECT LOCATE('-', ' - -ABC', my_double),
my_double, id FROM t1_values;
SELECT LOCATE('-', ' - -ABC', my_double),
my_double, id FROM t1_values
-WHERE select_id = 179 OR select_id IS NULL order by id;
+WHERE select_id = 182 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 182 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -462,13 +464,13 @@ CREATE VIEW v1 AS SELECT LOCATE('-', ' - -ABC', my_bigint),
my_bigint, id FROM t1_values;
SELECT LOCATE('-', ' - -ABC', my_bigint),
my_bigint, id FROM t1_values
-WHERE select_id = 178 OR select_id IS NULL order by id;
+WHERE select_id = 181 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 181 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -476,13 +478,13 @@ CREATE VIEW v1 AS SELECT LOCATE('-', my_varbinary_1000, 3),
my_varbinary_1000, id FROM t1_values;
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;
+WHERE select_id = 180 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 180 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -490,13 +492,13 @@ CREATE VIEW v1 AS SELECT LOCATE('-', my_binary_30, 3),
my_binary_30, id FROM t1_values;
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;
+WHERE select_id = 179 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 179 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -504,13 +506,13 @@ CREATE VIEW v1 AS SELECT LOCATE('-', my_varchar_1000, 3),
my_varchar_1000, id FROM t1_values;
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;
+WHERE select_id = 178 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 178 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -518,13 +520,13 @@ CREATE VIEW v1 AS SELECT LOCATE('-', my_char_30, 3),
my_char_30, id FROM t1_values;
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;
+WHERE select_id = 177 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 177 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -532,13 +534,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_varbinary_1000, my_binary_30 ),
my_varbinary_1000, my_binary_30 id FROM t1_values;
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;
+WHERE select_id = 176 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 176 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -546,13 +548,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_varbinary_1000, my_varchar_1000 ),
my_varbinary_1000, my_varchar_1000 id FROM t1_values;
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;
+WHERE select_id = 175 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 175 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -560,13 +562,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_varbinary_1000, my_char_30 ),
my_varbinary_1000, my_char_30 id FROM t1_values;
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;
+WHERE select_id = 174 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 174 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -574,13 +576,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_varbinary_1000, my_varbinary_1000 ),
my_varbinary_1000, id FROM t1_values;
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;
+WHERE select_id = 173 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 173 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -588,13 +590,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_binary_30, my_varbinary_1000 ),
my_binary_30, my_varbinary_1000 id FROM t1_values;
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;
+WHERE select_id = 172 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 172 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -602,13 +604,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_binary_30, my_varchar_1000 ),
my_binary_30, my_varchar_1000 id FROM t1_values;
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;
+WHERE select_id = 171 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 171 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -616,13 +618,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_binary_30, my_char_30 ),
my_binary_30, my_char_30 id FROM t1_values;
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;
+WHERE select_id = 170 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 170 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -630,13 +632,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_binary_30, my_binary_30 ),
my_binary_30, id FROM t1_values;
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;
+WHERE select_id = 169 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 169 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -644,13 +646,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_varchar_1000, my_varbinary_1000 ),
my_varchar_1000, my_varbinary_1000 id FROM t1_values;
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;
+WHERE select_id = 168 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 168 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -658,13 +660,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_varchar_1000, my_binary_30 ),
my_varchar_1000, my_binary_30 id FROM t1_values;
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;
+WHERE select_id = 167 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 167 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -672,13 +674,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_varchar_1000, my_char_30 ),
my_varchar_1000, my_char_30 id FROM t1_values;
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;
+WHERE select_id = 166 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 166 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -686,13 +688,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_varchar_1000, my_varchar_1000 ),
my_varchar_1000, id FROM t1_values;
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;
+WHERE select_id = 165 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 165 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -700,13 +702,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_char_30, my_varbinary_1000 ),
my_char_30, my_varbinary_1000 id FROM t1_values;
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;
+WHERE select_id = 164 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 164 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -714,13 +716,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_char_30, my_binary_30 ),
my_char_30, my_binary_30 id FROM t1_values;
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;
+WHERE select_id = 163 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 163 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -728,13 +730,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_char_30, my_varchar_1000 ),
my_char_30, my_varchar_1000 id FROM t1_values;
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;
+WHERE select_id = 162 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 162 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -742,13 +744,13 @@ CREATE VIEW v1 AS SELECT LOCATE(my_char_30, my_char_30 ),
my_char_30, id FROM t1_values;
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;
+WHERE select_id = 161 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 161 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -756,13 +758,13 @@ CREATE VIEW v1 AS SELECT LOCATE('char', my_varbinary_1000),
my_varbinary_1000, id FROM t1_values;
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;
+WHERE select_id = 160 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 160 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -770,13 +772,13 @@ CREATE VIEW v1 AS SELECT LOCATE('char', my_binary_30),
my_binary_30, id FROM t1_values;
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;
+WHERE select_id = 159 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 159 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -784,13 +786,13 @@ CREATE VIEW v1 AS SELECT LOCATE('char', my_varchar_1000),
my_varchar_1000, id FROM t1_values;
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;
+WHERE select_id = 158 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 158 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -798,19 +800,19 @@ CREATE VIEW v1 AS SELECT LOCATE('char', my_char_30),
my_char_30, id FROM t1_values;
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;
+WHERE select_id = 157 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 157 OR select_id IS NULL) order by id;
DROP VIEW v1;
CREATE VIEW v1 AS SELECT LOAD_FILE('../tmp/func_view.dat'), id FROM t1_values;
SELECT LOAD_FILE('../tmp/func_view.dat'), id FROM t1_values
-WHERE select_id = 153 OR select_id IS NULL order by id;
+WHERE select_id = 156 OR select_id IS NULL order by id;
LOAD_FILE('../tmp/func_view.dat') id
äÄ@
1
@@ -827,7 +829,7 @@ 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;
+WHERE select_id = 156 OR select_id IS NULL) order by id;
LOAD_FILE('../tmp/func_view.dat') id
äÄ@
1
@@ -846,13 +848,13 @@ CREATE VIEW v1 AS SELECT LENGTH(my_varbinary_1000),
my_varbinary_1000, id FROM t1_values;
SELECT LENGTH(my_varbinary_1000),
my_varbinary_1000, id FROM t1_values
-WHERE select_id = 152 OR select_id IS NULL order by id;
+WHERE select_id = 155 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 155 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -860,13 +862,13 @@ CREATE VIEW v1 AS SELECT LENGTH(my_binary_30),
my_binary_30, id FROM t1_values;
SELECT LENGTH(my_binary_30),
my_binary_30, id FROM t1_values
-WHERE select_id = 151 OR select_id IS NULL order by id;
+WHERE select_id = 154 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 154 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -874,13 +876,13 @@ CREATE VIEW v1 AS SELECT LENGTH(my_varchar_1000),
my_varchar_1000, id FROM t1_values;
SELECT LENGTH(my_varchar_1000),
my_varchar_1000, id FROM t1_values
-WHERE select_id = 150 OR select_id IS NULL order by id;
+WHERE select_id = 153 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 153 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -888,19 +890,49 @@ CREATE VIEW v1 AS SELECT LENGTH(my_char_30),
my_char_30, id FROM t1_values;
SELECT LENGTH(my_char_30),
my_char_30, id FROM t1_values
-WHERE select_id = 149 OR select_id IS NULL order by id;
+WHERE select_id = 152 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 152 OR select_id IS NULL) order by id;
+DROP VIEW v1;
+
+
+CREATE VIEW v1 AS SELECT LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_double), my_double, id FROM t1_values;
+SELECT LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_double), my_double, id FROM t1_values
+WHERE select_id = 151 OR select_id IS NULL order by id;
+LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_double) my_double id
+NULL NULL 1
+ -1.7976931348623e+308 2
+AaBbCcDdEeFfGgHhIiJjÄäÜüÖö 1.7976931348623e+308 3
+ 0 4
+ -1 5
+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 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_double`) AS `LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', 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 = 151 OR select_id IS NULL) order by id;
+LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_double) my_double id
+NULL NULL 1
+ -1.7976931348623e+308 2
+AaBbCcDdEeFfGgHhIiJjÄäÜüÖö 1.7976931348623e+308 3
+ 0 4
+ -1 5
+Warnings:
+Warning 1292 Truncated incorrect INTEGER value: '-1.7976931348623e+308'
+Warning 1292 Truncated incorrect INTEGER value: '1.7976931348623e+308'
DROP VIEW v1;
CREATE VIEW v1 AS SELECT LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_decimal), my_decimal, id FROM t1_values;
SELECT LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_decimal), my_decimal, id FROM t1_values
-WHERE select_id = 148 OR select_id IS NULL order by id;
+WHERE select_id = 150 OR select_id IS NULL order by id;
LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_decimal) my_decimal id
NULL NULL 1
-9999999999999999999999999999999999.999999999999999999999999999999 2
@@ -915,7 +947,7 @@ 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;
+WHERE select_id = 150 OR select_id IS NULL) order by id;
LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_decimal) my_decimal id
NULL NULL 1
-9999999999999999999999999999999999.999999999999999999999999999999 2
@@ -928,9 +960,33 @@ Error 1292 Truncated incorrect DECIMAL value: ''
DROP VIEW v1;
+CREATE VIEW v1 AS SELECT LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_bigint), my_bigint, id FROM t1_values;
+SELECT LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_bigint), my_bigint, id FROM t1_values
+WHERE select_id = 149 OR select_id IS NULL order by id;
+LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_bigint) my_bigint id
+NULL NULL 1
+ -9223372036854775808 2
+AaBbCcDdEeFfGgHhIiJjÄäÜüÖö 9223372036854775807 3
+ 0 4
+ -1 5
+SHOW CREATE VIEW v1;
+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_bigint`) AS `LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', 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 = 149 OR select_id IS NULL) order by id;
+LEFT('AaBbCcDdEeFfGgHhIiJjÄäÜüÖö', my_bigint) my_bigint id
+NULL NULL 1
+ -9223372036854775808 2
+AaBbCcDdEeFfGgHhIiJjÄäÜüÖö 9223372036854775807 3
+ 0 4
+ -1 5
+DROP VIEW v1;
+
+
CREATE VIEW v1 AS SELECT LEFT(my_varbinary_1000, 2), my_varbinary_1000, id FROM t1_values;
SELECT LEFT(my_varbinary_1000, 2), my_varbinary_1000, id FROM t1_values
-WHERE select_id = 147 OR select_id IS NULL order by id;
+WHERE select_id = 148 OR select_id IS NULL order by id;
LEFT(my_varbinary_1000, 2) my_varbinary_1000 id
NULL NULL 1
2
@@ -942,7 +998,7 @@ 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;
+WHERE select_id = 148 OR select_id IS NULL) order by id;
LEFT(my_varbinary_1000, 2) my_varbinary_1000 id
NULL NULL 1
2
@@ -954,7 +1010,7 @@ DROP VIEW v1;
CREATE VIEW v1 AS SELECT LEFT(my_binary_30, 2), my_binary_30, id FROM t1_values;
SELECT LEFT(my_binary_30, 2), my_binary_30, id FROM t1_values
-WHERE select_id = 146 OR select_id IS NULL order by id;
+WHERE select_id = 147 OR select_id IS NULL order by id;
LEFT(my_binary_30, 2) my_binary_30 id
NULL NULL 1
@@ -966,7 +1022,7 @@ 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;
+WHERE select_id = 147 OR select_id IS NULL) order by id;
LEFT(my_binary_30, 2) my_binary_30 id
NULL NULL 1
@@ -978,7 +1034,7 @@ DROP VIEW v1;
CREATE VIEW v1 AS SELECT LEFT(my_varchar_1000, 2), my_varchar_1000, id FROM t1_values;
SELECT LEFT(my_varchar_1000, 2), my_varchar_1000, id FROM t1_values
-WHERE select_id = 145 OR select_id IS NULL order by id;
+WHERE select_id = 146 OR select_id IS NULL order by id;
LEFT(my_varchar_1000, 2) my_varchar_1000 id
NULL NULL 1
2
@@ -990,7 +1046,7 @@ 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;
+WHERE select_id = 146 OR select_id IS NULL) order by id;
LEFT(my_varchar_1000, 2) my_varchar_1000 id
NULL NULL 1
2
@@ -1002,7 +1058,7 @@ DROP VIEW v1;
CREATE VIEW v1 AS SELECT LEFT(my_char_30, 2), my_char_30, id FROM t1_values;
SELECT LEFT(my_char_30, 2), my_char_30, id FROM t1_values
-WHERE select_id = 144 OR select_id IS NULL order by id;
+WHERE select_id = 145 OR select_id IS NULL order by id;
LEFT(my_char_30, 2) my_char_30 id
NULL NULL 1
2
@@ -1014,7 +1070,7 @@ 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;
+WHERE select_id = 145 OR select_id IS NULL) order by id;
LEFT(my_char_30, 2) my_char_30 id
NULL NULL 1
2
@@ -1028,13 +1084,13 @@ CREATE VIEW v1 AS SELECT LCASE(my_varchar_1000),
my_varchar_1000, id FROM t1_values;
SELECT LCASE(my_varchar_1000),
my_varchar_1000, id FROM t1_values
-WHERE select_id = 143 OR select_id IS NULL order by id;
+WHERE select_id = 144 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 144 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -1042,13 +1098,13 @@ CREATE VIEW v1 AS SELECT INSTR(my_char_30, 'char'),
my_char_30, id FROM t1_values;
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;
+WHERE select_id = 143 OR select_id IS NULL order by id;
SHOW CREATE VIEW v1;
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;
+WHERE select_id = 143 OR select_id IS NULL) order by id;
DROP VIEW v1;
@@ -1056,7 +1112,7 @@ CREATE VIEW v1 AS SELECT BIT_LENGTH(my_varbinary_1000),
my_varbinary_1000, id FROM t1_values;
SELECT BIT_LENGTH(my_varbinary_1000),
my_varbinary_1000, id FROM t1_values
-WHERE select_id = 141 OR select_id IS NULL order by id;
+WHERE select_id = 142 OR select_id IS NULL order by id;
BIT_LENGTH(my_varbinary_1000) my_varbinary_1000 id
NULL NULL 1
0 2
@@ -1068,7 +1124,7 @@ 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;
+WHERE select_id = 142 OR select_id IS NULL) order by id;
BIT_LENGTH(my_varbinary_1000) my_varbinary_1000 id
NULL NULL 1
0 2
@@ -1082,7 +1138,7 @@ CREATE VIEW v1 AS SELECT BIT_LENGTH(my_binary_30),
my_binary_30, id FROM t1_values;
SELECT BIT_LENGTH(my_binary_30),
my_binary_30, id FROM t1_values
-WHERE select_id = 140 OR select_id IS NULL order by id;
+WHERE select_id = 141 OR select_id IS NULL order by id;
BIT_LENGTH(my_binary_30) my_binary_30 id
NULL NULL 1
240
@@ -1094,7 +1150,7 @@ 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;
+WHERE select_id = 141 OR select_id IS NULL) order by id;
BIT_LENGTH(my_binary_30) my_binary_30 id
NULL NULL 1
240
@@ -1108,7 +1164,7 @@ CREATE VIEW v1 AS SELECT BIT_LENGTH(my_varchar_1000),
my_varchar_1000, id FROM t1_values;
SELECT BIT_LENGTH(my_varchar_1000),
my_varchar_1000, id FROM t1_values
-WHERE select_id = 139 OR select_id IS NULL order by id;
+WHERE select_id = 140 OR select_id IS NULL order by id;
BIT_LENGTH(my_varchar_1000) my_varchar_1000 id
NULL NULL 1
0 2
@@ -1120,7 +1176,7 @@ 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;
+WHERE select_id = 140 OR select_id IS NULL) order by id;
BIT_LENGTH(my_varchar_1000) my_varchar_1000 id
NULL NULL 1
0 2
@@ -1134,7 +1190,7 @@ CREATE VIEW v1 AS SELECT BIT_LENGTH(my_char_30),
my_char_30, id FROM t1_values;
SELECT BIT_LENGTH(my_char_30),
my_char_30, id FROM t1_values
-WHERE select_id = 138 OR select_id IS NULL order by id;
+WHERE select_id = 139 OR select_id IS NULL order by id;
BIT_LENGTH(my_char_30) my_char_30 id
NULL NULL 1
0 2
@@ -1146,7 +1202,7 @@ 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;
+WHERE select_id = 139 OR select_id IS NULL) order by id;
BIT_LENGTH(my_char_30) my_char_30 id
NULL NULL 1
0 2
@@ -1160,7 +1216,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_year,'IS_NULL'),
my_year, id FROM t1_values;
SELECT IFNULL(my_year,'IS_NULL'),
my_year, id FROM t1_values
-WHERE select_id = 137 OR select_id IS NULL order by id;
+WHERE select_id = 138 OR select_id IS NULL order by id;
IFNULL(my_year,'IS_NULL') my_year id
IS_NULL NULL 1
1901 1901 2
@@ -1172,7 +1228,7 @@ 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;
+WHERE select_id = 138 OR select_id IS NULL) order by id;
IFNULL(my_year,'IS_NULL') my_year id
IS_NULL NULL 1
1901 1901 2
@@ -1186,7 +1242,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_time,'IS_NULL'),
my_time, id FROM t1_values;
SELECT IFNULL(my_time,'IS_NULL'),
my_time, id FROM t1_values
-WHERE select_id = 136 OR select_id IS NULL order by id;
+WHERE select_id = 137 OR select_id IS NULL order by id;
IFNULL(my_time,'IS_NULL') my_time id
IS_NULL NULL 1
-838:59:59 -838:59:59 2
@@ -1198,7 +1254,7 @@ 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;
+WHERE select_id = 137 OR select_id IS NULL) order by id;
IFNULL(my_time,'IS_NULL') my_time id
IS_NULL NULL 1
-838:59:59 -838:59:59 2
@@ -1212,7 +1268,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_timestamp,'IS_NULL'),
my_timestamp, id FROM t1_values;
SELECT IFNULL(my_timestamp,'IS_NULL'),
my_timestamp, id FROM t1_values
-WHERE select_id = 135 OR select_id IS NULL order by id;
+WHERE select_id = 136 OR select_id IS NULL order by id;
IFNULL(my_timestamp,'IS_NULL') my_timestamp id
0000-00-00 00:00:00 0000-00-00 00:00:00 1
1970-01-01 03:00:01 1970-01-01 03:00:01 2
@@ -1224,7 +1280,7 @@ 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;
+WHERE select_id = 136 OR select_id IS NULL) order by id;
IFNULL(my_timestamp,'IS_NULL') my_timestamp id
0000-00-00 00:00:00 0000-00-00 00:00:00 1
1970-01-01 03:00:01 1970-01-01 03:00:01 2
@@ -1238,7 +1294,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_date,'IS_NULL'),
my_date, id FROM t1_values;
SELECT IFNULL(my_date,'IS_NULL'),
my_date, id FROM t1_values
-WHERE select_id = 134 OR select_id IS NULL order by id;
+WHERE select_id = 135 OR select_id IS NULL order by id;
IFNULL(my_date,'IS_NULL') my_date id
IS_NULL NULL 1
0001-01-01 0001-01-01 2
@@ -1250,7 +1306,7 @@ 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;
+WHERE select_id = 135 OR select_id IS NULL) order by id;
IFNULL(my_date,'IS_NULL') my_date id
IS_NULL NULL 1
0001-01-01 0001-01-01 2
@@ -1264,7 +1320,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_datetime,'IS_NULL'),
my_datetime, id FROM t1_values;
SELECT IFNULL(my_datetime,'IS_NULL'),
my_datetime, id FROM t1_values
-WHERE select_id = 133 OR select_id IS NULL order by id;
+WHERE select_id = 134 OR select_id IS NULL order by id;
IFNULL(my_datetime,'IS_NULL') my_datetime id
IS_NULL NULL 1
0001-01-01 00:00:00 0001-01-01 00:00:00 2
@@ -1276,7 +1332,7 @@ 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;
+WHERE select_id = 134 OR select_id IS NULL) order by id;
IFNULL(my_datetime,'IS_NULL') my_datetime id
IS_NULL NULL 1
0001-01-01 00:00:00 0001-01-01 00:00:00 2
@@ -1290,7 +1346,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_double,'IS_NULL'),
my_double, id FROM t1_values;
SELECT IFNULL(my_double,'IS_NULL'),
my_double, id FROM t1_values
-WHERE select_id = 132 OR select_id IS NULL order by id;
+WHERE select_id = 133 OR select_id IS NULL order by id;
IFNULL(my_double,'IS_NULL') my_double id
IS_NULL NULL 1
-1.7976931348623e+308 -1.7976931348623e+308 2
@@ -1302,7 +1358,7 @@ 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;
+WHERE select_id = 133 OR select_id IS NULL) order by id;
IFNULL(my_double,'IS_NULL') my_double id
IS_NULL NULL 1
-1.7976931348623e+308 -1.7976931348623e+308 2
@@ -1316,7 +1372,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_decimal,'IS_NULL'),
my_decimal, id FROM t1_values;
SELECT IFNULL(my_decimal,'IS_NULL'),
my_decimal, id FROM t1_values
-WHERE select_id = 131 OR select_id IS NULL order by id;
+WHERE select_id = 132 OR select_id IS NULL order by id;
IFNULL(my_decimal,'IS_NULL') my_decimal id
IS_NULL NULL 1
-9999999999999999999999999999999999.999999999999999999999999999999 -9999999999999999999999999999999999.999999999999999999999999999999 2
@@ -1328,7 +1384,7 @@ 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;
+WHERE select_id = 132 OR select_id IS NULL) order by id;
IFNULL(my_decimal,'IS_NULL') my_decimal id
IS_NULL NULL 1
-9999999999999999999999999999999999.999999999999999999999999999999 -9999999999999999999999999999999999.999999999999999999999999999999 2
@@ -1342,7 +1398,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_bigint,'IS_NULL'),
my_bigint, id FROM t1_values;
SELECT IFNULL(my_bigint,'IS_NULL'),
my_bigint, id FROM t1_values
-WHERE select_id = 130 OR select_id IS NULL order by id;
+WHERE select_id = 131 OR select_id IS NULL order by id;
IFNULL(my_bigint,'IS_NULL') my_bigint id
IS_NULL NULL 1
-9223372036854775808 -9223372036854775808 2
@@ -1354,7 +1410,7 @@ 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;
+WHERE select_id = 131 OR select_id IS NULL) order by id;
IFNULL(my_bigint,'IS_NULL') my_bigint id
IS_NULL NULL 1
-9223372036854775808 -9223372036854775808 2
@@ -1368,7 +1424,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_varbinary_1000,'IS_NULL'),
my_varbinary_1000, id FROM t1_values;
SELECT IFNULL(my_varbinary_1000,'IS_NULL'),
my_varbinary_1000, id FROM t1_values
-WHERE select_id = 129 OR select_id IS NULL order by id;
+WHERE select_id = 130 OR select_id IS NULL order by id;
IFNULL(my_varbinary_1000,'IS_NULL') my_varbinary_1000 id
IS_NULL NULL 1
2
@@ -1380,7 +1436,7 @@ 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;
+WHERE select_id = 130 OR select_id IS NULL) order by id;
IFNULL(my_varbinary_1000,'IS_NULL') my_varbinary_1000 id
IS_NULL NULL 1
2
@@ -1394,7 +1450,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_binary_30,'IS_NULL'),
my_binary_30, id FROM t1_values;
SELECT IFNULL(my_binary_30,'IS_NULL'),
my_binary_30, id FROM t1_values
-WHERE select_id = 128 OR select_id IS NULL order by id;
+WHERE select_id = 129 OR select_id IS NULL order by id;
IFNULL(my_binary_30,'IS_NULL') my_binary_30 id
IS_NULL NULL 1
@@ -1406,7 +1462,7 @@ 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;
+WHERE select_id = 129 OR select_id IS NULL) order by id;
IFNULL(my_binary_30,'IS_NULL') my_binary_30 id
IS_NULL NULL 1
@@ -1420,7 +1476,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_varchar_1000,'IS_NULL'),
my_varchar_1000, id FROM t1_values;
SELECT IFNULL(my_varchar_1000,'IS_NULL'),
my_varchar_1000, id FROM t1_values
-WHERE select_id = 127 OR select_id IS NULL order by id;
+WHERE select_id = 128 OR select_id IS NULL order by id;
IFNULL(my_varchar_1000,'IS_NULL') my_varchar_1000 id
IS_NULL NULL 1
2
@@ -1432,7 +1488,7 @@ 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;
+WHERE select_id = 128 OR select_id IS NULL) order by id;
IFNULL(my_varchar_1000,'IS_NULL') my_varchar_1000 id
IS_NULL NULL 1
2
@@ -1446,7 +1502,7 @@ CREATE VIEW v1 AS SELECT IFNULL(my_char_30,'IS_NULL'),
my_char_30, id FROM t1_values;
SELECT IFNULL(my_char_30,'IS_NULL'),
my_char_30, id FROM t1_values
-WHERE select_id = 126 OR select_id IS NULL order by id;
+WHERE select_id = 127 OR select_id IS NULL order by id;
IFNULL(my_char_30,'IS_NULL') my_char_30 id
IS_NULL NULL 1
2
@@ -1458,7 +1514,7 @@ 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;
+WHERE select_id = 127 OR select_id IS NULL) order by id;
IFNULL(my_char_30,'IS_NULL') my_char_30 id
IS_NULL NULL 1
2
@@ -1472,7 +1528,7 @@ CREATE VIEW v1 AS SELECT IF(my_year IS NULL, 'IS NULL',
'IS NOT NULL'), my_year, id FROM t1_values;
SELECT IF(my_year IS NULL, 'IS NULL',
'IS NOT NULL'), my_year, id FROM t1_values
-WHERE select_id = 125 OR select_id IS NULL order by id;
+WHERE select_id = 126 OR select_id IS NULL order by id;
IF(my_year IS NULL, 'IS NULL',
'IS NOT NULL') my_year id
IS NULL NULL 1
@@ -1486,7 +1542,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 126 OR select_id IS NULL) order by id;
IF(my_year IS NULL, 'IS NULL',
'IS NOT NULL') my_year id
IS NULL NULL 1
@@ -1501,7 +1557,7 @@ CREATE VIEW v1 AS SELECT IF(my_time IS NULL, 'IS NULL',
'IS NOT NULL'), my_time, id FROM t1_values;
SELECT IF(my_time IS NULL, 'IS NULL',
'IS NOT NULL'), my_time, id FROM t1_values
-WHERE select_id = 124 OR select_id IS NULL order by id;
+WHERE select_id = 125 OR select_id IS NULL order by id;
IF(my_time IS NULL, 'IS NULL',
'IS NOT NULL') my_time id
IS NULL NULL 1
@@ -1515,7 +1571,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 125 OR select_id IS NULL) order by id;
IF(my_time IS NULL, 'IS NULL',
'IS NOT NULL') my_time id
IS NULL NULL 1
@@ -1530,7 +1586,7 @@ CREATE VIEW v1 AS SELECT IF(my_timestamp IS NULL, 'IS NULL',
'IS NOT NULL'), my_timestamp, id FROM t1_values;
SELECT IF(my_timestamp IS NULL, 'IS NULL',
'IS NOT NULL'), my_timestamp, id FROM t1_values
-WHERE select_id = 123 OR select_id IS NULL order by id;
+WHERE select_id = 124 OR select_id IS NULL order by id;
IF(my_timestamp IS NULL, 'IS NULL',
'IS NOT NULL') my_timestamp id
IS NOT NULL 0000-00-00 00:00:00 1
@@ -1544,7 +1600,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 124 OR select_id IS NULL) order by id;
IF(my_timestamp IS NULL, 'IS NULL',
'IS NOT NULL') my_timestamp id
IS NOT NULL 0000-00-00 00:00:00 1
@@ -1559,7 +1615,7 @@ CREATE VIEW v1 AS SELECT IF(my_date IS NULL, 'IS NULL',
'IS NOT NULL'), my_date, id FROM t1_values;
SELECT IF(my_date IS NULL, 'IS NULL',
'IS NOT NULL'), my_date, id FROM t1_values
-WHERE select_id = 122 OR select_id IS NULL order by id;
+WHERE select_id = 123 OR select_id IS NULL order by id;
IF(my_date IS NULL, 'IS NULL',
'IS NOT NULL') my_date id
IS NULL NULL 1
@@ -1573,7 +1629,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 123 OR select_id IS NULL) order by id;
IF(my_date IS NULL, 'IS NULL',
'IS NOT NULL') my_date id
IS NULL NULL 1
@@ -1588,7 +1644,7 @@ CREATE VIEW v1 AS SELECT IF(my_datetime IS NULL, 'IS NULL',
'IS NOT NULL'), my_datetime, id FROM t1_values;
SELECT IF(my_datetime IS NULL, 'IS NULL',
'IS NOT NULL'), my_datetime, id FROM t1_values
-WHERE select_id = 121 OR select_id IS NULL order by id;
+WHERE select_id = 122 OR select_id IS NULL order by id;
IF(my_datetime IS NULL, 'IS NULL',
'IS NOT NULL') my_datetime id
IS NULL NULL 1
@@ -1602,7 +1658,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 122 OR select_id IS NULL) order by id;
IF(my_datetime IS NULL, 'IS NULL',
'IS NOT NULL') my_datetime id
IS NULL NULL 1
@@ -1617,7 +1673,7 @@ CREATE VIEW v1 AS SELECT IF(my_double IS NULL, 'IS NULL',
'IS NOT NULL'), my_double, id FROM t1_values;
SELECT IF(my_double IS NULL, 'IS NULL',
'IS NOT NULL'), my_double, id FROM t1_values
-WHERE select_id = 120 OR select_id IS NULL order by id;
+WHERE select_id = 121 OR select_id IS NULL order by id;
IF(my_double IS NULL, 'IS NULL',
'IS NOT NULL') my_double id
IS NULL NULL 1
@@ -1631,7 +1687,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 121 OR select_id IS NULL) order by id;
IF(my_double IS NULL, 'IS NULL',
'IS NOT NULL') my_double id
IS NULL NULL 1
@@ -1646,7 +1702,7 @@ CREATE VIEW v1 AS SELECT IF(my_decimal IS NULL, 'IS NULL',
'IS NOT NULL'), my_decimal, id FROM t1_values;
SELECT IF(my_decimal IS NULL, 'IS NULL',
'IS NOT NULL'), my_decimal, id FROM t1_values
-WHERE select_id = 119 OR select_id IS NULL order by id;
+WHERE select_id = 120 OR select_id IS NULL order by id;
IF(my_decimal IS NULL, 'IS NULL',
'IS NOT NULL') my_decimal id
IS NULL NULL 1
@@ -1660,7 +1716,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 120 OR select_id IS NULL) order by id;
IF(my_decimal IS NULL, 'IS NULL',
'IS NOT NULL') my_decimal id
IS NULL NULL 1
@@ -1675,7 +1731,7 @@ CREATE VIEW v1 AS SELECT IF(my_bigint IS NULL, 'IS NULL',
'IS NOT NULL'), my_bigint, id FROM t1_values;
SELECT IF(my_bigint IS NULL, 'IS NULL',
'IS NOT NULL'), my_bigint, id FROM t1_values
-WHERE select_id = 118 OR select_id IS NULL order by id;
+WHERE select_id = 119 OR select_id IS NULL order by id;
IF(my_bigint IS NULL, 'IS NULL',
'IS NOT NULL') my_bigint id
IS NULL NULL 1
@@ -1689,7 +1745,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 119 OR select_id IS NULL) order by id;
IF(my_bigint IS NULL, 'IS NULL',
'IS NOT NULL') my_bigint id
IS NULL NULL 1
@@ -1704,7 +1760,7 @@ CREATE VIEW v1 AS SELECT IF(my_varbinary_1000 IS NULL, 'IS NULL',
'IS NOT NULL'), my_varbinary_1000, id FROM t1_values;
SELECT IF(my_varbinary_1000 IS NULL, 'IS NULL',
'IS NOT NULL'), my_varbinary_1000, id FROM t1_values
-WHERE select_id = 117 OR select_id IS NULL order by id;
+WHERE select_id = 118 OR select_id IS NULL order by id;
IF(my_varbinary_1000 IS NULL, 'IS NULL',
'IS NOT NULL') my_varbinary_1000 id
IS NULL NULL 1
@@ -1718,7 +1774,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 118 OR select_id IS NULL) order by id;
IF(my_varbinary_1000 IS NULL, 'IS NULL',
'IS NOT NULL') my_varbinary_1000 id
IS NULL NULL 1
@@ -1733,7 +1789,7 @@ CREATE VIEW v1 AS SELECT IF(my_binary_30 IS NULL, 'IS NULL',
'IS NOT NULL'), my_binary_30, id FROM t1_values;
SELECT IF(my_binary_30 IS NULL, 'IS NULL',
'IS NOT NULL'), my_binary_30, id FROM t1_values
-WHERE select_id = 116 OR select_id IS NULL order by id;
+WHERE select_id = 117 OR select_id IS NULL order by id;
IF(my_binary_30 IS NULL, 'IS NULL',
'IS NOT NULL') my_binary_30 id
IS NULL NULL 1
@@ -1747,7 +1803,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 117 OR select_id IS NULL) order by id;
IF(my_binary_30 IS NULL, 'IS NULL',
'IS NOT NULL') my_binary_30 id
IS NULL NULL 1
@@ -1762,7 +1818,7 @@ CREATE VIEW v1 AS SELECT IF(my_varchar_1000 IS NULL, 'IS NULL',
'IS NOT NULL'), my_varchar_1000, id FROM t1_values;
SELECT IF(my_varchar_1000 IS NULL, 'IS NULL',
'IS NOT NULL'), my_varchar_1000, id FROM t1_values
-WHERE select_id = 115 OR select_id IS NULL order by id;
+WHERE select_id = 116 OR select_id IS NULL order by id;
IF(my_varchar_1000 IS NULL, 'IS NULL',
'IS NOT NULL') my_varchar_1000 id
IS NULL NULL 1
@@ -1776,7 +1832,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 116 OR select_id IS NULL) order by id;
IF(my_varchar_1000 IS NULL, 'IS NULL',
'IS NOT NULL') my_varchar_1000 id
IS NULL NULL 1
@@ -1791,7 +1847,7 @@ CREATE VIEW v1 AS SELECT IF(my_char_30 IS NULL, 'IS NULL',
'IS NOT NULL'), my_char_30, id FROM t1_values;
SELECT IF(my_char_30 IS NULL, 'IS NULL',
'IS NOT NULL'), my_char_30, id FROM t1_values
-WHERE select_id = 114 OR select_id IS NULL order by id;
+WHERE select_id = 115 OR select_id IS NULL order by id;
IF(my_char_30 IS NULL, 'IS NULL',
'IS NOT NULL') my_char_30 id
IS NULL NULL 1
@@ -1805,7 +1861,7 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
'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;
+WHERE select_id = 115 OR select_id IS NULL) order by id;
IF(my_char_30 IS NULL, 'IS NULL',
'IS NOT NULL') my_char_30 id
IS NULL NULL 1
@@ -1820,7 +1876,7 @@ CREATE VIEW v1 AS SELECT IF(my_year, 'IS TRUE', 'IS NOT TRUE'),
my_year, id FROM t1_values;
SELECT IF(my_year, 'IS TRUE', 'IS NOT TRUE'),
my_year, id FROM t1_values
-WHERE select_id = 113 OR select_id IS NULL order by id;
+WHERE select_id = 114 OR select_id IS NULL order by id;
IF(my_year, 'IS TRUE', 'IS NOT TRUE') my_year id
IS NOT TRUE NULL 1
IS TRUE 1901 2
@@ -1832,7 +1888,7 @@ 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;
+WHERE select_id = 114 OR select_id IS NULL) order by id;
IF(my_year, 'IS TRUE', 'IS NOT TRUE') my_year id
IS NOT TRUE NULL 1
IS TRUE 1901 2
@@ -1846,7 +1902,7 @@ CREATE VIEW v1 AS SELECT IF(my_time, 'IS TRUE', 'IS NOT TRUE'),
my_time, id FROM t1_values;
SELECT IF(my_time, 'IS TRUE', 'IS NOT TRUE'),
my_time, id FROM t1_values
-WHERE select_id = 112 OR select_id IS NULL order by id;
+WHERE select_id = 113 OR select_id IS NULL order by id;
IF(my_time, 'IS TRUE', 'IS NOT TRUE') my_time id
IS NOT TRUE NULL 1
IS TRUE -838:59:59 2
@@ -1858,7 +1914,7 @@ 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;
+WHERE select_id = 113 OR select_id IS NULL) order by id;
IF(my_time, 'IS TRUE', 'IS NOT TRUE') my_time id
IS NOT TRUE NULL 1
IS TRUE -838:59:59 2
@@ -1872,7 +1928,7 @@ CREATE VIEW v1 AS SELECT IF(my_timestamp, 'IS TRUE', 'IS NOT TRUE'),
my_timestamp, id FROM t1_values;
SELECT IF(my_timestamp, 'IS TRUE', 'IS NOT TRUE'),
my_timestamp, id FROM t1_values
-WHERE select_id = 111 OR select_id IS NULL order by id;
+WHERE select_id = 112 OR select_id IS NULL order by id;
IF(my_timestamp, 'IS TRUE', 'IS NOT TRUE') my_timestamp id
IS NOT TRUE 0000-00-00 00:00:00 1
IS TRUE 1970-01-01 03:00:01 2
@@ -1884,7 +1940,7 @@ 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;
+WHERE select_id = 112 OR select_id IS NULL) order by id;
IF(my_timestamp, 'IS TRUE', 'IS NOT TRUE') my_timestamp id
IS NOT TRUE 0000-00-00 00:00:00 1
IS TRUE 1970-01-01 03:00:01 2
@@ -1898,7 +1954,7 @@ CREATE VIEW v1 AS SELECT IF(my_date, 'IS TRUE', 'IS NOT TRUE'),
my_date, id FROM t1_values;
SELECT IF(my_date, 'IS TRUE', 'IS NOT TRUE'),
my_date, id FROM t1_values
-WHERE select_id = 110 OR select_id IS NULL order by id;
+WHERE select_id = 111 OR select_id IS NULL order by id;
IF(my_date, 'IS TRUE', 'IS NOT TRUE') my_date id
IS NOT TRUE NULL 1
IS TRUE 0001-01-01 2
@@ -1910,7 +1966,7 @@ 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;
+WHERE select_id = 111 OR select_id IS NULL) order by id;
IF(my_date, 'IS TRUE', 'IS NOT TRUE') my_date id
IS NOT TRUE NULL 1
IS TRUE 0001-01-01 2
@@ -1924,7 +1980,7 @@ CREATE VIEW v1 AS SELECT IF(my_datetime, 'IS TRUE', 'IS NOT TRUE'),
my_datetime, id FROM t1_values;
SELECT IF(my_datetime, 'IS TRUE', 'IS NOT TRUE'),
my_datetime, id FROM t1_values
-WHERE select_id = 109 OR select_id IS NULL order by id;
+WHERE select_id = 110 OR select_id IS NULL order by id;
IF(my_datetime, 'IS TRUE', 'IS NOT TRUE') my_datetime id
IS NOT TRUE NULL 1
IS TRUE 0001-01-01 00:00:00 2
@@ -1936,7 +1992,7 @@ 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;
+WHERE select_id = 110 OR select_id IS NULL) order by id;
IF(my_datetime, 'IS TRUE', 'IS NOT TRUE') my_datetime id
IS NOT TRUE NULL 1
IS TRUE 0001-01-01 00:00:00 2
@@ -1950,7 +2006,7 @@ CREATE VIEW v1 AS SELECT IF(my_double, 'IS TRUE', 'IS NOT TRUE'),
my_double, id FROM t1_values;
SELECT IF(my_double, 'IS TRUE', 'IS NOT TRUE'),
my_double, id FROM t1_values
-WHERE select_id = 108 OR select_id IS NULL order by id;
+WHERE select_id = 109 OR select_id IS NULL order by id;
IF(my_double, 'IS TRUE', 'IS NOT TRUE') my_double id
IS NOT TRUE NULL 1
IS TRUE -1.7976931348623e+308 2
@@ -1962,7 +2018,7 @@ 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;
+WHERE select_id = 109 OR select_id IS NULL) order by id;
IF(my_double, 'IS TRUE', 'IS NOT TRUE') my_double id
IS NOT TRUE NULL 1
IS TRUE -1.7976931348623e+308 2
@@ -1976,7 +2032,7 @@ CREATE VIEW v1 AS SELECT IF(my_decimal, 'IS TRUE', 'IS NOT TRUE'),
my_decimal, id FROM t1_values;
SELECT IF(my_decimal, 'IS TRUE', 'IS NOT TRUE'),
my_decimal, id FROM t1_values
-WHERE select_id = 107 OR select_id IS NULL order by id;
+WHERE select_id = 108 OR select_id IS NULL order by id;
IF(my_decimal, 'IS TRUE', 'IS NOT TRUE') my_decimal id
IS NOT TRUE NULL 1
IS TRUE -9999999999999999999999999999999999.999999999999999999999999999999 2
@@ -1988,7 +2044,7 @@ 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;
+WHERE select_id = 108 OR select_id IS NULL) order by id;
IF(my_decimal, 'IS TRUE', 'IS NOT TRUE') my_decimal id
IS NOT TRUE NULL 1
IS TRUE -9999999999999999999999999999999999.999999999999999999999999999999 2
@@ -2002,7 +2058,7 @@ CREATE VIEW v1 AS SELECT IF(my_bigint, 'IS TRUE', 'IS NOT TRUE'),
my_bigint, id FROM t1_values;
SELECT IF(my_bigint, 'IS TRUE', 'IS NOT TRUE'),
my_bigint, id FROM t1_values
-WHERE select_id = 106 OR select_id IS NULL order by id;
+WHERE select_id = 107 OR select_id IS NULL order by id;
IF(my_bigint, 'IS TRUE', 'IS NOT TRUE') my_bigint id
IS NOT TRUE NULL 1
IS TRUE -9223372036854775808 2
@@ -2014,7 +2070,7 @@ 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;
+WHERE select_id = 107 OR select_id IS NULL) order by id;
IF(my_bigint, 'IS TRUE', 'IS NOT TRUE') my_bigint id
IS NOT TRUE NULL 1
IS TRUE -9223372036854775808 2
@@ -2028,7 +2084,7 @@ CREATE VIEW v1 AS SELECT IF(my_varbinary_1000, 'IS TRUE', 'IS NOT TRUE'),
my_varbinary_1000, id FROM t1_values;
SELECT IF(my_varbinary_1000, 'IS TRUE', 'IS NOT TRUE'),
my_varbinary_1000, id FROM t1_values
-WHERE select_id = 105 OR select_id IS NULL order by id;
+WHERE select_id = 106 OR select_id IS NULL order by id;
IF(my_varbinary_1000, 'IS TRUE', 'IS NOT TRUE') my_varbinary_1000 id
IS NOT TRUE NULL 1
IS NOT TRUE 2
@@ -2040,7 +2096,7 @@ 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;
+WHERE select_id = 106 OR select_id IS NULL) order by id;
IF(my_varbinary_1000, 'IS TRUE', 'IS NOT TRUE') my_varbinary_1000 id
IS NOT TRUE NULL 1
IS NOT TRUE 2
@@ -2054,7 +2110,7 @@ CREATE VIEW v1 AS SELECT IF(my_binary_30, 'IS TRUE', 'IS NOT TRUE'),
my_binary_30, id FROM t1_values;
SELECT IF(my_binary_30, 'IS TRUE', 'IS NOT TRUE'),
my_binary_30, id FROM t1_values
-WHERE select_id = 104 OR select_id IS NULL order by id;
+WHERE select_id = 105 OR select_id IS NULL order by id;
IF(my_binary_30, 'IS TRUE', 'IS NOT TRUE') my_binary_30 id
IS NOT TRUE NULL 1
IS NOT TRUE
@@ -2071,7 +2127,7 @@ 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;
+WHERE select_id = 105 OR select_id IS NULL) order by id;
IF(my_binary_30, 'IS TRUE', 'IS NOT TRUE') my_binary_30 id
IS NOT TRUE NULL 1
IS NOT TRUE
@@ -2090,7 +2146,7 @@ CREATE VIEW v1 AS SELECT IF(my_varchar_1000, 'IS TRUE', 'IS NOT TRUE'),
my_varchar_1000, id FROM t1_values;
SELECT IF(my_varchar_1000, 'IS TRUE', 'IS NOT TRUE'),
my_varchar_1000, id FROM t1_values
-WHERE select_id = 103 OR select_id IS NULL order by id;
+WHERE select_id = 104 OR select_id IS NULL order by id;
IF(my_varchar_1000, 'IS TRUE', 'IS NOT TRUE') my_varchar_1000 id
IS NOT TRUE NULL 1
IS NOT TRUE 2
@@ -2102,7 +2158,7 @@ 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;
+WHERE select_id = 104 OR select_id IS NULL) order by id;
IF(my_varchar_1000, 'IS TRUE', 'IS NOT TRUE') my_varchar_1000 id
IS NOT TRUE NULL 1
IS NOT TRUE 2
@@ -2116,7 +2172,7 @@ CREATE VIEW v1 AS SELECT IF(my_char_30, 'IS TRUE', 'IS NOT TRUE'),
my_char_30, id FROM t1_values;
SELECT IF(my_char_30, 'IS TRUE', 'IS NOT TRUE'),
my_char_30, id FROM t1_values
-WHERE select_id = 102 OR select_id IS NULL order by id;
+WHERE select_id = 103 OR select_id IS NULL order by id;
IF(my_char_30, 'IS TRUE', 'IS NOT TRUE') my_char_30 id
IS NOT TRUE NULL 1
IS NOT TRUE 2
@@ -2131,7 +2187,7 @@ 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;
+WHERE select_id = 103 OR select_id IS NULL) order by id;
IF(my_char_30, 'IS TRUE', 'IS NOT TRUE') my_char_30 id
IS NOT TRUE NULL 1
IS NOT TRUE 2
@@ -2148,7 +2204,7 @@ CREATE VIEW v1 AS SELECT CONVERT(my_varbinary_1000 USING koi8r),
my_varbinary_1000, id FROM t1_values;
SELECT CONVERT(my_varbinary_1000 USING koi8r),
my_varbinary_1000, id FROM t1_values
-WHERE select_id = 101 OR select_id IS NULL order by id;
+WHERE select_id = 102 OR select_id IS NULL order by id;
CONVERT(my_varbinary_1000 USING koi8r) my_varbinary_1000 id
NULL NULL 1
2
@@ -2160,7 +2216,7 @@ 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;
+WHERE select_id = 102 OR select_id IS NULL) order by id;
CONVERT(my_varbinary_1000 USING koi8r) my_varbinary_1000 id
NULL NULL 1
2
@@ -2174,7 +2230,7 @@ CREATE VIEW v1 AS SELECT CONVERT(my_binary_30 USING koi8r),
my_binary_30, id FROM t1_values;
SELECT CONVERT(my_binary_30 USING koi8r),
my_binary_30, id FROM t1_values
-WHERE select_id = 100 OR select_id IS NULL order by id;
+WHERE select_id = 101 OR select_id IS NULL order by id;
CONVERT(my_binary_30 USING koi8r) my_binary_30 id
NULL NULL 1
@@ -2186,7 +2242,7 @@ 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;
+WHERE select_id = 101 OR select_id IS NULL) order by id;
CONVERT(my_binary_30 USING koi8r) my_binary_30 id
NULL NULL 1
@@ -2200,7 +2256,7 @@ CREATE VIEW v1 AS SELECT CONVERT(my_varchar_1000 USING koi8r),
my_varchar_1000, id FROM t1_values;
SELECT CONVERT(my_varchar_1000 USING koi8r),
my_varchar_1000, id FROM t1_values
-WHERE select_id = 99 OR select_id IS NULL order by id;
+WHERE select_id = 100 OR select_id IS NULL order by id;
CONVERT(my_varchar_1000 USING koi8r) my_varchar_1000 id
NULL NULL 1
2
@@ -2212,7 +2268,7 @@ 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;
+WHERE select_id = 100 OR select_id IS NULL) order by id;
CONVERT(my_varchar_1000 USING koi8r) my_varchar_1000 id
NULL NULL 1
2
@@ -2226,7 +2282,7 @@ CREATE VIEW v1 AS SELECT CONVERT(my_char_30 USING koi8r),
my_char_30, id FROM t1_values;
SELECT CONVERT(my_char_30 USING koi8r),
my_char_30, id FROM t1_values
-WHERE select_id = 98 OR select_id IS NULL order by id;
+WHERE select_id = 99 OR select_id IS NULL order by id;
CONVERT(my_char_30 USING koi8r) my_char_30 id
NULL NULL 1
2
@@ -2238,7 +2294,7 @@ 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;
+WHERE select_id = 99 OR select_id IS NULL) order by id;
CONVERT(my_char_30 USING koi8r) my_char_30 id
NULL NULL 1
2
@@ -2252,7 +2308,7 @@ CREATE VIEW v1 AS SELECT CONVERT(my_varbinary_1000 USING utf8),
my_varbinary_1000, id FROM t1_values;
SELECT CONVERT(my_varbinary_1000 USING utf8),
my_varbinary_1000, id FROM t1_values
-WHERE select_id = 97 OR select_id IS NULL order by id;
+WHERE select_id = 98 OR select_id IS NULL order by id;
CONVERT(my_varbinary_1000 USING utf8) my_varbinary_1000 id
NULL NULL 1
2
@@ -2264,7 +2320,7 @@ 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;
+WHERE select_id = 98 OR select_id IS NULL) order by id;
CONVERT(my_varbinary_1000 USING utf8) my_varbinary_1000 id
NULL NULL 1
2
@@ -2278,7 +2334,7 @@ CREATE VIEW v1 AS SELECT CONVERT(my_binary_30 USING utf8),
my_binary_30, id FROM t1_values;
SELECT CONVERT(my_binary_30 USING utf8),
my_binary_30, id FROM t1_values
-WHERE select_id = 96 OR select_id IS NULL order by id;
+WHERE select_id = 97 OR select_id IS NULL order by id;
CONVERT(my_binary_30 USING utf8) my_binary_30 id
NULL NULL 1
@@ -2290,7 +2346,7 @@ 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;
+WHERE select_id = 97 OR select_id IS NULL) order by id;
CONVERT(my_binary_30 USING utf8) my_binary_30 id
NULL NULL 1
@@ -2304,7 +2360,7 @@ CREATE VIEW v1 AS SELECT CONVERT(my_varchar_1000 USING utf8),
my_varchar_1000, id FROM t1_values;
SELECT CONVERT(my_varchar_1000 USING utf8),
my_varchar_1000, id FROM t1_values
-WHERE select_id = 95 OR select_id IS NULL order by id;
+WHERE select_id = 96 OR select_id IS NULL order by id;
CONVERT(my_varchar_1000 USING utf8) my_varchar_1000 id
NULL NULL 1
2
@@ -2316,7 +2372,7 @@ 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;
+WHERE select_id = 96 OR select_id IS NULL) order by id;
CONVERT(my_varchar_1000 USING utf8) my_varchar_1000 id
NULL NULL 1
2
@@ -2330,7 +2386,7 @@ CREATE VIEW v1 AS SELECT CONVERT(my_char_30 USING utf8),
my_char_30, id FROM t1_values;
SELECT CONVERT(my_char_30 USING utf8),
my_char_30, id FROM t1_values
-WHERE select_id = 94 OR select_id IS NULL order by id;
+WHERE select_id = 95 OR select_id IS NULL order by id;
CONVERT(my_char_30 USING utf8) my_char_30 id
NULL NULL 1
2
@@ -2342,7 +2398,7 @@ 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;
+WHERE select_id = 95 OR select_id IS NULL) order by id;
CONVERT(my_char_30 USING utf8) my_char_30 id
NULL NULL 1
2
@@ -2356,7 +2412,7 @@ CREATE VIEW v1 AS SELECT CAST(my_year AS UNSIGNED INTEGER),
my_year, id FROM t1_values;
SELECT CAST(my_year AS UNSIGNED INTEGER),
my_year, id FROM t1_values
-WHERE select_id = 93 OR select_id IS NULL order by id;
+WHERE select_id = 94 OR select_id IS NULL order by id;
CAST(my_year AS UNSIGNED INTEGER) my_year id
NULL NULL 1
1901 1901 2
@@ -2368,7 +2424,7 @@ 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;
+WHERE select_id = 94 OR select_id IS NULL) order by id;
CAST(my_year AS UNSIGNED INTEGER) my_year id
NULL NULL 1
1901 1901 2
@@ -2382,7 +2438,7 @@ CREATE VIEW v1 AS SELECT CAST(my_time AS UNSIGNED INTEGER),
my_time, id FROM t1_values;
SELECT CAST(my_time AS UNSIGNED INTEGER),
my_time, id FROM t1_values
-WHERE select_id = 92 OR select_id IS NULL order by id;
+WHERE select_id = 93 OR select_id IS NULL order by id;
CAST(my_time AS UNSIGNED INTEGER) my_time id
NULL NULL 1
18446744073701165657 -838:59:59 2
@@ -2394,7 +2450,7 @@ 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;
+WHERE select_id = 93 OR select_id IS NULL) order by id;
CAST(my_time AS UNSIGNED INTEGER) my_time id
NULL NULL 1
18446744073701165657 -838:59:59 2
@@ -2408,7 +2464,7 @@ CREATE VIEW v1 AS SELECT CAST(my_timestamp AS UNSIGNED INTEGER),
my_timestamp, id FROM t1_values;
SELECT CAST(my_timestamp AS UNSIGNED INTEGER),
my_timestamp, id FROM t1_values
-WHERE select_id = 91 OR select_id IS NULL order by id;
+WHERE select_id = 92 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
19700101030001 1970-01-01 03:00:01 2
@@ -2420,7 +2476,7 @@ 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;
+WHERE select_id = 92 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
19700101030001 1970-01-01 03:00:01 2
@@ -2434,7 +2490,7 @@ CREATE VIEW v1 AS SELECT CAST(my_date AS UNSIGNED INTEGER),
my_date, id FROM t1_values;
SELECT CAST(my_date AS UNSIGNED INTEGER),
my_date, id FROM t1_values
-WHERE select_id = 90 OR select_id IS NULL order by id;
+WHERE select_id = 91 OR select_id IS NULL order by id;
CAST(my_date AS UNSIGNED INTEGER) my_date id
NULL NULL 1
10101 0001-01-01 2
@@ -2446,7 +2502,7 @@ 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;
+WHERE select_id = 91 OR select_id IS NULL) order by id;
CAST(my_date AS UNSIGNED INTEGER) my_date id
NULL NULL 1
10101 0001-01-01 2
@@ -2460,7 +2516,7 @@ CREATE VIEW v1 AS SELECT CAST(my_datetime AS UNSIGNED INTEGER),
my_datetime, id FROM t1_values;
SELECT CAST(my_datetime AS UNSIGNED INTEGER),
my_datetime, id FROM t1_values
-WHERE select_id = 89 OR select_id IS NULL order by id;
+WHERE select_id = 90 OR select_id IS NULL order by id;
CAST(my_datetime AS UNSIGNED INTEGER) my_datetime id
NULL NULL 1
10101000000 0001-01-01 00:00:00 2
@@ -2472,7 +2528,7 @@ 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;
+WHERE select_id = 90 OR select_id IS NULL) order by id;
CAST(my_datetime AS UNSIGNED INTEGER) my_datetime id
NULL NULL 1
10101000000 0001-01-01 00:00:00 2
@@ -2482,6 +2538,38 @@ NULL NULL 1
DROP VIEW v1;
+CREATE VIEW v1 AS SELECT CAST(my_double AS UNSIGNED INTEGER),
+my_double, id FROM t1_values;
+SELECT CAST(my_double AS UNSIGNED INTEGER),
+my_double, id FROM t1_values
+WHERE select_id = 89 OR select_id IS NULL order by id;
+CAST(my_double AS UNSIGNED INTEGER) my_double id
+NULL NULL 1
+9223372036854775808 -1.7976931348623e+308 2
+9223372036854775807 1.7976931348623e+308 3
+0 0 4
+18446744073709551615 -1 5
+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 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 unsigned) AS `CAST(my_double AS UNSIGNED 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 = 89 OR select_id IS NULL) order by id;
+CAST(my_double AS UNSIGNED INTEGER) my_double id
+NULL NULL 1
+9223372036854775808 -1.7976931348623e+308 2
+9223372036854775807 1.7976931348623e+308 3
+0 0 4
+18446744073709551615 -1 5
+Warnings:
+Warning 1292 Truncated incorrect INTEGER value: '-1.7976931348623e+308'
+Warning 1292 Truncated incorrect INTEGER value: '1.7976931348623e+308'
+DROP VIEW v1;
+
+
CREATE VIEW v1 AS SELECT CAST(my_decimal AS UNSIGNED INTEGER),
my_decimal, id FROM t1_values;
SELECT CAST(my_decimal AS UNSIGNED INTEGER),
diff --git a/mysql-test/suite/funcs_1/r/ndb_storedproc.result b/mysql-test/suite/funcs_1/r/ndb_storedproc.result
index 2e1d5035397..42c4e502127 100644
--- a/mysql-test/suite/funcs_1/r/ndb_storedproc.result
+++ b/mysql-test/suite/funcs_1/r/ndb_storedproc.result
@@ -1,29 +1,4 @@
-.
-. IMPORTANT NOTICE:
-. -----------------
-.
-. FIXME: The .result files are still NOT CHECKED for correctness!
-.
-. FIXME: Several tests are affected by known problems around DECIMAL
-. FIXME: and NUMERIC that will be checked again after WL#2984 once
-. FIXME: has been completed. Some of them are marked in the result.
-.
-. Currently (Dec 06, 2005) this .result file is checked OK for Linux
-. with 5.0.17-bk (ChangeSet@1.1975.1.2, 2005-12-05 18:33:48+01:00).
-. Using the available Windows version 5.0.16 there are differences
-. that can be ignored (e.g. WL#2984).
-.
---------------------------------------------------------------------------------
- FIXME: There are subtests that are switched off due to known bugs:
- ------------------------------------------------------------------
-WL#2984: DECIMAL and NUMERIC problems with differences on some machines
-0
-
-There are some statements where the ps-protocol is switched off.
-Bug#11589: mysqltest, --ps-protocol, strange output, float/double/real with zerofill
---------------------------------------------------------------------------------
-
--source suite/funcs_1/storedproc/load_sp_tb.inc
--------------------------------------------------------------------------------
SET @@global.max_heap_table_size=4294967295;
@@ -94,23 +69,24 @@ CREATE PROCEDURE
--------------------------------------------------------------------------------
USE db_storedproc;
DROP PROCEDURE IF EXISTS sp1_thisisaveryverylongname234872934_thisisaveryverylongname234872934;
+ERROR 42000: Identifier name 'sp1_thisisaveryverylongname234872934_thisisaveryverylongname234872934' is too long
CREATE PROCEDURE sp1_thisisaveryverylongname234872934_thisisaveryverylongname234872934 (f1 char(20) )
SELECT * from t1 where f2 = f1;
+ERROR 42000: Identifier name 'sp1_thisisaveryverylongname234872934_thisisaveryverylongname234872934' is too long
CALL sp1_thisisaveryverylongname234872934_thisisaveryverylongname234872934('aaaa');
-f1 f2 f3 f4 f5 f6
+ERROR 42000: Identifier name 'sp1_thisisaveryverylongname234872934_thisisaveryverylongname234872934' is too long
DROP PROCEDURE IF EXISTS sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcde;
+ERROR 42000: Identifier name 'sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcde' is too long
CREATE PROCEDURE sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcde( f1 tinytext ) language sql deterministic sql security definer comment 'this is simple'
BEGIN
set @v1 = f1;
SELECT @v1, @v1;
END//
+ERROR 42000: Identifier name 'sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcde' is too long
CALL sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcde( 'abc' );
-@v1 @v1
-abc abc
+ERROR 42000: Identifier name 'sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcde' is too long
SHOW PROCEDURE status;
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongname2348 PROCEDURE root@localhost modified created DEFINER
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcd PROCEDURE root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 binary ) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
@@ -119,12 +95,12 @@ SELECT @v1;
END//
CALL sp1( 34 );
@v1
-34
+3
+Warnings:
+Warning 1265 Data truncated for column 'f1' at row 1
SHOW PROCEDURE status;
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongname2348 PROCEDURE root@localhost modified created DEFINER
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcd PROCEDURE root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 blob ) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
@@ -135,10 +111,8 @@ CALL sp1( 34 );
@v1
34
SHOW PROCEDURE status;
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongname2348 PROCEDURE root@localhost modified created DEFINER
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcd PROCEDURE root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 int ) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
@@ -149,25 +123,27 @@ CALL sp1( 34 );
@v1
34
SHOW PROCEDURE status;
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongname2348 PROCEDURE root@localhost modified created DEFINER
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcd PROCEDURE root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed: SP definition accepted with m>60 in DECIMAL(m,n)
CREATE PROCEDURE sp1( f1 decimal(256, 30) ) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
set @v1 = f1;
SELECT @v1;
END//
+ERROR 42000: Too big precision 256 specified for column ''. Maximum is 65.
DROP PROCEDURE IF EXISTS sp1//
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( f1 decimal(66, 30) ) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
set @v1 = f1;
SELECT @v1;
END//
+ERROR 42000: Too big precision 66 specified for column ''. Maximum is 65.
DROP PROCEDURE IF EXISTS sp1//
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( f1 decimal(60, 30) ) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
set @v1 = f1;
@@ -175,101 +151,1123 @@ SELECT @v1;
END//
CALL sp1( 17976931340000 );
@v1
-17976931340000
+17976931340000.000000000000000000000000000000
+CALL sp1( 1.797693134e+13 );
+@v1
+17976931340000.000000000000000000000000000000
+CALL sp1( 1.7976931348623157493578e+308 );
+ERROR 22007: Illegal double '1.7976931348623157493578e+308' value found during parsing
+CALL sp1( 0.1234567890987654321e+100 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-100 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+99 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-99 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+98 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-98 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+97 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-97 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+96 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-96 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+95 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-95 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+94 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-94 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+93 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-93 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+92 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-92 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+91 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-91 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+90 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-90 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+89 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-89 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+88 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-88 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+87 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-87 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+86 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-86 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+85 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-85 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+84 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-84 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+83 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-83 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+82 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-82 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+81 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-81 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+80 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-80 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+79 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-79 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+78 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-78 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+77 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-77 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+76 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-76 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+75 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-75 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+74 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-74 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+73 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-73 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+72 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-72 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+71 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-71 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+70 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-70 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+69 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-69 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+68 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-68 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+67 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-67 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+66 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-66 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+65 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-65 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+64 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-64 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+63 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-63 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+62 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-62 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+61 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-61 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+60 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-60 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+59 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-59 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+58 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-58 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+57 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-57 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+56 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-56 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+55 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-55 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+54 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-54 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+53 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-53 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+52 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-52 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+51 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-51 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+50 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-50 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+49 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-49 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+48 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-48 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+47 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-47 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+46 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-46 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+45 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-45 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+44 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-44 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+43 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-43 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+42 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-42 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+41 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-41 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+40 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-40 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+39 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-39 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+38 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-38 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+37 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-37 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+36 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-36 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+35 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-35 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+34 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-34 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+33 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-33 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+32 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-32 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+31 );
+@v1
+999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-31 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+30 );
+@v1
+123456789098765400000000000000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-30 );
+@v1
+0.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+29 );
+@v1
+12345678909876540000000000000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-29 );
+@v1
+0.000000000000000000000000000001
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+28 );
+@v1
+1234567890987654000000000000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-28 );
+@v1
+0.000000000000000000000000000012
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+27 );
+@v1
+123456789098765400000000000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-27 );
+@v1
+0.000000000000000000000000000123
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+26 );
+@v1
+12345678909876540000000000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-26 );
+@v1
+0.000000000000000000000000001235
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+25 );
+@v1
+1234567890987654000000000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-25 );
+@v1
+0.000000000000000000000000012346
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+24 );
+@v1
+123456789098765400000000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-24 );
+@v1
+0.000000000000000000000000123457
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+23 );
+@v1
+12345678909876540000000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-23 );
+@v1
+0.000000000000000000000001234568
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+22 );
+@v1
+1234567890987654000000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-22 );
+@v1
+0.000000000000000000000012345679
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+21 );
+@v1
+123456789098765400000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-21 );
+@v1
+0.000000000000000000000123456789
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+20 );
+@v1
+12345678909876540000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-20 );
+@v1
+0.000000000000000000001234567891
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+19 );
+@v1
+1234567890987654000.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-19 );
+@v1
+0.000000000000000000012345678910
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+18 );
+@v1
+123456789098765400.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-18 );
+@v1
+0.000000000000000000123456789099
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+17 );
+@v1
+12345678909876540.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-17 );
+@v1
+0.000000000000000001234567890988
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+16 );
+@v1
+1234567890987654.000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-16 );
+@v1
+0.000000000000000012345678909877
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+15 );
+@v1
+123456789098765.400000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-15 );
+@v1
+0.000000000000000123456789098765
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+14 );
+@v1
+12345678909876.540000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-14 );
+@v1
+0.000000000000001234567890987654
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+13 );
+@v1
+1234567890987.654000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-13 );
+@v1
+0.000000000000012345678909876540
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+12 );
+@v1
+123456789098.765400000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-12 );
+@v1
+0.000000000000123456789098765400
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+11 );
+@v1
+12345678909.876540000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-11 );
+@v1
+0.000000000001234567890987654000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+10 );
+@v1
+1234567890.987654000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-10 );
+@v1
+0.000000000012345678909876540000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+9 );
+@v1
+123456789.098765400000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-9 );
+@v1
+0.000000000123456789098765400000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+8 );
+@v1
+12345678.909876540000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-8 );
+@v1
+0.000000001234567890987654000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+7 );
+@v1
+1234567.890987654000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-7 );
+@v1
+0.000000012345678909876540000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+6 );
+@v1
+123456.789098765400000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-6 );
+@v1
+0.000000123456789098765400000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+5 );
+@v1
+12345.678909876540000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-5 );
+@v1
+0.000001234567890987654000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+4 );
+@v1
+1234.567890987654000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-4 );
+@v1
+0.000012345678909876550000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+3 );
+@v1
+123.456789098765400000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-3 );
+@v1
+0.000123456789098765400000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+2 );
+@v1
+12.345678909876540000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-2 );
+@v1
+0.001234567890987654000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+1 );
+@v1
+1.234567890987654000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-1 );
+@v1
+0.012345678909876540000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e+0 );
+@v1
+0.123456789098765400000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+CALL sp1( 0.1234567890987654321e-0 );
+@v1
+0.123456789098765400000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
SHOW PROCEDURE status;
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongname2348 PROCEDURE root@localhost modified created DEFINER
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcd PROCEDURE root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 enum("value1", "value1") ) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
SELECT f1;
END//
+Warnings:
+Note 1291 Column '' has duplicated value 'value1' in ENUM
CALL sp1( "value1" );
f1
value1
+Warnings:
+Note 1291 Column '' has duplicated value 'value1' in ENUM
SHOW PROCEDURE status;
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongname2348 PROCEDURE root@localhost modified created DEFINER
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcd PROCEDURE root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 set("value1", "value1") ) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
SELECT f1;
END//
+Warnings:
+Note 1291 Column '' has duplicated value 'value1' in SET
CALL sp1( "value1, value1" );
f1
-value1, value1
+value1
+Warnings:
+Note 1291 Column '' has duplicated value 'value1' in SET
+Warning 1265 Data truncated for column 'f1' at row 1
SHOW PROCEDURE status;
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongname2348 PROCEDURE root@localhost modified created DEFINER
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcd PROCEDURE root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 enum("value1", "value1") ) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
SELECT f1;
END//
+Warnings:
+Note 1291 Column '' has duplicated value 'value1' in ENUM
CALL sp1( "value1" );
f1
value1
+Warnings:
+Note 1291 Column '' has duplicated value 'value1' in ENUM
SHOW PROCEDURE status;
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongname2348 PROCEDURE root@localhost modified created DEFINER
-db_storedproc sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcd PROCEDURE root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 text ) language sql SELECT f1;
CALL sp1( 'abc' );
f1
abc
SHOW PROCEDURE status like 'sp1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 text ) deterministic SELECT f1;
CALL sp1( 'abc' );
f1
abc
SHOW PROCEDURE status like 'sp1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 text ) not deterministic SELECT f1;
CALL sp1( 'abc' );
f1
abc
SHOW PROCEDURE status like 'sp1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 text ) sql security definer SELECT f1;
CALL sp1( 'abc' );
f1
abc
SHOW PROCEDURE status like 'sp1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 text ) sql security invoker SELECT f1;
CALL sp1( 'abc' );
f1
abc
SHOW PROCEDURE status like 'sp1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created INVOKER latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( f1 text ) comment 'this is simple' SELECT f1;
CALL sp1( 'abc' );
f1
abc
SHOW PROCEDURE status like 'sp1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp1 PROCEDURE root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp1 PROCEDURE root@localhost modified created DEFINER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE sp1_thisisaveryverylongname234872934_thisisaveryverylongname234872934;
+ERROR 42000: Identifier name 'sp1_thisisaveryverylongname234872934_thisisaveryverylongname234872934' is too long
DROP PROCEDURE sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcde;
+ERROR 42000: Identifier name 'sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcde' is too long
DROP PROCEDURE sp1;
Testcase 4.1.2:
@@ -294,8 +1292,8 @@ SELECT fn1( ' world');
fn1( ' world')
hello world
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created DEFINER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1( f1 smallint ) returns smallint language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
@@ -306,8 +1304,8 @@ SELECT fn1( 126 );
fn1( 126 )
127
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created INVOKER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1( f1 decimal(63, 31) ) returns decimal(63, 31) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
@@ -326,34 +1324,34 @@ SELECT fn1( 1.3326e+8 );
fn1( 1.3326e+8 )
134260000.000000000000000000000000000000
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created INVOKER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1( f1 enum("value1", "value1") ) returns decimal(63, 30) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
return f1;
END//
+Warnings:
+Note 1291 Column '' has duplicated value 'value1' in ENUM
SELECT fn1( "value1" );
fn1( "value1" )
-0.000000000000000000000000000000
-Warnings:
-Warning 1292 Truncated incorrect DECIMAL value: 'value1'
+1.000000000000000000000000000000
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created INVOKER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1( f1 set("value1", "value1") ) returns decimal(63, 30) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
return f1;
END//
+Warnings:
+Note 1291 Column '' has duplicated value 'value1' in SET
SELECT fn1( "value1, value1" );
fn1( "value1, value1" )
-0.000000000000000000000000000000
-Warnings:
-Warning 1292 Truncated incorrect DECIMAL value: 'value1, value1'
+1.000000000000000000000000000000
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created INVOKER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created INVOKER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1( f1 smallint ) returns smallint language sql
BEGIN
@@ -364,8 +1362,8 @@ SELECT fn1( 126 );
fn1( 126 )
127
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1( f1 smallint ) returns smallint deterministic
BEGIN
@@ -376,8 +1374,8 @@ SELECT fn1( 126 );
fn1( 126 )
127
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1( f1 smallint ) returns smallint not deterministic
BEGIN
@@ -388,8 +1386,8 @@ SELECT fn1( 126 );
fn1( 126 )
127
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1( f1 smallint ) returns smallint
sql security definer
@@ -401,8 +1399,8 @@ SELECT fn1( 126 );
fn1( 126 )
127
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1( f1 smallint ) returns smallint
sql security invoker
@@ -414,8 +1412,8 @@ SELECT fn1( 126 );
fn1( 126 )
127
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created INVOKER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created INVOKER latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1( f1 smallint ) returns smallint
comment 'this is simple'
@@ -427,8 +1425,8 @@ SELECT fn1( 126 );
fn1( 126 )
127
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created DEFINER this is simple
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created DEFINER this is simple latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION fn1;
Testcase 4.1.3:
@@ -440,9 +1438,9 @@ DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1 (f1 char(20) )
SELECT * from t1 where f2 = f1;
show CREATE PROCEDURE sp1;
-Procedure sql_mode Create Procedure
-sp1 CREATE PROCEDURE `sp1`(f1 char(20) )
-SELECT * from t1 where f2 = f1
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp1 CREATE DEFINER=`root`@`localhost` PROCEDURE `sp1`(f1 char(20) )
+SELECT * from t1 where f2 = f1 latin1 modified created
DROP PROCEDURE sp1;
Testcase 4.1.4:
@@ -453,9 +1451,9 @@ DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1 (s char(20)) returns char(50)
return concat('hello, ', s, '!');
show CREATE FUNCTION fn1;
-Function sql_mode Create Function
-fn1 CREATE FUNCTION `fn1`(s char(20)) RETURNS char(50)
-return concat('hello, ', s, '!')
+Function sql_mode Create Function character_set_client collation_connection Database Collation
+fn1 CREATE DEFINER=`root`@`localhost` FUNCTION `fn1`(s char(20)) RETURNS char(50) CHARSET latin1
+return concat('hello, ', s, '!') latin1 modified created
DROP FUNCTION fn1;
Testcase 4.1.5:
@@ -465,8 +1463,8 @@ SHOW PROCEDURE status
CREATE PROCEDURE sp5()
SELECT * from t1;
SHOW PROCEDURE status like 'sp5';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp5 PROCEDURE root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp5 PROCEDURE root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE sp5;
Testcase 4.1.6:
@@ -479,8 +1477,8 @@ set @b = 0.9 * a;
return @b;
END//
SHOW FUNCTION STATUS LIKE 'fn5';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn5 FUNCTION root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn5 FUNCTION root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION fn5;
Testcase 4.1.7:
@@ -498,7 +1496,7 @@ CREATE PROCEDURE sp7b (a char (20), out b char(20))
SELECT f1 into b from t1 where t1.f2= a;
CALL sp7b('xyz', @out_param);
Warnings:
-Warning 1329 No data to FETCH
+Warning 1329 No data - zero rows fetched, selected, or processed
SELECT @out_param;
@out_param
NULL
@@ -510,9 +1508,6 @@ SELECT f2 into c from t1 where t1.f2=999;
END//
set @c=1;
CALL sp7c('xyz', @out_param, @c);
-Warnings:
-Warning 1329 No data to FETCH
-Warning 1329 No data to FETCH
SELECT @out_param;
@out_param
NULL
@@ -539,48 +1534,48 @@ Testcase 4.1.9:
drop procedure
--------------------------------------------------------------------------------
SELECT * from mysql.proc where specific_name='sp9';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
DROP PROCEDURE IF EXISTS sp9;
SELECT * from mysql.proc where specific_name='sp9';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
CREATE PROCEDURE sp9()SELECT * from t1;
SELECT * from mysql.proc where specific_name='sp9';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
-db_storedproc sp9 PROCEDURE sp9 SQL CONTAINS_SQL NO DEFINER SELECT * from t1 root@localhost created modified
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
+db_storedproc sp9 PROCEDURE sp9 SQL CONTAINS_SQL NO DEFINER SELECT * from t1 root@localhost created modified latin1 latin1_swedish_ci latin1_swedish_ci SELECT * from t1
DROP PROCEDURE sp9;
SELECT * from mysql.proc where specific_name='sp9';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
CREATE PROCEDURE sp9()SELECT * from t1;
SELECT * from mysql.proc where specific_name='sp9';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
-db_storedproc sp9 PROCEDURE sp9 SQL CONTAINS_SQL NO DEFINER SELECT * from t1 root@localhost created modified
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
+db_storedproc sp9 PROCEDURE sp9 SQL CONTAINS_SQL NO DEFINER SELECT * from t1 root@localhost created modified latin1 latin1_swedish_ci latin1_swedish_ci SELECT * from t1
DROP PROCEDURE IF EXISTS sp9;
SELECT * from mysql.proc where specific_name='sp9';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
Testcase 4.1.10:
----------------
DROP FUNCTION
--------------------------------------------------------------------------------
SELECT * from mysql.proc where specific_name='fn10' and type='function';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
DROP FUNCTION IF EXISTS fn10;
SELECT * from mysql.proc where specific_name='fn10' and type='function';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
CREATE FUNCTION fn10() returns int return 100;
SELECT * from mysql.proc where specific_name='fn10' and type='function';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
-db_storedproc fn10 FUNCTION fn10 SQL CONTAINS_SQL NO DEFINER int(11) return 100 root@localhost created modified
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
+db_storedproc fn10 FUNCTION fn10 SQL CONTAINS_SQL NO DEFINER int(11) return 100 root@localhost created modified latin1 latin1_swedish_ci latin1_swedish_ci return 100
DROP FUNCTION fn10;
SELECT * from mysql.proc where specific_name='fn10' and type='function';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
CREATE FUNCTION fn10() returns int return 100;
SELECT * from mysql.proc where specific_name='fn10' and type='function';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
-db_storedproc fn10 FUNCTION fn10 SQL CONTAINS_SQL NO DEFINER int(11) return 100 root@localhost created modified
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
+db_storedproc fn10 FUNCTION fn10 SQL CONTAINS_SQL NO DEFINER int(11) return 100 root@localhost created modified latin1 latin1_swedish_ci latin1_swedish_ci return 100
DROP FUNCTION IF EXISTS fn10;
SELECT * from mysql.proc where specific_name='fn10' and type='function';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
Testcase 4.1.11:
----------------
@@ -604,6 +1599,7 @@ connect(localhost,user_1,,db_storedproc,MYSQL_PORT,MYSQL_SOCK);
user_1@localhost db_storedproc
CALL sp11();
+USE db_storedproc;
root@localhost db_storedproc
alter procedure sp11 sql security invoker;
@@ -612,6 +1608,7 @@ security_type
INVOKER
user_1@localhost db_storedproc
+USE db_storedproc;
CALL sp11();
ERROR 42000: INSERT command denied to user 'user_1'@'localhost' for table 't1'
commit work;
@@ -705,6 +1702,10 @@ SELECT * from t1 where f2 = f1' at line 1
CREATE PROCEDURE function()
SELECT * from t1 where f2=f1;
DROP PROCEDURE function;
+CREATE PROCEDURE accessible()
+SELECT * from t1 where f2=f1;
+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 'accessible()
+SELECT * from t1 where f2=f1' at line 1
CREATE PROCEDURE add()
SELECT * from t1 where f2=f1;
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 'add()
@@ -765,9 +1766,9 @@ CREATE PROCEDURE by()
SELECT * from t1 where f2=f1;
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 'by()
SELECT * from t1 where f2=f1' at line 1
-CREATE PROCEDURE CALL()
+CREATE PROCEDURE call()
SELECT * from t1 where f2=f1;
-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 'CALL()
+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 'call()
SELECT * from t1 where f2=f1' at line 1
CREATE PROCEDURE cascade()
SELECT * from t1 where f2=f1;
@@ -801,17 +1802,10 @@ CREATE PROCEDURE column()
SELECT * from t1 where f2=f1;
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 'column()
SELECT * from t1 where f2=f1' at line 1
-CREATE PROCEDURE columns()
-SELECT * from t1 where f2=f1;
-DROP PROCEDURE columns;
CREATE PROCEDURE condition()
SELECT * from t1 where f2=f1;
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 'condition()
SELECT * from t1 where f2=f1' at line 1
-CREATE PROCEDURE connection()
-SELECT * from t1 where f2=f1;
-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 'connection()
-SELECT * from t1 where f2=f1' at line 1
CREATE PROCEDURE constraint()
SELECT * from t1 where f2=f1;
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 'constraint()
@@ -995,9 +1989,6 @@ CREATE PROCEDURE foreign()
SELECT * from t1 where f2=f1;
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 'foreign()
SELECT * from t1 where f2=f1' at line 1
-CREATE PROCEDURE found()
-SELECT * from t1 where f2=f1;
-DROP PROCEDURE found;
CREATE PROCEDURE from()
SELECT * from t1 where f2=f1;
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 'from()
@@ -1006,9 +1997,6 @@ CREATE PROCEDURE fulltext()
SELECT * from t1 where f2=f1;
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 'fulltext()
SELECT * from t1 where f2=f1' at line 1
-CREATE PROCEDURE goto()
-SELECT * from t1 where f2=f1;
-DROP PROCEDURE goto;
CREATE PROCEDURE grant()
SELECT * from t1 where f2=f1;
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 'grant()
@@ -1077,6 +2065,26 @@ CREATE PROCEDURE int()
SELECT * from t1 where f2=f1;
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 'int()
SELECT * from t1 where f2=f1' at line 1
+CREATE PROCEDURE int1()
+SELECT * from t1 where f2=f1;
+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 'int1()
+SELECT * from t1 where f2=f1' at line 1
+CREATE PROCEDURE int2()
+SELECT * from t1 where f2=f1;
+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 'int2()
+SELECT * from t1 where f2=f1' at line 1
+CREATE PROCEDURE int3()
+SELECT * from t1 where f2=f1;
+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 'int3()
+SELECT * from t1 where f2=f1' at line 1
+CREATE PROCEDURE int4()
+SELECT * from t1 where f2=f1;
+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 'int4()
+SELECT * from t1 where f2=f1' at line 1
+CREATE PROCEDURE int8()
+SELECT * from t1 where f2=f1;
+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 'int8()
+SELECT * from t1 where f2=f1' at line 1
CREATE PROCEDURE integer()
SELECT * from t1 where f2=f1;
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 'integer()
@@ -1133,6 +2141,10 @@ CREATE PROCEDURE limit()
SELECT * from t1 where f2=f1;
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 'limit()
SELECT * from t1 where f2=f1' at line 1
+CREATE PROCEDURE linear()
+SELECT * from t1 where f2=f1;
+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 'linear()
+SELECT * from t1 where f2=f1' at line 1
CREATE PROCEDURE lines()
SELECT * from t1 where f2=f1;
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 'lines()
@@ -1173,6 +2185,10 @@ CREATE PROCEDURE low_priority()
SELECT * from t1 where f2=f1;
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 'low_priority()
SELECT * from t1 where f2=f1' at line 1
+CREATE PROCEDURE master_ssl_verify_server_cert()
+SELECT * from t1 where f2=f1;
+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 'master_ssl_verify_server_cert()
+SELECT * from t1 where f2=f1' at line 1
CREATE PROCEDURE match()
SELECT * from t1 where f2=f1;
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 'match()
@@ -1273,9 +2289,6 @@ CREATE PROCEDURE primary()
SELECT * from t1 where f2=f1;
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 'primary()
SELECT * from t1 where f2=f1' at line 1
-CREATE PROCEDURE privileges()
-SELECT * from t1 where f2=f1;
-DROP PROCEDURE privileges;
CREATE PROCEDURE procedure()
SELECT * from t1 where f2=f1;
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 'procedure()
@@ -1284,6 +2297,10 @@ CREATE PROCEDURE purge()
SELECT * from t1 where f2=f1;
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 'purge()
SELECT * from t1 where f2=f1' at line 1
+CREATE PROCEDURE range()
+SELECT * from t1 where f2=f1;
+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 'range()
+SELECT * from t1 where f2=f1' at line 1
CREATE PROCEDURE read()
SELECT * from t1 where f2=f1;
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 'read()
@@ -1304,6 +2321,10 @@ CREATE PROCEDURE regexp()
SELECT * from t1 where f2=f1;
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 'regexp()
SELECT * from t1 where f2=f1' at line 1
+CREATE PROCEDURE release()
+SELECT * from t1 where f2=f1;
+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 'release()
+SELECT * from t1 where f2=f1' at line 1
CREATE PROCEDURE rename()
SELECT * from t1 where f2=f1;
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 'rename()
@@ -1376,10 +2397,6 @@ CREATE PROCEDURE smallint()
SELECT * from t1 where f2=f1;
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 'smallint()
SELECT * from t1 where f2=f1' at line 1
-CREATE PROCEDURE soname()
-SELECT * from t1 where f2=f1;
-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 'soname()
-SELECT * from t1 where f2=f1' at line 1
CREATE PROCEDURE spatial()
SELECT * from t1 where f2=f1;
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 'spatial()
@@ -1432,9 +2449,6 @@ CREATE PROCEDURE table()
SELECT * from t1 where f2=f1;
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 'table()
SELECT * from t1 where f2=f1' at line 1
-CREATE PROCEDURE tables()
-SELECT * from t1 where f2=f1;
-DROP PROCEDURE tables;
CREATE PROCEDURE terminated()
SELECT * from t1 where f2=f1;
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 'terminated()
@@ -1725,6 +2739,26 @@ CREATE FUNCTION int(f1 int) returns int
return f1;
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 'int(f1 int) returns int
return f1' at line 1
+CREATE FUNCTION int1(f1 int1) returns int1
+return f1;
+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 'int1(f1 int1) returns int1
+return f1' at line 1
+CREATE FUNCTION int2(f1 int2) returns int2
+return f1;
+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 'int2(f1 int2) returns int2
+return f1' at line 1
+CREATE FUNCTION int3(f1 int3) returns int3
+return f1;
+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 'int3(f1 int3) returns int3
+return f1' at line 1
+CREATE FUNCTION int4(f1 int4) returns int4
+return f1;
+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 'int4(f1 int4) returns int4
+return f1' at line 1
+CREATE FUNCTION int8(f1 int8) returns int8
+return f1;
+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 'int8(f1 int8) returns int8
+return f1' at line 1
CREATE FUNCTION int unsigned(f1 int unsigned) returns int unsigned
return f1;
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 'int unsigned(f1 int unsigned) returns int unsigned
@@ -1846,485 +2880,291 @@ return f' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(char f1 ) returns char
+CREATE FUNCTION fn1(f1 char ) returns char
return f1;
-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 'char f1 ) returns char
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(char binary f1 ) returns char binary
+CREATE FUNCTION fn1(f1 char binary ) returns char binary
return f1;
-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 'char binary f1 ) returns char binary
-return f1' at line 1
+ERROR 42000: This version of MySQL doesn't yet support 'return value collation'
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(char ascii f1 ) returns char ascii
+CREATE FUNCTION fn1(f1 char ascii ) returns char ascii
return f1;
-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 'char ascii f1 ) returns char ascii
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(char not null f1 ) returns char not null
+CREATE FUNCTION fn1(f1 char not null ) returns char not null
return f1;
-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 'char not null f1 ) returns char not null
+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 'not null ) returns char not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(char binary not null f1 ) returns char binary not null
+CREATE FUNCTION fn1(f1 char binary not null ) returns char binary not null
return f1;
-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 'char binary not null f1 ) returns char binary not null
+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 'not null ) returns char binary not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(char ascii not null f1 ) returns char ascii not null
+CREATE FUNCTION fn1(f1 char ascii not null ) returns char ascii not null
return f1;
-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 'char ascii not null f1 ) returns char ascii not null
+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 'not null ) returns char ascii not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(tinytext f1 ) returns tinytext
+CREATE FUNCTION fn1(f1 tinytext ) returns tinytext
return f1;
-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 'tinytext f1 ) returns tinytext
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(text f1 ) returns text
+CREATE FUNCTION fn1(f1 text ) returns text
return f1;
-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 'f1 ) returns text
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(mediumtext f1 ) returns mediumtext
+CREATE FUNCTION fn1(f1 mediumtext ) returns mediumtext
return f1;
-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 'mediumtext f1 ) returns mediumtext
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(longtext f1 ) returns longtext
+CREATE FUNCTION fn1(f1 longtext ) returns longtext
return f1;
-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 'longtext f1 ) returns longtext
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(tinytext not null f1 ) returns tinytext not null
+CREATE FUNCTION fn1(f1 tinytext not null ) returns tinytext not null
return f1;
-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 'tinytext not null f1 ) returns tinytext not null
+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 'not null ) returns tinytext not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(text not null f1 ) returns text not null
+CREATE FUNCTION fn1(f1 text not null ) returns text not null
return f1;
-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 'not null f1 ) returns text not null
+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 'not null ) returns text not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(mediumtext not null f1 ) returns mediumtext not null
+CREATE FUNCTION fn1(f1 mediumtext not null ) returns mediumtext not null
return f1;
-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 'mediumtext not null f1 ) returns mediumtext not null
+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 'not null ) returns mediumtext not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(longtext not null f1 ) returns longtext not null
+CREATE FUNCTION fn1(f1 longtext not null ) returns longtext not null
return f1;
-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 'longtext not null f1 ) returns longtext not null
+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 'not null ) returns longtext not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(tinyblob f1 ) returns tinyblob
+CREATE FUNCTION fn1(f1 tinyblob ) returns tinyblob
return f1;
-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 'tinyblob f1 ) returns tinyblob
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(blob f1 ) returns blob
+CREATE FUNCTION fn1(f1 blob ) returns blob
return f1;
-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 'blob f1 ) returns blob
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(mediumblob f1 ) returns mediumblob
+CREATE FUNCTION fn1(f1 mediumblob ) returns mediumblob
return f1;
-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 'mediumblob f1 ) returns mediumblob
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(longblob f1 ) returns longblob
+CREATE FUNCTION fn1(f1 longblob ) returns longblob
return f1;
-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 'longblob f1 ) returns longblob
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(tinyblob not null f1 ) returns tinyblob not null
+CREATE FUNCTION fn1(f1 tinyblob not null ) returns tinyblob not null
return f1;
-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 'tinyblob not null f1 ) returns tinyblob not null
+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 'not null ) returns tinyblob not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(blob not null f1 ) returns blob not null
+CREATE FUNCTION fn1(f1 blob not null ) returns blob not null
return f1;
-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 'blob not null f1 ) returns blob not null
+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 'not null ) returns blob not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(mediumblob not null f1 ) returns mediumblob not null
+CREATE FUNCTION fn1(f1 mediumblob not null ) returns mediumblob not null
return f1;
-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 'mediumblob not null f1 ) returns mediumblob not null
+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 'not null ) returns mediumblob not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(longblob not null f1 ) returns longblob not null
+CREATE FUNCTION fn1(f1 longblob not null ) returns longblob not null
return f1;
-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 'longblob not null f1 ) returns longblob not null
+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 'not null ) returns longblob not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(binary f1 ) returns binary
+CREATE FUNCTION fn1(f1 binary ) returns binary
return f1;
-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 'binary f1 ) returns binary
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(binary not null f1 ) returns binary not null
+CREATE FUNCTION fn1(f1 binary not null ) returns binary not null
return f1;
-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 'binary not null f1 ) returns binary not null
+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 'not null ) returns binary not null
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(tinyint f1 ) returns tinyint
+CREATE FUNCTION fn1(f1 tinyint ) returns tinyint
return f1;
-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 'tinyint f1 ) returns tinyint
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(tinyint unsigned f1 ) returns tinyint unsigned
+CREATE FUNCTION fn1(f1 tinyint unsigned ) returns tinyint unsigned
return f1;
-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 'tinyint unsigned f1 ) returns tinyint unsigned
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(tinyint zerofill f1 ) returns tinyint zerofill
+CREATE FUNCTION fn1(f1 tinyint zerofill ) returns tinyint zerofill
return f1;
-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 'tinyint zerofill f1 ) returns tinyint zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(tinyint unsigned zerofill f1 ) returns tinyint unsigned zerofill
+CREATE FUNCTION fn1(f1 tinyint unsigned zerofill ) returns tinyint unsigned zerofill
return f1;
-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 'tinyint unsigned zerofill f1 ) returns tinyint unsigned zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(smallint f1 ) returns smallint
+CREATE FUNCTION fn1(f1 smallint ) returns smallint
return f1;
-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 'smallint f1 ) returns smallint
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(smallint unsigned f1 ) returns smallint unsigned
+CREATE FUNCTION fn1(f1 smallint unsigned ) returns smallint unsigned
return f1;
-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 'smallint unsigned f1 ) returns smallint unsigned
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(smallint zerofill f1 ) returns smallint zerofill
+CREATE FUNCTION fn1(f1 smallint zerofill ) returns smallint zerofill
return f1;
-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 'smallint zerofill f1 ) returns smallint zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(smallint unsigned zerofill f1 ) returns smallint unsigned zerofill
+CREATE FUNCTION fn1(f1 smallint unsigned zerofill ) returns smallint unsigned zerofill
return f1;
-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 'smallint unsigned zerofill f1 ) returns smallint unsigned zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(mediumint f1 ) returns mediumint
+CREATE FUNCTION fn1(f1 mediumint ) returns mediumint
return f1;
-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 'mediumint f1 ) returns mediumint
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(mediumint unsigned f1 ) returns mediumint unsigned
+CREATE FUNCTION fn1(f1 mediumint unsigned ) returns mediumint unsigned
return f1;
-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 'mediumint unsigned f1 ) returns mediumint unsigned
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(mediumint zerofill f1 ) returns mediumint zerofill
+CREATE FUNCTION fn1(f1 mediumint zerofill ) returns mediumint zerofill
return f1;
-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 'mediumint zerofill f1 ) returns mediumint zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(mediumint unsigned zerofill f1 ) returns mediumint unsigned zerofill
+CREATE FUNCTION fn1(f1 mediumint unsigned zerofill ) returns mediumint unsigned zerofill
return f1;
-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 'mediumint unsigned zerofill f1 ) returns mediumint unsigned zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(int f1 ) returns int
+CREATE FUNCTION fn1(f1 int ) returns int
return f1;
-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 'int f1 ) returns int
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(int unsigned f1 ) returns int unsigned
+CREATE FUNCTION fn1(f1 int unsigned ) returns int unsigned
return f1;
-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 'int unsigned f1 ) returns int unsigned
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(int zerofill f1 ) returns int zerofill
+CREATE FUNCTION fn1(f1 int1 unsigned ) returns int1 unsigned
return f1;
-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 'int zerofill f1 ) returns int zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(int unsigned zerofill f1 ) returns int unsigned zerofill
+CREATE FUNCTION fn1(f1 int2 unsigned ) returns int2 unsigned
return f1;
-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 'int unsigned zerofill f1 ) returns int unsigned zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(bigint f1 ) returns bigint
+CREATE FUNCTION fn1(f1 int3 unsigned ) returns int3 unsigned
return f1;
-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 'bigint f1 ) returns bigint
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(bigint unsigned f1 ) returns bigint unsigned
+CREATE FUNCTION fn1(f1 int4 unsigned ) returns int4 unsigned
return f1;
-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 'bigint unsigned f1 ) returns bigint unsigned
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(bigint zerofill f1 ) returns bigint zerofill
+CREATE FUNCTION fn1(f1 int8 unsigned ) returns int8 unsigned
return f1;
-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 'bigint zerofill f1 ) returns bigint zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(bigint unsigned zerofill f1 ) returns bigint unsigned zerofill
+CREATE FUNCTION fn1(f1 int zerofill ) returns int zerofill
return f1;
-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 'bigint unsigned zerofill f1 ) returns bigint unsigned zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(decimal f1 ) returns decimal
+CREATE FUNCTION fn1(f1 int unsigned zerofill ) returns int unsigned zerofill
return f1;
-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 'decimal f1 ) returns decimal
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(decimal unsigned f1 ) returns decimal unsigned
+CREATE FUNCTION fn1(f1 bigint ) returns bigint
return f1;
-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 'decimal unsigned f1 ) returns decimal unsigned
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(decimal zerofill f1 ) returns decimal zerofill
+CREATE FUNCTION fn1(f1 bigint unsigned ) returns bigint unsigned
return f1;
-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 'decimal zerofill f1 ) returns decimal zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(decimal unsigned zerofill f1 ) returns decimal unsigned zerofill
+CREATE FUNCTION fn1(f1 bigint zerofill ) returns bigint zerofill
return f1;
-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 'decimal unsigned zerofill f1 ) returns decimal unsigned zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(numeric f1 ) returns numeric
+CREATE FUNCTION fn1(f1 bigint unsigned zerofill ) returns bigint unsigned zerofill
return f1;
-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 'numeric f1 ) returns numeric
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(numeric unsigned f1 ) returns numeric unsigned
+CREATE FUNCTION fn1(f1 decimal ) returns decimal
return f1;
-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 'numeric unsigned f1 ) returns numeric unsigned
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(numeric zerofill f1 ) returns numeric zerofill
+CREATE FUNCTION fn1(f1 decimal unsigned ) returns decimal unsigned
return f1;
-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 'numeric zerofill f1 ) returns numeric zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(numeric unsigned zerofill f1 ) returns numeric unsigned zerofill
+CREATE FUNCTION fn1(f1 decimal zerofill ) returns decimal zerofill
return f1;
-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 'numeric unsigned zerofill f1 ) returns numeric unsigned zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(real f1 ) returns real
+CREATE FUNCTION fn1(f1 decimal unsigned zerofill ) returns decimal unsigned zerofill
return f1;
-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 'real f1 ) returns real
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(real unsigned f1 ) returns real unsigned
+CREATE FUNCTION fn1(f1 numeric ) returns numeric
return f1;
-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 'real unsigned f1 ) returns real unsigned
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(real zerofill f1 ) returns real zerofill
+CREATE FUNCTION fn1(f1 numeric unsigned ) returns numeric unsigned
return f1;
-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 'real zerofill f1 ) returns real zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(real unsigned zerofill f1 ) returns real unsigned zerofill
+CREATE FUNCTION fn1(f1 numeric zerofill ) returns numeric zerofill
return f1;
-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 'real unsigned zerofill f1 ) returns real unsigned zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(float f1 ) returns float
+CREATE FUNCTION fn1(f1 numeric unsigned zerofill ) returns numeric unsigned zerofill
return f1;
-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 'float f1 ) returns float
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(float unsigned f1 ) returns float unsigned
+CREATE FUNCTION fn1(f1 real ) returns real
return f1;
-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 'float unsigned f1 ) returns float unsigned
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(float zerofill f1 ) returns float zerofill
+CREATE FUNCTION fn1(f1 real unsigned ) returns real unsigned
return f1;
-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 'float zerofill f1 ) returns float zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(float unsigned zerofill f1 ) returns float unsigned zerofill
+CREATE FUNCTION fn1(f1 real zerofill ) returns real zerofill
return f1;
-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 'float unsigned zerofill f1 ) returns float unsigned zerofill
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(date f1 ) returns date
+CREATE FUNCTION fn1(f1 real unsigned zerofill ) returns real unsigned zerofill
return f1;
-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 'f1 ) returns date
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(time f1 ) returns time
+CREATE FUNCTION fn1(f1 float ) returns float
return f1;
-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 'f1 ) returns time
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(datetime f1 ) returns datetime
+CREATE FUNCTION fn1(f1 float unsigned ) returns float unsigned
return f1;
-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 'f1 ) returns datetime
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(timestamp f1 ) returns timestamp
+CREATE FUNCTION fn1(f1 float zerofill ) returns float zerofill
return f1;
-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 'f1 ) returns timestamp
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(year f1 ) returns year
+CREATE FUNCTION fn1(f1 float unsigned zerofill ) returns float unsigned zerofill
return f1;
-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 'f1 ) returns year
-return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
-Warnings:
-Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(year(3) f1 ) returns year(3)
+CREATE FUNCTION fn1(f1 date ) returns date
return f1;
-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 '(3) f1 ) returns year(3)
+DROP FUNCTION IF EXISTS fn1;
+CREATE FUNCTION fn1(f1 time ) returns time
+return f1;
+DROP FUNCTION IF EXISTS fn1;
+CREATE FUNCTION fn1(f1 datetime ) returns datetime
+return f1;
+DROP FUNCTION IF EXISTS fn1;
+CREATE FUNCTION fn1(f1 timestamp ) returns timestamp
+return f1;
+DROP FUNCTION IF EXISTS fn1;
+CREATE FUNCTION fn1(f1 year ) returns year
+return f1;
+DROP FUNCTION IF EXISTS fn1;
+CREATE FUNCTION fn1(f1 year(f1 3) ) returns year(3)
+return f1;
+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 'f1 3) ) returns year(3)
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(year(4) f1 ) returns year(4)
+CREATE FUNCTION fn1(f1 year(f1 4) ) returns year(4)
return f1;
-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 '(4) f1 ) returns year(4)
+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 'f1 4) ) returns year(4)
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(enum("1enum", "2enum") f1 ) returns enum("1enum", "2enum")
+CREATE FUNCTION fn1(f1 enum(f1 "1enum", "2enum") ) returns enum("1enum", "2enum")
return f1;
-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 '("1enum", "2enum") f1 ) returns enum("1enum", "2enum")
+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 'f1 "1enum", "2enum") ) returns enum("1enum", "2enum")
return f1' at line 1
DROP FUNCTION IF EXISTS fn1;
Warnings:
Note 1305 FUNCTION fn1 does not exist
-CREATE FUNCTION fn1(set("1set", "2set") f1 ) returns set("1set", "2set")
+CREATE FUNCTION fn1(f1 set(f1 "1set", "2set") ) returns set("1set", "2set")
return f1;
-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("1set", "2set") f1 ) returns set("1set", "2set")
+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 'f1 "1set", "2set") ) returns set("1set", "2set")
return f1' at line 1
Testcase 4.1.16:
@@ -2564,15 +3404,15 @@ alter function sp1 sql security invoker comment 'this is a function';
alter procedure sp1 sql security definer;
alter function sp1 sql security definer;
show CREATE PROCEDURE sp1;
-Procedure sql_mode Create Procedure
-sp1 CREATE PROCEDURE `sp1`()
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp1 CREATE DEFINER=`root`@`localhost` PROCEDURE `sp1`()
COMMENT 'this is a procedure'
-set @x= 3
+set @x= 3 latin1 modified created
show CREATE FUNCTION sp1;
-Function sql_mode Create Function
-sp1 CREATE FUNCTION `sp1`() RETURNS int(11)
+Function sql_mode Create Function character_set_client collation_connection Database Collation
+sp1 CREATE DEFINER=`root`@`localhost` FUNCTION `sp1`() RETURNS int(11)
COMMENT 'this is a function'
-return 4
+return 4 latin1 modified created
USE db_storedproc;
DROP DATABASE db_storedproc_3122;
DROP FUNCTION db_storedproc.sp1;
@@ -2789,7 +3629,7 @@ SELECT count(*) into cnt from t2;
set @count = cnt;
SELECT @count;
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 'SELECT count(*) into cnt from t2;
+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 @count = cnt;
SELECT @count;
END' at line 2
@@ -2841,6 +3681,14 @@ Testcase ....:
--------------------------------------------------------------------------------
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
+accessible:BEGIN
+SELECT @x;
+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 'accessible:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
add:BEGIN
SELECT @x;
END//
@@ -2860,9 +3708,7 @@ CREATE PROCEDURE sp1()
alter:BEGIN
SELECT @x;
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 ':BEGIN
-SELECT @x;
-END' at line 2
+ERROR 0A000: ALTER VIEW is not allowed in stored procedures
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
analyze:BEGIN
@@ -2961,7 +3807,7 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
-CALL:BEGIN
+call:BEGIN
SELECT @x;
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 ':BEGIN
@@ -3033,11 +3879,6 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
-columns:BEGIN
-SELECT @x;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
condition:BEGIN
SELECT @x;
END//
@@ -3046,14 +3887,6 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
-connection:BEGIN
-SELECT @x;
-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 'connection:BEGIN
-SELECT @x;
-END' at line 2
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
constraint:BEGIN
SELECT @x;
END//
@@ -3382,15 +4215,26 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
-fields:BEGIN
+float:BEGIN
SELECT @x;
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 'float:BEGIN
+SELECT @x;
+END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
-float:BEGIN
+float4:BEGIN
SELECT @x;
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 'float:BEGIN
+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 'float4:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+float8:BEGIN
+SELECT @x;
+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 'float8:BEGIN
SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
@@ -3419,11 +4263,6 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
-found:BEGIN
-SELECT @x;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
from:BEGIN
SELECT @x;
END//
@@ -3440,11 +4279,6 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
-goto:BEGIN
-SELECT @x;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
grant:BEGIN
SELECT @x;
END//
@@ -3581,6 +4415,46 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
+int1:BEGIN
+SELECT @x;
+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 'int1:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+int2:BEGIN
+SELECT @x;
+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 'int2:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+int3:BEGIN
+SELECT @x;
+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 'int3:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+int4:BEGIN
+SELECT @x;
+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 'int4:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+int8:BEGIN
+SELECT @x;
+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 'int8:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
integer:BEGIN
SELECT @x;
END//
@@ -3693,6 +4567,14 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
+linear:BEGIN
+SELECT @x;
+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 'linear:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
lines:BEGIN
SELECT @x;
END//
@@ -3773,6 +4655,14 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
+master_ssl_verify_server_cert:BEGIN
+SELECT @x;
+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 'master_ssl_verify_server_cert:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
match:BEGIN
SELECT @x;
END//
@@ -3973,11 +4863,6 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
-privileges:BEGIN
-SELECT @x;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
procedure:BEGIN
SELECT @x;
END//
@@ -3994,6 +4879,14 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
+range:BEGIN
+SELECT @x;
+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 'range:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
read:BEGIN
SELECT @x;
END//
@@ -4010,6 +4903,22 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
+read_only:BEGIN
+SELECT @x;
+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 'read_only:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+read_write:BEGIN
+SELECT @x;
+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 'read_write:BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
real:BEGIN
SELECT @x;
END//
@@ -4034,6 +4943,14 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
+release:BEGIN
+SELECT @x;
+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 ':BEGIN
+SELECT @x;
+END' at line 2
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
rename:BEGIN
SELECT @x;
END//
@@ -4178,14 +5095,6 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
-soname:BEGIN
-SELECT @x;
-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 'soname:BEGIN
-SELECT @x;
-END' at line 2
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
spatial:BEGIN
SELECT @x;
END//
@@ -4290,11 +5199,6 @@ SELECT @x;
END' at line 2
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
-tables:BEGIN
-SELECT @x;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
terminated:BEGIN
SELECT @x;
END//
@@ -4587,6 +5491,9 @@ END begin_label//
CALL sp1();
@v1 @v2
1 2
+Warnings:
+Warning 1265 Data truncated for column 'x' at row 1
+Warning 1265 Data truncated for column 'y' at row 1
DROP PROCEDURE sp1;
Testcase 4.2.7:
@@ -4621,6 +5528,9 @@ declare y char;
SELECT f1, f2 into x, y from t2 limit 1;
END//
CALL sp1();
+Warnings:
+Warning 1265 Data truncated for column 'x' at row 1
+Warning 1265 Data truncated for column 'y' at row 1
DROP PROCEDURE sp1;
Testcase 4.2.9:
@@ -4684,8 +5594,6 @@ Ensure that the variables, cursors, conditions, and handlers declared for
a stored procedure (with the declare statement) may only be properly defined
--------------------------------------------------------------------------------
DROP PROCEDURE IF EXISTS sp6;
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed: DECIMAL(255,255) is not rejected
CREATE PROCEDURE sp6( )
BEGIN
declare x char default 'a';
@@ -4703,9 +5611,9 @@ fetch cur1 into e;
SELECT x, y, z, a, b, c, d, e;
close cur1;
END//
+ERROR 42000: Too big scale 255 specified for column ''. Maximum is 30.
CALL sp6();
-x y z a b c d e
-a 1 1.1 value1 1200000000000 mediumtext 2005-02-02 12:12:12 a`
+ERROR 42000: PROCEDURE db_storedproc.sp6 does not exist
DROP PROCEDURE IF EXISTS sp6;
CREATE PROCEDURE sp6( )
BEGIN
@@ -5828,13 +6736,6 @@ declare continue handler for sqlstate '23000' set @x2 = 1;
declare x char;
END//
ERROR 42000: Variable or condition declaration after cursor or handler declaration
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
-BEGIN
-declare continue handler for sqlstate '23000' set @x2 = 1;
-declare x char;
-END//
-ERROR 42000: Variable or condition declaration after cursor or handler declaration
DROP PROCEDURE IF EXISTS sp6;
CREATE PROCEDURE sp6( )
BEGIN
@@ -5864,6 +6765,15 @@ Ensure that the declare statement can declare multiple variables both separately
and all at once from a variable list. (multiple declaration)
--------------------------------------------------------------------------------
DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
+DECLARE x1 CHAR(100) DEFAULT 'outer';
+BEGIN
+DECLARE x1 CHAR(100) DEFAULT x1;
+END;
+END//
+CALL sp1();
+DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
declare x, y, z char default null;
@@ -5988,7 +6898,11 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
--1 -1 -1
+000 000 000
+Warnings:
+Warning 1264 Out of range value for column 'x' at row 1
+Warning 1264 Out of range value for column 'y' at row 1
+Warning 1264 Out of range value for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -5997,7 +6911,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1 1 1
+001 001 001
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6024,7 +6938,11 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
--1 -1 -1
+00000 00000 00000
+Warnings:
+Warning 1264 Out of range value for column 'x' at row 1
+Warning 1264 Out of range value for column 'y' at row 1
+Warning 1264 Out of range value for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6033,7 +6951,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1 1 1
+00001 00001 00001
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6060,7 +6978,11 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
--1 -1 -1
+00000000 00000000 00000000
+Warnings:
+Warning 1264 Out of range value for column 'x' at row 1
+Warning 1264 Out of range value for column 'y' at row 1
+Warning 1264 Out of range value for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6069,7 +6991,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1 1 1
+00000001 00000001 00000001
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6096,7 +7018,11 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
--1 -1 -1
+0000000000 0000000000 0000000000
+Warnings:
+Warning 1264 Out of range value for column 'x' at row 1
+Warning 1264 Out of range value for column 'y' at row 1
+Warning 1264 Out of range value for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6105,7 +7031,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1 1 1
+0000000001 0000000001 0000000001
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6123,7 +7049,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
--1 -1 -1
+18446744073709551615 18446744073709551615 18446744073709551615
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6132,7 +7058,11 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
--1 -1 -1
+00000000000000000000 00000000000000000000 00000000000000000000
+Warnings:
+Warning 1264 Out of range value for column 'x' at row 1
+Warning 1264 Out of range value for column 'y' at row 1
+Warning 1264 Out of range value for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6141,7 +7071,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1 1 1
+00000000000000000001 00000000000000000001 00000000000000000001
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6150,18 +7080,24 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
--34028234660123456789012345678901234567 -34028234660123456789012345678901234567 -34028234660123456789012345678901234567
+-9999999999 -9999999999 -9999999999
+Warnings:
+Warning 1264 Out of range value for column 'x' at row 1
+Warning 1264 Out of range value for column 'y' at row 1
+Warning 1264 Out of range value for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
declare x, y, z decimal unsigned default 1.175494351e-38;
SELECT x, y, z;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed: default (10,0) for DECIMAL not checked
CALL sp1();
x y z
-0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351
+0 0 0
+Warnings:
+Note 1265 Data truncated for column 'x' at row 1
+Note 1265 Data truncated for column 'y' at row 1
+Note 1265 Data truncated for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6170,62 +7106,76 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
--34028234660123456789012345678901234567 -34028234660123456789012345678901234567 -34028234660123456789012345678901234567
+0000000000 0000000000 0000000000
+Warnings:
+Warning 1264 Out of range value for column 'x' at row 1
+Warning 1264 Out of range value for column 'y' at row 1
+Warning 1264 Out of range value for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
declare x, y, z decimal unsigned zerofill default 1.175494351e-38;
SELECT x, y, z;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed: default (10,0) for DECIMAL not checked
CALL sp1();
x y z
-0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351
+0000000000 0000000000 0000000000
+Warnings:
+Note 1265 Data truncated for column 'x' at row 1
+Note 1265 Data truncated for column 'y' at row 1
+Note 1265 Data truncated for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
declare x, y, z numeric default 1.175494351e-38;
SELECT x, y, z;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed: default (10,0) for DECIMAL not checked
CALL sp1();
x y z
-0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351
+0 0 0
+Warnings:
+Note 1265 Data truncated for column 'x' at row 1
+Note 1265 Data truncated for column 'y' at row 1
+Note 1265 Data truncated for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
declare x, y, z numeric unsigned default 1.175494351e-38;
SELECT x, y, z;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed: default (10,0) for DECIMAL not checked
CALL sp1();
x y z
-0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351
+0 0 0
+Warnings:
+Note 1265 Data truncated for column 'x' at row 1
+Note 1265 Data truncated for column 'y' at row 1
+Note 1265 Data truncated for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
declare x, y, z numeric zerofill default 1.175494351e-38;
SELECT x, y, z;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed: default (10,0) for DECIMAL not checked
CALL sp1();
x y z
-0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351
+0000000000 0000000000 0000000000
+Warnings:
+Note 1265 Data truncated for column 'x' at row 1
+Note 1265 Data truncated for column 'y' at row 1
+Note 1265 Data truncated for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
declare x, y, z numeric unsigned zerofill default 1.175494351e-38;
SELECT x, y, z;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed: default (10,0) for DECIMAL not checked
CALL sp1();
x y z
-0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351 0.00000000000000000000000000000000000001175494351
+0000000000 0000000000 0000000000
+Warnings:
+Note 1265 Data truncated for column 'x' at row 1
+Note 1265 Data truncated for column 'y' at row 1
+Note 1265 Data truncated for column 'z' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6252,7 +7202,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1.175494351e-38 1.175494351e-38 1.175494351e-38
+00000001.175494351e-38 00000001.175494351e-38 00000001.175494351e-38
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6261,7 +7211,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1.175494351e-38 1.175494351e-38 1.175494351e-38
+00000001.175494351e-38 00000001.175494351e-38 00000001.175494351e-38
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6270,7 +7220,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1.175494351e-38 1.175494351e-38 1.175494351e-38
+1.17549e-38 1.17549e-38 1.17549e-38
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6279,7 +7229,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1.175494351e-38 1.175494351e-38 1.175494351e-38
+1.17549e-38 1.17549e-38 1.17549e-38
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6288,7 +7238,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1.175494351e-38 1.175494351e-38 1.175494351e-38
+01.17549e-38 01.17549e-38 01.17549e-38
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6297,7 +7247,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-1.175494351e-38 1.175494351e-38 1.175494351e-38
+01.17549e-38 01.17549e-38 01.17549e-38
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6333,7 +7283,7 @@ SELECT x, y, z;
END//
CALL sp1();
x y z
-20050202122012 20050202122012 20050202122012
+2005-02-02 12:20:12 2005-02-02 12:20:12 2005-02-02 12:20:12
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
@@ -6419,6 +7369,13 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
+declare accessible char;
+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 'accessible char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
declare add char;
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 'add char;
@@ -6524,9 +7481,9 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
-declare CALL char;
+declare call char;
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 'CALL char;
+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 'call char;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
@@ -6587,11 +7544,6 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
-declare columns char;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
-BEGIN
declare condition char;
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 'condition char;
@@ -6599,13 +7551,6 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
-declare connection char;
-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 'connection char;
-END' at line 3
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
-BEGIN
declare constraint char;
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 'constraint char;
@@ -6893,14 +7838,23 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
-declare fields char;
+declare float char;
+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 'float char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
+declare float4 char;
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 'float4 char;
+END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
-declare float char;
+declare float8 char;
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 'float char;
+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 'float8 char;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
@@ -6926,11 +7880,6 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
-declare found char;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
-BEGIN
declare from char;
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 'from char;
@@ -6945,11 +7894,6 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
-declare goto char;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
-BEGIN
declare grant char;
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 'grant char;
@@ -7069,6 +8013,41 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
+declare int1 char;
+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 'int1 char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
+declare int2 char;
+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 'int2 char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
+declare int3 char;
+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 'int3 char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
+declare int4 char;
+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 'int4 char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
+declare int8 char;
+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 'int8 char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
declare integer char;
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 'integer char;
@@ -7167,6 +8146,13 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
+declare linear char;
+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 'linear char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
declare lines char;
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 'lines char;
@@ -7237,6 +8223,13 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
+declare master_ssl_verify_server_cert char;
+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 'master_ssl_verify_server_cert char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
declare match char;
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 'match char;
@@ -7412,11 +8405,6 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
-declare privileges char;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
-BEGIN
declare procedure char;
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 'procedure char;
@@ -7431,6 +8419,13 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
+declare range char;
+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 'range char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
declare read char;
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 'read char;
@@ -7445,6 +8440,18 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
+declare read_only char;
+END//
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
+declare read_write char;
+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 'read_write char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
declare real char;
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 'real char;
@@ -7466,6 +8473,13 @@ END' at line 3
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
+declare release char;
+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 'release char;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1()
+BEGIN
declare rename char;
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 'rename char;
@@ -7624,15 +8638,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1()
BEGIN
-declare soname char;
-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 'soname char;
-END' at line 3
-DROP PROCEDURE IF EXISTS sp1;
-Warnings:
-Note 1305 PROCEDURE sp1 does not exist
-CREATE PROCEDURE sp1()
-BEGIN
declare spatial char;
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 'spatial char;
@@ -7750,11 +8755,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1()
BEGIN
-declare tables char;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1()
-BEGIN
declare terminated char;
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 'terminated char;
@@ -7899,9 +8899,9 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1()
BEGIN
-declare USE char;
+declare use char;
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 'USE char;
+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 'use char;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
@@ -8150,6 +9150,16 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare accessible condition for sqlstate '02000';
+declare exit handler for add set @var2 = 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 'accessible condition for sqlstate '02000';
+declare exit handler for add set @var' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare add condition for sqlstate '02000';
declare exit handler for add set @var2 = 1;
END//
@@ -8306,10 +9316,10 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare CALL condition for sqlstate '02000';
+declare call condition for sqlstate '02000';
declare exit handler for CALL set @var2 = 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 'CALL condition for sqlstate '02000';
+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 'call condition for sqlstate '02000';
declare exit handler for CALL set @var2 = 1' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
@@ -8409,11 +9419,7 @@ BEGIN
declare connection condition for sqlstate '02000';
declare exit handler for connection set @var2 = 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 'connection condition for sqlstate '02000';
-declare exit handler for connection s' at line 3
DROP PROCEDURE IF EXISTS sp1;
-Warnings:
-Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
declare constraint condition for sqlstate '02000';
@@ -8829,12 +9835,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare fields condition for sqlstate '02000';
-declare exit handler for fields set @var2 = 1;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1( )
-BEGIN
declare float condition for sqlstate '02000';
declare exit handler for float set @var2 = 1;
END//
@@ -8845,6 +9845,26 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare float4 condition for sqlstate '02000';
+declare exit handler for add set @var2 = 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 'float4 condition for sqlstate '02000';
+declare exit handler for add set @var2 = ' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare float8 condition for sqlstate '02000';
+declare exit handler for add set @var2 = 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 'float8 condition for sqlstate '02000';
+declare exit handler for add set @var2 = ' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare for condition for sqlstate '02000';
declare exit handler for for set @var2 = 1;
END//
@@ -8876,12 +9896,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare found condition for sqlstate '02000';
-declare exit handler for found set @var2 = 1;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1( )
-BEGIN
declare from condition for sqlstate '02000';
declare exit handler for from set @var2 = 1;
END//
@@ -8902,12 +9916,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare goto condition for sqlstate '02000';
-declare exit handler for goto set @var2 = 1;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1( )
-BEGIN
declare grant condition for sqlstate '02000';
declare exit handler for grant set @var2 = 1;
END//
@@ -9081,6 +10089,56 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare int1 condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'int1 condition for sqlstate '02000';
+declare exit handler for int set @var2 = 1;' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare int2 condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'int2 condition for sqlstate '02000';
+declare exit handler for int set @var2 = 1;' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare int3 condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'int3 condition for sqlstate '02000';
+declare exit handler for int set @var2 = 1;' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare int4 condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'int4 condition for sqlstate '02000';
+declare exit handler for int set @var2 = 1;' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare int8 condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'int8 condition for sqlstate '02000';
+declare exit handler for int set @var2 = 1;' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare integer condition for sqlstate '02000';
declare exit handler for integer set @var2 = 1;
END//
@@ -9223,6 +10281,16 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare linear condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'linear condition for sqlstate '02000';
+declare exit handler for int set @var2 = ' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare lines condition for sqlstate '02000';
declare exit handler for lines set @var2 = 1;
END//
@@ -9323,6 +10391,16 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare master_ssl_verify_server_cert condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'master_ssl_verify_server_cert condition for sqlstate '02000';
+declare exit handl' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare match condition for sqlstate '02000';
declare exit handler for match set @var2 = 1;
END//
@@ -9578,12 +10656,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare privileges condition for sqlstate '02000';
-declare exit handler for privileges set @var2 = 1;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1( )
-BEGIN
declare procedure condition for sqlstate '02000';
declare exit handler for procedure set @var2 = 1;
END//
@@ -9604,6 +10676,16 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare range condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'range condition for sqlstate '02000';
+declare exit handler for int set @var2 = 1' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare read condition for sqlstate '02000';
declare exit handler for read set @var2 = 1;
END//
@@ -9624,6 +10706,26 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare read_only condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'int set @var2 = 1;
+END' at line 4
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare read_write condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'read_write condition for sqlstate '02000';
+declare exit handler for int set @var' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare real condition for sqlstate '02000';
declare exit handler for real set @var2 = 1;
END//
@@ -9654,6 +10756,16 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare release condition for sqlstate '02000';
+declare exit handler for int set @var2 = 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 'release condition for sqlstate '02000';
+declare exit handler for int set @var2 =' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare rename condition for sqlstate '02000';
declare exit handler for rename set @var2 = 1;
END//
@@ -9774,10 +10886,10 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare SELECT condition for sqlstate '02000';
+declare select condition for sqlstate '02000';
declare exit handler for SELECT set @var2 = 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 'SELECT condition for sqlstate '02000';
+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 'select condition for sqlstate '02000';
declare exit handler for SELECT set @var2' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
@@ -9835,16 +10947,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare soname condition for sqlstate '02000';
-declare exit handler for soname set @var2 = 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 'soname condition for sqlstate '02000';
-declare exit handler for soname set @var2' at line 3
-DROP PROCEDURE IF EXISTS sp1;
-Warnings:
-Note 1305 PROCEDURE sp1 does not exist
-CREATE PROCEDURE sp1( )
-BEGIN
declare spatial condition for sqlstate '02000';
declare exit handler for spatial set @var2 = 1;
END//
@@ -9977,12 +11079,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare tables condition for sqlstate '02000';
-declare exit handler for tables set @var2 = 1;
-END//
-DROP PROCEDURE IF EXISTS sp1;
-CREATE PROCEDURE sp1( )
-BEGIN
declare terminated condition for sqlstate '02000';
declare exit handler for terminated set @var2 = 1;
END//
@@ -10144,10 +11240,10 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare USE condition for sqlstate '02000';
+declare use condition for sqlstate '02000';
declare exit handler for USE set @var2 = 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 'USE condition for sqlstate '02000';
+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 'use condition for sqlstate '02000';
declare exit handler for USE set @var2 = 1;
' at line 3
DROP PROCEDURE IF EXISTS sp1;
@@ -10409,6 +11505,15 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare accessible handler for sqlstate '02000' set @var2 = 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 'accessible handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare add handler for sqlstate '02000' set @var2 = 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 'add handler for sqlstate '02000' set @var2 = 1;
@@ -10544,9 +11649,9 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare CALL handler for sqlstate '02000' set @var2 = 1;
+declare call handler for sqlstate '02000' set @var2 = 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 'CALL handler for sqlstate '02000' set @var2 = 1;
+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 'call handler for sqlstate '02000' set @var2 = 1;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
@@ -10625,15 +11730,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare columns handler for sqlstate '02000' set @var2 = 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 'handler for sqlstate '02000' set @var2 = 1;
-END' at line 3
-DROP PROCEDURE IF EXISTS sp1;
-Warnings:
-Note 1305 PROCEDURE sp1 does not exist
-CREATE PROCEDURE sp1( )
-BEGIN
declare condition handler for sqlstate '02000' set @var2 = 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 'condition handler for sqlstate '02000' set @var2 = 1;
@@ -10643,22 +11739,18 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare connection handler for sqlstate '02000' set @var2 = 1;
+declare constraint handler for sqlstate '02000' set @var2 = 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 'connection handler for sqlstate '02000' set @var2 = 1;
+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 'constraint handler for sqlstate '02000' set @var2 = 1;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare constraint handler for sqlstate '02000' set @var2 = 1;
+declare continue handler for sqlstate '02000' set @var2 = 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 'constraint handler for sqlstate '02000' set @var2 = 1;
-END' at line 3
DROP PROCEDURE IF EXISTS sp1;
-Warnings:
-Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
declare convert handler for sqlstate '02000' set @var2 = 1;
@@ -10976,6 +12068,11 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare exit handler for sqlstate '02000' set @var2 = 1;
+END//
+DROP PROCEDURE IF EXISTS sp1;
+CREATE PROCEDURE sp1( )
+BEGIN
declare explain handler for sqlstate '02000' set @var2 = 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 'explain handler for sqlstate '02000' set @var2 = 1;
@@ -11003,54 +12100,54 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare fields handler for sqlstate '02000' set @var2 = 1;
+declare float handler for sqlstate '02000' set @var2 = 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 'handler for sqlstate '02000' set @var2 = 1;
+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 'float handler for sqlstate '02000' set @var2 = 1;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare float handler for sqlstate '02000' set @var2 = 1;
+declare float4 handler for sqlstate '02000' set @var2 = 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 'float handler for sqlstate '02000' set @var2 = 1;
+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 'float4 handler for sqlstate '02000' set @var2 = 1;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare for handler for sqlstate '02000' set @var2 = 1;
+declare float8 handler for sqlstate '02000' set @var2 = 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 'for handler for sqlstate '02000' set @var2 = 1;
+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 'float8 handler for sqlstate '02000' set @var2 = 1;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare force handler for sqlstate '02000' set @var2 = 1;
+declare for handler for sqlstate '02000' set @var2 = 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 'force handler for sqlstate '02000' set @var2 = 1;
+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 'for handler for sqlstate '02000' set @var2 = 1;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare foreign handler for sqlstate '02000' set @var2 = 1;
+declare force handler for sqlstate '02000' set @var2 = 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 'foreign handler for sqlstate '02000' set @var2 = 1;
+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 'force handler for sqlstate '02000' set @var2 = 1;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare found handler for sqlstate '02000' set @var2 = 1;
+declare foreign handler for sqlstate '02000' set @var2 = 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 'handler for sqlstate '02000' set @var2 = 1;
+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 'foreign handler for sqlstate '02000' set @var2 = 1;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
@@ -11075,15 +12172,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare goto handler for sqlstate '02000' set @var2 = 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 'handler for sqlstate '02000' set @var2 = 1;
-END' at line 3
-DROP PROCEDURE IF EXISTS sp1;
-Warnings:
-Note 1305 PROCEDURE sp1 does not exist
-CREATE PROCEDURE sp1( )
-BEGIN
declare grant handler for sqlstate '02000' set @var2 = 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 'grant handler for sqlstate '02000' set @var2 = 1;
@@ -11237,6 +12325,51 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare int1 handler for sqlstate '02000' set @var2 = 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 'int1 handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare int2 handler for sqlstate '02000' set @var2 = 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 'int2 handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare int3 handler for sqlstate '02000' set @var2 = 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 'int3 handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare int4 handler for sqlstate '02000' set @var2 = 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 'int4 handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare int8 handler for sqlstate '02000' set @var2 = 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 'int8 handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare integer handler for sqlstate '02000' set @var2 = 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 'integer handler for sqlstate '02000' set @var2 = 1;
@@ -11363,6 +12496,15 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare linear handler for sqlstate '02000' set @var2 = 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 'linear handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare lines handler for sqlstate '02000' set @var2 = 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 'lines handler for sqlstate '02000' set @var2 = 1;
@@ -11453,6 +12595,15 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare master_ssl_verify_server_cert handler for sqlstate '02000' set @var2 = 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 'master_ssl_verify_server_cert handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare match handler for sqlstate '02000' set @var2 = 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 'match handler for sqlstate '02000' set @var2 = 1;
@@ -11705,6 +12856,15 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare range handler for sqlstate '02000' set @var2 = 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 'range handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare read handler for sqlstate '02000' set @var2 = 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 'read handler for sqlstate '02000' set @var2 = 1;
@@ -11723,6 +12883,24 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare read_only handler for sqlstate '02000' set @var2 = 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 'handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
+declare read_write handler for sqlstate '02000' set @var2 = 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 'read_write handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare real handler for sqlstate '02000' set @var2 = 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 'real handler for sqlstate '02000' set @var2 = 1;
@@ -11750,6 +12928,15 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
+declare release handler for sqlstate '02000' set @var2 = 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 'release handler for sqlstate '02000' set @var2 = 1;
+END' at line 3
+DROP PROCEDURE IF EXISTS sp1;
+Warnings:
+Note 1305 PROCEDURE sp1 does not exist
+CREATE PROCEDURE sp1( )
+BEGIN
declare rename handler for sqlstate '02000' set @var2 = 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 'rename handler for sqlstate '02000' set @var2 = 1;
@@ -11858,9 +13045,9 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare SELECT handler for sqlstate '02000' set @var2 = 1;
+declare select handler for sqlstate '02000' set @var2 = 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 'SELECT handler for sqlstate '02000' set @var2 = 1;
+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 'select handler for sqlstate '02000' set @var2 = 1;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
@@ -11912,15 +13099,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare soname handler for sqlstate '02000' set @var2 = 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 'soname handler for sqlstate '02000' set @var2 = 1;
-END' at line 3
-DROP PROCEDURE IF EXISTS sp1;
-Warnings:
-Note 1305 PROCEDURE sp1 does not exist
-CREATE PROCEDURE sp1( )
-BEGIN
declare spatial handler for sqlstate '02000' set @var2 = 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 'spatial handler for sqlstate '02000' set @var2 = 1;
@@ -12038,15 +13216,6 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare tables handler for sqlstate '02000' set @var2 = 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 'handler for sqlstate '02000' set @var2 = 1;
-END' at line 3
-DROP PROCEDURE IF EXISTS sp1;
-Warnings:
-Note 1305 PROCEDURE sp1 does not exist
-CREATE PROCEDURE sp1( )
-BEGIN
declare terminated handler for sqlstate '02000' set @var2 = 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 'terminated handler for sqlstate '02000' set @var2 = 1;
@@ -12191,9 +13360,9 @@ Warnings:
Note 1305 PROCEDURE sp1 does not exist
CREATE PROCEDURE sp1( )
BEGIN
-declare USE handler for sqlstate '02000' set @var2 = 1;
+declare use handler for sqlstate '02000' set @var2 = 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 'USE handler for sqlstate '02000' set @var2 = 1;
+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 'use handler for sqlstate '02000' set @var2 = 1;
END' at line 3
DROP PROCEDURE IF EXISTS sp1;
Warnings:
@@ -12384,10 +13553,13 @@ set @v2 = y;
END//
CALL sp1();
x y @x
-NULL abaa 3
+NULL a 3
+Warnings:
+Warning 1265 Data truncated for column 'y' at row 3
+Warning 1265 Data truncated for column 'y' at row 1
SELECT @v1, @v2;
@v1 @v2
-4 a`
+4 a
DROP PROCEDURE sp1;
Testcase 4.2.28:
@@ -12454,7 +13626,7 @@ CALL sp1();
@xx
0
Warnings:
-Warning 1292 Truncated incorrect INTEGER value: 'asd'
+Warning 1366 Incorrect integer value: 'asd' for column 'xx' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12481,9 +13653,11 @@ set xx = 'temp';
set @xx = xx;
END//
CALL sp1();
+Warnings:
+Warning 1265 Data truncated for column 'xx' at row 1
SELECT @xx;
@xx
-temp
+t
DROP PROCEDURE sp1;
Testcase 4.2.31 - b:
@@ -12501,7 +13675,7 @@ CALL sp1();
xx
0
Warnings:
-Warning 1292 Truncated incorrect DOUBLE value: 'asd'
+Warning 1265 Data truncated for column 'xx' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12527,7 +13701,9 @@ SELECT xx;
END//
CALL sp1();
xx
-asd
+0000-00-00 00:00:00
+Warnings:
+Warning 1264 Out of range value for column 'xx' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12571,7 +13747,7 @@ CALL sp1();
xx
0
Warnings:
-Warning 1292 Truncated incorrect INTEGER value: 'asd'
+Warning 1366 Incorrect integer value: 'asd' for column 'xx' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12602,6 +13778,8 @@ declare x char ascii;
SELECT f1 into x from t2 limit 1;
END//
CALL sp1();
+Warnings:
+Warning 1265 Data truncated for column 'x' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12665,6 +13843,8 @@ declare x binary;
SELECT f1 into x from t2 limit 1;
END//
CALL sp1();
+Warnings:
+Warning 1265 Data truncated for column 'x' at row 1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12812,8 +13992,6 @@ declare x decimal;
SELECT f1 into x from t2 limit 1;
END//
CALL sp1();
-Warnings:
-Error 1366 Incorrect decimal value: '' for column '' at row -1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12821,8 +13999,6 @@ declare x decimal unsigned;
SELECT f1 into x from t2 limit 1;
END//
CALL sp1();
-Warnings:
-Error 1366 Incorrect decimal value: '' for column '' at row -1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12830,8 +14006,6 @@ declare x decimal zerofill;
SELECT f1 into x from t2 limit 1;
END//
CALL sp1();
-Warnings:
-Error 1366 Incorrect decimal value: '' for column '' at row -1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12839,8 +14013,6 @@ declare x decimal unsigned zerofill;
SELECT f1 into x from t2 limit 1;
END//
CALL sp1();
-Warnings:
-Error 1366 Incorrect decimal value: '' for column '' at row -1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12848,8 +14020,6 @@ declare x numeric;
SELECT f1 into x from t2 limit 1;
END//
CALL sp1();
-Warnings:
-Error 1366 Incorrect decimal value: '' for column '' at row -1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12857,8 +14027,6 @@ declare x numeric unsigned;
SELECT f1 into x from t2 limit 1;
END//
CALL sp1();
-Warnings:
-Error 1366 Incorrect decimal value: '' for column '' at row -1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12866,8 +14034,6 @@ declare x numeric zerofill;
SELECT f1 into x from t2 limit 1;
END//
CALL sp1();
-Warnings:
-Error 1366 Incorrect decimal value: '' for column '' at row -1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -12875,8 +14041,6 @@ declare x numeric unsigned zerofill;
SELECT f1 into x from t2 limit 1;
END//
CALL sp1();
-Warnings:
-Error 1366 Incorrect decimal value: '' for column '' at row -1
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1()
BEGIN
@@ -13254,7 +14418,7 @@ declare continue handler for sqlstate '02000' set done = 1;
BEGIN
open cur1;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newlf1, newf3, newsal;
set count = count - 1;
END while;
@@ -13279,7 +14443,7 @@ declare continue handler for sqlstate '02000' set done = 1;
BEGIN
open cur1;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newlf1, newf3, newsal;
set count = count - 1;
END while;
@@ -13306,7 +14470,7 @@ declare continue handler for sqlstate '02000' set done = 1;
BEGIN
open cur1;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
set count = count - 1;
END while;
@@ -13330,7 +14494,7 @@ open cur1;
BEGIN
open cur1;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2, newf3, newf4;
set count = count - 1;
END while;
@@ -13358,7 +14522,7 @@ BEGIN
open cur1;
open cur1;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
set count = count - 1;
END while;
@@ -13388,7 +14552,7 @@ declare continue handler for sqlstate '02000' set done = 1;
BEGIN
open cur2;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
set count = count - 1;
END while;
@@ -13416,7 +14580,7 @@ declare cur1 cursor for SELECT f1, f2, f4, f5 from t2 limit 20, 10;
declare continue handler for sqlstate '02000' set done = 1;
BEGIN
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
set count = count - 1;
END while;
@@ -13430,7 +14594,7 @@ DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
declare done int default 0;
-declare count integer default 0;
+declare count integer default 10;
declare newf1 char(20);
declare newf2 char(20);
declare newf3 char(20);
@@ -13441,7 +14605,7 @@ open cur1;
BEGIN
declare cur1 cursor for SELECT f1, f2, f3, f4 from t2;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2, newf3, newf4;
set count = count - 1;
END while;
@@ -13473,7 +14637,7 @@ BEGIN
open cur1;
close cur1;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
set count = count - 1;
END while;
@@ -13485,7 +14649,7 @@ DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1( )
BEGIN
declare done int default 0;
-declare count integer default 0;
+declare count integer default 20;
declare newf1 char(20);
declare newf2 char(20);
declare newf3 char(20);
@@ -13514,13 +14678,13 @@ BEGIN
declare done int default 0;
declare count integer default 20;
declare newf2 char(20);
-declare newf1 date;
+declare newf1 int1;
declare cur1 cursor for SELECT f1, f3 from t2 limit 20, 10;
declare continue handler for sqlstate '02000' set done = 1;
BEGIN
open cur1;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2;
set @x = newf1;
set @y = newf2;
@@ -13590,7 +14754,7 @@ BEGIN
close cur1;
open cur1;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
set count = count - 1;
END while;
@@ -13643,7 +14807,7 @@ fetch cur1 into newf1, newf2, newf4, newf3;
END;
END//
CALL sp1();
-ERROR 02000: No data to FETCH
+ERROR 02000: No data - zero rows fetched, selected, or processed
DROP PROCEDURE sp1;
Testcase 4.2.65:
@@ -13669,7 +14833,7 @@ commit;
END;
END//
CALL sp1();
-ERROR 02000: No data to FETCH
+ERROR 02000: No data - zero rows fetched, selected, or processed
DROP PROCEDURE sp1;
Testcase 4.2.66:
@@ -13690,7 +14854,7 @@ declare continue handler for sqlstate '02000' set done = 1;
BEGIN
open cur1;
set count = count - 1;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
set count = count - 1;
END while;
@@ -13719,12 +14883,13 @@ declare cur1 cursor for SELECT f1, f2, f4, f5 from t2 limit 20, 10;
declare continue handler for sqlstate '02000' set done = 1;
BEGIN
open cur1;
-set count = count - 1;
-while count <> 0 do
+# set count = count - 1;
+# while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
-set count = count - 1;
-END while;
+# set count = count - 1;
+# END while;
END;
+fetch cur1 into newf1, newf2, newf4, newf3;
END//
CALL sp1();
DROP PROCEDURE sp1;
@@ -13756,7 +14921,7 @@ BEGIN
set count = 10;
BEGIN
open cur2;
-while count <> 0 do
+while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
set count = count - 1;
END while;
@@ -13765,7 +14930,8 @@ insert into temp1 values(newf1, newf2, newf4, newf3);
close cur1;
END;
BEGIN
-while count <> 0 do
+set count = 10;
+while count > 0 do
fetch cur2 into newf21, newf22, newf24, newf23;
set count = count - 1;
END while;
@@ -13774,9 +14940,9 @@ insert into temp2 values(newf21, newf22, newf24, newf23);
close cur2;
END//
CALL sp1();
-SELECT * from temp1;
-f1 f2 f3 f4
-agaaaaaaa agaaaaaaa -4993 agaaaaaaa
+SELECT count(*) from temp1;
+count(*)
+1
SELECT * from temp2;
f1 f2 f3 f4
NULL NULL NULL NULL
@@ -13798,6 +14964,8 @@ middleinitial CHAR,
lastname VARCHAR(50),
age_averylongfieldname_averylongname_1234569 int,
COMMENT TEXT) ENGINE=ndb;
+Warnings:
+Error 1478 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK'
INSERT INTO res_t3_itisalongname_1381742_itsaverylongname_1381742
VALUES('a', 'aaaaaaaaaabbbbbbbbc', 0, 'default');
CREATE PROCEDURE sp1(a int)
@@ -13924,23 +15092,23 @@ CALL sp2( 'insert' );
SELECT * from t3 where f3 <=5 && f3 >= 0;
f1 f2 f3
f1 address 1
-f1 address 2
f1 address 3
f1 address 4
f1 address 5
-f1 address 1
-f1 address 2
f1 address 3
+f1 address 2
f1 address 4
-f1 address 5
+f1 address 2
+f1 address 2
f1 address 1
f1 address 2
-f1 address 3
+f1 address 1
f1 address 4
f1 address 1
-f1 address 2
+f1 address 5
f1 address 3
f1 address 4
+f1 address 3
SELECT count(*) from t3;
count(*)
28
@@ -14023,7 +15191,7 @@ delete from res_t3_itisalongname_1381742_itsaverylongname_1381742;
END case;
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 'when 'delete' then
-delete from res_t3_itisalongname_1381742_itsaverylongname_13' at line 10
+delete from res_t3_itisalongname_1381742_itsaverylongname_13' at line 11
DROP PROCEDURE IF EXISTS sp3;
CREATE PROCEDURE sp3( action char(20) )
BEGIN
@@ -14041,8 +15209,9 @@ label2: while count < 10 do
BEGIN
insert into res_t3_itisalongname_1381742_itsaverylongname_1381742
values('xxxxxxxxxxxxxxxxxxx', '1231230981(*&(*&)(*&(', count);
-if done=1 then
-set count=10;
+set count = count + 1;
+if count= 10 then
+set done=1;
END if;
END;
END while label2;
@@ -14056,6 +15225,19 @@ END if;
END loop label1;
SELECT count, done;
END//
+CALL sp3('insert');
+count done
+10 1
+Warnings:
+Warning 1265 Data truncated for column 'name' at row 1
+Warning 1265 Data truncated for column 'name' at row 2
+Warning 1265 Data truncated for column 'name' at row 3
+Warning 1265 Data truncated for column 'name' at row 4
+Warning 1265 Data truncated for column 'name' at row 5
+Warning 1265 Data truncated for column 'name' at row 6
+Warning 1265 Data truncated for column 'name' at row 7
+Warning 1265 Data truncated for column 'name' at row 8
+Warning 1265 Data truncated for column 'name' at row 9
DROP PROCEDURE sp3;
drop table res_t3_itisalongname_1381742_itsaverylongname_1381742;
@@ -14330,11 +15512,14 @@ CREATE PROCEDURE sp6()
BEGIN
declare count1 integer default 1;
label1: repeat
-set count1 = count1;
+set count1 = count1-1;
until count1 < 0
END repeat label1;
SELECT count1;
END//
+CALL sp6();
+count1
+-1
DROP PROCEDURE sp6;
Testcase 4.3.7:
@@ -14403,7 +15588,7 @@ do v1 > 0 while
set v1 = v1 - 1;
END while;
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 'do v1 > 0 while
+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
set v1 = v1 - 1;
END while;
END' at line 4
@@ -14606,7 +15791,7 @@ until count1 < 3
END repeat label1;
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 'label1;
-END' at line 7
+END' at line 8
Testcase 4.3.21:
--------------------------------------------------------------------------------
@@ -14789,15 +15974,15 @@ insert into t43 values('abcde', 'a!@#$%^&*(');
CREATE PROCEDURE d1.sp4()
SELECT * from d1.t43;
SELECT * from mysql.proc where specific_name = 'sp4';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
-d1 sp4 PROCEDURE sp4 SQL CONTAINS_SQL NO DEFINER SELECT * from d1.t43 root@localhost modified created
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
+d1 sp4 PROCEDURE sp4 SQL CONTAINS_SQL NO DEFINER SELECT * from d1.t43 root@localhost modified created latin1 latin1_swedish_ci latin1_swedish_ci SELECT * from d1.t43
USE db_storedproc;
DROP DATABASE d1;
CREATE DATABASE d1;
USE d1;
create table t44(a char(5), b char(10));
SELECT * from mysql.proc where specific_name = 'sp4';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
USE db_storedproc;
DROP DATABASE d1;
@@ -14839,8 +16024,8 @@ CREATE PROCEDURE sp8 ( n char(20) ) sql security definer comment 'initial'
USE d2;
alter procedure d1.sp8 sql security definer comment 'updated';
SELECT * from mysql.proc where specific_name='sp8' and db='d1';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
-d1 sp8 PROCEDURE sp8 SQL CONTAINS_SQL NO DEFINER n char(20) SELECT * from t1 where t1.f1 = n root@localhost modified created updated
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
+d1 sp8 PROCEDURE sp8 SQL CONTAINS_SQL NO DEFINER n char(20) SELECT * from t1 where t1.f1 = n root@localhost modified created updated latin1 latin1_swedish_ci latin1_swedish_ci SELECT * from t1 where t1.f1 = n
Testcase 4.4.9:
--------------------------------------------------------------------------------
@@ -14856,12 +16041,16 @@ END//
USE d2;
alter function d1.fn2 sql security definer comment 'updated';
SELECT * from mysql.proc where specific_name='fn2' and db='d1';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
d1 fn2 FUNCTION fn2 SQL CONTAINS_SQL NO DEFINER n int int(11) BEGIN
declare a int;
set a = 0.9 * n;
return a;
-END root@localhost modified created updated
+END root@localhost modified created updated latin1 latin1_swedish_ci latin1_swedish_ci BEGIN
+declare a int;
+set a = 0.9 * n;
+return a;
+END
Testcase 4.4.10:
--------------------------------------------------------------------------------
@@ -14871,7 +16060,7 @@ SELECT * from t1 where t1.f1 = n;
USE d2;
DROP PROCEDURE d1.sp9;
SELECT * from mysql.proc where specific_name='sp9' and db='d1';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
Testcase 4.4.11:
--------------------------------------------------------------------------------
@@ -14885,7 +16074,7 @@ END//
USE d2;
DROP FUNCTION d1.fn3;
SELECT * from mysql.proc where specific_name='fn3' and db='d1';
-db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment
+db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
USE db_storedproc;
DROP DATABASE d1;
DROP DATABASE d2;
@@ -14893,19 +16082,6 @@ DROP DATABASE d2;
Section 3.1.5 - Parameter use checks:
Functions with all data types
--------------------------------------------------------------------------------
-SELECT 1 as 'bug_dec_num';
-bug_dec_num
-1
-
-.
-FIXME: There are differences with datatypes DECIMAL and NUMERIC if large
-FIXME: exponent values are used. The diffs are shown only on some machines like
-FIXME: AIX52 and HPUX11. Until this has been solved we use numbers that
-FIXME: *should* be equal to the exponent representation but have no exponents
-FIXME: and use the specified count of *0*s instead.
-FIXME: In the source file these tests are marked with the comment hpux11
-.
---------------------------------------------------------------------------------
DROP DATABASE IF EXISTS d1;
CREATE DATABASE d1;
USE d1;
@@ -14926,7 +16102,7 @@ return f1;
END//
SELECT fn2(1.84e+19);
fn2(1.84e+19)
-0
+18400000000000000000
DROP FUNCTION IF EXISTS fn3;
CREATE FUNCTION fn3( f1 bigint unsigned zerofill) returns bigint unsigned zerofill
BEGIN
@@ -14945,6 +16121,8 @@ END//
SELECT fn4(-9.22e+15);
fn4(-9.22e+15)
0
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn5;
CREATE FUNCTION fn5( f1 decimal) returns decimal
BEGIN
@@ -14972,6 +16150,10 @@ END//
SELECT fn7(99999999999);
fn7(99999999999)
9999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn8;
CREATE FUNCTION fn8( f1 decimal (0) unsigned zerofill) returns decimal (0) unsigned zerofill
BEGIN
@@ -14980,7 +16162,9 @@ return f1;
END//
SELECT fn8(999999999);
fn8(999999999)
-0999999999
+1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn9;
CREATE FUNCTION fn9( f1 decimal (0) zerofill) returns decimal (0) zerofill
BEGIN
@@ -14989,7 +16173,10 @@ return f1;
END//
SELECT fn9(-1.00e+09);
fn9(-1.00e+09)
-0000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn10;
CREATE FUNCTION fn10( f1 decimal (0, 0)) returns decimal (0, 0)
BEGIN
@@ -15008,6 +16195,10 @@ END//
SELECT fn11(99999999999);
fn11(99999999999)
9999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn12;
CREATE FUNCTION fn12( f1 decimal (0, 0) unsigned zerofill) returns decimal (0, 0) unsigned zerofill
BEGIN
@@ -15016,7 +16207,9 @@ return f1;
END//
SELECT fn12(999999999);
fn12(999999999)
-0999999999
+1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn13;
CREATE FUNCTION fn13( f1 decimal (0, 0) zerofill) returns decimal (0, 0) zerofill
BEGIN
@@ -15025,7 +16218,10 @@ return f1;
END//
SELECT fn13(-1.00e+09);
fn13(-1.00e+09)
-0000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn14;
CREATE FUNCTION fn14( f1 decimal (63, 30)) returns decimal (63, 30)
BEGIN
@@ -15061,7 +16257,10 @@ return f1;
END//
SELECT fn17(-1.00e+21);
fn17(-1.00e+21)
-000000000000000000000000000000000.000000000000000000000000000000
+000000000000000000000000000000010.000000000000000000000000000000
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn18_d;
CREATE FUNCTION fn18_d( f1 decimal (64)) returns decimal (64)
BEGIN
@@ -15097,7 +16296,10 @@ return f1;
END//
SELECT fn21_d_z(1.00e+00);
fn21_d_z(1.00e+00)
-0000000000000000000000000000000000000000000000000000000000000001
+0000000000000000000000000000000000000000000000000000000000000010
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn22;
CREATE FUNCTION fn22( f1 decimal unsigned) returns decimal unsigned
BEGIN
@@ -15106,7 +16308,10 @@ return f1;
END//
SELECT fn22(1.00e+00);
fn22(1.00e+00)
-1
+10
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn23;
CREATE FUNCTION fn23( f1 decimal unsigned zerofill) returns decimal unsigned zerofill
BEGIN
@@ -15115,7 +16320,10 @@ return f1;
END//
SELECT fn23(1.00e+00);
fn23(1.00e+00)
-0000000001
+0000000010
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn24;
CREATE FUNCTION fn24( f1 decimal zerofill) returns decimal zerofill
BEGIN
@@ -15124,7 +16332,10 @@ return f1;
END//
SELECT fn24(-1.00e+09);
fn24(-1.00e+09)
-0000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn25;
CREATE FUNCTION fn25( f1 double) returns double
BEGIN
@@ -15142,7 +16353,9 @@ return f1;
END//
SELECT fn26(1.00e+00);
fn26(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn27;
CREATE FUNCTION fn27( f1 double unsigned zerofill) returns double unsigned zerofill
BEGIN
@@ -15151,7 +16364,9 @@ return f1;
END//
SELECT fn27(1.00e+00);
fn27(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn28;
CREATE FUNCTION fn28( f1 double zerofill) returns double zerofill
BEGIN
@@ -15160,7 +16375,9 @@ return f1;
END//
SELECT fn28(1.00e+00);
fn28(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn29;
CREATE FUNCTION fn29( f1 float) returns float
BEGIN
@@ -15178,7 +16395,9 @@ return f1;
END//
SELECT fn30(1.00e+00);
fn30(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn31;
CREATE FUNCTION fn31( f1 float unsigned zerofill) returns float unsigned zerofill
BEGIN
@@ -15187,7 +16406,9 @@ return f1;
END//
SELECT fn31(1.00e+00);
fn31(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn32;
CREATE FUNCTION fn32( f1 float zerofill) returns float zerofill
BEGIN
@@ -15196,7 +16417,9 @@ return f1;
END//
SELECT fn32(1.00e+00);
fn32(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn33;
CREATE FUNCTION fn33( f1 float(0)) returns float(0)
BEGIN
@@ -15214,7 +16437,9 @@ return f1;
END//
SELECT fn34(1.00e+00);
fn34(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn35;
CREATE FUNCTION fn35( f1 float(0) unsigned zerofill) returns float(0) unsigned zerofill
BEGIN
@@ -15223,7 +16448,9 @@ return f1;
END//
SELECT fn35(1.00e+00);
fn35(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn36;
CREATE FUNCTION fn36( f1 float(0) zerofill) returns float(0) zerofill
BEGIN
@@ -15232,7 +16459,9 @@ return f1;
END//
SELECT fn36(1.00e+00);
fn36(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn37;
CREATE FUNCTION fn37( f1 float(23)) returns float(23)
BEGIN
@@ -15250,7 +16479,9 @@ return f1;
END//
SELECT fn38(1.00e+00);
fn38(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn39;
CREATE FUNCTION fn39( f1 float(23) unsigned zerofill) returns float(23) unsigned zerofill
BEGIN
@@ -15259,7 +16490,9 @@ return f1;
END//
SELECT fn39(1.00e+00);
fn39(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn40;
CREATE FUNCTION fn40( f1 float(23) zerofill) returns float(23) zerofill
BEGIN
@@ -15268,7 +16501,9 @@ return f1;
END//
SELECT fn40(1.00e+00);
fn40(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn41;
CREATE FUNCTION fn41( f1 float(24)) returns float(24)
BEGIN
@@ -15286,7 +16521,9 @@ return f1;
END//
SELECT fn42(1.00e+00);
fn42(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn43;
CREATE FUNCTION fn43( f1 float(24) unsigned zerofill) returns float(24) unsigned zerofill
BEGIN
@@ -15295,7 +16532,9 @@ return f1;
END//
SELECT fn43(1.00e+00);
fn43(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn44;
CREATE FUNCTION fn44( f1 float(24) zerofill) returns float(24) zerofill
BEGIN
@@ -15304,7 +16543,9 @@ return f1;
END//
SELECT fn44(1.00e+00);
fn44(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn45;
CREATE FUNCTION fn45( f1 float(53)) returns float(53)
BEGIN
@@ -15322,7 +16563,9 @@ return f1;
END//
SELECT fn46(1.00e+00);
fn46(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn47;
CREATE FUNCTION fn47( f1 float(53) unsigned zerofill) returns float(53) unsigned zerofill
BEGIN
@@ -15331,7 +16574,9 @@ return f1;
END//
SELECT fn47(1.00e+00);
fn47(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn48;
CREATE FUNCTION fn48( f1 float(53) zerofill) returns float(53) zerofill
BEGIN
@@ -15340,7 +16585,9 @@ return f1;
END//
SELECT fn48(1.00e+00);
fn48(1.00e+00)
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn49;
CREATE FUNCTION fn49( f1 int) returns int
BEGIN
@@ -15349,7 +16596,10 @@ return f1;
END//
SELECT fn49(-2.15e+09);
fn49(-2.15e+09)
--2147483648
+-2147483638
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn50;
CREATE FUNCTION fn50( f1 int unsigned) returns int unsigned
BEGIN
@@ -15385,7 +16635,9 @@ return f1;
END//
SELECT fn53(-8388600);
fn53(-8388600)
--8388600
+-8388598
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn54;
CREATE FUNCTION fn54( f1 mediumint unsigned) returns mediumint unsigned
BEGIN
@@ -15412,7 +16664,11 @@ return f1;
END//
SELECT fn56(-8388601);
fn56(-8388601)
-0
+16777215
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn57;
CREATE FUNCTION fn57( f1 numeric) returns numeric
BEGIN
@@ -15421,7 +16677,9 @@ return f1;
END//
SELECT fn57(-999999999);
fn57(-999999999)
--999999999
+-1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn58;
CREATE FUNCTION fn58( f1 numeric (0)) returns numeric (0)
BEGIN
@@ -15430,7 +16688,9 @@ return f1;
END//
SELECT fn58(-999999999);
fn58(-999999999)
--999999999
+-1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn59;
CREATE FUNCTION fn59( f1 numeric (0) unsigned) returns numeric (0) unsigned
BEGIN
@@ -15440,6 +16700,9 @@ END//
SELECT fn59(9999999999);
fn59(9999999999)
9999999999
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn60;
CREATE FUNCTION fn60( f1 numeric (0) unsigned zerofill) returns numeric (0) unsigned zerofill
BEGIN
@@ -15448,7 +16711,9 @@ return f1;
END//
SELECT fn60(99999999);
fn60(99999999)
-0099999999
+0100000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn61;
CREATE FUNCTION fn61( f1 numeric (0) zerofill) returns numeric (0) zerofill
BEGIN
@@ -15457,7 +16722,10 @@ return f1;
END//
SELECT fn61(-99999999);
fn61(-99999999)
-0000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn62;
CREATE FUNCTION fn62( f1 numeric (0, 0)) returns numeric (0, 0)
BEGIN
@@ -15466,7 +16734,9 @@ return f1;
END//
SELECT fn62(-999999999);
fn62(-999999999)
--999999999
+-1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn63;
CREATE FUNCTION fn63( f1 numeric (0, 0) unsigned) returns numeric (0, 0) unsigned
BEGIN
@@ -15476,6 +16746,9 @@ END//
SELECT fn63(9999999999);
fn63(9999999999)
9999999999
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn64;
CREATE FUNCTION fn64( f1 numeric (0, 0) unsigned zerofill) returns numeric (0, 0) unsigned zerofill
BEGIN
@@ -15484,7 +16757,9 @@ return f1;
END//
SELECT fn64(99999999);
fn64(99999999)
-0099999999
+0100000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn65;
CREATE FUNCTION fn65( f1 numeric (0, 0) zerofill) returns numeric (0, 0) zerofill
BEGIN
@@ -15493,7 +16768,10 @@ return f1;
END//
SELECT fn65(-99999999);
fn65(-99999999)
-0000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn66;
CREATE FUNCTION fn66( f1 numeric (63, 30)) returns numeric (63, 30)
BEGIN
@@ -15502,7 +16780,12 @@ return f1;
END//
SELECT fn66(-1e+36);
fn66(-1e+36)
--999999999999999999999999999999999.999999999999999999999999999999
+-999999999999999999999999999999989.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn67;
CREATE FUNCTION fn67( f1 numeric (63, 30) unsigned) returns numeric (63, 30) unsigned
BEGIN
@@ -15512,6 +16795,10 @@ END//
SELECT fn67(1e+36);
fn67(1e+36)
999999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn68;
CREATE FUNCTION fn68( f1 numeric (63, 30) unsigned zerofill) returns numeric (63, 30) unsigned zerofill
BEGIN
@@ -15521,6 +16808,10 @@ END//
SELECT fn68(1e+36);
fn68(1e+36)
999999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn69;
CREATE FUNCTION fn69( f1 numeric (63, 30) zerofill) returns numeric (63, 30) zerofill
BEGIN
@@ -15529,7 +16820,10 @@ return f1;
END//
SELECT fn69(-1e+36);
fn69(-1e+36)
-000000000000000000000000000000000.000000000000000000000000000000
+000000000000000000000000000000010.000000000000000000000000000000
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn70_n;
CREATE FUNCTION fn70_n( f1 numeric (64)) returns numeric (64)
BEGIN
@@ -15577,7 +16871,9 @@ return f1;
END//
SELECT fn74(999999999);
fn74(999999999)
-999999999
+1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn75;
CREATE FUNCTION fn75( f1 numeric unsigned zerofill) returns numeric unsigned zerofill
BEGIN
@@ -15586,7 +16882,9 @@ return f1;
END//
SELECT fn75(999999999);
fn75(999999999)
-0999999999
+1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn76;
CREATE FUNCTION fn76( f1 numeric zerofill) returns numeric zerofill
BEGIN
@@ -15595,7 +16893,10 @@ return f1;
END//
SELECT fn76(-999999999);
fn76(-999999999)
-0000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn77;
CREATE FUNCTION fn77( f1 real) returns real
BEGIN
@@ -15613,7 +16914,9 @@ return f1;
END//
SELECT fn78(1.1);
fn78(1.1)
-1.1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn79;
CREATE FUNCTION fn79( f1 real unsigned zerofill) returns real unsigned zerofill
BEGIN
@@ -15622,7 +16925,9 @@ return f1;
END//
SELECT fn79(1.1);
fn79(1.1)
-1.1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn80;
CREATE FUNCTION fn80( f1 real zerofill) returns real zerofill
BEGIN
@@ -15631,7 +16936,9 @@ return f1;
END//
SELECT fn80(1.1);
fn80(1.1)
-1.1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn81;
CREATE FUNCTION fn81( f1 smallint) returns smallint
BEGIN
@@ -15667,7 +16974,11 @@ return f1;
END//
SELECT fn84(-32601);
fn84(-32601)
-0
+65535
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn85;
CREATE FUNCTION fn85( f1 tinyint) returns tinyint
BEGIN
@@ -15703,45 +17014,37 @@ return f1;
END//
SELECT fn88(-101);
fn88(-101)
-0
+255
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn89;
CREATE FUNCTION fn89( f1 enum('1enum', '2enum')) returns enum('1enum', '2enum')
BEGIN
-if f1 eq "1enum" then
-set f1 = '2enum';
-else
-set f1 = '1enum';
-END if;
-return f1;
+IF f1 = '1enum' THEN
+SET f1 = '2enum';
+ELSE
+SET f1 = '1enum';
+END IF;
+RETURN f1;
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 'eq "1enum" then
-set f1 = '2enum';
-else
-set f1 = '1enum';
-END if;
-return f1;
-END' at line 3
SELECT fn89( '1enum');
-ERROR 42000: FUNCTION d1.fn89 does not exist
+fn89( '1enum')
+2enum
DROP FUNCTION IF EXISTS fn90;
-CREATE FUNCTION fn90( f1 set("1set", "2set")) returns set("1set", "2set")
+CREATE FUNCTION fn90( f1 set('1set', '2set')) returns set('1set', '2set')
BEGIN
-if(f1 == "1set") then
-set f1 = "2set";
-else
-set f1 = "1set";
-END if;
-return f1;
+IF f1 = '1set' THEN
+SET f1 = '2set';
+ELSE
+SET f1 = '1set';
+END IF;
+RETURN f1;
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 '== "1set") then
-set f1 = "2set";
-else
-set f1 = "1set";
-END if;
-return f1;
-END' at line 3
SELECT fn90( '1set');
-ERROR 42000: FUNCTION d1.fn90 does not exist
+fn90( '1set')
+2set
DROP FUNCTION IF EXISTS fn91;
CREATE FUNCTION fn91( f1 date) returns date
BEGIN
@@ -15759,7 +17062,7 @@ return f1;
END//
SELECT fn92( '23:59:59.999999');
fn92( '23:59:59.999999')
-26:00:00
+25:59:59
DROP FUNCTION IF EXISTS fn93;
CREATE FUNCTION fn93( f1 datetime) returns datetime
BEGIN
@@ -15768,7 +17071,7 @@ return f1;
END//
SELECT fn93('1997-12-31 23:59:59.999999');
fn93('1997-12-31 23:59:59.999999')
-1998-01-02 01:01:01
+1998-01-02 01:01:00
DROP FUNCTION IF EXISTS fn94;
CREATE FUNCTION fn94( f1 char) returns char
BEGIN
@@ -15778,6 +17081,8 @@ END//
SELECT fn94( 'h');
fn94( 'h')
a
+Warnings:
+Warning 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn95;
CREATE FUNCTION fn95( f1 char ascii) returns char ascii
BEGIN
@@ -15787,15 +17092,19 @@ END//
SELECT fn95('h');
fn95('h')
a
+Warnings:
+Warning 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn96;
-CREATE FUNCTION fn96( f1 char binary) returns char binary
+CREATE FUNCTION fn96( f1 binary) returns binary(2)
BEGIN
set f1 = concat('a', f1);
return f1;
END//
SELECT fn96( 'h');
fn96( 'h')
-a
+a
+Warnings:
+Warning 1265 Data truncated for column 'f1' at row 1
DROP FUNCTION IF EXISTS fn97;
CREATE FUNCTION fn97( f1 longtext) returns longtext
BEGIN
@@ -15917,7 +17226,7 @@ SELECT f1;
END//
CALL sp2(1.84e+19);
f1
--9223372036854775808
+18400000000000000000
DROP PROCEDURE IF EXISTS sp3;
CREATE PROCEDURE sp3( f1 bigint unsigned zerofill)
BEGIN
@@ -15926,7 +17235,7 @@ SELECT f1;
END//
CALL sp3(1.84e+17);
f1
-184000000000000000
+00184000000000000000
DROP PROCEDURE IF EXISTS sp4;
CREATE PROCEDURE sp4( f1 bigint zerofill)
BEGIN
@@ -15935,31 +17244,27 @@ SELECT f1;
END//
CALL sp4(-9.22e+15);
f1
--9220000000000000
+00000000000000000000
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp5;
CREATE PROCEDURE sp5( f1 decimal)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: default (10) for DECIMAL not checked, decimal digits shown although not defined
CALL sp5(-1.00e+09);
f1
--1000000000.000000000
+-1000000000
DROP PROCEDURE IF EXISTS sp6;
CREATE PROCEDURE sp6( f1 decimal (0))
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
CALL sp6(-1.00e+09);
f1
--1000000000.000000000
+-1000000000
DROP PROCEDURE IF EXISTS sp7;
CREATE PROCEDURE sp7( f1 decimal (0) unsigned)
BEGIN
@@ -15968,7 +17273,11 @@ SELECT f1;
END//
CALL sp7(99999999999);
f1
-99999999999.000000000
+9999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp8;
CREATE PROCEDURE sp8( f1 decimal (0) unsigned zerofill)
BEGIN
@@ -15977,199 +17286,201 @@ SELECT f1;
END//
CALL sp8(999999999);
f1
-999999999.000000000
+1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp9;
CREATE PROCEDURE sp9( f1 decimal (0) zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
CALL sp9(-1.00e+09);
f1
--1000000000.000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp10;
CREATE PROCEDURE sp10( f1 decimal (0, 0))
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
CALL sp10(-1.00e+09);
f1
--1000000000.000000000
+-1000000000
DROP PROCEDURE IF EXISTS sp11;
CREATE PROCEDURE sp11( f1 decimal (0, 0) unsigned)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
CALL sp11(99999999999);
f1
-99999999999.000000000
+9999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp12;
CREATE PROCEDURE sp12( f1 decimal (0, 0) unsigned zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
CALL sp12(999999999);
f1
-999999999.000000000
+1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp13;
CREATE PROCEDURE sp13( f1 decimal (0, 0) zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
CALL sp13(-1.00e+09);
f1
--1000000000.000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp14;
CREATE PROCEDURE sp14( f1 decimal (63, 30))
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: wrong number of decimal digits shown
CALL sp14(-1.00e+21);
f1
--1000000000000000000000.000000000
+-1000000000000000000000.000000000000000000000000000000
DROP PROCEDURE IF EXISTS sp15;
CREATE PROCEDURE sp15( f1 decimal (63, 30) unsigned)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: wrong number of decimal digits shown
CALL sp15(1.00e+16);
f1
-10000000000000000.000000000
+10000000000000000.000000000000000000000000000000
DROP PROCEDURE IF EXISTS sp16;
CREATE PROCEDURE sp16( f1 decimal (63, 30) unsigned zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: wrong number of decimal digits shown
CALL sp16(1.00e+16);
f1
-10000000000000000.000000000
+000000000000000010000000000000000.000000000000000000000000000000
DROP PROCEDURE IF EXISTS sp17;
CREATE PROCEDURE sp17( f1 decimal (63, 30) zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: wrong number of decimal digits shown
CALL sp17(-1.00e+21);
f1
--1000000000000000000000.000000000
+000000000000000000000000000000010.000000000000000000000000000000
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp18_d;
CREATE PROCEDURE sp18_d( f1 decimal (64))
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
+CALL sp18_d(-1.00e+30);
+f1
+-1000000000000000000000000000000
CALL sp18_d( -1000000000000000000000000000000 );
f1
--1000000000000000000000000000000.000000000
+-1000000000000000000000000000000
DROP PROCEDURE IF EXISTS sp19_du;
CREATE PROCEDURE sp19_du( f1 decimal (64) unsigned)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
+CALL sp19_du(1.00e+20);
+f1
+100000000000000000000
CALL sp19_du( 100000000000000000000 );
f1
-100000000000000000000.000000000
+100000000000000000000
+CALL sp19_du(1.00e+24);
+f1
+1000000000000000000000000
CALL sp19_du( 1000000000000000000000000 );
f1
-1000000000000000000000000.000000000
+1000000000000000000000000
DROP PROCEDURE IF EXISTS sp20_duz;
CREATE PROCEDURE sp20_duz( f1 decimal (64) unsigned zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
+CALL sp20_duz(1.00e+20);
+f1
+0000000000000000000000000000000000000000000100000000000000000000
CALL sp20_duz( 100000000000000000000 );
f1
-100000000000000000000.000000000
+0000000000000000000000000000000000000000000100000000000000000000
+CALL sp20_duz(1.00e+24);
+f1
+0000000000000000000000000000000000000001000000000000000000000000
CALL sp20_duz( 1000000000000000000000000 );
f1
-1000000000000000000000000.000000000
+0000000000000000000000000000000000000001000000000000000000000000
DROP PROCEDURE IF EXISTS sp21;
CREATE PROCEDURE sp21( f1 decimal (64) zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
CALL sp21(1.00e+00);
f1
-1.000000000
+0000000000000000000000000000000000000000000000000000000000000010
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp22;
CREATE PROCEDURE sp22( f1 decimal unsigned)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
CALL sp22(1.00e+00);
f1
-1.000000000
+10
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp23;
CREATE PROCEDURE sp23( f1 decimal unsigned zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
CALL sp23(1.00e+00);
f1
-1.000000000
+0000000010
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp24;
CREATE PROCEDURE sp24( f1 decimal zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
-FIXME: Following test contains a known problem that will be checked again
-FIXME: after WL#2984 has been completed:
-FIXME: decimal digits shown although not defined
CALL sp24(-1.00e+09);
f1
--1000000000.000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp25;
CREATE PROCEDURE sp25( f1 double)
BEGIN
@@ -16187,7 +17498,9 @@ SELECT f1;
END//
CALL sp26(1.00e+00);
f1
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp27;
CREATE PROCEDURE sp27( f1 double unsigned zerofill)
BEGIN
@@ -16196,7 +17509,9 @@ SELECT f1;
END//
CALL sp27(1.00e+00);
f1
-1
+0000000000000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp28;
CREATE PROCEDURE sp28( f1 double zerofill)
BEGIN
@@ -16205,7 +17520,9 @@ SELECT f1;
END//
CALL sp28(1.00e+00);
f1
-1
+0000000000000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp29;
CREATE PROCEDURE sp29( f1 float)
BEGIN
@@ -16223,7 +17540,9 @@ SELECT f1;
END//
CALL sp30(1.00e+00);
f1
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp31;
CREATE PROCEDURE sp31( f1 float unsigned zerofill)
BEGIN
@@ -16232,7 +17551,9 @@ SELECT f1;
END//
CALL sp31(1.00e+00);
f1
-1
+000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp32;
CREATE PROCEDURE sp32( f1 float zerofill)
BEGIN
@@ -16241,7 +17562,9 @@ SELECT f1;
END//
CALL sp32(1.00e+00);
f1
-1
+000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp33;
CREATE PROCEDURE sp33( f1 float(0))
BEGIN
@@ -16259,7 +17582,9 @@ SELECT f1;
END//
CALL sp34(1.00e+00);
f1
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp35;
CREATE PROCEDURE sp35( f1 float(0) unsigned zerofill)
BEGIN
@@ -16268,7 +17593,9 @@ SELECT f1;
END//
CALL sp35(1.00e+00);
f1
-1
+000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp36;
CREATE PROCEDURE sp36( f1 float(0) zerofill)
BEGIN
@@ -16277,7 +17604,9 @@ SELECT f1;
END//
CALL sp36(1.00e+00);
f1
-1
+000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp37;
CREATE PROCEDURE sp37( f1 float(23))
BEGIN
@@ -16295,7 +17624,9 @@ SELECT f1;
END//
CALL sp38(1.00e+00);
f1
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp39;
CREATE PROCEDURE sp39( f1 float(23) unsigned zerofill)
BEGIN
@@ -16304,7 +17635,9 @@ SELECT f1;
END//
CALL sp39(1.00e+00);
f1
-1
+000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp40;
CREATE PROCEDURE sp40( f1 float(23) zerofill)
BEGIN
@@ -16313,7 +17646,9 @@ SELECT f1;
END//
CALL sp40(1.00e+00);
f1
-1
+000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp41;
CREATE PROCEDURE sp41( f1 float(24))
BEGIN
@@ -16331,7 +17666,9 @@ SELECT f1;
END//
CALL sp42(1.00e+00);
f1
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp43;
CREATE PROCEDURE sp43( f1 float(24) unsigned zerofill)
BEGIN
@@ -16340,7 +17677,9 @@ SELECT f1;
END//
CALL sp43(1.00e+00);
f1
-1
+000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp44;
CREATE PROCEDURE sp44( f1 float(24) zerofill)
BEGIN
@@ -16349,7 +17688,9 @@ SELECT f1;
END//
CALL sp44(1.00e+00);
f1
-1
+000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp45;
CREATE PROCEDURE sp45( f1 float(53))
BEGIN
@@ -16367,7 +17708,9 @@ SELECT f1;
END//
CALL sp46(1.00e+00);
f1
-1
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp47;
CREATE PROCEDURE sp47( f1 float(53) unsigned zerofill)
BEGIN
@@ -16376,7 +17719,9 @@ SELECT f1;
END//
CALL sp47(1.00e+00);
f1
-1
+0000000000000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp48;
CREATE PROCEDURE sp48( f1 float(53) zerofill)
BEGIN
@@ -16385,7 +17730,9 @@ SELECT f1;
END//
CALL sp48(1.00e+00);
f1
-1
+0000000000000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp49;
CREATE PROCEDURE sp49( f1 int)
BEGIN
@@ -16394,7 +17741,10 @@ SELECT f1;
END//
CALL sp49(-2.15e+09);
f1
--2150000000
+-2147483638
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp50;
CREATE PROCEDURE sp50( f1 int unsigned)
BEGIN
@@ -16421,7 +17771,7 @@ SELECT f1;
END//
CALL sp52(2.15e+08);
f1
-215000000
+0215000000
DROP PROCEDURE IF EXISTS sp53;
CREATE PROCEDURE sp53( f1 mediumint)
BEGIN
@@ -16430,7 +17780,9 @@ SELECT f1;
END//
CALL sp53(-8388600);
f1
--8388600
+-8388598
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp54;
CREATE PROCEDURE sp54( f1 mediumint unsigned)
BEGIN
@@ -16457,7 +17809,11 @@ SELECT f1;
END//
CALL sp56(-8388601);
f1
--8388602
+16777215
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp57;
CREATE PROCEDURE sp57( f1 numeric)
BEGIN
@@ -16466,7 +17822,9 @@ SELECT f1;
END//
CALL sp57(-999999999);
f1
--999999999.000000000
+-1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp58;
CREATE PROCEDURE sp58( f1 numeric (0))
BEGIN
@@ -16475,7 +17833,9 @@ SELECT f1;
END//
CALL sp58(-999999999);
f1
--999999999.000000000
+-1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp59;
CREATE PROCEDURE sp59( f1 numeric (0) unsigned)
BEGIN
@@ -16484,7 +17844,10 @@ SELECT f1;
END//
CALL sp59(9999999999);
f1
-9999999999.000000000
+9999999999
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp60;
CREATE PROCEDURE sp60( f1 numeric (0) unsigned zerofill)
BEGIN
@@ -16493,7 +17856,9 @@ SELECT f1;
END//
CALL sp60(99999999);
f1
-99999999.000000000
+0100000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp61;
CREATE PROCEDURE sp61( f1 numeric (0) zerofill)
BEGIN
@@ -16502,7 +17867,10 @@ SELECT f1;
END//
CALL sp61(-99999999);
f1
--99999999.000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp62;
CREATE PROCEDURE sp62( f1 numeric (0, 0))
BEGIN
@@ -16511,7 +17879,9 @@ SELECT f1;
END//
CALL sp62(-999999999);
f1
--999999999.000000000
+-1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp63;
CREATE PROCEDURE sp63( f1 numeric (0, 0) unsigned)
BEGIN
@@ -16520,7 +17890,10 @@ SELECT f1;
END//
CALL sp63(9999999999);
f1
-9999999999.000000000
+9999999999
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp64;
CREATE PROCEDURE sp64( f1 numeric (0, 0) unsigned zerofill)
BEGIN
@@ -16529,7 +17902,9 @@ SELECT f1;
END//
CALL sp64(99999999);
f1
-99999999.000000000
+0100000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp65;
CREATE PROCEDURE sp65( f1 numeric (0, 0) zerofill)
BEGIN
@@ -16538,79 +17913,146 @@ SELECT f1;
END//
CALL sp65(-99999999);
f1
--99999999.000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp66_n;
CREATE PROCEDURE sp66_n( f1 numeric (63, 30))
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
+CALL sp66_n(-1e+36);
+f1
+-999999999999999999999999999999989.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
CALL sp66_n( -1000000000000000000000000000000000000 );
f1
--1000000000000000000000000000000000000.000000000
+-999999999999999999999999999999989.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp67_nu;
CREATE PROCEDURE sp67_nu( f1 numeric (63, 30) unsigned)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
+CALL sp67_nu(1e+36);
+f1
+999999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
CALL sp67_nu( 1000000000000000000000000000000000000 );
f1
-1000000000000000000000000000000000000.000000000
+999999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp68_nuz;
CREATE PROCEDURE sp68_nuz( f1 numeric (63, 30) unsigned zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
+CALL sp68_nuz(1e+36);
+f1
+999999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
CALL sp68_nuz( 1000000000000000000000000000000000000 );
f1
-1000000000000000000000000000000000000.000000000
+999999999999999999999999999999999.999999999999999999999999999999
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Note 1265 Data truncated for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp69_n_z;
CREATE PROCEDURE sp69_n_z( f1 numeric (63, 30) zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
+CALL sp69_n_z(-1e+36);
+f1
+000000000000000000000000000000010.000000000000000000000000000000
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
CALL sp69_n_z( -1000000000000000000000000000000000000 );
f1
--1000000000000000000000000000000000000.000000000
+000000000000000000000000000000010.000000000000000000000000000000
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp70_n;
CREATE PROCEDURE sp70_n( f1 numeric (64))
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
+CALL sp70_n(-1e+40);
+f1
+-10000000000000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
CALL sp70_n( -10000000000000000000000000000000000000000 );
f1
--10000000000000000000000000000000000000000.000000000
+-10000000000000000000000000000000000000000
DROP PROCEDURE IF EXISTS sp71_nu;
CREATE PROCEDURE sp71_nu( f1 numeric (64) unsigned)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
+CALL sp71_nu(1.00e+40);
+f1
+10000000000000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
CALL sp71_nu( 10000000000000000000000000000000000000000 );
f1
-10000000000000000000000000000000000000000.000000000
+10000000000000000000000000000000000000000
DROP PROCEDURE IF EXISTS sp72_nuz;
CREATE PROCEDURE sp72_nuz( f1 numeric (64) unsigned zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
+CALL sp72_nuz(1.00e+40);
+f1
+0000000000000000000000010000000000000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
CALL sp72_nuz( 10000000000000000000000000000000000000000 );
f1
-10000000000000000000000000000000000000000.000000000
+0000000000000000000000010000000000000000000000000000000000000000
DROP PROCEDURE IF EXISTS sp73_n_z;
CREATE PROCEDURE sp73_n_z( f1 numeric (64) zerofill)
BEGIN
set f1 = (f1 / 2); set f1 = (f1 * 2); set f1 = (f1 - 10); set f1 = (f1 + 10);
SELECT f1;
END//
+CALL sp73_n_z(1.00e+40);
+f1
+0000000000000000000000010000000000000000000000000000000000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
CALL sp73_n_z( 10000000000000000000000000000000000000000 );
f1
-10000000000000000000000000000000000000000.000000000
+0000000000000000000000010000000000000000000000000000000000000000
DROP PROCEDURE IF EXISTS sp74;
CREATE PROCEDURE sp74( f1 numeric unsigned)
BEGIN
@@ -16619,7 +18061,9 @@ SELECT f1;
END//
CALL sp74(999999999);
f1
-999999999.000000000
+1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp75;
CREATE PROCEDURE sp75( f1 numeric unsigned zerofill)
BEGIN
@@ -16628,7 +18072,9 @@ SELECT f1;
END//
CALL sp75(999999999);
f1
-999999999.000000000
+1000000000
+Warnings:
+Note 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp76;
CREATE PROCEDURE sp76( f1 numeric zerofill)
BEGIN
@@ -16637,7 +18083,10 @@ SELECT f1;
END//
CALL sp76(-999999999);
f1
--999999999.000000000
+0000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp77;
CREATE PROCEDURE sp77( f1 real)
BEGIN
@@ -16646,7 +18095,7 @@ SELECT f1;
END//
CALL sp77(1.1);
f1
-1.10000
+1.1
DROP PROCEDURE IF EXISTS sp78;
CREATE PROCEDURE sp78( f1 real unsigned)
BEGIN
@@ -16655,7 +18104,9 @@ SELECT f1;
END//
CALL sp78(1.1);
f1
-1.10000
+10
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp79;
CREATE PROCEDURE sp79( f1 real unsigned zerofill)
BEGIN
@@ -16664,7 +18115,9 @@ SELECT f1;
END//
CALL sp79(1.1);
f1
-1.10000
+0000000000000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp80;
CREATE PROCEDURE sp80( f1 real zerofill)
BEGIN
@@ -16673,7 +18126,9 @@ SELECT f1;
END//
CALL sp80(1.1);
f1
-1.10000
+0000000000000000000010
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp81;
CREATE PROCEDURE sp81( f1 smallint)
BEGIN
@@ -16709,7 +18164,11 @@ SELECT f1;
END//
CALL sp84(-32601);
f1
--32602
+65535
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp85;
CREATE PROCEDURE sp85( f1 tinyint)
BEGIN
@@ -16745,9 +18204,23 @@ SELECT f1;
END//
CALL sp88(-101);
f1
--102
+255
+Warnings:
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
+Warning 1264 Out of range value for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp89;
+CREATE PROCEDURE sp89( f1 enum('1enum', '2enum'))
+BEGIN
+IF f1 = '1enum' THEN set f1 = '2enum'; ELSE set f1 = '1enum'; END IF;
+END//
+CALL sp89( '1enum');
DROP PROCEDURE IF EXISTS sp90;
+CREATE PROCEDURE sp90( f1 set('1set', '2set'))
+BEGIN
+IF f1 = '1set' THEN set f1 = '2set'; ELSE set f1 = '1set'; END IF;
+END//
+CALL sp90( '1set');
DROP PROCEDURE IF EXISTS sp91;
CREATE PROCEDURE sp91( f1 date)
BEGIN
@@ -16765,7 +18238,7 @@ SELECT f1;
END//
CALL sp92( '23:59:59.999999');
f1
-26:00:00.999997
+25:59:59
DROP PROCEDURE IF EXISTS sp93;
CREATE PROCEDURE sp93( f1 datetime)
BEGIN
@@ -16774,7 +18247,7 @@ SELECT f1;
END//
CALL sp93('1997-12-31 23:59:59.999999');
f1
-1998-01-02 01:01:01.000001
+1998-01-02 01:01:00
DROP PROCEDURE IF EXISTS sp94;
CREATE PROCEDURE sp94( f1 char)
BEGIN
@@ -16783,7 +18256,9 @@ SELECT f1;
END//
CALL sp94( 'h');
f1
-ah
+a
+Warnings:
+Warning 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp95;
CREATE PROCEDURE sp95( f1 char ascii)
BEGIN
@@ -16792,7 +18267,9 @@ SELECT f1;
END//
CALL sp95( 'h');
f1
-ah
+a
+Warnings:
+Warning 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp96;
CREATE PROCEDURE sp96( f1 char binary)
BEGIN
@@ -16801,7 +18278,9 @@ SELECT f1;
END//
CALL sp96( 'h');
f1
-ah
+a
+Warnings:
+Warning 1265 Data truncated for column 'f1' at row 1
DROP PROCEDURE IF EXISTS sp97;
CREATE PROCEDURE sp97( f1 longtext)
BEGIN
@@ -16846,7 +18325,7 @@ SELECT f1;
END//
CALL sp101(51);
f1
-61
+2061
DROP PROCEDURE IF EXISTS sp102;
CREATE PROCEDURE sp102( f1 year(4))
BEGIN
@@ -16901,6 +18380,8 @@ END//
CALL sp107(2.00e+13);
f1
returned
+Warnings:
+returned 1265 Data truncated for column 'f1' at row 1
USE db_storedproc;
DROP DATABASE db1;
DROP DATABASE IF EXISTS db1;
@@ -16937,9 +18418,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute01();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-61 61 71 61 61 71 2033 2033 2084 2033 2033 2084
+2061 2061 2071 2061 2061 2071 2033 2033 2084 2033 2033 2084
var1 var2 var3 var4 var5 var6 var7 var8
-61 71 61 71 2033 2084 2033 2084
+2061 2071 2061 2071 2033 2084 2033 2084
DROP PROCEDURE spexecute01;
DROP PROCEDURE sp1;
DROP PROCEDURE IF EXISTS sp2;
@@ -17010,9 +18491,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute03();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-ah ah aah ah ah aah helloworld helloworld NULL helloworld helloworld hellohelloworld
+a a a a a a helloworld helloworld NULL helloworld helloworld hellohelloworld
var1 var2 var3 var4 var5 var6 var7 var8
-ah aah ah aah helloworld NULL helloworld hellohelloworld
+a a a a helloworld NULL helloworld hellohelloworld
DROP PROCEDURE spexecute03;
DROP PROCEDURE sp3;
DROP PROCEDURE IF EXISTS sp4;
@@ -17155,7 +18636,7 @@ SELECT var7, var8;
END//
CALL spexecute07();
var1 var2
-9223372036854775807 NULL
+18400000000000000000 NULL
var3 var4
-9220000000000000000 NULL
var5 var6
@@ -17163,7 +18644,7 @@ var5 var6
var7 var8
-9220000000000000000 NULL
f1 f2 f3
-9223372036854775807 9223372036854775807 NULL
+18400000000000000000 18400000000000000000 NULL
f4 f5 f6
-9220000000000000000 -9220000000000000000 NULL
f7 f8 f9
@@ -17171,7 +18652,7 @@ f7 f8 f9
f10 f11 f12
-9220000000000000000 -9220000000000000000 NULL
f1 f2 f3
--2 -2 -2
+18353255926290448384 18353255926290448384 18353255926290448384
f4 f5 f6
-9220000000000000000 6744073709551616 6744073709551616
f7 f8 f9
@@ -17179,7 +18660,7 @@ f7 f8 f9
f10 f11 f12
-9220000000000000000 6744073709551616 6744073709551616
var1 var2
--2 -2
+18353255926290448384 18353255926290448384
var3 var4
6744073709551616 6744073709551616
var5 var6
@@ -17237,9 +18718,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute08();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-368000000000000000 368000000000000000 368000000000000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+00368000000000000000 00368000000000000000 00368000000000000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-368000000000000000 368000000000000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+00368000000000000000 00368000000000000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute08;
DROP PROCEDURE sp8;
DROP PROCEDURE IF EXISTS sp9;
@@ -17291,9 +18772,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute09();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--18440000000000000 -18440000000000000 -18439999999999990 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+00000000000000000000 00000000000000000000 00000000000000000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--18440000000000000 -18439999999999990 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+00000000000000000000 00000000000000000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute09;
DROP PROCEDURE sp9;
DROP PROCEDURE IF EXISTS sp10;
@@ -17337,9 +18818,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute10();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--1000000000.000000000 -1000000000.000000000 -999999990.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-1000000000 -1000000000 -999999990 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--1000000000.000000000 -999999990.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-1000000000 -999999990 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute10;
DROP PROCEDURE sp10;
DROP PROCEDURE IF EXISTS sp11;
@@ -17372,9 +18853,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute11();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1000000000.000000000 1000000000.000000000 1000000010.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+1000000000 1000000000 1000000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1000000000.000000000 1000000010.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+1000000000 1000000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute11;
DROP PROCEDURE sp11;
DROP PROCEDURE IF EXISTS sp12;
@@ -17407,9 +18888,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute12();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-99999999999.000000000 99999999999.000000000 100000000009.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+9999999999 9999999999 9999999999 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-99999999999.000000000 100000000009.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+9999999999 9999999999 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute12;
DROP PROCEDURE sp12;
DROP PROCEDURE IF EXISTS sp13;
@@ -17442,9 +18923,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute13();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--1000000000.000000000 -1000000000.000000000 -999999990.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000010 0000000010 0000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--1000000000.000000000 -999999990.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000010 0000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute13;
DROP PROCEDURE sp13;
DROP PROCEDURE IF EXISTS sp14;
@@ -17477,9 +18958,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute14();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--1000000000000000000000.000000000 -1000000000000000000000.000000000 -999999999999999999990.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-1000000000000000000000.000000000000000000000000000000 -1000000000000000000000.000000000000000000000000000000 -999999999999999999990.000000000000000000000000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--1000000000000000000000.000000000 -999999999999999999990.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-1000000000000000000000.000000000000000000000000000000 -999999999999999999990.000000000000000000000000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute14;
DROP PROCEDURE sp14;
DROP PROCEDURE IF EXISTS sp15;
@@ -17545,9 +19026,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute16();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000010 0000000000000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute16;
DROP PROCEDURE sp16;
DROP PROCEDURE IF EXISTS sp17;
@@ -17579,9 +19060,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute17();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+10 10 20 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10 20 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute17;
DROP PROCEDURE sp17;
DROP PROCEDURE IF EXISTS sp18;
@@ -17613,9 +19094,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute18();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000010 0000000000000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute18;
DROP PROCEDURE sp18;
DROP PROCEDURE IF EXISTS sp19;
@@ -17647,9 +19128,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute19();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+10 10 20 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10 20 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute19;
DROP PROCEDURE sp19;
DROP PROCEDURE IF EXISTS sp20;
@@ -17681,9 +19162,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute20();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000010 000000000010 000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000010 000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute20;
DROP PROCEDURE sp20;
DROP PROCEDURE IF EXISTS sp21;
@@ -17715,9 +19196,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute21();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000010 000000000010 000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000010 000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute21;
DROP PROCEDURE sp21;
DROP PROCEDURE IF EXISTS sp22;
@@ -17783,9 +19264,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute23();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--999999999.000000000 -999999999.000000000 -999999989.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-1000000000 -1000000000 -999999990 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--999999999.000000000 -999999989.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-1000000000 -999999990 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute23;
DROP PROCEDURE sp23;
DROP PROCEDURE IF EXISTS sp24;
@@ -17817,9 +19298,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute24();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1.10000 1.10000 11.10000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+1.1 1.1 11.1 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1.10000 11.10000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+1.1 11.1 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute24;
DROP PROCEDURE sp24;
DROP PROCEDURE IF EXISTS sp25;
@@ -17851,9 +19332,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute25();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--65402 -65402 -65392 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-32758 -32758 -32748 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--65402 -65392 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-32758 -32748 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute25;
DROP PROCEDURE sp25;
DROP PROCEDURE IF EXISTS sp26;
@@ -17919,9 +19400,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute27();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-26:00:00.999997 26:00:00.999997 28:00:01.999995 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+25:59:59 25:59:59 27:59:59 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-26:00:00.999997 28:00:01.999995 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+25:59:59 27:59:59 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute27;
DROP PROCEDURE sp27;
DROP PROCEDURE IF EXISTS sp28;
@@ -17953,9 +19434,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute28();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1998-01-02 01:01:01.000001 1998-01-02 01:01:01.000001 1998-01-03 02:02:02.000003 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+1998-01-02 01:01:00 1998-01-02 01:01:00 1998-01-03 02:02:01 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1998-01-02 01:01:01.000001 1998-01-03 02:02:02.000003 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+1998-01-02 01:01:00 1998-01-03 02:02:01 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute28;
DROP PROCEDURE sp28;
DROP PROCEDURE IF EXISTS sp29;
@@ -17987,9 +19468,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute29();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+10 10 20 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10 20 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute29;
DROP PROCEDURE sp29;
DROP PROCEDURE IF EXISTS sp30;
@@ -18021,9 +19502,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute30();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000010 000000000010 000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000010 000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute30;
DROP PROCEDURE sp30;
DROP PROCEDURE IF EXISTS sp31;
@@ -18089,9 +19570,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute32();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+10 10 20 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10 20 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute32;
DROP PROCEDURE sp32;
DROP PROCEDURE IF EXISTS sp33;
@@ -18123,9 +19604,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute33();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000010 000000000010 000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000010 000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute33;
DROP PROCEDURE sp33;
DROP PROCEDURE IF EXISTS sp34;
@@ -18191,9 +19672,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute35();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+10 10 20 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10 20 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute35;
DROP PROCEDURE sp35;
DROP PROCEDURE IF EXISTS sp36;
@@ -18225,9 +19706,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute36();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000010 000000000010 000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000010 000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute36;
DROP PROCEDURE sp36;
DROP PROCEDURE IF EXISTS sp37;
@@ -18293,9 +19774,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute38();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+10 10 20 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10 20 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute38;
DROP PROCEDURE sp38;
DROP PROCEDURE IF EXISTS sp39;
@@ -18327,9 +19808,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute39();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000010 0000000000000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute39;
DROP PROCEDURE sp39;
DROP PROCEDURE IF EXISTS sp40;
@@ -18361,9 +19842,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute40();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1.10000 1.10000 11.10000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+10 10 20 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1.10000 11.10000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10 20 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute40;
DROP PROCEDURE sp40;
DROP PROCEDURE IF EXISTS sp41;
@@ -18395,9 +19876,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute41();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1.10000 1.10000 11.10000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000010 0000000000000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1.10000 11.10000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute41;
DROP PROCEDURE sp41;
DROP PROCEDURE IF EXISTS sp42;
@@ -18429,9 +19910,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute42();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1.10000 1.10000 11.10000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000010 0000000000000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1.10000 11.10000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute42;
DROP PROCEDURE sp42;
DROP PROCEDURE IF EXISTS sp43;
@@ -18463,9 +19944,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute43();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--999999999.000000000 -999999999.000000000 -999999989.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-1000000000 -1000000000 -999999990 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--999999999.000000000 -999999989.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-1000000000 -999999990 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute43;
DROP PROCEDURE sp43;
DROP PROCEDURE IF EXISTS sp44;
@@ -18497,9 +19978,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute44();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-9999999999.000000000 9999999999.000000000 10000000009.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+9999999999 9999999999 9999999999 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-9999999999.000000000 10000000009.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+9999999999 9999999999 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute44;
DROP PROCEDURE sp44;
DROP PROCEDURE IF EXISTS sp45;
@@ -18531,9 +20012,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute45();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--99999999.000000000 -99999999.000000000 -99999989.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000010 0000000010 0000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--99999999.000000000 -99999989.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000010 0000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute45;
DROP PROCEDURE sp45;
DROP PROCEDURE IF EXISTS sp46;
@@ -18565,9 +20046,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute46();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--999999999.000000000 -999999999.000000000 -999999989.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-1000000000 -1000000000 -999999990 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--999999999.000000000 -999999989.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-1000000000 -999999990 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute46;
DROP PROCEDURE sp46;
DROP PROCEDURE IF EXISTS sp47;
@@ -18599,9 +20080,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute47();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-9999999999.000000000 9999999999.000000000 10000000009.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+9999999999 9999999999 9999999999 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-9999999999.000000000 10000000009.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+9999999999 9999999999 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute47;
DROP PROCEDURE sp47;
DROP PROCEDURE IF EXISTS sp48;
@@ -18633,9 +20114,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute48();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--99999999.000000000 -99999999.000000000 -99999989.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000010 0000000010 0000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--99999999.000000000 -99999989.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000010 0000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute48;
DROP PROCEDURE sp48;
DROP PROCEDURE IF EXISTS sp49;
@@ -18667,9 +20148,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute49();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--999999999.000000000 -999999999.000000000 -999999989.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+10 10 20 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--999999999.000000000 -999999989.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10 20 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute49;
DROP PROCEDURE sp49;
DROP PROCEDURE IF EXISTS sp50;
@@ -18701,9 +20182,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute50();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-9999999999.000000000 9999999999.000000000 10000000009.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+9999999999 9999999999 9999999999 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-9999999999.000000000 10000000009.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+9999999999 9999999999 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute50;
DROP PROCEDURE sp50;
DROP PROCEDURE IF EXISTS sp51;
@@ -18735,9 +20216,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute51();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--99999999.000000000 -99999999.000000000 -99999989.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000010 0000000010 0000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--99999999.000000000 -99999989.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000010 0000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute51;
DROP PROCEDURE sp51;
DROP PROCEDURE IF EXISTS sp52;
@@ -18769,9 +20250,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute52();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--100000000000000000000.000000000 -10000000000000000000000.000000000 -99999999999999999990.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-100000000000000000000.000000000000000000000000000000 -10000000000000000000000.000000000000000000000000000000 -99999999999999999990.000000000000000000000000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--10000000000000000000000.000000000 -99999999999999999990.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-10000000000000000000000.000000000000000000000000000000 -99999999999999999990.000000000000000000000000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute52;
DROP PROCEDURE sp52;
DROP PROCEDURE IF EXISTS sp53;
@@ -18803,9 +20284,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute53();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--100000000000000000000.000000000 -10000000000000000000000.000000000 -99999999999999999990.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-100000000000000000000 -10000000000000000000000 -99999999999999999990 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--10000000000000000000000.000000000 -99999999999999999990.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-10000000000000000000000 -99999999999999999990 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute53;
DROP PROCEDURE sp53;
DROP PROCEDURE IF EXISTS sp54;
@@ -18837,9 +20318,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute54();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-100000000000000000000.000000000 10000000000000000000000.000000000 100000000000000000010.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+100000000000000000000 10000000000000000000000 100000000000000000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-10000000000000000000000.000000000 100000000000000000010.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10000000000000000000000 100000000000000000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute54;
DROP PROCEDURE sp54;
DROP PROCEDURE IF EXISTS sp55;
@@ -18871,9 +20352,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute55();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--100000000000000000000.000000000 -10000000000000000000000.000000000 -99999999999999999990.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000000000000000000000000000000000000000000000000000000000010 0000000000000000000000000000000000000000000000000000000000000010 0000000000000000000000000000000000000000000000000000000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--10000000000000000000000.000000000 -99999999999999999990.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000000000000000000000000000000000000000000000000000000000010 0000000000000000000000000000000000000000000000000000000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute55;
DROP PROCEDURE sp55;
DROP PROCEDURE IF EXISTS sp56;
@@ -18905,9 +20386,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute56();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-61 61 71 61 61 71 61 61 71 61 61 71
+2061 2061 2071 2061 2061 2071 2061 2061 2071 2061 2061 2071
var1 var2 var3 var4 var5 var6 var7 var8
-61 71 61 71 61 71 61 71
+2061 2071 2061 2071 2061 2071 2061 2071
DROP PROCEDURE spexecute56;
DROP PROCEDURE sp56;
DROP PROCEDURE IF EXISTS sp57;
@@ -19041,9 +20522,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute60();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-ah ah aah ah ah aah ah ah aah ah ah aah
+a a a a a a a a a a a a
var1 var2 var3 var4 var5 var6 var7 var8
-ah aah ah aah ah aah ah aah
+a a a a a a a a
DROP PROCEDURE spexecute60;
DROP PROCEDURE sp60;
DROP PROCEDURE IF EXISTS sp61;
@@ -19075,9 +20556,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute61();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-ah ah aah ah ah aah ah ah NULL ah ah aah
+a a a a a a a a NULL a a a
var1 var2 var3 var4 var5 var6 var7 var8
-ah aah ah aah ah NULL ah aah
+a a a a a NULL a a
DROP PROCEDURE spexecute61;
DROP PROCEDURE sp61;
DROP PROCEDURE IF EXISTS sp62;
@@ -19177,9 +20658,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute64();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1000000000.000000000 1000000000.000000000 1000000010.000000000 1000000000.000000000 1000000000.000000000 1000000010.000000000 1000000000.000000000 1000000000.000000000 1000000010.000000000 1000000000.000000000 1000000000.000000000 1000000010.000000000
+1000000000 1000000000 1000000010 1000000000 1000000000 1000000010 1000000000 1000000000 1000000010 1000000000 1000000000 1000000010
var1 var2 var3 var4 var5 var6 var7 var8
-1000000000.000000000 1000000010.000000000 1000000000.000000000 1000000010.000000000 1000000000.000000000 1000000010.000000000 1000000000.000000000 1000000010.000000000
+1000000000 1000000010 1000000000 1000000010 1000000000 1000000010 1000000000 1000000010
DROP PROCEDURE spexecute64;
DROP PROCEDURE sp64;
DROP PROCEDURE IF EXISTS sp65;
@@ -19211,9 +20692,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute65();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-999999999.000000000 999999999.000000000 1000000009.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+1000000000 1000000000 1000000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-999999999.000000000 1000000009.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+1000000000 1000000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute65;
DROP PROCEDURE sp65;
DROP PROCEDURE IF EXISTS sp66;
@@ -19245,9 +20726,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute66();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-10000000000000000.000000000 10000000000000000.000000000 10000000000000010.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+10000000000000000.000000000000000000000000000000 10000000000000000.000000000000000000000000000000 10000000000000010.000000000000000000000000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-10000000000000000.000000000 10000000000000010.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10000000000000000.000000000000000000000000000000 10000000000000010.000000000000000000000000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute66;
DROP PROCEDURE sp66;
DROP PROCEDURE IF EXISTS sp67;
@@ -19279,9 +20760,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute67();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-10000000000000000.000000000 10000000000000000.000000000 10000000000000010.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000000000010000000000000000.000000000000000000000000000000 000000000000000010000000000000000.000000000000000000000000000000 000000000000000010000000000000010.000000000000000000000000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-10000000000000000.000000000 10000000000000010.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000000000010000000000000000.000000000000000000000000000000 000000000000000010000000000000010.000000000000000000000000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute67;
DROP PROCEDURE sp67;
DROP PROCEDURE IF EXISTS sp68;
@@ -19313,9 +20794,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute68();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--1000000000000000000000.000000000 -1000000000000000000000.000000000 -999999999999999999990.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000000000000000000000000010.000000000000000000000000000000 000000000000000000000000000000010.000000000000000000000000000000 000000000000000000000000000000020.000000000000000000000000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--1000000000000000000000.000000000 -999999999999999999990.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000000000000000000000000010.000000000000000000000000000000 000000000000000000000000000000020.000000000000000000000000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute68;
DROP PROCEDURE sp68;
DROP PROCEDURE IF EXISTS sp69;
@@ -19347,9 +20828,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute69();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--100000000000000000000.000000000 -10000000000000000000000.000000000 -99999999999999999990.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-100000000000000000000 -10000000000000000000000 -99999999999999999990 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--10000000000000000000000.000000000 -99999999999999999990.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-10000000000000000000000 -99999999999999999990 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute69;
DROP PROCEDURE sp69;
DROP PROCEDURE IF EXISTS sp70;
@@ -19381,9 +20862,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute70();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-100000000000000000000.000000000 10000000000000000000000.000000000 100000000000000000010.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+100000000000000000000 10000000000000000000000 100000000000000000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-10000000000000000000000.000000000 100000000000000000010.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10000000000000000000000 100000000000000000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute70;
DROP PROCEDURE sp70;
DROP PROCEDURE IF EXISTS sp71;
@@ -19415,9 +20896,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute71();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-100000000000000000000.000000000 10000000000000000000000.000000000 100000000000000000010.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000000000000000000000000000000000000000100000000000000000000 0000000000000000000000000000000000000000010000000000000000000000 0000000000000000000000000000000000000000000100000000000000000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-10000000000000000000000.000000000 100000000000000000010.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000000000000000000000000000000000000010000000000000000000000 0000000000000000000000000000000000000000000100000000000000000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute71;
DROP PROCEDURE sp71;
DROP PROCEDURE IF EXISTS sp72;
@@ -19449,9 +20930,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute72();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1.000000000 1.000000000 11.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000000000000000000000000000000000000000000000000000000000010 0000000000000000000000000000000000000000000000000000000000000010 0000000000000000000000000000000000000000000000000000000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1.000000000 11.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000000000000000000000000000000000000000000000000000000000010 0000000000000000000000000000000000000000000000000000000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute72;
DROP PROCEDURE sp72;
DROP PROCEDURE IF EXISTS sp73;
@@ -19483,9 +20964,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute73();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1.000000000 1.000000000 11.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+10 10 20 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1.000000000 11.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10 20 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute73;
DROP PROCEDURE sp73;
DROP PROCEDURE IF EXISTS sp74;
@@ -19517,9 +20998,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute74();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1.000000000 1.000000000 11.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000010 0000000010 0000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1.000000000 11.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000010 0000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute74;
DROP PROCEDURE sp74;
DROP PROCEDURE IF EXISTS sp75;
@@ -19551,9 +21032,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute75();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--1000000000.000000000 -1000000000.000000000 -999999990.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000010 0000000010 0000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--1000000000.000000000 -999999990.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000010 0000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute75;
DROP PROCEDURE sp75;
DROP PROCEDURE IF EXISTS sp76;
@@ -19585,9 +21066,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute76();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000010 000000000010 000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000010 000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute76;
DROP PROCEDURE sp76;
DROP PROCEDURE IF EXISTS sp77;
@@ -19619,9 +21100,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute77();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000010 000000000010 000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000010 000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute77;
DROP PROCEDURE sp77;
DROP PROCEDURE IF EXISTS sp78;
@@ -19653,9 +21134,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute78();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000010 000000000010 000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000010 000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute78;
DROP PROCEDURE sp78;
DROP PROCEDURE IF EXISTS sp79;
@@ -19687,9 +21168,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute79();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-1 1 11 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000010 0000000000000000000020 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-1 11 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000000000000000010 0000000000000000000020 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute79;
DROP PROCEDURE sp79;
DROP PROCEDURE IF EXISTS sp80;
@@ -19721,9 +21202,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute80();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--2150000000 -2150000000 -2149999990 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-2147483638 -2147483638 -2147483628 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--2150000000 -2149999990 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-2147483638 -2147483628 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute80;
DROP PROCEDURE sp80;
DROP PROCEDURE IF EXISTS sp81;
@@ -19823,9 +21304,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute83();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-215000000 215000000 215000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0215000000 0215000000 0215000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-215000000 215000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0215000000 0215000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute83;
DROP PROCEDURE sp83;
DROP PROCEDURE IF EXISTS sp84;
@@ -19857,9 +21338,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute84();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--8388600 -8388600 -8388590 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+-8388598 -8388598 -8388588 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--8388600 -8388590 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+-8388598 -8388588 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute84;
DROP PROCEDURE sp84;
DROP PROCEDURE IF EXISTS sp85;
@@ -19925,9 +21406,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute86();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-16777210 16777210 16777220 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+16777210 16777210 16777215 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-16777210 16777220 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+16777210 16777215 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute86;
DROP PROCEDURE sp86;
DROP PROCEDURE IF EXISTS sp87;
@@ -19959,9 +21440,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute87();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--8388602 -8388602 -8388592 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+16777215 16777215 16777215 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--8388602 -8388592 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+16777215 16777215 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute87;
DROP PROCEDURE sp87;
DROP PROCEDURE IF EXISTS sp88;
@@ -19993,9 +21474,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute88();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-99999999.000000000 99999999.000000000 100000009.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0100000000 0100000000 0100000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-99999999.000000000 100000009.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0100000000 0100000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute88;
DROP PROCEDURE sp88;
DROP PROCEDURE IF EXISTS sp89;
@@ -20027,9 +21508,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute89();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-99999999.000000000 99999999.000000000 100000009.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0100000000 0100000000 0100000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-99999999.000000000 100000009.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0100000000 0100000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute89;
DROP PROCEDURE sp89;
DROP PROCEDURE IF EXISTS sp90;
@@ -20061,9 +21542,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute90();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-100000000000000000000.000000000 10000000000000000000000.000000000 100000000000000000010.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+100000000000000000000.000000000000000000000000000000 10000000000000000000000.000000000000000000000000000000 100000000000000000010.000000000000000000000000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-10000000000000000000000.000000000 100000000000000000010.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+10000000000000000000000.000000000000000000000000000000 100000000000000000010.000000000000000000000000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute90;
DROP PROCEDURE sp90;
DROP PROCEDURE IF EXISTS sp91;
@@ -20095,9 +21576,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute91();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-100000000000000000000.000000000 10000000000000000000000.000000000 100000000000000000010.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000000100000000000000000000.000000000000000000000000000000 000000000010000000000000000000000.000000000000000000000000000000 000000000000100000000000000000010.000000000000000000000000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-10000000000000000000000.000000000 100000000000000000010.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000010000000000000000000000.000000000000000000000000000000 000000000000100000000000000000010.000000000000000000000000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute91;
DROP PROCEDURE sp91;
DROP PROCEDURE IF EXISTS sp92;
@@ -20129,9 +21610,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute92();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--100000000000000000000.000000000 -10000000000000000000000.000000000 -99999999999999999990.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+000000000000000000000000000000010.000000000000000000000000000000 000000000000000000000000000000010.000000000000000000000000000000 000000000000000000000000000000020.000000000000000000000000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--10000000000000000000000.000000000 -99999999999999999990.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+000000000000000000000000000000010.000000000000000000000000000000 000000000000000000000000000000020.000000000000000000000000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute92;
DROP PROCEDURE sp92;
DROP PROCEDURE IF EXISTS sp93;
@@ -20163,9 +21644,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute93();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-100000000000000000000.000000000 10000000000000000000000.000000000 100000000000000000010.000000000 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+0000000000000000000000000000000000000000000100000000000000000000 0000000000000000000000000000000000000000010000000000000000000000 0000000000000000000000000000000000000000000100000000000000000010 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-10000000000000000000000.000000000 100000000000000000010.000000000 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+0000000000000000000000000000000000000000010000000000000000000000 0000000000000000000000000000000000000000000100000000000000000010 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute93;
DROP PROCEDURE sp93;
DROP PROCEDURE IF EXISTS sp94;
@@ -20231,9 +21712,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute95();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-65532 65532 65542 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+65532 65532 65535 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-65532 65542 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+65532 65535 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute95;
DROP PROCEDURE sp95;
DROP PROCEDURE IF EXISTS sp96;
@@ -20265,9 +21746,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute96();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-65532 65532 65542 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+65532 65532 65535 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-65532 65542 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+65532 65535 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute96;
DROP PROCEDURE sp96;
DROP PROCEDURE IF EXISTS sp97;
@@ -20299,9 +21780,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute97();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--32602 -32602 -32592 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+65535 65535 65535 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--32602 -32592 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+65535 65535 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute97;
DROP PROCEDURE sp97;
DROP PROCEDURE IF EXISTS sp98;
@@ -20367,9 +21848,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute99();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
-252 252 262 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+252 252 255 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
-252 262 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+252 255 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute99;
DROP PROCEDURE sp99;
DROP PROCEDURE IF EXISTS sp100;
@@ -20435,9 +21916,9 @@ SELECT var1, var2, var3, var4, var5, var6, var7, var8;
END//
CALL spexecute101();
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12
--102 -102 -92 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
+255 255 255 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616 -9220000000000000000 6744073709551616 6744073709551616
var1 var2 var3 var4 var5 var6 var7 var8
--102 -92 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
+255 255 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616 6744073709551616
DROP PROCEDURE spexecute101;
DROP PROCEDURE sp101;
USE db_storedproc;
@@ -20462,13 +21943,13 @@ set a = '2005-03-14 01:01:02';
insert into temp_table values(a);
END//
show CREATE PROCEDURE sp2;
-Procedure sql_mode Create Procedure
-sp2 ALLOW_INVALID_DATES CREATE PROCEDURE `sp2`()
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp2 ALLOW_INVALID_DATES CREATE DEFINER=`root`@`localhost` PROCEDURE `sp2`()
BEGIN
declare a datetime;
set a = '2005-03-14 01:01:02';
insert into temp_table values(a);
-END
+END latin1 latin1_swedish_ci latin1_swedish_ci
set @@sql_mode = 'traditional';
CALL sp2 ();
SELECT * from temp_table;
@@ -20498,15 +21979,15 @@ set b = 5;
SELECT not 1 between a and b;
END//
show CREATE PROCEDURE sp3;
-Procedure sql_mode Create Procedure
-sp3 HIGH_NOT_PRECEDENCE CREATE PROCEDURE `sp3`()
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp3 HIGH_NOT_PRECEDENCE CREATE DEFINER=`root`@`localhost` PROCEDURE `sp3`()
BEGIN
declare a int signed;
declare b int unsigned;
set a = -5;
set b = 5;
SELECT not 1 between a and b;
-END
+END latin1 latin1_swedish_ci latin1_swedish_ci
set @@sql_mode='';
CALL sp3();
not 1 between a and b
@@ -20541,8 +22022,8 @@ set c = b/a;
show warnings;
END//
show CREATE PROCEDURE sp4;
-Procedure sql_mode Create Procedure
-sp4 REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI,ERROR_FOR_DIVISION_BY_ZERO CREATE PROCEDURE "sp4"()
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp4 REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI,ERROR_FOR_DIVISION_BY_ZERO CREATE DEFINER="root"@"localhost" PROCEDURE "sp4"()
BEGIN
declare a int;
declare b int;
@@ -20551,7 +22032,7 @@ set a = 0;
set b = 1;
set c = b/a;
show warnings;
-END
+END latin1 latin1_swedish_ci latin1_swedish_ci
set @@sql_mode='';
CALL sp4();
Level Code Message
@@ -20589,37 +22070,37 @@ set @x=i1;
set @y=@x;
END//
show CREATE PROCEDURE sp6a;
-Procedure sql_mode Create Procedure
-sp6a CREATE PROCEDURE `sp6a`(i1 longtext, out i2 mediumint , inout i3 longblob, in i4 year, out i5 real)
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp6a CREATE DEFINER=`root`@`localhost` PROCEDURE `sp6a`(i1 longtext, out i2 mediumint , inout i3 longblob, in i4 year, out i5 real)
BEGIN
set @x=i1;
set @y=@x;
-END
+END latin1 latin1_swedish_ci latin1_swedish_ci
show CREATE PROCEDURE sp6b;
-Procedure sql_mode Create Procedure
-sp6b CREATE PROCEDURE `sp6b`(out i1 longtext, out i2 mediumint , out i3 longblob, out i4 year, out i5 real)
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp6b CREATE DEFINER=`root`@`localhost` PROCEDURE `sp6b`(out i1 longtext, out i2 mediumint , out i3 longblob, out i4 year, out i5 real)
DETERMINISTIC
BEGIN
set @x=i1;
set @y=@x;
-END
+END latin1 latin1_swedish_ci latin1_swedish_ci
show CREATE PROCEDURE sp6c;
-Procedure sql_mode Create Procedure
-sp6c CREATE PROCEDURE `sp6c`(inout i1 longtext, inout i2 mediumint , inout i3 longblob, inout i4 year, inout i5 real)
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp6c CREATE DEFINER=`root`@`localhost` PROCEDURE `sp6c`(inout i1 longtext, inout i2 mediumint , inout i3 longblob, inout i4 year, inout i5 real)
COMMENT 'this is a comment'
BEGIN
set @x=i1;
set @y=@x;
-END
+END latin1 latin1_swedish_ci latin1_swedish_ci
SHOW PROCEDURE status like 'sp6a';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp6a PROCEDURE root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp6a PROCEDURE root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
SHOW PROCEDURE status like 'sp6b';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp6b PROCEDURE root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp6b PROCEDURE root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
SHOW PROCEDURE status like 'sp6c';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp6c PROCEDURE root@localhost modified created DEFINER this is a comment
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp6c PROCEDURE root@localhost modified created DEFINER this is a comment latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE sp6a;
DROP PROCEDURE sp6b;
DROP PROCEDURE sp6c;
@@ -20633,8 +22114,8 @@ set @x=i1;
set @y=@x;
END//
SHOW PROCEDURE status like 'sp6';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp6 PROCEDURE root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp6 PROCEDURE root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE sp6;
Testcase 4.8.3:
@@ -20659,8 +22140,8 @@ set @y=@x;
return 0;
END//
show function status like 'sp6';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp6 FUNCTION root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp6 FUNCTION root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION sp6;
Testcase 4.8.5:
@@ -20673,7 +22154,7 @@ Testcase 4.8.6:
--------------------------------------------------------------------------------
DROP PROCEDURE IF EXISTS sp6;
show procedure status like 'sp6';
-Db Name Type Definer Modified Created Security_type Comment
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
Testcase 4.8.7:
--------------------------------------------------------------------------------
@@ -20694,7 +22175,7 @@ BEGIN
return i1;
END//
show procedure status like 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
DROP FUNCTION fn1;
Testcase 4.8.9:
@@ -20708,8 +22189,8 @@ BEGIN
return i1;
END//
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created DEFINER
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION fn1;
Testcase 4.8.11:
@@ -20738,7 +22219,7 @@ Testcase 4.8.13:
--------------------------------------------------------------------------------
DROP FUNCTION IF EXISTS f1000;
SHOW FUNCTION STATUS LIKE 'f1000';
-Db Name Type Definer Modified Created Security_type Comment
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
Testcase 4.8.14:
--------------------------------------------------------------------------------
@@ -20760,7 +22241,7 @@ set @x=i1;
set @y=@x;
END//
show function status like 'sp6';
-Db Name Type Definer Modified Created Security_type Comment
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
DROP PROCEDURE sp6;
Testcase 4.8.16:
@@ -20777,8 +22258,8 @@ END//
alter procedure sp6 sql security invoker;
alter procedure sp6 comment 'this is a new comment';
SHOW PROCEDURE status like 'sp6';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc sp6 PROCEDURE root@localhost modified created INVOKER this is a new comment
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc sp6 PROCEDURE root@localhost modified created INVOKER this is a new comment latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE sp6;
Testcase 4.8.18:
@@ -20790,12 +22271,12 @@ return x;
END//
alter function fn1 sql security invoker;
show create function fn1;
-Function sql_mode Create Function
-fn1 CREATE FUNCTION `fn1`(x int) RETURNS int(11)
+Function sql_mode Create Function character_set_client collation_connection Database Collation
+fn1 CREATE DEFINER=`root`@`localhost` FUNCTION `fn1`(x int) RETURNS int(11)
SQL SECURITY INVOKER
BEGIN
return x;
-END
+END latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION fn1;
Testcase 4.8.19:
@@ -20808,8 +22289,8 @@ END//
alter function fn1 sql security invoker;
alter function fn1 comment 'this is a function 3242#@%$#@';
show function status like 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
-db_storedproc fn1 FUNCTION root@localhost modified created INVOKER this is a function 3242#@%$#@
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+db_storedproc fn1 FUNCTION root@localhost modified created INVOKER this is a function 3242#@%$#@ latin1 latin1_swedish_ci latin1_swedish_ci
DROP FUNCTION fn1;
Testcase 4.8.20:
@@ -20822,13 +22303,13 @@ set @y=@x;
END//
alter procedure sp6 comment 'this is simple';
show CREATE PROCEDURE sp6;
-Procedure sql_mode Create Procedure
-sp6 CREATE PROCEDURE `sp6`(i1 int , i2 int)
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp6 CREATE DEFINER=`root`@`localhost` PROCEDURE `sp6`(i1 int , i2 int)
COMMENT 'this is simple'
BEGIN
set @x=i1;
set @y=@x;
-END
+END latin1 latin1_swedish_ci latin1_swedish_ci
DROP PROCEDURE sp6;
Testcase 4.8.21:
@@ -20853,7 +22334,7 @@ set @y=@x;
END//
DROP PROCEDURE sp6;
SHOW PROCEDURE status like 'sp6';
-Db Name Type Definer Modified Created Security_type Comment
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
Testcase 4.8.23:
--------------------------------------------------------------------------------
@@ -20875,7 +22356,7 @@ return i1;
END//
DROP FUNCTION fn1;
SHOW FUNCTION STATUS LIKE 'fn1';
-Db Name Type Definer Modified Created Security_type Comment
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
Section 3.1.9 - Routine body checks:
--------------------------------------------------------------------------------
@@ -20894,16 +22375,16 @@ SELECT * from t9 limit 0, 100;
END//
CALL sp6 (10, 20, 30, 40, 50);
f1 f2 f3
--5000 a` -5000
--4999 aaa -4999
--4998 abaa -4998
--4997 acaaa -4997
--4996 adaaaa -4996
--4995 aeaaaaa -4995
--4994 afaaaaaa -4994
--4993 agaaaaaaa -4993
--4992 a^aaaaaaaa -4992
-4991 a_aaaaaaaaa -4991
+-4992 a^aaaaaaaa -4992
+-4993 agaaaaaaa -4993
+-4994 afaaaaaa -4994
+-4995 aeaaaaa -4995
+-4996 adaaaa -4996
+-4997 acaaa -4997
+-4998 abaa -4998
+-4999 aaa -4999
+-5000 a` -5000
DROP PROCEDURE sp6;
Testcase 4.9.2:
@@ -21363,9 +22844,16 @@ until done END repeat;
SELECT done;
close cur1;
END//
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+CALL h1();
+done
+0
+done
+1
+done
+1
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.14:
--------------------------------------------------------------------------------
@@ -21392,9 +22880,16 @@ until done END repeat;
SELECT done;
close cur1;
END//
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+CALL h1();
+done
+0
+done
+1
+done
+1
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.15:
--------------------------------------------------------------------------------
@@ -21422,9 +22917,16 @@ until done END repeat;
SELECT done;
close cur1;
END//
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+CALL h1();
+done
+0
+@x=1
+0
+done
+1
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.16:
--------------------------------------------------------------------------------
@@ -21452,17 +22954,16 @@ until done END repeat;
SELECT done;
close cur1;
END//
-CALL h1()
-# cleanup;
+CALL h1();
done
0
@x=1
0
done
1
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.17:
--------------------------------------------------------------------------------
@@ -21490,9 +22991,9 @@ done
0
done
1
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.18:
--------------------------------------------------------------------------------
@@ -21520,9 +23021,9 @@ done
0
done
1
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.19:
--------------------------------------------------------------------------------
@@ -21550,9 +23051,9 @@ END//
CALL h1();
done
0
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.20:
--------------------------------------------------------------------------------
@@ -21580,9 +23081,9 @@ END//
CALL h1();
done
0
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.21:
--------------------------------------------------------------------------------
@@ -21610,9 +23111,9 @@ done
0
done
1
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.22:
--------------------------------------------------------------------------------
@@ -21641,9 +23142,9 @@ done
0
done @x
1 1
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.23:
--------------------------------------------------------------------------------
@@ -21671,9 +23172,9 @@ END//
CALL h1();
done
0
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.24:
--------------------------------------------------------------------------------
@@ -21701,9 +23202,9 @@ END//
CALL h1();
done
0
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.25:
--------------------------------------------------------------------------------
@@ -21728,9 +23229,9 @@ END//
CALL h1();
done @x
1 1
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.26:
--------------------------------------------------------------------------------
@@ -21755,9 +23256,9 @@ END//
CALL h1();
done @x
1 1
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.27:
--------------------------------------------------------------------------------
@@ -21780,9 +23281,9 @@ set @x=1;
SELECT done, @x;
END//
CALL h1();
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.28:
--------------------------------------------------------------------------------
@@ -21805,9 +23306,9 @@ set @x=1;
SELECT done, @x;
END//
CALL h1();
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+drop table IF EXISTS res_t1;
+drop table IF EXISTS res_t2;
Testcase 4.11.29:
--------------------------------------------------------------------------------
@@ -21835,9 +23336,9 @@ END//
CALL h1();
done @x
1 1
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+drop table IF EXISTS res_t1;
+drop table IF EXISTS res_t2;
Testcase 4.11.30:
--------------------------------------------------------------------------------
@@ -21865,9 +23366,9 @@ END//
CALL h1();
done @x
1 1
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+drop table IF EXISTS res_t1;
+drop table IF EXISTS res_t2;
Testcase 4.11.31:
--------------------------------------------------------------------------------
@@ -21893,9 +23394,9 @@ set @x=1;
SELECT done, @x;
END//
CALL h1();
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+drop table IF EXISTS res_t1;
+drop table IF EXISTS res_t2;
Testcase 4.11.32:
--------------------------------------------------------------------------------
@@ -21921,9 +23422,9 @@ set @x=1;
SELECT done, @x;
END//
CALL h1();
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
Testcase 4.11.33:
--------------------------------------------------------------------------------
@@ -21948,7 +23449,7 @@ set @x=1;
SELECT done, @x;
END//
ERROR 42000: Duplicate condition: condname
-drop table res_t1;
+DROP TABLE IF EXISTS res_t1;
Testcase 4.11.35:
--------------------------------------------------------------------------------
@@ -21973,7 +23474,21 @@ insert into res_t1 values (3, 'c');
END begin2_label;
END begin1_label//
ERROR 42000: Bad SQLSTATE: '020'
-drop table res_t1;
+CREATE PROCEDURE h1 ()
+begin1_label:BEGIN
+declare condname1 condition for sqlstate '020';
+declare condname2 condition for sqlstate 'wewe';
+declare condname3 condition for 9999;
+set @var2 = 1;
+insert into res_t1 values (2, 'b');
+begin2_label: BEGIN
+declare continue handler for sqlstate '90000023' set @var3= 1;
+set @var4 = 1;
+insert into res_t1 values (3, 'c');
+END begin2_label;
+END begin1_label//
+ERROR 42000: Bad SQLSTATE: '020'
+DROP TABLE IF EXISTS res_t1;
Testcase 4.11.36:
--------------------------------------------------------------------------------
@@ -21989,7 +23504,7 @@ set x1 = 2;
END;
SELECT @x, x1;
END//
-DROP PROCEDURE h1;
+DROP PROCEDURE IF EXISTS h1;
Testcase 4.11.40:
--------------------------------------------------------------------------------
@@ -22010,7 +23525,7 @@ declare exit handler for condname2 set x5 = 1;
END//
ERROR 42000: Duplicate handler declared in the same block
DROP PROCEDURE IF EXISTS h1;
-drop table res_t1;
+DROP TABLE IF EXISTS res_t1;
Testcase 4.11.41:
--------------------------------------------------------------------------------
@@ -22026,6 +23541,9 @@ set x1 = 2;
END;
SELECT @x, x1;
END//
+CALL h1();
+@x x1
+0 2
DROP PROCEDURE IF EXISTS h1;
* Testcase 3.1.2.53 (4.11.42):
@@ -22076,8 +23594,8 @@ CALL h1();
SELECT @done, @x;
@done @x
1 1
-DROP PROCEDURE h1;
-DROP TABLE res_t1;
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
--source suite/funcs_1/storedproc/cleanup_sp_tb.inc
--------------------------------------------------------------------------------
diff --git a/mysql-test/suite/funcs_1/r/ndb_storedproc_10.result b/mysql-test/suite/funcs_1/r/ndb_storedproc_10.result
index ffedbec83fe..9fb78f108b4 100644
--- a/mysql-test/suite/funcs_1/r/ndb_storedproc_10.result
+++ b/mysql-test/suite/funcs_1/r/ndb_storedproc_10.result
@@ -58,6 +58,7 @@ load data infile 'MYSQL_TEST_DIR/suite/funcs_1/data/t4.txt' into table t11;
Section 3.1.10 - CALL checks:
--------------------------------------------------------------------------------
+USE db_storedproc;
Testcase 3.1.10.2 + 3.1.10.5:
-----------------------------
@@ -94,6 +95,7 @@ CALL sp31102();
ERROR 42000: execute command denied to user 'user_2'@'localhost' for routine 'db_storedproc.sp31102'
SELECT fn31105( 9 );
ERROR 42000: execute command denied to user 'user_2'@'localhost' for routine 'db_storedproc.fn31105'
+connection default;
USE db_storedproc;
root@localhost db_storedproc
@@ -114,6 +116,7 @@ a` a` 1000-01-01 -5000 a` -5000
SELECT fn31105( 9 );
fn31105( 9 )
81
+connection default;
USE db_storedproc;
root@localhost db_storedproc
@@ -180,6 +183,8 @@ DROP PROCEDURE IF EXISTS sp_ins_1;
DROP PROCEDURE IF EXISTS sp_ins_3;
DROP PROCEDURE IF EXISTS sp_upd;
DROP PROCEDURE IF EXISTS sp_ins_upd;
+DROP PROCEDURE IF EXISTS sp_del;
+DROP PROCEDURE IF EXISTS sp_with_rowcount;
CREATE TABLE temp(f1 CHAR(20),f2 CHAR(25),f3 DATE,f4 INT,f5 CHAR(25),f6 INT);
INSERT INTO temp SELECT * FROM t10;
CREATE PROCEDURE sp_ins_1()
@@ -207,49 +212,72 @@ END;
SELECT COUNT( f1 ), f1 FROM temp GROUP BY f1;
UPDATE temp SET temp.f1 = 'updated_2' WHERE temp.f1 ='qwe' AND temp.f2 = 'abc';
END//
+CREATE PROCEDURE sp_del()
+BEGIN
+DELETE FROM temp WHERE temp.f1 ='qwe' OR temp.f1 = 'updated_2';
+END//
+CREATE PROCEDURE sp_with_rowcount()
+BEGIN
+BEGIN
+INSERT INTO temp VALUES ('qwe', 'abc', '1989-11-09', 100, 'uvw', 1000),
+('qwe', 'xyz', '1998-03-26', 100, 'uvw', 1000),
+('qwe', 'abc', '2000-11-09', 100, 'uvw', 1000),
+('qwe', 'xyz', '2005-11-07', 100, 'uvw', 1000);
+END;
+SELECT row_count() AS 'row_count() after insert';
+SELECT row_count() AS 'row_count() after select row_count()';
+SELECT f1,f2,f3 FROM temp ORDER BY f1,f2,f3;
+UPDATE temp SET temp.f1 = 'updated_2' WHERE temp.f2 = 'abc';
+SELECT row_count() AS 'row_count() after update';
+SELECT f1,f2,f3 FROM temp ORDER BY f1,f2,f3;
+DELETE FROM temp WHERE temp.f1 = 'updated_2';
+SELECT row_count() AS 'row_count() after delete';
+END//
CALL sp_ins_1();
SELECT row_count();
row_count()
1
-SELECT * FROM temp ORDER BY f4;
+SELECT * FROM temp;
f1 f2 f3 f4 f5 f6
+a^aaaaaaaa a^aaaaaaaa 1000-01-09 -4992 a^aaaaaaaa -4992
+a_aaaaaaaaa a_aaaaaaaaa 1000-01-10 -4991 a_aaaaaaaaa -4991
a` a` 1000-01-01 -5000 a` -5000
aaa aaa 1000-01-02 -4999 aaa -4999
abaa abaa 1000-01-03 -4998 abaa -4998
+abc abc 2005-10-03 100 uvw 1000
acaaa acaaa 1000-01-04 -4997 acaaa -4997
adaaaa adaaaa 1000-01-05 -4996 adaaaa -4996
aeaaaaa aeaaaaa 1000-01-06 -4995 aeaaaaa -4995
afaaaaaa afaaaaaa 1000-01-07 -4994 afaaaaaa -4994
agaaaaaaa agaaaaaaa 1000-01-08 -4993 agaaaaaaa -4993
-a^aaaaaaaa a^aaaaaaaa 1000-01-09 -4992 a^aaaaaaaa -4992
-a_aaaaaaaaa a_aaaaaaaaa 1000-01-10 -4991 a_aaaaaaaaa -4991
-abc abc 2005-10-03 100 uvw 1000
CALL sp_ins_3();
SELECT row_count();
row_count()
1
-SELECT * FROM temp ORDER BY f4;
+SELECT * FROM temp;
f1 f2 f3 f4 f5 f6
+a^aaaaaaaa a^aaaaaaaa 1000-01-09 -4992 a^aaaaaaaa -4992
+a_aaaaaaaaa a_aaaaaaaaa 1000-01-10 -4991 a_aaaaaaaaa -4991
a` a` 1000-01-01 -5000 a` -5000
aaa aaa 1000-01-02 -4999 aaa -4999
abaa abaa 1000-01-03 -4998 abaa -4998
+abc abc 2005-10-03 100 uvw 1000
+abc xyz 1949-05-23 100 uvw 1000
+abc xyz 1989-11-09 100 uvw 1000
+abc xyz 2005-10-24 100 uvw 1000
acaaa acaaa 1000-01-04 -4997 acaaa -4997
adaaaa adaaaa 1000-01-05 -4996 adaaaa -4996
aeaaaaa aeaaaaa 1000-01-06 -4995 aeaaaaa -4995
afaaaaaa afaaaaaa 1000-01-07 -4994 afaaaaaa -4994
agaaaaaaa agaaaaaaa 1000-01-08 -4993 agaaaaaaa -4993
-a^aaaaaaaa a^aaaaaaaa 1000-01-09 -4992 a^aaaaaaaa -4992
-a_aaaaaaaaa a_aaaaaaaaa 1000-01-10 -4991 a_aaaaaaaaa -4991
-abc abc 2005-10-03 100 uvw 1000
-abc xyz 1949-05-23 100 uvw 1000
-abc xyz 1989-11-09 100 uvw 1000
-abc xyz 2005-10-24 100 uvw 1000
CALL sp_upd();
SELECT row_count();
row_count()
4
-SELECT * FROM temp ORDER BY f4;
+SELECT * FROM temp;
f1 f2 f3 f4 f5 f6
+a^aaaaaaaa a^aaaaaaaa 1000-01-09 -4992 a^aaaaaaaa -4992
+a_aaaaaaaaa a_aaaaaaaaa 1000-01-10 -4991 a_aaaaaaaaa -4991
a` a` 1000-01-01 -5000 a` -5000
aaa aaa 1000-01-02 -4999 aaa -4999
abaa abaa 1000-01-03 -4998 abaa -4998
@@ -258,8 +286,6 @@ adaaaa adaaaa 1000-01-05 -4996 adaaaa -4996
aeaaaaa aeaaaaa 1000-01-06 -4995 aeaaaaa -4995
afaaaaaa afaaaaaa 1000-01-07 -4994 afaaaaaa -4994
agaaaaaaa agaaaaaaa 1000-01-08 -4993 agaaaaaaa -4993
-a^aaaaaaaa a^aaaaaaaa 1000-01-09 -4992 a^aaaaaaaa -4992
-a_aaaaaaaaa a_aaaaaaaaa 1000-01-10 -4991 a_aaaaaaaaa -4991
updated abc 2005-10-03 100 uvw 1000
updated xyz 1949-05-23 100 uvw 1000
updated xyz 1989-11-09 100 uvw 1000
@@ -281,8 +307,10 @@ COUNT( f1 ) f1
SELECT row_count();
row_count()
3
-SELECT * FROM temp ORDER BY f4;
+SELECT * FROM temp;
f1 f2 f3 f4 f5 f6
+a^aaaaaaaa a^aaaaaaaa 1000-01-09 -4992 a^aaaaaaaa -4992
+a_aaaaaaaaa a_aaaaaaaaa 1000-01-10 -4991 a_aaaaaaaaa -4991
a` a` 1000-01-01 -5000 a` -5000
aaa aaa 1000-01-02 -4999 aaa -4999
abaa abaa 1000-01-03 -4998 abaa -4998
@@ -291,20 +319,67 @@ adaaaa adaaaa 1000-01-05 -4996 adaaaa -4996
aeaaaaa aeaaaaa 1000-01-06 -4995 aeaaaaa -4995
afaaaaaa afaaaaaa 1000-01-07 -4994 afaaaaaa -4994
agaaaaaaa agaaaaaaa 1000-01-08 -4993 agaaaaaaa -4993
-a^aaaaaaaa a^aaaaaaaa 1000-01-09 -4992 a^aaaaaaaa -4992
-a_aaaaaaaaa a_aaaaaaaaa 1000-01-10 -4991 a_aaaaaaaaa -4991
-updated_2 abc 2000-11-09 100 uvw 1000
qwe xyz 1998-03-26 100 uvw 1000
-updated_2 abc 1989-11-09 100 uvw 1000
-updated xyz 2005-10-24 100 uvw 1000
-updated xyz 1989-11-09 100 uvw 1000
-updated xyz 1949-05-23 100 uvw 1000
updated abc 2005-10-03 100 uvw 1000
+updated xyz 1949-05-23 100 uvw 1000
+updated xyz 1989-11-09 100 uvw 1000
+updated xyz 2005-10-24 100 uvw 1000
+updated_2 abc 1989-11-09 100 uvw 1000
+updated_2 abc 2000-11-09 100 uvw 1000
updated_2 abc 2005-11-07 100 uvw 1000
+CALL sp_del();
+SELECT row_count();
+row_count()
+4
+SELECT * FROM temp;
+f1 f2 f3 f4 f5 f6
+a^aaaaaaaa a^aaaaaaaa 1000-01-09 -4992 a^aaaaaaaa -4992
+a_aaaaaaaaa a_aaaaaaaaa 1000-01-10 -4991 a_aaaaaaaaa -4991
+a` a` 1000-01-01 -5000 a` -5000
+aaa aaa 1000-01-02 -4999 aaa -4999
+abaa abaa 1000-01-03 -4998 abaa -4998
+acaaa acaaa 1000-01-04 -4997 acaaa -4997
+adaaaa adaaaa 1000-01-05 -4996 adaaaa -4996
+aeaaaaa aeaaaaa 1000-01-06 -4995 aeaaaaa -4995
+afaaaaaa afaaaaaa 1000-01-07 -4994 afaaaaaa -4994
+agaaaaaaa agaaaaaaa 1000-01-08 -4993 agaaaaaaa -4993
+updated abc 2005-10-03 100 uvw 1000
+updated xyz 1949-05-23 100 uvw 1000
+updated xyz 1989-11-09 100 uvw 1000
+updated xyz 2005-10-24 100 uvw 1000
+DELETE FROM temp;
+CALL sp_with_rowcount();
+row_count() after insert
+4
+row_count() after select row_count()
+-1
+f1 f2 f3
+qwe abc 1989-11-09
+qwe abc 2000-11-09
+qwe xyz 1998-03-26
+qwe xyz 2005-11-07
+row_count() after update
+2
+f1 f2 f3
+qwe xyz 1998-03-26
+qwe xyz 2005-11-07
+updated_2 abc 1989-11-09
+updated_2 abc 2000-11-09
+row_count() after delete
+2
+SELECT row_count();
+row_count()
+-1
+SELECT * FROM temp;
+f1 f2 f3 f4 f5 f6
+qwe xyz 1998-03-26 100 uvw 1000
+qwe xyz 2005-11-07 100 uvw 1000
DROP PROCEDURE sp_ins_1;
DROP PROCEDURE sp_ins_3;
DROP PROCEDURE sp_upd;
DROP PROCEDURE sp_ins_upd;
+DROP PROCEDURE sp_del;
+DROP PROCEDURE sp_with_rowcount;
DROP TABLE temp;
Testcase 3.1.10.8:
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 33deedd4b37..b67b0e2afe0 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 1475 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK'
+Error 1478 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:
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 35d1e341e8d..f69ffd20597 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 1475 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK'
+Error 1478 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:
@@ -185,15 +185,14 @@ insert 3.5.3.2-no
insert 3.5.3.6-no
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
-
-Trigger create disabled - should fail - Bug 8884
-------------------------------------------------
+create trigger trg4a_1 before INSERT on t1 for each row
+set new.f1 = 'trig 3.5.3.7-1a';
insert into t1 (f1) values ('insert 3.5.3.7-1a');
+ERROR 42000: UPDATE command denied to user 'test_noprivs'@'localhost' for column 'f1' in table 't1'
select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
insert 3.5.3.6-no
-insert 3.5.3.7-1a
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
drop trigger trg4a_1;
@@ -211,7 +210,6 @@ select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
insert 3.5.3.6-no
-insert 3.5.3.7-1a
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
trig 3.5.3.7-2a
@@ -240,29 +238,27 @@ Grants for test_noprivs@localhost
GRANT USAGE ON *.* TO 'test_noprivs'@'localhost' IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
GRANT SELECT, INSERT, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `priv_db`.* TO 'test_noprivs'@'localhost'
use priv_db;
-
-Trigger create disabled - should fail - Bug 8884
-------------------------------------------------
+create trigger trg4b_1 before UPDATE on t1 for each row
+set new.f1 = 'trig 3.5.3.7-1b';
insert into t1 (f1) values ('insert 3.5.3.7-1b');
select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
insert 3.5.3.6-no
-insert 3.5.3.7-1a
insert 3.5.3.7-1b
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
trig 3.5.3.7-2a
update t1 set f1 = 'update 3.5.3.7-1b' where f1 = 'insert 3.5.3.7-1b';
+ERROR 42000: UPDATE command denied to user 'test_noprivs'@'localhost' for column 'f1' in table 't1'
select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
insert 3.5.3.6-no
-insert 3.5.3.7-1a
+insert 3.5.3.7-1b
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
trig 3.5.3.7-2a
-update 3.5.3.7-1b
drop trigger trg4b_1;
show grants;
Grants for test_yesprivs@localhost
@@ -276,23 +272,21 @@ select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
insert 3.5.3.6-no
-insert 3.5.3.7-1a
+insert 3.5.3.7-1b
insert 3.5.3.7-2b
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
trig 3.5.3.7-2a
-update 3.5.3.7-1b
update t1 set f1 = 'update 3.5.3.7-2b' where f1 = 'insert 3.5.3.7-2b';
select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
insert 3.5.3.6-no
-insert 3.5.3.7-1a
+insert 3.5.3.7-1b
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
trig 3.5.3.7-2a
trig 3.5.3.7-2b
-update 3.5.3.7-1b
drop trigger trg4b_2;
Testcase 3.5.3.7c
@@ -318,21 +312,19 @@ Grants for test_noprivs@localhost
GRANT TRIGGER ON *.* TO 'test_noprivs'@'localhost' IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
GRANT SELECT, INSERT, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE VIEW, SHOW VIEW, TRIGGER ON `priv_db`.`t1` TO 'test_noprivs'@'localhost'
use priv_db;
-
-Trigger create disabled - should fail - Bug 8884
-------------------------------------------------
+create trigger trg4c_1 before INSERT on t1 for each row
+set new.f1 = 'trig 3.5.3.7-1c';
insert into t1 (f1) values ('insert 3.5.3.7-1c');
+ERROR 42000: UPDATE command denied to user 'test_noprivs'@'localhost' for column 'f1' in table 't1'
select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
insert 3.5.3.6-no
-insert 3.5.3.7-1a
-insert 3.5.3.7-1c
+insert 3.5.3.7-1b
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
trig 3.5.3.7-2a
trig 3.5.3.7-2b
-update 3.5.3.7-1b
drop trigger trg4c_1;
show grants;
Grants for test_yesprivs@localhost
@@ -346,14 +338,12 @@ select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
insert 3.5.3.6-no
-insert 3.5.3.7-1a
-insert 3.5.3.7-1c
+insert 3.5.3.7-1b
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
trig 3.5.3.7-2a
trig 3.5.3.7-2b
trig 3.5.3.7-2c
-update 3.5.3.7-1b
drop trigger trg4c_2;
Testcase 3.5.3.7d:
@@ -377,23 +367,20 @@ Grants for test_noprivs@localhost
GRANT TRIGGER ON *.* TO 'test_noprivs'@'localhost' IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
GRANT SELECT (f1), INSERT (f1) ON `priv_db`.`t1` TO 'test_noprivs'@'localhost'
use priv_db;
-
-Trigger create disabled - should fail - Bug 8884
-------------------------------------------------
+create trigger trg4d_1 before INSERT on t1 for each row
+set new.f1 = 'trig 3.5.3.7-1d';
insert into t1 (f1) values ('insert 3.5.3.7-1d');
+ERROR 42000: UPDATE command denied to user 'test_noprivs'@'localhost' for column 'f1' in table 't1'
select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
insert 3.5.3.6-no
-insert 3.5.3.7-1a
-insert 3.5.3.7-1c
-insert 3.5.3.7-1d
+insert 3.5.3.7-1b
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
trig 3.5.3.7-2a
trig 3.5.3.7-2b
trig 3.5.3.7-2c
-update 3.5.3.7-1b
drop trigger trg4d_1;
show grants;
Grants for test_yesprivs@localhost
@@ -407,16 +394,13 @@ select f1 from t1 order by f1;
f1
insert 3.5.3.2-no
insert 3.5.3.6-no
-insert 3.5.3.7-1a
-insert 3.5.3.7-1c
-insert 3.5.3.7-1d
+insert 3.5.3.7-1b
trig 3.5.3.2_2-yes
trig 3.5.3.2_2-yes
trig 3.5.3.7-2a
trig 3.5.3.7-2b
trig 3.5.3.7-2c
trig 3.5.3.7-2d
-update 3.5.3.7-1b
drop trigger trg4d_2;
Testcase 3.5.3.8a:
@@ -441,14 +425,14 @@ use priv_db;
show grants;
Grants for test_noprivs@localhost
GRANT INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO 'test_noprivs'@'localhost' IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
-
-Trigger create disabled - should fail - Bug 8887
-------------------------------------------------
+create trigger trg5a_1 before INSERT on t1 for each row
+set @test_var = new.f1;
set @test_var = 'before trig 3.5.3.8-1a';
select @test_var;
@test_var
before trig 3.5.3.8-1a
insert into t1 (f1) values ('insert 3.5.3.8-1a');
+ERROR 42000: SELECT command denied to user 'test_noprivs'@'localhost' for column 'f1' in table 't1'
select @test_var;
@test_var
before trig 3.5.3.8-1a
@@ -496,15 +480,15 @@ Grants for test_noprivs@localhost
GRANT TRIGGER ON *.* TO 'test_noprivs'@'localhost' IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
GRANT INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `priv_db`.* TO 'test_noprivs'@'localhost'
use priv_db;
-
-Trigger create disabled - should fail - Bug 8887
-------------------------------------------------
+create trigger trg5b_1 before UPDATE on t1 for each row
+set @test_var= new.f1;
set @test_var= 'before trig 3.5.3.8-1b';
insert into t1 (f1) values ('insert 3.5.3.8-1b');
select @test_var;
@test_var
before trig 3.5.3.8-1b
update t1 set f1= 'update 3.5.3.8-1b' where f1 = 'insert 3.5.3.8-1b';
+ERROR 42000: SELECT command denied to user 'test_noprivs'@'localhost' for column 'f1' in table 't1'
select @test_var;
@test_var
before trig 3.5.3.8-1b
@@ -551,11 +535,11 @@ Grants for test_noprivs@localhost
GRANT TRIGGER ON *.* TO 'test_noprivs'@'localhost' IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
GRANT INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE VIEW, SHOW VIEW, TRIGGER ON `priv_db`.`t1` TO 'test_noprivs'@'localhost'
use priv_db;
-
-Trigger create disabled - should fail - Bug 8887
-------------------------------------------------
+create trigger trg5c_1 before INSERT on t1 for each row
+set @test_var= new.f1;
set @test_var= 'before trig 3.5.3.8-1c';
insert into t1 (f1) values ('insert 3.5.3.8-1c');
+ERROR 42000: SELECT command denied to user 'test_noprivs'@'localhost' for column 'f1' in table 't1'
select @test_var;
@test_var
before trig 3.5.3.8-1c
@@ -597,11 +581,11 @@ Grants for test_noprivs@localhost
GRANT TRIGGER ON *.* TO 'test_noprivs'@'localhost' IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576'
GRANT INSERT (f1), UPDATE (f1) ON `priv_db`.`t1` TO 'test_noprivs'@'localhost'
use priv_db;
-
-Trigger create disabled - should fail - Bug 8887
-------------------------------------------------
+create trigger trg5d_1 before INSERT on t1 for each row
+set @test_var= new.f1;
set @test_var='before trig 3.5.3.8-1d';
insert into t1 (f1) values ('insert 3.5.3.8-1d');
+ERROR 42000: SELECT command denied to user 'test_noprivs'@'localhost' for column 'f1' in table 't1'
select @test_var;
@test_var
before trig 3.5.3.8-1d
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 505d2ed9f07..32757a844aa 100644
--- a/mysql-test/suite/funcs_1/r/ndb_trig_03e.result
+++ b/mysql-test/suite/funcs_1/r/ndb_trig_03e.result
@@ -571,10 +571,8 @@ test_yesprivs@localhost
use priv_db;
show triggers;
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 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;
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 e0c64f7598b..e21a2b312e4 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 1475 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK'
+Error 1478 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 5b542a1a4c8..ae84a31b170 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 1475 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK'
+Error 1478 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:
@@ -140,10 +140,10 @@ values ('1', 'Test 3.5.8.4', 222, 23456, 1.05);
Select f120, f122, f136, f144, f163 from tb3 where f122= 'Test 3.5.8.4';
f120 f122 f136 f144 f163
1 Test 3.5.8.4 00222 0000023456 1.050000000000000000000000000000
-select * from db_test.t1_i order by i120;
+select * from db_test.t1_i;
i120 i136 i144 i163
1 00222 0000023456 1.050000000000000000000000000000
-select * from db_test.t1_u order by u120;
+select * from db_test.t1_u;
u120 u136 u144 u163
a 00111 0000099999 999.990000000000000000000000000000
b 00222 0000023456 1.050000000000000000000000000000
@@ -151,7 +151,7 @@ c 00333 0000099999 999.990000000000000000000000000000
d 00222 0000023456 1.050000000000000000000000000000
e 00222 0000023456 1.050000000000000000000000000000
f 00333 0000099999 999.990000000000000000000000000000
-select * from db_test.t1_d order by d120;
+select * from db_test.t1_d;
d120 d136 d144 d163
a 00111 0000099999 999.990000000000000000000000000000
c 00333 0000099999 999.990000000000000000000000000000
@@ -344,20 +344,20 @@ set @test_var='Empty';
Insert into tb3 (f120, f122, f136, f144)
values ('a', 'Test 3.5.8.5-case', 5, 7);
select f120, f122, f136, f144, @test_var
-from tb3 where f122 = 'Test 3.5.8.5-case' order by f120;
+from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;
f120 f122 f136 f144 @test_var
A Test 3.5.8.5-case 00125 0000000007 A*seven
Insert into tb3 (f120, f122, f136, f144)
values ('b', 'Test 3.5.8.5-case', 71,16);
select f120, f122, f136, f144, @test_var
-from tb3 where f122 = 'Test 3.5.8.5-case' order by f120;
+from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;
f120 f122 f136 f144 @test_var
A Test 3.5.8.5-case 00125 0000000007 B*0000000016
B Test 3.5.8.5-case 00191 0000000016 B*0000000016
Insert into tb3 (f120, f122, f136, f144)
values ('c', 'Test 3.5.8.5-case', 80,1);
select f120, f122, f136, f144, @test_var
-from tb3 where f122 = 'Test 3.5.8.5-case' order by f120;
+from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;
f120 f122 f136 f144 @test_var
A Test 3.5.8.5-case 00125 0000000007 C=one
B Test 3.5.8.5-case 00191 0000000016 C=one
@@ -367,7 +367,7 @@ values ('d', 'Test 3.5.8.5-case', 152);
Warnings:
Warning 1265 Data truncated for column 'f120' at row 1
select f120, f122, f136, f144, @test_var
-from tb3 where f122 = 'Test 3.5.8.5-case' order by f120;
+from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;
f120 f122 f136 f144 @test_var
1 Test 3.5.8.5-case 00152 0000099999 1*0000099999
A Test 3.5.8.5-case 00125 0000000007 1*0000099999
@@ -378,7 +378,7 @@ values ('e', 'Test 3.5.8.5-case', 200, 8);
Warnings:
Warning 1265 Data truncated for column 'f120' at row 1
select f120, f122, f136, f144, @test_var
-from tb3 where f122 = 'Test 3.5.8.5-case' order by f120;
+from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;
f120 f122 f136 f144 @test_var
1 Test 3.5.8.5-case 00152 0000099999 1=eight
1 Test 3.5.8.5-case 00200 0000000008 1=eight
@@ -388,7 +388,7 @@ C Test 3.5.8.5-case 00200 0000000001 1=eight
Insert into tb3 (f120, f122, f136, f144)
values ('f', 'Test 3.5.8.5-case', 100, 8);
select f120, f122, f136, f144, @test_var
-from tb3 where f122 = 'Test 3.5.8.5-case' order by f120;
+from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;
f120 f122 f136 f144 @test_var
1 Test 3.5.8.5-case 00152 0000099999 1=eight
1 Test 3.5.8.5-case 00200 0000000008 1=eight
@@ -500,9 +500,38 @@ drop trigger trg7;
Testcase 3.5.8.6: (requirement void)
------------------------------------
+CREATE PROCEDURE sp_01 () BEGIN set @v1=1; END//
+CREATE TRIGGER trg8_1 BEFORE UPDATE ON tb3 FOR EACH ROW
+BEGIN
+CALL sp_01 ();
+END//
+Insert into tb3 (f120, f122, f136) values ('6', 'Test 3.5.8.6-insert', 101);
+update tb3 set f120='S', f136=111,
+f122='Test 3.5.8.6-tr8_1'
+ where f122='Test 3.5.8.6-insert';
+select f120, f122
+from tb3 where f122 like 'Test 3.5.8.6%' order by f120;
+f120 f122
+S Test 3.5.8.6-tr8_1
+DROP TRIGGER trg8_1;
+DROP PROCEDURE sp_01;
-Testcase 3.5.8.7: (Disabled as a result of bug _____)
------------------------------------------------------
+Testcase 3.5.8.7
+----------------
+Create trigger trg9_1 before update on tb3 for each row
+BEGIN
+Start transaction;
+Set new.f120='U';
+Commit;
+END//
+ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger.
+Create trigger trg9_2 before delete on tb3 for each row
+BEGIN
+Start transaction;
+Set @var2=old.f120;
+Rollback;
+END//
+ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger.
drop user test_general@localhost;
drop user test_general;
drop user test_super@localhost;
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 6cb05a1d3ff..623036fa28f 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 1475 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK'
+Error 1478 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 3d9db02a375..a371d2d4fda 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 1475 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK'
+Error 1478 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:
@@ -295,8 +295,8 @@ drop table t2;
drop table t3;
drop table t4;
-Testcase y.y.y.4: Recursive trigger/SP references (disabled bug 11889)
-----------------------------------------------------------------------
+Testcase y.y.y.4: Recursive trigger/SP references
+-------------------------------------------------
set @sql_mode='traditional';
create table t1_sp (
count integer,
diff --git a/mysql-test/suite/funcs_1/r/ndb_views.result b/mysql-test/suite/funcs_1/r/ndb_views.result
index 73efd3309f9..486887686c9 100644
--- a/mysql-test/suite/funcs_1/r/ndb_views.result
+++ b/mysql-test/suite/funcs_1/r/ndb_views.result
@@ -123,11 +123,7 @@ USE test;
--------------------------------------------------------------------------------
There are some statements where the ps-protocol is switched off.
-Bug#11589: mysqltest, --ps-protocol, strange output, float/double/real with zerofill
---------------------------------------------------------------------------------
-
-! Attention: The file with the expected results suffers from
-Bug#10713: mysqldump includes database in create view and referenced tables
+Bug#32285: mysqltest, --ps-protocol, strange output, float/double/real with zerofill
--------------------------------------------------------------------------------
insert into test.tb2 (f59,f60) values (76710,226546);
insert into test.tb2 (f59,f60) values(2760,985654);
@@ -169,6 +165,58 @@ insert into tb2 (f59,f60,f61) values (109,108,104);
INSERT INTO tb2 (f59,f60) VALUES( 299,899 );
INSERT INTO tb2 (f59,f60) VALUES( 242,79 );
INSERT INTO tb2 (f59,f60) VALUES( 424,89 );
+SELECT * FROM tb2 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
+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
+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
+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
+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
Use test;
Testcase 3.3.1.1
@@ -203,27 +251,27 @@ f59 f60 f61
8 8 0000000008
9 9 0000000009
CREATE or REPLACE VIEW v1 AS select f59,f60,f61
-FROM test.tb2 limit 4,3;
-select * FROM v1 order by f59,f60,f61 limit 0,10;
+FROM test.tb2;
+select * FROM v1 order by f59,f60,f61 limit 4,3;
f59 f60 f61
-10 10 0000000010
-19 18 0000000014
-24 51654 NULL
+4 74 NULL
+5 5 0000000005
+6 6 0000000006
CREATE or REPLACE VIEW v1 AS select distinct f59
-FROM test.tb2 limit 4,3;
-select * FROM v1 order by f59 limit 0,10;
+FROM test.tb2;
+select * FROM v1 order by f59 limit 4,3;
f59
-15
-107
-209
+5
+6
+7
ALTER VIEW v1 AS select f59
-FROM test.tb2 limit 6,2;
-select * FROM v1 order by f59 limit 0,10;
+FROM test.tb2;
+select * FROM v1 order by f59 limit 6,2;
f59
-10
-34
+6
+7
CREATE or REPLACE VIEW v1 AS select f59
-from tb2 order by f59 limit 100;
+from tb2 order by f59;
select * FROM v1 order by f59 limit 0,10;
f59
1
@@ -237,7 +285,7 @@ f59
8
9
CREATE or REPLACE VIEW v1 AS select f59
-from tb2 order by f59 asc limit 100;
+from tb2 order by f59 asc;
select * FROM v1 limit 0,10;
f59
1
@@ -251,7 +299,7 @@ f59
8
9
CREATE or REPLACE VIEW v1 AS select f59
-from tb2 order by f59 desc limit 100;
+from tb2 order by f59 desc;
select * FROM v1 limit 0,10;
f59
569300
@@ -265,7 +313,7 @@ f59
987
660
CREATE or REPLACE VIEW v1 AS select f59
-from tb2 group by f59 limit 100;
+from tb2 group by f59;
select * FROM v1 order by f59 limit 0,10;
f59
1
@@ -279,7 +327,7 @@ f59
9
10
CREATE or REPLACE VIEW v1 AS select f59
-from tb2 group by f59 asc limit 100;
+from tb2 group by f59 asc;
select * FROM v1 order by f59 limit 0,10;
f59
1
@@ -293,7 +341,7 @@ f59
9
10
CREATE or REPLACE VIEW v1 AS select f59
-from tb2 group by f59 desc limit 100;
+from tb2 group by f59 desc;
select * FROM v1 order by f59 limit 0,10;
f59
1
@@ -307,7 +355,7 @@ f59
9
10
CREATE or REPLACE VIEW v1 AS (select f59 from tb2)
-union (select f59 from t1) limit 100;
+union (select f59 from t1);
select * FROM v1 order by f59 limit 0,10;
f59
1
@@ -351,71 +399,3069 @@ f59
CREATE or REPLACE VIEW v1 AS select *
FROM test.tb2 WITH LOCAL CHECK OPTION ;
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
-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
-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
-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
+f59 1
+f60 1
+f61 0000000001
+f62 0000000000000000000000000000000000000000000000000000000000000001
+f63 0000000001
+f64 0000000000000000000000000000000000000000000000000000000000000001
+f65 -5
+f66 0.000000000000000000000000000000
+f67 1
+f68 0.000000000000000000000000000000
+f69 0000000001
+f70 000000000000000000000000000000000.000000000000000000000000000000
+f71 0000000001
+f72 000000000000000000000000000000000.000000000000000000000000000000
+f73 -1.17549435e-38
+f74 1.175494352e-38
+f75 00000001.175494352e-38
+f76 00000001.175494352e-38
+f77 -1.17549435e-38
+f78 1.175494352e-38
+f79 00000001.175494352e-38
+f80 00000001.175494352e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.17549435e-38
+f95 1.17549e-38
+f96 1.175494352e-38
+f97 01.17549e-38
+f98 00000001.175494352e-38
+f99 01.17549e-38
+f100 00000001.175494352e-38
+f101 1000-01-01
+f102 838:59:58
+f103 1970-01-02 00:00:01
+f104 1970-01-02 00:00:01
+f105 1902
+f106 1902
+f107 1902
+f108 2enum
+f109 2set
+f59 2
+f60 2
+f61 0000000002
+f62 0000000000000000000000000000000000000000000000000000000000000002
+f63 0000000002
+f64 0000000000000000000000000000000000000000000000000000000000000002
+f65 -4
+f66 1.100000000000000000000000000000
+f67 2
+f68 1.100000000000000000000000000000
+f69 0000000002
+f70 000000000000000000000000000000001.100000000000000000000000000000
+f71 0000000002
+f72 000000000000000000000000000000001.100000000000000000000000000000
+f73 -1.175494349e-38
+f74 1.175494353e-38
+f75 00000001.175494353e-38
+f76 00000001.175494353e-38
+f77 -1.175494349e-38
+f78 1.175494353e-38
+f79 00000001.175494353e-38
+f80 00000001.175494353e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494349e-38
+f95 1.17549e-38
+f96 1.175494353e-38
+f97 01.17549e-38
+f98 00000001.175494353e-38
+f99 01.17549e-38
+f100 00000001.175494353e-38
+f101 1000-01-02
+f102 838:59:57
+f103 1970-01-03 00:00:02
+f104 1970-01-03 00:00:02
+f105 1903
+f106 1903
+f107 1903
+f108 1enum
+f109 1set,2set
+f59 3
+f60 3
+f61 0000000003
+f62 0000000000000000000000000000000000000000000000000000000000000003
+f63 0000000003
+f64 0000000000000000000000000000000000000000000000000000000000000003
+f65 -3
+f66 2.200000000000000000000000000000
+f67 3
+f68 2.200000000000000000000000000000
+f69 0000000003
+f70 000000000000000000000000000000002.200000000000000000000000000000
+f71 0000000003
+f72 000000000000000000000000000000002.200000000000000000000000000000
+f73 -1.175494348e-38
+f74 1.175494354e-38
+f75 00000001.175494354e-38
+f76 00000001.175494354e-38
+f77 -1.175494348e-38
+f78 1.175494354e-38
+f79 00000001.175494354e-38
+f80 00000001.175494354e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494348e-38
+f95 1.17549e-38
+f96 1.175494354e-38
+f97 01.17549e-38
+f98 00000001.175494354e-38
+f99 01.17549e-38
+f100 00000001.175494354e-38
+f101 1000-01-03
+f102 838:59:56
+f103 1970-01-04 00:00:03
+f104 1970-01-04 00:00:03
+f105 1904
+f106 1904
+f107 1904
+f108 2enum
+f109 1set
+f59 4
+f60 4
+f61 0000000004
+f62 0000000000000000000000000000000000000000000000000000000000000004
+f63 0000000004
+f64 0000000000000000000000000000000000000000000000000000000000000004
+f65 -2
+f66 3.300000000000000000000000000000
+f67 4
+f68 3.300000000000000000000000000000
+f69 0000000004
+f70 000000000000000000000000000000003.300000000000000000000000000000
+f71 0000000004
+f72 000000000000000000000000000000003.300000000000000000000000000000
+f73 -1.175494347e-38
+f74 1.175494355e-38
+f75 00000001.175494355e-38
+f76 00000001.175494355e-38
+f77 -1.175494347e-38
+f78 1.175494355e-38
+f79 00000001.175494355e-38
+f80 00000001.175494355e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494347e-38
+f95 1.17549e-38
+f96 1.175494355e-38
+f97 01.17549e-38
+f98 00000001.175494355e-38
+f99 01.17549e-38
+f100 00000001.175494355e-38
+f101 1000-01-04
+f102 838:59:55
+f103 1970-01-05 00:00:04
+f104 1970-01-05 00:00:04
+f105 1905
+f106 1905
+f107 1905
+f108 1enum
+f109 2set
+f59 4
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 5
+f60 5
+f61 0000000005
+f62 0000000000000000000000000000000000000000000000000000000000000005
+f63 0000000005
+f64 0000000000000000000000000000000000000000000000000000000000000005
+f65 -1
+f66 4.400000000000000000000000000000
+f67 5
+f68 4.400000000000000000000000000000
+f69 0000000005
+f70 000000000000000000000000000000004.400000000000000000000000000000
+f71 0000000005
+f72 000000000000000000000000000000004.400000000000000000000000000000
+f73 -1.175494346e-38
+f74 1.175494356e-38
+f75 00000001.175494356e-38
+f76 00000001.175494356e-38
+f77 -1.175494346e-38
+f78 1.175494356e-38
+f79 00000001.175494356e-38
+f80 00000001.175494356e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494346e-38
+f95 1.17549e-38
+f96 1.175494356e-38
+f97 01.17549e-38
+f98 00000001.175494356e-38
+f99 01.17549e-38
+f100 00000001.175494356e-38
+f101 1000-01-05
+f102 838:59:54
+f103 1970-01-06 00:00:05
+f104 1970-01-06 00:00:05
+f105 1906
+f106 1906
+f107 1906
+f108 2enum
+f109 1set,2set
+f59 6
+f60 6
+f61 0000000006
+f62 0000000000000000000000000000000000000000000000000000000000000006
+f63 0000000006
+f64 0000000000000000000000000000000000000000000000000000000000000006
+f65 0
+f66 5.500000000000000000000000000000
+f67 6
+f68 5.500000000000000000000000000000
+f69 0000000006
+f70 000000000000000000000000000000005.500000000000000000000000000000
+f71 0000000006
+f72 000000000000000000000000000000005.500000000000000000000000000000
+f73 -1.175494345e-38
+f74 1.175494357e-38
+f75 00000001.175494357e-38
+f76 00000001.175494357e-38
+f77 -1.175494345e-38
+f78 1.175494357e-38
+f79 00000001.175494357e-38
+f80 00000001.175494357e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494345e-38
+f95 1.17549e-38
+f96 1.175494357e-38
+f97 01.17549e-38
+f98 00000001.175494357e-38
+f99 01.17549e-38
+f100 00000001.175494357e-38
+f101 1000-01-06
+f102 838:59:53
+f103 1970-01-07 00:00:06
+f104 1970-01-07 00:00:06
+f105 1907
+f106 1907
+f107 1907
+f108 1enum
+f109 1set
+f59 7
+f60 7
+f61 0000000007
+f62 0000000000000000000000000000000000000000000000000000000000000007
+f63 0000000007
+f64 0000000000000000000000000000000000000000000000000000000000000007
+f65 1
+f66 6.600000000000000000000000000000
+f67 7
+f68 6.600000000000000000000000000000
+f69 0000000007
+f70 000000000000000000000000000000006.600000000000000000000000000000
+f71 0000000007
+f72 000000000000000000000000000000006.600000000000000000000000000000
+f73 -1.175494344e-38
+f74 1.175494358e-38
+f75 00000001.175494358e-38
+f76 00000001.175494358e-38
+f77 -1.175494344e-38
+f78 1.175494358e-38
+f79 00000001.175494358e-38
+f80 00000001.175494358e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494344e-38
+f95 1.17549e-38
+f96 1.175494358e-38
+f97 01.17549e-38
+f98 00000001.175494358e-38
+f99 01.17549e-38
+f100 00000001.175494358e-38
+f101 1000-01-07
+f102 838:59:52
+f103 1970-01-08 00:00:07
+f104 1970-01-08 00:00:07
+f105 1908
+f106 1908
+f107 1908
+f108 2enum
+f109 2set
+f59 8
+f60 8
+f61 0000000008
+f62 0000000000000000000000000000000000000000000000000000000000000008
+f63 0000000008
+f64 0000000000000000000000000000000000000000000000000000000000000008
+f65 2
+f66 7.700000000000000000000000000000
+f67 8
+f68 7.700000000000000000000000000000
+f69 0000000008
+f70 000000000000000000000000000000007.700000000000000000000000000000
+f71 0000000008
+f72 000000000000000000000000000000007.700000000000000000000000000000
+f73 -1.175494343e-38
+f74 1.175494359e-38
+f75 00000001.175494359e-38
+f76 00000001.175494359e-38
+f77 -1.175494343e-38
+f78 1.175494359e-38
+f79 00000001.175494359e-38
+f80 00000001.175494359e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494343e-38
+f95 1.17549e-38
+f96 1.175494359e-38
+f97 01.17549e-38
+f98 00000001.175494359e-38
+f99 01.17549e-38
+f100 00000001.175494359e-38
+f101 1000-01-08
+f102 838:59:51
+f103 1970-01-09 00:00:08
+f104 1970-01-09 00:00:08
+f105 1909
+f106 1909
+f107 1909
+f108 1enum
+f109 1set,2set
+f59 9
+f60 9
+f61 0000000009
+f62 0000000000000000000000000000000000000000000000000000000000000009
+f63 0000000009
+f64 0000000000000000000000000000000000000000000000000000000000000009
+f65 3
+f66 8.800000000000000000000000000000
+f67 9
+f68 8.800000000000000000000000000000
+f69 0000000009
+f70 000000000000000000000000000000008.800000000000000000000000000000
+f71 0000000009
+f72 000000000000000000000000000000008.800000000000000000000000000000
+f73 -1.175494342e-38
+f74 1.17549436e-38
+f75 000000001.17549436e-38
+f76 000000001.17549436e-38
+f77 -1.175494342e-38
+f78 1.17549436e-38
+f79 000000001.17549436e-38
+f80 000000001.17549436e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494342e-38
+f95 1.17549e-38
+f96 1.17549436e-38
+f97 01.17549e-38
+f98 000000001.17549436e-38
+f99 01.17549e-38
+f100 000000001.17549436e-38
+f101 1000-01-09
+f102 838:59:50
+f103 1970-01-10 00:00:09
+f104 1970-01-10 00:00:09
+f105 1910
+f106 1910
+f107 1910
+f108 2enum
+f109 1set
+f59 10
+f60 10
+f61 0000000010
+f62 0000000000000000000000000000000000000000000000000000000000000010
+f63 0000000010
+f64 0000000000000000000000000000000000000000000000000000000000000010
+f65 4
+f66 9.900000000000000000000000000000
+f67 10
+f68 9.900000000000000000000000000000
+f69 0000000010
+f70 000000000000000000000000000000009.900000000000000000000000000000
+f71 0000000010
+f72 000000000000000000000000000000009.900000000000000000000000000000
+f73 -1.175494341e-38
+f74 1.175494361e-38
+f75 00000001.175494361e-38
+f76 00000001.175494361e-38
+f77 -1.175494341e-38
+f78 1.175494361e-38
+f79 00000001.175494361e-38
+f80 00000001.175494361e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494341e-38
+f95 1.17549e-38
+f96 1.175494361e-38
+f97 01.17549e-38
+f98 00000001.175494361e-38
+f99 01.17549e-38
+f100 00000001.175494361e-38
+f101 1000-01-10
+f102 838:59:49
+f103 1970-01-11 00:00:10
+f104 1970-01-11 00:00:10
+f105 1911
+f106 1911
+f107 1911
+f108 1enum
+f109 2set
+f59 15
+f60 87
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 17
+f60 15
+f61 0000000016
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 19
+f60 18
+f61 0000000014
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 22
+f60 93
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 24
+f60 51654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 27
+f60 25
+f61 0000000026
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 29
+f60 28
+f61 0000000024
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 34
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 94
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 107
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 107
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 109
+f60 108
+f61 0000000104
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 109
+f60 108
+f61 0000000104
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 195
+f60 87
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 207
+f60 205
+f61 0000000206
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 209
+f60 208
+f61 0000000204
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 242
+f60 79
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 250
+f60 87895654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 292
+f60 93
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 299
+f60 899
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 321
+f60 NULL
+f61 0000000765
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 323
+f60 14376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 340
+f60 9984376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 394
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 424
+f60 89
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 441
+f60 16546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 660
+f60 876546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 987
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 2550
+f60 775654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 2760
+f60 985654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 3330
+f60 764376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 3410
+f60 996546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 7876
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 9112
+f60 NULL
+f61 0000008771
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 76710
+f60 226546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 569300
+f60 9114376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
CREATE or REPLACE VIEW v1 AS select *
FROM test.tb2 WITH CASCADED CHECK OPTION ;
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
+f59 1
+f60 1
+f61 0000000001
+f62 0000000000000000000000000000000000000000000000000000000000000001
+f63 0000000001
+f64 0000000000000000000000000000000000000000000000000000000000000001
+f65 -5
+f66 0.000000000000000000000000000000
+f67 1
+f68 0.000000000000000000000000000000
+f69 0000000001
+f70 000000000000000000000000000000000.000000000000000000000000000000
+f71 0000000001
+f72 000000000000000000000000000000000.000000000000000000000000000000
+f73 -1.17549435e-38
+f74 1.175494352e-38
+f75 00000001.175494352e-38
+f76 00000001.175494352e-38
+f77 -1.17549435e-38
+f78 1.175494352e-38
+f79 00000001.175494352e-38
+f80 00000001.175494352e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.17549435e-38
+f95 1.17549e-38
+f96 1.175494352e-38
+f97 01.17549e-38
+f98 00000001.175494352e-38
+f99 01.17549e-38
+f100 00000001.175494352e-38
+f101 1000-01-01
+f102 838:59:58
+f103 1970-01-02 00:00:01
+f104 1970-01-02 00:00:01
+f105 1902
+f106 1902
+f107 1902
+f108 2enum
+f109 2set
+f59 2
+f60 2
+f61 0000000002
+f62 0000000000000000000000000000000000000000000000000000000000000002
+f63 0000000002
+f64 0000000000000000000000000000000000000000000000000000000000000002
+f65 -4
+f66 1.100000000000000000000000000000
+f67 2
+f68 1.100000000000000000000000000000
+f69 0000000002
+f70 000000000000000000000000000000001.100000000000000000000000000000
+f71 0000000002
+f72 000000000000000000000000000000001.100000000000000000000000000000
+f73 -1.175494349e-38
+f74 1.175494353e-38
+f75 00000001.175494353e-38
+f76 00000001.175494353e-38
+f77 -1.175494349e-38
+f78 1.175494353e-38
+f79 00000001.175494353e-38
+f80 00000001.175494353e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494349e-38
+f95 1.17549e-38
+f96 1.175494353e-38
+f97 01.17549e-38
+f98 00000001.175494353e-38
+f99 01.17549e-38
+f100 00000001.175494353e-38
+f101 1000-01-02
+f102 838:59:57
+f103 1970-01-03 00:00:02
+f104 1970-01-03 00:00:02
+f105 1903
+f106 1903
+f107 1903
+f108 1enum
+f109 1set,2set
+f59 3
+f60 3
+f61 0000000003
+f62 0000000000000000000000000000000000000000000000000000000000000003
+f63 0000000003
+f64 0000000000000000000000000000000000000000000000000000000000000003
+f65 -3
+f66 2.200000000000000000000000000000
+f67 3
+f68 2.200000000000000000000000000000
+f69 0000000003
+f70 000000000000000000000000000000002.200000000000000000000000000000
+f71 0000000003
+f72 000000000000000000000000000000002.200000000000000000000000000000
+f73 -1.175494348e-38
+f74 1.175494354e-38
+f75 00000001.175494354e-38
+f76 00000001.175494354e-38
+f77 -1.175494348e-38
+f78 1.175494354e-38
+f79 00000001.175494354e-38
+f80 00000001.175494354e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494348e-38
+f95 1.17549e-38
+f96 1.175494354e-38
+f97 01.17549e-38
+f98 00000001.175494354e-38
+f99 01.17549e-38
+f100 00000001.175494354e-38
+f101 1000-01-03
+f102 838:59:56
+f103 1970-01-04 00:00:03
+f104 1970-01-04 00:00:03
+f105 1904
+f106 1904
+f107 1904
+f108 2enum
+f109 1set
+f59 4
+f60 4
+f61 0000000004
+f62 0000000000000000000000000000000000000000000000000000000000000004
+f63 0000000004
+f64 0000000000000000000000000000000000000000000000000000000000000004
+f65 -2
+f66 3.300000000000000000000000000000
+f67 4
+f68 3.300000000000000000000000000000
+f69 0000000004
+f70 000000000000000000000000000000003.300000000000000000000000000000
+f71 0000000004
+f72 000000000000000000000000000000003.300000000000000000000000000000
+f73 -1.175494347e-38
+f74 1.175494355e-38
+f75 00000001.175494355e-38
+f76 00000001.175494355e-38
+f77 -1.175494347e-38
+f78 1.175494355e-38
+f79 00000001.175494355e-38
+f80 00000001.175494355e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494347e-38
+f95 1.17549e-38
+f96 1.175494355e-38
+f97 01.17549e-38
+f98 00000001.175494355e-38
+f99 01.17549e-38
+f100 00000001.175494355e-38
+f101 1000-01-04
+f102 838:59:55
+f103 1970-01-05 00:00:04
+f104 1970-01-05 00:00:04
+f105 1905
+f106 1905
+f107 1905
+f108 1enum
+f109 2set
+f59 4
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 5
+f60 5
+f61 0000000005
+f62 0000000000000000000000000000000000000000000000000000000000000005
+f63 0000000005
+f64 0000000000000000000000000000000000000000000000000000000000000005
+f65 -1
+f66 4.400000000000000000000000000000
+f67 5
+f68 4.400000000000000000000000000000
+f69 0000000005
+f70 000000000000000000000000000000004.400000000000000000000000000000
+f71 0000000005
+f72 000000000000000000000000000000004.400000000000000000000000000000
+f73 -1.175494346e-38
+f74 1.175494356e-38
+f75 00000001.175494356e-38
+f76 00000001.175494356e-38
+f77 -1.175494346e-38
+f78 1.175494356e-38
+f79 00000001.175494356e-38
+f80 00000001.175494356e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494346e-38
+f95 1.17549e-38
+f96 1.175494356e-38
+f97 01.17549e-38
+f98 00000001.175494356e-38
+f99 01.17549e-38
+f100 00000001.175494356e-38
+f101 1000-01-05
+f102 838:59:54
+f103 1970-01-06 00:00:05
+f104 1970-01-06 00:00:05
+f105 1906
+f106 1906
+f107 1906
+f108 2enum
+f109 1set,2set
+f59 6
+f60 6
+f61 0000000006
+f62 0000000000000000000000000000000000000000000000000000000000000006
+f63 0000000006
+f64 0000000000000000000000000000000000000000000000000000000000000006
+f65 0
+f66 5.500000000000000000000000000000
+f67 6
+f68 5.500000000000000000000000000000
+f69 0000000006
+f70 000000000000000000000000000000005.500000000000000000000000000000
+f71 0000000006
+f72 000000000000000000000000000000005.500000000000000000000000000000
+f73 -1.175494345e-38
+f74 1.175494357e-38
+f75 00000001.175494357e-38
+f76 00000001.175494357e-38
+f77 -1.175494345e-38
+f78 1.175494357e-38
+f79 00000001.175494357e-38
+f80 00000001.175494357e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494345e-38
+f95 1.17549e-38
+f96 1.175494357e-38
+f97 01.17549e-38
+f98 00000001.175494357e-38
+f99 01.17549e-38
+f100 00000001.175494357e-38
+f101 1000-01-06
+f102 838:59:53
+f103 1970-01-07 00:00:06
+f104 1970-01-07 00:00:06
+f105 1907
+f106 1907
+f107 1907
+f108 1enum
+f109 1set
+f59 7
+f60 7
+f61 0000000007
+f62 0000000000000000000000000000000000000000000000000000000000000007
+f63 0000000007
+f64 0000000000000000000000000000000000000000000000000000000000000007
+f65 1
+f66 6.600000000000000000000000000000
+f67 7
+f68 6.600000000000000000000000000000
+f69 0000000007
+f70 000000000000000000000000000000006.600000000000000000000000000000
+f71 0000000007
+f72 000000000000000000000000000000006.600000000000000000000000000000
+f73 -1.175494344e-38
+f74 1.175494358e-38
+f75 00000001.175494358e-38
+f76 00000001.175494358e-38
+f77 -1.175494344e-38
+f78 1.175494358e-38
+f79 00000001.175494358e-38
+f80 00000001.175494358e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494344e-38
+f95 1.17549e-38
+f96 1.175494358e-38
+f97 01.17549e-38
+f98 00000001.175494358e-38
+f99 01.17549e-38
+f100 00000001.175494358e-38
+f101 1000-01-07
+f102 838:59:52
+f103 1970-01-08 00:00:07
+f104 1970-01-08 00:00:07
+f105 1908
+f106 1908
+f107 1908
+f108 2enum
+f109 2set
+f59 8
+f60 8
+f61 0000000008
+f62 0000000000000000000000000000000000000000000000000000000000000008
+f63 0000000008
+f64 0000000000000000000000000000000000000000000000000000000000000008
+f65 2
+f66 7.700000000000000000000000000000
+f67 8
+f68 7.700000000000000000000000000000
+f69 0000000008
+f70 000000000000000000000000000000007.700000000000000000000000000000
+f71 0000000008
+f72 000000000000000000000000000000007.700000000000000000000000000000
+f73 -1.175494343e-38
+f74 1.175494359e-38
+f75 00000001.175494359e-38
+f76 00000001.175494359e-38
+f77 -1.175494343e-38
+f78 1.175494359e-38
+f79 00000001.175494359e-38
+f80 00000001.175494359e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494343e-38
+f95 1.17549e-38
+f96 1.175494359e-38
+f97 01.17549e-38
+f98 00000001.175494359e-38
+f99 01.17549e-38
+f100 00000001.175494359e-38
+f101 1000-01-08
+f102 838:59:51
+f103 1970-01-09 00:00:08
+f104 1970-01-09 00:00:08
+f105 1909
+f106 1909
+f107 1909
+f108 1enum
+f109 1set,2set
+f59 9
+f60 9
+f61 0000000009
+f62 0000000000000000000000000000000000000000000000000000000000000009
+f63 0000000009
+f64 0000000000000000000000000000000000000000000000000000000000000009
+f65 3
+f66 8.800000000000000000000000000000
+f67 9
+f68 8.800000000000000000000000000000
+f69 0000000009
+f70 000000000000000000000000000000008.800000000000000000000000000000
+f71 0000000009
+f72 000000000000000000000000000000008.800000000000000000000000000000
+f73 -1.175494342e-38
+f74 1.17549436e-38
+f75 000000001.17549436e-38
+f76 000000001.17549436e-38
+f77 -1.175494342e-38
+f78 1.17549436e-38
+f79 000000001.17549436e-38
+f80 000000001.17549436e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494342e-38
+f95 1.17549e-38
+f96 1.17549436e-38
+f97 01.17549e-38
+f98 000000001.17549436e-38
+f99 01.17549e-38
+f100 000000001.17549436e-38
+f101 1000-01-09
+f102 838:59:50
+f103 1970-01-10 00:00:09
+f104 1970-01-10 00:00:09
+f105 1910
+f106 1910
+f107 1910
+f108 2enum
+f109 1set
CREATE OR REPLACE VIEW v1 AS SELECT F59, F60
FROM test.tb2 WITH CASCADED CHECK OPTION;
SELECT * FROM v1 order by f59,f60 limit 0,10;
@@ -495,8 +3541,8 @@ DROP VIEW v1;
Testcase 3.3.1.3 + 3.1.1.4
--------------------------------------------------------------------------------
DROP VIEW IF EXISTS v1 ;
-CREATE VIEW v1 or REPLACE AS Select * from tb2 my_table limit 50;
-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 'or REPLACE AS Select * from tb2 my_table limit 50' at line 1
+CREATE VIEW v1 or REPLACE AS Select * from tb2 my_table;
+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 'or REPLACE AS Select * from tb2 my_table' at line 1
CREATE VIEW v1 WITH CASCADED CHECK OPTION AS Select *
from tb2 my_table limit 50;
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 'WITH CASCADED CHECK OPTION AS Select *
@@ -505,8 +3551,8 @@ CREATE VIEW v1 WITH LOCAL CHECK OPTION AS Select *
from tb2 my_table limit 50;
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 'WITH LOCAL CHECK OPTION AS Select *
from tb2 my_table limit 50' at line 1
-SELECT * FROM tb2 my_table CREATE VIEW As v1 limit 100 ;
-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 'CREATE VIEW As v1 limit 100' at line 1
+SELECT * FROM tb2 my_table CREATE VIEW As v1;
+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 'CREATE VIEW As v1' at line 1
CREATE or REPLACE VIEW v1 Select f59, f60
from test.tb2 my_table where f59 = 250 ;
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 'Select f59, f60
@@ -581,8 +3627,8 @@ Union ALL (Select from f1 t1);
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from f59 tb2)
Union ALL (Select from f1 t1)' at line 1
CREATE or REPLACE view v1 as Select f59, f60
-from tb2 by order f59 limit 100 ;
-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 'by order f59 limit 100' at line 2
+from tb2 by order f59;
+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 'by order f59' at line 2
CREATE or REPLACE view v1 as Select f59, f60
from tb2 by group f59 ;
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 'by group f59' at line 2
@@ -590,12 +3636,12 @@ ERROR 42000: You have an error in your SQL syntax; check the manual that corresp
Testcase 3.3.1.5
--------------------------------------------------------------------------------
DROP VIEW IF EXISTS v1 ;
-CREATE VIEW v1 SELECT * FROM tb2 limit 100 ;
-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 'SELECT * FROM tb2 limit 100' at line 1
-CREATE v1 AS SELECT * FROM tb2 limit 100 ;
-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 'v1 AS SELECT * FROM tb2 limit 100' at line 1
-VIEW v1 AS SELECT * FROM tb2 limit 100 ;
-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 'VIEW v1 AS SELECT * FROM tb2 limit 100' at line 1
+CREATE VIEW v1 SELECT * FROM tb2;
+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 'SELECT * FROM tb2' at line 1
+CREATE v1 AS SELECT * FROM tb2;
+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 'v1 AS SELECT * FROM tb2' at line 1
+VIEW v1 AS SELECT * FROM tb2;
+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 'VIEW v1 AS SELECT * FROM tb2' at line 1
CREATE VIEW v1 AS SELECT 1;
DROP VIEW v1;
VIEW v1 AS SELECT 1;
@@ -613,45 +3659,43 @@ Testcase 3.3.1.6
--------------------------------------------------------------------------------
DROP VIEW IF EXISTS v1 ;
CREATE or REPLACE VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
CREATE or REPLACE ALGORITHM = UNDEFINED VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
CREATE or REPLACE ALGORITHM = MERGE VIEW v1
-as SELECT * from tb2 limit 100 ;
-Warnings:
-Warning 1354 View merge algorithm can't be used here for now (assumed undefined algorithm)
+as SELECT * from tb2;
CREATE or REPLACE ALGORITHM = TEMPTABLE VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
CREATE or REPLACE ALGORITHM = TEMPTABLE VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
CREATE or REPLACE = TEMPTABLE VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
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 '= TEMPTABLE VIEW v1
-as SELECT * from tb2 limit 100' at line 1
+as SELECT * from tb2' at line 1
CREATE or REPLACE ALGORITHM TEMPTABLE VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
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 'TEMPTABLE VIEW v1
-as SELECT * from tb2 limit 100' at line 1
+as SELECT * from tb2' at line 1
CREATE or REPLACE ALGORITHM = VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
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 'VIEW v1
-as SELECT * from tb2 limit 100' at line 1
+as SELECT * from tb2' at line 1
CREATE or REPLACE TEMPTABLE = ALGORITHM VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
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 'TEMPTABLE = ALGORITHM VIEW v1
-as SELECT * from tb2 limit 100' at line 1
+as SELECT * from tb2' at line 1
CREATE or REPLACE TEMPTABLE - ALGORITHM VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
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 'TEMPTABLE - ALGORITHM VIEW v1
-as SELECT * from tb2 limit 100' at line 1
+as SELECT * from tb2' at line 1
CREATE or REPLACE GARBAGE = TEMPTABLE VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
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 'GARBAGE = TEMPTABLE VIEW v1
-as SELECT * from tb2 limit 100' at line 1
+as SELECT * from tb2' at line 1
CREATE or REPLACE ALGORITHM = GARBAGE VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
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 'GARBAGE VIEW v1
-as SELECT * from tb2 limit 100' at line 1
+as SELECT * from tb2' at line 1
Drop view if exists v1 ;
CREATE or REPLACE VIEW v1
AS SELECT * from tb2 where f59 < 1;
@@ -677,7 +3721,7 @@ ERROR 42000: You have an error in your SQL syntax; check the manual that corresp
Testcase 3.3.1.7
--------------------------------------------------------------------------------
DROP VIEW IF EXISTS v1 ;
-Create view test.v1 AS Select * from test.tb2 limit 100 ;
+Create view test.v1 AS Select * from test.tb2;
Alter view test.v1 AS Select F59 from test. tb2 limit 100 ;
Drop view test.v1 ;
Create view v1 AS Select * from test.tb2 limit 100 ;
@@ -881,27 +3925,123 @@ 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` 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;
+f59 1
+f60 1
+f61 0000000001
+f62 0000000000000000000000000000000000000000000000000000000000000001
+f63 0000000001
+f64 0000000000000000000000000000000000000000000000000000000000000001
+f65 -5
+f66 0.000000000000000000000000000000
+f67 1
+f68 0.000000000000000000000000000000
+f69 0000000001
+f70 000000000000000000000000000000000.000000000000000000000000000000
+f71 0000000001
+f72 000000000000000000000000000000000.000000000000000000000000000000
+f73 -1.17549435e-38
+f74 1.175494352e-38
+f75 00000001.175494352e-38
+f76 00000001.175494352e-38
+f77 -1.17549435e-38
+f78 1.175494352e-38
+f79 00000001.175494352e-38
+f80 00000001.175494352e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.17549435e-38
+f95 1.17549e-38
+f96 1.175494352e-38
+f97 01.17549e-38
+f98 00000001.175494352e-38
+f99 01.17549e-38
+f100 00000001.175494352e-38
+f101 1000-01-01
+f102 838:59:58
+f103 1970-01-02 00:00:01
+f104 1970-01-02 00:00:01
+f105 1902
+f106 1902
+f107 1902
+f108 2enum
+f109 2set
+f59 2
+f60 2
+f61 0000000002
+f62 0000000000000000000000000000000000000000000000000000000000000002
+f63 0000000002
+f64 0000000000000000000000000000000000000000000000000000000000000002
+f65 -4
+f66 1.100000000000000000000000000000
+f67 2
+f68 1.100000000000000000000000000000
+f69 0000000002
+f70 000000000000000000000000000000001.100000000000000000000000000000
+f71 0000000002
+f72 000000000000000000000000000000001.100000000000000000000000000000
+f73 -1.175494349e-38
+f74 1.175494353e-38
+f75 00000001.175494353e-38
+f76 00000001.175494353e-38
+f77 -1.175494349e-38
+f78 1.175494353e-38
+f79 00000001.175494353e-38
+f80 00000001.175494353e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494349e-38
+f95 1.17549e-38
+f96 1.175494353e-38
+f97 01.17549e-38
+f98 00000001.175494353e-38
+f99 01.17549e-38
+f100 00000001.175494353e-38
+f101 1000-01-02
+f102 838:59:57
+f103 1970-01-03 00:00:02
+f104 1970-01-03 00:00:02
+f105 1903
+f106 1903
+f107 1903
+f108 1enum
+f109 1set,2set
+CREATE OR REPLACE VIEW test.v1 AS SELECT F59 FROM tb2;
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 order by F59;
+v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `tb2`.`f59` AS `F59` from `tb2` latin1 latin1_swedish_ci
+SELECT * FROM test.v1 order by F59 limit 10,100;
F59
-1
-2
-4
-4
-6
-7
-8
-9
+10
15
+17
+19
22
+24
27
29
+34
94
107
107
@@ -922,11 +4062,14 @@ F59
441
500
500
+500
+660
987
2550
2760
3330
3410
+7876
9112
76710
569300
@@ -943,11 +4086,59 @@ ERROR HY000: 'test.tb2' is not VIEW
Testcase 3.3.1.15
--------------------------------------------------------------------------------
Drop table if exists test.v1 ;
-CREATE OR REPLACE view test.v1 as select * from tb2 LIMIT 2;
+CREATE OR REPLACE view test.v1 as select * from tb2;
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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
Drop view test.v1 ;
Testcase 3.3.1.16 + 3.3.1.17
@@ -1080,21 +4271,21 @@ ERROR HY000: View's SELECT and view's field list have different column counts
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 order by F59, F60 desc;
+CREATE VIEW test.v1( F59, F60 ) AS SELECT F59, F60 From tb2;
+SELECT * FROM test.v1 order by F59, F60 desc LIMIT 2;
F59 F60
1 1
-340 9984376
+2 2
Drop view if exists test.v1 ;
Testcase 3.3.1.22
--------------------------------------------------------------------------------
DROP VIEW IF EXISTS v1;
-CREATE VIEW test.v1( product ) AS SELECT f59*f60 From tb2 LIMIT 2;
+CREATE VIEW test.v1( product ) AS SELECT f59*f60 From tb2 WHERE f59 < 3;
SELECT * FROM test.v1;
product
-9
-25
+1
+4
CREATE OR REPLACE VIEW test.v1( product ) AS SELECT 1*2;
SELECT * FROM test.v1;
product
@@ -1177,85 +4368,2632 @@ DROP TEMPORARY TABLE t2;
Testcase 3.3.1.26
--------------------------------------------------------------------------------
DROP VIEW IF EXISTS v1;
-Create view test.v1 AS Select * from test.tb2 limit 2 ;
+Create view test.v1 AS Select * from test.tb2;
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
-Drop view test.v1 ;
-
-Testcase 3.3.1.27
---------------------------------------------------------------------------------
-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 order by F59 limit 20 ;
-F59
-1
-340
-Drop view test.v1 ;
-Drop view test.v1_1 ;
-
-Testcase 3.3.1.28
---------------------------------------------------------------------------------
-Drop database if exists test2 ;
-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 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
-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
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
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
+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
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
+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
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
+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
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
+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
+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
+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
+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
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
+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
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
+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
+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
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
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
+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
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
+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
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
+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
+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
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
+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
+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
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
+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
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
+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
+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
+Drop view test.v1 ;
+
+Testcase 3.3.1.27
+--------------------------------------------------------------------------------
+DROP VIEW IF EXISTS test.v1;
+Drop VIEW IF EXISTS test.v1_1 ;
+Create view test.v1 AS Select * from test.tb2;
+Create view test.v1_1 AS Select F59 from test.v1 ;
+Select * from test.v1_1 order by F59 limit 2;
+F59
+1
+2
+Drop view test.v1 ;
+Drop view test.v1_1 ;
+
+Testcase 3.3.1.28
+--------------------------------------------------------------------------------
+Drop database if exists test2 ;
+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 order by f59,f60,f61,f62,f63,f64,f65;
+f59 1
+f60 1
+f61 0000000001
+f62 0000000000000000000000000000000000000000000000000000000000000001
+f63 0000000001
+f64 0000000000000000000000000000000000000000000000000000000000000001
+f65 -5
+f66 0.000000000000000000000000000000
+f67 1
+f68 0.000000000000000000000000000000
+f69 0000000001
+f70 000000000000000000000000000000000.000000000000000000000000000000
+f71 0000000001
+f72 000000000000000000000000000000000.000000000000000000000000000000
+f73 -1.17549435e-38
+f74 1.175494352e-38
+f75 00000001.175494352e-38
+f76 00000001.175494352e-38
+f77 -1.17549435e-38
+f78 1.175494352e-38
+f79 00000001.175494352e-38
+f80 00000001.175494352e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.17549435e-38
+f95 1.17549e-38
+f96 1.175494352e-38
+f97 01.17549e-38
+f98 00000001.175494352e-38
+f99 01.17549e-38
+f100 00000001.175494352e-38
+f101 1000-01-01
+f102 838:59:58
+f103 1970-01-02 00:00:01
+f104 1970-01-02 00:00:01
+f105 1902
+f106 1902
+f107 1902
+f108 2enum
+f109 2set
+f59 2
+f60 2
+f61 0000000002
+f62 0000000000000000000000000000000000000000000000000000000000000002
+f63 0000000002
+f64 0000000000000000000000000000000000000000000000000000000000000002
+f65 -4
+f66 1.100000000000000000000000000000
+f67 2
+f68 1.100000000000000000000000000000
+f69 0000000002
+f70 000000000000000000000000000000001.100000000000000000000000000000
+f71 0000000002
+f72 000000000000000000000000000000001.100000000000000000000000000000
+f73 -1.175494349e-38
+f74 1.175494353e-38
+f75 00000001.175494353e-38
+f76 00000001.175494353e-38
+f77 -1.175494349e-38
+f78 1.175494353e-38
+f79 00000001.175494353e-38
+f80 00000001.175494353e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494349e-38
+f95 1.17549e-38
+f96 1.175494353e-38
+f97 01.17549e-38
+f98 00000001.175494353e-38
+f99 01.17549e-38
+f100 00000001.175494353e-38
+f101 1000-01-02
+f102 838:59:57
+f103 1970-01-03 00:00:02
+f104 1970-01-03 00:00:02
+f105 1903
+f106 1903
+f107 1903
+f108 1enum
+f109 1set,2set
+f59 3
+f60 3
+f61 0000000003
+f62 0000000000000000000000000000000000000000000000000000000000000003
+f63 0000000003
+f64 0000000000000000000000000000000000000000000000000000000000000003
+f65 -3
+f66 2.200000000000000000000000000000
+f67 3
+f68 2.200000000000000000000000000000
+f69 0000000003
+f70 000000000000000000000000000000002.200000000000000000000000000000
+f71 0000000003
+f72 000000000000000000000000000000002.200000000000000000000000000000
+f73 -1.175494348e-38
+f74 1.175494354e-38
+f75 00000001.175494354e-38
+f76 00000001.175494354e-38
+f77 -1.175494348e-38
+f78 1.175494354e-38
+f79 00000001.175494354e-38
+f80 00000001.175494354e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494348e-38
+f95 1.17549e-38
+f96 1.175494354e-38
+f97 01.17549e-38
+f98 00000001.175494354e-38
+f99 01.17549e-38
+f100 00000001.175494354e-38
+f101 1000-01-03
+f102 838:59:56
+f103 1970-01-04 00:00:03
+f104 1970-01-04 00:00:03
+f105 1904
+f106 1904
+f107 1904
+f108 2enum
+f109 1set
+f59 4
+f60 4
+f61 0000000004
+f62 0000000000000000000000000000000000000000000000000000000000000004
+f63 0000000004
+f64 0000000000000000000000000000000000000000000000000000000000000004
+f65 -2
+f66 3.300000000000000000000000000000
+f67 4
+f68 3.300000000000000000000000000000
+f69 0000000004
+f70 000000000000000000000000000000003.300000000000000000000000000000
+f71 0000000004
+f72 000000000000000000000000000000003.300000000000000000000000000000
+f73 -1.175494347e-38
+f74 1.175494355e-38
+f75 00000001.175494355e-38
+f76 00000001.175494355e-38
+f77 -1.175494347e-38
+f78 1.175494355e-38
+f79 00000001.175494355e-38
+f80 00000001.175494355e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494347e-38
+f95 1.17549e-38
+f96 1.175494355e-38
+f97 01.17549e-38
+f98 00000001.175494355e-38
+f99 01.17549e-38
+f100 00000001.175494355e-38
+f101 1000-01-04
+f102 838:59:55
+f103 1970-01-05 00:00:04
+f104 1970-01-05 00:00:04
+f105 1905
+f106 1905
+f107 1905
+f108 1enum
+f109 2set
+f59 4
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 5
+f60 5
+f61 0000000005
+f62 0000000000000000000000000000000000000000000000000000000000000005
+f63 0000000005
+f64 0000000000000000000000000000000000000000000000000000000000000005
+f65 -1
+f66 4.400000000000000000000000000000
+f67 5
+f68 4.400000000000000000000000000000
+f69 0000000005
+f70 000000000000000000000000000000004.400000000000000000000000000000
+f71 0000000005
+f72 000000000000000000000000000000004.400000000000000000000000000000
+f73 -1.175494346e-38
+f74 1.175494356e-38
+f75 00000001.175494356e-38
+f76 00000001.175494356e-38
+f77 -1.175494346e-38
+f78 1.175494356e-38
+f79 00000001.175494356e-38
+f80 00000001.175494356e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494346e-38
+f95 1.17549e-38
+f96 1.175494356e-38
+f97 01.17549e-38
+f98 00000001.175494356e-38
+f99 01.17549e-38
+f100 00000001.175494356e-38
+f101 1000-01-05
+f102 838:59:54
+f103 1970-01-06 00:00:05
+f104 1970-01-06 00:00:05
+f105 1906
+f106 1906
+f107 1906
+f108 2enum
+f109 1set,2set
+f59 6
+f60 6
+f61 0000000006
+f62 0000000000000000000000000000000000000000000000000000000000000006
+f63 0000000006
+f64 0000000000000000000000000000000000000000000000000000000000000006
+f65 0
+f66 5.500000000000000000000000000000
+f67 6
+f68 5.500000000000000000000000000000
+f69 0000000006
+f70 000000000000000000000000000000005.500000000000000000000000000000
+f71 0000000006
+f72 000000000000000000000000000000005.500000000000000000000000000000
+f73 -1.175494345e-38
+f74 1.175494357e-38
+f75 00000001.175494357e-38
+f76 00000001.175494357e-38
+f77 -1.175494345e-38
+f78 1.175494357e-38
+f79 00000001.175494357e-38
+f80 00000001.175494357e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494345e-38
+f95 1.17549e-38
+f96 1.175494357e-38
+f97 01.17549e-38
+f98 00000001.175494357e-38
+f99 01.17549e-38
+f100 00000001.175494357e-38
+f101 1000-01-06
+f102 838:59:53
+f103 1970-01-07 00:00:06
+f104 1970-01-07 00:00:06
+f105 1907
+f106 1907
+f107 1907
+f108 1enum
+f109 1set
+f59 7
+f60 7
+f61 0000000007
+f62 0000000000000000000000000000000000000000000000000000000000000007
+f63 0000000007
+f64 0000000000000000000000000000000000000000000000000000000000000007
+f65 1
+f66 6.600000000000000000000000000000
+f67 7
+f68 6.600000000000000000000000000000
+f69 0000000007
+f70 000000000000000000000000000000006.600000000000000000000000000000
+f71 0000000007
+f72 000000000000000000000000000000006.600000000000000000000000000000
+f73 -1.175494344e-38
+f74 1.175494358e-38
+f75 00000001.175494358e-38
+f76 00000001.175494358e-38
+f77 -1.175494344e-38
+f78 1.175494358e-38
+f79 00000001.175494358e-38
+f80 00000001.175494358e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494344e-38
+f95 1.17549e-38
+f96 1.175494358e-38
+f97 01.17549e-38
+f98 00000001.175494358e-38
+f99 01.17549e-38
+f100 00000001.175494358e-38
+f101 1000-01-07
+f102 838:59:52
+f103 1970-01-08 00:00:07
+f104 1970-01-08 00:00:07
+f105 1908
+f106 1908
+f107 1908
+f108 2enum
+f109 2set
+f59 8
+f60 8
+f61 0000000008
+f62 0000000000000000000000000000000000000000000000000000000000000008
+f63 0000000008
+f64 0000000000000000000000000000000000000000000000000000000000000008
+f65 2
+f66 7.700000000000000000000000000000
+f67 8
+f68 7.700000000000000000000000000000
+f69 0000000008
+f70 000000000000000000000000000000007.700000000000000000000000000000
+f71 0000000008
+f72 000000000000000000000000000000007.700000000000000000000000000000
+f73 -1.175494343e-38
+f74 1.175494359e-38
+f75 00000001.175494359e-38
+f76 00000001.175494359e-38
+f77 -1.175494343e-38
+f78 1.175494359e-38
+f79 00000001.175494359e-38
+f80 00000001.175494359e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494343e-38
+f95 1.17549e-38
+f96 1.175494359e-38
+f97 01.17549e-38
+f98 00000001.175494359e-38
+f99 01.17549e-38
+f100 00000001.175494359e-38
+f101 1000-01-08
+f102 838:59:51
+f103 1970-01-09 00:00:08
+f104 1970-01-09 00:00:08
+f105 1909
+f106 1909
+f107 1909
+f108 1enum
+f109 1set,2set
+f59 9
+f60 9
+f61 0000000009
+f62 0000000000000000000000000000000000000000000000000000000000000009
+f63 0000000009
+f64 0000000000000000000000000000000000000000000000000000000000000009
+f65 3
+f66 8.800000000000000000000000000000
+f67 9
+f68 8.800000000000000000000000000000
+f69 0000000009
+f70 000000000000000000000000000000008.800000000000000000000000000000
+f71 0000000009
+f72 000000000000000000000000000000008.800000000000000000000000000000
+f73 -1.175494342e-38
+f74 1.17549436e-38
+f75 000000001.17549436e-38
+f76 000000001.17549436e-38
+f77 -1.175494342e-38
+f78 1.17549436e-38
+f79 000000001.17549436e-38
+f80 000000001.17549436e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494342e-38
+f95 1.17549e-38
+f96 1.17549436e-38
+f97 01.17549e-38
+f98 000000001.17549436e-38
+f99 01.17549e-38
+f100 000000001.17549436e-38
+f101 1000-01-09
+f102 838:59:50
+f103 1970-01-10 00:00:09
+f104 1970-01-10 00:00:09
+f105 1910
+f106 1910
+f107 1910
+f108 2enum
+f109 1set
+f59 10
+f60 10
+f61 0000000010
+f62 0000000000000000000000000000000000000000000000000000000000000010
+f63 0000000010
+f64 0000000000000000000000000000000000000000000000000000000000000010
+f65 4
+f66 9.900000000000000000000000000000
+f67 10
+f68 9.900000000000000000000000000000
+f69 0000000010
+f70 000000000000000000000000000000009.900000000000000000000000000000
+f71 0000000010
+f72 000000000000000000000000000000009.900000000000000000000000000000
+f73 -1.175494341e-38
+f74 1.175494361e-38
+f75 00000001.175494361e-38
+f76 00000001.175494361e-38
+f77 -1.175494341e-38
+f78 1.175494361e-38
+f79 00000001.175494361e-38
+f80 00000001.175494361e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494341e-38
+f95 1.17549e-38
+f96 1.175494361e-38
+f97 01.17549e-38
+f98 00000001.175494361e-38
+f99 01.17549e-38
+f100 00000001.175494361e-38
+f101 1000-01-10
+f102 838:59:49
+f103 1970-01-11 00:00:10
+f104 1970-01-11 00:00:10
+f105 1911
+f106 1911
+f107 1911
+f108 1enum
+f109 2set
+f59 15
+f60 87
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 17
+f60 15
+f61 0000000016
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 19
+f60 18
+f61 0000000014
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 22
+f60 93
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 24
+f60 51654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 27
+f60 25
+f61 0000000026
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 29
+f60 28
+f61 0000000024
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 34
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 94
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 107
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 107
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 109
+f60 108
+f61 0000000104
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 109
+f60 108
+f61 0000000104
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 195
+f60 87
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 207
+f60 205
+f61 0000000206
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 209
+f60 208
+f61 0000000204
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 242
+f60 79
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 250
+f60 87895654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 292
+f60 93
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 299
+f60 899
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 321
+f60 NULL
+f61 0000000765
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 323
+f60 14376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 340
+f60 9984376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 394
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 424
+f60 89
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 441
+f60 16546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 660
+f60 876546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 987
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 2550
+f60 775654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 2760
+f60 985654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 3330
+f60 764376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 3410
+f60 996546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 7876
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 9112
+f60 NULL
+f61 0000008771
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 76710
+f60 226546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 569300
+f60 9114376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 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 ;
@@ -1737,29 +7475,29 @@ Drop view if exists test.v1 ;
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 order by f59,f60;
+Create view test.v1 as Select f59, f60 FROM test.tb2;
+Select * from test.v1 order by f59,f60 limit 20;
f59 f60
+1 1
2 2
3 3
+4 4
+4 74
5 5
6 6
+7 7
+8 8
9 9
10 10
+15 87
17 15
19 18
+22 93
24 51654
+27 25
+29 28
34 41
-107 105
-323 14376
-441 16546
-500 NULL
-500 NULL
-660 876546
-2550 775654
-3330 764376
-3410 996546
-7876 74
+94 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 ;
@@ -1846,12 +7584,110 @@ Drop view if exists test.v1 ;
CREATE VIEW test.v1 AS SELECT f59,f60 FROM test.tb2;
INSERT INTO test.v1 values(122,432);
SELECT * FROM test.tb2 where f59 = 122 and f60 = 432 limit 0,20;
-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
-122 432 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set
+f59 122
+f60 432
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
UPDATE test.v1 SET f59 = 3000 WHERE test.v1.f59 = 122 ;
SELECT * FROM test.tb2 where f59 = 3000 limit 0,20;
-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
-3000 432 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set
+f59 3000
+f60 432
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
DELETE FROM test.v1
where test.v1.f59 = 3000 and test.v1.f60 = 432;
SELECT * FROM test.tb2 where f59 = 3000 and f60 = 432;
@@ -1876,16 +7712,214 @@ info: Rows matched: 2 Changed: 2 Warnings: 0
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
-30 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
-30 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
+f59 30
+f60 4
+f61 0000000004
+f62 0000000000000000000000000000000000000000000000000000000000000004
+f63 0000000004
+f64 0000000000000000000000000000000000000000000000000000000000000004
+f65 -2
+f66 3.300000000000000000000000000000
+f67 4
+f68 3.300000000000000000000000000000
+f69 0000000004
+f70 000000000000000000000000000000003.300000000000000000000000000000
+f71 0000000004
+f72 000000000000000000000000000000003.300000000000000000000000000000
+f73 -1.175494347e-38
+f74 1.175494355e-38
+f75 00000001.175494355e-38
+f76 00000001.175494355e-38
+f77 -1.175494347e-38
+f78 1.175494355e-38
+f79 00000001.175494355e-38
+f80 00000001.175494355e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494347e-38
+f95 1.17549e-38
+f96 1.175494355e-38
+f97 01.17549e-38
+f98 00000001.175494355e-38
+f99 01.17549e-38
+f100 00000001.175494355e-38
+f101 1000-01-04
+f102 838:59:55
+f103 1970-01-05 00:00:04
+f104 1970-01-05 00:00:04
+f105 1905
+f106 1905
+f107 1905
+f108 1enum
+f109 2set
+f59 30
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
UPDATE tb2 SET f59 = 100 where f59 = 30 ;
affected rows: 2
info: Rows matched: 2 Changed: 2 Warnings: 0
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
+f59 100
+f60 4
+f61 0000000004
+f62 0000000000000000000000000000000000000000000000000000000000000004
+f63 0000000004
+f64 0000000000000000000000000000000000000000000000000000000000000004
+f65 -2
+f66 3.300000000000000000000000000000
+f67 4
+f68 3.300000000000000000000000000000
+f69 0000000004
+f70 000000000000000000000000000000003.300000000000000000000000000000
+f71 0000000004
+f72 000000000000000000000000000000003.300000000000000000000000000000
+f73 -1.175494347e-38
+f74 1.175494355e-38
+f75 00000001.175494355e-38
+f76 00000001.175494355e-38
+f77 -1.175494347e-38
+f78 1.175494355e-38
+f79 00000001.175494355e-38
+f80 00000001.175494355e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494347e-38
+f95 1.17549e-38
+f96 1.175494355e-38
+f97 01.17549e-38
+f98 00000001.175494355e-38
+f99 01.17549e-38
+f100 00000001.175494355e-38
+f101 1000-01-04
+f102 838:59:55
+f103 1970-01-05 00:00:04
+f104 1970-01-05 00:00:04
+f105 1905
+f106 1905
+f107 1905
+f108 1enum
+f109 2set
+f59 100
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
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 ;
@@ -9649,8 +15683,8 @@ WHERE v3_to_v1_options LIKE ' %' AND errno <> 0
ORDER BY v3_to_v1_options;
v3_to_v1_options statement v3_to_v1_violation errno
SELECT * FROM t1_results
-WHERE v3_to_v1_options LIKE 'WITH %'
-AND v3_to_v1_violation LIKE 'v3_%' AND errno = 0
+WHERE v3_to_v1_options LIKE 'WITH %'
+ AND v3_to_v1_violation LIKE 'v3_%' AND errno = 0
ORDER BY v3_to_v1_options;
v3_to_v1_options statement v3_to_v1_violation errno
SELECT * FROM t1_results
@@ -9670,17 +15704,2561 @@ DROP TABLE t1_results;
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 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
-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
+CREATE VIEW test.v1 AS SELECT * FROM test.tb2;
+SELECT * FROM test.v1 order by f59,f60,f61 ;
+f59 1
+f60 1
+f61 0000000001
+f62 0000000000000000000000000000000000000000000000000000000000000001
+f63 0000000001
+f64 0000000000000000000000000000000000000000000000000000000000000001
+f65 -5
+f66 0.000000000000000000000000000000
+f67 1
+f68 0.000000000000000000000000000000
+f69 0000000001
+f70 000000000000000000000000000000000.000000000000000000000000000000
+f71 0000000001
+f72 000000000000000000000000000000000.000000000000000000000000000000
+f73 -1.17549435e-38
+f74 1.175494352e-38
+f75 00000001.175494352e-38
+f76 00000001.175494352e-38
+f77 -1.17549435e-38
+f78 1.175494352e-38
+f79 00000001.175494352e-38
+f80 00000001.175494352e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.17549435e-38
+f95 1.17549e-38
+f96 1.175494352e-38
+f97 01.17549e-38
+f98 00000001.175494352e-38
+f99 01.17549e-38
+f100 00000001.175494352e-38
+f101 1000-01-01
+f102 838:59:58
+f103 1970-01-02 00:00:01
+f104 1970-01-02 00:00:01
+f105 1902
+f106 1902
+f107 1902
+f108 2enum
+f109 2set
+f59 2
+f60 2
+f61 0000000002
+f62 0000000000000000000000000000000000000000000000000000000000000002
+f63 0000000002
+f64 0000000000000000000000000000000000000000000000000000000000000002
+f65 -4
+f66 1.100000000000000000000000000000
+f67 2
+f68 1.100000000000000000000000000000
+f69 0000000002
+f70 000000000000000000000000000000001.100000000000000000000000000000
+f71 0000000002
+f72 000000000000000000000000000000001.100000000000000000000000000000
+f73 -1.175494349e-38
+f74 1.175494353e-38
+f75 00000001.175494353e-38
+f76 00000001.175494353e-38
+f77 -1.175494349e-38
+f78 1.175494353e-38
+f79 00000001.175494353e-38
+f80 00000001.175494353e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494349e-38
+f95 1.17549e-38
+f96 1.175494353e-38
+f97 01.17549e-38
+f98 00000001.175494353e-38
+f99 01.17549e-38
+f100 00000001.175494353e-38
+f101 1000-01-02
+f102 838:59:57
+f103 1970-01-03 00:00:02
+f104 1970-01-03 00:00:02
+f105 1903
+f106 1903
+f107 1903
+f108 1enum
+f109 1set,2set
+f59 3
+f60 3
+f61 0000000003
+f62 0000000000000000000000000000000000000000000000000000000000000003
+f63 0000000003
+f64 0000000000000000000000000000000000000000000000000000000000000003
+f65 -3
+f66 2.200000000000000000000000000000
+f67 3
+f68 2.200000000000000000000000000000
+f69 0000000003
+f70 000000000000000000000000000000002.200000000000000000000000000000
+f71 0000000003
+f72 000000000000000000000000000000002.200000000000000000000000000000
+f73 -1.175494348e-38
+f74 1.175494354e-38
+f75 00000001.175494354e-38
+f76 00000001.175494354e-38
+f77 -1.175494348e-38
+f78 1.175494354e-38
+f79 00000001.175494354e-38
+f80 00000001.175494354e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494348e-38
+f95 1.17549e-38
+f96 1.175494354e-38
+f97 01.17549e-38
+f98 00000001.175494354e-38
+f99 01.17549e-38
+f100 00000001.175494354e-38
+f101 1000-01-03
+f102 838:59:56
+f103 1970-01-04 00:00:03
+f104 1970-01-04 00:00:03
+f105 1904
+f106 1904
+f107 1904
+f108 2enum
+f109 1set
+f59 5
+f60 5
+f61 0000000005
+f62 0000000000000000000000000000000000000000000000000000000000000005
+f63 0000000005
+f64 0000000000000000000000000000000000000000000000000000000000000005
+f65 -1
+f66 4.400000000000000000000000000000
+f67 5
+f68 4.400000000000000000000000000000
+f69 0000000005
+f70 000000000000000000000000000000004.400000000000000000000000000000
+f71 0000000005
+f72 000000000000000000000000000000004.400000000000000000000000000000
+f73 -1.175494346e-38
+f74 1.175494356e-38
+f75 00000001.175494356e-38
+f76 00000001.175494356e-38
+f77 -1.175494346e-38
+f78 1.175494356e-38
+f79 00000001.175494356e-38
+f80 00000001.175494356e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494346e-38
+f95 1.17549e-38
+f96 1.175494356e-38
+f97 01.17549e-38
+f98 00000001.175494356e-38
+f99 01.17549e-38
+f100 00000001.175494356e-38
+f101 1000-01-05
+f102 838:59:54
+f103 1970-01-06 00:00:05
+f104 1970-01-06 00:00:05
+f105 1906
+f106 1906
+f107 1906
+f108 2enum
+f109 1set,2set
+f59 6
+f60 6
+f61 0000000006
+f62 0000000000000000000000000000000000000000000000000000000000000006
+f63 0000000006
+f64 0000000000000000000000000000000000000000000000000000000000000006
+f65 0
+f66 5.500000000000000000000000000000
+f67 6
+f68 5.500000000000000000000000000000
+f69 0000000006
+f70 000000000000000000000000000000005.500000000000000000000000000000
+f71 0000000006
+f72 000000000000000000000000000000005.500000000000000000000000000000
+f73 -1.175494345e-38
+f74 1.175494357e-38
+f75 00000001.175494357e-38
+f76 00000001.175494357e-38
+f77 -1.175494345e-38
+f78 1.175494357e-38
+f79 00000001.175494357e-38
+f80 00000001.175494357e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494345e-38
+f95 1.17549e-38
+f96 1.175494357e-38
+f97 01.17549e-38
+f98 00000001.175494357e-38
+f99 01.17549e-38
+f100 00000001.175494357e-38
+f101 1000-01-06
+f102 838:59:53
+f103 1970-01-07 00:00:06
+f104 1970-01-07 00:00:06
+f105 1907
+f106 1907
+f107 1907
+f108 1enum
+f109 1set
+f59 7
+f60 7
+f61 0000000007
+f62 0000000000000000000000000000000000000000000000000000000000000007
+f63 0000000007
+f64 0000000000000000000000000000000000000000000000000000000000000007
+f65 1
+f66 6.600000000000000000000000000000
+f67 7
+f68 6.600000000000000000000000000000
+f69 0000000007
+f70 000000000000000000000000000000006.600000000000000000000000000000
+f71 0000000007
+f72 000000000000000000000000000000006.600000000000000000000000000000
+f73 -1.175494344e-38
+f74 1.175494358e-38
+f75 00000001.175494358e-38
+f76 00000001.175494358e-38
+f77 -1.175494344e-38
+f78 1.175494358e-38
+f79 00000001.175494358e-38
+f80 00000001.175494358e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494344e-38
+f95 1.17549e-38
+f96 1.175494358e-38
+f97 01.17549e-38
+f98 00000001.175494358e-38
+f99 01.17549e-38
+f100 00000001.175494358e-38
+f101 1000-01-07
+f102 838:59:52
+f103 1970-01-08 00:00:07
+f104 1970-01-08 00:00:07
+f105 1908
+f106 1908
+f107 1908
+f108 2enum
+f109 2set
+f59 8
+f60 8
+f61 0000000008
+f62 0000000000000000000000000000000000000000000000000000000000000008
+f63 0000000008
+f64 0000000000000000000000000000000000000000000000000000000000000008
+f65 2
+f66 7.700000000000000000000000000000
+f67 8
+f68 7.700000000000000000000000000000
+f69 0000000008
+f70 000000000000000000000000000000007.700000000000000000000000000000
+f71 0000000008
+f72 000000000000000000000000000000007.700000000000000000000000000000
+f73 -1.175494343e-38
+f74 1.175494359e-38
+f75 00000001.175494359e-38
+f76 00000001.175494359e-38
+f77 -1.175494343e-38
+f78 1.175494359e-38
+f79 00000001.175494359e-38
+f80 00000001.175494359e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494343e-38
+f95 1.17549e-38
+f96 1.175494359e-38
+f97 01.17549e-38
+f98 00000001.175494359e-38
+f99 01.17549e-38
+f100 00000001.175494359e-38
+f101 1000-01-08
+f102 838:59:51
+f103 1970-01-09 00:00:08
+f104 1970-01-09 00:00:08
+f105 1909
+f106 1909
+f107 1909
+f108 1enum
+f109 1set,2set
+f59 9
+f60 9
+f61 0000000009
+f62 0000000000000000000000000000000000000000000000000000000000000009
+f63 0000000009
+f64 0000000000000000000000000000000000000000000000000000000000000009
+f65 3
+f66 8.800000000000000000000000000000
+f67 9
+f68 8.800000000000000000000000000000
+f69 0000000009
+f70 000000000000000000000000000000008.800000000000000000000000000000
+f71 0000000009
+f72 000000000000000000000000000000008.800000000000000000000000000000
+f73 -1.175494342e-38
+f74 1.17549436e-38
+f75 000000001.17549436e-38
+f76 000000001.17549436e-38
+f77 -1.175494342e-38
+f78 1.17549436e-38
+f79 000000001.17549436e-38
+f80 000000001.17549436e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494342e-38
+f95 1.17549e-38
+f96 1.17549436e-38
+f97 01.17549e-38
+f98 000000001.17549436e-38
+f99 01.17549e-38
+f100 000000001.17549436e-38
+f101 1000-01-09
+f102 838:59:50
+f103 1970-01-10 00:00:09
+f104 1970-01-10 00:00:09
+f105 1910
+f106 1910
+f107 1910
+f108 2enum
+f109 1set
+f59 10
+f60 10
+f61 0000000010
+f62 0000000000000000000000000000000000000000000000000000000000000010
+f63 0000000010
+f64 0000000000000000000000000000000000000000000000000000000000000010
+f65 4
+f66 9.900000000000000000000000000000
+f67 10
+f68 9.900000000000000000000000000000
+f69 0000000010
+f70 000000000000000000000000000000009.900000000000000000000000000000
+f71 0000000010
+f72 000000000000000000000000000000009.900000000000000000000000000000
+f73 -1.175494341e-38
+f74 1.175494361e-38
+f75 00000001.175494361e-38
+f76 00000001.175494361e-38
+f77 -1.175494341e-38
+f78 1.175494361e-38
+f79 00000001.175494361e-38
+f80 00000001.175494361e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494341e-38
+f95 1.17549e-38
+f96 1.175494361e-38
+f97 01.17549e-38
+f98 00000001.175494361e-38
+f99 01.17549e-38
+f100 00000001.175494361e-38
+f101 1000-01-10
+f102 838:59:49
+f103 1970-01-11 00:00:10
+f104 1970-01-11 00:00:10
+f105 1911
+f106 1911
+f107 1911
+f108 1enum
+f109 2set
+f59 15
+f60 87
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 17
+f60 15
+f61 0000000016
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 19
+f60 18
+f61 0000000014
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 22
+f60 93
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 24
+f60 51654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 27
+f60 25
+f61 0000000026
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 29
+f60 28
+f61 0000000024
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 34
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 94
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 100
+f60 4
+f61 0000000004
+f62 0000000000000000000000000000000000000000000000000000000000000004
+f63 0000000004
+f64 0000000000000000000000000000000000000000000000000000000000000004
+f65 -2
+f66 3.300000000000000000000000000000
+f67 4
+f68 3.300000000000000000000000000000
+f69 0000000004
+f70 000000000000000000000000000000003.300000000000000000000000000000
+f71 0000000004
+f72 000000000000000000000000000000003.300000000000000000000000000000
+f73 -1.175494347e-38
+f74 1.175494355e-38
+f75 00000001.175494355e-38
+f76 00000001.175494355e-38
+f77 -1.175494347e-38
+f78 1.175494355e-38
+f79 00000001.175494355e-38
+f80 00000001.175494355e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494347e-38
+f95 1.17549e-38
+f96 1.175494355e-38
+f97 01.17549e-38
+f98 00000001.175494355e-38
+f99 01.17549e-38
+f100 00000001.175494355e-38
+f101 1000-01-04
+f102 838:59:55
+f103 1970-01-05 00:00:04
+f104 1970-01-05 00:00:04
+f105 1905
+f106 1905
+f107 1905
+f108 1enum
+f109 2set
+f59 100
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 107
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 107
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 109
+f60 108
+f61 0000000104
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 109
+f60 108
+f61 0000000104
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 195
+f60 87
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 207
+f60 205
+f61 0000000206
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 209
+f60 208
+f61 0000000204
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 242
+f60 79
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 250
+f60 87895654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 292
+f60 93
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 299
+f60 899
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 321
+f60 NULL
+f61 0000000765
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 323
+f60 14376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 340
+f60 9984376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 394
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 424
+f60 89
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 441
+f60 16546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 660
+f60 876546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 987
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 2550
+f60 775654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 2760
+f60 985654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 3330
+f60 764376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 3410
+f60 996546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 7876
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 9112
+f60 NULL
+f61 0000008771
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 76710
+f60 226546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 569300
+f60 9114376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
drop view test.v1 ;
-CREATE VIEW test.v1 AS SELECT F59,F61 FROM test.tb2 limit 50 ;
-SELECT * FROM test.v1 order by F59, F61 ;
+CREATE VIEW test.v1 AS SELECT F59,F61 FROM test.tb2;
+SELECT * FROM test.v1 order by F59, F61 limit 50;
F59 F61
1 0000000001
2 0000000002
@@ -9733,53 +18311,2582 @@ F59 F61
76710 NULL
569300 NULL
drop view test.v1 ;
-CREATE VIEW test.v1 AS SELECT * FROM test.tb2 order by f59, f60, f61 limit 20 ;
+CREATE VIEW test.v1 AS SELECT * FROM test.tb2 order by f59, f60, f61;
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
-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
-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
+f59 1
+f60 1
+f61 0000000001
+f62 0000000000000000000000000000000000000000000000000000000000000001
+f63 0000000001
+f64 0000000000000000000000000000000000000000000000000000000000000001
+f65 -5
+f66 0.000000000000000000000000000000
+f67 1
+f68 0.000000000000000000000000000000
+f69 0000000001
+f70 000000000000000000000000000000000.000000000000000000000000000000
+f71 0000000001
+f72 000000000000000000000000000000000.000000000000000000000000000000
+f73 -1.17549435e-38
+f74 1.175494352e-38
+f75 00000001.175494352e-38
+f76 00000001.175494352e-38
+f77 -1.17549435e-38
+f78 1.175494352e-38
+f79 00000001.175494352e-38
+f80 00000001.175494352e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.17549435e-38
+f95 1.17549e-38
+f96 1.175494352e-38
+f97 01.17549e-38
+f98 00000001.175494352e-38
+f99 01.17549e-38
+f100 00000001.175494352e-38
+f101 1000-01-01
+f102 838:59:58
+f103 1970-01-02 00:00:01
+f104 1970-01-02 00:00:01
+f105 1902
+f106 1902
+f107 1902
+f108 2enum
+f109 2set
+f59 2
+f60 2
+f61 0000000002
+f62 0000000000000000000000000000000000000000000000000000000000000002
+f63 0000000002
+f64 0000000000000000000000000000000000000000000000000000000000000002
+f65 -4
+f66 1.100000000000000000000000000000
+f67 2
+f68 1.100000000000000000000000000000
+f69 0000000002
+f70 000000000000000000000000000000001.100000000000000000000000000000
+f71 0000000002
+f72 000000000000000000000000000000001.100000000000000000000000000000
+f73 -1.175494349e-38
+f74 1.175494353e-38
+f75 00000001.175494353e-38
+f76 00000001.175494353e-38
+f77 -1.175494349e-38
+f78 1.175494353e-38
+f79 00000001.175494353e-38
+f80 00000001.175494353e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494349e-38
+f95 1.17549e-38
+f96 1.175494353e-38
+f97 01.17549e-38
+f98 00000001.175494353e-38
+f99 01.17549e-38
+f100 00000001.175494353e-38
+f101 1000-01-02
+f102 838:59:57
+f103 1970-01-03 00:00:02
+f104 1970-01-03 00:00:02
+f105 1903
+f106 1903
+f107 1903
+f108 1enum
+f109 1set,2set
+f59 3
+f60 3
+f61 0000000003
+f62 0000000000000000000000000000000000000000000000000000000000000003
+f63 0000000003
+f64 0000000000000000000000000000000000000000000000000000000000000003
+f65 -3
+f66 2.200000000000000000000000000000
+f67 3
+f68 2.200000000000000000000000000000
+f69 0000000003
+f70 000000000000000000000000000000002.200000000000000000000000000000
+f71 0000000003
+f72 000000000000000000000000000000002.200000000000000000000000000000
+f73 -1.175494348e-38
+f74 1.175494354e-38
+f75 00000001.175494354e-38
+f76 00000001.175494354e-38
+f77 -1.175494348e-38
+f78 1.175494354e-38
+f79 00000001.175494354e-38
+f80 00000001.175494354e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494348e-38
+f95 1.17549e-38
+f96 1.175494354e-38
+f97 01.17549e-38
+f98 00000001.175494354e-38
+f99 01.17549e-38
+f100 00000001.175494354e-38
+f101 1000-01-03
+f102 838:59:56
+f103 1970-01-04 00:00:03
+f104 1970-01-04 00:00:03
+f105 1904
+f106 1904
+f107 1904
+f108 2enum
+f109 1set
+f59 5
+f60 5
+f61 0000000005
+f62 0000000000000000000000000000000000000000000000000000000000000005
+f63 0000000005
+f64 0000000000000000000000000000000000000000000000000000000000000005
+f65 -1
+f66 4.400000000000000000000000000000
+f67 5
+f68 4.400000000000000000000000000000
+f69 0000000005
+f70 000000000000000000000000000000004.400000000000000000000000000000
+f71 0000000005
+f72 000000000000000000000000000000004.400000000000000000000000000000
+f73 -1.175494346e-38
+f74 1.175494356e-38
+f75 00000001.175494356e-38
+f76 00000001.175494356e-38
+f77 -1.175494346e-38
+f78 1.175494356e-38
+f79 00000001.175494356e-38
+f80 00000001.175494356e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494346e-38
+f95 1.17549e-38
+f96 1.175494356e-38
+f97 01.17549e-38
+f98 00000001.175494356e-38
+f99 01.17549e-38
+f100 00000001.175494356e-38
+f101 1000-01-05
+f102 838:59:54
+f103 1970-01-06 00:00:05
+f104 1970-01-06 00:00:05
+f105 1906
+f106 1906
+f107 1906
+f108 2enum
+f109 1set,2set
+f59 6
+f60 6
+f61 0000000006
+f62 0000000000000000000000000000000000000000000000000000000000000006
+f63 0000000006
+f64 0000000000000000000000000000000000000000000000000000000000000006
+f65 0
+f66 5.500000000000000000000000000000
+f67 6
+f68 5.500000000000000000000000000000
+f69 0000000006
+f70 000000000000000000000000000000005.500000000000000000000000000000
+f71 0000000006
+f72 000000000000000000000000000000005.500000000000000000000000000000
+f73 -1.175494345e-38
+f74 1.175494357e-38
+f75 00000001.175494357e-38
+f76 00000001.175494357e-38
+f77 -1.175494345e-38
+f78 1.175494357e-38
+f79 00000001.175494357e-38
+f80 00000001.175494357e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494345e-38
+f95 1.17549e-38
+f96 1.175494357e-38
+f97 01.17549e-38
+f98 00000001.175494357e-38
+f99 01.17549e-38
+f100 00000001.175494357e-38
+f101 1000-01-06
+f102 838:59:53
+f103 1970-01-07 00:00:06
+f104 1970-01-07 00:00:06
+f105 1907
+f106 1907
+f107 1907
+f108 1enum
+f109 1set
+f59 7
+f60 7
+f61 0000000007
+f62 0000000000000000000000000000000000000000000000000000000000000007
+f63 0000000007
+f64 0000000000000000000000000000000000000000000000000000000000000007
+f65 1
+f66 6.600000000000000000000000000000
+f67 7
+f68 6.600000000000000000000000000000
+f69 0000000007
+f70 000000000000000000000000000000006.600000000000000000000000000000
+f71 0000000007
+f72 000000000000000000000000000000006.600000000000000000000000000000
+f73 -1.175494344e-38
+f74 1.175494358e-38
+f75 00000001.175494358e-38
+f76 00000001.175494358e-38
+f77 -1.175494344e-38
+f78 1.175494358e-38
+f79 00000001.175494358e-38
+f80 00000001.175494358e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494344e-38
+f95 1.17549e-38
+f96 1.175494358e-38
+f97 01.17549e-38
+f98 00000001.175494358e-38
+f99 01.17549e-38
+f100 00000001.175494358e-38
+f101 1000-01-07
+f102 838:59:52
+f103 1970-01-08 00:00:07
+f104 1970-01-08 00:00:07
+f105 1908
+f106 1908
+f107 1908
+f108 2enum
+f109 2set
+f59 8
+f60 8
+f61 0000000008
+f62 0000000000000000000000000000000000000000000000000000000000000008
+f63 0000000008
+f64 0000000000000000000000000000000000000000000000000000000000000008
+f65 2
+f66 7.700000000000000000000000000000
+f67 8
+f68 7.700000000000000000000000000000
+f69 0000000008
+f70 000000000000000000000000000000007.700000000000000000000000000000
+f71 0000000008
+f72 000000000000000000000000000000007.700000000000000000000000000000
+f73 -1.175494343e-38
+f74 1.175494359e-38
+f75 00000001.175494359e-38
+f76 00000001.175494359e-38
+f77 -1.175494343e-38
+f78 1.175494359e-38
+f79 00000001.175494359e-38
+f80 00000001.175494359e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494343e-38
+f95 1.17549e-38
+f96 1.175494359e-38
+f97 01.17549e-38
+f98 00000001.175494359e-38
+f99 01.17549e-38
+f100 00000001.175494359e-38
+f101 1000-01-08
+f102 838:59:51
+f103 1970-01-09 00:00:08
+f104 1970-01-09 00:00:08
+f105 1909
+f106 1909
+f107 1909
+f108 1enum
+f109 1set,2set
+f59 9
+f60 9
+f61 0000000009
+f62 0000000000000000000000000000000000000000000000000000000000000009
+f63 0000000009
+f64 0000000000000000000000000000000000000000000000000000000000000009
+f65 3
+f66 8.800000000000000000000000000000
+f67 9
+f68 8.800000000000000000000000000000
+f69 0000000009
+f70 000000000000000000000000000000008.800000000000000000000000000000
+f71 0000000009
+f72 000000000000000000000000000000008.800000000000000000000000000000
+f73 -1.175494342e-38
+f74 1.17549436e-38
+f75 000000001.17549436e-38
+f76 000000001.17549436e-38
+f77 -1.175494342e-38
+f78 1.17549436e-38
+f79 000000001.17549436e-38
+f80 000000001.17549436e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494342e-38
+f95 1.17549e-38
+f96 1.17549436e-38
+f97 01.17549e-38
+f98 000000001.17549436e-38
+f99 01.17549e-38
+f100 000000001.17549436e-38
+f101 1000-01-09
+f102 838:59:50
+f103 1970-01-10 00:00:09
+f104 1970-01-10 00:00:09
+f105 1910
+f106 1910
+f107 1910
+f108 2enum
+f109 1set
+f59 10
+f60 10
+f61 0000000010
+f62 0000000000000000000000000000000000000000000000000000000000000010
+f63 0000000010
+f64 0000000000000000000000000000000000000000000000000000000000000010
+f65 4
+f66 9.900000000000000000000000000000
+f67 10
+f68 9.900000000000000000000000000000
+f69 0000000010
+f70 000000000000000000000000000000009.900000000000000000000000000000
+f71 0000000010
+f72 000000000000000000000000000000009.900000000000000000000000000000
+f73 -1.175494341e-38
+f74 1.175494361e-38
+f75 00000001.175494361e-38
+f76 00000001.175494361e-38
+f77 -1.175494341e-38
+f78 1.175494361e-38
+f79 00000001.175494361e-38
+f80 00000001.175494361e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494341e-38
+f95 1.17549e-38
+f96 1.175494361e-38
+f97 01.17549e-38
+f98 00000001.175494361e-38
+f99 01.17549e-38
+f100 00000001.175494361e-38
+f101 1000-01-10
+f102 838:59:49
+f103 1970-01-11 00:00:10
+f104 1970-01-11 00:00:10
+f105 1911
+f106 1911
+f107 1911
+f108 1enum
+f109 2set
+f59 15
+f60 87
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 17
+f60 15
+f61 0000000016
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 19
+f60 18
+f61 0000000014
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 22
+f60 93
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 24
+f60 51654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 27
+f60 25
+f61 0000000026
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 29
+f60 28
+f61 0000000024
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 34
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 94
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 100
+f60 4
+f61 0000000004
+f62 0000000000000000000000000000000000000000000000000000000000000004
+f63 0000000004
+f64 0000000000000000000000000000000000000000000000000000000000000004
+f65 -2
+f66 3.300000000000000000000000000000
+f67 4
+f68 3.300000000000000000000000000000
+f69 0000000004
+f70 000000000000000000000000000000003.300000000000000000000000000000
+f71 0000000004
+f72 000000000000000000000000000000003.300000000000000000000000000000
+f73 -1.175494347e-38
+f74 1.175494355e-38
+f75 00000001.175494355e-38
+f76 00000001.175494355e-38
+f77 -1.175494347e-38
+f78 1.175494355e-38
+f79 00000001.175494355e-38
+f80 00000001.175494355e-38
+f81 -1.17549e-38
+f82 1.17549e-38
+f83 01.17549e-38
+f84 01.17549e-38
+f85 -1.17549e-38
+f86 -1.17549e-38
+f87 1.17549e-38
+f88 1.17549e-38
+f89 01.17549e-38
+f90 01.17549e-38
+f91 01.17549e-38
+f92 01.17549e-38
+f93 -1.17549e-38
+f94 -1.175494347e-38
+f95 1.17549e-38
+f96 1.175494355e-38
+f97 01.17549e-38
+f98 00000001.175494355e-38
+f99 01.17549e-38
+f100 00000001.175494355e-38
+f101 1000-01-04
+f102 838:59:55
+f103 1970-01-05 00:00:04
+f104 1970-01-05 00:00:04
+f105 1905
+f106 1905
+f107 1905
+f108 1enum
+f109 2set
+f59 100
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 107
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 107
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 109
+f60 108
+f61 0000000104
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 109
+f60 108
+f61 0000000104
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 195
+f60 87
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 207
+f60 205
+f61 0000000206
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 209
+f60 208
+f61 0000000204
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 242
+f60 79
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 250
+f60 87895654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 292
+f60 93
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 299
+f60 899
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 321
+f60 NULL
+f61 0000000765
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 323
+f60 14376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 340
+f60 9984376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 394
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 424
+f60 89
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 441
+f60 16546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 500
+f60 NULL
+f61 0000000900
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 660
+f60 876546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 987
+f60 41
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 2550
+f60 775654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 2760
+f60 985654
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 3330
+f60 764376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 3410
+f60 996546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 7876
+f60 74
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 9112
+f60 NULL
+f61 0000008771
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 76710
+f60 226546
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 569300
+f60 9114376
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
drop view test.v1 ;
-CREATE VIEW test.v1 AS SELECT F59,f61 FROM test.tb2 limit 20 ;
-SELECT * FROM test.v1 order by f59,f61 desc limit 50;
+CREATE VIEW test.v1 AS SELECT F59,f61 FROM test.tb2;
+SELECT * FROM test.v1 order by f59,f61 desc limit 20;
F59 f61
+1 0000000001
2 0000000002
3 0000000003
5 0000000005
6 0000000006
+7 0000000007
+8 0000000008
9 0000000009
10 0000000010
+15 NULL
17 0000000016
19 0000000014
+22 NULL
24 NULL
+27 0000000026
+29 0000000024
34 NULL
-107 0000000106
-323 NULL
-441 NULL
-500 0000000900
-500 0000000900
-660 NULL
-2550 NULL
-3330 NULL
-3410 NULL
-7876 NULL
+94 NULL
+100 0000000004
+100 NULL
drop view test.v1 ;
Testcase 3.3.1.54
@@ -9836,16 +20943,23 @@ f2
two
SET sql_mode = 'traditional,ansi';
CREATE OR REPLACE VIEW v1 AS
+SELECT f3 AS "pure column f3:", f1 + f3 AS "sum of columns f1 + f3 =",
+3 * (- 0.11111E+1) AS "product of constants 3 * (- 0.11111E+1):",
+'->' || CAST(f3 AS CHAR) || '<-'
+ AS "expression with '||'=CONCAT and CAST(DECIMAL column AS CHAR):"
+FROM t1 WHERE f1 = 2;
+CREATE OR REPLACE VIEW v1 AS
SELECT f3 AS "pure column f3: ", f1 + f3 AS "sum of columns f1 + f3 = ",
3 * (- 0.11111E+1) AS "product of constants 3 * (- 0.11111E+1): ",
'->' || CAST(f3 AS CHAR) || '<-'
AS "expression with '||'=CONCAT and CAST(DECIMAL column AS CHAR): "
FROM t1 WHERE f1 = 2;
+ERROR 42000: Incorrect column name 'pure column f3: '
SELECT * FROM v1;
-pure column f3: 2.20000
-sum of columns f1 + f3 = 4.20000
-product of constants 3 * (- 0.11111E+1): -3.3333
-expression with '||'=CONCAT and CAST(DECIMAL column AS CHAR): ->2.20000<-
+pure column f3: 2.20000
+sum of columns f1 + f3 = 4.20000
+product of constants 3 * (- 0.11111E+1): -3.3333
+expression with '||'=CONCAT and CAST(DECIMAL column AS CHAR): ->2.20000<-
SET sql_mode = '';
Testcases 3.3.1.55 - 3.3.1.62
@@ -10123,8 +21237,57 @@ F59
ALTER VIEW test.v1 AS SELECT *
FROM test.tb2 WHERE test.tb2.f59 = 242 ;
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
+f59 242
+f60 79
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
Drop view test.v1 ;
Testcase 3.3.1.65, 3.3.1.A4, 3.3.1.66, 3.3.1.67
@@ -10412,9 +21575,9 @@ FIXME Is this a bug ?
EXPLAIN SELECT CAST(f1 AS SIGNED INTEGER) AS f1,
CAST(f2 AS CHAR) AS f2 FROM test1.v28;
DROP VIEW IF EXISTS test1.v28;
-CREATE OR REPLACE VIEW test1.v0 AS
+CREATE OR REPLACE VIEW test1.v0 AS
SELECT f1 as f2, f2 as f1 FROM test2.t1;
-CREATE OR REPLACE VIEW test2.v0 AS
+CREATE OR REPLACE VIEW test2.v0 AS
SELECT CAST('0001-01-01' AS DATE) as f1, f2 FROM test3.t1;
SHOW CREATE VIEW test1.v27;
SELECT CAST(f1 AS SIGNED INTEGER) AS f1,
@@ -10486,8 +21649,57 @@ Create view test.v1 AS SELECT f59,f60,f61 FROM tb2 ;
INSERT INTO test.v1 ( f59 , f60 ) values (2005,0101) ;
affected rows: 1
SELECT * FROM tb2 where f59 = 2005 and f60 = 0101 ;
-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
-2005 101 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 7.7 7.7 00000000000000000007.7 00000000000000000008.8 8.8 8.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 0000000008.8 0000000008.8 0000000008.8 8.8 8.8 8.8 8.8 0000000008.8 00000000000000000008.8 0000000008.8 00000000000000000008.8 2000-01-01 00:00:20 0002-02-02 00:00:00 2000-12-31 23:59:59 2000 2000 2000 1enum 1set
+f59 2005
+f60 101
+f61 NULL
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
SELECT f59,f60 FROM test.v1 where f59 = 2005 and f60 = 0101 ;
f59 f60
2005 101
@@ -10503,8 +21715,57 @@ UPDATE test.v1 SET f59 = 8 WHERE f59 = 780 and f60 = 105;
affected rows: 1
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
+f59 8
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
SELECT f59,f60 FROM test.v1 where f59 = 8 and f60 = 105 ;
f59 f60
8 105
@@ -10519,11 +21780,210 @@ UPDATE test.v1 SET f59 = 891 WHERE f60 = 105 ;
affected rows: 4
info: Rows matched: 4 Changed: 4 Warnings: 0
SELECT * FROM tb2 where f59 = 891 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
-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
-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
+f59 891
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 891
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 891
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
+f59 891
+f60 105
+f61 0000000106
+f62 NULL
+f63 NULL
+f64 NULL
+f65 NULL
+f66 NULL
+f67 NULL
+f68 NULL
+f69 NULL
+f70 NULL
+f71 NULL
+f72 NULL
+f73 NULL
+f74 NULL
+f75 NULL
+f76 NULL
+f77 7.7
+f78 7.7
+f79 00000000000000000007.7
+f80 00000000000000000008.8
+f81 8.8
+f82 8.8
+f83 0000000008.8
+f84 0000000008.8
+f85 8.8
+f86 8.8
+f87 8.8
+f88 8.8
+f89 0000000008.8
+f90 0000000008.8
+f91 0000000008.8
+f92 0000000008.8
+f93 8.8
+f94 8.8
+f95 8.8
+f96 8.8
+f97 0000000008.8
+f98 00000000000000000008.8
+f99 0000000008.8
+f100 00000000000000000008.8
+f101 2000-01-01
+f102 00:00:20
+f103 0002-02-02 00:00:00
+f104 2000-12-31 23:59:59
+f105 2000
+f106 2000
+f107 2000
+f108 1enum
+f109 1set
SELECT f59,f60 FROM test.v1 where f59 = 891 and f60 = 105 ;
f59 f60
891 105
@@ -10872,17 +22332,13 @@ SET @variant4= 'CREATE VIEW v1 AS SELECT f61 FROM t1 GROUP BY f61';
SET @variant5= 'CREATE VIEW v1 AS SELECT f61 FROM t1 HAVING f61 > 0';
SET @variant6= 'CREATE VIEW v1 AS SELECT (SELECT f60 FROM t2 WHERE f59=19) AS f61 FROM t1';
SET @variant7= 'CREATE VIEW v1 AS SELECT f61 FROM v2';
-
-Some server responses suffer from
-Bug#10773 Incorrect message is displayed while updating a view
---------------------------------------------------------------------------------
SET @variant8= 'CREATE VIEW v1 AS SELECT f59 AS f61 FROM t1 WHERE f60 IN (SELECT f59 FROM t1)';
SET @variant9= 'CREATE ALGORITHM = TEMPTABLE VIEW v1 (f61) AS select f60 from t1';
CREATE ALGORITHM = TEMPTABLE VIEW v1 (f61) AS select f60 from t1;
INSERT INTO v1 VALUES (1002);
ERROR HY000: The target table v1 of the INSERT is not insertable-into
UPDATE v1 SET f61=1007;
-Got one of the listed errors
+ERROR HY000: The target table v1 of the UPDATE is not updatable
DELETE FROM v1;
ERROR HY000: The target table v1 of the DELETE is not updatable
DROP VIEW v1;
@@ -10890,7 +22346,7 @@ CREATE VIEW v1 AS SELECT f59 AS f61 FROM t1 WHERE f60 IN (SELECT f59 FROM t1);
INSERT INTO v1 VALUES (1002);
ERROR HY000: The target table v1 of the INSERT is not insertable-into
UPDATE v1 SET f61=1007;
-Got one of the listed errors
+ERROR HY000: The target table v1 of the UPDATE is not updatable
DELETE FROM v1;
ERROR HY000: The target table v1 of the DELETE is not updatable
DROP VIEW v1;
@@ -10898,7 +22354,7 @@ CREATE VIEW v1 AS SELECT f61 FROM v2;
INSERT INTO v1 VALUES (1002);
ERROR HY000: The target table v1 of the INSERT is not insertable-into
UPDATE v1 SET f61=1007;
-Got one of the listed errors
+ERROR HY000: The target table v1 of the UPDATE is not updatable
DELETE FROM v1;
ERROR HY000: The target table v1 of the DELETE is not updatable
DROP VIEW v1;
@@ -10906,7 +22362,7 @@ CREATE VIEW v1 AS SELECT (SELECT f60 FROM t2 WHERE f59=19) AS f61 FROM t1;
INSERT INTO v1 VALUES (1002);
ERROR HY000: The target table v1 of the INSERT is not insertable-into
UPDATE v1 SET f61=1007;
-Got one of the listed errors
+ERROR HY000: The target table v1 of the UPDATE is not updatable
DELETE FROM v1;
ERROR HY000: The target table v1 of the DELETE is not updatable
DROP VIEW v1;
@@ -10914,7 +22370,7 @@ CREATE VIEW v1 AS SELECT f61 FROM t1 HAVING f61 > 0;
INSERT INTO v1 VALUES (1002);
ERROR HY000: The target table v1 of the INSERT is not insertable-into
UPDATE v1 SET f61=1007;
-Got one of the listed errors
+ERROR HY000: The target table v1 of the UPDATE is not updatable
DELETE FROM v1;
ERROR HY000: The target table v1 of the DELETE is not updatable
DROP VIEW v1;
@@ -10922,7 +22378,7 @@ CREATE VIEW v1 AS SELECT f61 FROM t1 GROUP BY f61;
INSERT INTO v1 VALUES (1002);
ERROR HY000: The target table v1 of the INSERT is not insertable-into
UPDATE v1 SET f61=1007;
-Got one of the listed errors
+ERROR HY000: The target table v1 of the UPDATE is not updatable
DELETE FROM v1;
ERROR HY000: The target table v1 of the DELETE is not updatable
DROP VIEW v1;
@@ -10930,7 +22386,7 @@ CREATE VIEW v1 AS SELECT SUM(f59) AS f61 FROM t1;
INSERT INTO v1 VALUES (1002);
ERROR HY000: The target table v1 of the INSERT is not insertable-into
UPDATE v1 SET f61=1007;
-Got one of the listed errors
+ERROR HY000: The target table v1 of the UPDATE is not updatable
DELETE FROM v1;
ERROR HY000: The target table v1 of the DELETE is not updatable
DROP VIEW v1;
@@ -10938,7 +22394,7 @@ CREATE VIEW v1 AS SELECT DISTINCTROW(f61) FROM t1;
INSERT INTO v1 VALUES (1002);
ERROR HY000: The target table v1 of the INSERT is not insertable-into
UPDATE v1 SET f61=1007;
-Got one of the listed errors
+ERROR HY000: The target table v1 of the UPDATE is not updatable
DELETE FROM v1;
ERROR HY000: The target table v1 of the DELETE is not updatable
DROP VIEW v1;
@@ -10946,7 +22402,7 @@ CREATE VIEW v1 AS SELECT DISTINCT(f61) FROM t1;
INSERT INTO v1 VALUES (1002);
ERROR HY000: The target table v1 of the INSERT is not insertable-into
UPDATE v1 SET f61=1007;
-Got one of the listed errors
+ERROR HY000: The target table v1 of the UPDATE is not updatable
DELETE FROM v1;
ERROR HY000: The target table v1 of the DELETE is not updatable
DROP VIEW v1;
@@ -11115,9 +22571,9 @@ f1 f2 f4 report
4 NULL <------ 20 --------> t1 4
4 NULL <------ 20 --------> v1 4
ALTER TABLE t1 CHANGE COLUMN f1 f1 VARCHAR(30);
-INSERT INTO t1 SET f1 = '<------------- 30 ----------->',
+INSERT INTO t1 SET f1 = '<------------- 30 ----------->',
f4 = '<------ 20 -------->', report = 't1 5';
-INSERT INTO v1 SET f1 = '<------------- 30 ----------->',
+INSERT INTO v1 SET f1 = '<------------- 30 ----------->',
f4 = '<------ 20 -------->', report = 'v1 5';
DESCRIBE t1;
Field Type Null Key Default Extra
@@ -11407,21 +22863,24 @@ ABC 0
ABC 1.7320508075689
CREATE TABLE t2 AS SELECT f1, SQRT(f2) my_sqrt FROM t1;
SELECT * FROM t2 order by 2;
-f1 my_sqrt
-ABC 0
-ABC 1.73205080756888
+f1 ABC
+my_sqrt 0
+f1 ABC
+my_sqrt 1.73205080756888
DROP TABLE t2;
CREATE TABLE t2 AS SELECT * FROM v1;
SELECT * FROM t2 order by 2;
-f1 my_sqrt
-ABC 0
-ABC 1.73205080756888
+f1 ABC
+my_sqrt 0
+f1 ABC
+my_sqrt 1.73205080756888
DROP TABLE t2;
CREATE TABLE t2 AS SELECT * FROM v2;
SELECT * FROM t2 order by 2;
-f1 my_sqrt
-ABC 0
-ABC 1.73205080756888
+f1 ABC
+my_sqrt 0
+f1 ABC
+my_sqrt 1.73205080756888
DROP TABLE t1;
DROP TABLE t2;
DROP VIEW v1;
diff --git a/mysql-test/suite/funcs_1/storedproc/storedproc_10.inc b/mysql-test/suite/funcs_1/storedproc/storedproc_10.inc
index 2c2e99dc8f4..e839a86eb26 100755
--- a/mysql-test/suite/funcs_1/storedproc/storedproc_10.inc
+++ b/mysql-test/suite/funcs_1/storedproc/storedproc_10.inc
@@ -21,6 +21,7 @@ let $message= Section 3.1.10 - CALL checks:;
--source include/show_msg80.inc
+USE db_storedproc;
# ------------------------------------------------------------------------------
let $message= Testcase 3.1.10.2 + 3.1.10.5:;
@@ -73,11 +74,12 @@ connect (user2_2, localhost, user_2, , db_storedproc);
--source suite/funcs_1/include/show_connection.inc
# no privileges exist
---error 1370
+--error ER_PROCACCESS_DENIED_ERROR
CALL sp31102();
SELECT fn31105( 9 );
# now 'add' EXECUTE to INVOKER
+--echo connection default;
connection default;
USE db_storedproc;
--source suite/funcs_1/include/show_connection.inc
@@ -97,6 +99,7 @@ SELECT fn31105( 9 );
disconnect user2_3;
# now 'remove' SELECT from INVOKER
+--echo connection default;
connection default;
USE db_storedproc;
--source suite/funcs_1/include/show_connection.inc
@@ -144,7 +147,7 @@ BEGIN
END//
delimiter ;//
---error 1305
+--error ER_SP_DOES_NOT_EXIST
CALL fn1();
# cleanup
@@ -170,7 +173,7 @@ BEGIN
END//
delimiter ;//
---error 1305
+--error ER_SP_DOES_NOT_EXIST
SELECT sp1();
# cleanup
@@ -184,26 +187,32 @@ let $message=
Ensure that the ROW_COUNT() SQL function always returns the correct number of
rows affected by the execution of a stored procedure.;
--source include/show_msg80.inc
+# Note(mleich): Information taken from a comments in
+# Bug#21818 Return value of ROW_COUNT() is incorrect for
+# ALTER TABLE, LOAD DATA
+# ROW_COUNT() is -1 following any statement which is not DELETE, INSERT
+# or UPDATE.
+# Also, after a CALL statement, ROW_COUNT() will return the value of the
+# last statement in the stored procedure.
--disable_warnings
DROP PROCEDURE IF EXISTS sp_ins_1;
DROP PROCEDURE IF EXISTS sp_ins_3;
DROP PROCEDURE IF EXISTS sp_upd;
DROP PROCEDURE IF EXISTS sp_ins_upd;
+DROP PROCEDURE IF EXISTS sp_del;
+DROP PROCEDURE IF EXISTS sp_with_rowcount;
--enable_warnings
CREATE TABLE temp(f1 CHAR(20),f2 CHAR(25),f3 DATE,f4 INT,f5 CHAR(25),f6 INT);
INSERT INTO temp SELECT * FROM t10;
delimiter //;
-#FIXME: add to proc: SELECT row_count() 'ins';
CREATE PROCEDURE sp_ins_1()
BEGIN
INSERT INTO temp VALUES ('abc', 'abc', '20051003', 100, 'uvw', 1000);
END//
-
-#FIXME: add to proc: SELECT row_count() 'ins_3';
CREATE PROCEDURE sp_ins_3()
BEGIN
INSERT INTO temp VALUES ('abc', 'xyz', '19490523', 100, 'uvw', 1000);
@@ -211,26 +220,11 @@ BEGIN
INSERT INTO temp VALUES ('abc', 'xyz', '2005-10-24', 100, 'uvw', 1000);
END//
-# FIXME: add to proc: SELECT row_count() AS 'updated';
CREATE PROCEDURE sp_upd()
BEGIN
UPDATE temp SET temp.f1 = 'updated' WHERE temp.f1 ='abc';
END//
-# FIXME: use commented proc
-# CREATE PROCEDURE sp_ins_upd()
-# BEGIN
-# BEGIN
-# INSERT INTO temp VALUES ('qwe', 'abc', '1989-11-09', 100, 'uvw', 1000);
-# INSERT INTO temp VALUES ('qwe', 'xyz', '1998-03-26', 100, 'uvw', 1000);
-# INSERT INTO temp VALUES ('qwe', 'abc', '2000-11-09', 100, 'uvw', 1000);
-# INSERT INTO temp VALUES ('qwe', 'abc', '2005-11-07', 100, 'uvw', 1000);
-# END;
-# SELECT row_count() AS 'insert "qwe"';
-# SELECT COUNT( f1 ), f1 FROM temp GROUP BY f1;
-# UPDATE temp SET temp.f1 = 'updated_2' WHERE temp.f1 ='qwe' AND temp.f2 = 'abc';
-# SELECT row_count() AS 'update "qwe" AND "abc"';
-# END//
CREATE PROCEDURE sp_ins_upd()
BEGIN
BEGIN
@@ -242,31 +236,70 @@ BEGIN
SELECT COUNT( f1 ), f1 FROM temp GROUP BY f1;
UPDATE temp SET temp.f1 = 'updated_2' WHERE temp.f1 ='qwe' AND temp.f2 = 'abc';
END//
+
+CREATE PROCEDURE sp_del()
+BEGIN
+ DELETE FROM temp WHERE temp.f1 ='qwe' OR temp.f1 = 'updated_2';
+END//
+
+CREATE PROCEDURE sp_with_rowcount()
+BEGIN
+ BEGIN
+ INSERT INTO temp VALUES ('qwe', 'abc', '1989-11-09', 100, 'uvw', 1000),
+ ('qwe', 'xyz', '1998-03-26', 100, 'uvw', 1000),
+ ('qwe', 'abc', '2000-11-09', 100, 'uvw', 1000),
+ ('qwe', 'xyz', '2005-11-07', 100, 'uvw', 1000);
+ END;
+ SELECT row_count() AS 'row_count() after insert';
+ SELECT row_count() AS 'row_count() after select row_count()';
+ SELECT f1,f2,f3 FROM temp ORDER BY f1,f2,f3;
+ UPDATE temp SET temp.f1 = 'updated_2' WHERE temp.f2 = 'abc';
+ SELECT row_count() AS 'row_count() after update';
+ SELECT f1,f2,f3 FROM temp ORDER BY f1,f2,f3;
+ DELETE FROM temp WHERE temp.f1 = 'updated_2';
+ SELECT row_count() AS 'row_count() after delete';
+END//
delimiter ;//
CALL sp_ins_1();
SELECT row_count();
-SELECT * FROM temp ORDER BY f4;
+--sorted_result
+SELECT * FROM temp;
CALL sp_ins_3();
-#FIXME: check is 1 correct here? I expect 3 for 3 inserted rows inside the procedure
SELECT row_count();
-SELECT * FROM temp ORDER BY f4;
+--sorted_result
+SELECT * FROM temp;
CALL sp_upd();
SELECT row_count();
-SELECT * FROM temp ORDER BY f4;
+--sorted_result
+SELECT * FROM temp;
-#FIXME: check is 3 correct here? I expect 7 for 4 inserted and then 3 updated rows inside the procedure
CALL sp_ins_upd();
SELECT row_count();
-SELECT * FROM temp ORDER BY f4;
+--sorted_result
+SELECT * FROM temp;
+
+CALL sp_del();
+SELECT row_count();
+--sorted_result
+SELECT * FROM temp;
+
+DELETE FROM temp;
+CALL sp_with_rowcount();
+SELECT row_count();
+--sorted_result
+SELECT * FROM temp;
+
# cleanup
DROP PROCEDURE sp_ins_1;
DROP PROCEDURE sp_ins_3;
DROP PROCEDURE sp_upd;
DROP PROCEDURE sp_ins_upd;
+DROP PROCEDURE sp_del;
+DROP PROCEDURE sp_with_rowcount;
DROP TABLE temp;
diff --git a/mysql-test/suite/funcs_1/storedproc/storedproc_master.inc b/mysql-test/suite/funcs_1/storedproc/storedproc_master.inc
index 49bd5b98401..78cb2755f7c 100644
--- a/mysql-test/suite/funcs_1/storedproc/storedproc_master.inc
+++ b/mysql-test/suite/funcs_1/storedproc/storedproc_master.inc
@@ -1,77 +1,15 @@
#### suite/funcs_1/storedproc/storedproc_master.inc
-#
+###########################################################################
+# WL4084: Review and fix all disabled test
+# enabled this test.
+# 2007-Oct-04 Hhunger
+############################################################################
--enable_query_log
-let $message= .
- . IMPORTANT NOTICE:
- . -----------------
- .
- . FIXME: The .result files are still NOT CHECKED for correctness!
- .
- . FIXME: Several tests are affected by known problems around DECIMAL
- . FIXME: and NUMERIC that will be checked again after WL#2984 once
- . FIXME: has been completed. Some of them are marked in the result.
- .
- . Currently (Dec 06, 2005) this .result file is checked OK for Linux
- . with 5.0.17-bk (ChangeSet@1.1975.1.2, 2005-12-05 18:33:48+01:00).
- . Using the available Windows version 5.0.16 there are differences
- . that can be ignored (e.g. WL#2984).
- .;
---source include/show_msg80.inc
-
-#FIXME-START-------------------------------------------------------------------
-#
-# remove this section prior releasing the test, then we may stop at the first
-# error we get ('passed' or 'not passed' - that's the question).
---disable_abort_on_error
-
- # having ALWAYS a .reject from the changing TIME makes it easier to work with
- # the GUI diff program until the testcase is finished for pushing.
- #
- # let $message= FIXME: Show some information when / where the .result has been created;
- # --source include/show_msg.inc
- --vertical_results
- # SELECT version(), @@version_compile_os AS 'vers_comp_os', current_date, current_time;
-
- let $message= FIXME: There are subtests that are switched off due to known bugs:;
- --source include/show_msg.inc
- #set a variable here to be able to switch all crashing sub tests with ONE change HERE.
- #change the corresponding variable to '1' to enable the crashing parts.
- --disable_query_log
-
- let $check_wl2984= 0;
- eval SELECT $check_wl2984 AS 'WL#2984: DECIMAL and NUMERIC problems with differences on some machines';
-
- --horizontal_results
- --enable_query_log
-
-# As long as
-# Bug#11589: mysqltest, --ps-protocol, strange output, float/double/real with zerofill
-# is not fixed, we must switch the ps-protocol for some statements off.
-# If this bug is fixed, please
-# 1. set the following variable to 0
-# 2. check, if the test passes
-# 3. remove the workarounds
-let $have_bug_11589= 1;
-if ($have_bug_11589)
-{
- let $message= There are some statements where the ps-protocol is switched off.
- Bug#11589: mysqltest, --ps-protocol, strange output, float/double/real with zerofill;
- --source include/show_msg80.inc
-}
-
-#
-#FIXME-END---------------------------------------------------------------------
-
-
# prepare a variable to be able to suppress machine dependant diffs
#let $SERVER_NAME= `SELECT DISTINCT host FROM mysql.user WHERE host LIKE "%\%" AND host NOT In ("localhost", "127.0.0.1", "%")`;
# can be used in: --replace_result $SERVER_NAME <SERVER_NAME>
-# ------------------------------------------------------------------------------
---source suite/funcs_1/storedproc/load_sp_tb.inc
-
-
# ==============================================================================
let $message= Section 3.1.1 - Syntax checks for the CREATE PROCEDURE, CREATE
FUNCTION, ALTER PROCEDURE, ALTER FUNCTION, DROP PROCEDURE, DROP FUNCTION, SHOW
@@ -90,18 +28,23 @@ let $message= Testcase 4.1.1:
USE db_storedproc;
--disable_warnings
+--error ER_TOO_LONG_IDENT
DROP PROCEDURE IF EXISTS sp1_thisisaveryverylongname234872934_thisisaveryverylongname234872934;
--enable_warnings
+--error ER_TOO_LONG_IDENT
CREATE PROCEDURE sp1_thisisaveryverylongname234872934_thisisaveryverylongname234872934 (f1 char(20) )
SELECT * from t1 where f2 = f1;
+--error ER_TOO_LONG_IDENT
CALL sp1_thisisaveryverylongname234872934_thisisaveryverylongname234872934('aaaa');
--disable_warnings
+--error ER_TOO_LONG_IDENT
DROP PROCEDURE IF EXISTS sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcde;
--enable_warnings
delimiter //;
+--error ER_TOO_LONG_IDENT
CREATE PROCEDURE sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcde( f1 tinytext ) language sql deterministic sql security definer comment 'this is simple'
BEGIN
set @v1 = f1;
@@ -109,6 +52,7 @@ CREATE PROCEDURE sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabc
END//
delimiter ;//
+--error ER_TOO_LONG_IDENT
CALL sp1_thisisaveryverylongname234872934_thisisaveryverylongnameabcde( 'abc' );
--replace_column 5 modified 6 created
@@ -170,9 +114,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
--- echo FIXME: Following test contains a known problem that will be checked again
--- echo FIXME: after WL#2984 has been completed: SP definition accepted with m>60 in DECIMAL(m,n)
-#FIXME --error 4711
+--error ER_TOO_BIG_PRECISION
CREATE PROCEDURE sp1( f1 decimal(256, 30) ) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
set @v1 = f1;
@@ -180,8 +122,7 @@ BEGIN
END//
DROP PROCEDURE IF EXISTS sp1//
-# should fail: 66 is not allowed; maximum is 65.
-#FIXME --error 4711
+--error ER_TOO_BIG_PRECISION
CREATE PROCEDURE sp1( f1 decimal(66, 30) ) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
set @v1 = f1;
@@ -198,28 +139,22 @@ delimiter ;//
CALL sp1( 17976931340000 );
-if ($check_wl2984)
+# switched off due to big differences with (e.g....) sol10-sparc-b
+CALL sp1( 1.797693134e+13 );
+--error ER_ILLEGAL_VALUE_FOR_TYPE
+CALL sp1( 1.7976931348623157493578e+308 );
+
+# check all ...E+100 to E-100
+let $digits= 100;
+while ($digits)
{
- # switched off due to big differences with (e.g....) sol10-sparc-b
- CALL sp1( 1.797693134e+13 );
- CALL sp1( 1.7976931348623157493578e+308 );
-
- -- echo FIXME: Following test contains a known problem that will be checked again
- -- echo FIXME: after WL#2984 has been completed:
- -- echo FIXME: values accepted without warning although m>60 in DECIMAL(m,n)
-
- # check all ...E+100 to E-100
- let $digits= 100;
- while ($digits)
- {
- eval CALL sp1( 0.1234567890987654321e+$digits );
- eval CALL sp1( 0.1234567890987654321e-$digits );
- dec $digits;
- }
- # check the 2 values which cannot be handled easy in the loop:
- eval CALL sp1( 0.1234567890987654321e+0 );
- eval CALL sp1( 0.1234567890987654321e-0 );
+ eval CALL sp1( 0.1234567890987654321e+$digits );
+ eval CALL sp1( 0.1234567890987654321e-$digits );
+ dec $digits;
}
+# check the 2 values which cannot be handled easy in the loop:
+eval CALL sp1( 0.1234567890987654321e+0 );
+eval CALL sp1( 0.1234567890987654321e-0 );
--replace_column 5 modified 6 created
SHOW PROCEDURE status;
@@ -395,7 +330,7 @@ DROP FUNCTION IF EXISTS fn1;
delimiter //;
# 1425: Too big scale 63 specified for column ''. Maximum is 30.
---error 1425
+--error ER_TOO_BIG_SCALE
CREATE FUNCTION fn1( f1 decimal(63, 31) ) returns decimal(63, 31) language sql not deterministic sql security invoker comment 'this is simple'
BEGIN
set f1 = 1000000 + f1;
@@ -403,7 +338,7 @@ BEGIN
END//
delimiter ;//
---error 1305
+--error ER_SP_DOES_NOT_EXIST
SELECT fn1( 1.3326e+8 );
delimiter //;
@@ -430,7 +365,14 @@ CREATE FUNCTION fn1( f1 enum("value1", "value1") ) returns decimal(63, 30) lang
END//
delimiter ;//
+# warnings for this select disabled due to diffs with/without --ps-protocol:
+# without ps-protocol the following warning is shown:
+# +Note 1291 Column '' has duplicated value 'value1' in SET
+# +Warning 1265 Data truncated for column 'f1' at row 1
+# Reported as BUG#33396
+--disable_warnings
SELECT fn1( "value1" );
+--enable_warnings
--replace_column 5 modified 6 created
SHOW FUNCTION STATUS LIKE 'fn1';
@@ -446,7 +388,14 @@ CREATE FUNCTION fn1( f1 set("value1", "value1") ) returns decimal(63, 30) langua
END//
delimiter ;//
+# warnings for this select disabled due to diffs with/without --ps-protocol:
+# without ps-protocol the following warning is shown:
+# +Note 1291 Column '' has duplicated value 'value1' in SET
+# +Warning 1265 Data truncated for column 'f1' at row 1
+# Reported as BUG#33396
+--disable_warnings
SELECT fn1( "value1, value1" );
+--enable_warnings
--replace_column 5 modified 6 created
SHOW FUNCTION STATUS LIKE 'fn1';
@@ -666,10 +615,12 @@ SELECT f2 into c from t1 where t1.f2=999;
END//
delimiter ;//
+--disable_warnings
set @c=1;
CALL sp7c('xyz', @out_param, @c);
SELECT @out_param;
SELECT @c;
+--enable_warnings
# cleanup
DROP PROCEDURE sp7a;
@@ -697,7 +648,7 @@ let $message= Testcase 4.1.9:
drop procedure;
--source include/show_msg80.inc
-
+--sorted_result
--replace_column 13 created 14 modified
SELECT * from mysql.proc where specific_name='sp9';
@@ -705,31 +656,34 @@ SELECT * from mysql.proc where specific_name='sp9';
DROP PROCEDURE IF EXISTS sp9;
--enable_warnings
+--sorted_result
--replace_column 13 created 14 modified
SELECT * from mysql.proc where specific_name='sp9';
CREATE PROCEDURE sp9()SELECT * from t1;
+--sorted_result
--replace_column 13 created 14 modified
SELECT * from mysql.proc where specific_name='sp9';
DROP PROCEDURE sp9;
+--sorted_result
--replace_column 13 created 14 modified
SELECT * from mysql.proc where specific_name='sp9';
CREATE PROCEDURE sp9()SELECT * from t1;
+--sorted_result
--replace_column 13 created 14 modified
SELECT * from mysql.proc where specific_name='sp9';
DROP PROCEDURE IF EXISTS sp9;
+--sorted_result
--replace_column 13 created 14 modified
SELECT * from mysql.proc where specific_name='sp9';
-
-
# ------------------------------------------------------------------------------
let $message= Testcase 4.1.10:
----------------
@@ -792,6 +746,7 @@ connect (u_1, localhost, user_1, , db_storedproc);
CALL sp11();
connection default;
+USE db_storedproc;
--source suite/funcs_1/include/show_connection.inc
alter procedure sp11 sql security invoker;
@@ -801,8 +756,9 @@ SELECT security_type from mysql.proc where specific_name='sp11';
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
connection u_1;
--source suite/funcs_1/include/show_connection.inc
+USE db_storedproc;
---error 1142
+--error ER_TABLEACCESS_DENIED_ERROR
CALL sp11();
commit work;
@@ -897,900 +853,900 @@ appropriate error message is returned when the name is rejected;
--source include/show_msg80.inc
---error 1357
+--error ER_SP_NO_DROP_SP
CREATE PROCEDURE sp1()
DROP PROCEDURE sp1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE !_sp1( f1 char(20) )
SELECT * from t1 where f2 = f1;
-#FIXME: this was what I found in this file ... :
-#CREATE PROCEDURE !_sp1( f1 char(20) )
-# SELECT * from t1 where f2 = f1; ^a^kcd '/usr/mysql/mysql-test/t'
-#/t'ql/mysql-test
-#t]# t@localhost t
-
---error 0,1064
CREATE PROCEDURE function()
SELECT * from t1 where f2=f1;
DROP PROCEDURE function;
---error 1064
+--error ER_PARSE_ERROR
+CREATE PROCEDURE accessible()
+ SELECT * from t1 where f2=f1;
+
+--error ER_PARSE_ERROR
CREATE PROCEDURE add()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE all()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE alter()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE analyze()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE and()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE as()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE asc()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE asensitive()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE before()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE between()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE bigint()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE binary()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE blob()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE both()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE by()
SELECT * from t1 where f2=f1;
---error 1064
-CREATE PROCEDURE CALL()
+--error ER_PARSE_ERROR
+CREATE PROCEDURE call()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE cascade()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE case()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE change()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE char()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE character()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE check()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE collate()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE column()
SELECT * from t1 where f2=f1;
---error 1064
-CREATE PROCEDURE columns()
- SELECT * from t1 where f2=f1;
-DROP PROCEDURE columns;
-
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE condition()
SELECT * from t1 where f2=f1;
---error 1064
-CREATE PROCEDURE connection()
- SELECT * from t1 where f2=f1;
-
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE constraint()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE continue()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE convert()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE create()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE cross()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE current_date()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE current_time()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE current_timestamp()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE current_user()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE cursor()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE database()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE databases()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE day_hour()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE day_microsecond()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE day_minute()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE day_second()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE dec()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE decimal()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE declare()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE default()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE delayed()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE delete()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE desc()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE describe()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE deterministic()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE distinct()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE distinctrow()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE div()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE double()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE drop()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE dual()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE each()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE else()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE elseif()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE enclosed()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE escaped()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE exists()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE exit()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE explain()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE false()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE fetch()
SELECT * from t1 where f2=f1;
---error 1064
+#--error ER_PARSE_ERROR
CREATE PROCEDURE fields()
SELECT * from t1 where f2=f1;
DROP PROCEDURE fields;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE float()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE for()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE force()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE foreign()
SELECT * from t1 where f2=f1;
---error 1064
-CREATE PROCEDURE found()
- SELECT * from t1 where f2=f1;
-DROP PROCEDURE found;
-
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE from()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE fulltext()
SELECT * from t1 where f2=f1;
---error 1064
-CREATE PROCEDURE goto()
- SELECT * from t1 where f2=f1;
-DROP PROCEDURE goto;
-
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE grant()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE group()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE having()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE high_priority()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE hour_microsecond()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE hour_minute()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE hour_second()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE if()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE ignore()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE in()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE index()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE infile()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE inner()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE inout()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE insensitive()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE insert()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE int()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
+CREATE PROCEDURE int1()
+ SELECT * from t1 where f2=f1;
+
+--error ER_PARSE_ERROR
+CREATE PROCEDURE int2()
+ SELECT * from t1 where f2=f1;
+
+--error ER_PARSE_ERROR
+CREATE PROCEDURE int3()
+ SELECT * from t1 where f2=f1;
+
+--error ER_PARSE_ERROR
+CREATE PROCEDURE int4()
+ SELECT * from t1 where f2=f1;
+
+--error ER_PARSE_ERROR
+CREATE PROCEDURE int8()
+ SELECT * from t1 where f2=f1;
+
+--error ER_PARSE_ERROR
CREATE PROCEDURE integer()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE interval()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE into()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE is()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE iterate()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE join()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE key()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE keys()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE kill()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE leading()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE leave()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE left()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE like()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE limit()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
+CREATE PROCEDURE linear()
+ SELECT * from t1 where f2=f1;
+
+--error ER_PARSE_ERROR
CREATE PROCEDURE lines()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE load()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE localtime()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE localtimestamp()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE lock()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE long()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE longblob()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE longtext()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE loop()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE low_priority()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
+CREATE PROCEDURE master_ssl_verify_server_cert()
+ SELECT * from t1 where f2=f1;
+
+--error ER_PARSE_ERROR
CREATE PROCEDURE match()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE mediumblob()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE mediumint()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE mediumtext()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE middleint()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE minute_microsecond()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE minute_second()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE mod()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE modifies()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE natural()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE not()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE no_write_to_binlog()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE null()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE numeric()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE on()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE optimize()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE option()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE optionally()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE or()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE order()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE out()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE outer()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE outfile()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE precision()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE primary()
SELECT * from t1 where f2=f1;
---error 1064
-CREATE PROCEDURE privileges()
- SELECT * from t1 where f2=f1;
-DROP PROCEDURE privileges;
-
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE procedure()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE purge()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
+CREATE PROCEDURE range()
+ SELECT * from t1 where f2=f1;
+
+--error ER_PARSE_ERROR
CREATE PROCEDURE read()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE reads()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE real()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE references()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE regexp()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
+CREATE PROCEDURE release()
+ SELECT * from t1 where f2=f1;
+
+--error ER_PARSE_ERROR
CREATE PROCEDURE rename()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE repeat()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE replace()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE require()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE restrict()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE return()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE revoke()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE right()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE rlike()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE schema()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE schemas()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE second_microsecond()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE select()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sensitive()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE separator()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE set()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE show()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE smallint()
SELECT * from t1 where f2=f1;
---error 1064
-CREATE PROCEDURE soname()
- SELECT * from t1 where f2=f1;
-
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE spatial()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE specific()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sql()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sqlexception()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sqlstate()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sqlwarning()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sql_big_result()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sql_calc_found_rows()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sql_small_result()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE ssl()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE starting()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE straight_join()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE table()
SELECT * from t1 where f2=f1;
---error 1064
-CREATE PROCEDURE tables()
- SELECT * from t1 where f2=f1;
-DROP PROCEDURE tables;
-
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE terminated()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE then()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE tinyblob()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE tinyint()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE tinytext()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE to()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE trailing()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE trigger()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE true()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE undo()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE union()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE unique()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE unlock()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE unsigned()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE update()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE usage()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE use()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE using()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE utc_date()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE utc_time()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE utc_timestamp()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE values()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE varbinary()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE varchar()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE varcharacter()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE varying()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE when()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE where()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE while()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE with()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE write()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE xor()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE year_month()
SELECT * from t1 where f2=f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE zerofill()
SELECT * from t1 where f2=f1;
@@ -1803,635 +1759,619 @@ error message is returned when the name is rejected;
--source include/show_msg80.inc
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION !_fn1(f1 char) returns char
return f1;
---error 1064
+--disable_warnings
+--error ER_PARSE_ERROR
CREATE FUNCTION char(f1 char) returns char
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION char binary(f1 char binary) returns char binary
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION char ascii(f1 char ascii) returns char ascii
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION char not null(f1 char not null) returns char not null
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION char binary not null(f1 char binary not null) returns char binary not null
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION char ascii not null(f1 char ascii not null) returns char ascii not null
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION tinytext(f1 tinytext) returns tinytext
return f1;
---error 1064
+#--error ER_PARSE_ERROR
CREATE FUNCTION text(f1 text) returns text
return f1;
DROP FUNCTION text;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION mediumtext(f1 mediumtext) returns mediumtext
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION longtext(f1 longtext) returns longtext
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION tinytext not null(f1 tinytext not null) returns tinytext not null
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION text not null(f1 text not null) returns text not null
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION mediumtext not null(f1 mediumtext not null) returns mediumtext not null
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION longtext not null(f1 longtext not null) returns longtext not null
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION tinyblob(f1 tinyblob) returns tinyblob
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION blob(f1 blob) returns blob
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION mediumblob(f1 mediumblob) returns mediumblob
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION longblob(f1 longblob) returns longblob
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION tinyblob not null(f1 tinyblob not null) returns tinyblob not null
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION blob not null(f1 blob not null) returns blob not null
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION mediumblob not null(f1 mediumblob not null) returns mediumblob not null
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION longblob not null(f1 longblob not null) returns longblob not null
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION binary(f1 binary) returns binary
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION binary not null(f1 binary not null) returns binary not null
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION tinyint(f1 tinyint) returns tinyint
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION tinyint unsigned(f1 tinyint unsigned) returns tinyint unsigned
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION tinyint zerofill(f1 tinyint zerofill) returns tinyint zerofill
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION tinyint unsigned zerofill(f1 tinyint unsigned zerofill) returns tinyint unsigned zerofill
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION smallint(f1 smallint) returns smallint
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION smallint unsigned(f1 smallint unsigned) returns smallint unsigned
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION smallint zerofill(f1 smallint zerofill) returns smallint zerofill
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION smallint unsigned zerofill(f1 smallint unsigned zerofill) returns smallint unsigned zerofill
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION mediumint(f1 mediumint) returns mediumint
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION mediumint unsigned(f1 mediumint unsigned) returns mediumint unsigned
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION mediumint zerofill(f1 mediumint zerofill) returns mediumint zerofill
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION mediumint unsigned zerofill(f1 mediumint unsigned zerofill) returns mediumint unsigned zerofill
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION int(f1 int) returns int
return f1;
---error 1064
+--error ER_PARSE_ERROR
+CREATE FUNCTION int1(f1 int1) returns int1
+ return f1;
+
+--error ER_PARSE_ERROR
+CREATE FUNCTION int2(f1 int2) returns int2
+ return f1;
+
+--error ER_PARSE_ERROR
+CREATE FUNCTION int3(f1 int3) returns int3
+ return f1;
+
+--error ER_PARSE_ERROR
+CREATE FUNCTION int4(f1 int4) returns int4
+ return f1;
+
+--error ER_PARSE_ERROR
+CREATE FUNCTION int8(f1 int8) returns int8
+ return f1;
+
+--error ER_PARSE_ERROR
CREATE FUNCTION int unsigned(f1 int unsigned) returns int unsigned
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION int zerofill(f1 int zerofill) returns int zerofill
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION int unsigned zerofill(f1 int unsigned zerofill) returns int unsigned zerofill
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION bigint(f1 bigint) returns bigint
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION bigint unsigned(f1 bigint unsigned) returns bigint unsigned
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION bigint zerofill(f1 bigint zerofill) returns bigint zerofill
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION bigint unsigned zerofill(f1 bigint unsigned zerofill) returns bigint unsigned zerofill
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION decimal(f1 decimal) returns decimal
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION decimal unsigned(f1 decimal unsigned) returns decimal unsigned
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION decimal zerofill(f1 decimal zerofill) returns decimal zerofill
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION decimal unsigned zerofill(f1 decimal unsigned zerofill) returns decimal unsigned zerofill
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION numeric(f1 numeric) returns numeric
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION numeric unsigned(f1 numeric unsigned) returns numeric unsigned
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION numeric zerofill(f1 numeric zerofill) returns numeric zerofill
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION numeric unsigned zerofill(f1 numeric unsigned zerofill) returns numeric unsigned zerofill
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION real(f1 real) returns real
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION real unsigned(f1 real unsigned) returns real unsigned
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION real zerofill(f1 real zerofill) returns real zerofill
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION real unsigned zerofill(f1 real unsigned zerofill) returns real unsigned zerofill
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION float(f1 float) returns float
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION float unsigned(f1 float unsigned) returns float unsigned
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION float zerofill(f1 float zerofill) returns float zerofill
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION float unsigned zerofill(f1 float unsigned zerofill) returns float unsigned zerofill
return f1;
-#FIXME check this is OK:--error 1064
CREATE FUNCTION date(f1 date) returns date
return f1;
DROP FUNCTION date;
-#FIXME check this is OK:--error 1064
CREATE FUNCTION time(f1 time) returns time
return f1;
DROP FUNCTION time;
-#FIXME check this is OK:--error 1064
CREATE FUNCTION datetime(f1 datetime) returns datetime
return f1;
DROP FUNCTION datetime;
-#FIXME check this is OK:--error 1064
CREATE FUNCTION timestamp(f1 timestamp) returns timestamp
return f1;
DROP FUNCTION timestamp;
-#FIXME check this is OK:--error 1064
CREATE FUNCTION year(f1 year) returns year
return f1;
DROP FUNCTION year;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION year(3)(f1 year(3)) returns year(3)
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION year(4)(f1 year(4)) returns year(4)
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION enum("1enum", "2enum")(f1 enum("1enum", "2enum")) returns enum("1enum", "2enum")
return f1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION set("1set", "2set")(f1 set("1set", "2set")) returns set("1set", "2set")
return f1;
+--enable_warnings
+
+DROP FUNCTION IF EXISTS fn1;
+CREATE FUNCTION fn1(f1 char ) returns char
+ return f1;
+
+DROP FUNCTION IF EXISTS fn1;
+--error ER_NOT_SUPPORTED_YET
+CREATE FUNCTION fn1(f1 char binary ) returns char binary
+ return f1;
+
+DROP FUNCTION IF EXISTS fn1;
+CREATE FUNCTION fn1(f1 char ascii ) returns char ascii
+ return f1;
+
+DROP FUNCTION IF EXISTS fn1;
+--error ER_PARSE_ERROR
+CREATE FUNCTION fn1(f1 char not null ) returns char not null
+ return f1;
+DROP FUNCTION IF EXISTS fn1;
+--error ER_PARSE_ERROR
+CREATE FUNCTION fn1(f1 char binary not null ) returns char binary not null
+ return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(char f1 ) returns char
+--error ER_PARSE_ERROR
+CREATE FUNCTION fn1(f1 char ascii not null ) returns char ascii not null
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(char binary f1 ) returns char binary
+CREATE FUNCTION fn1(f1 tinytext ) returns tinytext
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(char ascii f1 ) returns char ascii
+CREATE FUNCTION fn1(f1 text ) returns text
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(char not null f1 ) returns char not null
+CREATE FUNCTION fn1(f1 mediumtext ) returns mediumtext
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(char binary not null f1 ) returns char binary not null
+CREATE FUNCTION fn1(f1 longtext ) returns longtext
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(char ascii not null f1 ) returns char ascii not null
+--error ER_PARSE_ERROR
+CREATE FUNCTION fn1(f1 tinytext not null ) returns tinytext not null
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(tinytext f1 ) returns tinytext
+--error ER_PARSE_ERROR
+CREATE FUNCTION fn1(f1 text not null ) returns text not null
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(text f1 ) returns text
+--error ER_PARSE_ERROR
+CREATE FUNCTION fn1(f1 mediumtext not null ) returns mediumtext not null
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(mediumtext f1 ) returns mediumtext
+--error ER_PARSE_ERROR
+CREATE FUNCTION fn1(f1 longtext not null ) returns longtext not null
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(longtext f1 ) returns longtext
+CREATE FUNCTION fn1(f1 tinyblob ) returns tinyblob
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(tinytext not null f1 ) returns tinytext not null
+CREATE FUNCTION fn1(f1 blob ) returns blob
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(text not null f1 ) returns text not null
+CREATE FUNCTION fn1(f1 mediumblob ) returns mediumblob
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(mediumtext not null f1 ) returns mediumtext not null
+CREATE FUNCTION fn1(f1 longblob ) returns longblob
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(longtext not null f1 ) returns longtext not null
+--error ER_PARSE_ERROR
+CREATE FUNCTION fn1(f1 tinyblob not null ) returns tinyblob not null
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(tinyblob f1 ) returns tinyblob
+--error ER_PARSE_ERROR
+CREATE FUNCTION fn1(f1 blob not null ) returns blob not null
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(blob f1 ) returns blob
+--error ER_PARSE_ERROR
+CREATE FUNCTION fn1(f1 mediumblob not null ) returns mediumblob not null
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(mediumblob f1 ) returns mediumblob
+--error ER_PARSE_ERROR
+CREATE FUNCTION fn1(f1 longblob not null ) returns longblob not null
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(longblob f1 ) returns longblob
+CREATE FUNCTION fn1(f1 binary ) returns binary
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(tinyblob not null f1 ) returns tinyblob not null
+--error ER_PARSE_ERROR
+CREATE FUNCTION fn1(f1 binary not null ) returns binary not null
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(blob not null f1 ) returns blob not null
+CREATE FUNCTION fn1(f1 tinyint ) returns tinyint
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(mediumblob not null f1 ) returns mediumblob not null
+CREATE FUNCTION fn1(f1 tinyint unsigned ) returns tinyint unsigned
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(longblob not null f1 ) returns longblob not null
+CREATE FUNCTION fn1(f1 tinyint zerofill ) returns tinyint zerofill
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(binary f1 ) returns binary
+CREATE FUNCTION fn1(f1 tinyint unsigned zerofill ) returns tinyint unsigned zerofill
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(binary not null f1 ) returns binary not null
+CREATE FUNCTION fn1(f1 smallint ) returns smallint
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(tinyint f1 ) returns tinyint
+CREATE FUNCTION fn1(f1 smallint unsigned ) returns smallint unsigned
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(tinyint unsigned f1 ) returns tinyint unsigned
+CREATE FUNCTION fn1(f1 smallint zerofill ) returns smallint zerofill
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(tinyint zerofill f1 ) returns tinyint zerofill
+CREATE FUNCTION fn1(f1 smallint unsigned zerofill ) returns smallint unsigned zerofill
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(tinyint unsigned zerofill f1 ) returns tinyint unsigned zerofill
+CREATE FUNCTION fn1(f1 mediumint ) returns mediumint
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(smallint f1 ) returns smallint
+CREATE FUNCTION fn1(f1 mediumint unsigned ) returns mediumint unsigned
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(smallint unsigned f1 ) returns smallint unsigned
+CREATE FUNCTION fn1(f1 mediumint zerofill ) returns mediumint zerofill
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(smallint zerofill f1 ) returns smallint zerofill
+CREATE FUNCTION fn1(f1 mediumint unsigned zerofill ) returns mediumint unsigned zerofill
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(smallint unsigned zerofill f1 ) returns smallint unsigned zerofill
+CREATE FUNCTION fn1(f1 int ) returns int
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(mediumint f1 ) returns mediumint
+CREATE FUNCTION fn1(f1 int unsigned ) returns int unsigned
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(mediumint unsigned f1 ) returns mediumint unsigned
+CREATE FUNCTION fn1(f1 int1 unsigned ) returns int1 unsigned
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(mediumint zerofill f1 ) returns mediumint zerofill
+CREATE FUNCTION fn1(f1 int2 unsigned ) returns int2 unsigned
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(mediumint unsigned zerofill f1 ) returns mediumint unsigned zerofill
+CREATE FUNCTION fn1(f1 int3 unsigned ) returns int3 unsigned
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(int f1 ) returns int
+CREATE FUNCTION fn1(f1 int4 unsigned ) returns int4 unsigned
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(int unsigned f1 ) returns int unsigned
+CREATE FUNCTION fn1(f1 int8 unsigned ) returns int8 unsigned
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(int zerofill f1 ) returns int zerofill
+CREATE FUNCTION fn1(f1 int zerofill ) returns int zerofill
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(int unsigned zerofill f1 ) returns int unsigned zerofill
+CREATE FUNCTION fn1(f1 int unsigned zerofill ) returns int unsigned zerofill
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(bigint f1 ) returns bigint
+CREATE FUNCTION fn1(f1 bigint ) returns bigint
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(bigint unsigned f1 ) returns bigint unsigned
+CREATE FUNCTION fn1(f1 bigint unsigned ) returns bigint unsigned
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(bigint zerofill f1 ) returns bigint zerofill
+CREATE FUNCTION fn1(f1 bigint zerofill ) returns bigint zerofill
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(bigint unsigned zerofill f1 ) returns bigint unsigned zerofill
+CREATE FUNCTION fn1(f1 bigint unsigned zerofill ) returns bigint unsigned zerofill
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(decimal f1 ) returns decimal
+CREATE FUNCTION fn1(f1 decimal ) returns decimal
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(decimal unsigned f1 ) returns decimal unsigned
+CREATE FUNCTION fn1(f1 decimal unsigned ) returns decimal unsigned
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(decimal zerofill f1 ) returns decimal zerofill
+CREATE FUNCTION fn1(f1 decimal zerofill ) returns decimal zerofill
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(decimal unsigned zerofill f1 ) returns decimal unsigned zerofill
+CREATE FUNCTION fn1(f1 decimal unsigned zerofill ) returns decimal unsigned zerofill
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(numeric f1 ) returns numeric
+CREATE FUNCTION fn1(f1 numeric ) returns numeric
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(numeric unsigned f1 ) returns numeric unsigned
+CREATE FUNCTION fn1(f1 numeric unsigned ) returns numeric unsigned
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(numeric zerofill f1 ) returns numeric zerofill
+CREATE FUNCTION fn1(f1 numeric zerofill ) returns numeric zerofill
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(numeric unsigned zerofill f1 ) returns numeric unsigned zerofill
+CREATE FUNCTION fn1(f1 numeric unsigned zerofill ) returns numeric unsigned zerofill
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(real f1 ) returns real
+CREATE FUNCTION fn1(f1 real ) returns real
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(real unsigned f1 ) returns real unsigned
+CREATE FUNCTION fn1(f1 real unsigned ) returns real unsigned
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(real zerofill f1 ) returns real zerofill
+CREATE FUNCTION fn1(f1 real zerofill ) returns real zerofill
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(real unsigned zerofill f1 ) returns real unsigned zerofill
+CREATE FUNCTION fn1(f1 real unsigned zerofill ) returns real unsigned zerofill
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(float f1 ) returns float
+CREATE FUNCTION fn1(f1 float ) returns float
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(float unsigned f1 ) returns float unsigned
+CREATE FUNCTION fn1(f1 float unsigned ) returns float unsigned
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(float zerofill f1 ) returns float zerofill
+CREATE FUNCTION fn1(f1 float zerofill ) returns float zerofill
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(float unsigned zerofill f1 ) returns float unsigned zerofill
+CREATE FUNCTION fn1(f1 float unsigned zerofill ) returns float unsigned zerofill
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(date f1 ) returns date
+CREATE FUNCTION fn1(f1 date ) returns date
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(time f1 ) returns time
+CREATE FUNCTION fn1(f1 time ) returns time
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(datetime f1 ) returns datetime
+CREATE FUNCTION fn1(f1 datetime ) returns datetime
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(timestamp f1 ) returns timestamp
+CREATE FUNCTION fn1(f1 timestamp ) returns timestamp
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(year f1 ) returns year
+CREATE FUNCTION fn1(f1 year ) returns year
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(year(3) f1 ) returns year(3)
+--error ER_PARSE_ERROR
+CREATE FUNCTION fn1(f1 year(f1 3) ) returns year(3)
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(year(4) f1 ) returns year(4)
+--error ER_PARSE_ERROR
+CREATE FUNCTION fn1(f1 year(f1 4) ) returns year(4)
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(enum("1enum", "2enum") f1 ) returns enum("1enum", "2enum")
+--error ER_PARSE_ERROR
+CREATE FUNCTION fn1(f1 enum(f1 "1enum", "2enum") ) returns enum("1enum", "2enum")
return f1;
DROP FUNCTION IF EXISTS fn1;
---error 1064
-CREATE FUNCTION fn1(set("1set", "2set") f1 ) returns set("1set", "2set")
+--error ER_PARSE_ERROR
+CREATE FUNCTION fn1(f1 set(f1 "1set", "2set") ) returns set("1set", "2set")
return f1;
@@ -2444,7 +2384,7 @@ appropriate error message;
DROP PROCEDURE IF EXISTS sp16;
---error 1305
+--error ER_SP_DOES_NOT_EXIST
CALL sp16( 'xyz' );
CREATE DATABASE db1;
@@ -2458,7 +2398,7 @@ BEGIN
END//
delimiter ;//
---error 1305
+--error ER_SP_DOES_NOT_EXIST
CALL db_storedproc.sp16();
# cleanup
@@ -2501,15 +2441,15 @@ SELECT db_storedproc.sp1( 'a' );
DROP FUNCTION db_storedproc.sp1;
USE db_storedproc;
---error 1305
+--error ER_SP_DOES_NOT_EXIST
SELECT sp1('a');
DROP PROCEDURE sp1;
---error 1305
+--error ER_SP_DOES_NOT_EXIST
CALL sp1();
---error 1305
+--error ER_SP_DOES_NOT_EXIST
SELECT sp1('a');
# cleanup
@@ -2546,9 +2486,11 @@ DROP DATABASE IF EXISTS db1;
CREATE DATABASE db1;
USE db1;
alter procedure db_storedproc.sp1 sql security invoker;
+--sorted_result
SELECT name, type, security_type from mysql.proc where db LIKE 'db_storedproc%' and specific_name='sp1';
alter function db_storedproc.sp1 sql security invoker;
+--sorted_result
SELECT name, type, security_type from mysql.proc where db LIKE 'db_storedproc%' and specific_name='sp1';
CALL db_storedproc.sp1();
@@ -2562,7 +2504,7 @@ CALL db_storedproc.sp1();
SELECT db_storedproc.sp1();
alter function sp1 sql security definer;
-
+--sorted_result
SELECT name, type, security_type from mysql.proc where db LIKE 'db_storedproc%' and specific_name='sp1';
CALL db_storedproc.sp1();
@@ -2624,6 +2566,7 @@ SELECT db_storedproc.sp1();
alter procedure db_storedproc_3122.sp1 sql security invoker;
alter function sp1 sql security invoker;
+--sorted_result
SELECT db, name, type, security_type from mysql.proc where db LIKE 'db_storedproc%' and specific_name='sp1';
CALL db_storedproc.sp1();
@@ -2701,20 +2644,20 @@ CREATE DATABASE db1;
DROP PROCEDURE IF EXISTS sp1;
CREATE PROCEDURE sp1 () set @x=1;
---error 1304
+--error ER_SP_ALREADY_EXISTS
CREATE PROCEDURE sp1 () set @x=2;
CALL sp1();
SELECT @x;
USE db1;
---error 1304
+--error ER_SP_ALREADY_EXISTS
CREATE PROCEDURE db_storedproc.sp1 () set @x=3;
CALL db_storedproc.sp1();
SELECT @x;
DROP PROCEDURE IF EXISTS db_storedproc.sp1;
CREATE PROCEDURE db_storedproc.sp1 () set @x=1;
---error 1304
+--error ER_SP_ALREADY_EXISTS
CREATE PROCEDURE db_storedproc.sp1 () set @x=2;
CALL db_storedproc.sp1();
SELECT @x;
@@ -2738,16 +2681,16 @@ DROP DATABASE IF EXISTS db1;
CREATE DATABASE db1;
DROP FUNCTION IF EXISTS fn1;
CREATE FUNCTION fn1 () returns int return 1;
---error 1304
+--error ER_SP_ALREADY_EXISTS
CREATE FUNCTION fn1 () returns int return 2;
SELECT fn1();
USE db1;
---error 1304
+--error ER_SP_ALREADY_EXISTS
CREATE FUNCTION db_storedproc.fn1 () returns int return 3;
SELECT db_storedproc.fn1();
DROP FUNCTION IF EXISTS db_storedproc.fn1;
CREATE FUNCTION db_storedproc.fn1 () returns int return 1;
---error 1304
+--error ER_SP_ALREADY_EXISTS
CREATE FUNCTION db_storedproc.fn1 () returns int return 2;
SELECT db_storedproc.fn1();
@@ -2818,7 +2761,7 @@ error message is returned when the name is rejected. (invalid func name);
--source include/show_msg80.inc
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION !_fn1( f1 char(20) ) returns int
BEGIN
SELECT * from t1 where f2 = f1;
@@ -2827,7 +2770,7 @@ END//
delimiter ;//
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION fn1( f1 char(20) ) return int
BEGIN
SELECT * from t1 where f2 = f1;
@@ -2838,20 +2781,20 @@ delimiter ;//
CREATE FUNCTION fn1() returns int
return 'a';
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION procedure() returns int
return 1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION fn1(a char) returns int lang sql return 1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION fn1(a char) returns int deterministic( return 1);
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION fn1(a char) returns int non deterministic return 1;
---error 1064
+--error ER_PARSE_ERROR
CREATE FUNCTION fn1(a char) returns int not deterministic comment 'abc' language sql sql security refiner return 1;
# clean up
@@ -2924,7 +2867,7 @@ DROP PROCEDURE IF EXISTS sp1;
# missing BEGIN
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( cnt int(20) )
SELECT count(*) into cnt from t2;
set @count = cnt;
@@ -2932,7 +2875,7 @@ CREATE PROCEDURE sp1( cnt int(20) )
END//
delimiter ;//
---error 1305
+--error ER_SP_DOES_NOT_EXIST
CALL sp1( 10 );
--disable_warnings
@@ -2941,7 +2884,7 @@ DROP PROCEDURE IF EXISTS sp1;
# wrong order of BEGIN and END
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( cnt int(20) )
END
SELECT count(*) into cnt from t2;
@@ -2950,7 +2893,7 @@ END
BEGIN//
delimiter ;//
---error 1305
+--error ER_SP_DOES_NOT_EXIST
CALL sp1( 10 );
--disable_warnings
@@ -2959,7 +2902,7 @@ DROP PROCEDURE IF EXISTS sp1;
# invalid usage of BEGIN + END
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( cnt int(20) )
BEGIN
SELECT count(*) into cnt from t2;
@@ -3003,7 +2946,19 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1()
+ accessible:BEGIN
+ SELECT @x;
+END//
+delimiter ;//
+
+--disable_warnings
+DROP PROCEDURE IF EXISTS sp1;
+--enable_warnings
+
+delimiter //;
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
add:BEGIN
SELECT @x;
@@ -3015,7 +2970,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
all:BEGIN
SELECT @x;
@@ -3027,7 +2982,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_SP_BADSTATEMENT
CREATE PROCEDURE sp1()
alter:BEGIN
SELECT @x;
@@ -3039,7 +2994,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
analyze:BEGIN
SELECT @x;
@@ -3051,7 +3006,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
and:BEGIN
SELECT @x;
@@ -3063,7 +3018,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
as:BEGIN
SELECT @x;
@@ -3075,7 +3030,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
asc:BEGIN
SELECT @x;
@@ -3087,7 +3042,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
asensitive:BEGIN
SELECT @x;
@@ -3099,7 +3054,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
before:BEGIN
SELECT @x;
@@ -3111,7 +3066,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
between:BEGIN
SELECT @x;
@@ -3123,7 +3078,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
bigint:BEGIN
SELECT @x;
@@ -3135,7 +3090,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
binary:BEGIN
SELECT @x;
@@ -3147,7 +3102,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
blob:BEGIN
SELECT @x;
@@ -3159,7 +3114,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
both:BEGIN
SELECT @x;
@@ -3171,7 +3126,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
by:BEGIN
SELECT @x;
@@ -3183,9 +3138,9 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
- CALL:BEGIN
+ call:BEGIN
SELECT @x;
END//
delimiter ;//
@@ -3195,7 +3150,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
cascade:BEGIN
SELECT @x;
@@ -3207,7 +3162,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
case:BEGIN
SELECT @x;
@@ -3219,7 +3174,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
change:BEGIN
SELECT @x;
@@ -3231,7 +3186,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
char:BEGIN
SELECT @x;
@@ -3243,7 +3198,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
character:BEGIN
SELECT @x;
@@ -3255,7 +3210,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
check:BEGIN
SELECT @x;
@@ -3267,7 +3222,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
collate:BEGIN
SELECT @x;
@@ -3279,7 +3234,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
column:BEGIN
SELECT @x;
@@ -3291,19 +3246,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
-#FIXME: is it OK that this now succeeds? --error 1064
-CREATE PROCEDURE sp1()
- columns:BEGIN
- SELECT @x;
-END//
-delimiter ;//
-
---disable_warnings
-DROP PROCEDURE IF EXISTS sp1;
---enable_warnings
-
-delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
condition:BEGIN
SELECT @x;
@@ -3315,19 +3258,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
-CREATE PROCEDURE sp1()
- connection:BEGIN
- SELECT @x;
-END//
-delimiter ;//
-
---disable_warnings
-DROP PROCEDURE IF EXISTS sp1;
---enable_warnings
-
-delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
constraint:BEGIN
SELECT @x;
@@ -3339,7 +3270,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
continue:BEGIN
SELECT @x;
@@ -3351,7 +3282,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
convert:BEGIN
SELECT @x;
@@ -3363,7 +3294,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
create:BEGIN
SELECT @x;
@@ -3375,7 +3306,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
cross:BEGIN
SELECT @x;
@@ -3387,7 +3318,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
current_date:BEGIN
SELECT @x;
@@ -3399,7 +3330,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
current_time:BEGIN
SELECT @x;
@@ -3411,7 +3342,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
current_timestamp:BEGIN
SELECT @x;
@@ -3423,7 +3354,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
current_user:BEGIN
SELECT @x;
@@ -3435,7 +3366,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
cursor:BEGIN
SELECT @x;
@@ -3447,7 +3378,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
database:BEGIN
SELECT @x;
@@ -3459,7 +3390,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
databases:BEGIN
SELECT @x;
@@ -3471,7 +3402,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
day_hour:BEGIN
SELECT @x;
@@ -3483,7 +3414,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
day_microsecond:BEGIN
SELECT @x;
@@ -3495,7 +3426,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
day_minute:BEGIN
SELECT @x;
@@ -3507,7 +3438,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
day_second:BEGIN
SELECT @x;
@@ -3519,7 +3450,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
dec:BEGIN
SELECT @x;
@@ -3531,7 +3462,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
decimal:BEGIN
SELECT @x;
@@ -3543,7 +3474,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
declare:BEGIN
SELECT @x;
@@ -3555,7 +3486,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
default:BEGIN
SELECT @x;
@@ -3567,7 +3498,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
delayed:BEGIN
SELECT @x;
@@ -3579,7 +3510,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
delete:BEGIN
SELECT @x;
@@ -3591,7 +3522,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
desc:BEGIN
SELECT @x;
@@ -3603,7 +3534,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
describe:BEGIN
SELECT @x;
@@ -3615,7 +3546,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
deterministic:BEGIN
SELECT @x;
@@ -3627,7 +3558,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
distinct:BEGIN
SELECT @x;
@@ -3639,7 +3570,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
distinctrow:BEGIN
SELECT @x;
@@ -3651,7 +3582,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
div:BEGIN
SELECT @x;
@@ -3663,7 +3594,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
double:BEGIN
SELECT @x;
@@ -3675,7 +3606,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
drop:BEGIN
SELECT @x;
@@ -3687,7 +3618,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
dual:BEGIN
SELECT @x;
@@ -3699,7 +3630,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
each:BEGIN
SELECT @x;
@@ -3711,7 +3642,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
else:BEGIN
SELECT @x;
@@ -3723,7 +3654,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
elseif:BEGIN
SELECT @x;
@@ -3735,7 +3666,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
enclosed:BEGIN
SELECT @x;
@@ -3747,7 +3678,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
escaped:BEGIN
SELECT @x;
@@ -3759,7 +3690,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
exists:BEGIN
SELECT @x;
@@ -3771,7 +3702,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
exit:BEGIN
SELECT @x;
@@ -3783,7 +3714,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
explain:BEGIN
SELECT @x;
@@ -3795,7 +3726,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
false:BEGIN
SELECT @x;
@@ -3807,7 +3738,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
fetch:BEGIN
SELECT @x;
@@ -3819,9 +3750,9 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
-#FIXME: is it OK that this now succeeds? --error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
- fields:BEGIN
+ float:BEGIN
SELECT @x;
END//
delimiter ;//
@@ -3831,9 +3762,9 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
- float:BEGIN
+ float4:BEGIN
SELECT @x;
END//
delimiter ;//
@@ -3843,9 +3774,9 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
- for:BEGIN
+ float8:BEGIN
SELECT @x;
END//
delimiter ;//
@@ -3855,9 +3786,9 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
- force:BEGIN
+ for:BEGIN
SELECT @x;
END//
delimiter ;//
@@ -3867,9 +3798,9 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
- foreign:BEGIN
+ force:BEGIN
SELECT @x;
END//
delimiter ;//
@@ -3879,9 +3810,9 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
-#FIXME: is it OK that this now succeeds? --error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
- found:BEGIN
+ foreign:BEGIN
SELECT @x;
END//
delimiter ;//
@@ -3891,7 +3822,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
from:BEGIN
SELECT @x;
@@ -3903,7 +3834,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
fulltext:BEGIN
SELECT @x;
@@ -3915,19 +3846,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
-#FIXME: is it OK that this now succeeds? --error 1064
-CREATE PROCEDURE sp1()
- goto:BEGIN
- SELECT @x;
-END//
-delimiter ;//
-
---disable_warnings
-DROP PROCEDURE IF EXISTS sp1;
---enable_warnings
-
-delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
grant:BEGIN
SELECT @x;
@@ -3939,7 +3858,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
group:BEGIN
SELECT @x;
@@ -3951,7 +3870,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
having:BEGIN
SELECT @x;
@@ -3963,7 +3882,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
high_priority:BEGIN
SELECT @x;
@@ -3975,7 +3894,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
hour_microsecond:BEGIN
SELECT @x;
@@ -3987,7 +3906,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
hour_minute:BEGIN
SELECT @x;
@@ -3999,7 +3918,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
hour_second:BEGIN
SELECT @x;
@@ -4011,7 +3930,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
if:BEGIN
SELECT @x;
@@ -4023,7 +3942,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
ignore:BEGIN
SELECT @x;
@@ -4035,7 +3954,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
in:BEGIN
SELECT @x;
@@ -4047,7 +3966,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
index:BEGIN
SELECT @x;
@@ -4059,7 +3978,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
infile:BEGIN
SELECT @x;
@@ -4071,7 +3990,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
inner:BEGIN
SELECT @x;
@@ -4083,7 +4002,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
inout:BEGIN
SELECT @x;
@@ -4095,7 +4014,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
insensitive:BEGIN
SELECT @x;
@@ -4107,7 +4026,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
insert:BEGIN
SELECT @x;
@@ -4119,7 +4038,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
int:BEGIN
SELECT @x;
@@ -4131,7 +4050,67 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1()
+ int1:BEGIN
+ SELECT @x;
+END//
+delimiter ;//
+
+--disable_warnings
+DROP PROCEDURE IF EXISTS sp1;
+--enable_warnings
+
+delimiter //;
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1()
+ int2:BEGIN
+ SELECT @x;
+END//
+delimiter ;//
+
+--disable_warnings
+DROP PROCEDURE IF EXISTS sp1;
+--enable_warnings
+
+delimiter //;
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1()
+ int3:BEGIN
+ SELECT @x;
+END//
+delimiter ;//
+
+--disable_warnings
+DROP PROCEDURE IF EXISTS sp1;
+--enable_warnings
+
+delimiter //;
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1()
+ int4:BEGIN
+ SELECT @x;
+END//
+delimiter ;//
+
+--disable_warnings
+DROP PROCEDURE IF EXISTS sp1;
+--enable_warnings
+
+delimiter //;
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1()
+ int8:BEGIN
+ SELECT @x;
+END//
+delimiter ;//
+
+--disable_warnings
+DROP PROCEDURE IF EXISTS sp1;
+--enable_warnings
+
+delimiter //;
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
integer:BEGIN
SELECT @x;
@@ -4143,7 +4122,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
interval:BEGIN
SELECT @x;
@@ -4155,7 +4134,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
into:BEGIN
SELECT @x;
@@ -4167,7 +4146,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
is:BEGIN
SELECT @x;
@@ -4179,7 +4158,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
iterate:BEGIN
SELECT @x;
@@ -4191,7 +4170,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
join:BEGIN
SELECT @x;
@@ -4203,7 +4182,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
key:BEGIN
SELECT @x;
@@ -4215,7 +4194,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
keys:BEGIN
SELECT @x;
@@ -4227,7 +4206,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
kill:BEGIN
SELECT @x;
@@ -4239,7 +4218,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
leading:BEGIN
SELECT @x;
@@ -4251,7 +4230,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
leave:BEGIN
SELECT @x;
@@ -4263,7 +4242,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
left:BEGIN
SELECT @x;
@@ -4275,7 +4254,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
like:BEGIN
SELECT @x;
@@ -4287,7 +4266,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
limit:BEGIN
SELECT @x;
@@ -4299,7 +4278,19 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1()
+ linear:BEGIN
+ SELECT @x;
+END//
+delimiter ;//
+
+--disable_warnings
+DROP PROCEDURE IF EXISTS sp1;
+--enable_warnings
+
+delimiter //;
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
lines:BEGIN
SELECT @x;
@@ -4311,7 +4302,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
load:BEGIN
SELECT @x;
@@ -4323,7 +4314,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
localtime:BEGIN
SELECT @x;
@@ -4335,7 +4326,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
localtimestamp:BEGIN
SELECT @x;
@@ -4347,7 +4338,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
lock:BEGIN
SELECT @x;
@@ -4359,7 +4350,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
long:BEGIN
SELECT @x;
@@ -4371,7 +4362,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
longblob:BEGIN
SELECT @x;
@@ -4383,7 +4374,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
longtext:BEGIN
SELECT @x;
@@ -4395,7 +4386,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
loop:BEGIN
SELECT @x;
@@ -4407,7 +4398,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
low_priority:BEGIN
SELECT @x;
@@ -4419,7 +4410,19 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1()
+ master_ssl_verify_server_cert:BEGIN
+ SELECT @x;
+END//
+delimiter ;//
+
+--disable_warnings
+DROP PROCEDURE IF EXISTS sp1;
+--enable_warnings
+
+delimiter //;
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
match:BEGIN
SELECT @x;
@@ -4431,7 +4434,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
mediumblob:BEGIN
SELECT @x;
@@ -4443,7 +4446,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
mediumint:BEGIN
SELECT @x;
@@ -4455,7 +4458,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
mediumtext:BEGIN
SELECT @x;
@@ -4467,7 +4470,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
middleint:BEGIN
SELECT @x;
@@ -4479,7 +4482,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
minute_microsecond:BEGIN
SELECT @x;
@@ -4491,7 +4494,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
minute_second:BEGIN
SELECT @x;
@@ -4503,7 +4506,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
mod:BEGIN
SELECT @x;
@@ -4515,7 +4518,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
modifies:BEGIN
SELECT @x;
@@ -4527,7 +4530,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
natural:BEGIN
SELECT @x;
@@ -4539,7 +4542,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
not:BEGIN
SELECT @x;
@@ -4551,7 +4554,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
no_write_to_binlog:BEGIN
SELECT @x;
@@ -4563,7 +4566,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
null:BEGIN
SELECT @x;
@@ -4576,7 +4579,7 @@ DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
numeric:BEGIN
SELECT @x;
@@ -4588,7 +4591,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
on:BEGIN
SELECT @x;
@@ -4600,7 +4603,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
optimize:BEGIN
SELECT @x;
@@ -4612,7 +4615,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
option:BEGIN
SELECT @x;
@@ -4624,7 +4627,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
optionally:BEGIN
SELECT @x;
@@ -4636,7 +4639,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
or:BEGIN
SELECT @x;
@@ -4648,7 +4651,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
order:BEGIN
SELECT @x;
@@ -4660,7 +4663,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
out:BEGIN
SELECT @x;
@@ -4672,7 +4675,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
outer:BEGIN
SELECT @x;
@@ -4684,7 +4687,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
outfile:BEGIN
SELECT @x;
@@ -4696,7 +4699,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
precision:BEGIN
SELECT @x;
@@ -4708,7 +4711,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
primary:BEGIN
SELECT @x;
@@ -4720,9 +4723,9 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
-#FIXME: is it OK that this now succeeds? --error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
- privileges:BEGIN
+ procedure:BEGIN
SELECT @x;
END//
delimiter ;//
@@ -4732,9 +4735,9 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
- procedure:BEGIN
+ purge:BEGIN
SELECT @x;
END//
delimiter ;//
@@ -4744,9 +4747,9 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
- purge:BEGIN
+ range:BEGIN
SELECT @x;
END//
delimiter ;//
@@ -4756,7 +4759,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
read:BEGIN
SELECT @x;
@@ -4768,7 +4771,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
reads:BEGIN
SELECT @x;
@@ -4780,7 +4783,31 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1()
+ read_only:BEGIN
+ SELECT @x;
+END//
+delimiter ;//
+
+--disable_warnings
+DROP PROCEDURE IF EXISTS sp1;
+--enable_warnings
+
+delimiter //;
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1()
+ read_write:BEGIN
+ SELECT @x;
+END//
+delimiter ;//
+
+--disable_warnings
+DROP PROCEDURE IF EXISTS sp1;
+--enable_warnings
+
+delimiter //;
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
real:BEGIN
SELECT @x;
@@ -4792,7 +4819,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
references:BEGIN
SELECT @x;
@@ -4804,7 +4831,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
regexp:BEGIN
SELECT @x;
@@ -4816,7 +4843,19 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1()
+ release:BEGIN
+ SELECT @x;
+END//
+delimiter ;//
+
+--disable_warnings
+DROP PROCEDURE IF EXISTS sp1;
+--enable_warnings
+
+delimiter //;
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
rename:BEGIN
SELECT @x;
@@ -4828,7 +4867,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
repeat:BEGIN
SELECT @x;
@@ -4840,7 +4879,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
replace:BEGIN
SELECT @x;
@@ -4852,7 +4891,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
require:BEGIN
SELECT @x;
@@ -4864,7 +4903,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
restrict:BEGIN
SELECT @x;
@@ -4876,7 +4915,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
return:BEGIN
SELECT @x;
@@ -4888,7 +4927,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
revoke:BEGIN
SELECT @x;
@@ -4900,7 +4939,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
right:BEGIN
SELECT @x;
@@ -4912,7 +4951,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
rlike:BEGIN
SELECT @x;
@@ -4924,7 +4963,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
schema:BEGIN
SELECT @x;
@@ -4936,7 +4975,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
schemas:BEGIN
SELECT @x;
@@ -4948,7 +4987,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
second_microsecond:BEGIN
SELECT @x;
@@ -4960,7 +4999,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
select:BEGIN
SELECT @x;
@@ -4972,7 +5011,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
sensitive:BEGIN
SELECT @x;
@@ -4984,7 +5023,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
separator:BEGIN
SELECT @x;
@@ -4996,7 +5035,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
set:BEGIN
SELECT @x;
@@ -5008,7 +5047,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
show:BEGIN
SELECT @x;
@@ -5020,7 +5059,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
smallint:BEGIN
SELECT @x;
@@ -5032,19 +5071,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
-CREATE PROCEDURE sp1()
- soname:BEGIN
- SELECT @x;
-END//
-delimiter ;//
-
---disable_warnings
-DROP PROCEDURE IF EXISTS sp1;
---enable_warnings
-
-delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
spatial:BEGIN
SELECT @x;
@@ -5056,7 +5083,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
specific:BEGIN
SELECT @x;
@@ -5068,7 +5095,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
sql:BEGIN
SELECT @x;
@@ -5080,7 +5107,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
sqlexception:BEGIN
SELECT @x;
@@ -5092,7 +5119,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
sqlstate:BEGIN
SELECT @x;
@@ -5103,9 +5130,8 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
-
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
sqlwarning:BEGIN
SELECT @x;
@@ -5116,9 +5142,8 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
-
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
sql_big_result:BEGIN
SELECT @x;
@@ -5130,7 +5155,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
sql_calc_found_rows:BEGIN
SELECT @x;
@@ -5142,7 +5167,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
sql_small_result:BEGIN
SELECT @x;
@@ -5154,7 +5179,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
ssl:BEGIN
SELECT @x;
@@ -5166,7 +5191,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
starting:BEGIN
SELECT @x;
@@ -5178,7 +5203,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
straight_join:BEGIN
SELECT @x;
@@ -5190,7 +5215,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
table:BEGIN
SELECT @x;
@@ -5202,19 +5227,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
-#FIXME: is it OK that this now succeeds? --error 1064
-CREATE PROCEDURE sp1()
- tables:BEGIN
- SELECT @x;
-END//
-delimiter ;//
-
---disable_warnings
-DROP PROCEDURE IF EXISTS sp1;
---enable_warnings
-
-delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
terminated:BEGIN
SELECT @x;
@@ -5226,7 +5239,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
then:BEGIN
SELECT @x;
@@ -5238,7 +5251,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
tinyblob:BEGIN
SELECT @x;
@@ -5250,7 +5263,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
tinyint:BEGIN
SELECT @x;
@@ -5262,7 +5275,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
tinytext:BEGIN
SELECT @x;
@@ -5274,7 +5287,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
to:BEGIN
SELECT @x;
@@ -5285,9 +5298,8 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
-
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
trailing:BEGIN
SELECT @x;
@@ -5299,7 +5311,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
trigger:BEGIN
SELECT @x;
@@ -5311,7 +5323,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
true:BEGIN
SELECT @x;
@@ -5323,7 +5335,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
undo:BEGIN
SELECT @x;
@@ -5335,7 +5347,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
union:BEGIN
SELECT @x;
@@ -5347,7 +5359,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
unique:BEGIN
SELECT @x;
@@ -5359,7 +5371,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1314
+--error ER_SP_BADSTATEMENT
CREATE PROCEDURE sp1()
unlock:BEGIN
SELECT @x;
@@ -5371,7 +5383,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
unsigned:BEGIN
SELECT @x;
@@ -5383,7 +5395,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
update:BEGIN
SELECT @x;
@@ -5395,7 +5407,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
usage:BEGIN
SELECT @x;
@@ -5407,7 +5419,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
use:BEGIN
SELECT @x;
@@ -5419,7 +5431,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
using:BEGIN
SELECT @x;
@@ -5431,7 +5443,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
utc_date:BEGIN
SELECT @x;
@@ -5443,7 +5455,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
utc_time:BEGIN
SELECT @x;
@@ -5455,7 +5467,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
utc_timestamp:BEGIN
SELECT @x;
@@ -5467,7 +5479,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
values:BEGIN
SELECT @x;
@@ -5479,7 +5491,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
varbinary:BEGIN
SELECT @x;
@@ -5491,7 +5503,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
varchar:BEGIN
SELECT @x;
@@ -5503,7 +5515,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
varcharacter:BEGIN
SELECT @x;
@@ -5515,7 +5527,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
varying:BEGIN
SELECT @x;
@@ -5527,7 +5539,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
when:BEGIN
SELECT @x;
@@ -5539,7 +5551,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
where:BEGIN
SELECT @x;
@@ -5551,7 +5563,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
while:BEGIN
SELECT @x;
@@ -5563,7 +5575,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
with:BEGIN
SELECT @x;
@@ -5575,7 +5587,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
write:BEGIN
SELECT @x;
@@ -5587,7 +5599,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
xor:BEGIN
SELECT @x;
@@ -5599,7 +5611,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
year_month:BEGIN
SELECT @x;
@@ -5611,7 +5623,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
zerofill:BEGIN
SELECT @x;
@@ -5663,7 +5675,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1310
+--error ER_SP_LABEL_MISMATCH
CREATE PROCEDURE sp1( )
begin1_label: BEGIN
declare x char;
@@ -5716,7 +5728,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare x char;
@@ -5736,7 +5748,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
begin_label BEGIN
declare x char;
@@ -5757,7 +5769,7 @@ DROP PROCEDURE IF EXISTS sp6;
--enable_warnings
delimiter //;
---error 1309
+--error ER_SP_LABEL_REDEFINE
CREATE PROCEDURE sp6( )
begin_samelabel: BEGIN
declare x char;
@@ -5788,10 +5800,8 @@ a stored procedure (with the declare statement) may only be properly defined;
DROP PROCEDURE IF EXISTS sp6;
--enable_warnings
--- echo FIXME: Following test contains a known problem that will be checked again
--- echo FIXME: after WL#2984 has been completed: DECIMAL(255,255) is not rejected
-
delimiter //;
+--error ER_TOO_BIG_SCALE
CREATE PROCEDURE sp6( )
BEGIN
declare x char default 'a';
@@ -5842,7 +5852,7 @@ DROP PROCEDURE IF EXISTS sp6;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp6( )
BEGIN
declare x default '0' char;
@@ -5855,7 +5865,7 @@ DROP PROCEDURE IF EXISTS sp6;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp6( )
BEGIN
declare x char, integer default '0';
@@ -5868,7 +5878,7 @@ DROP PROCEDURE IF EXISTS sp6;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp6( )
BEGIN
declare x1, x2 char, integer default '0', 1;
@@ -5881,7 +5891,7 @@ DROP PROCEDURE IF EXISTS sp6;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare char x;
@@ -5895,7 +5905,7 @@ DROP PROCEDURE IF EXISTS sp6;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare char x, y1 integer default 0;
@@ -5909,7 +5919,7 @@ DROP PROCEDURE IF EXISTS sp6;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp6( )
BEGIN
declare x default 'a' char;
@@ -5921,7 +5931,7 @@ DROP PROCEDURE IF EXISTS sp6;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp6( )
BEGIN
declare condition notable for sqlstate '42s22';
@@ -5933,7 +5943,7 @@ DROP PROCEDURE IF EXISTS sp6;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp6( )
BEGIN
declare condition for notable sqlstate '42s22';
@@ -5945,7 +5955,7 @@ DROP PROCEDURE IF EXISTS sp6;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp6( )
BEGIN
declare condition for sqlstate notable '42s22';
@@ -5957,7 +5967,7 @@ DROP PROCEDURE IF EXISTS sp6;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp6( )
BEGIN
declare condition for sqlstate '42s22' notable;
@@ -5969,7 +5979,7 @@ DROP PROCEDURE IF EXISTS sp6;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp6( )
BEGIN
declare cursor cur1 for SELECT f1 from db_storedproc.t2;
@@ -5981,7 +5991,7 @@ DROP PROCEDURE IF EXISTS sp6;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp6( )
BEGIN
declare cursor for cur1 SELECT f1 from db_storedproc.t2;
@@ -5993,7 +6003,7 @@ DROP PROCEDURE IF EXISTS sp6;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp6( )
BEGIN
declare cursor for SELECT cur1 f1 from db_storedproc.t2;
@@ -6005,7 +6015,7 @@ DROP PROCEDURE IF EXISTS sp6;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp6( )
BEGIN
declare handler continue for sqlstate '02000' set @x2 = 1;
@@ -6017,7 +6027,7 @@ DROP PROCEDURE IF EXISTS sp6;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp6( )
BEGIN
declare handler exit for sqlstate '02000' set @x2 = 1;
@@ -6029,7 +6039,7 @@ DROP PROCEDURE IF EXISTS sp6;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp6( )
BEGIN
declare handler undo for sqlstate '02000' set @x2 = 1;
@@ -6041,7 +6051,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare char x;
@@ -6054,7 +6064,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare char binary x;
@@ -6067,7 +6077,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare char ascii x;
@@ -6080,7 +6090,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare tinytext x;
@@ -6093,7 +6103,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare x;
@@ -6106,7 +6116,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare mediumtext x;
@@ -6119,7 +6129,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare longtext x;
@@ -6132,7 +6142,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare tinyblob x;
@@ -6145,7 +6155,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare blob x;
@@ -6158,7 +6168,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare mediumblob x;
@@ -6171,7 +6181,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare longblob x;
@@ -6184,7 +6194,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare binary x;
@@ -6197,7 +6207,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare tinyint x;
@@ -6210,7 +6220,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare tinyint unsigned x;
@@ -6223,7 +6233,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare tinyint zerofill x;
@@ -6236,7 +6246,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare tinyint unsigned zerofill x;
@@ -6249,7 +6259,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare smallint x;
@@ -6262,7 +6272,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare smallint unsigned x;
@@ -6275,7 +6285,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare smallint zerofill x;
@@ -6288,7 +6298,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare smallint unsigned zerofill x;
@@ -6301,7 +6311,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare mediumint x;
@@ -6314,7 +6324,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare mediumint unsigned x;
@@ -6327,7 +6337,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare mediumint zerofill x;
@@ -6340,7 +6350,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare mediumint unsigned zerofill x;
@@ -6353,7 +6363,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare int x;
@@ -6366,7 +6376,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare int unsigned x;
@@ -6379,7 +6389,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare int zerofill x;
@@ -6392,7 +6402,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare int unsigned zerofill x;
@@ -6405,7 +6415,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare bigint x;
@@ -6418,7 +6428,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare bigint unsigned x;
@@ -6432,7 +6442,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare bigint zerofill x;
@@ -6445,7 +6455,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare bigint unsigned zerofill x;
@@ -6458,7 +6468,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare decimal x;
@@ -6471,7 +6481,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare decimal unsigned x;
@@ -6484,7 +6494,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare decimal zerofill x;
@@ -6497,7 +6507,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare decimal unsigned zerofill not null x;
@@ -6510,7 +6520,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare decimal (0) not null x;
@@ -6523,7 +6533,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare decimal (64) not null x;
@@ -6536,7 +6546,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare decimal (0) unsigned not null x;
@@ -6549,7 +6559,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare decimal (64) unsigned not null x;
@@ -6562,7 +6572,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare decimal (0) zerofill not null x;
@@ -6575,7 +6585,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare decimal (64) zerofill not null x;
@@ -6588,7 +6598,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare decimal (0) unsigned zerofill not null x;
@@ -6601,7 +6611,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare decimal (64) unsigned zerofill not null x;
@@ -6614,7 +6624,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare decimal (00) not null x;
@@ -6627,7 +6637,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare decimal (63, 30) not null x;
@@ -6640,7 +6650,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare decimal (00) unsigned not null x;
@@ -6653,7 +6663,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare decimal (63, 30) unsigned not null x;
@@ -6666,7 +6676,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare decimal (00) zerofill not null x;
@@ -6679,7 +6689,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare decimal (63, 30) zerofill not null x;
@@ -6692,7 +6702,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare decimal (00) unsigned zerofill not null x;
@@ -6705,7 +6715,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare decimal (63, 30) unsigned zerofill not null x;
@@ -6718,7 +6728,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare numeric not null x;
@@ -6731,7 +6741,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare numeric unsigned not null x;
@@ -6744,7 +6754,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare numeric zerofill not null x;
@@ -6757,7 +6767,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare numeric unsigned zerofill not null x;
@@ -6770,7 +6780,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare numeric (0) not null x;
@@ -6783,7 +6793,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare numeric (64) not nul x;
@@ -6796,7 +6806,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare numeric (0) unsigned x;
@@ -6809,7 +6819,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare numeric (64) unsigned x;
@@ -6822,7 +6832,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare numeric (0) zerofill x;
@@ -6835,7 +6845,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare numeric (64) zerofill x;
@@ -6848,7 +6858,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare numeric (0) unsigned zerofill x;
@@ -6861,7 +6871,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare numeric (64) unsigned zerofill x;
@@ -6874,7 +6884,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare numeric (00) x;
@@ -6887,7 +6897,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare numeric (63, 30) x;
@@ -6901,7 +6911,7 @@ DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare numeric (00) unsigned x;
@@ -6914,7 +6924,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare numeric (63, 30) unsigned x;
@@ -6927,7 +6937,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare numeric (00) zerofill x;
@@ -6940,7 +6950,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare numeric (63, 30) zerofill x;
@@ -6953,7 +6963,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare numeric (00) unsigned zerofill x;
@@ -6966,7 +6976,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare numeric (63, 30) unsigned zerofill x;
@@ -6979,7 +6989,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare real x;
@@ -6992,7 +7002,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare real unsigned x;
@@ -7005,7 +7015,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare real zerofill x;
@@ -7018,7 +7028,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare real unsigned zerofill x;
@@ -7031,7 +7041,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare double x;
@@ -7044,7 +7054,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare double unsigned x;
@@ -7057,7 +7067,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare double zerofill x;
@@ -7070,7 +7080,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare double unsigned zerofill x;
@@ -7083,7 +7093,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare float not null x;
@@ -7096,7 +7106,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare float unsigned not null x;
@@ -7109,7 +7119,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare float zerofill not null x;
@@ -7122,7 +7132,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare float unsigned zerofill not null x;
@@ -7135,7 +7145,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare float(0) not null x;
@@ -7148,7 +7158,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare float(23) not null x;
@@ -7161,7 +7171,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare float(0) unsigned not null x;
@@ -7174,7 +7184,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare float(23) unsigned not null x;
@@ -7187,7 +7197,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare float(0) zerofill not null x;
@@ -7200,7 +7210,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare float(23) zerofill not null x;
@@ -7213,7 +7223,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare float(0) unsigned zerofill not null x;
@@ -7226,7 +7236,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare float(23) unsigned zerofill not null x;
@@ -7239,7 +7249,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare float(24) not null x;
@@ -7252,7 +7262,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare float(53) not null x;
@@ -7265,7 +7275,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare float(24) unsigned not null x;
@@ -7278,7 +7288,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare float(53) unsigned not null x;
@@ -7291,7 +7301,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare float(24) zerofill not null x;
@@ -7304,7 +7314,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare float(53) zerofill not null x;
@@ -7317,7 +7327,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare float(24) unsigned zerofill not null x;
@@ -7330,7 +7340,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare float(53) unsigned zerofill not null x;
@@ -7343,7 +7353,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare date not null x;
@@ -7356,7 +7366,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare time not null x;
@@ -7369,7 +7379,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare datetime not null x;
@@ -7382,7 +7392,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare timestamp not null x;
@@ -7395,7 +7405,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare year not null x;
@@ -7408,7 +7418,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare year(3) not null x;
@@ -7421,7 +7431,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare year(4) not null x;
@@ -7434,7 +7444,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare enum("1enum", "2enum") not null x;
@@ -7447,7 +7457,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare set("1set", "2set") not nul x;
@@ -7468,20 +7478,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1337
-CREATE PROCEDURE sp1()
-BEGIN
- declare continue handler for sqlstate '23000' set @x2 = 1;
- declare x char;
-END//
-delimiter ;//
-
---disable_warnings
-DROP PROCEDURE IF EXISTS sp1;
---enable_warnings
-
-delimiter //;
---error 1337
+--error ER_SP_VARCOND_AFTER_CURSHNDLR
CREATE PROCEDURE sp1()
BEGIN
declare continue handler for sqlstate '23000' set @x2 = 1;
@@ -7494,7 +7491,7 @@ DROP PROCEDURE IF EXISTS sp6;
--enable_warnings
delimiter //;
---error 1337
+--error ER_SP_VARCOND_AFTER_CURSHNDLR
CREATE PROCEDURE sp6( )
BEGIN
declare cursor1 cursor for SELECT f1 from tb1;
@@ -7507,7 +7504,7 @@ DROP PROCEDURE IF EXISTS sp6;
--enable_warnings
delimiter //;
---error 1337
+--error ER_SP_VARCOND_AFTER_CURSHNDLR
CREATE PROCEDURE sp6( )
BEGIN
declare cursor1 cursor for SELECT f1 from tb1;
@@ -7520,7 +7517,7 @@ DROP PROCEDURE IF EXISTS sp6;
--enable_warnings
delimiter //;
---error 1338
+--error ER_SP_CURSOR_AFTER_HANDLER
CREATE PROCEDURE sp6( )
BEGIN
declare sqlcondition condition for sqlstate '02000';
@@ -7536,27 +7533,21 @@ Ensure that the declare statement can declare multiple variables both separately
and all at once from a variable list. (multiple declaration);
--source include/show_msg80.inc
-#FIXME 4.2.15: switched off until bug is fixed:
-#FIXME 4.2.15: Bug #14376 MySQL crash on scoped variable (re)initialization
+--disable_warnings
+DROP PROCEDURE IF EXISTS sp1;
+--enable_warnings
+
delimiter //;
-if (0)
-{
- --disable_warnings
- DROP PROCEDURE IF EXISTS sp_14376//
- --enable_warnings
- #--error 4711
- CREATE PROCEDURE sp_14376()
+CREATE PROCEDURE sp1()
BEGIN
DECLARE x1 CHAR(100) DEFAULT 'outer';
BEGIN
DECLARE x1 CHAR(100) DEFAULT x1;
END;
END//
- CALL sp_14376()//
- DROP PROCEDURE sp_14376()//
-}
delimiter ;//
+CALL sp1();
--disable_warnings
DROP PROCEDURE IF EXISTS sp1;
@@ -8022,9 +8013,6 @@ BEGIN
END//
delimiter ;//
--- echo FIXME: Following test contains a known problem that will be checked again
--- echo FIXME: after WL#2984 has been completed: default (10,0) for DECIMAL not checked
-
CALL sp1();
--disable_warnings
@@ -8054,9 +8042,6 @@ BEGIN
END//
delimiter ;//
--- echo FIXME: Following test contains a known problem that will be checked again
--- echo FIXME: after WL#2984 has been completed: default (10,0) for DECIMAL not checked
-
CALL sp1();
--disable_warnings
@@ -8071,9 +8056,6 @@ BEGIN
END//
delimiter ;//
--- echo FIXME: Following test contains a known problem that will be checked again
--- echo FIXME: after WL#2984 has been completed: default (10,0) for DECIMAL not checked
-
CALL sp1();
--disable_warnings
@@ -8088,9 +8070,6 @@ BEGIN
END//
delimiter ;//
--- echo FIXME: Following test contains a known problem that will be checked again
--- echo FIXME: after WL#2984 has been completed: default (10,0) for DECIMAL not checked
-
CALL sp1();
--disable_warnings
@@ -8105,9 +8084,6 @@ BEGIN
END//
delimiter ;//
--- echo FIXME: Following test contains a known problem that will be checked again
--- echo FIXME: after WL#2984 has been completed: default (10,0) for DECIMAL not checked
-
CALL sp1();
--disable_warnings
@@ -8122,9 +8098,6 @@ BEGIN
END//
delimiter ;//
--- echo FIXME: Following test contains a known problem that will be checked again
--- echo FIXME: after WL#2984 has been completed: default (10,0) for DECIMAL not checked
-
CALL sp1();
--disable_warnings
@@ -8417,7 +8390,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare @x char;
@@ -8430,7 +8403,19 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1()
+BEGIN
+ declare accessible char;
+END//
+delimiter ;//
+
+--disable_warnings
+DROP PROCEDURE IF EXISTS sp1;
+--enable_warnings
+
+delimiter //;
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare add char;
@@ -8442,7 +8427,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare all char;
@@ -8454,7 +8439,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare alter char;
@@ -8466,7 +8451,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare analyze char;
@@ -8478,7 +8463,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare and char;
@@ -8490,7 +8475,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare as char;
@@ -8502,7 +8487,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare asc char;
@@ -8514,7 +8499,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare asensitive char;
@@ -8526,7 +8511,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare before char;
@@ -8538,7 +8523,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare between char;
@@ -8550,7 +8535,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare bigint char;
@@ -8562,7 +8547,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare binary char;
@@ -8574,7 +8559,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare blob char;
@@ -8586,7 +8571,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare both char;
@@ -8598,7 +8583,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare by char;
@@ -8610,10 +8595,10 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
- declare CALL char;
+ declare call char;
END//
delimiter ;//
@@ -8622,7 +8607,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare cascade char;
@@ -8634,7 +8619,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare case char;
@@ -8646,7 +8631,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare change char;
@@ -8658,7 +8643,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare char char;
@@ -8670,7 +8655,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare character char;
@@ -8682,7 +8667,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare check char;
@@ -8694,7 +8679,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare collate char;
@@ -8706,7 +8691,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare column char;
@@ -8717,21 +8702,8 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
-#FIXME: check why _was_ this switched off
-delimiter //;
-#FIXME check this is OK:--error 1064
-CREATE PROCEDURE sp1()
-BEGIN
- declare columns char;
-END//
-delimiter ;//
-
---disable_warnings
-DROP PROCEDURE IF EXISTS sp1;
---enable_warnings
-
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare condition char;
@@ -8743,19 +8715,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
-CREATE PROCEDURE sp1()
-BEGIN
- declare connection char;
-END//
-delimiter ;//
-
---disable_warnings
-DROP PROCEDURE IF EXISTS sp1;
---enable_warnings
-
-delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare constraint char;
@@ -8767,7 +8727,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare continue char;
@@ -8779,7 +8739,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare convert char;
@@ -8791,7 +8751,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare create char;
@@ -8803,7 +8763,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare cross char;
@@ -8815,7 +8775,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare current_date char;
@@ -8827,7 +8787,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare current_time char;
@@ -8839,7 +8799,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare current_timestamp char;
@@ -8851,7 +8811,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare current_user char;
@@ -8863,7 +8823,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare cursor char;
@@ -8875,7 +8835,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare database char;
@@ -8887,7 +8847,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare databases char;
@@ -8899,7 +8859,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare day_hour char;
@@ -8911,7 +8871,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare day_microsecond char;
@@ -8923,7 +8883,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare day_minute char;
@@ -8935,7 +8895,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare day_second char;
@@ -8947,7 +8907,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare dec char;
@@ -8959,7 +8919,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare decimal char;
@@ -8971,7 +8931,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare declare char;
@@ -8983,7 +8943,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare default char;
@@ -8995,7 +8955,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare delayed char;
@@ -9007,7 +8967,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare delete char;
@@ -9019,7 +8979,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare desc char;
@@ -9031,7 +8991,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare describe char;
@@ -9043,7 +9003,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare deterministic char;
@@ -9055,7 +9015,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare distinct char;
@@ -9067,7 +9027,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare distinctrow char;
@@ -9079,7 +9039,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare div char;
@@ -9091,7 +9051,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare double char;
@@ -9103,7 +9063,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare drop char;
@@ -9115,7 +9075,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare dual char;
@@ -9127,7 +9087,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare each char;
@@ -9139,7 +9099,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare else char;
@@ -9151,7 +9111,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare elseif char;
@@ -9163,7 +9123,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare enclosed char;
@@ -9175,7 +9135,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare escaped char;
@@ -9187,7 +9147,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare exists char;
@@ -9199,7 +9159,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare exit char;
@@ -9211,7 +9171,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare explain char;
@@ -9223,7 +9183,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare false char;
@@ -9235,7 +9195,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare fetch char;
@@ -9246,12 +9206,11 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
-#FIXME: check why _was_ this switched off
delimiter //;
-#FIXME check this is OK:--error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
- declare fields char;
+ declare float char;
END//
delimiter ;//
@@ -9260,10 +9219,10 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
- declare float char;
+ declare float4 char;
END//
delimiter ;//
@@ -9272,10 +9231,10 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
- declare for char;
+ declare float8 char;
END//
delimiter ;//
@@ -9284,10 +9243,10 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
- declare force char;
+ declare for char;
END//
delimiter ;//
@@ -9296,10 +9255,10 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
- declare foreign char;
+ declare force char;
END//
delimiter ;//
@@ -9307,12 +9266,11 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
-#FIXME: check why _was_ this switched off
delimiter //;
-#FIXME check this is OK:--error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
- declare found char;
+ declare foreign char;
END//
delimiter ;//
@@ -9321,7 +9279,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare from char;
@@ -9333,7 +9291,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare fulltext char;
@@ -9345,19 +9303,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
-#FIXME check this is OK:--error 1064
-CREATE PROCEDURE sp1()
-BEGIN
- declare goto char;
-END//
-delimiter ;//
-
---disable_warnings
-DROP PROCEDURE IF EXISTS sp1;
---enable_warnings
-
-delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare grant char;
@@ -9369,7 +9315,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare group char;
@@ -9381,7 +9327,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare having char;
@@ -9393,7 +9339,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare high_priority char;
@@ -9405,7 +9351,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare hour_microsecond char;
@@ -9417,7 +9363,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare hour_minute char;
@@ -9429,7 +9375,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare hour_second char;
@@ -9441,7 +9387,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare if char;
@@ -9453,7 +9399,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare ignore char;
@@ -9465,7 +9411,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare in char;
@@ -9477,7 +9423,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare index char;
@@ -9489,7 +9435,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare infile char;
@@ -9501,7 +9447,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare inner char;
@@ -9513,7 +9459,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare inout char;
@@ -9525,7 +9471,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare insensitive char;
@@ -9537,7 +9483,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare insert char;
@@ -9549,7 +9495,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare int char;
@@ -9561,7 +9507,67 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1()
+BEGIN
+ declare int1 char;
+END//
+delimiter ;//
+
+--disable_warnings
+DROP PROCEDURE IF EXISTS sp1;
+--enable_warnings
+
+delimiter //;
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1()
+BEGIN
+ declare int2 char;
+END//
+delimiter ;//
+
+--disable_warnings
+DROP PROCEDURE IF EXISTS sp1;
+--enable_warnings
+
+delimiter //;
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1()
+BEGIN
+ declare int3 char;
+END//
+delimiter ;//
+
+--disable_warnings
+DROP PROCEDURE IF EXISTS sp1;
+--enable_warnings
+
+delimiter //;
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1()
+BEGIN
+ declare int4 char;
+END//
+delimiter ;//
+
+--disable_warnings
+DROP PROCEDURE IF EXISTS sp1;
+--enable_warnings
+
+delimiter //;
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1()
+BEGIN
+ declare int8 char;
+END//
+delimiter ;//
+
+--disable_warnings
+DROP PROCEDURE IF EXISTS sp1;
+--enable_warnings
+
+delimiter //;
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare integer char;
@@ -9573,7 +9579,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare interval char;
@@ -9585,7 +9591,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare into char;
@@ -9597,7 +9603,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare is char;
@@ -9609,7 +9615,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare iterate char;
@@ -9621,7 +9627,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare join char;
@@ -9633,7 +9639,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare key char;
@@ -9645,7 +9651,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare keys char;
@@ -9657,7 +9663,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare kill char;
@@ -9669,7 +9675,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare leading char;
@@ -9681,7 +9687,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare leave char;
@@ -9693,7 +9699,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare left char;
@@ -9705,7 +9711,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare like char;
@@ -9717,7 +9723,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare limit char;
@@ -9729,7 +9735,19 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1()
+BEGIN
+ declare linear char;
+END//
+delimiter ;//
+
+--disable_warnings
+DROP PROCEDURE IF EXISTS sp1;
+--enable_warnings
+
+delimiter //;
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare lines char;
@@ -9741,7 +9759,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare load char;
@@ -9753,7 +9771,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare localtime char;
@@ -9765,7 +9783,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare localtimestamp char;
@@ -9777,7 +9795,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare lock char;
@@ -9789,7 +9807,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare long char;
@@ -9801,7 +9819,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare longblob char;
@@ -9813,7 +9831,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare longtext char;
@@ -9825,7 +9843,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare loop char;
@@ -9837,7 +9855,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare low_priority char;
@@ -9849,7 +9867,19 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1()
+BEGIN
+ declare master_ssl_verify_server_cert char;
+END//
+delimiter ;//
+
+--disable_warnings
+DROP PROCEDURE IF EXISTS sp1;
+--enable_warnings
+
+delimiter //;
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare match char;
@@ -9861,7 +9891,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare mediumblob char;
@@ -9873,7 +9903,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare mediumint char;
@@ -9885,7 +9915,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare mediumtext char;
@@ -9897,7 +9927,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare middleint char;
@@ -9909,7 +9939,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare minute_microsecond char;
@@ -9921,7 +9951,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare minute_second char;
@@ -9933,7 +9963,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare mod char;
@@ -9945,7 +9975,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare modifies char;
@@ -9957,7 +9987,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare natural char;
@@ -9969,7 +9999,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare not char;
@@ -9981,7 +10011,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare no_write_to_binlog char;
@@ -9993,7 +10023,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare null char;
@@ -10005,7 +10035,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare numeric char;
@@ -10017,7 +10047,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare on char;
@@ -10029,7 +10059,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare optimize char;
@@ -10041,7 +10071,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare option char;
@@ -10053,7 +10083,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare optionally char;
@@ -10065,7 +10095,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare or char;
@@ -10077,7 +10107,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare order char;
@@ -10089,7 +10119,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare out char;
@@ -10101,7 +10131,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare outer char;
@@ -10113,7 +10143,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare outfile char;
@@ -10125,7 +10155,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
-#FIXME check this is OK:--error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare precision char;
@@ -10137,7 +10167,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare primary char;
@@ -10149,10 +10179,10 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
-#FIXME check this is OK:--error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
- declare privileges char;
+ declare procedure char;
END//
delimiter ;//
@@ -10161,10 +10191,10 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
- declare procedure char;
+ declare purge char;
END//
delimiter ;//
@@ -10173,10 +10203,10 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
- declare purge char;
+ declare range char;
END//
delimiter ;//
@@ -10185,7 +10215,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare read char;
@@ -10197,7 +10227,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare reads char;
@@ -10209,7 +10239,32 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+# FIXME 31947
+#--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1()
+BEGIN
+ declare read_only char;
+END//
+delimiter ;//
+
+--disable_warnings
+DROP PROCEDURE IF EXISTS sp1;
+--enable_warnings
+
+delimiter //;
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1()
+BEGIN
+ declare read_write char;
+END//
+delimiter ;//
+
+--disable_warnings
+DROP PROCEDURE IF EXISTS sp1;
+--enable_warnings
+
+delimiter //;
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare real char;
@@ -10221,7 +10276,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare references char;
@@ -10233,7 +10288,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare regexp char;
@@ -10245,7 +10300,19 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1()
+BEGIN
+ declare release char;
+END//
+delimiter ;//
+
+--disable_warnings
+DROP PROCEDURE IF EXISTS sp1;
+--enable_warnings
+
+delimiter //;
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare rename char;
@@ -10257,7 +10324,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare repeat char;
@@ -10269,7 +10336,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare replace char;
@@ -10278,7 +10345,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare require char;
@@ -10287,7 +10354,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare restrict char;
@@ -10297,7 +10364,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare return char;
@@ -10307,7 +10374,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare revoke char;
@@ -10317,7 +10384,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare right char;
@@ -10327,7 +10394,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare rlike char;
@@ -10337,7 +10404,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare schema char;
@@ -10347,7 +10414,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare schemas char;
@@ -10357,7 +10424,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare second_microsecond char;
@@ -10367,7 +10434,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare SELECT char;
@@ -10377,7 +10444,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare sensitive char;
@@ -10387,7 +10454,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare separator char;
@@ -10397,7 +10464,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare set char;
@@ -10407,7 +10474,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare show char;
@@ -10417,7 +10484,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare smallint char;
@@ -10427,17 +10494,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
-#FIXME check this is OK:--error 1064
-CREATE PROCEDURE sp1()
-BEGIN
- declare soname char;
-END//
-delimiter ;//
-
-DROP PROCEDURE IF EXISTS sp1;
-
-delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare spatial char;
@@ -10447,7 +10504,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare specific char;
@@ -10457,7 +10514,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare sql char;
@@ -10467,7 +10524,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare sqlexception char;
@@ -10477,7 +10534,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare sqlstate char;
@@ -10487,7 +10544,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare sqlwarning char;
@@ -10497,7 +10554,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare sql_big_result char;
@@ -10507,7 +10564,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare sql_calc_found_rows char;
@@ -10517,7 +10574,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare sql_small_result char;
@@ -10527,7 +10584,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare ssl char;
@@ -10537,7 +10594,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare starting char;
@@ -10547,7 +10604,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare straight_join char;
@@ -10557,7 +10614,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare table char;
@@ -10566,19 +10623,8 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
-#FIXME: check why _was_ this switched off
-delimiter //;
-#FIXME check this is OK:--error 1064
-CREATE PROCEDURE sp1()
-BEGIN
- declare tables char;
-END//
-delimiter ;//
-
-DROP PROCEDURE IF EXISTS sp1;
-
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare terminated char;
@@ -10588,7 +10634,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare then char;
@@ -10598,7 +10644,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare tinyblob char;
@@ -10608,7 +10654,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare tinyint char;
@@ -10618,7 +10664,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare tinytext char;
@@ -10628,7 +10674,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare to char;
@@ -10638,7 +10684,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare trailing char;
@@ -10647,7 +10693,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare trigger char;
@@ -10656,7 +10702,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare true char;
@@ -10666,7 +10712,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare undo char;
@@ -10676,7 +10722,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare union char;
@@ -10686,7 +10732,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare unique char;
@@ -10696,7 +10742,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare unlock char;
@@ -10706,7 +10752,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare unsigned char;
@@ -10716,7 +10762,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare update char;
@@ -10726,7 +10772,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare usage char;
@@ -10736,17 +10782,17 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
- declare USE char;
+ declare use char;
END//
delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare using char;
@@ -10756,7 +10802,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare utc_date char;
@@ -10766,7 +10812,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare utc_time char;
@@ -10776,7 +10822,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare utc_timestamp char;
@@ -10786,7 +10832,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare values char;
@@ -10796,7 +10842,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare varbinary char;
@@ -10806,7 +10852,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare varchar char;
@@ -10816,7 +10862,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare varcharacter char;
@@ -10826,7 +10872,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare varying char;
@@ -10836,7 +10882,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare when char;
@@ -10846,7 +10892,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare where char;
@@ -10856,7 +10902,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare while char;
@@ -10866,7 +10912,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare with char;
@@ -10876,7 +10922,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare write char;
@@ -10886,7 +10932,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare xor char;
@@ -10896,7 +10942,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare year_month char;
@@ -10906,7 +10952,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare zerofill char;
@@ -11053,7 +11099,7 @@ DROP PROCEDURE sp1;
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare @x char;
@@ -11063,7 +11109,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare x char1;
@@ -11072,7 +11118,18 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1( )
+BEGIN
+ declare accessible condition for sqlstate '02000';
+ declare exit handler for add set @var2 = 1;
+END//
+delimiter ;//
+
+DROP PROCEDURE IF EXISTS sp1;
+
+delimiter //;
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare add condition for sqlstate '02000';
@@ -11083,7 +11140,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare all condition for sqlstate '02000';
@@ -11094,7 +11151,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare alter condition for sqlstate '02000';
@@ -11105,7 +11162,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare analyze condition for sqlstate '02000';
@@ -11116,7 +11173,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare and condition for sqlstate '02000';
@@ -11127,7 +11184,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare as condition for sqlstate '02000';
@@ -11138,7 +11195,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare asc condition for sqlstate '02000';
@@ -11149,7 +11206,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare asensitive condition for sqlstate '02000';
@@ -11160,7 +11217,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare before condition for sqlstate '02000';
@@ -11171,7 +11228,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare between condition for sqlstate '02000';
@@ -11182,7 +11239,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare bigint condition for sqlstate '02000';
@@ -11193,7 +11250,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare binary condition for sqlstate '02000';
@@ -11204,7 +11261,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare blob condition for sqlstate '02000';
@@ -11215,7 +11272,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare both condition for sqlstate '02000';
@@ -11226,7 +11283,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare by condition for sqlstate '02000';
@@ -11237,10 +11294,10 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
- declare CALL condition for sqlstate '02000';
+ declare call condition for sqlstate '02000';
declare exit handler for CALL set @var2 = 1;
END//
delimiter ;//
@@ -11248,7 +11305,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare cascade condition for sqlstate '02000';
@@ -11259,7 +11316,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare case condition for sqlstate '02000';
@@ -11270,7 +11327,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare change condition for sqlstate '02000';
@@ -11281,7 +11338,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare char condition for sqlstate '02000';
@@ -11292,7 +11349,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare character condition for sqlstate '02000';
@@ -11303,7 +11360,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare check condition for sqlstate '02000';
@@ -11314,7 +11371,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+#--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare collate condition for sqlstate '02000';
@@ -11325,7 +11382,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare column condition for sqlstate '02000';
@@ -11334,19 +11391,8 @@ END//
delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
-#FIXME: check why this is switched off
-#--error 1064
-#delimiter //;
-#CREATE PROCEDURE sp1( )
-# BEGIN
-# declare columns condition for sqlstate '02000';
-# declare exit handler for columns set @var2 = 1;
-#END//
-#delimiter ;//
-#DROP PROCEDURE IF EXISTS sp1;
-
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare condition condition for sqlstate '02000';
@@ -11356,7 +11402,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+#--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare connection condition for sqlstate '02000';
@@ -11366,7 +11412,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare constraint condition for sqlstate '02000';
@@ -11377,7 +11423,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare continue condition for sqlstate '02000';
@@ -11388,7 +11434,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare convert condition for sqlstate '02000';
@@ -11399,7 +11445,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare create condition for sqlstate '02000';
@@ -11410,7 +11456,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare cross condition for sqlstate '02000';
@@ -11421,7 +11467,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare current_date condition for sqlstate '02000';
@@ -11432,7 +11478,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare current_time condition for sqlstate '02000';
@@ -11443,7 +11489,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare current_timestamp condition for sqlstate '02000';
@@ -11454,7 +11500,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare current_user condition for sqlstate '02000';
@@ -11465,7 +11511,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare cursor condition for sqlstate '02000';
@@ -11476,7 +11522,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare database condition for sqlstate '02000';
@@ -11487,7 +11533,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare databases condition for sqlstate '02000';
@@ -11498,7 +11544,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare day_hour condition for sqlstate '02000';
@@ -11509,7 +11555,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare day_microsecond condition for sqlstate '02000';
@@ -11520,7 +11566,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare day_minute condition for sqlstate '02000';
@@ -11531,7 +11577,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare day_second condition for sqlstate '02000';
@@ -11542,7 +11588,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare dec condition for sqlstate '02000';
@@ -11553,7 +11599,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare decimal condition for sqlstate '02000';
@@ -11564,7 +11610,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare declare condition for sqlstate '02000';
@@ -11575,7 +11621,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare default condition for sqlstate '02000';
@@ -11586,7 +11632,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare delayed condition for sqlstate '02000';
@@ -11597,7 +11643,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare delete condition for sqlstate '02000';
@@ -11608,7 +11654,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare desc condition for sqlstate '02000';
@@ -11619,7 +11665,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare describe condition for sqlstate '02000';
@@ -11630,7 +11676,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare deterministic condition for sqlstate '02000';
@@ -11641,7 +11687,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare distinct condition for sqlstate '02000';
@@ -11652,7 +11698,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare distinctrow condition for sqlstate '02000';
@@ -11663,7 +11709,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare div condition for sqlstate '02000';
@@ -11674,7 +11720,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare double condition for sqlstate '02000';
@@ -11685,7 +11731,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare drop condition for sqlstate '02000';
@@ -11696,7 +11742,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare dual condition for sqlstate '02000';
@@ -11707,7 +11753,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare each condition for sqlstate '02000';
@@ -11718,7 +11764,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare else condition for sqlstate '02000';
@@ -11729,7 +11775,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare elseif condition for sqlstate '02000';
@@ -11740,7 +11786,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare enclosed condition for sqlstate '02000';
@@ -11751,7 +11797,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare escaped condition for sqlstate '02000';
@@ -11762,7 +11808,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare exists condition for sqlstate '02000';
@@ -11773,7 +11819,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare exit condition for sqlstate '02000';
@@ -11784,7 +11830,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare explain condition for sqlstate '02000';
@@ -11795,7 +11841,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare false condition for sqlstate '02000';
@@ -11806,7 +11852,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare fetch condition for sqlstate '02000';
@@ -11817,17 +11863,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
-#FIXME check this is OK:--error 1064
-CREATE PROCEDURE sp1( )
- BEGIN
- declare fields condition for sqlstate '02000';
- declare exit handler for fields set @var2 = 1;
-END//
-delimiter ;//
-DROP PROCEDURE IF EXISTS sp1;
-
-delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare float condition for sqlstate '02000';
@@ -11838,85 +11874,84 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
- declare for condition for sqlstate '02000';
- declare exit handler for for set @var2 = 1;
+ declare float4 condition for sqlstate '02000';
+ declare exit handler for add set @var2 = 1;
END//
delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
- declare force condition for sqlstate '02000';
- declare exit handler for force set @var2 = 1;
+ declare float8 condition for sqlstate '02000';
+ declare exit handler for add set @var2 = 1;
END//
delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
- declare foreign condition for sqlstate '02000';
- declare exit handler for foreign set @var2 = 1;
+ declare for condition for sqlstate '02000';
+ declare exit handler for for set @var2 = 1;
END//
delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
-#FIXME: check why _was_ this switched off
-#FIXME check this is OK:--error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
- declare found condition for sqlstate '02000';
- declare exit handler for found set @var2 = 1;
+ declare force condition for sqlstate '02000';
+ declare exit handler for force set @var2 = 1;
END//
delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
- declare from condition for sqlstate '02000';
- declare exit handler for from set @var2 = 1;
+ declare foreign condition for sqlstate '02000';
+ declare exit handler for foreign set @var2 = 1;
END//
delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
- declare fulltext condition for sqlstate '02000';
- declare exit handler for fulltext set @var2 = 1;
+ declare from condition for sqlstate '02000';
+ declare exit handler for from set @var2 = 1;
END//
delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
-#FIXME check this is OK:--error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
- declare goto condition for sqlstate '02000';
- declare exit handler for goto set @var2 = 1;
+ declare fulltext condition for sqlstate '02000';
+ declare exit handler for fulltext set @var2 = 1;
END//
delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare grant condition for sqlstate '02000';
@@ -11927,7 +11962,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare group condition for sqlstate '02000';
@@ -11938,7 +11973,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare having condition for sqlstate '02000';
@@ -11949,7 +11984,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare high_priority condition for sqlstate '02000';
@@ -11960,7 +11995,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare hour_microsecond condition for sqlstate '02000';
@@ -11971,7 +12006,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare hour_minute condition for sqlstate '02000';
@@ -11982,7 +12017,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare hour_second condition for sqlstate '02000';
@@ -11993,7 +12028,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare if condition for sqlstate '02000';
@@ -12004,7 +12039,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare ignore condition for sqlstate '02000';
@@ -12015,7 +12050,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare in condition for sqlstate '02000';
@@ -12026,7 +12061,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare index condition for sqlstate '02000';
@@ -12037,7 +12072,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare infile condition for sqlstate '02000';
@@ -12048,7 +12083,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare inner condition for sqlstate '02000';
@@ -12059,7 +12094,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare inout condition for sqlstate '02000';
@@ -12070,7 +12105,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare insensitive condition for sqlstate '02000';
@@ -12081,7 +12116,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare insert condition for sqlstate '02000';
@@ -12092,7 +12127,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare int condition for sqlstate '02000';
@@ -12103,7 +12138,62 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1( )
+BEGIN
+ declare int1 condition for sqlstate '02000';
+ declare exit handler for int set @var2 = 1;
+END//
+delimiter ;//
+
+DROP PROCEDURE IF EXISTS sp1;
+
+delimiter //;
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1( )
+BEGIN
+ declare int2 condition for sqlstate '02000';
+ declare exit handler for int set @var2 = 1;
+END//
+delimiter ;//
+
+DROP PROCEDURE IF EXISTS sp1;
+
+delimiter //;
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1( )
+BEGIN
+ declare int3 condition for sqlstate '02000';
+ declare exit handler for int set @var2 = 1;
+END//
+delimiter ;//
+
+DROP PROCEDURE IF EXISTS sp1;
+
+delimiter //;
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1( )
+BEGIN
+ declare int4 condition for sqlstate '02000';
+ declare exit handler for int set @var2 = 1;
+END//
+delimiter ;//
+
+DROP PROCEDURE IF EXISTS sp1;
+
+delimiter //;
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1( )
+BEGIN
+ declare int8 condition for sqlstate '02000';
+ declare exit handler for int set @var2 = 1;
+END//
+delimiter ;//
+
+DROP PROCEDURE IF EXISTS sp1;
+
+delimiter //;
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare integer condition for sqlstate '02000';
@@ -12114,7 +12204,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare interval condition for sqlstate '02000';
@@ -12125,7 +12215,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare into condition for sqlstate '02000';
@@ -12136,7 +12226,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare is condition for sqlstate '02000';
@@ -12147,7 +12237,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare iterate condition for sqlstate '02000';
@@ -12158,7 +12248,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare join condition for sqlstate '02000';
@@ -12169,7 +12259,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare key condition for sqlstate '02000';
@@ -12180,7 +12270,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare keys condition for sqlstate '02000';
@@ -12191,7 +12281,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare kill condition for sqlstate '02000';
@@ -12202,7 +12292,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare leading condition for sqlstate '02000';
@@ -12213,7 +12303,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare leave condition for sqlstate '02000';
@@ -12224,7 +12314,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare left condition for sqlstate '02000';
@@ -12235,7 +12325,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare like condition for sqlstate '02000';
@@ -12246,7 +12336,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare limit condition for sqlstate '02000';
@@ -12257,7 +12347,18 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1( )
+BEGIN
+ declare linear condition for sqlstate '02000';
+ declare exit handler for int set @var2 = 1;
+END//
+delimiter ;//
+
+DROP PROCEDURE IF EXISTS sp1;
+
+delimiter //;
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare lines condition for sqlstate '02000';
@@ -12268,7 +12369,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare load condition for sqlstate '02000';
@@ -12279,7 +12380,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare localtime condition for sqlstate '02000';
@@ -12290,7 +12391,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare localtimestamp condition for sqlstate '02000';
@@ -12301,7 +12402,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare lock condition for sqlstate '02000';
@@ -12312,7 +12413,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare long condition for sqlstate '02000';
@@ -12323,7 +12424,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare longblob condition for sqlstate '02000';
@@ -12334,7 +12435,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare longtext condition for sqlstate '02000';
@@ -12345,7 +12446,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare loop condition for sqlstate '02000';
@@ -12356,7 +12457,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare low_priority condition for sqlstate '02000';
@@ -12367,7 +12468,18 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1( )
+BEGIN
+ declare master_ssl_verify_server_cert condition for sqlstate '02000';
+ declare exit handler for int set @var2 = 1;
+END//
+delimiter ;//
+
+DROP PROCEDURE IF EXISTS sp1;
+
+delimiter //;
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare match condition for sqlstate '02000';
@@ -12378,7 +12490,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare mediumblob condition for sqlstate '02000';
@@ -12389,7 +12501,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare mediumint condition for sqlstate '02000';
@@ -12400,7 +12512,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare mediumtext condition for sqlstate '02000';
@@ -12411,7 +12523,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare middleint condition for sqlstate '02000';
@@ -12422,7 +12534,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare minute_microsecond condition for sqlstate '02000';
@@ -12433,7 +12545,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare minute_second condition for sqlstate '02000';
@@ -12444,7 +12556,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare mod condition for sqlstate '02000';
@@ -12455,7 +12567,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare modifies condition for sqlstate '02000';
@@ -12466,7 +12578,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare natural condition for sqlstate '02000';
@@ -12477,7 +12589,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare not condition for sqlstate '02000';
@@ -12488,7 +12600,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare no_write_to_binlog condition for sqlstate '02000';
@@ -12499,7 +12611,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare null condition for sqlstate '02000';
@@ -12510,7 +12622,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare numeric condition for sqlstate '02000';
@@ -12521,7 +12633,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare on condition for sqlstate '02000';
@@ -12532,7 +12644,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare optimize condition for sqlstate '02000';
@@ -12543,7 +12655,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare option condition for sqlstate '02000';
@@ -12554,7 +12666,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare optionally condition for sqlstate '02000';
@@ -12565,7 +12677,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare or condition for sqlstate '02000';
@@ -12576,7 +12688,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare order condition for sqlstate '02000';
@@ -12587,7 +12699,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare out condition for sqlstate '02000';
@@ -12598,7 +12710,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare outer condition for sqlstate '02000';
@@ -12609,7 +12721,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare outfile condition for sqlstate '02000';
@@ -12620,7 +12732,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare precision condition for sqlstate '02000';
@@ -12631,7 +12743,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare primary condition for sqlstate '02000';
@@ -12642,41 +12754,40 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
-#FIXME: why was this switched off ?
-#FIXME check this is OK:--error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
- declare privileges condition for sqlstate '02000';
- declare exit handler for privileges set @var2 = 1;
+ declare procedure condition for sqlstate '02000';
+ declare exit handler for procedure set @var2 = 1;
END//
delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
- declare procedure condition for sqlstate '02000';
- declare exit handler for procedure set @var2 = 1;
+ declare purge condition for sqlstate '02000';
+ declare exit handler for purge set @var2 = 1;
END//
delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
- declare purge condition for sqlstate '02000';
- declare exit handler for purge set @var2 = 1;
+ declare range condition for sqlstate '02000';
+ declare exit handler for int set @var2 = 1;
END//
delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare read condition for sqlstate '02000';
@@ -12687,7 +12798,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare reads condition for sqlstate '02000';
@@ -12698,7 +12809,29 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1( )
+BEGIN
+ declare read_only condition for sqlstate '02000';
+ declare exit handler for int set @var2 = 1;
+END//
+delimiter ;//
+
+DROP PROCEDURE IF EXISTS sp1;
+
+delimiter //;
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1( )
+BEGIN
+ declare read_write condition for sqlstate '02000';
+ declare exit handler for int set @var2 = 1;
+END//
+delimiter ;//
+
+DROP PROCEDURE IF EXISTS sp1;
+
+delimiter //;
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare real condition for sqlstate '02000';
@@ -12709,7 +12842,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare references condition for sqlstate '02000';
@@ -12720,7 +12853,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare regexp condition for sqlstate '02000';
@@ -12731,7 +12864,18 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1( )
+BEGIN
+ declare release condition for sqlstate '02000';
+ declare exit handler for int set @var2 = 1;
+END//
+delimiter ;//
+
+DROP PROCEDURE IF EXISTS sp1;
+
+delimiter //;
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare rename condition for sqlstate '02000';
@@ -12742,7 +12886,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare repeat condition for sqlstate '02000';
@@ -12753,7 +12897,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare replace condition for sqlstate '02000';
@@ -12764,7 +12908,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare require condition for sqlstate '02000';
@@ -12775,7 +12919,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare restrict condition for sqlstate '02000';
@@ -12786,7 +12930,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare return condition for sqlstate '02000';
@@ -12797,7 +12941,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare revoke condition for sqlstate '02000';
@@ -12808,7 +12952,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare right condition for sqlstate '02000';
@@ -12819,7 +12963,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare rlike condition for sqlstate '02000';
@@ -12830,7 +12974,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare schema condition for sqlstate '02000';
@@ -12841,7 +12985,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare schemas condition for sqlstate '02000';
@@ -12852,7 +12996,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare second_microsecond condition for sqlstate '02000';
@@ -12863,10 +13007,10 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
- declare SELECT condition for sqlstate '02000';
+ declare select condition for sqlstate '02000';
declare exit handler for SELECT set @var2 = 1;
END//
delimiter ;//
@@ -12874,7 +13018,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare sensitive condition for sqlstate '02000';
@@ -12885,7 +13029,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare separator condition for sqlstate '02000';
@@ -12896,7 +13040,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare set condition for sqlstate '02000';
@@ -12907,7 +13051,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare show condition for sqlstate '02000';
@@ -12918,7 +13062,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare smallint condition for sqlstate '02000';
@@ -12929,18 +13073,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
-CREATE PROCEDURE sp1( )
-BEGIN
- declare soname condition for sqlstate '02000';
- declare exit handler for soname set @var2 = 1;
-END//
-delimiter ;//
-
-DROP PROCEDURE IF EXISTS sp1;
-
-delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare spatial condition for sqlstate '02000';
@@ -12951,7 +13084,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare specific condition for sqlstate '02000';
@@ -12962,7 +13095,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare sql condition for sqlstate '02000';
@@ -12973,7 +13106,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare sqlexception condition for sqlstate '02000';
@@ -12984,7 +13117,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare sqlstate condition for sqlstate '02000';
@@ -12995,7 +13128,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare sqlwarning condition for sqlstate '02000';
@@ -13006,7 +13139,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare sql_big_result condition for sqlstate '02000';
@@ -13017,7 +13150,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare sql_calc_found_rows condition for sqlstate '02000';
@@ -13028,7 +13161,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare sql_small_result condition for sqlstate '02000';
@@ -13039,7 +13172,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare ssl condition for sqlstate '02000';
@@ -13050,7 +13183,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare starting condition for sqlstate '02000';
@@ -13061,7 +13194,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare straight_join condition for sqlstate '02000';
@@ -13072,7 +13205,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare table condition for sqlstate '02000';
@@ -13083,19 +13216,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
-#FIXME: why was this switched off ?
-#FIXME check this is OK:--error 1064
-CREATE PROCEDURE sp1( )
-BEGIN
- declare tables condition for sqlstate '02000';
- declare exit handler for tables set @var2 = 1;
-END//
-delimiter ;//
-
-DROP PROCEDURE IF EXISTS sp1;
-
-delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare terminated condition for sqlstate '02000';
@@ -13106,7 +13227,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare then condition for sqlstate '02000';
@@ -13117,7 +13238,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare tinyblob condition for sqlstate '02000';
@@ -13128,7 +13249,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare tinyint condition for sqlstate '02000';
@@ -13139,7 +13260,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare tinytext condition for sqlstate '02000';
@@ -13150,7 +13271,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare to condition for sqlstate '02000';
@@ -13161,7 +13282,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare trailing condition for sqlstate '02000';
@@ -13172,7 +13293,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare trigger condition for sqlstate '02000';
@@ -13183,7 +13304,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare true condition for sqlstate '02000';
@@ -13194,7 +13315,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare undo condition for sqlstate '02000';
@@ -13205,7 +13326,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare union condition for sqlstate '02000';
@@ -13216,7 +13337,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare unique condition for sqlstate '02000';
@@ -13227,7 +13348,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare unlock condition for sqlstate '02000';
@@ -13238,7 +13359,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare unsigned condition for sqlstate '02000';
@@ -13249,7 +13370,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare update condition for sqlstate '02000';
@@ -13260,7 +13381,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare usage condition for sqlstate '02000';
@@ -13271,10 +13392,10 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
- declare USE condition for sqlstate '02000';
+ declare use condition for sqlstate '02000';
declare exit handler for USE set @var2 = 1;
END//
delimiter ;//
@@ -13282,7 +13403,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare using condition for sqlstate '02000';
@@ -13293,7 +13414,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare utc_date condition for sqlstate '02000';
@@ -13304,7 +13425,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare utc_time condition for sqlstate '02000';
@@ -13315,7 +13436,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare utc_timestamp condition for sqlstate '02000';
@@ -13326,7 +13447,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare values condition for sqlstate '02000';
@@ -13337,7 +13458,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare varbinary condition for sqlstate '02000';
@@ -13348,7 +13469,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare varchar condition for sqlstate '02000';
@@ -13359,7 +13480,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare varcharacter condition for sqlstate '02000';
@@ -13370,7 +13491,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare varying condition for sqlstate '02000';
@@ -13381,7 +13502,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare when condition for sqlstate '02000';
@@ -13392,7 +13513,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare where condition for sqlstate '02000';
@@ -13403,7 +13524,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare while condition for sqlstate '02000';
@@ -13414,7 +13535,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare with condition for sqlstate '02000';
@@ -13425,7 +13546,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare write condition for sqlstate '02000';
@@ -13436,7 +13557,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare xor condition for sqlstate '02000';
@@ -13447,7 +13568,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare year_month condition for sqlstate '02000';
@@ -13458,7 +13579,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare zerofill condition for sqlstate '02000';
@@ -13507,7 +13628,7 @@ DROP PROCEDURE sp1;
DROP PROCEDURE IF EXISTS handler1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE handler1()
BEGIN
declare undo handler for sqlstate '23000' set @x2 = 1;
@@ -13531,7 +13652,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS handler1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE handler1()
BEGIN
declare continueinv handler for sqlstate '2300' set @x2 = 1;
@@ -13555,7 +13676,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS handler1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE handler1()
BEGIN
declare undoinv handler for sqlstate '2300' set @x2 = 1;
@@ -13579,7 +13700,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS handler1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE handler1 ()
BEGIN
declare exitinv handler for sqlstate '2300' set @x2 = 1;
@@ -13599,7 +13720,17 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1( )
+BEGIN
+ declare accessible handler for sqlstate '02000' set @var2 = 1;
+END//
+delimiter ;//
+
+DROP PROCEDURE IF EXISTS sp1;
+
+delimiter //;
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare add handler for sqlstate '02000' set @var2 = 1;
@@ -13609,7 +13740,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare all handler for sqlstate '02000' set @var2 = 1;
@@ -13619,7 +13750,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare alter handler for sqlstate '02000' set @var2 = 1;
@@ -13629,7 +13760,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare analyze handler for sqlstate '02000' set @var2 = 1;
@@ -13639,7 +13770,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare and handler for sqlstate '02000' set @var2 = 1;
@@ -13649,7 +13780,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare as handler for sqlstate '02000' set @var2 = 1;
@@ -13659,7 +13790,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare asc handler for sqlstate '02000' set @var2 = 1;
@@ -13669,7 +13800,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare asensitive handler for sqlstate '02000' set @var2 = 1;
@@ -13679,7 +13810,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare before handler for sqlstate '02000' set @var2 = 1;
@@ -13689,7 +13820,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare between handler for sqlstate '02000' set @var2 = 1;
@@ -13699,7 +13830,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare bigint handler for sqlstate '02000' set @var2 = 1;
@@ -13709,7 +13840,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare binary handler for sqlstate '02000' set @var2 = 1;
@@ -13719,7 +13850,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare blob handler for sqlstate '02000' set @var2 = 1;
@@ -13729,7 +13860,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare both handler for sqlstate '02000' set @var2 = 1;
@@ -13739,7 +13870,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare by handler for sqlstate '02000' set @var2 = 1;
@@ -13749,17 +13880,17 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
- declare CALL handler for sqlstate '02000' set @var2 = 1;
+ declare call handler for sqlstate '02000' set @var2 = 1;
END//
delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare cascade handler for sqlstate '02000' set @var2 = 1;
@@ -13769,7 +13900,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare case handler for sqlstate '02000' set @var2 = 1;
@@ -13779,7 +13910,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare change handler for sqlstate '02000' set @var2 = 1;
@@ -13789,7 +13920,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare char handler for sqlstate '02000' set @var2 = 1;
@@ -13799,7 +13930,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare character handler for sqlstate '02000' set @var2 = 1;
@@ -13809,7 +13940,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare check handler for sqlstate '02000' set @var2 = 1;
@@ -13819,7 +13950,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare collate handler for sqlstate '02000' set @var2 = 1;
@@ -13829,7 +13960,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare column handler for sqlstate '02000' set @var2 = 1;
@@ -13839,17 +13970,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
-CREATE PROCEDURE sp1( )
-BEGIN
- declare columns handler for sqlstate '02000' set @var2 = 1;
-END//
-delimiter ;//
-
-DROP PROCEDURE IF EXISTS sp1;
-
-delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare condition handler for sqlstate '02000' set @var2 = 1;
@@ -13859,37 +13980,27 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
- declare connection handler for sqlstate '02000' set @var2 = 1;
+ declare constraint handler for sqlstate '02000' set @var2 = 1;
END//
delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
+--error ER_PARSE_ERROR
delimiter //;
---error 1064
CREATE PROCEDURE sp1( )
-BEGIN
- declare constraint handler for sqlstate '02000' set @var2 = 1;
+ BEGIN
+ declare continue handler for sqlstate '02000' set @var2 = 1;
END//
delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
-#FIXME: check why this is switched off
-#--error 1064
-#delimiter //;
-#CREATE PROCEDURE sp1( )
-# BEGIN
-# declare continue handler for sqlstate '02000' set @var2 = 1;
-#END//
-#delimiter ;//
-#DROP PROCEDURE IF EXISTS sp1;
-
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare convert handler for sqlstate '02000' set @var2 = 1;
@@ -13899,7 +14010,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare create handler for sqlstate '02000' set @var2 = 1;
@@ -13909,7 +14020,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare cross handler for sqlstate '02000' set @var2 = 1;
@@ -13919,7 +14030,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare current_date handler for sqlstate '02000' set @var2 = 1;
@@ -13929,7 +14040,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare current_time handler for sqlstate '02000' set @var2 = 1;
@@ -13939,7 +14050,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare current_timestamp handler for sqlstate '02000' set @var2 = 1;
@@ -13949,7 +14060,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare current_user handler for sqlstate '02000' set @var2 = 1;
@@ -13959,7 +14070,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare cursor handler for sqlstate '02000' set @var2 = 1;
@@ -13969,7 +14080,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare database handler for sqlstate '02000' set @var2 = 1;
@@ -13979,7 +14090,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare databases handler for sqlstate '02000' set @var2 = 1;
@@ -13989,7 +14100,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare day_hour handler for sqlstate '02000' set @var2 = 1;
@@ -13999,7 +14110,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare day_microsecond handler for sqlstate '02000' set @var2 = 1;
@@ -14009,7 +14120,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare day_minute handler for sqlstate '02000' set @var2 = 1;
@@ -14019,7 +14130,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare day_second handler for sqlstate '02000' set @var2 = 1;
@@ -14029,7 +14140,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare dec handler for sqlstate '02000' set @var2 = 1;
@@ -14039,7 +14150,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare decimal handler for sqlstate '02000' set @var2 = 1;
@@ -14049,7 +14160,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare declare handler for sqlstate '02000' set @var2 = 1;
@@ -14059,7 +14170,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare default handler for sqlstate '02000' set @var2 = 1;
@@ -14069,7 +14180,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare delayed handler for sqlstate '02000' set @var2 = 1;
@@ -14079,7 +14190,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare delete handler for sqlstate '02000' set @var2 = 1;
@@ -14089,7 +14200,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare desc handler for sqlstate '02000' set @var2 = 1;
@@ -14099,7 +14210,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare describe handler for sqlstate '02000' set @var2 = 1;
@@ -14109,7 +14220,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare deterministic handler for sqlstate '02000' set @var2 = 1;
@@ -14119,7 +14230,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare distinct handler for sqlstate '02000' set @var2 = 1;
@@ -14129,7 +14240,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare distinctrow handler for sqlstate '02000' set @var2 = 1;
@@ -14139,7 +14250,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare div handler for sqlstate '02000' set @var2 = 1;
@@ -14149,7 +14260,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare double handler for sqlstate '02000' set @var2 = 1;
@@ -14159,7 +14270,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare drop handler for sqlstate '02000' set @var2 = 1;
@@ -14169,7 +14280,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare dual handler for sqlstate '02000' set @var2 = 1;
@@ -14179,7 +14290,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare each handler for sqlstate '02000' set @var2 = 1;
@@ -14189,7 +14300,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare else handler for sqlstate '02000' set @var2 = 1;
@@ -14199,7 +14310,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare elseif handler for sqlstate '02000' set @var2 = 1;
@@ -14209,7 +14320,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare enclosed handler for sqlstate '02000' set @var2 = 1;
@@ -14219,7 +14330,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare escaped handler for sqlstate '02000' set @var2 = 1;
@@ -14229,7 +14340,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare exists handler for sqlstate '02000' set @var2 = 1;
@@ -14238,58 +14349,48 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
-#FIXME: check why this is switched off
-#--error 1064
-#delimiter //;
-#CREATE PROCEDURE sp1( )
-# BEGIN
-# declare exit handler for sqlstate '02000' set @var2 = 1;
-#END//
-#delimiter ;//
-#DROP PROCEDURE IF EXISTS sp1;
-
+--error ER_PARSE_ERROR
delimiter //;
---error 1064
CREATE PROCEDURE sp1( )
-BEGIN
- declare explain handler for sqlstate '02000' set @var2 = 1;
+ BEGIN
+ declare exit handler for sqlstate '02000' set @var2 = 1;
END//
delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
- declare false handler for sqlstate '02000' set @var2 = 1;
+ declare explain handler for sqlstate '02000' set @var2 = 1;
END//
delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
- declare fetch handler for sqlstate '02000' set @var2 = 1;
+ declare false handler for sqlstate '02000' set @var2 = 1;
END//
delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
- declare fields handler for sqlstate '02000' set @var2 = 1;
+ declare fetch handler for sqlstate '02000' set @var2 = 1;
END//
delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare float handler for sqlstate '02000' set @var2 = 1;
@@ -14299,77 +14400,77 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
- declare for handler for sqlstate '02000' set @var2 = 1;
+ declare float4 handler for sqlstate '02000' set @var2 = 1;
END//
delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
- declare force handler for sqlstate '02000' set @var2 = 1;
+ declare float8 handler for sqlstate '02000' set @var2 = 1;
END//
delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
- declare foreign handler for sqlstate '02000' set @var2 = 1;
+ declare for handler for sqlstate '02000' set @var2 = 1;
END//
delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
- declare found handler for sqlstate '02000' set @var2 = 1;
+ declare force handler for sqlstate '02000' set @var2 = 1;
END//
delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
- declare from handler for sqlstate '02000' set @var2 = 1;
+ declare foreign handler for sqlstate '02000' set @var2 = 1;
END//
delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
- declare fulltext handler for sqlstate '02000' set @var2 = 1;
+ declare from handler for sqlstate '02000' set @var2 = 1;
END//
delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
- declare goto handler for sqlstate '02000' set @var2 = 1;
+ declare fulltext handler for sqlstate '02000' set @var2 = 1;
END//
delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare grant handler for sqlstate '02000' set @var2 = 1;
@@ -14379,7 +14480,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare group handler for sqlstate '02000' set @var2 = 1;
@@ -14389,7 +14490,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare having handler for sqlstate '02000' set @var2 = 1;
@@ -14399,7 +14500,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare high_priority handler for sqlstate '02000' set @var2 = 1;
@@ -14409,7 +14510,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare hour_microsecond handler for sqlstate '02000' set @var2 = 1;
@@ -14419,7 +14520,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare hour_minute handler for sqlstate '02000' set @var2 = 1;
@@ -14429,7 +14530,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare hour_second handler for sqlstate '02000' set @var2 = 1;
@@ -14439,7 +14540,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare if handler for sqlstate '02000' set @var2 = 1;
@@ -14449,7 +14550,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare ignore handler for sqlstate '02000' set @var2 = 1;
@@ -14459,7 +14560,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare in handler for sqlstate '02000' set @var2 = 1;
@@ -14469,7 +14570,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare index handler for sqlstate '02000' set @var2 = 1;
@@ -14479,7 +14580,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare infile handler for sqlstate '02000' set @var2 = 1;
@@ -14489,7 +14590,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare inner handler for sqlstate '02000' set @var2 = 1;
@@ -14499,7 +14600,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare inout handler for sqlstate '02000' set @var2 = 1;
@@ -14509,7 +14610,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare insensitive handler for sqlstate '02000' set @var2 = 1;
@@ -14519,7 +14620,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare insert handler for sqlstate '02000' set @var2 = 1;
@@ -14529,7 +14630,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare int handler for sqlstate '02000' set @var2 = 1;
@@ -14539,7 +14640,57 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1( )
+BEGIN
+ declare int1 handler for sqlstate '02000' set @var2 = 1;
+END//
+delimiter ;//
+
+DROP PROCEDURE IF EXISTS sp1;
+
+delimiter //;
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1( )
+BEGIN
+ declare int2 handler for sqlstate '02000' set @var2 = 1;
+END//
+delimiter ;//
+
+DROP PROCEDURE IF EXISTS sp1;
+
+delimiter //;
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1( )
+BEGIN
+ declare int3 handler for sqlstate '02000' set @var2 = 1;
+END//
+delimiter ;//
+
+DROP PROCEDURE IF EXISTS sp1;
+
+delimiter //;
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1( )
+BEGIN
+ declare int4 handler for sqlstate '02000' set @var2 = 1;
+END//
+delimiter ;//
+
+DROP PROCEDURE IF EXISTS sp1;
+
+delimiter //;
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1( )
+BEGIN
+ declare int8 handler for sqlstate '02000' set @var2 = 1;
+END//
+delimiter ;//
+
+DROP PROCEDURE IF EXISTS sp1;
+
+delimiter //;
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare integer handler for sqlstate '02000' set @var2 = 1;
@@ -14549,7 +14700,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare interval handler for sqlstate '02000' set @var2 = 1;
@@ -14559,7 +14710,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare into handler for sqlstate '02000' set @var2 = 1;
@@ -14569,7 +14720,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare is handler for sqlstate '02000' set @var2 = 1;
@@ -14579,7 +14730,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare iterate handler for sqlstate '02000' set @var2 = 1;
@@ -14589,7 +14740,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare join handler for sqlstate '02000' set @var2 = 1;
@@ -14599,7 +14750,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare key handler for sqlstate '02000' set @var2 = 1;
@@ -14609,7 +14760,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare keys handler for sqlstate '02000' set @var2 = 1;
@@ -14619,7 +14770,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare kill handler for sqlstate '02000' set @var2 = 1;
@@ -14629,7 +14780,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare leading handler for sqlstate '02000' set @var2 = 1;
@@ -14639,7 +14790,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare leave handler for sqlstate '02000' set @var2 = 1;
@@ -14649,7 +14800,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare left handler for sqlstate '02000' set @var2 = 1;
@@ -14659,7 +14810,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare like handler for sqlstate '02000' set @var2 = 1;
@@ -14669,7 +14820,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare limit handler for sqlstate '02000' set @var2 = 1;
@@ -14679,7 +14830,17 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1( )
+BEGIN
+ declare linear handler for sqlstate '02000' set @var2 = 1;
+END//
+delimiter ;//
+
+DROP PROCEDURE IF EXISTS sp1;
+
+delimiter //;
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare lines handler for sqlstate '02000' set @var2 = 1;
@@ -14689,7 +14850,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare load handler for sqlstate '02000' set @var2 = 1;
@@ -14699,7 +14860,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare localtime handler for sqlstate '02000' set @var2 = 1;
@@ -14709,7 +14870,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare localtimestamp handler for sqlstate '02000' set @var2 = 1;
@@ -14719,7 +14880,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare lock handler for sqlstate '02000' set @var2 = 1;
@@ -14729,7 +14890,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare long handler for sqlstate '02000' set @var2 = 1;
@@ -14739,7 +14900,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare longblob handler for sqlstate '02000' set @var2 = 1;
@@ -14749,7 +14910,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare longtext handler for sqlstate '02000' set @var2 = 1;
@@ -14759,7 +14920,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare loop handler for sqlstate '02000' set @var2 = 1;
@@ -14769,7 +14930,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare low_priority handler for sqlstate '02000' set @var2 = 1;
@@ -14779,7 +14940,17 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1( )
+BEGIN
+ declare master_ssl_verify_server_cert handler for sqlstate '02000' set @var2 = 1;
+END//
+delimiter ;//
+
+DROP PROCEDURE IF EXISTS sp1;
+
+delimiter //;
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare match handler for sqlstate '02000' set @var2 = 1;
@@ -14789,7 +14960,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare mediumblob handler for sqlstate '02000' set @var2 = 1;
@@ -14799,7 +14970,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare mediumint handler for sqlstate '02000' set @var2 = 1;
@@ -14809,7 +14980,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare mediumtext handler for sqlstate '02000' set @var2 = 1;
@@ -14819,7 +14990,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare middleint handler for sqlstate '02000' set @var2 = 1;
@@ -14829,7 +15000,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare minute_microsecond handler for sqlstate '02000' set @var2 = 1;
@@ -14839,7 +15010,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare minute_second handler for sqlstate '02000' set @var2 = 1;
@@ -14849,7 +15020,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare mod handler for sqlstate '02000' set @var2 = 1;
@@ -14859,7 +15030,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare modifies handler for sqlstate '02000' set @var2 = 1;
@@ -14869,7 +15040,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare natural handler for sqlstate '02000' set @var2 = 1;
@@ -14879,7 +15050,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare not handler for sqlstate '02000' set @var2 = 1;
@@ -14889,7 +15060,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare no_write_to_binlog handler for sqlstate '02000' set @var2 = 1;
@@ -14899,7 +15070,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare null handler for sqlstate '02000' set @var2 = 1;
@@ -14909,7 +15080,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare numeric handler for sqlstate '02000' set @var2 = 1;
@@ -14919,7 +15090,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare on handler for sqlstate '02000' set @var2 = 1;
@@ -14929,7 +15100,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare optimize handler for sqlstate '02000' set @var2 = 1;
@@ -14939,7 +15110,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare option handler for sqlstate '02000' set @var2 = 1;
@@ -14949,7 +15120,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare optionally handler for sqlstate '02000' set @var2 = 1;
@@ -14959,7 +15130,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare or handler for sqlstate '02000' set @var2 = 1;
@@ -14969,7 +15140,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare order handler for sqlstate '02000' set @var2 = 1;
@@ -14979,7 +15150,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare out handler for sqlstate '02000' set @var2 = 1;
@@ -14989,7 +15160,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare outer handler for sqlstate '02000' set @var2 = 1;
@@ -14999,7 +15170,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare outfile handler for sqlstate '02000' set @var2 = 1;
@@ -15009,7 +15180,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare precision handler for sqlstate '02000' set @var2 = 1;
@@ -15019,7 +15190,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare primary handler for sqlstate '02000' set @var2 = 1;
@@ -15029,7 +15200,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare privileges handler for sqlstate '02000' set @var2 = 1;
@@ -15039,7 +15210,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare procedure handler for sqlstate '02000' set @var2 = 1;
@@ -15049,7 +15220,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare purge handler for sqlstate '02000' set @var2 = 1;
@@ -15059,7 +15230,17 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1( )
+BEGIN
+ declare range handler for sqlstate '02000' set @var2 = 1;
+END//
+delimiter ;//
+
+DROP PROCEDURE IF EXISTS sp1;
+
+delimiter //;
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare read handler for sqlstate '02000' set @var2 = 1;
@@ -15069,7 +15250,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare reads handler for sqlstate '02000' set @var2 = 1;
@@ -15079,7 +15260,27 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1( )
+BEGIN
+ declare read_only handler for sqlstate '02000' set @var2 = 1;
+END//
+delimiter ;//
+
+DROP PROCEDURE IF EXISTS sp1;
+
+delimiter //;
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1( )
+BEGIN
+ declare read_write handler for sqlstate '02000' set @var2 = 1;
+END//
+delimiter ;//
+
+DROP PROCEDURE IF EXISTS sp1;
+
+delimiter //;
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare real handler for sqlstate '02000' set @var2 = 1;
@@ -15089,7 +15290,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare references handler for sqlstate '02000' set @var2 = 1;
@@ -15099,7 +15300,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare regexp handler for sqlstate '02000' set @var2 = 1;
@@ -15109,7 +15310,17 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
+CREATE PROCEDURE sp1( )
+BEGIN
+ declare release handler for sqlstate '02000' set @var2 = 1;
+END//
+delimiter ;//
+
+DROP PROCEDURE IF EXISTS sp1;
+
+delimiter //;
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare rename handler for sqlstate '02000' set @var2 = 1;
@@ -15119,7 +15330,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare repeat handler for sqlstate '02000' set @var2 = 1;
@@ -15129,7 +15340,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare replace handler for sqlstate '02000' set @var2 = 1;
@@ -15139,7 +15350,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare require handler for sqlstate '02000' set @var2 = 1;
@@ -15149,7 +15360,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare restrict handler for sqlstate '02000' set @var2 = 1;
@@ -15159,7 +15370,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare return handler for sqlstate '02000' set @var2 = 1;
@@ -15169,7 +15380,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare revoke handler for sqlstate '02000' set @var2 = 1;
@@ -15179,7 +15390,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare right handler for sqlstate '02000' set @var2 = 1;
@@ -15189,7 +15400,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare rlike handler for sqlstate '02000' set @var2 = 1;
@@ -15199,7 +15410,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare schema handler for sqlstate '02000' set @var2 = 1;
@@ -15209,7 +15420,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare schemas handler for sqlstate '02000' set @var2 = 1;
@@ -15219,7 +15430,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare second_microsecond handler for sqlstate '02000' set @var2 = 1;
@@ -15229,17 +15440,17 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
- declare SELECT handler for sqlstate '02000' set @var2 = 1;
+ declare select handler for sqlstate '02000' set @var2 = 1;
END//
delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare sensitive handler for sqlstate '02000' set @var2 = 1;
@@ -15249,7 +15460,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare separator handler for sqlstate '02000' set @var2 = 1;
@@ -15259,7 +15470,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare set handler for sqlstate '02000' set @var2 = 1;
@@ -15269,7 +15480,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare show handler for sqlstate '02000' set @var2 = 1;
@@ -15279,7 +15490,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare smallint handler for sqlstate '02000' set @var2 = 1;
@@ -15289,17 +15500,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
-CREATE PROCEDURE sp1( )
-BEGIN
- declare soname handler for sqlstate '02000' set @var2 = 1;
-END//
-delimiter ;//
-
-DROP PROCEDURE IF EXISTS sp1;
-
-delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare spatial handler for sqlstate '02000' set @var2 = 1;
@@ -15309,7 +15510,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare specific handler for sqlstate '02000' set @var2 = 1;
@@ -15319,7 +15520,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare sql handler for sqlstate '02000' set @var2 = 1;
@@ -15329,7 +15530,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare sqlexception handler for sqlstate '02000' set @var2 = 1;
@@ -15339,7 +15540,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare sqlstate handler for sqlstate '02000' set @var2 = 1;
@@ -15349,7 +15550,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare sqlwarning handler for sqlstate '02000' set @var2 = 1;
@@ -15359,7 +15560,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare sql_big_result handler for sqlstate '02000' set @var2 = 1;
@@ -15369,7 +15570,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare sql_calc_found_rows handler for sqlstate '02000' set @var2 = 1;
@@ -15379,7 +15580,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare sql_small_result handler for sqlstate '02000' set @var2 = 1;
@@ -15389,7 +15590,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare ssl handler for sqlstate '02000' set @var2 = 1;
@@ -15399,7 +15600,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare starting handler for sqlstate '02000' set @var2 = 1;
@@ -15409,7 +15610,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare straight_join handler for sqlstate '02000' set @var2 = 1;
@@ -15419,7 +15620,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare table handler for sqlstate '02000' set @var2 = 1;
@@ -15429,17 +15630,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
-CREATE PROCEDURE sp1( )
-BEGIN
- declare tables handler for sqlstate '02000' set @var2 = 1;
-END//
-delimiter ;//
-
-DROP PROCEDURE IF EXISTS sp1;
-
-delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare terminated handler for sqlstate '02000' set @var2 = 1;
@@ -15449,7 +15640,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare then handler for sqlstate '02000' set @var2 = 1;
@@ -15459,7 +15650,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare tinyblob handler for sqlstate '02000' set @var2 = 1;
@@ -15469,7 +15660,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare tinyint handler for sqlstate '02000' set @var2 = 1;
@@ -15479,7 +15670,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare tinytext handler for sqlstate '02000' set @var2 = 1;
@@ -15489,7 +15680,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare to handler for sqlstate '02000' set @var2 = 1;
@@ -15499,7 +15690,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare trailing handler for sqlstate '02000' set @var2 = 1;
@@ -15509,7 +15700,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare trigger handler for sqlstate '02000' set @var2 = 1;
@@ -15519,7 +15710,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare true handler for sqlstate '02000' set @var2 = 1;
@@ -15529,7 +15720,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare undo handler for sqlstate '02000' set @var2 = 1;
@@ -15539,7 +15730,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare union handler for sqlstate '02000' set @var2 = 1;
@@ -15549,7 +15740,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare unique handler for sqlstate '02000' set @var2 = 1;
@@ -15559,7 +15750,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare unlock handler for sqlstate '02000' set @var2 = 1;
@@ -15569,7 +15760,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare unsigned handler for sqlstate '02000' set @var2 = 1;
@@ -15579,7 +15770,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare update handler for sqlstate '02000' set @var2 = 1;
@@ -15589,7 +15780,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare usage handler for sqlstate '02000' set @var2 = 1;
@@ -15599,17 +15790,17 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
- declare USE handler for sqlstate '02000' set @var2 = 1;
+ declare use handler for sqlstate '02000' set @var2 = 1;
END//
delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare using handler for sqlstate '02000' set @var2 = 1;
@@ -15619,7 +15810,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare utc_date handler for sqlstate '02000' set @var2 = 1;
@@ -15629,7 +15820,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare utc_time handler for sqlstate '02000' set @var2 = 1;
@@ -15639,7 +15830,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare utc_timestamp handler for sqlstate '02000' set @var2 = 1;
@@ -15649,7 +15840,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare values handler for sqlstate '02000' set @var2 = 1;
@@ -15659,7 +15850,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare varbinary handler for sqlstate '02000' set @var2 = 1;
@@ -15669,7 +15860,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare varchar handler for sqlstate '02000' set @var2 = 1;
@@ -15679,7 +15870,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare varcharacter handler for sqlstate '02000' set @var2 = 1;
@@ -15689,7 +15880,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare varying handler for sqlstate '02000' set @var2 = 1;
@@ -15699,7 +15890,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare when handler for sqlstate '02000' set @var2 = 1;
@@ -15709,7 +15900,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare where handler for sqlstate '02000' set @var2 = 1;
@@ -15719,7 +15910,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare while handler for sqlstate '02000' set @var2 = 1;
@@ -15729,7 +15920,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare with handler for sqlstate '02000' set @var2 = 1;
@@ -15739,7 +15930,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare write handler for sqlstate '02000' set @var2 = 1;
@@ -15749,7 +15940,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare xor handler for sqlstate '02000' set @var2 = 1;
@@ -15759,7 +15950,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare year_month handler for sqlstate '02000' set @var2 = 1;
@@ -15769,7 +15960,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1( )
BEGIN
declare zerofill handler for sqlstate '02000' set @var2 = 1;
@@ -16240,6 +16431,7 @@ delimiter ;//
CALL sp1();
+--disable_warnings
DROP PROCEDURE IF EXISTS sp1;
@@ -16782,7 +16974,7 @@ CALL sp1();
# cleanup
DROP PROCEDURE sp1;
-
+--enable_warnings
# ------------------------------------------------------------------------------
let $message= Testcase 4.2.38:;
@@ -16823,7 +17015,7 @@ let $message= Testcase 4.2.39:;
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1332
+--error ER_SP_DUP_COND
CREATE PROCEDURE sp1()
BEGIN
declare cond1 condition for sqlstate '42000';
@@ -16844,7 +17036,7 @@ let $message= Testcase 4.2.41:;
DROP PROCEDURE IF EXISTS sp1;
delimiter //;
---error 1407
+--error ER_SP_BAD_SQLSTATE
CREATE PROCEDURE sp1()
BEGIN
declare cond1 condition for sqlstate '1';
@@ -16858,7 +17050,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1407
+--error ER_SP_BAD_SQLSTATE
CREATE PROCEDURE sp1()
BEGIN
declare cond1 condition for sqlstate '12';
@@ -16872,7 +17064,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1407
+--error ER_SP_BAD_SQLSTATE
CREATE PROCEDURE sp1()
BEGIN
declare cond1 condition for sqlstate '123';
@@ -16886,7 +17078,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1407
+--error ER_SP_BAD_SQLSTATE
CREATE PROCEDURE sp1()
BEGIN
declare cond1 condition for sqlstate '1234';
@@ -16900,7 +17092,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1407
+--error ER_SP_BAD_SQLSTATE
CREATE PROCEDURE sp1()
BEGIN
declare cond1 condition for sqlstate '123456';
@@ -16915,7 +17107,7 @@ let $message= Testcase 4.2.42:;
--source include/show_msg80.inc
# testcase: ensure that the declare condition for statement cannot declare a
-# condition for an invalid sqlstate. (bug associated) (Bug#8760)
+# condition for an invalid sqlstate.
--disable_warnings
@@ -16923,7 +17115,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1407
+--error ER_SP_BAD_SQLSTATE
CREATE PROCEDURE sp1()
BEGIN
declare cond1 condition for sqlstate 'abcdefghi';
@@ -16937,7 +17129,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1407
+--error ER_SP_BAD_SQLSTATE
CREATE PROCEDURE sp1()
BEGIN
declare cond1 condition for sqlstate '42000test';
@@ -16951,7 +17143,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1407
+--error ER_SP_BAD_SQLSTATE
CREATE PROCEDURE sp1()
BEGIN
declare cond1 condition for sqlstate '00000@#$%^&';
@@ -16965,7 +17157,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1407
+--error ER_SP_BAD_SQLSTATE
CREATE PROCEDURE sp1()
BEGIN
declare cond1 condition for sqlstate '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890';
@@ -16979,7 +17171,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1407
+--error ER_SP_BAD_SQLSTATE
CREATE PROCEDURE sp1()
BEGIN
declare cond1 condition for sqlstate 'null';
@@ -16993,7 +17185,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1407
+--error ER_SP_BAD_SQLSTATE
CREATE PROCEDURE sp1()
BEGIN
declare cond1 condition for sqlstate ' ';
@@ -17007,7 +17199,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp1()
BEGIN
declare cond1 condition for sqlstate 1234567890;
@@ -17021,7 +17213,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1407
+--error ER_SP_BAD_SQLSTATE
CREATE PROCEDURE sp1()
BEGIN
declare cond1 condition for sqlstate '2005-03-03';
@@ -17036,7 +17228,7 @@ let $message= Testcase 4.2.43:;
--source include/show_msg80.inc
# testcase: ensure that the declare condition for statement cannot declare a
-# condition for the successful completion sqlstate: 00000. (bug associated)
+# condition for the successful completion sqlstate: 00000.
--disable_warnings
DROP PROCEDURE IF EXISTS sp1;
@@ -17070,7 +17262,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1413
+--error ER_SP_DUP_HANDLER
CREATE PROCEDURE handler1 ()
BEGIN
declare continue handler for sqlstate '23000' set @varr1 = 5;
@@ -17081,7 +17273,7 @@ delimiter ;//
DROP PROCEDURE IF EXISTS handler1;
delimiter //;
---error 1413
+--error ER_SP_DUP_HANDLER
CREATE PROCEDURE handler1 ()
BEGIN
declare mycondition condition for sqlstate '23000';
@@ -17096,14 +17288,14 @@ let $message= Testcase 4.2.46:;
--source include/show_msg80.inc
# testcase: ensure that every sqlstate value declared with a declare handler for
-# statement is a character string that is 5 characters long (bug associated).
+# statement is a character string that is 5 characters long.
--disable_warnings
DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1407
+--error ER_SP_BAD_SQLSTATE
CREATE PROCEDURE sp1()
BEGIN
declare continue handler for sqlstate '1' set @var2 = 1;
@@ -17115,7 +17307,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1407
+--error ER_SP_BAD_SQLSTATE
CREATE PROCEDURE sp1()
BEGIN
declare continue handler for sqlstate '12' set @var2 = 1;
@@ -17127,7 +17319,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1407
+--error ER_SP_BAD_SQLSTATE
CREATE PROCEDURE sp1()
BEGIN
declare continue handler for sqlstate '123' set @var2 = 1;
@@ -17139,7 +17331,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1407
+--error ER_SP_BAD_SQLSTATE
CREATE PROCEDURE sp1()
BEGIN
declare continue handler for sqlstate '1234' set @var2 = 1;
@@ -17151,7 +17343,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1407
+--error ER_SP_BAD_SQLSTATE
CREATE PROCEDURE sp1()
BEGIN
declare continue handler for sqlstate '123456' set @var2 = 1;
@@ -17164,14 +17356,14 @@ let $message= Testcase 4.2.47:;
--source include/show_msg80.inc
# testcase: ensure that the declare handler for statement cannot declare a condition
-# for an invalid sqlstate. (bug associated)
+# for an invalid sqlstate.
--disable_warnings
DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1407
+--error ER_SP_BAD_SQLSTATE
CREATE PROCEDURE sp1()
BEGIN
declare continue handler for sqlstate '42s0200test' set @var2 = 1;
@@ -17189,7 +17381,7 @@ let $message= Testcase 4.2.48:;
--source include/show_msg80.inc
# testcase: ensure that the declare handler for statement cannot declare a condition
-# for the successful completion sqlstate: 00000. (bug associated)
+# for the successful completion sqlstate: 00000.
--disable_warnings
DROP PROCEDURE IF EXISTS sp1;
@@ -17222,7 +17414,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1333
+--error ER_SP_DUP_CURS
CREATE PROCEDURE sp1( )
BEGIN
declare done int default 0;
@@ -17237,11 +17429,11 @@ BEGIN
BEGIN
open cur1;
set count = count - 1;
- while count <> 0 do
+ while count > 0 do
fetch cur1 into newf1, newlf1, newf3, newsal;
set count = count - 1;
- END while;
- close cur1;
+ END while;
+ close cur1;
END;
END//
delimiter ;//
@@ -17258,7 +17450,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1323
+--error ER_SP_BAD_CURSOR_SELECT
CREATE PROCEDURE sp1( )
BEGIN
declare done int default 0;
@@ -17272,12 +17464,12 @@ BEGIN
BEGIN
open cur1;
set count = count - 1;
- while count <> 0 do
+ while count > 0 do
fetch cur1 into newf1, newlf1, newf3, newsal;
set count = count - 1;
- END while;
- close cur1;
- END;
+ END while;
+ close cur1;
+ END;
END//
delimiter ;//
@@ -17303,7 +17495,7 @@ DROP PROCEDURE IF EXISTS sp1;
--enable_warnings
delimiter //;
---error 1324
+--error ER_SP_CURSOR_MISMATCH
CREATE PROCEDURE sp1( )
BEGIN
declare done int default 0;
@@ -17316,7 +17508,7 @@ BEGIN
BEGIN
open cur1;
set count = count - 1;
- while count <> 0 do
+ while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
set count = count - 1;
END while;
@@ -17345,7 +17537,7 @@ BEGIN
BEGIN
open cur1;
set count = count - 1;
- while count <> 0 do
+ while count > 0 do
fetch cur1 into newf1, newf2, newf3, newf4;
set count = count - 1;
END while;
@@ -17355,8 +17547,7 @@ BEGIN
END//
delimiter ;//
-#suppressed (Bug# 8892)
---error 1325
+--error ER_SP_CURSOR_ALREADY_OPEN
CALL sp1();
@@ -17383,7 +17574,7 @@ BEGIN
open cur1;
open cur1;
set count = count - 1;
- while count <> 0 do
+ while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
set count = count - 1;
END while;
@@ -17392,7 +17583,7 @@ BEGIN
END//
delimiter ;//
---error 1325
+--error ER_SP_CURSOR_ALREADY_OPEN
CALL sp1();
# cleanup
@@ -17423,7 +17614,7 @@ BEGIN
BEGIN
open cur2;
set count = count - 1;
- while count <> 0 do
+ while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
set count = count - 1;
END while;
@@ -17432,7 +17623,7 @@ BEGIN
END//
delimiter ;//
---error 1326
+--error ER_SP_CURSOR_NOT_OPEN
CALL sp1();
# cleanup
@@ -17466,7 +17657,7 @@ BEGIN
declare continue handler for sqlstate '02000' set done = 1;
BEGIN
set count = count - 1;
- while count <> 0 do
+ while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
set count = count - 1;
END while;
@@ -17476,7 +17667,7 @@ BEGIN
END//
delimiter ;//
---error 1326
+--error ER_SP_CURSOR_NOT_OPEN
CALL sp1();
DROP PROCEDURE IF EXISTS sp1;
@@ -17485,7 +17676,7 @@ delimiter //;
CREATE PROCEDURE sp1( )
BEGIN
declare done int default 0;
- declare count integer default 0;
+ declare count integer default 10;
declare newf1 char(20);
declare newf2 char(20);
declare newf3 char(20);
@@ -17496,18 +17687,18 @@ BEGIN
BEGIN
declare cur1 cursor for SELECT f1, f2, f3, f4 from t2;
set count = count - 1;
- while count <> 0 do
+ while count > 0 do
fetch cur1 into newf1, newf2, newf3, newf4;
set count = count - 1;
END while;
open cur1;
close cur1;
- END;
+ END;
close cur1;
END//
delimiter ;//
---error 1326
+--error ER_SP_CURSOR_NOT_OPEN
CALL sp1();
# cleanup
@@ -17538,15 +17729,15 @@ BEGIN
open cur1;
close cur1;
set count = count - 1;
- while count <> 0 do
+ while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
- set count = count - 1;
+ set count = count - 1;
END while;
- END;
+ END;
END//
delimiter ;//
---error 1326
+--error ER_SP_CURSOR_NOT_OPEN
CALL sp1();
DROP PROCEDURE IF EXISTS sp1;
@@ -17555,7 +17746,7 @@ delimiter //;
CREATE PROCEDURE sp1( )
BEGIN
declare done int default 0;
- declare count integer default 0;
+ declare count integer default 20;
declare newf1 char(20);
declare newf2 char(20);
declare newf3 char(20);
@@ -17572,7 +17763,7 @@ BEGIN
END//
delimiter ;//
---error 1326
+--error ER_SP_CURSOR_NOT_OPEN
CALL sp1();
# cleanup
@@ -17597,13 +17788,13 @@ BEGIN
declare done int default 0;
declare count integer default 20;
declare newf2 char(20);
- declare newf1 date;
+ declare newf1 int1;
declare cur1 cursor for SELECT f1, f3 from t2 limit 20, 10;
declare continue handler for sqlstate '02000' set done = 1;
BEGIN
open cur1;
set count = count - 1;
- while count <> 0 do
+ while count > 0 do
fetch cur1 into newf1, newf2;
set @x = newf1;
set @y = newf2;
@@ -17615,8 +17806,8 @@ BEGIN
END//
delimiter ;//
-#FIXME check that here NO error occurs: suppressed for bug (Bug# 8702)
-#--error 1146
+#This test seems to make no sense, as always NULL may be set.
+#--error ER_SP_CURSOR_NOT_OPEN
CALL sp1();
# cleanup
@@ -17647,7 +17838,7 @@ BEGIN
close cur1;
open cur1;
set count = count - 1;
- while count <> 0 do
+ while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
set count = count - 1;
END while;
@@ -17656,7 +17847,7 @@ BEGIN
END//
delimiter ;//
---error 1326
+--error ER_SP_CURSOR_NOT_OPEN
CALL sp1();
DROP PROCEDURE IF EXISTS sp1;
@@ -17680,7 +17871,7 @@ BEGIN
END//
delimiter ;//
---error 1326
+--error ER_SP_CURSOR_NOT_OPEN
CALL sp1();
# cleanup
@@ -17716,9 +17907,7 @@ CREATE PROCEDURE sp1( )
END//
delimiter ;//
-#FIXME check this error, in 5.0.11 the error occurs. Is this wanted?
-# suppressed for bug (Bug#8756)
---error 1329
+--error ER_SP_FETCH_NO_DATA
CALL sp1();
# cleanup
@@ -17755,9 +17944,7 @@ BEGIN
END//
delimiter ;//
-#FIXME check this error, in 5.0.11 the error occurs. Is this wanted?
-##suppressed for bug (Bug#8756)
---error 1329
+--error ER_SP_FETCH_NO_DATA
CALL sp1();
# cleanup
@@ -17788,7 +17975,7 @@ BEGIN
BEGIN
open cur1;
set count = count - 1;
- while count <> 0 do
+ while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
set count = count - 1;
END while;
@@ -17798,7 +17985,7 @@ BEGIN
END//
delimiter ;//
---error 1326
+--error ER_SP_CURSOR_NOT_OPEN
CALL sp1();
# cleanup
@@ -17829,15 +18016,17 @@ BEGIN
declare continue handler for sqlstate '02000' set done = 1;
BEGIN
open cur1;
- set count = count - 1;
- while count <> 0 do
+# set count = count - 1;
+# while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
- set count = count - 1;
- END while;
+# set count = count - 1;
+# END while;
END;
+ fetch cur1 into newf1, newf2, newf4, newf3;
END//
delimiter ;//
+#--error ER_SP_FETCH_NO_DATA
CALL sp1();
# cleanup
@@ -17881,7 +18070,7 @@ BEGIN
set count = 10;
BEGIN
open cur2;
- while count <> 0 do
+ while count > 0 do
fetch cur1 into newf1, newf2, newf4, newf3;
set count = count - 1;
END while;
@@ -17890,7 +18079,8 @@ BEGIN
close cur1;
END;
BEGIN
- while count <> 0 do
+ set count = 10;
+ while count > 0 do
fetch cur2 into newf21, newf22, newf24, newf23;
set count = count - 1;
END while;
@@ -17902,7 +18092,7 @@ delimiter ;//
CALL sp1();
-SELECT * from temp1;
+SELECT count(*) from temp1;
SELECT * from temp2;
# cleanup
@@ -17934,8 +18124,7 @@ eval CREATE TABLE res_t3_itisalongname_1381742_itsaverylongname_1381742(
middleinitial CHAR,
lastname VARCHAR(50),
age_averylongfieldname_averylongname_1234569 int,
- COMMENT TEXT) ENGINE=innodb;
-# COMMENT TEXT) ENGINE=$engine_type;
+ COMMENT TEXT) ENGINE=$engine_type;
INSERT INTO res_t3_itisalongname_1381742_itsaverylongname_1381742
VALUES('a', 'aaaaaaaaaabbbbbbbbc', 0, 'default');
@@ -18081,7 +18270,7 @@ DROP PROCEDURE IF EXISTS sp3;
create table res_t3_itisalongname_1381742_itsaverylongname_1381742 (name char, address varchar(50), age_averylongfieldname_averylongname_1234569 smallint);
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp3( action char(20) )
BEGIN
label1: case
@@ -18099,7 +18288,7 @@ DROP PROCEDURE IF EXISTS sp3;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp3( action char(20) )
BEGIN
label1: BEGIN
@@ -18119,7 +18308,7 @@ DROP PROCEDURE IF EXISTS sp3;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp3( action char(20) )
BEGIN
case
@@ -18139,7 +18328,7 @@ DROP PROCEDURE IF EXISTS sp3;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp3( action char(20) )
BEGIN
declare v1 char(20);
@@ -18178,8 +18367,9 @@ BEGIN
BEGIN
insert into res_t3_itisalongname_1381742_itsaverylongname_1381742
values('xxxxxxxxxxxxxxxxxxx', '1231230981(*&(*&)(*&(', count);
- if done=1 then
- set count=10;
+ set count = count + 1;
+ if count= 10 then
+ set done=1;
END if;
END;
END while label2;
@@ -18195,8 +18385,7 @@ BEGIN
END//
delimiter ;//
-# results in lost connection hence suppressed--error 2013
-#CALL sp3('insert');
+CALL sp3('insert');
# cleanup
DROP PROCEDURE sp3;
@@ -18214,7 +18403,7 @@ DROP PROCEDURE IF EXISTS sp4;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp4()
BEGIN
declare count int;
@@ -18236,7 +18425,7 @@ DROP PROCEDURE IF EXISTS sp4;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp4()
BEGIN
declare count int;
@@ -18257,7 +18446,7 @@ DROP PROCEDURE IF EXISTS sp4;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp4()
BEGIN
declare count int;
@@ -18278,7 +18467,7 @@ DROP PROCEDURE IF EXISTS sp4;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp4()
BEGIN
declare count int;
@@ -18299,7 +18488,7 @@ DROP PROCEDURE IF EXISTS sp4;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp4()
BEGIN
declare i int default 10;
@@ -18347,7 +18536,7 @@ BEGIN
END//
delimiter ;//
---error 1054
+--error ER_BAD_FIELD_ERROR
CALL sp4();
# cleanup
@@ -18365,7 +18554,7 @@ DROP PROCEDURE IF EXISTS sp5;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp5()
BEGIN
declare count integer default 1;
@@ -18384,7 +18573,7 @@ DROP PROCEDURE IF EXISTS sp5;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp5(count int)
BEGIN
when case count = 1 then
@@ -18400,7 +18589,7 @@ DROP PROCEDURE IF EXISTS sp5;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp5(count int)
BEGIN
END case;
@@ -18417,7 +18606,7 @@ DROP PROCEDURE IF EXISTS sp5;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp5(count int)
BEGIN
when count = 1 then
@@ -18440,7 +18629,7 @@ DROP PROCEDURE IF EXISTS sp6;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp6()
BEGIN
declare count1 integer default 1;
@@ -18457,7 +18646,7 @@ DROP PROCEDURE IF EXISTS sp6;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp6()
BEGIN
declare count1 integer default 1;
@@ -18474,7 +18663,7 @@ DROP PROCEDURE IF EXISTS sp6;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp6()
BEGIN
declare count1 integer default 1;
@@ -18491,7 +18680,7 @@ DROP PROCEDURE IF EXISTS sp6;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp6()
BEGIN
declare count1 integer default 1;
@@ -18507,7 +18696,7 @@ DROP PROCEDURE IF EXISTS sp6;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp6()
BEGIN
declare count1 integer default 1;
@@ -18529,15 +18718,14 @@ CREATE PROCEDURE sp6()
BEGIN
declare count1 integer default 1;
label1: repeat
- set count1 = count1;
+ set count1 = count1-1;
until count1 < 0
END repeat label1;
SELECT count1;
END//
delimiter ;//
-# results in lost connection hence suppressed--error 2013
-# CALL sp6();
+CALL sp6();
# cleanup
DROP PROCEDURE sp6;
@@ -18555,7 +18743,7 @@ DROP PROCEDURE IF EXISTS sp7;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp7()
BEGIN
label1: loop
@@ -18572,7 +18760,7 @@ DROP PROCEDURE IF EXISTS sp7;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp7()
BEGIN
label1: END loop;
@@ -18589,7 +18777,7 @@ DROP PROCEDURE IF EXISTS sp7;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp7()
BEGIN
label1: iterate label1;
@@ -18615,7 +18803,7 @@ DROP PROCEDURE IF EXISTS sp8;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp8()
BEGIN
declare v1 int default 5;
@@ -18630,7 +18818,7 @@ DROP PROCEDURE IF EXISTS sp8;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp8()
BEGIN
declare v1 int default 5;
@@ -18645,7 +18833,7 @@ DROP PROCEDURE IF EXISTS sp8;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp8()
BEGIN
declare v1 int default 5;
@@ -18655,11 +18843,6 @@ BEGIN
END//
delimiter ;//
-
-
-
-
-
# ------------------------------------------------------------------------------
let $message= Testcase 4.3.12:;
--source include/show_msg80.inc
@@ -18674,7 +18857,7 @@ DROP PROCEDURE IF EXISTS sp12;
create table res_t3_itisalongname_1381742_itsaverylongname_1381742( f1 char(20), f2 varchar(20), f3 smallint);
delimiter //;
---error 1310
+--error ER_SP_LABEL_MISMATCH
CREATE PROCEDURE sp12( )
BEGIN
declare count1 integer default 1;
@@ -18750,7 +18933,7 @@ DROP PROCEDURE IF EXISTS sp14;
create table res_t3_itisalongname_1381742_itsaverylongname_1381742( f1 char(20), f2 varchar(20), f3 smallint);
delimiter //;
---error 1308
+--error ER_SP_LILABEL_MISMATCH
CREATE PROCEDURE sp14( )
BEGIN
declare count1 integer default 1;
@@ -18782,7 +18965,7 @@ DROP PROCEDURE IF EXISTS sp15;
create table res_t3_itisalongname_1381742_itsaverylongname_1381742( f1 char(20), f2 varchar(20), f3 smallint);
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp15( )
BEGIN
declare count1 integer default 1;
@@ -18810,7 +18993,7 @@ DROP PROCEDURE IF EXISTS sp16;
delete from res_t3_itisalongname_1381742_itsaverylongname_1381742;
delimiter //;
---error 1309
+--error ER_SP_LABEL_REDEFINE
CREATE PROCEDURE sp16( )
BEGIN
declare count1 integer default 1;
@@ -18833,7 +19016,7 @@ DROP PROCEDURE IF EXISTS sp16;
--enable_warnings
delimiter //;
---error 1309
+--error ER_SP_LABEL_REDEFINE
CREATE PROCEDURE sp16( )
BEGIN
declare count1 integer default 1;
@@ -18880,7 +19063,7 @@ DROP PROCEDURE IF EXISTS sp18;
delete from res_t3_itisalongname_1381742_itsaverylongname_1381742;
delimiter //;
---error 1310
+--error ER_SP_LABEL_MISMATCH
CREATE PROCEDURE sp18( )
BEGIN
declare count1 integer default 1;
@@ -18941,7 +19124,7 @@ DROP PROCEDURE IF EXISTS sp20;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp20( )
BEGIN
declare count1 integer default 1;
@@ -18976,7 +19159,7 @@ DROP PROCEDURE IF EXISTS sp22;
--enable_warnings
delimiter //;
---error 1310
+--error ER_SP_LABEL_MISMATCH
CREATE PROCEDURE sp22( )
BEGIN
declare count1 integer default 1;
@@ -19008,7 +19191,7 @@ DROP PROCEDURE IF EXISTS sp23;
--enable_warnings
delimiter //;
---error 1064
+--error ER_PARSE_ERROR
CREATE PROCEDURE sp23( )
BEGIN
declare count1 integer default 1;
@@ -19111,7 +19294,7 @@ let $message= Testcase 4.4.2:;
DROP FUNCTION IF EXISTS fn1;
DROP FUNCTION IF EXISTS fn11;
DROP DATABASE IF EXISTS d40402;
---enable warnings
+--enable_warnings
delimiter //;
CREATE FUNCTION fn1(n int) returns int
@@ -19218,7 +19401,7 @@ DROP DATABASE IF EXISTS d1;
USE d1;
delimiter //;
---error 1314
+--error ER_SP_BADSTATEMENT
CREATE PROCEDURE sp3()
BEGIN
USE d1;
@@ -19261,7 +19444,6 @@ DROP DATABASE d1;
USE d1;
create table t44(a char(5), b char(10));
-#FIXME: check why here no rows are shown
--replace_column 13 modified 14 created
SELECT * from mysql.proc where specific_name = 'sp4';
@@ -19455,45 +19637,26 @@ let $procvar01_30= 1.00e+30;
let $procvar01_36= 1.00e+36;
let $procvar01_40= 1.00e+40;
-let $bug_dec_num= 1;
-
-eval SELECT $bug_dec_num as 'bug_dec_num';
-
-if ($bug_dec_num)
-{
- let $message=
- .
- FIXME: There are differences with datatypes DECIMAL and NUMERIC if large
- FIXME: exponent values are used. The diffs are shown only on some machines like
- FIXME: AIX52 and HPUX11. Until this has been solved we use numbers that
- FIXME: *should* be equal to the exponent representation but have no exponents
- FIXME: and use the specified count of *0*s instead.
- FIXME: In the source file these tests are marked with the comment hpux11
- .;
- --source include/show_msg80.inc
- # FIXME values above changed to values below to fix DECIMAL/NUMERIC issues on hpux11
-
- #################123456789-123456789-123456789-123456789-
- let $plus_20= 100000000000000000000;
- let $plus_24= 1000000000000000000000000;
- let $plus_30= 1000000000000000000000000000000;
- let $plus_36= 1000000000000000000000000000000000000;
- let $plus_40= 10000000000000000000000000000000000000000;
- let $minus_30= -1000000000000000000000000000000;
- let $minus_36= -1000000000000000000000000000000000000;
- let $minus_40= -10000000000000000000000000000000000000000;
-
- let $procvar_m00= -1.00e+22;
- let $procvar_00= 1.00e+22;
- let $procvar01_m30= $procvar_m00;
- let $procvar01_m36= $procvar_m00;
- let $procvar01_m40= $procvar_m00;
- let $procvar01_20= $procvar_00;
- let $procvar01_24= $procvar_00;
- let $procvar01_30= $procvar_00;
- let $procvar01_36= $procvar_00;
- let $procvar01_40= $procvar_00;
-}
+#################123456789-123456789-123456789-123456789-
+let $plus_20= 100000000000000000000;
+let $plus_24= 1000000000000000000000000;
+let $plus_30= 1000000000000000000000000000000;
+let $plus_36= 1000000000000000000000000000000000000;
+let $plus_40= 10000000000000000000000000000000000000000;
+let $minus_30= -1000000000000000000000000000000;
+let $minus_36= -1000000000000000000000000000000000000;
+let $minus_40= -10000000000000000000000000000000000000000;
+
+let $procvar_m00= -1.00e+22;
+let $procvar_00= 1.00e+22;
+let $procvar01_m30= $procvar_m00;
+let $procvar01_m36= $procvar_m00;
+let $procvar01_m40= $procvar_m00;
+let $procvar01_20= $procvar_00;
+let $procvar01_24= $procvar_00;
+let $procvar01_30= $procvar_00;
+let $procvar01_36= $procvar_00;
+let $procvar01_40= $procvar_00;
let $procvar03= -9.22e+18;
let $procvar05= -9.22e+18;
let $procvar07= -9.22e+18;
@@ -19548,10 +19711,7 @@ BEGIN
END//
delimiter ;//
-if ($have_bug_11589)
-{
--disable_ps_protocol
-}
SELECT fn3(1.84e+17);
--enable_ps_protocol
@@ -19567,14 +19727,10 @@ BEGIN
END//
delimiter ;//
-if ($have_bug_11589)
-{
--disable_ps_protocol
-}
SELECT fn4(-9.22e+15);
--enable_ps_protocol
-
--disable_warnings
DROP FUNCTION IF EXISTS fn5;
--enable_warnings
@@ -19693,7 +19849,6 @@ delimiter ;//
SELECT fn12(999999999);
-
--disable_warnings
DROP FUNCTION IF EXISTS fn13;
--enable_warnings
@@ -19797,10 +19952,8 @@ BEGIN
END//
delimiter ;//
-#FIXME hpux11
eval SELECT fn19_du( $plus_20 );
-
--disable_warnings
DROP FUNCTION IF EXISTS fn20_duz;
--enable_warnings
@@ -19813,10 +19966,8 @@ BEGIN
END//
delimiter ;//
-#FIXME hpux11
eval SELECT fn20_duz( $plus_24 );
-
--disable_warnings
DROP FUNCTION IF EXISTS fn21_d_z;
--enable_warnings
@@ -19916,7 +20067,9 @@ BEGIN
END//
delimiter ;//
+--disable_ps_protocol
SELECT fn27(1.00e+00);
+--enable_ps_protocol
--disable_warnings
@@ -19931,13 +20084,16 @@ BEGIN
END//
delimiter ;//
+--disable_ps_protocol
SELECT fn28(1.00e+00);
+--enable_ps_protocol
--disable_warnings
DROP FUNCTION IF EXISTS fn29;
--enable_warnings
+
delimiter //;
CREATE FUNCTION fn29( f1 float) returns float
BEGIN
@@ -19976,7 +20132,9 @@ BEGIN
END//
delimiter ;//
+--disable_ps_protocol
SELECT fn31(1.00e+00);
+--enable_ps_protocol
--disable_warnings
@@ -19991,7 +20149,9 @@ BEGIN
END//
delimiter ;//
+--disable_ps_protocol
SELECT fn32(1.00e+00);
+--enable_ps_protocol
--disable_warnings
@@ -20036,7 +20196,9 @@ BEGIN
END//
delimiter ;//
+--disable_ps_protocol
SELECT fn35(1.00e+00);
+--enable_ps_protocol
--disable_warnings
@@ -20051,7 +20213,9 @@ BEGIN
END//
delimiter ;//
+--disable_ps_protocol
SELECT fn36(1.00e+00);
+--enable_ps_protocol
--disable_warnings
@@ -20096,7 +20260,9 @@ BEGIN
END//
delimiter ;//
+--disable_ps_protocol
SELECT fn39(1.00e+00);
+--enable_ps_protocol
--disable_warnings
@@ -20111,7 +20277,9 @@ BEGIN
END//
delimiter ;//
+--disable_ps_protocol
SELECT fn40(1.00e+00);
+--enable_ps_protocol
--disable_warnings
@@ -20155,7 +20323,9 @@ BEGIN
END//
delimiter ;//
+--disable_ps_protocol
SELECT fn43(1.00e+00);
+--enable_ps_protocol
--disable_warnings
@@ -20170,7 +20340,9 @@ BEGIN
END//
delimiter ;//
+--disable_ps_protocol
SELECT fn44(1.00e+00);
+--enable_ps_protocol
--disable_warnings
@@ -20214,7 +20386,9 @@ BEGIN
END//
delimiter ;//
+--disable_ps_protocol
SELECT fn47(1.00e+00);
+--enable_ps_protocol
--disable_warnings
@@ -20229,7 +20403,9 @@ BEGIN
END//
delimiter ;//
+--disable_ps_protocol
SELECT fn48(1.00e+00);
+--enable_ps_protocol
--disable_warnings
@@ -20289,10 +20465,7 @@ BEGIN
END//
delimiter ;//
-if ($have_bug_11589)
-{
--disable_ps_protocol
-}
SELECT fn52(2.15e+08);
--enable_ps_protocol
@@ -20352,13 +20525,7 @@ BEGIN
END//
delimiter ;//
-if ($have_bug_11589)
-{
---disable_ps_protocol
-}
SELECT fn56(-8388601);
---enable_ps_protocol
-
--disable_warnings
DROP FUNCTION IF EXISTS fn57;
@@ -20709,7 +20876,9 @@ BEGIN
END//
delimiter ;//
+--disable_ps_protocol
SELECT fn79(1.1);
+--enable_ps_protocol
--disable_warnings
@@ -20724,7 +20893,9 @@ BEGIN
END//
delimiter ;//
+--disable_ps_protocol
SELECT fn80(1.1);
+--enable_ps_protocol
--disable_warnings
@@ -20784,13 +20955,7 @@ BEGIN
END//
delimiter ;//
-if ($have_bug_11589)
-{
---disable_ps_protocol
-}
SELECT fn84(-32601);
---enable_ps_protocol
-
--disable_warnings
DROP FUNCTION IF EXISTS fn85;
@@ -20849,62 +21014,44 @@ BEGIN
END//
delimiter ;//
-if ($have_bug_11589)
-{
---disable_ps_protocol
-}
SELECT fn88(-101);
---enable_ps_protocol
--disable_warnings
DROP FUNCTION IF EXISTS fn89;
--enable_warnings
-
-#FIXME why was fn89 switched off ?
delimiter //;
-#FIXME: check whether this error 1064 is OK!
---error 1064
CREATE FUNCTION fn89( f1 enum('1enum', '2enum')) returns enum('1enum', '2enum')
BEGIN
- if f1 eq "1enum" then
- set f1 = '2enum';
- else
- set f1 = '1enum';
- END if;
- return f1;
+ IF f1 = '1enum' THEN
+ SET f1 = '2enum';
+ ELSE
+ SET f1 = '1enum';
+ END IF;
+ RETURN f1;
END//
delimiter ;//
-#FIXME: this is OK as long as the error 1064 above is OK!
---error 1305
SELECT fn89( '1enum');
--disable_warnings
DROP FUNCTION IF EXISTS fn90;
--enable_warnings
-
-#FIXME: wah was fn90 switched off ?
delimiter //;
-#FIXME: check whether this error 1064 is OK!
---error 1064
-CREATE FUNCTION fn90( f1 set("1set", "2set")) returns set("1set", "2set")
+CREATE FUNCTION fn90( f1 set('1set', '2set')) returns set('1set', '2set')
BEGIN
- if(f1 == "1set") then
- set f1 = "2set";
- else
- set f1 = "1set";
- END if;
- return f1;
+ IF f1 = '1set' THEN
+ SET f1 = '2set';
+ ELSE
+ SET f1 = '1set';
+ END IF;
+ RETURN f1;
END//
delimiter ;//
-#FIXME: this is OK as long as the error 1064 above is OK!
---error 1305
SELECT fn90( '1set');
-
--disable_warnings
DROP FUNCTION IF EXISTS fn91;
--enable_warnings
@@ -20986,17 +21133,13 @@ DROP FUNCTION IF EXISTS fn96;
--enable_warnings
delimiter //;
-#FIXME: check whether this error 1064 is OK!
-#--error 1064
-CREATE FUNCTION fn96( f1 char binary) returns char binary
+CREATE FUNCTION fn96( f1 binary) returns binary(2)
BEGIN
set f1 = concat('a', f1);
return f1;
END//
delimiter ;//
-#FIXME: this is OK as long as the error 1064 above is OK!
-#--error 1305
SELECT fn96( 'h');
@@ -21090,9 +21233,7 @@ SELECT fn102(1982);
DROP FUNCTION IF EXISTS fn103;
--enable_warnings
-#FIXME Bug: (Bug#10499)
delimiter //;
-#--error 1178
CREATE FUNCTION fn103( f1 geometrycollection) returns geometrycollection
BEGIN
set f1 = f1;
@@ -21100,7 +21241,6 @@ BEGIN
END//
delimiter ;//
-#FIXME Bug: (Bug#10499)
SELECT fn103('\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0?\0\0\0\0\0\0?\0\0\0\0\0\04@\0\0\0\0\0\0?\0\0\0\0\0\04@\0\0\0\0\0\04@\0\0\0\0\0\0?\0\0\0\0\0\04@\0\0\0\0\0\0?\0\0\0\0\0\0?\0\0\0\0\0\0\0\0\0@\0\0\0\0\0\0@\0\0\0\0\0\0 @\0\0\0\0\0\0@\0\0\0\0\0\0 @\0\0\0\0\0\0 @\0\0\0\0\0\0@\0\0\0\0\0\0 @\0\0\0\0\0\0@\0\0\0\0\0\0@');
@@ -21108,9 +21248,7 @@ SELECT fn103('\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0?\0\0\0\0\0\0?\0\0\0\0\0
DROP FUNCTION IF EXISTS fn104;
--enable_warnings
-#FIXME Bug: (Bug#10499)
delimiter //;
-#--error 1178
CREATE FUNCTION fn104( f1 linestring) returns linestring
BEGIN
set f1 = f1;
@@ -21118,7 +21256,6 @@ BEGIN
END//
delimiter ;//
-#FIXME Bug: (Bug#10499)
SELECT fn104('\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0?\0\0\0\0\0\0?\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0@\0\0\0\0\0\0@');
@@ -21126,9 +21263,7 @@ SELECT fn104('\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0?\0\0\0\0\0\0?\0\0\0\0\0\0\0@\0
DROP FUNCTION IF EXISTS fn105;
--enable_warnings
-#FIXME Bug: (Bug#10499)
delimiter //;
-#--error 1178
CREATE FUNCTION fn105( f1 point) returns point
BEGIN
set f1 = f1;
@@ -21136,7 +21271,6 @@ BEGIN
END//
delimiter ;//
-#FIXME Bug: (Bug#10499)
SELECT fn105('\0\0\0\0\0\0\0\0\0\0\0\0\04@\0\0\0\0\0\04@');
@@ -21144,9 +21278,7 @@ SELECT fn105('\0\0\0\0\0\0\0\0\0\0\0\0\04@\0\0\0\0\0\04@');
DROP FUNCTION IF EXISTS fn106;
--enable_warnings
-#FIXME Bug: (Bug#10499)
delimiter //;
-#--error 1178
CREATE FUNCTION fn106( f1 polygon) returns polygon
BEGIN
set f1 = f1;
@@ -21154,7 +21286,6 @@ BEGIN
END//
delimiter ;//
-#FIXME Bug: (Bug#10499)
SELECT fn106('\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0?\0\0\0\0\0\0?\0\0\0\0\0\04@\0\0\0\0\0\0?\0\0\0\0\0\04@\0\0\0\0\0\04@\0\0\0\0\0\0?\0\0\0\0\0\04@\0\0\0\0\0\0?\0\0\0\0\0\0?\0\0\0\0\0\0\0\0\0@\0\0\0\0\0\0@\0\0\0\0\0\0 @\0\0\0\0\0\0@\0\0\0\0\0\0 @\0\0\0\0\0\0 @\0\0\0\0\0\0@\0\0\0\0\0\0 @\0\0\0\0\0\0@\0\0\0\0\0\0@');
@@ -21260,10 +21391,6 @@ BEGIN
END//
delimiter ;//
--- echo FIXME: Following test contains a known problem that will be checked again
--- echo FIXME: after WL#2984 has been completed:
--- echo FIXME: default (10) for DECIMAL not checked, decimal digits shown although not defined
-
CALL sp5(-1.00e+09);
@@ -21279,10 +21406,6 @@ BEGIN
END//
delimiter ;//
--- echo FIXME: Following test contains a known problem that will be checked again
--- echo FIXME: after WL#2984 has been completed:
--- echo FIXME: decimal digits shown although not defined
-
CALL sp6(-1.00e+09);
--disable_warnings
@@ -21326,10 +21449,6 @@ BEGIN
END//
delimiter ;//
--- echo FIXME: Following test contains a known problem that will be checked again
--- echo FIXME: after WL#2984 has been completed:
--- echo FIXME: decimal digits shown although not defined
-
CALL sp9(-1.00e+09);
--disable_warnings
@@ -21344,10 +21463,6 @@ BEGIN
END//
delimiter ;//
--- echo FIXME: Following test contains a known problem that will be checked again
--- echo FIXME: after WL#2984 has been completed:
--- echo FIXME: decimal digits shown although not defined
-
CALL sp10(-1.00e+09);
--disable_warnings
@@ -21362,10 +21477,6 @@ BEGIN
END//
delimiter ;//
--- echo FIXME: Following test contains a known problem that will be checked again
--- echo FIXME: after WL#2984 has been completed:
--- echo FIXME: decimal digits shown although not defined
-
CALL sp11(99999999999);
--disable_warnings
@@ -21380,10 +21491,6 @@ BEGIN
END//
delimiter ;//
--- echo FIXME: Following test contains a known problem that will be checked again
--- echo FIXME: after WL#2984 has been completed:
--- echo FIXME: decimal digits shown although not defined
-
CALL sp12(999999999);
--disable_warnings
@@ -21398,10 +21505,6 @@ BEGIN
END//
delimiter ;//
--- echo FIXME: Following test contains a known problem that will be checked again
--- echo FIXME: after WL#2984 has been completed:
--- echo FIXME: decimal digits shown although not defined
-
CALL sp13(-1.00e+09);
--disable_warnings
@@ -21416,10 +21519,6 @@ BEGIN
END//
delimiter ;//
--- echo FIXME: Following test contains a known problem that will be checked again
--- echo FIXME: after WL#2984 has been completed:
--- echo FIXME: wrong number of decimal digits shown
-
CALL sp14(-1.00e+21);
@@ -21435,10 +21534,6 @@ BEGIN
END//
delimiter ;//
--- echo FIXME: Following test contains a known problem that will be checked again
--- echo FIXME: after WL#2984 has been completed:
--- echo FIXME: wrong number of decimal digits shown
-
CALL sp15(1.00e+16);
@@ -21454,10 +21549,6 @@ BEGIN
END//
delimiter ;//
--- echo FIXME: Following test contains a known problem that will be checked again
--- echo FIXME: after WL#2984 has been completed:
--- echo FIXME: wrong number of decimal digits shown
-
CALL sp16(1.00e+16);
@@ -21473,10 +21564,6 @@ BEGIN
END//
delimiter ;//
--- echo FIXME: Following test contains a known problem that will be checked again
--- echo FIXME: after WL#2984 has been completed:
--- echo FIXME: wrong number of decimal digits shown
-
CALL sp17(-1.00e+21);
--disable_warnings
@@ -21491,8 +21578,7 @@ BEGIN
END//
delimiter ;//
-# hpux11
-#CALL sp18_d(-1.00e+30);
+CALL sp18_d(-1.00e+30);
eval CALL sp18_d( $minus_30 );
--disable_warnings
@@ -21507,10 +21593,9 @@ BEGIN
END//
delimiter ;//
-# hpux11
-#CALL sp19_du(1.00e+20);
+CALL sp19_du(1.00e+20);
eval CALL sp19_du( $plus_20 );
-#CALL sp19_du(1.00e+24);
+CALL sp19_du(1.00e+24);
eval CALL sp19_du( $plus_24 );
--disable_warnings
@@ -21525,14 +21610,9 @@ BEGIN
END//
delimiter ;//
--- echo FIXME: Following test contains a known problem that will be checked again
--- echo FIXME: after WL#2984 has been completed:
--- echo FIXME: decimal digits shown although not defined
-
-# hpux11
-#CALL sp20_duz(1.00e+20);
+CALL sp20_duz(1.00e+20);
eval CALL sp20_duz( $plus_20 );
-#CALL sp20_duz(1.00e+24);
+CALL sp20_duz(1.00e+24);
eval CALL sp20_duz( $plus_24 );
--disable_warnings
@@ -21547,10 +21627,6 @@ BEGIN
END//
delimiter ;//
--- echo FIXME: Following test contains a known problem that will be checked again
--- echo FIXME: after WL#2984 has been completed:
--- echo FIXME: decimal digits shown although not defined
-
CALL sp21(1.00e+00);
--disable_warnings
@@ -21565,10 +21641,6 @@ BEGIN
END//
delimiter ;//
--- echo FIXME: Following test contains a known problem that will be checked again
--- echo FIXME: after WL#2984 has been completed:
--- echo FIXME: decimal digits shown although not defined
-
CALL sp22(1.00e+00);
--disable_warnings
@@ -21583,10 +21655,6 @@ BEGIN
END//
delimiter ;//
--- echo FIXME: Following test contains a known problem that will be checked again
--- echo FIXME: after WL#2984 has been completed:
--- echo FIXME: decimal digits shown although not defined
-
CALL sp23(1.00e+00);
--disable_warnings
@@ -21601,10 +21669,6 @@ BEGIN
END//
delimiter ;//
--- echo FIXME: Following test contains a known problem that will be checked again
--- echo FIXME: after WL#2984 has been completed:
--- echo FIXME: decimal digits shown although not defined
-
CALL sp24(-1.00e+09);
--disable_warnings
@@ -22196,8 +22260,7 @@ BEGIN
END//
delimiter ;//
-# hpux11
-#CALL sp66_n(-1e+36);
+CALL sp66_n(-1e+36);
eval CALL sp66_n( $minus_36 );
--disable_warnings
@@ -22212,8 +22275,7 @@ BEGIN
END//
delimiter ;//
-# hpux11
-#CALL sp67_nu(1e+36);
+CALL sp67_nu(1e+36);
eval CALL sp67_nu( $plus_36 );
@@ -22229,8 +22291,7 @@ BEGIN
END//
delimiter ;//
-# hpux11
-#CALL sp68_nuz(1e+36);
+CALL sp68_nuz(1e+36);
eval CALL sp68_nuz( $plus_36 );
@@ -22246,8 +22307,7 @@ BEGIN
END//
delimiter ;//
-# hpux11
-#CALL sp69_n_z(-1e+36);
+CALL sp69_n_z(-1e+36);
eval CALL sp69_n_z( $minus_36 );
@@ -22263,8 +22323,7 @@ BEGIN
END//
delimiter ;//
-# hpux11
-#CALL sp70_n(-1e+40);
+CALL sp70_n(-1e+40);
eval CALL sp70_n( $minus_40 );
@@ -22280,8 +22339,7 @@ BEGIN
END//
delimiter ;//
-# hpux11
-#CALL sp71_nu(1.00e+40);
+CALL sp71_nu(1.00e+40);
eval CALL sp71_nu( $plus_40 );
@@ -22297,8 +22355,7 @@ BEGIN
END//
delimiter ;//
-# hpux11
-#CALL sp72_nuz(1.00e+40);
+CALL sp72_nuz(1.00e+40);
eval CALL sp72_nuz( $plus_40 );
@@ -22314,8 +22371,7 @@ BEGIN
END//
delimiter ;//
-# hpux11
-#CALL sp73_n_z(1.00e+40);
+CALL sp73_n_z(1.00e+40);
eval CALL sp73_n_z( $plus_40 );
@@ -22533,31 +22589,27 @@ CALL sp88(-101);
DROP PROCEDURE IF EXISTS sp89;
--enable_warnings
-#FIXME: check why this is switched off
-#delimiter //;
-#CREATE PROCEDURE sp89( f1 enum("1enum", "2enum"))
-#BEGIN
-# if(f1 == "1enum") { set f1 = "2enum"; } else { set f1 = "1enum"; }
-# SELECT f1;
-#END//
-#delimiter ;//
+delimiter //;
+CREATE PROCEDURE sp89( f1 enum('1enum', '2enum'))
+BEGIN
+ IF f1 = '1enum' THEN set f1 = '2enum'; ELSE set f1 = '1enum'; END IF;
+END//
+delimiter ;//
-#CALL sp89( '1enum');
+CALL sp89( '1enum');
--disable_warnings
DROP PROCEDURE IF EXISTS sp90;
--enable_warnings
-#FIXME: check why this is switched off
-#delimiter //;
-#CREATE PROCEDURE sp90( f1 set("1set", "2set"))
-#BEGIN
-# if(f1 == "1set") { set f1 = "2set"; } else { set f1 = "1set"; }
-# SELECT f1;
-#END//
-#delimiter ;//
+delimiter //;
+CREATE PROCEDURE sp90( f1 set('1set', '2set'))
+BEGIN
+ IF f1 = '1set' THEN set f1 = '2set'; ELSE set f1 = '1set'; END IF;
+END//
+delimiter ;//
-#CALL sp90( '1set');
+CALL sp90( '1set');
--disable_warnings
DROP PROCEDURE IF EXISTS sp91;
@@ -23094,10 +23146,6 @@ BEGIN
END//
delimiter ;//
-#let $message= FIXME: CALL of spexecute07 temporarily switched off due to differences
-# FIXME: between Linux and Solaris;
-#--source include/show_msg80.inc
-#FIXME CALL spexecute07();
CALL spexecute07();
DROP PROCEDURE spexecute07;
DROP PROCEDURE sp07;
@@ -24864,7 +24912,6 @@ BEGIN
END//
delimiter ;//
-#FIXME: check later again with E+40
CALL spexecute52();
DROP PROCEDURE spexecute52;
DROP PROCEDURE sp52;
@@ -24903,7 +24950,6 @@ BEGIN
END//
delimiter ;//
-#FIXME: check later again with E+40
CALL spexecute53();
DROP PROCEDURE spexecute53;
DROP PROCEDURE sp53;
@@ -24942,7 +24988,6 @@ BEGIN
END//
delimiter ;//
-#FIXME: check later again with E+40
CALL spexecute54();
DROP PROCEDURE spexecute54;
DROP PROCEDURE sp54;
@@ -24981,7 +25026,6 @@ BEGIN
END//
delimiter ;//
-#FIXME: check later again with E+40
CALL spexecute55();
DROP PROCEDURE spexecute55;
DROP PROCEDURE sp55;
@@ -25516,7 +25560,6 @@ BEGIN
END//
delimiter ;//
-#FIXME: hpux11 - check later again with E+40
CALL spexecute69();
DROP PROCEDURE spexecute69;
DROP PROCEDURE sp69;
@@ -25593,7 +25636,6 @@ BEGIN
END//
delimiter ;//
-#FIXME: hpux11 - check later again with E+40
CALL spexecute71();
DROP PROCEDURE spexecute71;
DROP PROCEDURE sp71;
@@ -26394,7 +26436,6 @@ BEGIN
END//
delimiter ;//
-#FIXME: hpux11 - check later again with E+40
CALL spexecute92();
DROP PROCEDURE spexecute92;
DROP PROCEDURE sp92;
@@ -26433,7 +26474,6 @@ BEGIN
END//
delimiter ;//
-#FIXME: hpux11 - check later again with E+40
CALL spexecute93();
DROP PROCEDURE spexecute93;
DROP PROCEDURE sp93;
@@ -26839,8 +26879,6 @@ check for combination of server sql modes
DROP PROCEDURE IF EXISTS sp4;
--enable_warnings
-#FIXME 4.7.4: check it is correct that having a blank after the comma lets this fail:
---error 1231
set @@sql_mode = 'ansi, error_for_division_by_zero';
# now set the corrent value:
@@ -26986,7 +27024,7 @@ BEGIN
END//
delimiter ;//
---error 1305
+--error ER_SP_DOES_NOT_EXIST
SHOW CREATE FUNCTION sp6;
# cleanup
@@ -27031,7 +27069,7 @@ let $message= Testcase 4.8.5:;
DROP PROCEDURE IF EXISTS sp7;
--enable_warnings
---error 1305
+--error ER_SP_DOES_NOT_EXIST
show CREATE PROCEDURE sp7;
@@ -27068,7 +27106,7 @@ CREATE FUNCTION fn1 (i1 real) returns real
END//
delimiter ;//
---error 1305
+--error ER_SP_DOES_NOT_EXIST
show CREATE PROCEDURE fn1;
# cleanup
@@ -27153,7 +27191,7 @@ CREATE FUNCTION fn1 (x int) returns int
END//
delimiter ;//
---error 1305
+--error ER_SP_DOES_NOT_EXIST
show CREATE PROCEDURE fn1;
# cleanup
@@ -27181,7 +27219,7 @@ delimiter ;//
DROP FUNCTION fn1;
---error 1305
+--error ER_SP_DOES_NOT_EXIST
show CREATE FUNCTION fn1;
@@ -27196,7 +27234,7 @@ let $message= Testcase 4.8.13:;
--disable_warnings
DROP FUNCTION IF EXISTS f1000;
---enable warnings
+--enable_warnings
SHOW FUNCTION STATUS LIKE 'f1000';
@@ -27210,7 +27248,7 @@ let $message= Testcase 4.8.14:;
--disable_warnings
DROP PROCEDURE IF EXISTS sp1;
---enable_warnibgs
+--enable_warnings
delimiter //;
CREATE PROCEDURE sp1()
@@ -27219,7 +27257,7 @@ BEGIN
END//
delimiter ;//
---error 1305
+--error ER_SP_DOES_NOT_EXIST
show CREATE FUNCTION sp1;
# cleanup
@@ -27341,7 +27379,6 @@ delimiter ;//
alter function fn1 sql security invoker;
alter function fn1 comment 'this is a function 3242#@%$#@';
-#FIXME: check why here no rows are shown
--replace_column 5 modified 6 created
show function status like 'fn1';
@@ -27397,7 +27434,7 @@ delimiter ;//
DROP PROCEDURE sp6;
---error 1305
+--error ER_SP_DOES_NOT_EXIST
show CREATE PROCEDURE sp6;
# ------------------------------------------------------------------------------
@@ -27446,7 +27483,7 @@ delimiter ;//
DROP FUNCTION fn1;
---error 1305
+--error ER_SP_DOES_NOT_EXIST
show CREATE FUNCTION fn1;
@@ -27471,7 +27508,6 @@ delimiter ;//
DROP FUNCTION fn1;
-#FIXME: check why here no rows are shown
--replace_column 5 modified 6 created
SHOW FUNCTION STATUS LIKE 'fn1';
@@ -27504,6 +27540,7 @@ BEGIN
END//
delimiter ;//
+--sorted_result
CALL sp6 (10, 20, 30, 40, 50);
# cleanup
@@ -27640,9 +27677,6 @@ BEGIN
END//
delimiter ;//
-#FIXME Bug: (Bug#9079)
-# suppressed: currenlty the table creation from within sproc fails!
-#FIXME check why this NOW works--error 1146
CALL sp6 (10, 20, 30, 40, 50);
# cleanup
@@ -27661,8 +27695,7 @@ let $message= Testcase 4.9.6:;
DROP FUNCTION IF EXISTS fn1;
delimiter //;
-#FIXME: check this is OK: failed: 1415: Not allowed to return a result set from a function
---error 1415
+--error ER_SP_NO_RETSET
CREATE FUNCTION fn1(i1 longtext) returns longtext
BEGIN
SELECT * from t9 limit 0, 100;
@@ -27677,8 +27710,7 @@ create table res_t9 (f1 int, f2 char(25), f3 int);
insert into res_t9 values (10, 'abc', 20);
delimiter //;
-#FIXME: check this is OK: failed: 1422: Explicit or implicit commit is not allowed in stored function or trigger.
---error 1422
+--error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
CREATE FUNCTION fn1(i1 longtext) returns longtext
BEGIN
delete from res_t9;
@@ -27691,8 +27723,7 @@ DROP FUNCTION IF EXISTS fn1;
drop table IF EXISTS res_t9;
delimiter //;
-#FIXME: check this is OK: failed: 1422: Explicit or implicit commit is not allowed in stored function or trigger.
---error 1422
+--error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
CREATE FUNCTION fn1(i1 longtext) returns longtext
BEGIN
create table res_t9 (f1 longtext, f2 longblob, f3 real);
@@ -27707,8 +27738,7 @@ drop table IF EXISTS res_t9;
create table res_t9 (f1 int, f2 char(25), f3 int);
delimiter //;
-#FIXME: check this is OK: failed: 1422: Explicit or implicit commit is not allowed in stored function or trigger.
---error 1422
+--error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
CREATE FUNCTION fn1(i1 longtext) returns longtext
BEGIN
insert into res_t9 values (100, 'abc', 300);
@@ -27724,8 +27754,7 @@ create table res_t9 (f1 int, f2 char(25), f3 int);
insert into res_t9 values (10, 'abc', 20);
delimiter //;
-#FIXME: check this is OK: failed: 1422: Explicit or implicit commit is not allowed in stored function or trigger.
---error 1422
+--error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
CREATE FUNCTION fn1(i1 longtext) returns longtext
BEGIN
update res_t9 set f1 = 20;
@@ -28130,7 +28159,6 @@ let $message= Testcase 4.11.11:;
--source include/show_msg80.inc
# testcase: verify undo handler for sql state 42000 (er_sp_wrong_no_of_args)
-# ?????????????
--disable_warnings
DROP PROCEDURE IF EXISTS h1;
@@ -28236,10 +28264,14 @@ BEGIN
END//
delimiter ;//
+CALL h1();
+
# cleanup
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+--disable_warnings
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
+--enable_warnings
@@ -28279,10 +28311,14 @@ BEGIN
END//
delimiter ;//
+CALL h1();
+
# cleanup
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+--disable_warnings
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
+--enable_warnings
@@ -28324,10 +28360,14 @@ BEGIN
END//
delimiter ;//
+CALL h1();
+
# cleanup
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+--disable_warnings
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
+--enable_warnings
# ------------------------------------------------------------------------------
@@ -28368,12 +28408,14 @@ BEGIN
END//
delimiter ;//
-CALL h1()
+CALL h1();
# cleanup
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+--disable_warnings
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
+--enable_warnings
# ------------------------------------------------------------------------------
@@ -28413,9 +28455,11 @@ delimiter ;//
CALL h1();
# cleanup
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+--disable_warnings
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
+--enable_warnings
# ------------------------------------------------------------------------------
@@ -28455,9 +28499,11 @@ delimiter ;//
CALL h1();
# cleanup
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+--disable_warnings
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
+--enable_warnings
# ------------------------------------------------------------------------------
let $message= Testcase 4.11.19:;
@@ -28498,9 +28544,11 @@ delimiter ;//
CALL h1();
# cleanup
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+--disable_warnings
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
+--enable_warnings
# ------------------------------------------------------------------------------
let $message= Testcase 4.11.20:;
@@ -28541,9 +28589,11 @@ delimiter ;//
CALL h1();
# cleanup
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+--disable_warnings
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
+--enable_warnings
# ------------------------------------------------------------------------------
@@ -28583,9 +28633,11 @@ delimiter ;//
CALL h1();
# cleanup
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+--disable_warnings
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
+--enable_warnings
# ------------------------------------------------------------------------------
let $message= Testcase 4.11.22:;
@@ -28625,9 +28677,11 @@ delimiter ;//
CALL h1();
# cleanup
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+--disable_warnings
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
+--enable_warnings
# ------------------------------------------------------------------------------
let $message= Testcase 4.11.23:;
@@ -28668,9 +28722,11 @@ delimiter ;//
CALL h1();
# cleanup
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+--disable_warnings
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
+--enable_warnings
# ------------------------------------------------------------------------------
let $message= Testcase 4.11.24:;
@@ -28711,9 +28767,11 @@ delimiter ;//
CALL h1();
# cleanup
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+--disable_warnings
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
+--enable_warnings
# ------------------------------------------------------------------------------
let $message= Testcase 4.11.25:;
@@ -28751,9 +28809,11 @@ delimiter ;//
CALL h1();
# cleanup
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+--disable_warnings
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
+--enable_warnings
@@ -28793,9 +28853,11 @@ delimiter ;//
CALL h1();
# cleanup
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+--disable_warnings
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
+--enable_warnings
# ------------------------------------------------------------------------------
@@ -28834,9 +28896,11 @@ delimiter ;//
CALL h1();
# cleanup
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+--disable_warnings
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
+--enable_warnings
# ------------------------------------------------------------------------------
@@ -28875,9 +28939,11 @@ delimiter ;//
CALL h1();
# cleanup
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+--disable_warnings
+DROP PROCEDURE IF EXISTS h1;
+drop table IF EXISTS res_t1;
+drop table IF EXISTS res_t2;
+--enable_warnings
# ------------------------------------------------------------------------------
@@ -28919,9 +28985,11 @@ delimiter ;//
CALL h1();
# cleanup
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+--disable_warnings
+DROP PROCEDURE IF EXISTS h1;
+drop table IF EXISTS res_t1;
+drop table IF EXISTS res_t2;
+--enable_warnings
# ------------------------------------------------------------------------------
@@ -28963,9 +29031,11 @@ delimiter ;//
CALL h1();
# cleanup
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+--disable_warnings
+DROP PROCEDURE IF EXISTS h1;
+drop table IF EXISTS res_t1;
+drop table IF EXISTS res_t2;
+--enable_warnings
# ------------------------------------------------------------------------------
@@ -29007,9 +29077,11 @@ delimiter ;//
CALL h1();
# cleanup
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+--disable_warnings
+DROP PROCEDURE IF EXISTS h1;
+drop table IF EXISTS res_t1;
+drop table IF EXISTS res_t2;
+--enable_warnings
# ------------------------------------------------------------------------------
@@ -29051,9 +29123,11 @@ delimiter ;//
CALL h1();
# cleanup
-DROP PROCEDURE h1;
-drop table res_t1;
-drop table res_t2;
+--disable_warnings
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+DROP TABLE IF EXISTS res_t2;
+--enable_warnings
# ------------------------------------------------------------------------------
let $message= Testcase 4.11.33:;
@@ -29073,7 +29147,7 @@ drop table IF EXISTS res_t1;
insert into res_t1 values('c', 'd');
delimiter //;
---error 1332
+--error ER_SP_DUP_COND
CREATE PROCEDURE h1()
BEGIN
declare condname condition for sqlstate '20000';
@@ -29092,7 +29166,9 @@ END//
delimiter ;//
# cleanup
-drop table res_t1;
+--disable_warnings
+DROP TABLE IF EXISTS res_t1;
+--enable_warnings
# ------------------------------------------------------------------------------
@@ -29115,7 +29191,7 @@ insert into res_t1 values (1, 'a');
delimiter //;
---error 1407
+--error ER_SP_BAD_SQLSTATE
CREATE PROCEDURE h1 ()
begin1_label:BEGIN
declare condname1 condition for sqlstate '020';
@@ -29133,25 +29209,26 @@ begin1_label:BEGIN
END begin2_label;
END begin1_label//
-# FIXME: same statement except the 3 lines containing 'exit'
-#-# --error 1407
-#-# CREATE PROCEDURE h1 ()
-#-# begin1_label:BEGIN
-#-# declare condname1 condition for sqlstate '020';
-#-# declare condname2 condition for sqlstate 'wewe';
-#-# declare condname3 condition for 9999;
-#-# set @var2 = 1;
-#-# insert into res_t1 values (2, 'b');
-#-# begin2_label: BEGIN
-#-# declare continue handler for sqlstate '90000023 set @var3= 1;
-#-# set @var4 = 1;
-#-# insert into res_t1 values (3, 'c');
-#-# END begin2_label;
-#-# END begin1_label//
+--error ER_SP_BAD_SQLSTATE
+CREATE PROCEDURE h1 ()
+begin1_label:BEGIN
+ declare condname1 condition for sqlstate '020';
+ declare condname2 condition for sqlstate 'wewe';
+ declare condname3 condition for 9999;
+ set @var2 = 1;
+ insert into res_t1 values (2, 'b');
+ begin2_label: BEGIN
+ declare continue handler for sqlstate '90000023' set @var3= 1;
+ set @var4 = 1;
+ insert into res_t1 values (3, 'c');
+ END begin2_label;
+END begin1_label//
delimiter ;//
# cleanup
-drop table res_t1;
+--disable_warnings
+DROP TABLE IF EXISTS res_t1;
+--enable_warnings
# ------------------------------------------------------------------------------
@@ -29181,7 +29258,9 @@ END//
delimiter ;//
# cleanup
-DROP PROCEDURE h1;
+--disable_warnings
+DROP PROCEDURE IF EXISTS h1;
+--enable_warnings
@@ -29193,8 +29272,6 @@ let $message= Testcase 4.11.40:;
--source include/show_msg80.inc
# testcase: ensure that within the same scope, no two handlers may be declared for the same condition
-# Bug (
-
--disable_warnings
DROP PROCEDURE IF EXISTS h1;
@@ -29207,8 +29284,7 @@ drop table IF EXISTS res_t1;
# suppressed--error for having two similar handlers in the same scope
delimiter //;
-#FIXME 3.1.11.40: check whether error 1413 is OK
---error 1413
+--error ER_SP_DUP_HANDLER
CREATE PROCEDURE h1 ()
BEGIN
declare x1, x2, x3, x4, x5 int default 0;
@@ -29222,13 +29298,13 @@ BEGIN
END//
delimiter ;//
-#FIXME 3.1.11.40: CALL h1();
+#CALL h1();
# cleanup
--disable_warnings
DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
--enable_warnings
-drop table res_t1;
# ------------------------------------------------------------------------------
@@ -29237,13 +29313,11 @@ let $message= Testcase 4.11.41:;
# testcase: ensure that the declare handler for statement cannot declare a condition for the successful
# completion sqlstate: 00000.
-#FIXME Bug: (Bug#8759)
--disable_warnings
DROP PROCEDURE IF EXISTS h1;
--enable_warnings
-# supressed should actually fail --error
delimiter //;
CREATE PROCEDURE h1 ()
BEGIN
@@ -29258,8 +29332,12 @@ BEGIN
END//
delimiter ;//
+CALL h1();
+
# cleanup
+--disable_warnings
DROP PROCEDURE IF EXISTS h1;
+--enable_warnings
# ------------------------------------------------------------------------------
@@ -29287,7 +29365,7 @@ END//
delimiter ;//
# table doesn't exist
---error 1146
+--error ER_NO_SUCH_TABLE
CALL h1();
SELECT @done, @x;
@@ -29316,7 +29394,7 @@ END//
delimiter ;//
# table doesn't exist
---error 1146
+--error ER_NO_SUCH_TABLE
CALL h1();
SELECT @done, @x;
@@ -29329,8 +29407,10 @@ CALL h1();
SELECT @done, @x;
# cleanup
-DROP PROCEDURE h1;
-DROP TABLE res_t1;
+--disable_warnings
+DROP PROCEDURE IF EXISTS h1;
+DROP TABLE IF EXISTS res_t1;
+--enable_warnings
# ==============================================================================
diff --git a/mysql-test/suite/funcs_1/t/disabled.def b/mysql-test/suite/funcs_1/t/disabled.def
index 6833178a353..7eab49dfd62 100644
--- a/mysql-test/suite/funcs_1/t/disabled.def
+++ b/mysql-test/suite/funcs_1/t/disabled.def
@@ -10,6 +10,8 @@
#
##############################################################################
-innodb_storedproc: (changes of WL#2984, using storeproc_nn instead)
-memory_storedproc: (changes of WL#2984, using storeproc_nn instead)
-myisam_storedproc: (changes of WL#2984, using storeproc_nn instead)
+innodb_storedproc_06 : bug#33464 DROP FUNCTION let server hang
+myisam_storedproc_06 : bug#33464 DROP FUNCTION let server hang
+memory_storedproc_06 : bug#33464 DROP FUNCTION let server hang
+ndb_storedproc_06 : bug#33464 DROP FUNCTION let server hang
+ndb__datadict: 2007-10-08 mleich Bug#31421 funcs_1: ndb__datadict fails, discrepancy between scripts and expected results
diff --git a/mysql-test/suite/funcs_1/t/innodb__load.test b/mysql-test/suite/funcs_1/t/innodb__load.test
index d03672b31ff..388a3ee6f40 100644
--- a/mysql-test/suite/funcs_1/t/innodb__load.test
+++ b/mysql-test/suite/funcs_1/t/innodb__load.test
@@ -18,11 +18,9 @@ let $engine_type= innodb;
eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
-# FIXME Replace the following, when "if" for mysqltest is available
let $run= `SELECT @NO_REFRESH`;
-while ($run)
+if ($run)
{
-
# Create some objects needed in many testcases
USE test;
--source suite/funcs_1/include/innodb_tb1.inc
@@ -41,7 +39,5 @@ while ($run)
# These tables are needed for the stored procedure testscases
--source suite/funcs_1/include/sp_tb.inc
-
- let $run= 0;
}
diff --git a/mysql-test/suite/funcs_1/t/innodb_bitdata.test b/mysql-test/suite/funcs_1/t/innodb_bitdata.test
index 24d5f077d96..19a66f10732 100644
--- a/mysql-test/suite/funcs_1/t/innodb_bitdata.test
+++ b/mysql-test/suite/funcs_1/t/innodb_bitdata.test
@@ -18,16 +18,12 @@ let $engine_type= innodb;
eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
-# FIXME Replace the following, when "if" for mysqltest is available
let $run= `SELECT @NO_REFRESH = 0`;
-while ($run)
+if ($run)
{
-
# Create some objects needed in many testcases
USE test;
--source suite/funcs_1/include/innodb_tb4.inc
-
- let $run= 0;
}
--source suite/funcs_1/bitdata/bitdata_master.test
diff --git a/mysql-test/suite/funcs_1/t/innodb_cursors.test b/mysql-test/suite/funcs_1/t/innodb_cursors.test
index 8d77045f2e7..6a73cf64890 100644
--- a/mysql-test/suite/funcs_1/t/innodb_cursors.test
+++ b/mysql-test/suite/funcs_1/t/innodb_cursors.test
@@ -18,16 +18,12 @@ let $engine_type= innodb;
eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
-# FIXME Replace the following, when "if" for mysqltest is available
let $run= `SELECT @NO_REFRESH = 0`;
-while ($run)
+if ($run)
{
-
# Create some objects needed in many testcases
USE test;
--source suite/funcs_1/include/innodb_tb1.inc
-
- let $run= 0;
}
--source suite/funcs_1/cursors/cursors_master.test
diff --git a/mysql-test/suite/funcs_1/t/innodb_storedproc.test b/mysql-test/suite/funcs_1/t/innodb_storedproc.test
index cd94577e79b..a675d8e37ef 100644
--- a/mysql-test/suite/funcs_1/t/innodb_storedproc.test
+++ b/mysql-test/suite/funcs_1/t/innodb_storedproc.test
@@ -1,6 +1,9 @@
#### suite/funcs_1/t/innodb_storedproc.test
#
+--source include/have_innodb.inc
let $engine_type= innodb;
+--source suite/funcs_1/storedproc/load_sp_tb.inc
+
--source suite/funcs_1/storedproc/storedproc_master.inc
diff --git a/mysql-test/suite/funcs_1/t/innodb_trig_0102.test b/mysql-test/suite/funcs_1/t/innodb_trig_0102.test
index edd706b9e5d..426108de8be 100644
--- a/mysql-test/suite/funcs_1/t/innodb_trig_0102.test
+++ b/mysql-test/suite/funcs_1/t/innodb_trig_0102.test
@@ -18,16 +18,12 @@ let $engine_type= innodb;
eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
-# FIXME Replace the following, when "if" for mysqltest is available
let $run= `SELECT @NO_REFRESH = 0`;
-while ($run)
+if ($run)
{
-
# Create some objects needed in many testcases
USE test;
--source suite/funcs_1/include/innodb_tb3.inc
-
- let $run= 0;
}
--source suite/funcs_1/triggers/triggers_0102.inc
diff --git a/mysql-test/suite/funcs_1/t/innodb_trig_03.test b/mysql-test/suite/funcs_1/t/innodb_trig_03.test
index 5f931e1be47..a4c98609698 100644
--- a/mysql-test/suite/funcs_1/t/innodb_trig_03.test
+++ b/mysql-test/suite/funcs_1/t/innodb_trig_03.test
@@ -18,16 +18,12 @@ let $engine_type= innodb;
eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
-# FIXME Replace the following, when "if" for mysqltest is available
let $run= `SELECT @NO_REFRESH = 0`;
-while ($run)
+if ($run)
{
-
# Create some objects needed in many testcases
USE test;
--source suite/funcs_1/include/innodb_tb3.inc
-
- let $run= 0;
}
--source suite/funcs_1/triggers/triggers_03.inc
diff --git a/mysql-test/suite/funcs_1/t/innodb_trig_03e.test b/mysql-test/suite/funcs_1/t/innodb_trig_03e.test
index 242981e25fa..56024e422fe 100644
--- a/mysql-test/suite/funcs_1/t/innodb_trig_03e.test
+++ b/mysql-test/suite/funcs_1/t/innodb_trig_03e.test
@@ -18,14 +18,11 @@ let $engine_type= innodb;
eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
-# FIXME Replace the following, when "if" for mysqltest is available
let $run= `SELECT @NO_REFRESH = 0`;
-while ($run)
+if ($run)
{
-
# Create some objects needed in many testcases
USE test;
- let $run= 0;
}
--source suite/funcs_1/triggers/triggers_03e_db_level.inc
diff --git a/mysql-test/suite/funcs_1/t/innodb_trig_0407.test b/mysql-test/suite/funcs_1/t/innodb_trig_0407.test
index da8a074bab6..3035357cc0b 100644
--- a/mysql-test/suite/funcs_1/t/innodb_trig_0407.test
+++ b/mysql-test/suite/funcs_1/t/innodb_trig_0407.test
@@ -18,16 +18,12 @@ let $engine_type= innodb;
eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
-# FIXME Replace the following, when "if" for mysqltest is available
let $run= `SELECT @NO_REFRESH = 0`;
-while ($run)
+if ($run)
{
-
# Create some objects needed in many testcases
USE test;
--source suite/funcs_1/include/innodb_tb3.inc
-
- let $run= 0;
}
--source suite/funcs_1/triggers/triggers_0407.inc
diff --git a/mysql-test/suite/funcs_1/t/innodb_trig_08.test b/mysql-test/suite/funcs_1/t/innodb_trig_08.test
index 05aabe8b0f5..0f264abc13f 100644
--- a/mysql-test/suite/funcs_1/t/innodb_trig_08.test
+++ b/mysql-test/suite/funcs_1/t/innodb_trig_08.test
@@ -18,16 +18,12 @@ let $engine_type= innodb;
eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
-# FIXME Replace the following, when "if" for mysqltest is available
let $run= `SELECT @NO_REFRESH = 0`;
-while ($run)
+if ($run)
{
-
# Create some objects needed in many testcases
USE test;
--source suite/funcs_1/include/innodb_tb3.inc
-
- let $run= 0;
}
--source suite/funcs_1/triggers/triggers_08.inc
diff --git a/mysql-test/suite/funcs_1/t/innodb_trig_09.test b/mysql-test/suite/funcs_1/t/innodb_trig_09.test
index ac21142779e..7d651a11195 100644
--- a/mysql-test/suite/funcs_1/t/innodb_trig_09.test
+++ b/mysql-test/suite/funcs_1/t/innodb_trig_09.test
@@ -18,16 +18,12 @@ let $engine_type= innodb;
eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
-# FIXME Replace the following, when "if" for mysqltest is available
let $run= `SELECT @NO_REFRESH = 0`;
-while ($run)
+if ($run)
{
-
# Create some objects needed in many testcases
USE test;
--source suite/funcs_1/include/innodb_tb3.inc
-
- let $run= 0;
}
--source suite/funcs_1/triggers/triggers_09.inc
diff --git a/mysql-test/suite/funcs_1/t/innodb_trig_1011ext.test b/mysql-test/suite/funcs_1/t/innodb_trig_1011ext.test
index a507a488ca9..75980b3ab68 100644
--- a/mysql-test/suite/funcs_1/t/innodb_trig_1011ext.test
+++ b/mysql-test/suite/funcs_1/t/innodb_trig_1011ext.test
@@ -18,16 +18,12 @@ let $engine_type= innodb;
eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
-# FIXME Replace the following, when "if" for mysqltest is available
let $run= `SELECT @NO_REFRESH = 0`;
-while ($run)
+if ($run)
{
-
# Create some objects needed in many testcases
USE test;
--source suite/funcs_1/include/innodb_tb3.inc
-
- let $run= 0;
}
--source suite/funcs_1/triggers/triggers_1011ext.inc
diff --git a/mysql-test/suite/funcs_1/t/innodb_trig_frkey.test b/mysql-test/suite/funcs_1/t/innodb_trig_frkey.test
index e99273672cd..70d4cba14a3 100644
--- a/mysql-test/suite/funcs_1/t/innodb_trig_frkey.test
+++ b/mysql-test/suite/funcs_1/t/innodb_trig_frkey.test
@@ -18,16 +18,12 @@ let $engine_type= innodb;
eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
-# FIXME Replace the following, when "if" for mysqltest is available
let $run= `SELECT @NO_REFRESH = 0`;
-while ($run)
+if ($run)
{
-
# Create some objects needed in many testcases
USE test;
--source suite/funcs_1/include/innodb_tb3.inc
-
- let $run= 0;
}
--source suite/funcs_1/triggers/trig_frkey.inc
diff --git a/mysql-test/suite/funcs_1/t/innodb_views.test b/mysql-test/suite/funcs_1/t/innodb_views.test
index 1a835779762..6179d95e5ba 100644
--- a/mysql-test/suite/funcs_1/t/innodb_views.test
+++ b/mysql-test/suite/funcs_1/t/innodb_views.test
@@ -21,7 +21,6 @@ eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
let $run= `SELECT @NO_REFRESH = 0`;
if ($run)
{
-
# Create some objects needed in many testcases
USE test;
--source suite/funcs_1/include/innodb_tb2.inc
@@ -32,7 +31,6 @@ if ($run)
USE test1;
--source suite/funcs_1/include/innodb_tb2.inc
USE test;
-
}
--source suite/funcs_1/views/views_master.inc
diff --git a/mysql-test/suite/funcs_1/t/memory__load.test b/mysql-test/suite/funcs_1/t/memory__load.test
index 44bd054f420..340875a243a 100644
--- a/mysql-test/suite/funcs_1/t/memory__load.test
+++ b/mysql-test/suite/funcs_1/t/memory__load.test
@@ -16,11 +16,9 @@ let $engine_type= memory;
eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
-# FIXME Replace the following, when "if" for mysqltest is available
let $run= `SELECT @NO_REFRESH`;
-while ($run)
+if ($run)
{
-
# Create some objects needed in many testcases
USE test;
--source suite/funcs_1/include/memory_tb1.inc
@@ -39,7 +37,5 @@ while ($run)
# These tables are needed for the stored procedure testscases
--source suite/funcs_1/include/sp_tb.inc
-
- let $run= 0;
}
diff --git a/mysql-test/suite/funcs_1/t/memory_bitdata.test b/mysql-test/suite/funcs_1/t/memory_bitdata.test
index 3aa30c2d835..faef96a2c3a 100644
--- a/mysql-test/suite/funcs_1/t/memory_bitdata.test
+++ b/mysql-test/suite/funcs_1/t/memory_bitdata.test
@@ -16,16 +16,12 @@ let $engine_type= memory;
eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
-# FIXME Replace the following, when "if" for mysqltest is available
let $run= `SELECT @NO_REFRESH = 0`;
-while ($run)
+if ($run)
{
-
# Create some objects needed in many testcases
USE test;
--source suite/funcs_1/include/memory_tb4.inc
-
- let $run= 0;
}
--source suite/funcs_1/bitdata/bitdata_master.test
diff --git a/mysql-test/suite/funcs_1/t/memory_cursors.test b/mysql-test/suite/funcs_1/t/memory_cursors.test
index 1361c83ecb0..ef33d1776bf 100644
--- a/mysql-test/suite/funcs_1/t/memory_cursors.test
+++ b/mysql-test/suite/funcs_1/t/memory_cursors.test
@@ -16,16 +16,12 @@ let $engine_type= memory;
eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
-# FIXME Replace the following, when "if" for mysqltest is available
let $run= `SELECT @NO_REFRESH = 0`;
-while ($run)
+if($run)
{
-
# Create some objects needed in many testcases
USE test;
--source suite/funcs_1/include/memory_tb1.inc
-
- let $run= 0;
}
--source suite/funcs_1/cursors/cursors_master.test
diff --git a/mysql-test/suite/funcs_1/t/memory_storedproc.test b/mysql-test/suite/funcs_1/t/memory_storedproc.test
index df73fe6815b..405f4d49fd1 100644
--- a/mysql-test/suite/funcs_1/t/memory_storedproc.test
+++ b/mysql-test/suite/funcs_1/t/memory_storedproc.test
@@ -3,4 +3,6 @@
let $engine_type= memory;
+--source suite/funcs_1/storedproc/load_sp_tb.inc
+
--source suite/funcs_1/storedproc/storedproc_master.inc
diff --git a/mysql-test/suite/funcs_1/t/memory_trig_0102.test b/mysql-test/suite/funcs_1/t/memory_trig_0102.test
index efa739cfb14..a24afb54754 100644
--- a/mysql-test/suite/funcs_1/t/memory_trig_0102.test
+++ b/mysql-test/suite/funcs_1/t/memory_trig_0102.test
@@ -16,16 +16,12 @@ let $engine_type= memory;
eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
-# FIXME Replace the following, when "if" for mysqltest is available
let $run= `SELECT @NO_REFRESH = 0`;
-while ($run)
+if($run)
{
-
# Create some objects needed in many testcases
USE test;
--source suite/funcs_1/include/memory_tb3.inc
-
- let $run= 0;
}
--source suite/funcs_1/triggers/triggers_0102.inc
diff --git a/mysql-test/suite/funcs_1/t/memory_trig_03.test b/mysql-test/suite/funcs_1/t/memory_trig_03.test
index 76980b6b1b0..4f4b7440213 100644
--- a/mysql-test/suite/funcs_1/t/memory_trig_03.test
+++ b/mysql-test/suite/funcs_1/t/memory_trig_03.test
@@ -16,16 +16,12 @@ let $engine_type= memory;
eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
-# FIXME Replace the following, when "if" for mysqltest is available
let $run= `SELECT @NO_REFRESH = 0`;
-while ($run)
+if($run)
{
-
# Create some objects needed in many testcases
USE test;
--source suite/funcs_1/include/memory_tb3.inc
-
- let $run= 0;
}
--source suite/funcs_1/triggers/triggers_03.inc
diff --git a/mysql-test/suite/funcs_1/t/memory_trig_03e.test b/mysql-test/suite/funcs_1/t/memory_trig_03e.test
index 58b2eade4a1..6a172df4580 100644
--- a/mysql-test/suite/funcs_1/t/memory_trig_03e.test
+++ b/mysql-test/suite/funcs_1/t/memory_trig_03e.test
@@ -16,14 +16,11 @@ let $engine_type= memory;
eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
-# FIXME Replace the following, when "if" for mysqltest is available
let $run= `SELECT @NO_REFRESH = 0`;
-while ($run)
+if ($run)
{
-
# Create some objects needed in many testcases
USE test;
- let $run= 0;
}
--source suite/funcs_1/triggers/triggers_03e_db_level.inc
diff --git a/mysql-test/suite/funcs_1/t/memory_trig_0407.test b/mysql-test/suite/funcs_1/t/memory_trig_0407.test
index 05217a7f97f..ac36b2f5a99 100644
--- a/mysql-test/suite/funcs_1/t/memory_trig_0407.test
+++ b/mysql-test/suite/funcs_1/t/memory_trig_0407.test
@@ -16,16 +16,12 @@ let $engine_type= memory;
eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
-# FIXME Replace the following, when "if" for mysqltest is available
let $run= `SELECT @NO_REFRESH = 0`;
-while ($run)
+if ($run)
{
-
# Create some objects needed in many testcases
USE test;
--source suite/funcs_1/include/memory_tb3.inc
-
- let $run= 0;
}
--source suite/funcs_1/triggers/triggers_0407.inc
diff --git a/mysql-test/suite/funcs_1/t/memory_trig_08.test b/mysql-test/suite/funcs_1/t/memory_trig_08.test
index 8caae1ec45f..e857be59dee 100644
--- a/mysql-test/suite/funcs_1/t/memory_trig_08.test
+++ b/mysql-test/suite/funcs_1/t/memory_trig_08.test
@@ -16,16 +16,12 @@ let $engine_type= memory;
eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
-# FIXME Replace the following, when "if" for mysqltest is available
let $run= `SELECT @NO_REFRESH = 0`;
-while ($run)
+if ($run)
{
-
# Create some objects needed in many testcases
USE test;
--source suite/funcs_1/include/memory_tb3.inc
-
- let $run= 0;
}
--source suite/funcs_1/triggers/triggers_08.inc
diff --git a/mysql-test/suite/funcs_1/t/memory_trig_09.test b/mysql-test/suite/funcs_1/t/memory_trig_09.test
index 95a7fefbe90..370e51d0d39 100644
--- a/mysql-test/suite/funcs_1/t/memory_trig_09.test
+++ b/mysql-test/suite/funcs_1/t/memory_trig_09.test
@@ -16,16 +16,12 @@ let $engine_type= memory;
eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
-# FIXME Replace the following, when "if" for mysqltest is available
let $run= `SELECT @NO_REFRESH = 0`;
-while ($run)
+if ($run)
{
-
# Create some objects needed in many testcases
USE test;
--source suite/funcs_1/include/memory_tb3.inc
-
- let $run= 0;
}
--source suite/funcs_1/triggers/triggers_09.inc
diff --git a/mysql-test/suite/funcs_1/t/memory_trig_1011ext.test b/mysql-test/suite/funcs_1/t/memory_trig_1011ext.test
index 726b878854e..3547fd7de9a 100644
--- a/mysql-test/suite/funcs_1/t/memory_trig_1011ext.test
+++ b/mysql-test/suite/funcs_1/t/memory_trig_1011ext.test
@@ -16,16 +16,12 @@ let $engine_type= memory;
eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
-# FIXME Replace the following, when "if" for mysqltest is available
let $run= `SELECT @NO_REFRESH = 0`;
-while ($run)
+if ($run)
{
-
# Create some objects needed in many testcases
USE test;
--source suite/funcs_1/include/memory_tb3.inc
-
- let $run= 0;
}
--source suite/funcs_1/triggers/triggers_1011ext.inc
diff --git a/mysql-test/suite/funcs_1/t/memory_views.test b/mysql-test/suite/funcs_1/t/memory_views.test
index 303d0bb2ac1..eab1800ca48 100644
--- a/mysql-test/suite/funcs_1/t/memory_views.test
+++ b/mysql-test/suite/funcs_1/t/memory_views.test
@@ -19,7 +19,6 @@ eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
let $run= `SELECT @NO_REFRESH = 0`;
if ($run)
{
-
# Create some objects needed in many testcases
USE test;
--source suite/funcs_1/include/memory_tb2.inc
@@ -30,7 +29,6 @@ if ($run)
USE test1;
--source suite/funcs_1/include/memory_tb2.inc
USE test;
-
}
--source suite/funcs_1/views/views_master.inc
diff --git a/mysql-test/suite/funcs_1/t/myisam__load.test b/mysql-test/suite/funcs_1/t/myisam__load.test
index b63044f128c..6cac47174cb 100644
--- a/mysql-test/suite/funcs_1/t/myisam__load.test
+++ b/mysql-test/suite/funcs_1/t/myisam__load.test
@@ -16,11 +16,9 @@ let $engine_type= myisam;
eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
-# FIXME Replace the following, when "if" for mysqltest is available
let $run= `SELECT @NO_REFRESH`;
-while ($run)
+if ($run)
{
-
# Create some objects needed in many testcases
USE test;
--source suite/funcs_1/include/myisam_tb1.inc
@@ -39,7 +37,5 @@ while ($run)
# These tables are needed for the stored procedure testscases
--source suite/funcs_1/include/sp_tb.inc
-
- let $run= 0;
}
diff --git a/mysql-test/suite/funcs_1/t/myisam_bitdata.test b/mysql-test/suite/funcs_1/t/myisam_bitdata.test
index 7ee15e02ea0..cfcd2faece4 100644
--- a/mysql-test/suite/funcs_1/t/myisam_bitdata.test
+++ b/mysql-test/suite/funcs_1/t/myisam_bitdata.test
@@ -16,17 +16,14 @@ let $engine_type= myisam;
eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
-# FIXME Replace the following, when "if" for mysqltest is available
let $run= `SELECT @NO_REFRESH = 0`;
-while ($run)
+if ($run)
{
-
# Create some objects needed in many testcases
USE test;
--source suite/funcs_1/include/myisam_tb4.inc
-
- let $run= 0;
}
--source suite/funcs_1/bitdata/bitdata_master.test
+
diff --git a/mysql-test/suite/funcs_1/t/myisam_cursors.test b/mysql-test/suite/funcs_1/t/myisam_cursors.test
index 841903148cd..4b23ecba610 100644
--- a/mysql-test/suite/funcs_1/t/myisam_cursors.test
+++ b/mysql-test/suite/funcs_1/t/myisam_cursors.test
@@ -16,9 +16,8 @@ let $engine_type= myisam;
eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
-# FIXME Replace the following, when "if" for mysqltest is available
let $run= `SELECT @NO_REFRESH = 0`;
-while ($run)
+if ($run)
{
# Create some objects needed in many testcases
diff --git a/mysql-test/suite/funcs_1/t/myisam_storedproc.test b/mysql-test/suite/funcs_1/t/myisam_storedproc.test
index 64fba295907..3925775d4e1 100644
--- a/mysql-test/suite/funcs_1/t/myisam_storedproc.test
+++ b/mysql-test/suite/funcs_1/t/myisam_storedproc.test
@@ -3,4 +3,6 @@
let $engine_type= myisam;
+--source suite/funcs_1/storedproc/load_sp_tb.inc
+
--source suite/funcs_1/storedproc/storedproc_master.inc
diff --git a/mysql-test/suite/funcs_1/t/myisam_trig_0102.test b/mysql-test/suite/funcs_1/t/myisam_trig_0102.test
index 77bde5f99ef..7cba273a4b1 100644
--- a/mysql-test/suite/funcs_1/t/myisam_trig_0102.test
+++ b/mysql-test/suite/funcs_1/t/myisam_trig_0102.test
@@ -16,16 +16,12 @@ let $engine_type= myisam;
eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
-# FIXME Replace the following, when "if" for mysqltest is available
let $run= `SELECT @NO_REFRESH = 0`;
-while ($run)
+if ($run)
{
-
# Create some objects needed in many testcases
USE test;
--source suite/funcs_1/include/myisam_tb3.inc
-
- let $run= 0;
}
--source suite/funcs_1/triggers/triggers_0102.inc
diff --git a/mysql-test/suite/funcs_1/t/myisam_trig_03.test b/mysql-test/suite/funcs_1/t/myisam_trig_03.test
index 6edaaf7d14c..2e14cc7a28f 100644
--- a/mysql-test/suite/funcs_1/t/myisam_trig_03.test
+++ b/mysql-test/suite/funcs_1/t/myisam_trig_03.test
@@ -16,17 +16,14 @@ let $engine_type= myisam;
eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
-# FIXME Replace the following, when "if" for mysqltest is available
let $run= `SELECT @NO_REFRESH = 0`;
-while ($run)
+if ($run)
{
-
# Create some objects needed in many testcases
USE test;
--source suite/funcs_1/include/myisam_tb3.inc
-
- let $run= 0;
}
--source suite/funcs_1/triggers/triggers_03.inc
+
diff --git a/mysql-test/suite/funcs_1/t/myisam_trig_03e.test b/mysql-test/suite/funcs_1/t/myisam_trig_03e.test
index b0bc4a495ea..a299f226a9a 100644
--- a/mysql-test/suite/funcs_1/t/myisam_trig_03e.test
+++ b/mysql-test/suite/funcs_1/t/myisam_trig_03e.test
@@ -16,14 +16,11 @@ let $engine_type= myisam;
eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
-# FIXME Replace the following, when "if" for mysqltest is available
let $run= `SELECT @NO_REFRESH = 0`;
-while ($run)
+if ($run)
{
-
# Create some objects needed in many testcases
USE test;
- let $run= 0;
}
--source suite/funcs_1/triggers/triggers_03e_db_level.inc
diff --git a/mysql-test/suite/funcs_1/t/myisam_trig_0407.test b/mysql-test/suite/funcs_1/t/myisam_trig_0407.test
index a28959b407e..90eb4f75213 100644
--- a/mysql-test/suite/funcs_1/t/myisam_trig_0407.test
+++ b/mysql-test/suite/funcs_1/t/myisam_trig_0407.test
@@ -16,17 +16,14 @@ let $engine_type= myisam;
eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
-# FIXME Replace the following, when "if" for mysqltest is available
let $run= `SELECT @NO_REFRESH = 0`;
-while ($run)
+if ($run)
{
-
# Create some objects needed in many testcases
USE test;
--source suite/funcs_1/include/myisam_tb3.inc
-
- let $run= 0;
}
--source suite/funcs_1/triggers/triggers_0407.inc
+
diff --git a/mysql-test/suite/funcs_1/t/myisam_trig_08.test b/mysql-test/suite/funcs_1/t/myisam_trig_08.test
index dda01314052..5ff16ee5190 100644
--- a/mysql-test/suite/funcs_1/t/myisam_trig_08.test
+++ b/mysql-test/suite/funcs_1/t/myisam_trig_08.test
@@ -16,17 +16,14 @@ let $engine_type= myisam;
eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
-# FIXME Replace the following, when "if" for mysqltest is available
let $run= `SELECT @NO_REFRESH = 0`;
-while ($run)
+if($run)
{
-
# Create some objects needed in many testcases
USE test;
--source suite/funcs_1/include/myisam_tb3.inc
-
- let $run= 0;
}
--source suite/funcs_1/triggers/triggers_08.inc
+
diff --git a/mysql-test/suite/funcs_1/t/myisam_trig_09.test b/mysql-test/suite/funcs_1/t/myisam_trig_09.test
index 9f2c932e608..8bd041b31e5 100644
--- a/mysql-test/suite/funcs_1/t/myisam_trig_09.test
+++ b/mysql-test/suite/funcs_1/t/myisam_trig_09.test
@@ -16,17 +16,14 @@ let $engine_type= myisam;
eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
-# FIXME Replace the following, when "if" for mysqltest is available
let $run= `SELECT @NO_REFRESH = 0`;
-while ($run)
+if ($run)
{
-
# Create some objects needed in many testcases
USE test;
--source suite/funcs_1/include/myisam_tb3.inc
-
- let $run= 0;
}
--source suite/funcs_1/triggers/triggers_09.inc
+
diff --git a/mysql-test/suite/funcs_1/t/myisam_trig_1011ext.test b/mysql-test/suite/funcs_1/t/myisam_trig_1011ext.test
index b4d29476aa5..7290c22eb84 100644
--- a/mysql-test/suite/funcs_1/t/myisam_trig_1011ext.test
+++ b/mysql-test/suite/funcs_1/t/myisam_trig_1011ext.test
@@ -16,17 +16,14 @@ let $engine_type= myisam;
eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
-# FIXME Replace the following, when "if" for mysqltest is available
let $run= `SELECT @NO_REFRESH = 0`;
-while ($run)
+if ($run)
{
-
# Create some objects needed in many testcases
USE test;
--source suite/funcs_1/include/myisam_tb3.inc
-
- let $run= 0;
}
--source suite/funcs_1/triggers/triggers_1011ext.inc
+
diff --git a/mysql-test/suite/funcs_1/t/myisam_views.test b/mysql-test/suite/funcs_1/t/myisam_views.test
index 3fa50a3a2a0..dad532955f5 100644
--- a/mysql-test/suite/funcs_1/t/myisam_views.test
+++ b/mysql-test/suite/funcs_1/t/myisam_views.test
@@ -19,7 +19,6 @@ eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
let $run= `SELECT @NO_REFRESH = 0`;
if ($run)
{
-
# Create some objects needed in many testcases
USE test;
--source suite/funcs_1/include/myisam_tb2.inc
@@ -30,7 +29,6 @@ if ($run)
USE test1;
--source suite/funcs_1/include/myisam_tb2.inc
USE test;
-
}
let $message= Attention: The nesting level @max_level in Testcase 3.3.1.A6
@@ -47,3 +45,4 @@ if ($run)
DROP DATABASE IF EXISTS test1;
}
+
diff --git a/mysql-test/suite/funcs_1/t/ndb__load.test b/mysql-test/suite/funcs_1/t/ndb__load.test
index 4f95065b285..b586dfa4b3a 100644
--- a/mysql-test/suite/funcs_1/t/ndb__load.test
+++ b/mysql-test/suite/funcs_1/t/ndb__load.test
@@ -18,11 +18,9 @@ let $engine_type= ndb;
eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
-# FIXME Replace the following, when "if" for mysqltest is available
let $run= `SELECT @NO_REFRESH`;
-while ($run)
+if ($run)
{
-
# Create some objects needed in many testcases
USE test;
--source suite/funcs_1/include/ndb_tb1.inc
@@ -41,7 +39,5 @@ while ($run)
# These tables are needed for the stored procedure testscases
--source suite/funcs_1/include/sp_tb.inc
-
- let $run= 0;
}
diff --git a/mysql-test/suite/funcs_1/t/ndb_bitdata.test b/mysql-test/suite/funcs_1/t/ndb_bitdata.test
index bd5072e123d..26c454d70f7 100644
--- a/mysql-test/suite/funcs_1/t/ndb_bitdata.test
+++ b/mysql-test/suite/funcs_1/t/ndb_bitdata.test
@@ -1,6 +1,6 @@
#### suite/funcs_1/t/ndb_bitdata.test
-# InnoDB tables should be used
+# NDB tables should be used
#
# 1. Check if InnoDB is available
--source include/have_ndb.inc
@@ -18,16 +18,12 @@ let $engine_type= ndb;
eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
-# FIXME Replace the following, when "if" for mysqltest is available
let $run= `SELECT @NO_REFRESH = 0`;
-while ($run)
+if ($run)
{
-
# Create some objects needed in many testcases
USE test;
--source suite/funcs_1/include/ndb_tb4.inc
-
- let $run= 0;
}
--source suite/funcs_1/bitdata/bitdata_master.test
diff --git a/mysql-test/suite/funcs_1/t/ndb_cursors.test b/mysql-test/suite/funcs_1/t/ndb_cursors.test
index 178622f4f48..fd9060b3e8f 100644
--- a/mysql-test/suite/funcs_1/t/ndb_cursors.test
+++ b/mysql-test/suite/funcs_1/t/ndb_cursors.test
@@ -1,6 +1,6 @@
#### suite/funcs_1/t/ndb_cursors.test
-# Innodb tables should be used
+# NDB tables should be used
#
# 1. Check if ndb is available
--source include/have_ndb.inc
@@ -18,16 +18,12 @@ let $engine_type= ndb;
eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
-# FIXME Replace the following, when "if" for mysqltest is available
let $run= `SELECT @NO_REFRESH = 0`;
-while ($run)
+if ($run)
{
-
# Create some objects needed in many testcases
USE test;
--source suite/funcs_1/include/ndb_tb1.inc
-
- let $run= 0;
}
--source suite/funcs_1/cursors/cursors_master.test
diff --git a/mysql-test/suite/funcs_1/t/ndb_storedproc.test b/mysql-test/suite/funcs_1/t/ndb_storedproc.test
new file mode 100644
index 00000000000..69d214c97ed
--- /dev/null
+++ b/mysql-test/suite/funcs_1/t/ndb_storedproc.test
@@ -0,0 +1,9 @@
+#### suite/funcs_1/t/ndb_storedproc.test
+#
+
+--source include/have_ndb.inc
+let $engine_type= ndb;
+
+--source suite/funcs_1/storedproc/load_sp_tb.inc
+
+--source suite/funcs_1/storedproc/storedproc_master.inc
diff --git a/mysql-test/suite/funcs_1/t/ndb_trig_0102.test b/mysql-test/suite/funcs_1/t/ndb_trig_0102.test
index cda1048631f..b5add9d9806 100644
--- a/mysql-test/suite/funcs_1/t/ndb_trig_0102.test
+++ b/mysql-test/suite/funcs_1/t/ndb_trig_0102.test
@@ -18,16 +18,12 @@ let $engine_type= ndb;
eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
-# FIXME Replace the following, when "if" for mysqltest is available
let $run= `SELECT @NO_REFRESH = 0`;
-while ($run)
+if ($run)
{
-
# Create some objects needed in many testcases
USE test;
--source suite/funcs_1/include/ndb_tb3.inc
-
- let $run= 0;
}
--source suite/funcs_1/triggers/triggers_0102.inc
diff --git a/mysql-test/suite/funcs_1/t/ndb_trig_03.test b/mysql-test/suite/funcs_1/t/ndb_trig_03.test
index e8478d4f0fc..65aa138495d 100644
--- a/mysql-test/suite/funcs_1/t/ndb_trig_03.test
+++ b/mysql-test/suite/funcs_1/t/ndb_trig_03.test
@@ -1,6 +1,6 @@
#### suite/funcs_1/t/ndb_triggers.test
-# InnoDB tables should be used
+# NDB tables should be used
#
# 1. Check if NDB is available
--source include/have_ndb.inc
@@ -18,16 +18,12 @@ let $engine_type= ndb;
eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
-# FIXME Replace the following, when "if" for mysqltest is available
let $run= `SELECT @NO_REFRESH = 0`;
-while ($run)
+if ($run)
{
-
# Create some objects needed in many testcases
USE test;
--source suite/funcs_1/include/ndb_tb3.inc
-
- let $run= 0;
}
--source suite/funcs_1/triggers/triggers_03.inc
diff --git a/mysql-test/suite/funcs_1/t/ndb_trig_03e.test b/mysql-test/suite/funcs_1/t/ndb_trig_03e.test
index 3d6c73cfe24..118ea99e890 100644
--- a/mysql-test/suite/funcs_1/t/ndb_trig_03e.test
+++ b/mysql-test/suite/funcs_1/t/ndb_trig_03e.test
@@ -1,6 +1,6 @@
#### suite/funcs_1/t/ndb_triggers.test
-# InnoDB tables should be used
+# NDB tables should be used
#
# 1. Check if NDB is available
--source include/have_ndb.inc
@@ -18,14 +18,11 @@ let $engine_type= ndb;
eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
-# FIXME Replace the following, when "if" for mysqltest is available
let $run= `SELECT @NO_REFRESH = 0`;
-while ($run)
+if ($run)
{
-
# Create some objects needed in many testcases
USE test;
- let $run= 0;
}
--source suite/funcs_1/triggers/triggers_03e_db_level.inc
diff --git a/mysql-test/suite/funcs_1/t/ndb_trig_0407.test b/mysql-test/suite/funcs_1/t/ndb_trig_0407.test
index 2825102643c..2c07cf329d9 100644
--- a/mysql-test/suite/funcs_1/t/ndb_trig_0407.test
+++ b/mysql-test/suite/funcs_1/t/ndb_trig_0407.test
@@ -18,16 +18,12 @@ let $engine_type= ndb;
eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
-# FIXME Replace the following, when "if" for mysqltest is available
let $run= `SELECT @NO_REFRESH = 0`;
-while ($run)
+if ($run)
{
-
# Create some objects needed in many testcases
USE test;
--source suite/funcs_1/include/ndb_tb3.inc
-
- let $run= 0;
}
--source suite/funcs_1/triggers/triggers_0407.inc
diff --git a/mysql-test/suite/funcs_1/t/ndb_trig_08.test b/mysql-test/suite/funcs_1/t/ndb_trig_08.test
index 9c763c71b35..497ea523027 100644
--- a/mysql-test/suite/funcs_1/t/ndb_trig_08.test
+++ b/mysql-test/suite/funcs_1/t/ndb_trig_08.test
@@ -18,16 +18,12 @@ let $engine_type= ndb;
eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
-# FIXME Replace the following, when "if" for mysqltest is available
let $run= `SELECT @NO_REFRESH = 0`;
-while ($run)
+if ($run)
{
-
# Create some objects needed in many testcases
USE test;
--source suite/funcs_1/include/ndb_tb3.inc
-
- let $run= 0;
}
--source suite/funcs_1/triggers/triggers_08.inc
diff --git a/mysql-test/suite/funcs_1/t/ndb_trig_09.test b/mysql-test/suite/funcs_1/t/ndb_trig_09.test
index 7cc63e47f8a..d735d125fd0 100644
--- a/mysql-test/suite/funcs_1/t/ndb_trig_09.test
+++ b/mysql-test/suite/funcs_1/t/ndb_trig_09.test
@@ -18,16 +18,12 @@ let $engine_type= ndb;
eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
-# FIXME Replace the following, when "if" for mysqltest is available
let $run= `SELECT @NO_REFRESH = 0`;
-while ($run)
+if ($run)
{
-
# Create some objects needed in many testcases
USE test;
--source suite/funcs_1/include/ndb_tb3.inc
-
- let $run= 0;
}
--source suite/funcs_1/triggers/triggers_09.inc
diff --git a/mysql-test/suite/funcs_1/t/ndb_trig_1011ext.test b/mysql-test/suite/funcs_1/t/ndb_trig_1011ext.test
index 9b0b966deaf..4d298da3260 100644
--- a/mysql-test/suite/funcs_1/t/ndb_trig_1011ext.test
+++ b/mysql-test/suite/funcs_1/t/ndb_trig_1011ext.test
@@ -18,16 +18,12 @@ let $engine_type= ndb;
eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
-# FIXME Replace the following, when "if" for mysqltest is available
let $run= `SELECT @NO_REFRESH = 0`;
-while ($run)
+if ($run)
{
-
# Create some objects needed in many testcases
USE test;
--source suite/funcs_1/include/ndb_tb3.inc
-
- let $run= 0;
}
--source suite/funcs_1/triggers/triggers_1011ext.inc
diff --git a/mysql-test/suite/funcs_1/t/ndb_views.test b/mysql-test/suite/funcs_1/t/ndb_views.test
index 55b8f4757fe..317c8ffff23 100644
--- a/mysql-test/suite/funcs_1/t/ndb_views.test
+++ b/mysql-test/suite/funcs_1/t/ndb_views.test
@@ -21,7 +21,6 @@ eval SET @NO_REFRESH = IF( '$NO_REFRESH' = '', 0, 1);
let $run= `SELECT @NO_REFRESH = 0`;
if ($run)
{
-
# Create some objects needed in many testcases
USE test;
--source suite/funcs_1/include/ndb_tb2.inc
@@ -32,7 +31,6 @@ if ($run)
USE test1;
--source suite/funcs_1/include/ndb_tb2.inc
USE test;
-
}
--source suite/funcs_1/views/views_master.inc
diff --git a/mysql-test/suite/funcs_1/triggers/triggers_03.inc b/mysql-test/suite/funcs_1/triggers/triggers_03.inc
index 4821b47099a..4039699c754 100644
--- a/mysql-test/suite/funcs_1/triggers/triggers_03.inc
+++ b/mysql-test/suite/funcs_1/triggers/triggers_03.inc
@@ -3,6 +3,7 @@
# Trigger Tests
# (test case numbering refer to requirement document TP v1.1)
#======================================================================
+# WL#4084: enable disabled parts. 2007-11-15, hhunger
--disable_abort_on_error
@@ -157,16 +158,13 @@ let $message=Testcase 3.5.3.7a:;
show grants;
select f1 from t1 order by f1;
-let $message= Trigger create disabled - should fail - Bug 8884;
---source include/show_msg.inc
-# --error 1227
-# create trigger trg4a_1 before INSERT on t1 for each row
-# set new.f1 = 'trig 3.5.3.7-1a';
+ create trigger trg4a_1 before INSERT on t1 for each row
+ set new.f1 = 'trig 3.5.3.7-1a';
connection default;
+ --error ER_COLUMNACCESS_DENIED_ERROR
insert into t1 (f1) values ('insert 3.5.3.7-1a');
select f1 from t1 order by f1;
- --error 0, 1360
drop trigger trg4a_1;
connection yes_privs_424a;
@@ -213,18 +211,14 @@ let $message= Testcase 3.5.3.7b:;
show grants;
use priv_db;
-let $message= Trigger create disabled - should fail - Bug 8884;
---source include/show_msg.inc
-# --error 1227
-# create trigger trg4b_1 before UPDATE on t1 for each row
-# set new.f1 = 'trig 3.5.3.7-1b';
+ create trigger trg4b_1 before UPDATE on t1 for each row
+ set new.f1 = 'trig 3.5.3.7-1b';
connection default;
insert into t1 (f1) values ('insert 3.5.3.7-1b');
select f1 from t1 order by f1;
update t1 set f1 = 'update 3.5.3.7-1b' where f1 = 'insert 3.5.3.7-1b';
select f1 from t1 order by f1;
- --error 0, 1360
drop trigger trg4b_1;
connection yes_privs_424b;
@@ -271,16 +265,12 @@ let $message= Testcase 3.5.3.7c;
show grants;
use priv_db;
-let $message= Trigger create disabled - should fail - Bug 8884;
---source include/show_msg.inc
-# --error 1227
-# create trigger trg4c_1 before INSERT on t1 for each row
-# set new.f1 = 'trig 3.5.3.7-1c';
+ create trigger trg4c_1 before INSERT on t1 for each row
+ set new.f1 = 'trig 3.5.3.7-1c';
connection default;
insert into t1 (f1) values ('insert 3.5.3.7-1c');
select f1 from t1 order by f1;
- --error 0, 1360
drop trigger trg4c_1;
connection yes_privs_424c;
@@ -327,16 +317,12 @@ let $message= Testcase 3.5.3.7d:;
connection no_privs_424d;
show grants;
use priv_db;
-let $message= Trigger create disabled - should fail - Bug 8884;
---source include/show_msg.inc
-# --error 1227
-# create trigger trg4d_1 before INSERT on t1 for each row
-# set new.f1 = 'trig 3.5.3.7-1d';
+ create trigger trg4d_1 before INSERT on t1 for each row
+ set new.f1 = 'trig 3.5.3.7-1d';
connection default;
insert into t1 (f1) values ('insert 3.5.3.7-1d');
select f1 from t1 order by f1;
- --error 0, 1360
drop trigger trg4d_1;
connection yes_privs_424d;
@@ -386,18 +372,14 @@ let $message= Testcase 3.5.3.8a:;
use priv_db;
show grants;
-let $message= Trigger create disabled - should fail - Bug 8887;
---source include/show_msg.inc
-# --error 1227
-# create trigger trg5a_1 before INSERT on t1 for each row
-# set @test_var = new.f1;
+ create trigger trg5a_1 before INSERT on t1 for each row
+ set @test_var = new.f1;
connection default;
set @test_var = 'before trig 3.5.3.8-1a';
select @test_var;
insert into t1 (f1) values ('insert 3.5.3.8-1a');
select @test_var;
- --error 0, 1360
drop trigger trg5a_1;
connection yes_privs_425a;
@@ -446,11 +428,8 @@ let $message= Testcase: 3.5.3.8b;
show grants;
use priv_db;
-let $message= Trigger create disabled - should fail - Bug 8887;
---source include/show_msg.inc
-# --error 1227
-# create trigger trg5b_1 before UPDATE on t1 for each row
-# set @test_var= new.f1;
+ create trigger trg5b_1 before UPDATE on t1 for each row
+ set @test_var= new.f1;
connection default;
set @test_var= 'before trig 3.5.3.8-1b';
@@ -458,7 +437,6 @@ let $message= Trigger create disabled - should fail - Bug 8887;
select @test_var;
update t1 set f1= 'update 3.5.3.8-1b' where f1 = 'insert 3.5.3.8-1b';
select @test_var;
- --error 0, 1360
drop trigger trg5b_1;
connection yes_privs_425b;
@@ -506,17 +484,13 @@ let $message= Testcase 3.5.3.8c:;
show grants;
use priv_db;
-let $message= Trigger create disabled - should fail - Bug 8887;
---source include/show_msg.inc
-# --error 1227
-# create trigger trg5c_1 before INSERT on t1 for each row
-# set @test_var= new.f1;
+ create trigger trg5c_1 before INSERT on t1 for each row
+ set @test_var= new.f1;
connection default;
set @test_var= 'before trig 3.5.3.8-1c';
insert into t1 (f1) values ('insert 3.5.3.8-1c');
select @test_var;
- --error 0, 1360
drop trigger trg5c_1;
connection yes_privs_425c;
@@ -561,17 +535,13 @@ let $message=Testcase: 3.5.3.8d:;
connection no_privs_425d;
show grants;
use priv_db;
-let $message= Trigger create disabled - should fail - Bug 8887;
---source include/show_msg.inc
-# --error 1227
-# create trigger trg5d_1 before INSERT on t1 for each row
-# set @test_var= new.f1;
+ create trigger trg5d_1 before INSERT on t1 for each row
+ set @test_var= new.f1;
connection default;
set @test_var='before trig 3.5.3.8-1d';
insert into t1 (f1) values ('insert 3.5.3.8-1d');
select @test_var;
- --error 0, 1360
drop trigger trg5d_1;
connection yes_privs_425d;
@@ -591,8 +561,7 @@ let $message= Trigger create disabled - should fail - Bug 8887;
drop trigger trg5d_2;
--enable_warnings
-# --- 3.5.3.x - additional tests following the fix to bug 5861 / WL 2818
-# to test for trigger definer privs in the case of trigger
+# --- 3.5.3.x to test for trigger definer privs in the case of trigger
# actions (insert/update/delete/select) performed on other
# tables.
let $message=Testcase: 3.5.3.x:;
diff --git a/mysql-test/suite/funcs_1/triggers/triggers_08.inc b/mysql-test/suite/funcs_1/triggers/triggers_08.inc
index 4a7ea486248..d63c15b33b5 100644
--- a/mysql-test/suite/funcs_1/triggers/triggers_08.inc
+++ b/mysql-test/suite/funcs_1/triggers/triggers_08.inc
@@ -3,6 +3,7 @@
# Trigger Tests
# (test case numbering refer to requirement document TP v1.1)
#======================================================================
+# WL#4084: enable disabled parts, 2007-11-15 hhunger
# General setup for Trigger tests
let $message= Testcase: 3.5:;
@@ -34,8 +35,6 @@ let $message= Testcase: 3.5:;
let $message= Testcase 3.5.8.1: (implied in previous tests);
--source include/show_msg.inc
-# OBN - FIXME - Missing 3.5.8.1 need to add
-
#Section 3.5.8.2
# Testcase: Ensure that the triggered actions of every trigger never results
# in an unexpected change made to the database.
@@ -111,10 +110,12 @@ let $message= 3.5.8.4 - multiple SQL;
Insert into tb3 (f120, f122, f136, f144, f163)
values ('1', 'Test 3.5.8.4', 222, 23456, 1.05);
Select f120, f122, f136, f144, f163 from tb3 where f122= 'Test 3.5.8.4';
-# error in ndb
- select * from db_test.t1_i order by i120;
- select * from db_test.t1_u order by u120;
- select * from db_test.t1_d order by d120;
+ --sorted_result
+ select * from db_test.t1_i;
+ --sorted_result
+ select * from db_test.t1_u;
+ --sorted_result
+ select * from db_test.t1_d;
select @test_var;
@@ -320,28 +321,28 @@ let $message= Testcase 3.5.8.5-case:;
Insert into tb3 (f120, f122, f136, f144)
values ('a', 'Test 3.5.8.5-case', 5, 7);
select f120, f122, f136, f144, @test_var
- from tb3 where f122 = 'Test 3.5.8.5-case' order by f120;
+ from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;
Insert into tb3 (f120, f122, f136, f144)
values ('b', 'Test 3.5.8.5-case', 71,16);
select f120, f122, f136, f144, @test_var
- from tb3 where f122 = 'Test 3.5.8.5-case' order by f120;
+ from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;
Insert into tb3 (f120, f122, f136, f144)
values ('c', 'Test 3.5.8.5-case', 80,1);
select f120, f122, f136, f144, @test_var
- from tb3 where f122 = 'Test 3.5.8.5-case' order by f120;
+ from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;
Insert into tb3 (f120, f122, f136)
values ('d', 'Test 3.5.8.5-case', 152);
select f120, f122, f136, f144, @test_var
- from tb3 where f122 = 'Test 3.5.8.5-case' order by f120;
+ from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;
Insert into tb3 (f120, f122, f136, f144)
values ('e', 'Test 3.5.8.5-case', 200, 8);
select f120, f122, f136, f144, @test_var
- from tb3 where f122 = 'Test 3.5.8.5-case' order by f120;
+ from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;
--error 0, 1339
Insert into tb3 (f120, f122, f136, f144)
values ('f', 'Test 3.5.8.5-case', 100, 8);
select f120, f122, f136, f144, @test_var
- from tb3 where f122 = 'Test 3.5.8.5-case' order by f120;
+ from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;
delimiter //;
--error 1064
@@ -495,12 +496,25 @@ let $message= Testcase 3.5.8.5-while:;
#Section 3.5.8.6
# Test case: Ensure that a trigger definition that includes a CALL to a stored
# procedure fails, at CREATE TRIGGER time, with an appropriate error
-# message
-# OBN - requirement void since allowed
-# Fails due to Bug 9909 the bug allows the trigger to be created
-# and fails in execution time
+# message. Not more valid requirement.
let $message= Testcase 3.5.8.6: (requirement void);
--source include/show_msg.inc
+ delimiter //;
+ CREATE PROCEDURE sp_01 () BEGIN set @v1=1; END//
+
+ CREATE TRIGGER trg8_1 BEFORE UPDATE ON tb3 FOR EACH ROW
+ BEGIN
+ CALL sp_01 ();
+ END//
+ delimiter ;//
+ Insert into tb3 (f120, f122, f136) values ('6', 'Test 3.5.8.6-insert', 101);
+ update tb3 set f120='S', f136=111,
+ f122='Test 3.5.8.6-tr8_1'
+ where f122='Test 3.5.8.6-insert';
+ select f120, f122
+ from tb3 where f122 like 'Test 3.5.8.6%' order by f120;
+ DROP TRIGGER trg8_1;
+ DROP PROCEDURE sp_01;
#Section 3.5.8.7
@@ -508,25 +522,26 @@ let $message= Testcase 3.5.8.6: (requirement void);
# transaction-delimiting statement (e.g. COMMIT,
# ROLLBACK, START TRANSACTION) fails, at CREATE TRIGGER
# time, with an appropriate error message.
-# OBN - Fails due to Bug ____
-let $message= Testcase 3.5.8.7: (Disabled as a result of bug _____);
+let $message= Testcase 3.5.8.7;
--source include/show_msg.inc
+
+ delimiter //;
+ --error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
+ Create trigger trg9_1 before update on tb3 for each row
+ BEGIN
+ Start transaction;
+ Set new.f120='U';
+ Commit;
+ END//
-# --error 1314
-# Create trigger trg9_1 before update on tb3 for each row
-# BEGIN
-# Start transaction;
-# Set new.f120='U';
-# Commit;
-# END;
-
-# --error 1314
-# Create trigger trg9_2 before delete on tb3 for each row
-# BEGIN
-# Start transaction;
-# Set @var2=old.f120;
-# Rollback;
-# END;
+ --error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
+ Create trigger trg9_2 before delete on tb3 for each row
+ BEGIN
+ Start transaction;
+ Set @var2=old.f120;
+ Rollback;
+ END//
+ delimiter ;//
# Cleanup section 3.5
diff --git a/mysql-test/suite/funcs_1/triggers/triggers_1011ext.inc b/mysql-test/suite/funcs_1/triggers/triggers_1011ext.inc
index 1b7505260f7..07d04ab56ee 100644
--- a/mysql-test/suite/funcs_1/triggers/triggers_1011ext.inc
+++ b/mysql-test/suite/funcs_1/triggers/triggers_1011ext.inc
@@ -3,6 +3,7 @@
# Trigger Tests
# (test case numbering refer to requirement document TP v1.1)
#======================================================================
+# WL#4084: enable disabled parts, 2007-11-15, hhunger
--disable_abort_on_error
@@ -271,8 +272,8 @@ let $message= Testcase y.y.y.3: Circular trigger reference;
create trigger tr4 after insert on t4
for each row insert into t1 (f1) values (new.f4+1);
- # OBN See bug 11896
- --error 1442
+ # Bug#11896 Partial locking in case of recursive trigger definittions
+ --error ER_CANT_UPDATE_USED_TABLE_IN_SF_OR_TRG
insert into t1 values (1);
select * from t1 order by f1;
select * from t2 order by f2;
@@ -294,7 +295,7 @@ let $message= Testcase y.y.y.3: Circular trigger reference;
#Section y.y.y.4
# Testcase: create recursive trigger/storedprocedures conditions
-let $message= Testcase y.y.y.4: Recursive trigger/SP references (disabled bug 11889);
+let $message= Testcase y.y.y.4: Recursive trigger/SP references;
--source include/show_msg.inc
set @sql_mode='traditional';
diff --git a/mysql-test/suite/funcs_1/views/func_view.inc b/mysql-test/suite/funcs_1/views/func_view.inc
index d78cfb4488a..93fdb382039 100644
--- a/mysql-test/suite/funcs_1/views/func_view.inc
+++ b/mysql-test/suite/funcs_1/views/func_view.inc
@@ -5,10 +5,7 @@
###################################################
# 2006-12-08 ML Maintenance + refinements
# 2005-09-14 ML Create this test
-
-let $message= ! Attention: The file with the expected results suffers from
-Bug#10713: mysqldump includes database in create view and referenced tables;
---source include/show_msg80.inc
+# 2007-11-09 HHunger enabled all disabled parts belonging to fixed bugs.
#
# 0. Some notes about this test:
# #################################################################
@@ -43,14 +40,7 @@ Bug#10713: mysqldump includes database in create view and referenced tables;
# which was valid during VIEW creation time. This means some variations
# of the SQL mode are needed.
# 0.1.3 There are much more functions to be tested.
-# 0.1.4 There are problems with the option "--ps-protocol".
-# Double values with 15 digit mantissa are printed with 14 digit
-# mantissa (Bug#11589).
-# I altered the Minimum/Maximum double values to 14 digit mantissa
-# to avoid these problems. But there are some other unsolved problems
-# with "--ps-protocol".
---disable_ps_protocol
-# 0.1.5 The result sets of some CAST sub testcases with ugly function parameter
+# 0.1.4 The result sets of some CAST sub testcases with ugly function parameter
# column data type combinations must be discussed.
#
#
@@ -256,11 +246,9 @@ INSERT INTO t1_values SET
my_year = '1901',
my_bigint = -9223372036854775808,
my_decimal = -9999999999999999999999999999999999.999999999999999999999999999999 ,
- my_double = -1.7976931348623E+308;
-# Note(ML): Values like
-# - my_timestamp = '19700101030000' do not work
-# - my_double = -1.7976931348623157E+308 cause problems with
-# --ps-protocol (Bug#11589)
+ my_double = -1.7976931348623E+308;
+# shortened due to bug#32285
+# my_double = -1.7976931348623157E+308;
#
# 2.3 record -- everything to "maximum"
# numbers, date/time types -> maximum of range
@@ -281,10 +269,8 @@ INSERT INTO t1_values SET
my_bigint = 9223372036854775807,
my_decimal = +9999999999999999999999999999999999.999999999999999999999999999999 ,
my_double = 1.7976931348623E+308;
-# Note(ML): Values like
-# - my_timestamp = '20380101030000' do not work
-# - my_double = 1.7976931348623157E+308 cause problems with
-# --ps-protocol (Bug#11589)
+# shortened due to bug#32285
+# my_double = -1.7976931348623157E+308;
#
# 2.4 record -- everything to "magic" value if available or
# other interesting value
@@ -430,6 +416,7 @@ eval INSERT INTO t1_values SET select_id = @select_id,
#
#
# 1.1.1. CAST --> BINARY
+--echo ##### 1.1.1. CAST --> BINARY
let $target_type= BINARY;
#
let $col_type= my_char_30;
@@ -459,6 +446,7 @@ let $col_type= my_year;
# 1.1.2. CAST --> CHAR
+--echo ##### 1.1.2. CAST --> CHAR
let $target_type= CHAR;
#
let $col_type= my_char_30;
@@ -488,6 +476,7 @@ let $col_type= my_year;
# 1.1.3. CAST --> DATE
+--echo ##### 1.1.3. CAST --> DATE
let $target_type= DATE;
#
let $col_type= my_char_30;
@@ -527,6 +516,7 @@ let $col_type= my_year;
# 1.1.4. CAST --> DATETIME
+--echo ##### 1.1.4. CAST --> DATETIME
let $target_type= DATETIME;
#
let $col_type= my_char_30;
@@ -566,6 +556,7 @@ let $col_type= my_year;
# 1.1.5. CAST --> TIME
+--echo ##### 1.1.5. CAST --> TIME
let $target_type= TIME;
#
let $col_type= my_char_30;
@@ -604,8 +595,8 @@ let $col_type= my_time;
let $col_type= my_year;
--source suite/funcs_1/views/fv_cast.inc
-
# 1.1.6. CAST --> DECIMAL
+--echo ##### 1.1.6. CAST --> DECIMAL
# Set the following to (37,2) since the default was changed to (10,0) - OBN
let $target_type= DECIMAL(37,2);
#
@@ -647,6 +638,7 @@ let $col_type= my_year;
# 1.1.7. CAST --> SIGNED INTEGER
+--echo ##### 1.1.7. CAST --> SIGNED INTEGER
let $target_type= SIGNED INTEGER;
#
let $message=
@@ -682,6 +674,7 @@ let $col_type= my_year;
# 1.1.8. CAST --> UNSIGNED INTEGER
+--echo ##### 1.1.8. CAST --> UNSIGNED INTEGER
let $target_type= UNSIGNED INTEGER;
#
let $message=
@@ -703,12 +696,9 @@ let $col_type= my_decimal;
let $message= some statements disabled because of
Bug#5913 Traditional mode: BIGINT range not correctly delimited;
--source include/show_msg80.inc
-if (0)
-{
-# Bugs#8663: cant use bgint unsigned as input to cast
+# Bug#8663 cant use bgint unsigned as input to cast
let $col_type= my_double;
--source suite/funcs_1/views/fv_cast.inc
-}
let $col_type= my_datetime;
--source suite/funcs_1/views/fv_cast.inc
let $col_type= my_date;
@@ -1008,38 +998,21 @@ let $col_type= my_varbinary_1000;
eval SET @my_select =
'SELECT LEFT($col_type, 2), $col_type, id FROM t1_values';
--source suite/funcs_1/views/fv1.inc
-#
-let $message=
-"Attention: LEFT(''AaBbCcDdEeFfGgHhIiJjÄäÜüÖö'', <numeric column>)
- The file with expected results suffers from Bug 10963"
- and the testcases with length = BIGINT or DOUBLE column are deactivated,
- because there are 32/64 Bit differences;
---source include/show_msg80.inc
# Bug#11728 string function LEFT, strange undocumented behaviour, strict mode
# Bug#10963 LEFT string function returns wrong result with large length
let $col_type= my_bigint;
-if (0)
-{
-# Bug#10963 LEFT string function returns wrong result with large length
eval SET @my_select =
'SELECT LEFT(''AaBbCcDdEeFfGgHhIiJjÄäÜüÖö'', $col_type), $col_type, id FROM t1_values';
--source suite/funcs_1/views/fv1.inc
-}
-#
let $col_type= my_decimal;
eval SET @my_select =
'SELECT LEFT(''AaBbCcDdEeFfGgHhIiJjÄäÜüÖö'', $col_type), $col_type, id FROM t1_values';
--source suite/funcs_1/views/fv1.inc
-#
-if (0)
-{
# Bug#10963 LEFT string function returns wrong result with large length
let $col_type= my_double;
eval SET @my_select =
'SELECT LEFT(''AaBbCcDdEeFfGgHhIiJjÄäÜüÖö'', $col_type), $col_type, id FROM t1_values';
--source suite/funcs_1/views/fv1.inc
-}
-
# 3.20. LENGTH(str)
let $col_type= my_char_30;
@@ -1260,6 +1233,7 @@ SET sql_mode = ''; #
let $message= "# The basic preparations end and the main test starts here";
--source include/show_msg80.inc
+--disable_ps_protocol
##### The tests start here #####################################################
@@ -1370,5 +1344,7 @@ while ($select_id)
dec $select_id ;
}
+--enable_ps_protocol
+
DROP TABLE t1_selects, t1_modes, t1_values;
--exec rm $MYSQLTEST_VARDIR/tmp/func_view.dat
diff --git a/mysql-test/suite/funcs_1/views/views_master.inc b/mysql-test/suite/funcs_1/views/views_master.inc
index cb71fd7f790..f08082676ed 100644
--- a/mysql-test/suite/funcs_1/views/views_master.inc
+++ b/mysql-test/suite/funcs_1/views/views_master.inc
@@ -1,4 +1,10 @@
#### suite/funcs_1/views/views_master.test
+#
+# Last Change:
+# 2007-10-05 mleich
+# 1. Fix for Bug#31237 Test "ndb_views" fails because of differing order ...
+# 2. Cleanup of test
+# 2007-11-15 hhunger WL#4084: Review and fix all disabled tests ...
let $message= ! Attention: The file with the expected results is not
| thoroughly checked.
@@ -8,25 +14,20 @@ let $message= ! Attention: The file with the expected results is not
--source include/show_msg80.inc
# As long as
-# Bug#11589: mysqltest, --ps-protocol, strange output, float/double/real with zerofill
-# is not fixed, we must switch the ps-protocol for some statements off.
+# Bug#32285: mysqltest, --ps-protocol, strange output, float/double/real with zerofill
+# is not fixed, we must switch the ps-protocol for some statements off (formerly bug#11589).
# If this bug is fixed, please
# 1. set the following variable to 0
# 2. check, if the test passes
# 3. remove the workarounds
-let $have_bug_11589= 1;
-if ($have_bug_11589)
+let $have_bug_32285= 1;
+if ($have_bug_32285)
{
let $message= There are some statements where the ps-protocol is switched off.
- Bug#11589: mysqltest, --ps-protocol, strange output, float/double/real with zerofill;
+ Bug#32285: mysqltest, --ps-protocol, strange output, float/double/real with zerofill;
--source include/show_msg80.inc
}
-let $message= ! Attention: The file with the expected results suffers from
-Bug#10713: mysqldump includes database in create view and referenced tables;
---source include/show_msg80.inc
-
-
# The sub testcases are nearly independend. That is the reason why
# we do not want to abort after the first error.
--disable_abort_on_error
@@ -42,7 +43,7 @@ Bug#10713: mysqldump includes database in create view and referenced tables;
# MySQL has also added some vendor-specific enhancements to the standard
# SQL requirements.
-# FIXME (ML)
+# FIXME (mleich)
# - Alter all object names so that they follow the v/t/..<number> scheme or
# apply another method which prevents that customer data might be
# accidently modified
@@ -107,6 +108,12 @@ insert into tb2 (f59,f60,f61) values (109,108,104);
INSERT INTO tb2 (f59,f60) VALUES( 299,899 );
INSERT INTO tb2 (f59,f60) VALUES( 242,79 );
INSERT INTO tb2 (f59,f60) VALUES( 424,89 );
+if ($have_bug_32285)
+{
+--disable_ps_protocol
+}
+SELECT * FROM tb2 ORDER BY f59, f60, f61;
+--enable_ps_protocol
#
#
Use test;
@@ -155,52 +162,52 @@ Insert into t1 values (500,9866);
#(03)
CREATE or REPLACE VIEW v1 AS select f59,f60,f61
- FROM test.tb2 limit 4,3;
- select * FROM v1 order by f59,f60,f61 limit 0,10;
+ FROM test.tb2;
+ select * FROM v1 order by f59,f60,f61 limit 4,3;
#(04)
CREATE or REPLACE VIEW v1 AS select distinct f59
- FROM test.tb2 limit 4,3;
- select * FROM v1 order by f59 limit 0,10;
+ FROM test.tb2;
+ select * FROM v1 order by f59 limit 4,3;
#(05)
ALTER VIEW v1 AS select f59
- FROM test.tb2 limit 6,2;
- select * FROM v1 order by f59 limit 0,10;
+ FROM test.tb2;
+ select * FROM v1 order by f59 limit 6,2;
#(06)
CREATE or REPLACE VIEW v1 AS select f59
- from tb2 order by f59 limit 100;
+ from tb2 order by f59;
select * FROM v1 order by f59 limit 0,10;
#(07)
CREATE or REPLACE VIEW v1 AS select f59
- from tb2 order by f59 asc limit 100;
+ from tb2 order by f59 asc;
select * FROM v1 limit 0,10;
#(08)
CREATE or REPLACE VIEW v1 AS select f59
- from tb2 order by f59 desc limit 100;
+ from tb2 order by f59 desc;
select * FROM v1 limit 0,10;
#(09)
CREATE or REPLACE VIEW v1 AS select f59
- from tb2 group by f59 limit 100;
+ from tb2 group by f59;
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;
+ from tb2 group by f59 asc;
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;
+ from tb2 group by f59 desc;
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;
+ union (select f59 from t1);
select * FROM v1 order by f59 limit 0,10;
#(13)
@@ -214,10 +221,11 @@ Insert into t1 values (500,9866);
select * FROM v1 order by f59 limit 0,10;
#(15)
-if ($have_bug_11589)
+if ($have_bug_32285)
{
--disable_ps_protocol
}
+--vertical_results
CREATE or REPLACE VIEW v1 AS select *
FROM test.tb2 WITH LOCAL CHECK OPTION ;
select * FROM v1 order by f59,f60,f61,f62,f63,f64 limit 0,50;
@@ -226,6 +234,7 @@ if ($have_bug_11589)
CREATE or REPLACE VIEW v1 AS select *
FROM test.tb2 WITH CASCADED CHECK OPTION ;
select * FROM v1 order by f59,f60,f61,f62,f63,f64 limit 0,10;
+--horizontal_results
--enable_ps_protocol
#(17)
@@ -260,12 +269,12 @@ CREATE TABLE t1 (f1 BIGINT) ;
# SELECT INTO is illegal
SET @x=0;
---error 1350
+--error ER_VIEW_SELECT_CLAUSE
CREATE or REPLACE VIEW v1 AS Select 1 INTO @x;
Select @x;
# Subquery in the FROM clause is illegal
---error 1349
+--error ER_VIEW_SELECT_DERIVED
CREATE or REPLACE VIEW v1 AS Select 1
FROM (SELECT 1 FROM t1) my_table;
@@ -282,23 +291,16 @@ SELECT @a ;
SELECT * FROM t1;
DROP TRIGGER tr1 ;
SET @a:=0 ;
---error 1347
+--error ER_WRONG_OBJECT
CREATE TRIGGER tr1 BEFORE INSERT ON v1 FOR EACH ROW SET @a:=1 ;
-# RENAME VIEW is not available even when we try it via rename table.
-# FIXME: Write a bug report for the ugly error message
-# 1017: Can't find file: './test/v1.frm' (errno: 2),
-# because the much more beautiful
-# 1347: 'test.v1' is not BASE TABLE
-# exists.
---replace_result '\\' '/'
-# MLML --error 1017
RENAME TABLE v1 TO v2;
---error 1064
+# RENAME VIEW is not available even when we try it via rename table.
+--error ER_PARSE_ERROR
RENAME VIEW v2 TO v1;
-#--error 1347
+#--error ER_WRONG_OBJECT
ALTER TABLE v2 RENAME AS v1;
---error 1064
+--error ER_PARSE_ERROR
ALTER VIEW v1 RENAME AS v2;
# VIEWs cannot contain a PRIMARY KEY or have an Index.
@@ -310,12 +312,12 @@ DROP VIEW IF EXISTS v2 ;
CREATE TABLE t1 ( f1 DATE, f2 BLOB, f3 DOUBLE );
CREATE VIEW v1 AS SELECT f1, f2, f3 FROM t1;
ALTER TABLE t1 ADD PRIMARY KEY(f1);
---error 1347
+--error ER_WRONG_OBJECT
ALTER TABLE v1 ADD PRIMARY KEY(f1);
---error 1064
+--error ER_PARSE_ERROR
ALTER VIEW v1 ADD PRIMARY KEY(f1);
CREATE INDEX t1_idx ON t1(f3);
---error 1347
+--error ER_WRONG_OBJECT
CREATE INDEX v1_idx ON v1(f3);
DROP TABLE t1;
DROP VIEW v1;
@@ -333,21 +335,21 @@ let $message= Testcase 3.3.1.3 + 3.1.1.4 ;
DROP VIEW IF EXISTS v1 ;
--enable_warnings
# REPLACE after VIEW name
---error 1064
-CREATE VIEW v1 or REPLACE AS Select * from tb2 my_table limit 50;
+--error ER_PARSE_ERROR
+CREATE VIEW v1 or REPLACE AS Select * from tb2 my_table;
# CHECK OPTION before AS SELECT
---error 1064
+--error ER_PARSE_ERROR
CREATE VIEW v1 WITH CASCADED CHECK OPTION AS Select *
from tb2 my_table limit 50;
# CHECK OPTION before AS SELECT
---error 1064
+--error ER_PARSE_ERROR
CREATE VIEW v1 WITH LOCAL CHECK OPTION AS Select *
from tb2 my_table limit 50;
# CREATE after SELECT
---error 1064
-SELECT * FROM tb2 my_table CREATE VIEW As v1 limit 100 ;
+--error ER_PARSE_ERROR
+SELECT * FROM tb2 my_table CREATE VIEW As v1;
# AS forgotten
---error 1064
+--error ER_PARSE_ERROR
CREATE or REPLACE VIEW v1 Select f59, f60
from test.tb2 my_table where f59 = 250 ;
# positive case
@@ -355,60 +357,60 @@ CREATE OR REPLACE VIEW v1 AS SELECT F59, F60
FROM test.tb2 my_table WITH CASCADED CHECK OPTION;
DROP VIEW v1;
# REPLACE OR CREATE instead of CREATE OR REPLACE
---error 1064
+--error ER_PARSE_ERROR
REPLACE OR CREATE VIEW v1 AS SELECT F59, F60
FROM test.tb2 my_table WITH CASCADED CHECK OPTION;
# AS after SELECT
---error 1064
+--error ER_PARSE_ERROR
CREATE OR REPLACE VIEW v1 SELECT AS F59, F60
FROM test.tb2 my_table WITH CASCADED CHECK OPTION;
---error 1064
+--error ER_PARSE_ERROR
CREATE OR REPLACE VIEW v1 AS SELECT F59, F60
FROM test.tb2 my_table CASCADED WITH CHECK OPTION;
# OPTION CHECK instead of CHECK OPTION
---error 1064
+--error ER_PARSE_ERROR
CREATE OR REPLACE VIEW v1 AS SELECT F59, F60
FROM test.tb2 my_table WITH CASCADED OPTION CHECK;
# CHECK OPTION before WITH
---error 1064
+--error ER_PARSE_ERROR
CREATE OR REPLACE VIEW v1 AS SELECT F59, F60
FROM test.tb2 my_table CHECK OPTION WITH CASCADED;
# CHECK OPTION before AS SELECT
---error 1064
+--error ER_PARSE_ERROR
CREATE OR REPLACE VIEW v1 WITH CASCADED CHECK OPTION
AS SELECT F59, F60 FROM test.tb2 my_table;
# VIEW <viewname> after AS SELECT
---error 1064
+--error ER_PARSE_ERROR
CREATE OR REPLACE AS SELECT F59, F60
FROM test.tb2 my_table VIEW v1 WITH CASCADED CHECK OPTION;
# VIEW <viewname> after CHECK OPTION
---error 1064
+--error ER_PARSE_ERROR
CREATE OR REPLACE AS SELECT F59, F60
FROM test.tb2 my_table WITH CASCADED CHECK OPTION VIEW v1;
# Variants with LOCAL CHECK OPTION
---error 1064
+--error ER_PARSE_ERROR
REPLACE OR CREATE VIEW v1 AS SELECT F59, F60
FROM test.tb2 my_table WITH LOCAL CHECK OPTION;
---error 1064
+--error ER_PARSE_ERROR
CREATE OR REPLACE VIEW v1 SELECT AS F59, F60
FROM test.tb2 my_table WITH LOCAL CHECK OPTION;
---error 1064
+--error ER_PARSE_ERROR
CREATE OR REPLACE VIEW v1 AS SELECT F59, F60
FROM test.tb2 my_table LOCAL WITH CHECK OPTION;
---error 1064
+--error ER_PARSE_ERROR
CREATE OR REPLACE VIEW v1 AS SELECT F59, F60
FROM test.tb2 my_table WITH LOCAL OPTION CHECK;
---error 1064
+--error ER_PARSE_ERROR
CREATE OR REPLACE VIEW v1 AS SELECT F59, F60
FROM test.tb2 my_table CHECK OPTION WITH LOCAL;
---error 1064
+--error ER_PARSE_ERROR
CREATE OR REPLACE VIEW v1 WITH CASCADED CHECK OPTION
AS SELECT F59, F60 FROM test.tb2 my_table;
---error 1064
+--error ER_PARSE_ERROR
CREATE OR REPLACE AS SELECT F59, F60
FROM test.tb2 my_table VIEW v1 WITH LOCAL CHECK OPTION;
---error 1064
+--error ER_PARSE_ERROR
CREATE OR REPLACE AS SELECT F59, F60
FROM test.tb2 my_table WITH LOCAL CHECK OPTION VIEW v1;
@@ -419,15 +421,15 @@ CREATE table t1 (f1 int ,f2 int) ;
INSERT INTO t1 values (235, 22);
INSERT INTO t1 values (554, 11);
# SELECTs of UNION in braces
---error 1064
+--error ER_PARSE_ERROR
CREATE or REPLACE view v1 as (Select from f59 tb2)
Union ALL (Select from f1 t1);
# by before order
---error 1064
+--error ER_PARSE_ERROR
CREATE or REPLACE view v1 as Select f59, f60
-from tb2 by order f59 limit 100 ;
+from tb2 by order f59;
# by before group
---error 1064
+--error ER_PARSE_ERROR
CREATE or REPLACE view v1 as Select f59, f60
from tb2 by group f59 ;
@@ -442,24 +444,24 @@ let $message= Testcase 3.3.1.5 ;
--disable_warnings
DROP VIEW IF EXISTS v1 ;
--enable_warnings
---error 1064
-CREATE VIEW v1 SELECT * FROM tb2 limit 100 ;
---error 1064
-CREATE v1 AS SELECT * FROM tb2 limit 100 ;
---error 1064
-VIEW v1 AS SELECT * FROM tb2 limit 100 ;
+--error ER_PARSE_ERROR
+CREATE VIEW v1 SELECT * FROM tb2;
+--error ER_PARSE_ERROR
+CREATE v1 AS SELECT * FROM tb2;
+--error ER_PARSE_ERROR
+VIEW v1 AS SELECT * FROM tb2;
# positive case
CREATE VIEW v1 AS SELECT 1;
DROP VIEW v1;
---error 1064
+--error ER_PARSE_ERROR
VIEW v1 AS SELECT 1;
---error 1064
+--error ER_PARSE_ERROR
CREATE v1 AS SELECT 1;
---error 1064
+--error ER_PARSE_ERROR
CREATE VIEW AS SELECT 1;
---error 1064
+--error ER_PARSE_ERROR
CREATE VIEW v1 SELECT 1;
---error 1064
+--error ER_PARSE_ERROR
CREATE VIEW v1 AS ;
@@ -480,37 +482,37 @@ let $message= Testcase 3.3.1.6 ;
DROP VIEW IF EXISTS v1 ;
--enable_warnings
CREATE or REPLACE VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
CREATE or REPLACE ALGORITHM = UNDEFINED VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
CREATE or REPLACE ALGORITHM = MERGE VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
CREATE or REPLACE ALGORITHM = TEMPTABLE VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
CREATE or REPLACE ALGORITHM = TEMPTABLE VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
# negative test cases
---error 1064
+--error ER_PARSE_ERROR
CREATE or REPLACE = TEMPTABLE VIEW v1
-as SELECT * from tb2 limit 100 ;
---error 1064
+as SELECT * from tb2;
+--error ER_PARSE_ERROR
CREATE or REPLACE ALGORITHM TEMPTABLE VIEW v1
-as SELECT * from tb2 limit 100 ;
---error 1064
+as SELECT * from tb2;
+--error ER_PARSE_ERROR
CREATE or REPLACE ALGORITHM = VIEW v1
-as SELECT * from tb2 limit 100 ;
---error 1064
+as SELECT * from tb2;
+--error ER_PARSE_ERROR
CREATE or REPLACE TEMPTABLE = ALGORITHM VIEW v1
-as SELECT * from tb2 limit 100 ;
---error 1064
+as SELECT * from tb2;
+--error ER_PARSE_ERROR
CREATE or REPLACE TEMPTABLE - ALGORITHM VIEW v1
-as SELECT * from tb2 limit 100 ;
---error 1064
+as SELECT * from tb2;
+--error ER_PARSE_ERROR
CREATE or REPLACE GARBAGE = TEMPTABLE VIEW v1
-as SELECT * from tb2 limit 100 ;
---error 1064
+as SELECT * from tb2;
+--error ER_PARSE_ERROR
CREATE or REPLACE ALGORITHM = GARBAGE VIEW v1
-as SELECT * from tb2 limit 100 ;
+as SELECT * from tb2;
Drop view if exists v1 ;
CREATE or REPLACE VIEW v1
@@ -522,16 +524,16 @@ AS SELECT * from tb2 where f59 < 1 WITH CASCADED CHECK OPTION;
CREATE or REPLACE VIEW v1
AS SELECT * from tb2 where f59 < 1 WITH LOCAL CHECK OPTION;
# negative test cases
---error 1064
+--error ER_PARSE_ERROR
CREATE or REPLACE VIEW v1
AS SELECT * from tb2 where f59 < 1 WITH NO CHECK OPTION;
---error 1064
+--error ER_PARSE_ERROR
CREATE or REPLACE VIEW v1
AS SELECT * from tb2 where f59 < 1 CASCADED CHECK OPTION;
---error 1064
+--error ER_PARSE_ERROR
CREATE or REPLACE VIEW v1
AS SELECT * from tb2 where f59 < 1 WITH CASCADED OPTION;
---error 1064
+--error ER_PARSE_ERROR
CREATE or REPLACE VIEW v1
AS SELECT * from tb2 where f59 < 1 WITH CASCADED CHECK ;
@@ -543,12 +545,12 @@ let $message= Testcase 3.3.1.7 ;
# view names are accepted, at creation time, alteration time,
# and drop time.
###############################################################################
-# Note(ML): non-qualified view name means a view name without preceeding
-# database name
+# Note(mleich): non-qualified view name means a view name without preceeding
+# database name
--disable_warnings
DROP VIEW IF EXISTS v1 ;
--enable_warnings
-Create view test.v1 AS Select * from test.tb2 limit 100 ;
+Create view test.v1 AS Select * from test.tb2;
Alter view test.v1 AS Select F59 from test. tb2 limit 100 ;
Drop view test.v1 ;
Create view v1 AS Select * from test.tb2 limit 100 ;
@@ -561,11 +563,11 @@ let $message= Testcase 3.3.1.A0 ;
###############################################################################
# Testcase 3.3.1.A0: Ensure that view names are treated case sensitive.
###############################################################################
-# Note(ML): Maybe this test produces portability problems on Windows.
-# FIXME There should be a test outside this one checking the
-# creation of objects with cases sensitive names.
-# If we have this test the following sub testcase should
-# be deleted.
+# Note(mleich): Maybe this test produces portability problems on Windows.
+# FIXME There should be a test outside this one checking the
+# creation of objects with cases sensitive names.
+# If we have this test the following sub testcase should
+# be deleted.
--disable_warnings
DROP TABLE IF EXISTS t1 ;
DROP VIEW IF EXISTS v1 ;
@@ -576,8 +578,8 @@ INSERT INTO t1 VALUES(1111), (2222);
CREATE VIEW v1 AS SELECT * FROM t1 WHERE f1 = 1111;
# We get here the sql code
# - 0 on OS with cases sensitive view names (Example: UNIX)
-# - 1050 on OS without cases sensitive view names (Example: WINDOWS)
---error 0,1050
+# - ER_TABLE_EXISTS_ERROR on OS without cases sensitive view names (Example: WINDOWS)
+--error 0,ER_TABLE_EXISTS_ERROR
CREATE VIEW V1 AS SELECT * FROM t1 WHERE f1 = 2222;
SELECT * FROM v1;
# SELECT * FROM V1;
@@ -595,20 +597,20 @@ let $message= Testcase 3.3.1.8 ;
# that an appropriate error message is returned when the name
# is rejected.
###############################################################################
-# Note(ML): There could be more negative tests here, but I assume that the
-# server routines checking if a table or view name is acceptable are
-# heavily tested in tests checking the creation of tables.
---error 1064
+# Note(mleich): There could be more negative tests here, but I assume that the
+# server routines checking if a table or view name is acceptable
+# are heavily tested in tests checking the creation of tables.
+--error ER_PARSE_ERROR
Create view select AS Select * from test.tb2 limit 100;
---error 1064
+--error ER_PARSE_ERROR
Create view as AS Select * from test.tb2 limit 100;
---error 1064
+--error ER_PARSE_ERROR
Create view where AS Select * from test.tb2 limit 100;
---error 1064
+--error ER_PARSE_ERROR
Create view from AS Select * from test.tb2 limit 100;
---error 1064
+--error ER_PARSE_ERROR
Create view while AS Select * from test.tb2 limit 100;
---error 1064
+--error ER_PARSE_ERROR
Create view asdkj*(&*&&^ as Select * from test.tb2 limit 100 ;
--disable_warnings
Drop view if exists test.procedure ;
@@ -623,10 +625,11 @@ let $message= Testcase 3.3.1.9 ;
# Testcase 3.3.1.9: Ensure that a reference to a non-existent view is rejected
# with an appropriate error message
###############################################################################
-# Note(ML): The SELECT statement syntax does not contain any functionality to
-# claim, that the object after FROM must be a VIEW. SHOW's will be
-# checked in 3.3.11 Checks on SHOW, EXPLAIN, and DESCRIBE statements.
-# Let's check here a view based on a dropped view or table.
+# Note(mleich): The SELECT statement syntax does not contain any functionality
+# to claim, that the object after FROM must be a VIEW. SHOW's will
+# be checked in
+# 3.3.11 Checks on SHOW, EXPLAIN, and DESCRIBE statements.
+# Let's check here a view based on a dropped view or table.
--disable_warnings
Drop TABLE IF EXISTS t1 ;
Drop VIEW IF EXISTS v1;
@@ -640,32 +643,32 @@ CREATE VIEW v2 AS SELECT * FROM v1;
# Only negative cases, positive cases will be checked later:
DROP TABLE t1;
---error 1356
+--error ER_VIEW_INVALID
SELECT * FROM v1;
---error 1356
+--error ER_VIEW_INVALID
DELETE FROM v1;
---error 1356
+--error ER_VIEW_INVALID
UPDATE v1 SET f1 = 'aaaaa';
---error 1356
+--error ER_VIEW_INVALID
INSERT INTO v1 SET f1 = "fffff";
# v2 is based on v1, which is now invalid
---error 1356
+--error ER_VIEW_INVALID
SELECT * FROM v2;
---error 1356
+--error ER_VIEW_INVALID
DELETE FROM v2;
---error 1356
+--error ER_VIEW_INVALID
UPDATE v2 SET f1 = 'aaaaa';
---error 1356
+--error ER_VIEW_INVALID
INSERT INTO v2 SET f1 = "fffff";
DROP VIEW v1;
# v2 is based on v1, which is now dropped
---error 1356
+--error ER_VIEW_INVALID
SELECT * FROM v2;
---error 1356
+--error ER_VIEW_INVALID
DELETE FROM v2;
---error 1356
+--error ER_VIEW_INVALID
UPDATE v2 SET f1 = 'aaaaa';
---error 1356
+--error ER_VIEW_INVALID
INSERT INTO v2 SET f1 = "fffff";
DROP VIEW v2;
@@ -677,11 +680,11 @@ DROP VIEW IF EXISTS v1 ;
--enable_warnings
CREATE TABLE t1 (f1 FLOAT);
# Create a new VIEW based on itself
---error 1146
+--error ER_NO_SUCH_TABLE
CREATE VIEW v1 AS SELECT * FROM v1;
# Replace a valid VIEW with one new based on itself
CREATE VIEW v1 AS SELECT * FROM t1;
---error 1146
+--error ER_NO_SUCH_TABLE
CREATE or REPLACE VIEW v1 AS SELECT * FROM v1;
DROP VIEW v1;
@@ -697,9 +700,9 @@ let $message= Testcase 3.3.1.10 ;
Drop view if exists test.v1 ;
--enable_warnings
Create view test.v1 AS Select * from test.tb2 ;
---error 1050
+--error ER_TABLE_EXISTS_ERROR
Create view test.v1 AS Select F59 from test.tb2 ;
---error 1050
+--error ER_TABLE_EXISTS_ERROR
Create view v1 AS Select F59 from test.tb2 ;
@@ -710,18 +713,18 @@ let $message= Testcase 3.3.1.11 ;
# table with the same name in the same database.
###############################################################################
# The VIEW should get the same name like an already existing TABLE.
---error 1050
+--error ER_TABLE_EXISTS_ERROR
Create view test.tb2 AS Select f59,f60 from test.tb2 limit 100 ;
---error 1050
+--error ER_TABLE_EXISTS_ERROR
Create view tb2 AS Select f59,f60 from test.tb2 limit 100 ;
# The TABLE should get the same name like an already existing VIEW.
--disable_warnings
Drop view if exists test.v111 ;
--enable_warnings
Create view test.v111 as select * from tb2 limit 50;
---error 1050
+--error ER_TABLE_EXISTS_ERROR
Create table test.v111(f1 int );
---error 1050
+--error ER_TABLE_EXISTS_ERROR
Create table v111(f1 int );
DROP VIEW test.v111;
@@ -809,11 +812,13 @@ 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;
+--sorted_result
SELECT * FROM test.v1;
# Switch the algorithm
CREATE OR REPLACE ALGORITHM = TEMPTABLE VIEW test.v1
AS SELECT * FROM t1 limit 2;
SHOW CREATE VIEW test.v1;
+--sorted_result
SELECT * FROM test.v1;
# Switch the base table
CREATE OR REPLACE VIEW test.v1 AS SELECT * FROM tb2 order by f59 limit 2;
@@ -822,12 +827,14 @@ if ($have_bug_11589)
{
--disable_ps_protocol
}
+--vertical_results
SELECT * FROM test.v1 order by f59,f60,f61,f62,f63,f64,f65;
+--horizontal_results
--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;
+CREATE OR REPLACE VIEW test.v1 AS SELECT F59 FROM tb2;
SHOW CREATE VIEW test.v1;
-SELECT * FROM test.v1 order by F59;
+SELECT * FROM test.v1 order by F59 limit 10,100;
Drop table test.t1 ;
Drop view test.v1 ;
@@ -839,9 +846,9 @@ let $message= Testcase 3.3.1.14 ;
# used to create a view using the name of an existing base
# table, it fails with an appropriate error message.
###############################################################################
---error 1347
+--error ER_WRONG_OBJECT
CREATE OR REPLACE VIEW test.tb2 AS SELECT * From tb2 LIMIT 2;
---error 1347
+--error ER_WRONG_OBJECT
CREATE OR REPLACE VIEW tb2 AS SELECT * From tb2 LIMIT 2;
@@ -856,11 +863,12 @@ let $message= Testcase 3.3.1.15 ;
--disable_warnings
Drop table if exists test.v1 ;
--enable_warnings
-CREATE OR REPLACE view test.v1 as select * from tb2 LIMIT 2;
-if ($have_bug_11589)
+CREATE OR REPLACE view test.v1 as select * from tb2;
+if ($have_bug_32285)
{
--disable_ps_protocol
}
+--sorted_result
SELECT * FROM test.v1;
--enable_ps_protocol
Drop view test.v1 ;
@@ -880,8 +888,8 @@ let $message= Testcase 3.3.1.16 + 3.3.1.17 ;
Drop table if exists test.v1 ;
--enable_warnings
CREATE OR REPLACE VIEW v1 AS SELECT * From tb2;
-# Note(ML): The empty result is intended, because I want to compare
-# column names only
+# Note(mleich): The empty result is intended, because I want to compare
+# column names only.
SELECT * FROM tb2 WHERE 1 = 2;
SELECT * FROM v1 WHERE 1 = 2;
Drop view v1;
@@ -924,7 +932,7 @@ let $message= Testcase 3.3.1.18 ;
# from the underlying base table(s) rather than the view
# column names.
###############################################################################
-# Note(ML): The goal is to check the merge algorithm.
+# Note(mleich): The goal is to check the merge algorithm.
--disable_warnings
Drop view if exists v1 ;
Drop view if exists v1_1 ;
@@ -935,14 +943,14 @@ from test.tb2 limit 0,100 ;
Create view v1_1
as Select test.tb2.f59 as NewNameF1, test.tb2.f60 as NewNameF2
from tb2 limit 0,100 ;
---error 1054
+--error ER_BAD_FIELD_ERROR
SELECT NewNameF1,f60 FROM test.v1_1 ;
---error 1054
+--error ER_BAD_FIELD_ERROR
SELECT NewNameF1, v1_1.f60 FROM test.v1_1 ;
---error 1054
+--error ER_BAD_FIELD_ERROR
SELECT f59, f60 FROM test.v1 ;
Use test ;
---error 1054
+--error ER_BAD_FIELD_ERROR
SELECT F59 FROM v1 ;
@@ -974,14 +982,14 @@ SELECT * FROM v1;
# negative testcases (sometimes including the underlying SELECT)
# duplicate via alias in SELECT
SELECT f1, f2 AS f1 FROM t1;
---error 1060
+--error ER_DUP_FIELDNAME
CREATE OR REPLACE VIEW v1 AS SELECT f1, f2 AS f1 FROM t1;
# duplicate via JOIN SELECT
SELECT t1.f1, t2.f1 AS f1 FROM t1, t2;
---error 1060
+--error ER_DUP_FIELDNAME
CREATE OR REPLACE VIEW v1 AS SELECT t1.f1, t2.f1 AS f1 FROM t1, t2;
# duplicate via VIEW definition
---error 1060
+--error ER_DUP_FIELDNAME
CREATE OR REPLACE VIEW v1 (my_col, my_col) AS SELECT * FROM t1;
@@ -1000,13 +1008,13 @@ CREATE TABLE t1( f1 BIGINT, f2 DECIMAL(5,2));
CREATE OR REPLACE VIEW v1 (my_f1, my_f2) AS SELECT * FROM t1;
CREATE OR REPLACE VIEW v1 (my_f1, my_f2) AS SELECT f1, f2 FROM t1;
# negative cases, where we assign a wrong number of column names
---error 1353
+--error ER_VIEW_WRONG_LIST
CREATE OR REPLACE VIEW v1 (my_f1 ) AS SELECT * FROM t1;
---error 1353
+--error ER_VIEW_WRONG_LIST
CREATE OR REPLACE VIEW v1 (my_f1 ) AS SELECT f1, f2 FROM t1;
---error 1353
+--error ER_VIEW_WRONG_LIST
CREATE OR REPLACE VIEW v1 (my_f1, my_f2, my_f3) AS SELECT * FROM t1;
---error 1353
+--error ER_VIEW_WRONG_LIST
CREATE OR REPLACE VIEW v1 (my_f1, my_f2, my_f3) AS SELECT f1, f2 FROM t1;
@@ -1019,8 +1027,8 @@ let $message= Testcase 3.3.1.21 ;
--disable_warnings
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 order by F59, F60 desc;
+CREATE VIEW test.v1( F59, F60 ) AS SELECT F59, F60 From tb2;
+SELECT * FROM test.v1 order by F59, F60 desc LIMIT 2;
Drop view if exists test.v1 ;
@@ -1034,11 +1042,14 @@ let $message= Testcase 3.3.1.22 ;
--disable_warnings
DROP VIEW IF EXISTS v1;
--enable_warnings
-CREATE VIEW test.v1( product ) AS SELECT f59*f60 From tb2 LIMIT 2;
+CREATE VIEW test.v1( product ) AS SELECT f59*f60 From tb2 WHERE f59 < 3;
+--sorted_result
SELECT * FROM test.v1;
CREATE OR REPLACE VIEW test.v1( product ) AS SELECT 1*2;
+--sorted_result
SELECT * FROM test.v1;
CREATE OR REPLACE VIEW test.v1( product ) AS SELECT USER();
+--sorted_result
SELECT * FROM test.v1;
Drop view if exists test.v1 ;
@@ -1053,18 +1064,18 @@ let $message= Testcase 3.3.1.23 + 3.3.1.24 ;
# a non-existent view fails, with an appropriate error
# message, at creation time.
###############################################################################
-# Note(ML): The SELECT statement syntax does not contain any functionality to
-# claim, that the object after FROM must be a VIEW.
-# Testcase 3.3.1.24 should be deleted.
+# Note(mleich): The SELECT statement syntax does not contain any functionality
+# to claim, that the object after FROM must be a VIEW.
+# Testcase 3.3.1.24 should be deleted.
USE test;
--disable_warnings
DROP TABLE IF EXISTS t1;
DROP VIEW IF EXISTS v1;
DROP VIEW IF EXISTS v2;
--enable_warnings
---error 1146
+--error ER_NO_SUCH_TABLE
CREATE VIEW test.v2 AS SELECT * FROM test.t1;
---error 1146
+--error ER_NO_SUCH_TABLE
CREATE VIEW v2 AS Select * from test.v1;
DROP VIEW IF EXISTS v2;
@@ -1075,8 +1086,8 @@ let $message= Testcase 3.3.1.25 ;
# Testcase 3.3.1.25: Ensure that a view cannot be based on one or more
# temporary tables.
###############################################################################
-# Note(ML): A temporary table hides permanent tables which have the same name.
-# So do not forget to drop the temporary table.
+# Note(mleich): A temporary table hides permanent tables which have the same
+# name. So do not forget to drop the temporary table.
--disable_warnings
DROP TABLE IF EXISTS t1_temp;
DROP TABLE IF EXISTS t2_temp;
@@ -1086,13 +1097,13 @@ Create table t1_temp(f59 char(10),f60 int) ;
Create temporary table t1_temp(f59 char(10),f60 int) ;
Insert into t1_temp values('FER',90);
Insert into t1_temp values('CAR',27);
---error 1352
+--error ER_VIEW_SELECT_TMPTABLE
Create view v1 as select * from t1_temp ;
Create temporary table t2_temp(f59 char(10),f60 int) ;
Insert into t2_temp values('AAA',11);
Insert into t2_temp values('BBB',22);
---error 1352
+--error ER_VIEW_SELECT_TMPTABLE
Create or replace view v1
as select t1_temp.f59,t2_temp.f59 from t1_temp,t2_temp ;
DROP temporary table t1_temp;
@@ -1110,34 +1121,34 @@ INSERT INTO t1 VALUES('A');
INSERT INTO t2 VALUES('t2');
INSERT INTO t2 VALUES('B');
# simple SELECT
---error 1352
+--error ER_VIEW_SELECT_TMPTABLE
CREATE OR REPLACE VIEW v1 AS SELECT f2 FROM t2;
# JOIN - temporary table first
---error 1352
+--error ER_VIEW_SELECT_TMPTABLE
CREATE OR REPLACE VIEW v1 AS SELECT * FROM t2, t1;
---error 1352
+--error ER_VIEW_SELECT_TMPTABLE
CREATE OR REPLACE VIEW v1 AS SELECT f2, f1 FROM t2, t1;
# JOIN - temporary table last
---error 1352
+--error ER_VIEW_SELECT_TMPTABLE
CREATE OR REPLACE VIEW v1 AS SELECT * FROM t1, t2;
---error 1352
+--error ER_VIEW_SELECT_TMPTABLE
CREATE OR REPLACE VIEW v1 AS SELECT f1, f2 FROM t1, t2;
# UNION - temporary table first
---error 1352
+--error ER_VIEW_SELECT_TMPTABLE
CREATE OR REPLACE VIEW v1 AS SELECT * FROM t2 UNION SELECT * FROM t1;
---error 1352
+--error ER_VIEW_SELECT_TMPTABLE
CREATE OR REPLACE VIEW v1 AS SELECT f2 FROM t2 UNION SELECT f1 FROM t1;
# UNION - temporary table last
---error 1352
+--error ER_VIEW_SELECT_TMPTABLE
CREATE OR REPLACE VIEW v1 AS SELECT * FROM t1 UNION SELECT * FROM t2;
---error 1352
+--error ER_VIEW_SELECT_TMPTABLE
CREATE OR REPLACE VIEW v1 AS SELECT f1 FROM t1 UNION SELECT f2 FROM t2;
# SUBQUERY - temporary table first
---error 1352
+--error ER_VIEW_SELECT_TMPTABLE
CREATE OR REPLACE VIEW v1 AS SELECT 1 FROM t2
WHERE f2 = ( SELECT f1 FROM t1 );
# SUBQUERY - temporary table last
---error 1352
+--error ER_VIEW_SELECT_TMPTABLE
CREATE OR REPLACE VIEW v1 AS SELECT 1 FROM t1
WHERE f1 = ( SELECT f2 FROM t2 );
DROP TABLE t1;
@@ -1153,11 +1164,12 @@ let $message= Testcase 3.3.1.26 ;
--disable_warnings
DROP VIEW IF EXISTS v1;
--enable_warnings
-Create view test.v1 AS Select * from test.tb2 limit 2 ;
+Create view test.v1 AS Select * from test.tb2;
if ($have_bug_11589)
{
--disable_ps_protocol
}
+--sorted_result
Select * from test.v1;
--enable_ps_protocol
Drop view test.v1 ;
@@ -1173,9 +1185,9 @@ let $message= Testcase 3.3.1.27 ;
DROP VIEW IF EXISTS test.v1;
Drop VIEW IF EXISTS test.v1_1 ;
--enable_warnings
-Create view test.v1 AS Select * from test.tb2 limit 2 ;
+Create view test.v1 AS Select * from test.tb2;
Create view test.v1_1 AS Select F59 from test.v1 ;
-Select * from test.v1_1 order by F59 limit 20 ;
+Select * from test.v1_1 order by F59 limit 2;
Drop view test.v1 ;
Drop view test.v1_1 ;
@@ -1193,12 +1205,15 @@ 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 ;
-if ($have_bug_11589)
+if ($have_bug_32285)
{
--disable_ps_protocol
}
+--vertical_results
Select * from v1 order by f59,f60,f61,f62,f63,f64,f65;
+--horizontal_results
--enable_ps_protocol
+--sorted_result
Select * from test2.v2 ;
Drop view if exists test2.v1 ;
Drop view if exists test2.v2 ;
@@ -1223,7 +1238,8 @@ Create view test2.v2 AS Select F59 from test.v1 ;
Drop view if exists test.v1 ;
Drop view if exists test2.v2 ;
-# Note(ML): Testcase 3.3.1.30 (identical requirements like 3.3.1.26) omitted
+# Note(mleich): Testcase 3.3.1.30 (identical requirements like 3.3.1.26)
+# --> omitted
let $message= Testcase 3.3.1.31 ;
--source include/show_msg80.inc
@@ -1241,6 +1257,7 @@ INSERT INTO test.t1 VALUES( 445, 765 );
Create or replace view test.v1
AS SELECT test.t1.F59, test.tb2.F60
FROM test.tb2 JOIN test.t1 ON test.tb2.F59 = test.t1.F59 ;
+--sorted_result
Select * from test.v1;
Drop view test.v1 ;
@@ -1265,6 +1282,7 @@ INSERT INTO t1 VALUES( 445, 765 );
CREATE VIEW test2.v1
AS SELECT test.tb2.F59, test.tb2.F60
FROM test.tb2 INNER JOIN test2.t1 ON tb2.f59 = t1.f59;
+--sorted_result
Select * from test2.v1;
Use test;
@@ -1372,10 +1390,6 @@ let $message= Testcase 3.3.1.37 ;
# tables and/or views, some of which reside in the same
# database and some of which reside in one other database.
###############################################################################
-# (Bug Associated)
-# FIXME: ??? Bug number
-# FIXME: reimplement this test
-
use test;
--disable_warnings
Drop table if exists t1;
@@ -1407,8 +1421,8 @@ Drop view test.v1_main ;
let $message= Testcase 3.3.1.31 - 3.3.1.37 New Implementation ;
--source include/show_msg80.inc
###############################################################################
-# ML: The testcases 3.3.1.31 - 3.3.1.37 should be tested more systematic.
-# Ensure that a view can be based on a join of multiple
+# mleich: The testcases 3.3.1.31 - 3.3.1.37 should be tested more systematic.
+# Ensure that a view can be based on a join of multiple
# Testcase 3.3.1.31: tables within the same database
# Testcase 3.3.1.32: tables from another database.
# Testcase 3.3.1.33: views within the same database
@@ -1504,8 +1518,8 @@ Drop view if exists test.v1_main;
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 order by f59,f60;
+Create view test.v1 as Select f59, f60 FROM test.tb2;
+Select * from test.v1 order by f59,f60 limit 20;
Create table test1.t1 (f59 int,f60 int) ;
Insert into test1.t1 values (199,507) ;
@@ -1522,7 +1536,7 @@ Create view test3.v1_2 as Select f59,f60 from test3.t1 ;
Select * from test3.v1_2 ;
use test ;
-# ML: FIXME The SELECT should deliver at least one row.
+# mleich: FIXME The SELECT should deliver at least one row.
Create view v1_main
as SELECT test.tb2.f59 as f1, test1.v1_1.f59 as f2,
test3.v1_2.f59 as f3
@@ -1546,10 +1560,10 @@ let $message= Testcase 3.3.1.39 ;
--disable_warnings
Drop view if exists test.v1 ;
--enable_warnings
---error 1349
+--error ER_VIEW_SELECT_DERIVED
CREATE VIEW test.v1
AS Select f59 from (Select * FROM tb2 limit 20) tx ;
---error 1146
+--error ER_NO_SUCH_TABLE
SELECT * FROM test.v1 order by f59 ;
--disable_warnings
Drop view if exists test.v1 ;
@@ -1568,10 +1582,10 @@ Drop view if exists test.v1 ;
--enable_warnings
Set @var1 = 'ABC' ;
Set @var2 = 'XYZ' ;
---error 1351
+--error ER_VIEW_SELECT_VARIABLE
CREATE VIEW test.v1 AS SELECT @var1, @var2 ;
# System variables (name starts with '@@') are also not allowed
---error 1351
+--error ER_VIEW_SELECT_VARIABLE
CREATE VIEW test.v1 AS SELECT @@global.sort_buffer_size;
--disable_warnings
Drop view if exists test.v1 ;
@@ -1583,7 +1597,7 @@ let $message= Testcase 3.3.1.41 ;
###############################################################################
# Testcase 3.3.1.41: Ensure that a view definition within a stored procedure
# definition cannot include references to any of the stored
-# procedure’s parameters.
+# procedures parameters.
###############################################################################
--disable_warnings
Drop view if exists test.v1 ;
@@ -1616,11 +1630,11 @@ let $message= Testcase 3.3.1.42 ;
--disable_warnings
Drop VIEW if exists test.v1 ;
--enable_warnings
---error 1064
+--error ER_PARSE_ERROR
CREATE TEMPORARY VIEW test.v1 AS
SELECT * FROM test.tb2 limit 2 ;
#(02)
---error 1064
+--error ER_PARSE_ERROR
CREATE OR REPLACE TEMPORARY VIEW test.v1 AS
SELECT * FROM test.tb2 limit 2 ;
@@ -1646,20 +1660,24 @@ CREATE VIEW test.v1 AS SELECT f59,f60 FROM test.tb2;
INSERT INTO test.v1 values(122,432);
-if ($have_bug_11589)
+if ($have_bug_32285)
{
--disable_ps_protocol
}
+--vertical_results
SELECT * FROM test.tb2 where f59 = 122 and f60 = 432 limit 0,20;
+--horizontal_results
--enable_ps_protocol
UPDATE test.v1 SET f59 = 3000 WHERE test.v1.f59 = 122 ;
-if ($have_bug_11589)
+if ($have_bug_32285)
{
--disable_ps_protocol
}
+--vertical_results
SELECT * FROM test.tb2 where f59 = 3000 limit 0,20;
+--horizontal_results
--enable_ps_protocol
DELETE FROM test.v1
@@ -1677,12 +1695,12 @@ let $message= Testcase 3.3.1.44 ;
# with an appropriate error message and do not affect the
# data in the underlying tables(s).
###############################################################################
-# ML: Maybe we need some more tests here.
+# mleich: Maybe we need some more tests here.
--disable_warnings
Drop view if exists test.v1 ;
--enable_warnings
-# Note(ML): The modification will fail, because the VIEW contains 'limit'
+# Note(mleich): The modification will fail, because the VIEW contains 'limit'
CREATE VIEW test.v1 AS SELECT f59,f60 FROM test.tb2 limit 100;
--error ER_NON_INSERTABLE_TABLE
@@ -1710,21 +1728,25 @@ CREATE VIEW test.v1 AS SELECT * FROM test.tb2 where f59 = 04;
UPDATE test.v1 SET f59 = 30 where F59 = 04 ;
--disable_info
SELECT * FROM test.v1 where f59 = 30 order by f59;
-if ($have_bug_11589)
+if ($have_bug_32285)
{
--disable_ps_protocol
}
+--vertical_results
SELECT * FROM test.tb2 where f59 = 30 ;
+--horizontal_results
--enable_ps_protocol
--enable_info
UPDATE tb2 SET f59 = 100 where f59 = 30 ;
--disable_info
-if ($have_bug_11589)
+if ($have_bug_32285)
{
--disable_ps_protocol
}
+--vertical_results
SELECT * FROM tb2 where f59 = 100 ;
+--horizontal_results
--enable_ps_protocol
SELECT * FROM test.v1 order by f59 ;
@@ -1819,7 +1841,7 @@ Drop view if exists test.v1 ;
CREATE VIEW test.v1 AS SELECT f59,f60
FROM test.tb2 where f59 = 195 WITH CHECK OPTION ;
---error 1369
+--error ER_VIEW_CHECK_FAILED
UPDATE test.v1 SET f59 = 198 where f59=195 ;
SELECT * FROM test.v1 order by f59 ;
@@ -1844,14 +1866,14 @@ FROM test.tb2 where F59 = 0987 WITH LOCAL CHECK OPTION ;
CREATE VIEW test.v2 as SELECT * FROM test.v1 ;
# This UPDATE violates the definition of VIEW test.v1.
---error 1369
+--error ER_VIEW_CHECK_FAILED
UPDATE test.v1 SET F59 = 919 where f59 = 0987 ;
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
-# is defined without any CHECK OPTION.
-# FIXME Does this testcase fit to 3.3.1.47 ?
+# mleich: This UPDATE violates the definition of VIEW test.v1, but this
+# does not count, because the UPDATE runs on test.v2, which
+# is defined without any CHECK OPTION.
+# FIXME Does this testcase fit to 3.3.1.47 ?
UPDATE test.v2 SET F59 = 9879 where f59 = 919 ;
SELECT * FROM tb2 where f59 = 9879 ;
@@ -1890,9 +1912,9 @@ INSERT INTO v1 VALUES('B',2);
SELECT * FROM v1 order by f1, f2;
# negative cases
--enable_info
---error 1369
+--error ER_VIEW_CHECK_FAILED
UPDATE v1 SET f2 = 4;
---error 1369
+--error ER_VIEW_CHECK_FAILED
INSERT INTO v1 VALUES('B',3);
--disable_info
# Bug#11771: View over InnoDB table, wrong result SELECT on VIEW,
@@ -1982,10 +2004,10 @@ let $message= Testcase 3.3.1.49A ;
# The annoying redundant
# eval INSERT INTO t1_results VALUES (@v3_to_v1_options,@statement,
# @v3_to_v1_violation,$mysql_errno);
-# could not be put into a file to be sourced because of
+# could not be put into a file to be sourced because of the closed
# Bug#10267 mysqltest, wrong number of loops when a script is sourced
# within a loop
-#
+# To be implemented later.
USE test;
--disable_warnings
@@ -2066,7 +2088,7 @@ while ($num1)
SELECT * FROM v3;
SELECT * FROM t1;
DELETE FROM t1;
- # 2. DELETEs within v3
+ # 2. DELETEs within v3
# Outside v1 (0 to 10)
INSERT INTO t1 VALUES(16, 'sixteen');
# Inside v1 (0 to 10), Outside v2 ((0 to 10) AND (6 to 16) -> (6 to 10))
@@ -2242,7 +2264,7 @@ while ($num1)
SELECT * FROM t1_results ORDER BY v3_to_v1_options;
-let $message=
+let $message=
Plausibility checks for INSERTs and UPDATEs ( 4. and 5. above).
All following SELECTs must give ROW NOT FOUND ;
--source include/show_msg80.inc
@@ -2259,10 +2281,10 @@ SELECT * FROM t1_results
WHERE v3_to_v1_options LIKE ' %' AND errno <> 0
ORDER BY v3_to_v1_options;
# 3. There must be NO successful INSERT/UPDATE, when the toplevel VIEW v3 is
-# defined with any CHECK OPTION and the WHERE qualification of this VIEW is
+# defined with any CHECK OPTION and the WHERE qualification of this VIEW is
# violated. Expect ROW NOT FUND
SELECT * FROM t1_results
-WHERE v3_to_v1_options LIKE 'WITH %'
+WHERE v3_to_v1_options LIKE 'WITH %'
AND v3_to_v1_violation LIKE 'v3_%' AND errno = 0
ORDER BY v3_to_v1_options;
# 4. There must be NO successful INSERT/UPDATE, when the toplevel VIEW v3 is
@@ -2272,7 +2294,8 @@ SELECT * FROM t1_results
WHERE v3_to_v1_options LIKE 'WITH %' AND v3_to_v1_options NOT LIKE 'WITH LOCAL %'
AND v3_to_v1_violation NOT LIKE ' _ _ ' AND errno = 0
ORDER BY v3_to_v1_options;
-# 5. There must be NO failing INSERT/UPDATE getting a sql_errno <> 1369.
+# 5. There must be NO failing INSERT/UPDATE getting a
+# sql_errno <> 1369 (ER_VIEW_CHECK_FAILED).
SELECT * FROM t1_results
WHERE errno <> 0 AND errno <> 1369
ORDER BY v3_to_v1_options;
@@ -2294,12 +2317,14 @@ DROP VIEW IF EXISTS test.v1;
# that is semantically equivalent to CREATE VIEW <view name>
# AS SELECT * FROM <table name>.
###############################################################################
-CREATE VIEW test.v1 AS SELECT * FROM test.tb2 limit 5 ;
-if ($have_bug_11589)
+CREATE VIEW test.v1 AS SELECT * FROM test.tb2;
+if ($have_bug_32285)
{
--disable_ps_protocol
}
-SELECT * FROM test.v1 order by f59 ;
+--vertical_results
+SELECT * FROM test.v1 order by f59,f60,f61 ;
+--horizontal_results
--enable_ps_protocol
drop view test.v1 ;
###############################################################################
@@ -2309,8 +2334,8 @@ drop view test.v1 ;
# that is semantically equivalent to CREATE VIEW <view name>
# AS SELECT col1, col3 FROM <table name>.
###############################################################################
-CREATE VIEW test.v1 AS SELECT F59,F61 FROM test.tb2 limit 50 ;
-SELECT * FROM test.v1 order by F59, F61 ;
+CREATE VIEW test.v1 AS SELECT F59,F61 FROM test.tb2;
+SELECT * FROM test.v1 order by F59, F61 limit 50;
drop view test.v1 ;
###############################################################################
# Testcase 3.3.1.52: Ensure that a view that is a subset of every column and
@@ -2319,12 +2344,14 @@ drop view test.v1 ;
# that is semantically equivalent to CREATE VIEW <view name>
# AS SELECT * FROM <table name> WHERE ....
###############################################################################
-CREATE VIEW test.v1 AS SELECT * FROM test.tb2 order by f59, f60, f61 limit 20 ;
+CREATE VIEW test.v1 AS SELECT * FROM test.tb2 order by f59, f60, f61;
if ($have_bug_11589)
{
--disable_ps_protocol
}
+--vertical_results
SELECT * FROM test.v1 order by f59,f60,f61 ;
+--horizontal_results
--enable_ps_protocol
drop view test.v1 ;
###############################################################################
@@ -2334,8 +2361,8 @@ drop view test.v1 ;
# definition that is semantically equivalent to CREATE VIEW
# <view name> AS SELECT col1, col3 FROM <table name> WHERE ..
###############################################################################
-CREATE VIEW test.v1 AS SELECT F59,f61 FROM test.tb2 limit 20 ;
-SELECT * FROM test.v1 order by f59,f61 desc limit 50;
+CREATE VIEW test.v1 AS SELECT F59,f61 FROM test.tb2;
+SELECT * FROM test.v1 order by f59,f61 desc limit 20;
drop view test.v1 ;
@@ -2370,10 +2397,10 @@ drop table test.t2 ;
drop view test.v1 ;
-# FIXME(ML): Implement an automatic check for 3.3.1.50 - 3.3.1.54
-# CREATE VIEW ... AS <SELECT ... FROM tb2 ...>
-# CREATE TEMPORARY TABLE ... AS <SELECT ... FROM tb2 ...>
-# Comparison of the VIEW with the temporary table
+# FIXME(mleich): Implement an automatic check for 3.3.1.50 - 3.3.1.54
+# CREATE VIEW ... AS <SELECT ... FROM tb2 ...>
+# CREATE TEMPORARY TABLE ... AS <SELECT ... FROM tb2 ...>
+# Comparison of the VIEW with the temporary table
let $message= Testcase 3.3.1.50 - 3.3.1.54 additional implementation;
--source include/show_msg80.inc
@@ -2412,6 +2439,15 @@ SELECT * FROM v1;
# 3.3.1.54
--vertical_results
SET sql_mode = 'traditional,ansi';
+# due to bug#32496 "no trailing blanks in identifier".
+CREATE OR REPLACE VIEW v1 AS
+SELECT f3 AS "pure column f3:", f1 + f3 AS "sum of columns f1 + f3 =",
+ 3 * (- 0.11111E+1) AS "product of constants 3 * (- 0.11111E+1):",
+ '->' || CAST(f3 AS CHAR) || '<-'
+ AS "expression with '||'=CONCAT and CAST(DECIMAL column AS CHAR):"
+FROM t1 WHERE f1 = 2;
+# This error is not conformant with ansi (see bug#32496). hhunger
+--error ER_WRONG_COLUMN_NAME
CREATE OR REPLACE VIEW v1 AS
SELECT f3 AS "pure column f3: ", f1 + f3 AS "sum of columns f1 + f3 = ",
3 * (- 0.11111E+1) AS "product of constants 3 * (- 0.11111E+1): ",
@@ -2672,11 +2708,13 @@ SELECT * FROM test.v1 order by f59 limit 0,10;
ALTER VIEW test.v1 AS SELECT *
FROM test.tb2 WHERE test.tb2.f59 = 242 ;
-if ($have_bug_11589)
+if ($have_bug_32285)
{
--disable_ps_protocol
}
+--vertical_results
SELECT * FROM test.v1 order by f59 limit 0,10;
+--horizontal_results
--enable_ps_protocol
Drop view test.v1 ;
@@ -2704,7 +2742,7 @@ CREATE VIEW v1 AS SELECT f1 FROM t1;
# DROP VIEW
DROP VIEW v1;
---error 1051
+--error ER_BAD_TABLE_ERROR
DROP VIEW v1;
CREATE VIEW v1 AS SELECT f1 FROM t1;
@@ -2751,7 +2789,7 @@ while ($num1)
# DROP VIEW v1_top < |RESTRICD|CASCADE> must be successful.
eval $aux1 ;
# Check, that v1_top really no more exists + cleanup for the second sub test
- --error 1051
+ --error ER_BAD_TABLE_ERROR
DROP VIEW v1_top;
CREATE VIEW v1_top AS SELECT * FROM v1_base;
@@ -2781,8 +2819,8 @@ let $message= Testcase 3.3.1.69, 3.3.1.70, 3.3.1.A5 ;
# 3.3.1.A5 SHOW COLUMNS, SHOW FIELDS, DESCRIBE, EXPLAIN
# statement is executed
###############################################################################
-# Note(ML): There will be no non failing sub testcases with SHOW here.
-# They will be done in 3.3.11 ff.
+# Note(mleich): There will be no non failing sub testcases with SHOW here.
+# They will be done in 3.3.11 ff.
--disable_warnings
DROP TABLE IF EXISTS t1 ;
DROP VIEW IF EXISTS v1 ;
@@ -2793,24 +2831,24 @@ DROP VIEW v1 ;
# The negative tests:
# SELECT
---error 1146
+--error ER_NO_SUCH_TABLE
SELECT * FROM v1 ;
#
---error 1146
+--error ER_NO_SUCH_TABLE
SHOW CREATE VIEW v1 ;
---error 1146
+--error ER_NO_SUCH_TABLE
SHOW CREATE TABLE v1 ;
# Attention: Like is a filter. So we will get an empty result set here.
SHOW TABLE STATUS like 'v1' ;
SHOW TABLES LIKE 'v1';
---error 1146
+--error ER_NO_SUCH_TABLE
SHOW COLUMNS FROM v1;
---error 1146
+--error ER_NO_SUCH_TABLE
SHOW FIELDS FROM v1;
CHECK TABLE v1;
---error 1146
+--error ER_NO_SUCH_TABLE
DESCRIBE v1;
---error 1146
+--error ER_NO_SUCH_TABLE
EXPLAIN SELECT * FROM v1;
Use test;
@@ -2879,34 +2917,34 @@ eval EXPLAIN SELECT * FROM test3.v$toplevel;
# 1.2 Check the top level view when a base VIEW is dropped
DROP VIEW test3.v0;
eval SHOW CREATE VIEW test3.v$toplevel;
---error 1356
+--error ER_VIEW_INVALID
eval SELECT * FROM test3.v$toplevel;
---error 1356
+--error ER_VIEW_INVALID
eval EXPLAIN SELECT * FROM test3.v$toplevel;
# 2. Complicated nested VIEWs
# parameter @max_level = nesting level
# There is a limit(@join_limit = 61) for the number of tables which
-# could be joined. This limit will be reached, when we set
+# could be joined. This limit will be reached, when we set
# @max_level = @join_limit - 1 .
--disable_query_log
#++++++++++++++++++++++++++++++++++++++++++++++
# OBN - Reduced the value of join limit to 30
# Above seems to hang - FIXME
-# ML - Reason unclear why it hangs for OBN on innodb and memory.
-# Hypothesis: Maybe the consumption of virtual memory is high
-# and OBN's box performs excessive paging.
-# (RAM: OBN ~384MB RAM, ML 1 GB)
+# mleich - Reason unclear why it hangs for OBN on innodb and memory.
+# Hypothesis: Maybe the consumption of virtual memory is high
+# and OBN's box performs excessive paging.
+# (RAM: OBN ~384MB RAM, mleich 1 GB)
#++++++++++++++++++++++++++++++++++++++++++++++
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)'
+# of "ERROR HY000: Got temporary error 4006 'Connect failure
+# - out of connection objects (increase MaxNoOfConcurrentTransactions)'
# from NDBCLUSTER " to early;
#SET @join_limit = 61;
-SET @join_limit = 28; # OBN - see above
+SET @join_limit = 28; # OBN - see above
SET @max_level = @join_limit - 1;
--enable_query_log
@@ -3042,9 +3080,9 @@ let $sublevel= `SELECT @max_level`;
eval CREATE VIEW test1.v$level AS SELECT f1, f2
FROM test3.t1 tab1 NATURAL JOIN test1.v$sublevel tab2;
eval SHOW CREATE VIEW test1.v$level;
-# the following line as written as '--eror 1116' and the command
+# the following line as written as '--eror ER_TOO_MANY_TABLES' and the command
# is successful so assuming no expected error was intended
-# --error 1116
+# --error ER_TOO_MANY_TABLES
eval SELECT CAST(f1 AS SIGNED INTEGER) AS f1,
CAST(f2 AS CHAR) AS f2 FROM test1.v$level;
let $message= The output of following EXPLAIN is deactivated, because the result
@@ -3055,9 +3093,9 @@ if (1)
{
--disable_result_log
}
-# the following line as written as '--eror 1116' and the command
+# the following line as written as '--eror ER_TOO_MANY_TABLES' and the command
# is successful so assuming no expected error was intended
-# --error 1116
+# --error ER_TOO_MANY_TABLES
eval EXPLAIN SELECT CAST(f1 AS SIGNED INTEGER) AS f1,
CAST(f2 AS CHAR) AS f2 FROM test1.v$level;
if (1)
@@ -3070,10 +3108,10 @@ eval DROP VIEW IF EXISTS test1.v$level;
# and check the behaviour of the top level view.
# 2.3.1 Exchange numeric and string column
--disable_result_log
-CREATE OR REPLACE VIEW test1.v0 AS
+CREATE OR REPLACE VIEW test1.v0 AS
SELECT f1 as f2, f2 as f1 FROM test2.t1;
# 2.3.2 DATE instead of numeric
-CREATE OR REPLACE VIEW test2.v0 AS
+CREATE OR REPLACE VIEW test2.v0 AS
SELECT CAST('0001-01-01' AS DATE) as f1, f2 FROM test3.t1;
eval SHOW CREATE VIEW test1.v$toplevel;
eval SELECT CAST(f1 AS SIGNED INTEGER) AS f1,
@@ -3153,11 +3191,13 @@ Create view test.v1 AS SELECT f59,f60,f61 FROM tb2 ;
INSERT INTO test.v1 ( f59 , f60 ) values (2005,0101) ;
--disable_info
-if ($have_bug_11589)
+if ($have_bug_32285)
{
--disable_ps_protocol
}
+--vertical_results
SELECT * FROM tb2 where f59 = 2005 and f60 = 0101 ;
+--horizontal_results
--enable_ps_protocol
SELECT f59,f60 FROM test.v1 where f59 = 2005 and f60 = 0101 ;
DELETE FROM tb2 where f59 = 2005 and f60 = 0101 ;
@@ -3182,11 +3222,13 @@ CREATE VIEW test.v1 AS SELECT f59,f60,f61 FROM tb2 ;
UPDATE test.v1 SET f59 = 8 WHERE f59 = 780 and f60 = 105;
--disable_info
-if ($have_bug_11589)
+if ($have_bug_32285)
{
--disable_ps_protocol
}
+--vertical_results
SELECT * FROM tb2 where f59 = 8 and f60 = 105;
+--horizontal_results
--enable_ps_protocol
SELECT f59,f60 FROM test.v1 where f59 = 8 and f60 = 105 ;
@@ -3210,11 +3252,13 @@ CREATE VIEW test.v1 AS SELECT f59,f60,f61 FROM tb2 ;
UPDATE test.v1 SET f59 = 891 WHERE f60 = 105 ;
--disable_info
-if ($have_bug_11589)
+if ($have_bug_32285)
{
--disable_ps_protocol
}
+--vertical_results
SELECT * FROM tb2 where f59 = 891 and f60 = 105;
+--horizontal_results
--enable_ps_protocol
SELECT f59,f60 FROM test.v1 where f59 = 891 and f60 = 105 ;
@@ -3536,25 +3580,25 @@ DELETE FROM t1;
#------------------------------------------------
INSERT INTO t1 VALUES(1, 'ABC', -1.2E-3, 'X');
# UPDATE my_greeting - f1
---error 1348
+--error ER_NONUPDATEABLE_COLUMN
UPDATE v1 SET my_greeting = 'Hej' WHERE f1 = 1;
SELECT * from t1;
DELETE FROM t1;
INSERT INTO t1 VALUES(1, 'ABC', -1.2E-3, 'X');
# UPDATE my_greeting - f2
---error 1348
+--error ER_NONUPDATEABLE_COLUMN
UPDATE v1 SET my_greeting = 'Hej' WHERE f2 = 'ABC';
SELECT * from t1;
DELETE FROM t1;
INSERT INTO t1 VALUES(1, 'ABC', -1.2E-3, 'X');
# UPDATE my_greeting - my_greeting
---error 1348
+--error ER_NONUPDATEABLE_COLUMN
UPDATE v1 SET my_greeting = 'Hej' WHERE my_greeting = 'HELLO';
SELECT * from t1;
DELETE FROM t1;
INSERT INTO t1 VALUES(1, 'ABC', -1.2E-3, 'X');
# UPDATE my_greeting - none
---error 1348
+--error ER_NONUPDATEABLE_COLUMN
UPDATE v1 SET my_greeting = 'Hej';
SELECT * from t1;
DELETE FROM t1;
@@ -3577,7 +3621,7 @@ DROP VIEW v1;
CREATE VIEW v1 AS SELECT f1, f2, f4 FROM t1;
# This INSERT must fail
---error 1423
+--error ER_NO_DEFAULT_FOR_VIEW_FIELD
INSERT INTO v1 SET f1 = 1;
SELECT * from t1;
DELETE FROM t1;
@@ -3630,10 +3674,10 @@ let $message= Testcases 3.3.2.7 - 3.3.2.9,
# Summary of 3.3.2.7 - 3.3.2.11
# Ensure that a view with a definition that includes
# UNION or UNION DISTINCT or UNION ALL or EXCEPT or INTERSECT
-# rejects any INSERT or UPDATE or DELETE statement with an
+# rejects any INSERT or UPDATE or DELETE statement with an
# appropriate error message
#
-# ML: I assume the type of the storage engine does not play any role.
+# mleich: I assume the type of the storage engine does not play any role.
###############################################################################
INSERT INTO tb2 (f59,f60,f61) VALUES (77,185,126) ;
INSERT INTO tb2 (f59,f60,f61) VALUES (59,58,54) ;
@@ -3668,9 +3712,9 @@ while ($num)
eval $aux;
--error ER_NON_INSERTABLE_TABLE
INSERT INTO v1 VALUES (3000);
- --error 1288
+ --error ER_NON_UPDATABLE_TABLE
UPDATE v1 SET f61 = 100 WHERE f61 = 32;
- --error 1288
+ --error ER_NON_UPDATABLE_TABLE
DELETE FROM v1;
DROP VIEW v1 ;
@@ -3767,19 +3811,6 @@ SET @variant6= 'CREATE VIEW v1 AS SELECT (SELECT f60 FROM t2 WHERE f59=19) AS f6
# For a WHERE clause sub query that refers to a table also referenced in a
# FROM clause 3.3.2.18
SET @variant7= 'CREATE VIEW v1 AS SELECT f61 FROM v2';
-# Attention: The attempt to UPDATE the next VIEW fails like expected,
-# but the error message
-# ERROR 1093 (HY000) : You can't specify target table 'v1' for
-# update in FORM clause"
-# is wrong. The server must deliver ERROR 1288.
-# Bug#10773 Incorrect message is displayed while updating a view
-# ML FIXME (remove the comment above, replace --error 1288,1093 with
-# --error 1288 and update the file with expected results)
-# when Bug#10773 is solved
-# For a reference to a non-updateable view 3.3.2.19
-let $message= Some server responses suffer from
-Bug#10773 Incorrect message is displayed while updating a view;
---source include/show_msg80.inc
SET @variant8= 'CREATE VIEW v1 AS SELECT f59 AS f61 FROM t1 WHERE f60 IN (SELECT f59 FROM t1)';
# For ALGORITHM = TEMPTABLE 3.3.2.20
SET @variant9= 'CREATE ALGORITHM = TEMPTABLE VIEW v1 (f61) AS select f60 from t1';
@@ -3798,17 +3829,12 @@ while ($num)
--error ER_NON_INSERTABLE_TABLE
INSERT INTO v1 VALUES (1002);
- --error 1288, 1093
+ # --error ER_NON_UPDATABLE_TABLE, ER_UPDATE_TABLE_USED
+ --error ER_NON_UPDATABLE_TABLE
UPDATE v1 SET f61=1007;
- --error 1288
+ --error ER_NON_UPDATABLE_TABLE
DELETE FROM v1;
-
- # The following "--error 0" will be no more needed, when
- # Bug#12471: mysqltest, --error within loop affects wrong statement
- # is fixed.
- --error 0
DROP VIEW v1;
-
dec $num;
}
@@ -3827,7 +3853,7 @@ let $message= Testcases 3.3.A1;
#
# There is no specification of the intended behaviour within
# the MySQL manual. That means I assume the observed effects are
-# no bug as long we do not get a crash or obviously non
+# no bug as long we do not get a crash or obviously non
# reasonable results.
###############################################################################
--disable_warnings
@@ -3852,18 +3878,18 @@ SELECT * FROM v1 order by f1, report;
# 1. Name of one base table column is altered
ALTER TABLE t1 CHANGE COLUMN f4 f4x CHAR(5);
INSERT INTO t1 SET f1 = 0, f4x = 'ABC', report = 't1 1';
---error 1356
+--error ER_VIEW_INVALID
INSERT INTO v1 SET f1 = 0, f4 = 'ABC', report = 'v1 1';
---error 1054
+--error ER_BAD_FIELD_ERROR
INSERT INTO v1 SET f1 = 0, f4x = 'ABC', report = 'v1 1a';
---error 1356
+--error ER_VIEW_INVALID
INSERT INTO v1 SET f1 = 0, report = 'v1 1b';
DESCRIBE t1;
# Bug#12533 crash on DESCRIBE <view> after renaming base table column;
---error 1356
+--error ER_VIEW_INVALID
DESCRIBE v1;
SELECT * FROM t1 order by f1, report;
---error 1356
+--error ER_VIEW_INVALID
SELECT * FROM v1 order by f1, report;
ALTER TABLE t1 CHANGE COLUMN f4x f4 CHAR(5);
#
@@ -3894,11 +3920,11 @@ DESCRIBE v1;
SELECT * FROM t1 order by f1, report;
SELECT * FROM v1 order by f1, report;
#
-# 5. Type of one base table column altered numeric -> string
+# 5. Type of one base table column altered numeric -> string
ALTER TABLE t1 CHANGE COLUMN f1 f1 VARCHAR(30);
-INSERT INTO t1 SET f1 = '<------------- 30 ----------->',
+INSERT INTO t1 SET f1 = '<------------- 30 ----------->',
f4 = '<------ 20 -------->', report = 't1 5';
-INSERT INTO v1 SET f1 = '<------------- 30 ----------->',
+INSERT INTO v1 SET f1 = '<------------- 30 ----------->',
f4 = '<------ 20 -------->', report = 'v1 5';
DESCRIBE t1;
DESCRIBE v1;
@@ -3908,13 +3934,13 @@ SELECT * FROM v1 order by f1, report;
# 6. DROP of one base table column
ALTER TABLE t1 DROP COLUMN f2;
INSERT INTO t1 SET f1 = 'ABC', f4 = '<------ 20 -------->', report = 't1 6';
---error 1356
+--error ER_VIEW_INVALID
INSERT INTO v1 SET f1 = 'ABC', f4 = '<------ 20 -------->', report = 'v1 6';
DESCRIBE t1;
---error 1356
+--error ER_VIEW_INVALID
DESCRIBE v1;
SELECT * FROM t1 order by f1, report;
---error 1356
+--error ER_VIEW_INVALID
SELECT * FROM v1 order by f1, report;
#
# 7. Recreation of dropped base table column with the same data type like before
@@ -3945,7 +3971,7 @@ SELECT * FROM v1 order by f1, report;
ALTER TABLE t1 ADD COLUMN f3 NUMERIC(7,2);
INSERT INTO t1 SET f1 = 'ABC', f2 = -3.3E-4,
f3 = -2.2, f4 = '<------ 20 -------->', report = 't1 9';
---error 1054
+--error ER_BAD_FIELD_ERROR
INSERT INTO v1 SET f1 = 'ABC', f2 = -3.3E-4,
f3 = -2.2, f4 = '<------ 20 -------->', report = 'v1 9';
INSERT INTO v1 SET f1 = 'ABC', f2 = -3.3E-4,
@@ -3984,27 +4010,33 @@ DESCRIBE v2;
SELECT * FROM v2 order by 2;
# - What will be the content of base table created with AS SELECT ?
CREATE TABLE t2 AS SELECT f1, SQRT(f2) my_sqrt FROM t1;
-if ($have_bug_11589)
+if ($have_bug_32285)
{
--disable_ps_protocol
}
+--vertical_results
SELECT * FROM t2 order by 2;
+--horizontal_results
--enable_ps_protocol
DROP TABLE t2;
CREATE TABLE t2 AS SELECT * FROM v1;
-if ($have_bug_11589)
+if ($have_bug_32285)
{
--disable_ps_protocol
}
+--vertical_results
SELECT * FROM t2 order by 2;
+--horizontal_results
--enable_ps_protocol
DROP TABLE t2;
CREATE TABLE t2 AS SELECT * FROM v2;
-if ($have_bug_11589)
+if ($have_bug_32285)
{
--disable_ps_protocol
}
+--vertical_results
SELECT * FROM t2 order by 2;
+--horizontal_results
--enable_ps_protocol
#
DROP TABLE t1;
diff --git a/mysql-test/suite/funcs_2/r/innodb_charset.result b/mysql-test/suite/funcs_2/r/innodb_charset.result
index 25b720af1da..09076145c44 100644
--- a/mysql-test/suite/funcs_2/r/innodb_charset.result
+++ b/mysql-test/suite/funcs_2/r/innodb_charset.result
@@ -737,7 +737,6 @@ a_ascii a_len
44 1
64 1
45 1
-60 1
65 1
46 1
66 1
@@ -779,17 +778,18 @@ a_ascii a_len
78 1
59 1
79 1
-7E 1
5A 1
7A 1
-5D 1
5B 1
5C 1
+5D 1
5E 1
5F 1
+60 1
7B 1
7C 1
7D 1
+7E 1
7F 1
80 1
81 1
diff --git a/mysql-test/suite/funcs_2/r/memory_charset.result b/mysql-test/suite/funcs_2/r/memory_charset.result
index 073b057d733..8536ac4a9b2 100644
--- a/mysql-test/suite/funcs_2/r/memory_charset.result
+++ b/mysql-test/suite/funcs_2/r/memory_charset.result
@@ -737,7 +737,6 @@ a_ascii a_len
44 1
64 1
45 1
-60 1
65 1
46 1
66 1
@@ -779,17 +778,18 @@ a_ascii a_len
78 1
59 1
79 1
-7E 1
5A 1
7A 1
-5D 1
5B 1
5C 1
+5D 1
5E 1
5F 1
+60 1
7B 1
7C 1
7D 1
+7E 1
7F 1
80 1
81 1
diff --git a/mysql-test/suite/funcs_2/r/myisam_charset.result b/mysql-test/suite/funcs_2/r/myisam_charset.result
index 50ed8aca2cc..698cce1be37 100644
--- a/mysql-test/suite/funcs_2/r/myisam_charset.result
+++ b/mysql-test/suite/funcs_2/r/myisam_charset.result
@@ -737,7 +737,6 @@ a_ascii a_len
44 1
64 1
45 1
-60 1
65 1
46 1
66 1
@@ -779,17 +778,18 @@ a_ascii a_len
78 1
59 1
79 1
-7E 1
5A 1
7A 1
-5D 1
5B 1
5C 1
+5D 1
5E 1
5F 1
+60 1
7B 1
7C 1
7D 1
+7E 1
7F 1
80 1
81 1
diff --git a/mysql-test/suite/funcs_2/r/ndb_charset.result b/mysql-test/suite/funcs_2/r/ndb_charset.result
index 7a5c63f71d6..0a4dba2e302 100644
--- a/mysql-test/suite/funcs_2/r/ndb_charset.result
+++ b/mysql-test/suite/funcs_2/r/ndb_charset.result
@@ -737,7 +737,6 @@ a_ascii a_len
44 1
64 1
45 1
-60 1
65 1
46 1
66 1
@@ -779,17 +778,18 @@ a_ascii a_len
78 1
59 1
79 1
-7E 1
5A 1
7A 1
-5D 1
5B 1
5C 1
+5D 1
5E 1
5F 1
+60 1
7B 1
7C 1
7D 1
+7E 1
7F 1
80 1
81 1
diff --git a/mysql-test/suite/manual/r/rpl_replication_delay.result b/mysql-test/suite/manual/r/rpl_replication_delay.result
new file mode 100644
index 00000000000..a8fa6ce8265
--- /dev/null
+++ b/mysql-test/suite/manual/r/rpl_replication_delay.result
@@ -0,0 +1,136 @@
+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;
+show slave status /* Second_behind reports 0 */;;
+Slave_IO_State #
+Master_Host 127.0.0.1
+Master_User root
+Master_Port 9306
+Connect_Retry 1
+Master_Log_File master-bin.000001
+Read_Master_Log_Pos 106
+Relay_Log_File #
+Relay_Log_Pos #
+Relay_Master_Log_File master-bin.000001
+Slave_IO_Running Yes
+Slave_SQL_Running Yes
+Replicate_Do_DB
+Replicate_Ignore_DB
+Replicate_Do_Table
+Replicate_Ignore_Table
+Replicate_Wild_Do_Table
+Replicate_Wild_Ignore_Table
+Last_Errno 0
+Last_Error
+Skip_Counter 0
+Exec_Master_Log_Pos 106
+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 0
+Master_SSL_Verify_Server_Cert No
+Last_IO_Errno 0
+Last_IO_Error
+Last_SQL_Errno 0
+Last_SQL_Error
+drop table if exists t1;
+Warnings:
+Note 1051 Unknown table 't1'
+create table t1 (f1 int);
+flush logs /* contaminate rli->last_master_timestamp */;
+lock table t1 write;
+insert into t1 values (1);
+show slave status /* bug emulated: reports slave threads starting time about 3*3 not 3 secs */;;
+Slave_IO_State #
+Master_Host 127.0.0.1
+Master_User root
+Master_Port 9306
+Connect_Retry 1
+Master_Log_File master-bin.000001
+Read_Master_Log_Pos 367
+Relay_Log_File #
+Relay_Log_Pos #
+Relay_Master_Log_File master-bin.000001
+Slave_IO_Running Yes
+Slave_SQL_Running Yes
+Replicate_Do_DB
+Replicate_Ignore_DB
+Replicate_Do_Table
+Replicate_Ignore_Table
+Replicate_Wild_Do_Table
+Replicate_Wild_Ignore_Table
+Last_Errno 0
+Last_Error
+Skip_Counter 0
+Exec_Master_Log_Pos 279
+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 9
+Master_SSL_Verify_Server_Cert No
+Last_IO_Errno 0
+Last_IO_Error
+Last_SQL_Errno 0
+Last_SQL_Error
+unlock tables;
+flush logs /* this time rli->last_master_timestamp is not affected */;
+lock table t1 write;
+insert into t1 values (2);
+show slave status /* reports the correct diff with master query time about 3+3 secs */;;
+Slave_IO_State #
+Master_Host 127.0.0.1
+Master_User root
+Master_Port 9306
+Connect_Retry 1
+Master_Log_File master-bin.000001
+Read_Master_Log_Pos 455
+Relay_Log_File #
+Relay_Log_Pos #
+Relay_Master_Log_File master-bin.000001
+Slave_IO_Running Yes
+Slave_SQL_Running Yes
+Replicate_Do_DB
+Replicate_Ignore_DB
+Replicate_Do_Table
+Replicate_Ignore_Table
+Replicate_Wild_Do_Table
+Replicate_Wild_Ignore_Table
+Last_Errno 0
+Last_Error
+Skip_Counter 0
+Exec_Master_Log_Pos 367
+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 7
+Master_SSL_Verify_Server_Cert No
+Last_IO_Errno 0
+Last_IO_Error
+Last_SQL_Errno 0
+Last_SQL_Error
+unlock tables;
+drop table t1;
diff --git a/mysql-test/suite/manual/t/rpl_replication_delay-slave.opt b/mysql-test/suite/manual/t/rpl_replication_delay-slave.opt
new file mode 100644
index 00000000000..24a4c5952fe
--- /dev/null
+++ b/mysql-test/suite/manual/t/rpl_replication_delay-slave.opt
@@ -0,0 +1 @@
+--loose-debug=d,let_first_flush_log_change_timestamp
diff --git a/mysql-test/suite/manual/t/rpl_replication_delay.test b/mysql-test/suite/manual/t/rpl_replication_delay.test
new file mode 100644
index 00000000000..8230698c8f9
--- /dev/null
+++ b/mysql-test/suite/manual/t/rpl_replication_delay.test
@@ -0,0 +1,71 @@
+#
+# Testing replication delay reporting (bug#29309)
+# there is an unavoidable non-determinism in the test
+# please compare the results with the comments
+#
+
+
+source include/master-slave.inc;
+
+connection master;
+#connection slave;
+sync_slave_with_master;
+--replace_result $DEFAULT_MASTER_PORT DEFAULT_MASTER_PORT
+--replace_column 1 # 8 # 9 # 23 #
+--query_vertical show slave status /* Second_behind reports 0 */;
+sleep 3;
+
+### bug emulation
+
+connection master;
+drop table if exists t1;
+create table t1 (f1 int);
+sleep 3;
+
+#connection slave;
+sync_slave_with_master;
+flush logs /* contaminate rli->last_master_timestamp */;
+
+connection slave;
+lock table t1 write;
+
+connection master;
+insert into t1 values (1);
+
+sleep 3;
+
+connection slave;
+--replace_result $DEFAULT_MASTER_PORT DEFAULT_MASTER_PORT
+--replace_column 1 # 8 # 9 # 23 #
+--query_vertical show slave status /* bug emulated: reports slave threads starting time about 3*3 not 3 secs */;
+unlock tables;
+
+connection master;
+sync_slave_with_master;
+
+### bugfix
+
+
+connection slave;
+flush logs /* this time rli->last_master_timestamp is not affected */;
+lock table t1 write;
+
+connection master;
+insert into t1 values (2);
+sleep 3;
+
+connection slave;
+--replace_result $DEFAULT_MASTER_PORT DEFAULT_MASTER_PORT
+--replace_column 1 # 8 # 9 # 23 #
+--query_vertical show slave status /* reports the correct diff with master query time about 3+3 secs */;
+unlock tables;
+
+connection master;
+drop table t1;
+
+#connection slave;
+sync_slave_with_master;
+
+
+# End of tests
+
diff --git a/mysql-test/suite/ndb/r/ndb_auto_increment.result b/mysql-test/suite/ndb/r/ndb_auto_increment.result
new file mode 100644
index 00000000000..5740ed38242
--- /dev/null
+++ b/mysql-test/suite/ndb/r/ndb_auto_increment.result
@@ -0,0 +1,445 @@
+DROP TABLE IF EXISTS t1,t2;
+DROP TABLE IF EXISTS t1;
+set @old_auto_increment_offset = @@session.auto_increment_offset;
+set @old_auto_increment_increment = @@session.auto_increment_increment;
+set @old_ndb_autoincrement_prefetch_sz = @@session.ndb_autoincrement_prefetch_sz;
+flush status;
+create table t1 (a int not null auto_increment primary key) engine ndb;
+insert into t1 values (NULL);
+select * from t1 order by a;
+a
+1
+update t1 set a = 5 where a = 1;
+insert into t1 values (NULL);
+select * from t1 order by a;
+a
+5
+6
+insert into t1 values (7);
+insert into t1 values (NULL);
+select * from t1 order by a;
+a
+5
+6
+7
+8
+insert into t1 values (2);
+insert into t1 values (NULL);
+select * from t1 order by a;
+a
+2
+5
+6
+7
+8
+9
+update t1 set a = 4 where a = 2;
+insert into t1 values (NULL);
+select * from t1 order by a;
+a
+4
+5
+6
+7
+8
+9
+10
+delete from t1 where a = 10;
+insert into t1 values (NULL);
+select * from t1 order by a;
+a
+4
+5
+6
+7
+8
+9
+11
+replace t1 values (NULL);
+select * from t1 order by a;
+a
+4
+5
+6
+7
+8
+9
+11
+12
+replace t1 values (15);
+select * from t1 order by a;
+a
+4
+5
+6
+7
+8
+9
+11
+12
+15
+replace into t1 values (NULL);
+select * from t1 order by a;
+a
+4
+5
+6
+7
+8
+9
+11
+12
+15
+16
+replace t1 values (15);
+select * from t1 order by a;
+a
+4
+5
+6
+7
+8
+9
+11
+12
+15
+16
+insert ignore into t1 values (NULL);
+select * from t1 order by a;
+a
+4
+5
+6
+7
+8
+9
+11
+12
+15
+16
+17
+insert ignore into t1 values (15), (NULL);
+select * from t1 order by a;
+a
+4
+5
+6
+7
+8
+9
+11
+12
+15
+16
+17
+18
+insert into t1 values (15)
+on duplicate key update a = 20;
+insert into t1 values (NULL);
+select * from t1 order by a;
+a
+4
+5
+6
+7
+8
+9
+11
+12
+16
+17
+18
+20
+21
+insert into t1 values (NULL) on duplicate key update a = 30;
+select * from t1 order by a;
+a
+4
+5
+6
+7
+8
+9
+11
+12
+16
+17
+18
+20
+21
+22
+insert into t1 values (30) on duplicate key update a = 40;
+select * from t1 order by a;
+a
+4
+5
+6
+7
+8
+9
+11
+12
+16
+17
+18
+20
+21
+22
+30
+insert ignore into t1 values(600),(NULL),(NULL),(610),(NULL);
+select * from t1 order by a;
+a
+4
+5
+6
+7
+8
+9
+11
+12
+16
+17
+18
+20
+21
+22
+30
+600
+601
+602
+610
+611
+drop table t1;
+create table t1 (a int not null primary key,
+b int not null unique auto_increment) engine ndb;
+insert into t1 values (1, NULL);
+insert into t1 values (3, NULL);
+update t1 set b = 3 where a = 3;
+insert into t1 values (4, NULL);
+select * from t1 order by a;
+a b
+1 1
+3 3
+4 4
+drop table t1;
+CREATE TABLE t1 (
+pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
+b INT NOT NULL,
+c INT NOT NULL UNIQUE
+) ENGINE=NDBCLUSTER;
+CREATE TABLE t2 (
+pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
+b INT NOT NULL,
+c INT NOT NULL UNIQUE
+) ENGINE=MYISAM;
+SET @@session.auto_increment_increment=10;
+INSERT INTO t1 (b,c) VALUES (1,0),(2,1),(3,2);
+INSERT INTO t2 (b,c) VALUES (1,0),(2,1),(3,2);
+SELECT * FROM t1 ORDER BY pk;
+pk b c
+1 1 0
+11 2 1
+21 3 2
+SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
+COUNT(t1.pk)
+3
+TRUNCATE t1;
+TRUNCATE t2;
+SET @@session.auto_increment_offset=5;
+INSERT INTO t1 (b,c) VALUES (1,0),(2,1),(3,2);
+INSERT INTO t1 (pk,b,c) VALUES (27,4,3),(NULL,5,4),(99,6,5),(NULL,7,6);
+INSERT INTO t2 (b,c) VALUES (1,0),(2,1),(3,2);
+INSERT INTO t2 (pk,b,c) VALUES (27,4,3),(NULL,5,4),(99,6,5),(NULL,7,6);
+SELECT * FROM t1 ORDER BY pk;
+pk b c
+5 1 0
+15 2 1
+25 3 2
+27 4 3
+35 5 4
+99 6 5
+105 7 6
+SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
+COUNT(t1.pk)
+7
+TRUNCATE t1;
+TRUNCATE t2;
+SET @@session.auto_increment_increment=2;
+INSERT INTO t1 (b,c) VALUES (1,0),(2,1),(3,2);
+INSERT INTO t2 (b,c) VALUES (1,0),(2,1),(3,2);
+SELECT * FROM t1 ORDER BY pk;
+pk b c
+1 1 0
+3 2 1
+5 3 2
+SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
+COUNT(t1.pk)
+3
+DROP TABLE t1, t2;
+CREATE TABLE t1 (
+pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
+b INT NOT NULL,
+c INT NOT NULL UNIQUE
+) ENGINE=NDBCLUSTER AUTO_INCREMENT = 7;
+CREATE TABLE t2 (
+pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
+b INT NOT NULL,
+c INT NOT NULL UNIQUE
+) ENGINE=MYISAM AUTO_INCREMENT = 7;
+SET @@session.auto_increment_offset=1;
+SET @@session.auto_increment_increment=1;
+INSERT INTO t1 (b,c) VALUES (1,0),(2,1),(3,2);
+INSERT INTO t2 (b,c) VALUES (1,0),(2,1),(3,2);
+SELECT * FROM t1 ORDER BY pk;
+pk b c
+7 1 0
+8 2 1
+9 3 2
+SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
+COUNT(t1.pk)
+3
+DROP TABLE t1, t2;
+CREATE TABLE t1 (
+pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
+b INT NOT NULL,
+c INT NOT NULL UNIQUE
+) ENGINE=NDBCLUSTER AUTO_INCREMENT = 3;
+CREATE TABLE t2 (
+pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
+b INT NOT NULL,
+c INT NOT NULL UNIQUE
+) ENGINE=MYISAM AUTO_INCREMENT = 3;
+SET @@session.auto_increment_offset=5;
+SET @@session.auto_increment_increment=10;
+INSERT INTO t1 (b,c) VALUES (1,0),(2,1),(3,2);
+INSERT INTO t2 (b,c) VALUES (1,0),(2,1),(3,2);
+SELECT * FROM t1 ORDER BY pk;
+pk b c
+5 1 0
+15 2 1
+25 3 2
+SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
+COUNT(t1.pk)
+3
+DROP TABLE t1, t2;
+CREATE TABLE t1 (
+pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
+b INT NOT NULL,
+c INT NOT NULL UNIQUE
+) ENGINE=NDBCLUSTER AUTO_INCREMENT = 7;
+CREATE TABLE t2 (
+pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
+b INT NOT NULL,
+c INT NOT NULL UNIQUE
+) ENGINE=MYISAM AUTO_INCREMENT = 7;
+SET @@session.auto_increment_offset=5;
+SET @@session.auto_increment_increment=10;
+INSERT INTO t1 (b,c) VALUES (1,0),(2,1),(3,2);
+INSERT INTO t2 (b,c) VALUES (1,0),(2,1),(3,2);
+SELECT * FROM t1 ORDER BY pk;
+pk b c
+15 1 0
+25 2 1
+35 3 2
+SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
+COUNT(t1.pk)
+3
+DROP TABLE t1, t2;
+CREATE TABLE t1 (
+pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
+b INT NOT NULL,
+c INT NOT NULL UNIQUE
+) ENGINE=NDBCLUSTER AUTO_INCREMENT = 5;
+CREATE TABLE t2 (
+pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
+b INT NOT NULL,
+c INT NOT NULL UNIQUE
+) ENGINE=MYISAM AUTO_INCREMENT = 5;
+SET @@session.auto_increment_offset=5;
+SET @@session.auto_increment_increment=10;
+INSERT INTO t1 (b,c) VALUES (1,0),(2,1),(3,2);
+INSERT INTO t2 (b,c) VALUES (1,0),(2,1),(3,2);
+SELECT * FROM t1 ORDER BY pk;
+pk b c
+5 1 0
+15 2 1
+25 3 2
+SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
+COUNT(t1.pk)
+3
+DROP TABLE t1, t2;
+CREATE TABLE t1 (
+pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
+b INT NOT NULL,
+c INT NOT NULL UNIQUE
+) ENGINE=NDBCLUSTER AUTO_INCREMENT = 100;
+CREATE TABLE t2 (
+pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
+b INT NOT NULL,
+c INT NOT NULL UNIQUE
+) ENGINE=MYISAM AUTO_INCREMENT = 100;
+SET @@session.auto_increment_offset=5;
+SET @@session.auto_increment_increment=10;
+INSERT INTO t1 (b,c) VALUES (1,0),(2,1),(3,2);
+INSERT INTO t2 (b,c) VALUES (1,0),(2,1),(3,2);
+SELECT * FROM t1 ORDER BY pk;
+pk b c
+105 1 0
+115 2 1
+125 3 2
+SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
+COUNT(t1.pk)
+3
+DROP TABLE t1, t2;
+SET @@session.auto_increment_offset=1;
+SET @@session.auto_increment_increment=1;
+set ndb_autoincrement_prefetch_sz = 32;
+drop table if exists t1;
+SET @@session.auto_increment_offset=1;
+SET @@session.auto_increment_increment=1;
+set ndb_autoincrement_prefetch_sz = 32;
+create table t1 (a int not null auto_increment primary key) engine ndb;
+insert into t1 values (NULL);
+insert into t1 values (NULL);
+select * from t1 order by a;
+a
+1
+33
+insert into t1 values (20);
+insert into t1 values (NULL);
+select * from t1 order by a;
+a
+1
+20
+33
+34
+insert into t1 values (35);
+insert into t1 values (NULL);
+insert into t1 values (NULL);
+ERROR 23000: Duplicate entry '35' for key 'PRIMARY'
+select * from t1 order by a;
+a
+1
+20
+21
+33
+34
+35
+insert into t1 values (100);
+insert into t1 values (NULL);
+insert into t1 values (NULL);
+select * from t1 order by a;
+a
+1
+20
+21
+22
+33
+34
+35
+100
+101
+set auto_increment_offset = @old_auto_increment_offset;
+set auto_increment_increment = @old_auto_increment_increment;
+set ndb_autoincrement_prefetch_sz = @old_ndb_autoincrement_prefetch_sz;
+drop table t1;
diff --git a/mysql-test/suite/ndb/r/ndb_basic.result b/mysql-test/suite/ndb/r/ndb_basic.result
index 4eddaeb1227..9f4f8c0755c 100644
--- a/mysql-test/suite/ndb/r/ndb_basic.result
+++ b/mysql-test/suite/ndb/r/ndb_basic.result
@@ -869,6 +869,30 @@ a b
3 30
4 1
drop table t1,t2;
+create table t1 (a varchar(100) primary key, b varchar(100)) engine = NDB;
+insert into t1 values
+('a', 'a'),('b','b'),('c', 'c'),('aa', 'aa'),('bb', 'bb'),('cc', 'cc');
+replace into t1 values ('a', '-a');
+replace into t1 values ('b', '-b');
+replace into t1 values ('c', '-c');
+replace into t1 values ('aa', '-aa');
+replace into t1 values ('bb', '-bb');
+replace into t1 values ('cc', '-cc');
+replace into t1 values ('aaa', '-aaa');
+replace into t1 values ('bbb', '-bbb');
+replace into t1 values ('ccc', '-ccc');
+select * from t1 order by 1,2;
+a b
+a -a
+aa -aa
+aaa -aaa
+b -b
+bb -bb
+bbb -bbb
+c -c
+cc -cc
+ccc -ccc
+drop table t1;
End of 5.0 tests
CREATE TABLE t1 (a VARCHAR(255) NOT NULL,
CONSTRAINT pk_a PRIMARY KEY (a))engine=ndb;
diff --git a/mysql-test/suite/ndb/r/ndb_binlog_format.result b/mysql-test/suite/ndb/r/ndb_binlog_format.result
index ed26060e2a4..b42a528a460 100644
--- a/mysql-test/suite/ndb/r/ndb_binlog_format.result
+++ b/mysql-test/suite/ndb/r/ndb_binlog_format.result
@@ -15,8 +15,12 @@ COMMIT;
show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (1,1), (1,2), (2,1), (2,2)
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Query # # use `test`; INSERT INTO t2 VALUES (1,1), (1,2), (2,1), (2,2)
+master-bin.000001 # Query # # use `test`; COMMIT
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Query # # use `test`; UPDATE t1, t2 SET m = 2, b = 3 WHERE n = c
+master-bin.000001 # Query # # use `test`; COMMIT
master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Query # # use `test`; INSERT INTO t3 VALUES (1,1), (1,2), (2,1), (2,2)
master-bin.000001 # Query # # use `test`; UPDATE t1, t3 SET m = 2, e = 3 WHERE n = f
diff --git a/mysql-test/suite/ndb/r/ndb_blob.result b/mysql-test/suite/ndb/r/ndb_blob.result
index 34f2c5fdd66..31ce36864af 100644
--- a/mysql-test/suite/ndb/r/ndb_blob.result
+++ b/mysql-test/suite/ndb/r/ndb_blob.result
@@ -568,3 +568,24 @@ select count(*) from t1;
count(*)
0
drop table t1;
+create table t1(
+a int,
+blob_nn blob not null,
+text_nn text not null,
+blob_nl blob,
+text_nl text,
+primary key(a)
+) engine=ndb;
+insert into t1(a) values (1);
+Warnings:
+Warning 1364 Field 'blob_nn' doesn't have a default value
+Warning 1364 Field 'text_nn' doesn't have a default value
+insert into t1(a, text_nl) values (2, 'MySQL Cluster NDB');
+Warnings:
+Warning 1364 Field 'blob_nn' doesn't have a default value
+Warning 1364 Field 'text_nn' doesn't have a default value
+select a, length(blob_nn), length(text_nn), blob_nl, text_nl from t1 order by a;
+a length(blob_nn) length(text_nn) blob_nl text_nl
+1 0 0 NULL NULL
+2 0 0 NULL MySQL Cluster NDB
+drop table t1;
diff --git a/mysql-test/suite/ndb/r/ndb_charset.result b/mysql-test/suite/ndb/r/ndb_charset.result
index 1c65a380039..e84c906dd7e 100644
--- a/mysql-test/suite/ndb/r/ndb_charset.result
+++ b/mysql-test/suite/ndb/r/ndb_charset.result
@@ -112,9 +112,9 @@ unique key(a)
) engine=ndb;
insert into t1 values(1, 'aAa');
insert into t1 values(2, 'aaa');
-ERROR 23000: Duplicate entry '' for key '*UNKNOWN*'
+ERROR 23000: Duplicate entry 'aaa' for key 'a'
insert into t1 values(3, 'AAA');
-ERROR 23000: Duplicate entry '' for key '*UNKNOWN*'
+ERROR 23000: Duplicate entry 'AAA' for key 'a'
select * from t1 order by p;
p a
1 aAa
@@ -138,9 +138,9 @@ unique key(a)
) engine=ndb;
insert into t1 values (1,'A'),(2,'b '),(3,'C '),(4,'d '),(5,'E'),(6,'f');
insert into t1 values(99,'b');
-ERROR 23000: Duplicate entry '' for key '*UNKNOWN*'
+ERROR 23000: Duplicate entry 'b' for key 'a'
insert into t1 values(99,'a ');
-ERROR 23000: Duplicate entry '' for key '*UNKNOWN*'
+ERROR 23000: Duplicate entry 'a ' for key 'a'
select a,length(a) from t1 order by a;
a length(a)
A 1
diff --git a/mysql-test/suite/ndb/r/ndb_condition_pushdown.result b/mysql-test/suite/ndb/r/ndb_condition_pushdown.result
index 8d1dcc4ef18..1d61e2c59c2 100644
--- a/mysql-test/suite/ndb/r/ndb_condition_pushdown.result
+++ b/mysql-test/suite/ndb/r/ndb_condition_pushdown.result
@@ -1888,5 +1888,27 @@ set engine_condition_pushdown = 1;
SELECT fname, lname FROM t1 WHERE (fname like 'Y%') or (lname like 'F%');
fname lname
Young Foo
+drop table t1;
+create table t1 (a int, b int, c int, d int, primary key using hash(a))
+engine=ndbcluster;
+insert into t1 values (10,1,100,0+0x1111);
+insert into t1 values (20,2,200,0+0x2222);
+insert into t1 values (30,3,300,0+0x3333);
+insert into t1 values (40,4,400,0+0x4444);
+insert into t1 values (50,5,500,0+0x5555);
+set engine_condition_pushdown = on;
+select a,b,d from t1
+where b in (0,1,2,5)
+order by b;
+a b d
+10 1 4369
+20 2 8738
+50 5 21845
+a b d
+10 1 4369
+20 2 8738
+50 5 21845
+Warnings:
+Warning 4294 Scan filter is too large, discarded
set engine_condition_pushdown = @old_ecpd;
DROP TABLE t1,t2,t3,t4,t5;
diff --git a/mysql-test/suite/ndb/r/ndb_dd_basic.result b/mysql-test/suite/ndb/r/ndb_dd_basic.result
index 0ff28f889b7..f04905b8d13 100644
--- a/mysql-test/suite/ndb/r/ndb_dd_basic.result
+++ b/mysql-test/suite/ndb/r/ndb_dd_basic.result
@@ -8,20 +8,20 @@ INITIAL_SIZE 16M
UNDO_BUFFER_SIZE = 1M
ENGINE=MYISAM;
Warnings:
-Error 1477 Table storage engine 'MyISAM' does not support the create option 'TABLESPACE or LOGFILE GROUP'
+Error 1478 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 1477 Table storage engine 'MyISAM' does not support the create option 'TABLESPACE or LOGFILE GROUP'
+Error 1478 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 1477 Table storage engine 'MyISAM' does not support the create option 'TABLESPACE or LOGFILE GROUP'
+Error 1478 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 569769cfaef..d8d9e8631d5 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 1527 Failed to create LOGFILE GROUP
+Error 1528 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 b401dee8054..6c44c6fb822 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 1477 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK'
+Error 1478 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 1477 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK'
+Error 1478 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_index_unique.result b/mysql-test/suite/ndb/r/ndb_index_unique.result
index cc63ce69760..bfc0c5a2e56 100644
--- a/mysql-test/suite/ndb/r/ndb_index_unique.result
+++ b/mysql-test/suite/ndb/r/ndb_index_unique.result
@@ -22,7 +22,7 @@ select * from t1 where b = 4 order by a;
a b c
3 4 6
insert into t1 values(8, 2, 3);
-ERROR 23000: Duplicate entry '' for key '*UNKNOWN*'
+ERROR 23000: Duplicate entry '2' for key 'ib'
select * from t1 order by a;
a b c
1 2 3
@@ -93,7 +93,7 @@ a b c
1 1 1
4 4 NULL
insert into t1 values(5,1,1);
-ERROR 23000: Duplicate entry '' for key '*UNKNOWN*'
+ERROR 23000: Duplicate entry '1-1' for key 'bc'
drop table t1;
CREATE TABLE t2 (
a int unsigned NOT NULL PRIMARY KEY,
@@ -116,7 +116,7 @@ select * from t2 where b = 4 order by a;
a b c
3 4 6
insert into t2 values(8, 2, 3);
-ERROR 23000: Duplicate entry '' for key '*UNKNOWN*'
+ERROR 23000: Duplicate entry '2-3' for key 'b'
select * from t2 order by a;
a b c
1 2 3
@@ -139,7 +139,7 @@ a b c
8 2 3
create unique index bi using hash on t2(b);
insert into t2 values(9, 3, 1);
-ERROR 23000: Duplicate entry '' for key '*UNKNOWN*'
+ERROR 23000: Duplicate entry '3' for key 'bi'
alter table t2 drop index bi;
insert into t2 values(9, 3, 1);
select * from t2 order by a;
@@ -229,7 +229,7 @@ pk a
3 NULL
4 4
insert into t1 values (5,0);
-ERROR 23000: Duplicate entry '' for key '*UNKNOWN*'
+ERROR 23000: Duplicate entry '0' for key 'a'
select * from t1 order by pk;
pk a
-1 NULL
@@ -262,7 +262,7 @@ pk a b c
0 NULL 18 NULL
1 3 19 abc
insert into t2 values(2,3,19,'abc');
-ERROR 23000: Duplicate entry '' for key '*UNKNOWN*'
+ERROR 23000: Duplicate entry '3-abc' for key 'si'
select * from t2 order by pk;
pk a b c
-1 1 17 NULL
@@ -682,7 +682,7 @@ create table t1 (a int primary key, b varchar(1000) not null, unique key (b))
engine=ndb charset=utf8;
insert into t1 values (1, repeat(_utf8 0xe288ab6474, 200));
insert into t1 values (2, repeat(_utf8 0xe288ab6474, 200));
-ERROR 23000: Duplicate entry '' for key '*UNKNOWN*'
+ERROR 23000: Duplicate entry '∫dt∫dt∫dt∫dt∫dt∫dt∫dt∫dt∫dt∫dt∫dt∫dt∫d' for key 'b'
select a, sha1(b) from t1;
a sha1(b)
1 08f5d02c8b8bc244f275bdfc22c42c5cab0d9d7d
diff --git a/mysql-test/suite/ndb/r/ndb_insert.result b/mysql-test/suite/ndb/r/ndb_insert.result
index 51b346bbf7b..7551dc71823 100644
--- a/mysql-test/suite/ndb/r/ndb_insert.result
+++ b/mysql-test/suite/ndb/r/ndb_insert.result
@@ -657,172 +657,3 @@ a b
2 NULL
3 NULL
drop table t1;
-CREATE TABLE t1 (
-pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
-b INT NOT NULL,
-c INT NOT NULL UNIQUE
-) ENGINE=NDBCLUSTER;
-CREATE TABLE t2 (
-pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
-b INT NOT NULL,
-c INT NOT NULL UNIQUE
-) ENGINE=MYISAM;
-SET @@session.auto_increment_increment=10;
-INSERT INTO t1 (b,c) VALUES (1,0),(2,1),(3,2);
-INSERT INTO t2 (b,c) VALUES (1,0),(2,1),(3,2);
-SELECT * FROM t1 ORDER BY pk;
-pk b c
-1 1 0
-11 2 1
-21 3 2
-SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
-COUNT(t1.pk)
-3
-TRUNCATE t1;
-TRUNCATE t2;
-SET @@session.auto_increment_offset=5;
-INSERT INTO t1 (b,c) VALUES (1,0),(2,1),(3,2);
-INSERT INTO t1 (pk,b,c) VALUES (27,4,3),(NULL,5,4),(99,6,5),(NULL,7,6);
-INSERT INTO t2 (b,c) VALUES (1,0),(2,1),(3,2);
-INSERT INTO t2 (pk,b,c) VALUES (27,4,3),(NULL,5,4),(99,6,5),(NULL,7,6);
-SELECT * FROM t1 ORDER BY pk;
-pk b c
-5 1 0
-15 2 1
-25 3 2
-27 4 3
-35 5 4
-99 6 5
-105 7 6
-SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
-COUNT(t1.pk)
-7
-TRUNCATE t1;
-TRUNCATE t2;
-SET @@session.auto_increment_increment=2;
-INSERT INTO t1 (b,c) VALUES (1,0),(2,1),(3,2);
-INSERT INTO t2 (b,c) VALUES (1,0),(2,1),(3,2);
-SELECT * FROM t1 ORDER BY pk;
-pk b c
-1 1 0
-3 2 1
-5 3 2
-SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
-COUNT(t1.pk)
-3
-DROP TABLE t1, t2;
-CREATE TABLE t1 (
-pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
-b INT NOT NULL,
-c INT NOT NULL UNIQUE
-) ENGINE=NDBCLUSTER AUTO_INCREMENT = 7;
-CREATE TABLE t2 (
-pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
-b INT NOT NULL,
-c INT NOT NULL UNIQUE
-) ENGINE=MYISAM AUTO_INCREMENT = 7;
-SET @@session.auto_increment_offset=1;
-SET @@session.auto_increment_increment=1;
-INSERT INTO t1 (b,c) VALUES (1,0),(2,1),(3,2);
-INSERT INTO t2 (b,c) VALUES (1,0),(2,1),(3,2);
-SELECT * FROM t1 ORDER BY pk;
-pk b c
-7 1 0
-8 2 1
-9 3 2
-SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
-COUNT(t1.pk)
-3
-DROP TABLE t1, t2;
-CREATE TABLE t1 (
-pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
-b INT NOT NULL,
-c INT NOT NULL UNIQUE
-) ENGINE=NDBCLUSTER AUTO_INCREMENT = 3;
-CREATE TABLE t2 (
-pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
-b INT NOT NULL,
-c INT NOT NULL UNIQUE
-) ENGINE=MYISAM AUTO_INCREMENT = 3;
-SET @@session.auto_increment_offset=5;
-SET @@session.auto_increment_increment=10;
-INSERT INTO t1 (b,c) VALUES (1,0),(2,1),(3,2);
-INSERT INTO t2 (b,c) VALUES (1,0),(2,1),(3,2);
-SELECT * FROM t1 ORDER BY pk;
-pk b c
-5 1 0
-15 2 1
-25 3 2
-SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
-COUNT(t1.pk)
-3
-DROP TABLE t1, t2;
-CREATE TABLE t1 (
-pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
-b INT NOT NULL,
-c INT NOT NULL UNIQUE
-) ENGINE=NDBCLUSTER AUTO_INCREMENT = 7;
-CREATE TABLE t2 (
-pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
-b INT NOT NULL,
-c INT NOT NULL UNIQUE
-) ENGINE=MYISAM AUTO_INCREMENT = 7;
-SET @@session.auto_increment_offset=5;
-SET @@session.auto_increment_increment=10;
-INSERT INTO t1 (b,c) VALUES (1,0),(2,1),(3,2);
-INSERT INTO t2 (b,c) VALUES (1,0),(2,1),(3,2);
-SELECT * FROM t1 ORDER BY pk;
-pk b c
-15 1 0
-25 2 1
-35 3 2
-SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
-COUNT(t1.pk)
-3
-DROP TABLE t1, t2;
-CREATE TABLE t1 (
-pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
-b INT NOT NULL,
-c INT NOT NULL UNIQUE
-) ENGINE=NDBCLUSTER AUTO_INCREMENT = 5;
-CREATE TABLE t2 (
-pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
-b INT NOT NULL,
-c INT NOT NULL UNIQUE
-) ENGINE=MYISAM AUTO_INCREMENT = 5;
-SET @@session.auto_increment_offset=5;
-SET @@session.auto_increment_increment=10;
-INSERT INTO t1 (b,c) VALUES (1,0),(2,1),(3,2);
-INSERT INTO t2 (b,c) VALUES (1,0),(2,1),(3,2);
-SELECT * FROM t1 ORDER BY pk;
-pk b c
-5 1 0
-15 2 1
-25 3 2
-SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
-COUNT(t1.pk)
-3
-DROP TABLE t1, t2;
-CREATE TABLE t1 (
-pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
-b INT NOT NULL,
-c INT NOT NULL UNIQUE
-) ENGINE=NDBCLUSTER AUTO_INCREMENT = 100;
-CREATE TABLE t2 (
-pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
-b INT NOT NULL,
-c INT NOT NULL UNIQUE
-) ENGINE=MYISAM AUTO_INCREMENT = 100;
-SET @@session.auto_increment_offset=5;
-SET @@session.auto_increment_increment=10;
-INSERT INTO t1 (b,c) VALUES (1,0),(2,1),(3,2);
-INSERT INTO t2 (b,c) VALUES (1,0),(2,1),(3,2);
-SELECT * FROM t1 ORDER BY pk;
-pk b c
-105 1 0
-115 2 1
-125 3 2
-SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
-COUNT(t1.pk)
-3
-DROP TABLE t1, t2;
diff --git a/mysql-test/suite/ndb/r/ndb_lock_table.result b/mysql-test/suite/ndb/r/ndb_lock_table.result
new file mode 100644
index 00000000000..a0550273e1a
--- /dev/null
+++ b/mysql-test/suite/ndb/r/ndb_lock_table.result
@@ -0,0 +1,11 @@
+drop table if exists t1;
+create table t1 (a int) engine ndb;
+set autocommit=1;
+lock table t1 write;
+set autocommit=0;
+insert into t1 values (0);
+rollback;
+select * from t1;
+a
+unlock tables;
+drop table t1;
diff --git a/mysql-test/suite/ndb/r/ndb_multi.result b/mysql-test/suite/ndb/r/ndb_multi.result
index 2bc49bf9b45..40483887919 100644
--- a/mysql-test/suite/ndb/r/ndb_multi.result
+++ b/mysql-test/suite/ndb/r/ndb_multi.result
@@ -1,4 +1,5 @@
drop table if exists t1, t2, t3, t4;
+flush status;
drop table if exists t1, t2, t3, t4;
flush status;
create table t1 (a int) engine=ndbcluster;
@@ -121,3 +122,24 @@ show tables;
Tables_in_db
t2
drop database db;
+use test;
+create table `test`.`t1$EX`
+ (server_id int unsigned,
+master_server_id int unsigned,
+master_epoch bigint unsigned,
+count int unsigned,
+primary key(server_id, master_server_id,
+master_epoch, count))
+engine ndb;
+show tables like '%$%';
+Tables_in_test (%$%)
+t1$ex
+use test;
+show tables like '%$%';
+Tables_in_test (%$%)
+t1$ex
+drop table `test`.`t1$EX`;
+show tables like '%$%';
+Tables_in_test (%$%)
+show tables like '%$%';
+Tables_in_test (%$%)
diff --git a/mysql-test/suite/ndb/r/ndb_multi_row.result b/mysql-test/suite/ndb/r/ndb_multi_row.result
index cf5a76d6f01..3d34b16a1a8 100644
--- a/mysql-test/suite/ndb/r/ndb_multi_row.result
+++ b/mysql-test/suite/ndb/r/ndb_multi_row.result
@@ -1,4 +1,5 @@
drop table if exists t1, t2, t3, t4;
+flush status;
drop table if exists t1, t2, t3, t4;
flush status;
create table t1 (a int) engine=ndbcluster;
diff --git a/mysql-test/suite/ndb/r/ndb_row_format.result b/mysql-test/suite/ndb/r/ndb_row_format.result
index ea495e7e9c5..eea0692dd92 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 1477 Table storage engine 'ndbcluster' does not support the create option 'Row format FIXED incompatible with variable sized attribute'
+Error 1478 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 552629ae532..0a4f7cd0b5f 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 1527 Failed to create LOGFILE GROUP
+Error 1528 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 1527 Failed to create TABLESPACE
+Error 1528 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 1528 Failed to drop LOGFILE GROUP
+Error 1529 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 1532 Failed to alter: DROP DATAFILE
+Error 1533 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 1528 Failed to drop TABLESPACE
+Error 1529 Failed to drop TABLESPACE
DROP TABLESPACE ts1
ENGINE NDB;
DROP LOGFILE GROUP lg1
diff --git a/mysql-test/suite/ndb/r/ndb_update.result b/mysql-test/suite/ndb/r/ndb_update.result
index daea0e27a6a..fa083587956 100644
--- a/mysql-test/suite/ndb/r/ndb_update.result
+++ b/mysql-test/suite/ndb/r/ndb_update.result
@@ -28,7 +28,7 @@ pk1 b c
2 2 2
4 1 1
UPDATE t1 set pk1 = 1, c = 2 where pk1 = 4;
-ERROR 23000: Duplicate entry '' for key '*UNKNOWN*'
+ERROR 23000: Duplicate entry '2' for key 'c'
UPDATE IGNORE t1 set pk1 = 1, c = 2 where pk1 = 4;
select * from t1 order by pk1;
pk1 b c
@@ -41,6 +41,14 @@ pk1 b c
10 0 0
12 2 2
14 1 1
+create unique index ib on t1(b);
+update t1 set c = 4 where pk1 = 12;
+update ignore t1 set b = 55 where pk1 = 14;
+select * from t1 order by pk1;
+pk1 b c
+10 0 0
+12 2 4
+14 55 1
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (a int, b int, KEY (a, b)) ENGINE=ndbcluster;
CREATE TABLE t2 (a int, b int, UNIQUE KEY (a, b)) ENGINE=ndbcluster;
@@ -54,9 +62,9 @@ INSERT INTO t3 VALUES (2, 2);
UPDATE t1 SET a = 1;
UPDATE t1 SET a = 1 ORDER BY a;
UPDATE t2 SET a = 1;
-ERROR 23000: Duplicate entry '' for key '*UNKNOWN*'
+ERROR 23000: Duplicate entry '1-2' for key 'a'
UPDATE t2 SET a = 1 ORDER BY a;
-ERROR 23000: Duplicate entry '' for key '*UNKNOWN*'
+ERROR 23000: Duplicate entry '1-2' for key 'a'
UPDATE t3 SET a = 1;
ERROR 23000: Duplicate entry '1-2' for key 'PRIMARY'
UPDATE t3 SET a = 1 ORDER BY a;
diff --git a/mysql-test/suite/ndb/r/ndb_update_no_read.result b/mysql-test/suite/ndb/r/ndb_update_no_read.result
new file mode 100644
index 00000000000..4373800d338
--- /dev/null
+++ b/mysql-test/suite/ndb/r/ndb_update_no_read.result
@@ -0,0 +1,75 @@
+DROP TABLE IF EXISTS t1;
+create table t1 (a int not null primary key, b int not null, c int,
+unique index_b (b) using hash)
+engine ndb;
+insert into t1 values (1,10,1),(2,9,1),(3,8,1),(4,7,1),(5,6,1),(6,5,2),(7,4,2),(8,3,2),
+(9,2,2),(10,1,2);
+update t1 set c = 111, b = 20 where a = 1;
+select * from t1 where a = 1 order by a;
+a b c
+1 20 111
+delete from t1 where a = 1;
+select * from t1 where a = 1 order by a;
+a b c
+update t1 set c = 12, b = 19 where b = 2;
+select * from t1 where b = 2 order by a;
+a b c
+delete from t1 where b = 19;
+select * from t1 where b = 19 order by a;
+a b c
+update t1 set c = 22 where a = 10 or a >= 10;
+select * from t1 order by a;
+a b c
+2 9 1
+3 8 1
+4 7 1
+5 6 1
+6 5 2
+7 4 2
+8 3 2
+10 1 22
+update t1 set c = 23 where a in (8,10);
+select * from t1 order by a;
+a b c
+2 9 1
+3 8 1
+4 7 1
+5 6 1
+6 5 2
+7 4 2
+8 3 23
+10 1 23
+update t1 set c = 23 where a in (7,8) or a >= 10;
+select * from t1 order by a;
+a b c
+2 9 1
+3 8 1
+4 7 1
+5 6 1
+6 5 2
+7 4 23
+8 3 23
+10 1 23
+update t1 set c = 11 where a = 3 or b = 7;
+select * from t1 where a = 3 or b = 7 order by a;
+a b c
+3 8 11
+4 7 11
+update t1 set a = 13, b = 20 where a = 3;
+select * from t1 where a = 13 order by a;
+a b c
+13 20 11
+update t1 set a = 12, b = 19 where b = 7;
+select * from t1 where b = 19 order by a;
+a b c
+12 19 11
+select * from t1 where b = 7 order by a;
+a b c
+update t1 set c = 12, b = 29 where a = 5 and b = 6;
+select * from t1 where b = 19 order by a;
+a b c
+12 19 11
+delete from t1 where b = 6 and c = 12;
+select * from t1 where b = 6 order by a;
+a b c
+drop table t1;
diff --git a/mysql-test/suite/ndb/r/partition_03ndb.result b/mysql-test/suite/ndb/r/partition_03ndb.result
deleted file mode 100644
index 28339cc7435..00000000000
--- a/mysql-test/suite/ndb/r/partition_03ndb.result
+++ /dev/null
@@ -1,1361 +0,0 @@
-SET SESSION storage_engine='NDB' ;
-SET @max_row = 200;
-SET AUTOCOMMIT= 1;
-#------------------------------------------------------------------------
-# 0. Creation of an auxiliary table needed in all testcases
-#------------------------------------------------------------------------
-DROP TABLE IF EXISTS t0_template;
-CREATE TABLE t0_template ( f1 INTEGER, f2 char(20), PRIMARY KEY(f1))
-ENGINE = MEMORY;
-# Logging of 200 INSERTs into t0_template suppressed
-#------------------------------------------------------------------------
-# 1. Some syntax checks
-#------------------------------------------------------------------------
-# 1.1 Subpartioned table without subpartitioning rule must be rejected
-DROP TABLE IF EXISTS t1;
-#------------------------------------------------------------------------
-# 2. Checks where the engine is set on all supported CREATE TABLE
-# statement positions + basic operations on the tables
-#------------------------------------------------------------------------
-DROP TABLE IF EXISTS t1;
-# 2.1 table (non partitioned) for comparison
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20)) ENGINE = 'NDB' ;
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) default NULL,
- `f2` char(20) default NULL
-) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY KEY ()
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-# 2.2 table with engine setting just after column list
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20)) ENGINE = 'NDB'
-PARTITION BY HASH(f1) PARTITIONS 2;
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) default NULL,
- `f2` char(20) default NULL
-) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY HASH (f1) PARTITIONS 2
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-# 2.3 table with engine setting in the named partition part
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1)
-( PARTITION part1 STORAGE ENGINE = 'NDB' ,
-PARTITION part2 STORAGE ENGINE = 'NDB'
-);
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) default NULL,
- `f2` char(20) default NULL
-) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY HASH (f1) (PARTITION part1 ENGINE = ndbcluster, PARTITION part2 ENGINE = ndbcluster)
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-# 2.4 table with engine setting in the named subpartition part
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1)
-SUBPARTITION BY HASH(f1)
-( PARTITION part1 VALUES LESS THAN (1000)
-(SUBPARTITION subpart11 STORAGE ENGINE = 'NDB' ,
-SUBPARTITION subpart12 STORAGE ENGINE = 'NDB' ),
-PARTITION part2 VALUES LESS THAN (2000)
-(SUBPARTITION subpart21 STORAGE ENGINE = 'NDB' ,
-SUBPARTITION subpart22 STORAGE ENGINE = 'NDB' )
-);
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) default NULL,
- `f2` char(20) default NULL
-) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY RANGE (f1) SUBPARTITION BY HASH (f1) (PARTITION part1 VALUES LESS THAN (1000) (SUBPARTITION subpart11 ENGINE = ndbcluster, SUBPARTITION subpart12 ENGINE = ndbcluster), PARTITION part2 VALUES LESS THAN (2000) (SUBPARTITION subpart21 ENGINE = ndbcluster, SUBPARTITION subpart22 ENGINE = ndbcluster))
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-# 2.5 Ugly "incomplete" storage engine assignments
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1)
-( PARTITION part1 STORAGE ENGINE = 'NDB' ,
-PARTITION part2
-);
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) default NULL,
- `f2` char(20) default NULL
-) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY HASH (f1) (PARTITION part1 ENGINE = ndbcluster, PARTITION part2 ENGINE = ndbcluster)
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1)
-( PARTITION part1 ,
-PARTITION part2 STORAGE ENGINE = 'NDB'
-);
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) default NULL,
- `f2` char(20) default NULL
-) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY HASH (f1) (PARTITION part1 ENGINE = ndbcluster, PARTITION part2 ENGINE = ndbcluster)
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1)
-SUBPARTITION BY HASH(f1)
-( PARTITION part1 VALUES LESS THAN (1000)
-(SUBPARTITION subpart11,
-SUBPARTITION subpart12 STORAGE ENGINE = 'NDB' ),
-PARTITION part2 VALUES LESS THAN (2000)
-(SUBPARTITION subpart21 STORAGE ENGINE = 'NDB' ,
-SUBPARTITION subpart22 STORAGE ENGINE = 'NDB' )
-);
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) default NULL,
- `f2` char(20) default NULL
-) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY RANGE (f1) SUBPARTITION BY HASH (f1) (PARTITION part1 VALUES LESS THAN (1000) (SUBPARTITION subpart11 ENGINE = ndbcluster, SUBPARTITION subpart12 ENGINE = ndbcluster), PARTITION part2 VALUES LESS THAN (2000) (SUBPARTITION subpart21 ENGINE = ndbcluster, SUBPARTITION subpart22 ENGINE = ndbcluster))
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1)
-SUBPARTITION BY HASH(f1)
-( PARTITION part1 VALUES LESS THAN (1000)
-(SUBPARTITION subpart11 STORAGE ENGINE = 'NDB' ,
-SUBPARTITION subpart12 STORAGE ENGINE = 'NDB' ),
-PARTITION part2 VALUES LESS THAN (2000)
-(SUBPARTITION subpart21 ,
-SUBPARTITION subpart22 )
-);
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) default NULL,
- `f2` char(20) default NULL
-) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY RANGE (f1) SUBPARTITION BY HASH (f1) (PARTITION part1 VALUES LESS THAN (1000) (SUBPARTITION subpart11 ENGINE = ndbcluster, SUBPARTITION subpart12 ENGINE = ndbcluster), PARTITION part2 VALUES LESS THAN (2000) (SUBPARTITION subpart21 ENGINE = ndbcluster, SUBPARTITION subpart22 ENGINE = ndbcluster))
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-# 2.6 Ugly "over determined" storage engine assignments
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20)) ENGINE = 'NDB'
-PARTITION BY HASH(f1)
-( PARTITION part1 STORAGE ENGINE = 'NDB' ,
-PARTITION part2 STORAGE ENGINE = 'NDB'
-);
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) default NULL,
- `f2` char(20) default NULL
-) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY HASH (f1) (PARTITION part1 ENGINE = ndbcluster, PARTITION part2 ENGINE = ndbcluster)
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20)) ENGINE = 'NDB'
-PARTITION BY RANGE(f1)
-SUBPARTITION BY HASH(f1)
-( PARTITION part1 VALUES LESS THAN (1000)
-(SUBPARTITION subpart11 STORAGE ENGINE = 'NDB' ,
-SUBPARTITION subpart12 STORAGE ENGINE = 'NDB' ),
-PARTITION part2 VALUES LESS THAN (2000)
-(SUBPARTITION subpart21 STORAGE ENGINE = 'NDB' ,
-SUBPARTITION subpart22 STORAGE ENGINE = 'NDB' )
-);
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) default NULL,
- `f2` char(20) default NULL
-) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY RANGE (f1) SUBPARTITION BY HASH (f1) (PARTITION part1 VALUES LESS THAN (1000) (SUBPARTITION subpart11 ENGINE = ndbcluster, SUBPARTITION subpart12 ENGINE = ndbcluster), PARTITION part2 VALUES LESS THAN (2000) (SUBPARTITION subpart21 ENGINE = ndbcluster, SUBPARTITION subpart22 ENGINE = ndbcluster))
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1)
-SUBPARTITION BY HASH(f1)
-( PARTITION part1 VALUES LESS THAN (1000) STORAGE ENGINE = 'NDB'
-(SUBPARTITION subpart11 STORAGE ENGINE = 'NDB' ,
-SUBPARTITION subpart12 STORAGE ENGINE = 'NDB' ),
-PARTITION part2 VALUES LESS THAN (2000)
-(SUBPARTITION subpart21 STORAGE ENGINE = 'NDB' ,
-SUBPARTITION subpart22 STORAGE ENGINE = 'NDB' )
-);
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) default NULL,
- `f2` char(20) default NULL
-) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY RANGE (f1) SUBPARTITION BY HASH (f1) (PARTITION part1 VALUES LESS THAN (1000) (SUBPARTITION subpart11 ENGINE = ndbcluster, SUBPARTITION subpart12 ENGINE = ndbcluster), PARTITION part2 VALUES LESS THAN (2000) (SUBPARTITION subpart21 ENGINE = ndbcluster, SUBPARTITION subpart22 ENGINE = ndbcluster))
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-# 2.7 Ugly storage engine assignments mixups
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1)
-SUBPARTITION BY HASH(f1)
-( PARTITION part1 VALUES LESS THAN (1000) ENGINE = 'NDB'
-(SUBPARTITION subpart11 ,
-SUBPARTITION subpart12 ),
-PARTITION part2 VALUES LESS THAN (2000)
-(SUBPARTITION subpart21 STORAGE ENGINE = 'NDB' ,
-SUBPARTITION subpart22 STORAGE ENGINE = 'NDB' )
-);
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) default NULL,
- `f2` char(20) default NULL
-) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY RANGE (f1) SUBPARTITION BY HASH (f1) (PARTITION part1 VALUES LESS THAN (1000) (SUBPARTITION subpart11 ENGINE = ndbcluster, SUBPARTITION subpart12 ENGINE = ndbcluster), PARTITION part2 VALUES LESS THAN (2000) (SUBPARTITION subpart21 ENGINE = ndbcluster, SUBPARTITION subpart22 ENGINE = ndbcluster))
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1)
-SUBPARTITION BY HASH(f1)
-( PARTITION part1 VALUES LESS THAN (1000)
-(SUBPARTITION subpart11 STORAGE ENGINE = 'NDB' ,
-SUBPARTITION subpart12 STORAGE ENGINE = 'NDB' ),
-PARTITION part2 VALUES LESS THAN (2000) ENGINE = 'NDB'
-(SUBPARTITION subpart21 ,
-SUBPARTITION subpart22 )
-);
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) default NULL,
- `f2` char(20) default NULL
-) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY RANGE (f1) SUBPARTITION BY HASH (f1) (PARTITION part1 VALUES LESS THAN (1000) (SUBPARTITION subpart11 ENGINE = ndbcluster, SUBPARTITION subpart12 ENGINE = ndbcluster), PARTITION part2 VALUES LESS THAN (2000) (SUBPARTITION subpart21 ENGINE = ndbcluster, SUBPARTITION subpart22 ENGINE = ndbcluster))
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-# 2.8 Session default engine differs from engine used within create table
-SET SESSION storage_engine='MEMORY';
-SET SESSION storage_engine='NDB' ;
-#------------------------------------------------------------------------
-# 3. Check number of partitions and subpartitions
-#------------------------------------------------------------------------
-DROP TABLE IF EXISTS t1;
-# 3.1 (positive) without partition/subpartition number assignment
-# 3.1.1 no partition number, no named partitions, no subpartitions mentioned
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1);
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) default NULL,
- `f2` char(20) default NULL
-) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY HASH (f1)
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-# 3.1.2 no partition number, named partitions, no subpartitions mentioned
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) (PARTITION part1, PARTITION part2);
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) default NULL,
- `f2` char(20) default NULL
-) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY HASH (f1) (PARTITION part1 ENGINE = ndbcluster, PARTITION part2 ENGINE = ndbcluster)
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-# 3.1.3 variations on no partition/subpartition number, named partitions,
-# different subpartitions are/are not named
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1) (PARTITION part1 VALUES LESS THAN (1000), PARTITION part2 VALUES LESS THAN (2000), PARTITION part3 VALUES LESS THAN (2147483647)) ;
-DROP TABLE t1;
-# FIXME several subtestcases of 3.1.3 disabled because of server crashes
-# Bug#15407 Partitions: crash if subpartition
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1) (PARTITION part1 VALUES LESS THAN (1000)
-(SUBPARTITION subpart11 , SUBPARTITION subpart12 ), PARTITION part2 VALUES LESS THAN (2000)
-(SUBPARTITION subpart21 , SUBPARTITION subpart22 ), PARTITION part3 VALUES LESS THAN (2147483647)
-(SUBPARTITION subpart21 , SUBPARTITION subpart22 )) ;
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) default NULL,
- `f2` char(20) default NULL
-) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY RANGE (f1) SUBPARTITION BY HASH (f1) (PARTITION part1 VALUES LESS THAN (1000) (SUBPARTITION subpart11 ENGINE = ndbcluster, SUBPARTITION subpart12 ENGINE = ndbcluster), PARTITION part2 VALUES LESS THAN (2000) (SUBPARTITION subpart21 ENGINE = ndbcluster, SUBPARTITION subpart22 ENGINE = ndbcluster), PARTITION part3 VALUES LESS THAN (2147483647) (SUBPARTITION subpart21 ENGINE = ndbcluster, SUBPARTITION subpart22 ENGINE = ndbcluster))
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-# 3.2 partition/subpartition numbers good and bad values and notations
-DROP TABLE IF EXISTS t1;
-# 3.2.1 partition/subpartition numbers INTEGER notation
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS 2;
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) default NULL,
- `f2` char(20) default NULL
-) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY HASH (f1) PARTITIONS 2
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1)
-SUBPARTITIONS 2
-(PARTITION part1 VALUES LESS THAN (1000), PARTITION part2 VALUES LESS THAN (2147483647));
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) default NULL,
- `f2` char(20) default NULL
-) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY RANGE (f1) SUBPARTITION BY HASH (f1) SUBPARTITIONS 2 (PARTITION part1 VALUES LESS THAN (1000) , PARTITION part2 VALUES LESS THAN (2147483647) )
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS 1;
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) default NULL,
- `f2` char(20) default NULL
-) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY HASH (f1) PARTITIONS 1
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1)
-SUBPARTITIONS 1
-(PARTITION part1 VALUES LESS THAN (1000), PARTITION part2 VALUES LESS THAN (2147483647));
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) default NULL,
- `f2` char(20) default NULL
-) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY RANGE (f1) SUBPARTITION BY HASH (f1) SUBPARTITIONS 1 (PARTITION part1 VALUES LESS THAN (1000) , PARTITION part2 VALUES LESS THAN (2147483647) )
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 200;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-UPDATE t1 SET f1 = f1 + 200
-WHERE f1 BETWEEN 100 - 50 AND 100 + 50;
-SELECT (COUNT(*) = 200) AND (MIN(f1) = 1) AND (MAX(f1) = 100 + 50 + 200 )
-AS my_value FROM t1;
-my_value
-1
-DELETE FROM t1
-WHERE f1 BETWEEN 100 - 50 + 200 AND 100 + 50 + 200;
-SELECT (COUNT(*) = 200 - 50 - 50 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = 200)
-AS my_value FROM t1;
-my_value
-1
-INSERT INTO t1 SET f1 = 0 , f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
-my_value
-1
-INSERT INTO t1 SET f1 = 200 + 1, f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 1 AND f2 = '#######';
-my_value
-1
-UPDATE t1 SET f1 = 200 + 2, f2 = 'ZZZZZZZ'
- WHERE f1 = 0 AND f2 = '#######';
-SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-my_value
-1
-DELETE FROM t1 WHERE f1 = 200 + 2 AND f2 = 'ZZZZZZZ';
-SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
-my_value
-1
-TRUNCATE t1;
-SELECT COUNT(*) = 0 AS my_value FROM t1;
-my_value
-1
-DROP TABLE t1;
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS 0;
-ERROR HY000: Number of partitions = 0 is not an allowed value
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1)
-SUBPARTITIONS 0
-(PARTITION part1 VALUES LESS THAN (1000), PARTITION part2 VALUES LESS THAN (2147483647));
-ERROR HY000: Number of subpartitions = 0 is not an allowed value
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS -1;
-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 '-1' at line 2
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1)
-SUBPARTITIONS -1
-(PARTITION part1 VALUES LESS THAN (1000), PARTITION part2 VALUES LESS THAN (2147483647));
-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 '-1
-(PARTITION part1 VALUES LESS THAN (1000), PARTITION part2 VALUES LESS THAN (2' at line 3
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS 1000000;
-ERROR HY000: Too many partitions were defined
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1)
-SUBPARTITIONS 1000000
-(PARTITION part1 VALUES LESS THAN (1000), PARTITION part2 VALUES LESS THAN (2147483647));
-ERROR HY000: Too many partitions were defined
-# 3.2.4 partition/subpartition numbers STRING notation
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS '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 ''2'' at line 2
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1)
-SUBPARTITIONS '2'
-(PARTITION part1 VALUES LESS THAN (1000), PARTITION part2 VALUES LESS THAN (2147483647));
-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 ''2'
-(PARTITION part1 VALUES LESS THAN (1000), PARTITION part2 VALUES LESS THAN (' at line 3
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS '2.0';
-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 ''2.0'' at line 2
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1)
-SUBPARTITIONS '2.0'
-(PARTITION part1 VALUES LESS THAN (1000), PARTITION part2 VALUES LESS THAN (2147483647));
-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 ''2.0'
-(PARTITION part1 VALUES LESS THAN (1000), PARTITION part2 VALUES LESS THAN' at line 3
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS '0.2E+1';
-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 ''0.2E+1'' at line 2
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1)
-SUBPARTITIONS '0.2E+1'
-(PARTITION part1 VALUES LESS THAN (1000), PARTITION part2 VALUES LESS THAN (2147483647));
-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 ''0.2E+1'
-(PARTITION part1 VALUES LESS THAN (1000), PARTITION part2 VALUES LESS T' at line 3
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS '2A';
-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 ''2A'' at line 2
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1)
-SUBPARTITIONS '2A'
-(PARTITION part1 VALUES LESS THAN (1000), PARTITION part2 VALUES LESS THAN (2147483647));
-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 ''2A'
-(PARTITION part1 VALUES LESS THAN (1000), PARTITION part2 VALUES LESS THAN ' at line 3
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS 'A2';
-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 ''A2'' at line 2
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1)
-SUBPARTITIONS 'A2'
-(PARTITION part1 VALUES LESS THAN (1000), PARTITION part2 VALUES LESS THAN (2147483647));
-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 ''A2'
-(PARTITION part1 VALUES LESS THAN (1000), PARTITION part2 VALUES LESS THAN ' at line 3
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS '';
-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 2
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1)
-SUBPARTITIONS ''
-(PARTITION part1 VALUES LESS THAN (1000), PARTITION part2 VALUES LESS THAN (2147483647));
-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 '''
-(PARTITION part1 VALUES LESS THAN (1000), PARTITION part2 VALUES LESS THAN (2' at line 3
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS 'GARBAGE';
-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 ''GARBAGE'' at line 2
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1)
-SUBPARTITIONS 'GARBAGE'
-(PARTITION part1 VALUES LESS THAN (1000), PARTITION part2 VALUES LESS THAN (2147483647));
-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 ''GARBAGE'
-(PARTITION part1 VALUES LESS THAN (1000), PARTITION part2 VALUES LESS ' at line 3
-# 3.2.5 partition/subpartition numbers other notations
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS 2A;
-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 '2A' at line 2
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1)
-SUBPARTITIONS 2A
-(PARTITION part1 VALUES LESS THAN (1000), PARTITION part2 VALUES LESS THAN (2147483647));
-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 '2A
-(PARTITION part1 VALUES LESS THAN (1000), PARTITION part2 VALUES LESS THAN (2' at line 3
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS A2;
-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 'A2' at line 2
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1)
-SUBPARTITIONS A2
-(PARTITION part1 VALUES LESS THAN (1000), PARTITION part2 VALUES LESS THAN (2147483647));
-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 'A2
-(PARTITION part1 VALUES LESS THAN (1000), PARTITION part2 VALUES LESS THAN (2' at line 3
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS GARBAGE;
-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 'GARBAGE' at line 2
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1)
-SUBPARTITIONS GARBAGE
-(PARTITION part1 VALUES LESS THAN (1000), PARTITION part2 VALUES LESS THAN (2147483647));
-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 'GARBAGE
-(PARTITION part1 VALUES LESS THAN (1000), PARTITION part2 VALUES LESS TH' at line 3
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS "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 '"2"' at line 2
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1)
-SUBPARTITIONS "2"
-(PARTITION part1 VALUES LESS THAN (1000), PARTITION part2 VALUES LESS THAN (2147483647));
-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 '"2"
-(PARTITION part1 VALUES LESS THAN (1000), PARTITION part2 VALUES LESS THAN (' at line 3
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS "2A";
-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 '"2A"' at line 2
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1)
-SUBPARTITIONS "2A"
-(PARTITION part1 VALUES LESS THAN (1000), PARTITION part2 VALUES LESS THAN (2147483647));
-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 '"2A"
-(PARTITION part1 VALUES LESS THAN (1000), PARTITION part2 VALUES LESS THAN ' at line 3
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS "A2";
-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 '"A2"' at line 2
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1)
-SUBPARTITIONS "A2"
-(PARTITION part1 VALUES LESS THAN (1000), PARTITION part2 VALUES LESS THAN (2147483647));
-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 '"A2"
-(PARTITION part1 VALUES LESS THAN (1000), PARTITION part2 VALUES LESS THAN ' at line 3
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS "GARBAGE";
-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 '"GARBAGE"' at line 2
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1)
-SUBPARTITIONS "GARBAGE"
-(PARTITION part1 VALUES LESS THAN (1000), PARTITION part2 VALUES LESS THAN (2147483647));
-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 '"GARBAGE"
-(PARTITION part1 VALUES LESS THAN (1000), PARTITION part2 VALUES LESS ' at line 3
-# 3.3 Mixups of number and names of partition/subpartition assigned
-# 3.3.1 (positive) number of partition/subpartition = number of named partition/subpartition
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS 2 ( PARTITION part1, PARTITION part2 ) ;
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) default NULL,
- `f2` char(20) default NULL
-) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY HASH (f1) (PARTITION part1 ENGINE = ndbcluster, PARTITION part2 ENGINE = ndbcluster)
-DROP TABLE t1;
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) PARTITIONS 2
-SUBPARTITION BY HASH(f1) SUBPARTITIONS 2
-( PARTITION part1 VALUES LESS THAN (1000)
-(SUBPARTITION subpart11, SUBPARTITION subpart12),
-PARTITION part2 VALUES LESS THAN (2147483647)
-(SUBPARTITION subpart21, SUBPARTITION subpart22)
-);
-SHOW CREATE TABLE t1;
-Table Create Table
-t1 CREATE TABLE `t1` (
- `f1` int(11) default NULL,
- `f2` char(20) default NULL
-) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY RANGE (f1) SUBPARTITION BY HASH (f1) (PARTITION part1 VALUES LESS THAN (1000) (SUBPARTITION subpart11 ENGINE = ndbcluster, SUBPARTITION subpart12 ENGINE = ndbcluster), PARTITION part2 VALUES LESS THAN (2147483647) (SUBPARTITION subpart21 ENGINE = ndbcluster, SUBPARTITION subpart22 ENGINE = ndbcluster))
-DROP TABLE t1;
-# 3.3.2 (positive) number of partition/subpartition , 0 (= no) named partition/subpartition
-# already checked above
-# 3.3.3 (negative) number of partitions > number of named partitions
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) PARTITIONS 2 ( PARTITION part1 ) ;
-ERROR 42000: Wrong number of partitions defined, mismatch with previous setting near ')' at line 2
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1)
-SUBPARTITION BY HASH(f1) SUBPARTITIONS 2
-( PARTITION part1 VALUES LESS THAN (1000)
-(SUBPARTITION subpart11 ),
-PARTITION part2 VALUES LESS THAN (2147483647)
-(SUBPARTITION subpart21, SUBPARTITION subpart22)
-);
-ERROR 42000: Wrong number of subpartitions defined, mismatch with previous setting near '),
-PARTITION part2 VALUES LESS THAN (2147483647)
-(SUBPARTITION subpart21, SUBPAR' at line 5
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1)
-SUBPARTITION BY HASH(f1) SUBPARTITIONS 2
-( PARTITION part1 VALUES LESS THAN (1000)
-(SUBPARTITION subpart11, SUBPARTITION subpart12),
-PARTITION part2 VALUES LESS THAN (2000)
-(SUBPARTITION subpart21 ),
-PARTITION part3 VALUES LESS THAN (2147483647)
-(SUBPARTITION subpart31, SUBPARTITION subpart32)
-);
-ERROR 42000: Wrong number of subpartitions defined, mismatch with previous setting near '),
-PARTITION part3 VALUES LESS THAN (2147483647)
-(SUBPARTITION subpart31, SUBPAR' at line 7
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY RANGE(f1) PARTITIONS 2
-SUBPARTITION BY HASH(f1) SUBPARTITIONS 2
-( PARTITION part1 VALUES LESS THAN (1000)
-(SUBPARTITION subpart11, SUBPARTITION subpart12),
-PARTITION part2 VALUES LESS THAN (2147483647)
-(SUBPARTITION subpart21 )
-);
-ERROR 42000: Wrong number of subpartitions defined, mismatch with previous setting near ')
-)' at line 7
-#------------------------------------------------------------------------
-# 4. Checks of logical partition/subpartition name
-# file name clashes during CREATE TABLE
-#------------------------------------------------------------------------
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1) (PARTITION part1, PARTITION part1);
-ERROR HY000: Duplicate partition name part1
-#------------------------------------------------------------------------
-# 5. Alter table experiments
-#------------------------------------------------------------------------
-# 5.1 alter table add partition
-# 5.1.1 (negative) add partition to non partitioned table
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20));
-# FIXME Why does the error numbers of MyISAM(1482) and NDB(1005) differ ?
-ALTER TABLE t1 ADD PARTITION (PARTITION part1);
-Got one of the listed errors
-DROP TABLE t1;
-# 5.1.2 Add one partition to a table with one partition
-CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
-PARTITION BY HASH(f1);
-INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND 100;
diff --git a/mysql-test/suite/ndb/r/ps_7ndb.result b/mysql-test/suite/ndb/r/ps_7ndb.result
index 82d2d14b075..3cbc1a0e76f 100644
--- a/mysql-test/suite/ndb/r/ps_7ndb.result
+++ b/mysql-test/suite/ndb/r/ps_7ndb.result
@@ -63,7 +63,7 @@ def test t9 t9 c11 c11 246 9 6 Y 0 4 63
def test t9 t9 c12 c12 246 10 6 Y 0 4 63
def test t9 t9 c13 c13 10 10 10 Y 128 0 63
def test t9 t9 c14 c14 12 19 19 Y 128 0 63
-def test t9 t9 c15 c15 7 19 19 N 1249 0 63
+def test t9 t9 c15 c15 7 19 19 N 9441 0 63
def test t9 t9 c16 c16 11 8 8 Y 128 0 63
def test t9 t9 c17 c17 13 4 4 Y 32864 0 63
def test t9 t9 c18 c18 1 4 1 Y 32768 0 63
@@ -783,20 +783,20 @@ a b
2 two
3 three
4 four
-prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
- (SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
+prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
+ (SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
execute stmt1 ;
ccc
1
deallocate prepare stmt1 ;
-prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
- (SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
+prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
+ (SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
execute stmt1 ;
ccc
1
deallocate prepare stmt1 ;
-prepare stmt1 from ' SELECT a as ccc from t1 where a+1=
- (SELECT 1+ccc from t1 where ccc+1=a+1 and a=1) ';
+prepare stmt1 from ' SELECT a as ccc from t1 outr where a+1=
+ (SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1) ';
execute stmt1 ;
ccc
1
@@ -1286,12 +1286,11 @@ a b
set @arg00=NULL;
set @arg01=2;
execute stmt1 using @arg00, @arg01;
-Warnings:
-Warning 1048 Column 'a' cannot be null
+ERROR 23000: Column 'a' cannot be null
select a,b from t1 order by a;
a b
-0 two
1 one
+2 two
3 three
4 four
set @arg00=0;
@@ -2956,11 +2955,13 @@ Warnings:
Note 1265 Data truncated for column 'c13' at row 1
Warning 1265 Data truncated for column 'c17' at row 1
Warnings:
+Note 1265 Data truncated for column 'c13' at row 1
Warning 1265 Data truncated for column 'c17' at row 1
Warnings:
Note 1265 Data truncated for column 'c13' at row 1
Warning 1265 Data truncated for column 'c17' at row 1
Warnings:
+Note 1265 Data truncated for column 'c13' at row 1
Warning 1265 Data truncated for column 'c17' at row 1
Warnings:
Note 1265 Data truncated for column 'c13' at row 1
@@ -2994,7 +2995,6 @@ Warning 1265 Data truncated for column 'c15' at row 1
Warning 1264 Out of range value for column 'c16' at row 1
Warning 1264 Out of range value for column 'c17' at row 1
Warnings:
-Note 1265 Data truncated for column 'c13' at row 1
Warning 1265 Data truncated for column 'c15' at row 1
Warning 1264 Out of range value for column 'c16' at row 1
Warning 1264 Out of range value for column 'c17' at row 1
diff --git a/mysql-test/suite/ndb/t/disabled.def b/mysql-test/suite/ndb/t/disabled.def
index 9c2dc80d5ee..f876039a042 100644
--- a/mysql-test/suite/ndb/t/disabled.def
+++ b/mysql-test/suite/ndb/t/disabled.def
@@ -9,9 +9,6 @@
# Do not use any TAB characters for whitespace.
#
##############################################################################
-ndb_dd_sql_features : Bug#29102 ndb_dd_sql_features fails in pushbuild
-ndb_load : BUG#17233 2006-05-04 tomas failed load data from infile causes mysqld dbug_assert, binlog not flushed
-
partition_03ndb : BUG#16385 2006-03-24 mikael Partitions: crash when updating a range partitioned NDB table
ndb_partition_error2 : HF is not sure if the test can work as internded on all the platforms
diff --git a/mysql-test/suite/ndb/t/ndb_auto_increment.test b/mysql-test/suite/ndb/t/ndb_auto_increment.test
new file mode 100644
index 00000000000..14e7ae7ca7b
--- /dev/null
+++ b/mysql-test/suite/ndb/t/ndb_auto_increment.test
@@ -0,0 +1,293 @@
+-- source include/have_multi_ndb.inc
+-- source include/not_embedded.inc
+
+--disable_warnings
+connection server1;
+DROP TABLE IF EXISTS t1,t2;
+connection server2;
+DROP TABLE IF EXISTS t1;
+connection server1;
+--enable_warnings
+
+set @old_auto_increment_offset = @@session.auto_increment_offset;
+set @old_auto_increment_increment = @@session.auto_increment_increment;
+set @old_ndb_autoincrement_prefetch_sz = @@session.ndb_autoincrement_prefetch_sz;
+
+flush status;
+
+create table t1 (a int not null auto_increment primary key) engine ndb;
+
+# Step 1: Verify simple insert
+insert into t1 values (NULL);
+select * from t1 order by a;
+
+# Step 2: Verify simple update with higher than highest value causes
+# next insert to use updated_value + 1
+update t1 set a = 5 where a = 1;
+insert into t1 values (NULL);
+select * from t1 order by a;
+
+# Step 3: Verify insert that inserts higher than highest value causes
+# next insert to use inserted_value + 1
+insert into t1 values (7);
+insert into t1 values (NULL);
+select * from t1 order by a;
+
+# Step 4: Verify that insert into hole, lower than highest value doesn't
+# affect next insert
+insert into t1 values (2);
+insert into t1 values (NULL);
+select * from t1 order by a;
+
+# Step 5: Verify that update into hole, lower than highest value doesn't
+# affect next insert
+update t1 set a = 4 where a = 2;
+insert into t1 values (NULL);
+select * from t1 order by a;
+
+# Step 6: Verify that delete of highest value doesn't cause the next
+# insert to reuse this value
+delete from t1 where a = 10;
+insert into t1 values (NULL);
+select * from t1 order by a;
+
+# Step 7: Verify that REPLACE has the same effect as INSERT
+replace t1 values (NULL);
+select * from t1 order by a;
+replace t1 values (15);
+select * from t1 order by a;
+replace into t1 values (NULL);
+select * from t1 order by a;
+
+# Step 8: Verify that REPLACE has the same effect as UPDATE
+replace t1 values (15);
+select * from t1 order by a;
+
+# Step 9: Verify that IGNORE doesn't affect auto_increment
+insert ignore into t1 values (NULL);
+select * from t1 order by a;
+insert ignore into t1 values (15), (NULL);
+select * from t1 order by a;
+
+# Step 10: Verify that on duplicate key as UPDATE behaves as an
+# UPDATE
+insert into t1 values (15)
+on duplicate key update a = 20;
+insert into t1 values (NULL);
+select * from t1 order by a;
+
+# Step 11: Verify that on duplicate key as INSERT behaves as INSERT
+insert into t1 values (NULL) on duplicate key update a = 30;
+select * from t1 order by a;
+insert into t1 values (30) on duplicate key update a = 40;
+select * from t1 order by a;
+
+#Step 12: Vefify INSERT IGNORE (bug#32055)
+insert ignore into t1 values(600),(NULL),(NULL),(610),(NULL);
+select * from t1 order by a;
+drop table t1;
+
+#Step 13: Verify auto_increment of unique key
+create table t1 (a int not null primary key,
+ b int not null unique auto_increment) engine ndb;
+insert into t1 values (1, NULL);
+insert into t1 values (3, NULL);
+update t1 set b = 3 where a = 3;
+insert into t1 values (4, NULL);
+select * from t1 order by a;
+drop table t1;
+
+#Step 14: Verify that auto_increment_increment and auto_increment_offset
+# work as expected
+
+CREATE TABLE t1 (
+ pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
+ b INT NOT NULL,
+ c INT NOT NULL UNIQUE
+) ENGINE=NDBCLUSTER;
+
+CREATE TABLE t2 (
+ pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
+ b INT NOT NULL,
+ c INT NOT NULL UNIQUE
+) ENGINE=MYISAM;
+
+SET @@session.auto_increment_increment=10;
+INSERT INTO t1 (b,c) VALUES (1,0),(2,1),(3,2);
+INSERT INTO t2 (b,c) VALUES (1,0),(2,1),(3,2);
+SELECT * FROM t1 ORDER BY pk;
+SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
+TRUNCATE t1;
+TRUNCATE t2;
+SET @@session.auto_increment_offset=5;
+INSERT INTO t1 (b,c) VALUES (1,0),(2,1),(3,2);
+INSERT INTO t1 (pk,b,c) VALUES (27,4,3),(NULL,5,4),(99,6,5),(NULL,7,6);
+INSERT INTO t2 (b,c) VALUES (1,0),(2,1),(3,2);
+INSERT INTO t2 (pk,b,c) VALUES (27,4,3),(NULL,5,4),(99,6,5),(NULL,7,6);
+SELECT * FROM t1 ORDER BY pk;
+SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
+TRUNCATE t1;
+TRUNCATE t2;
+SET @@session.auto_increment_increment=2;
+INSERT INTO t1 (b,c) VALUES (1,0),(2,1),(3,2);
+INSERT INTO t2 (b,c) VALUES (1,0),(2,1),(3,2);
+SELECT * FROM t1 ORDER BY pk;
+SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
+DROP TABLE t1, t2;
+
+CREATE TABLE t1 (
+ pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
+ b INT NOT NULL,
+ c INT NOT NULL UNIQUE
+) ENGINE=NDBCLUSTER AUTO_INCREMENT = 7;
+
+CREATE TABLE t2 (
+ pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
+ b INT NOT NULL,
+ c INT NOT NULL UNIQUE
+) ENGINE=MYISAM AUTO_INCREMENT = 7;
+
+SET @@session.auto_increment_offset=1;
+SET @@session.auto_increment_increment=1;
+INSERT INTO t1 (b,c) VALUES (1,0),(2,1),(3,2);
+INSERT INTO t2 (b,c) VALUES (1,0),(2,1),(3,2);
+SELECT * FROM t1 ORDER BY pk;
+SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
+DROP TABLE t1, t2;
+
+CREATE TABLE t1 (
+ pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
+ b INT NOT NULL,
+ c INT NOT NULL UNIQUE
+) ENGINE=NDBCLUSTER AUTO_INCREMENT = 3;
+
+CREATE TABLE t2 (
+ pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
+ b INT NOT NULL,
+ c INT NOT NULL UNIQUE
+) ENGINE=MYISAM AUTO_INCREMENT = 3;
+
+SET @@session.auto_increment_offset=5;
+SET @@session.auto_increment_increment=10;
+INSERT INTO t1 (b,c) VALUES (1,0),(2,1),(3,2);
+INSERT INTO t2 (b,c) VALUES (1,0),(2,1),(3,2);
+SELECT * FROM t1 ORDER BY pk;
+SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
+DROP TABLE t1, t2;
+
+CREATE TABLE t1 (
+ pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
+ b INT NOT NULL,
+ c INT NOT NULL UNIQUE
+) ENGINE=NDBCLUSTER AUTO_INCREMENT = 7;
+
+CREATE TABLE t2 (
+ pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
+ b INT NOT NULL,
+ c INT NOT NULL UNIQUE
+) ENGINE=MYISAM AUTO_INCREMENT = 7;
+
+SET @@session.auto_increment_offset=5;
+SET @@session.auto_increment_increment=10;
+INSERT INTO t1 (b,c) VALUES (1,0),(2,1),(3,2);
+INSERT INTO t2 (b,c) VALUES (1,0),(2,1),(3,2);
+SELECT * FROM t1 ORDER BY pk;
+SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
+DROP TABLE t1, t2;
+
+CREATE TABLE t1 (
+ pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
+ b INT NOT NULL,
+ c INT NOT NULL UNIQUE
+) ENGINE=NDBCLUSTER AUTO_INCREMENT = 5;
+
+CREATE TABLE t2 (
+ pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
+ b INT NOT NULL,
+ c INT NOT NULL UNIQUE
+) ENGINE=MYISAM AUTO_INCREMENT = 5;
+
+SET @@session.auto_increment_offset=5;
+SET @@session.auto_increment_increment=10;
+INSERT INTO t1 (b,c) VALUES (1,0),(2,1),(3,2);
+INSERT INTO t2 (b,c) VALUES (1,0),(2,1),(3,2);
+SELECT * FROM t1 ORDER BY pk;
+SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
+DROP TABLE t1, t2;
+
+CREATE TABLE t1 (
+ pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
+ b INT NOT NULL,
+ c INT NOT NULL UNIQUE
+) ENGINE=NDBCLUSTER AUTO_INCREMENT = 100;
+
+CREATE TABLE t2 (
+ pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
+ b INT NOT NULL,
+ c INT NOT NULL UNIQUE
+) ENGINE=MYISAM AUTO_INCREMENT = 100;
+
+SET @@session.auto_increment_offset=5;
+SET @@session.auto_increment_increment=10;
+INSERT INTO t1 (b,c) VALUES (1,0),(2,1),(3,2);
+INSERT INTO t2 (b,c) VALUES (1,0),(2,1),(3,2);
+SELECT * FROM t1 ORDER BY pk;
+SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
+DROP TABLE t1, t2;
+
+#Step 15: Now verify that behaviour on multiple MySQL Servers behave
+# properly. Start by dropping table and recreating it to start
+# counters and id caches from zero again.
+--disable_warnings
+connection server2;
+SET @@session.auto_increment_offset=1;
+SET @@session.auto_increment_increment=1;
+set ndb_autoincrement_prefetch_sz = 32;
+drop table if exists t1;
+connection server1;
+SET @@session.auto_increment_offset=1;
+SET @@session.auto_increment_increment=1;
+set ndb_autoincrement_prefetch_sz = 32;
+--enable_warnings
+
+
+create table t1 (a int not null auto_increment primary key) engine ndb;
+# Basic test, ensure that the second server gets a new range.
+#Generate record with key = 1
+insert into t1 values (NULL);
+connection server2;
+#Generate record with key = 33
+insert into t1 values (NULL);
+connection server1;
+select * from t1 order by a;
+
+#This insert should not affect the range of the second server
+insert into t1 values (20);
+connection server2;
+insert into t1 values (NULL);
+select * from t1 order by a;
+
+connection server1;
+#This insert should remove cached values but also skip values already
+#taken by server2, given that there is no method of communicating with
+#the other server it should also cause a conflict
+connection server1;
+
+insert into t1 values (35);
+insert into t1 values (NULL);
+connection server2;
+--error ER_DUP_ENTRY
+insert into t1 values (NULL);
+select * from t1 order by a;
+
+insert into t1 values (100);
+insert into t1 values (NULL);
+connection server1;
+insert into t1 values (NULL);
+select * from t1 order by a;
+
+set auto_increment_offset = @old_auto_increment_offset;
+set auto_increment_increment = @old_auto_increment_increment;
+set ndb_autoincrement_prefetch_sz = @old_ndb_autoincrement_prefetch_sz;
+
+drop table t1;
diff --git a/mysql-test/suite/ndb/t/ndb_basic.test b/mysql-test/suite/ndb/t/ndb_basic.test
index b9ccdf9fd0d..2fc140288ca 100644
--- a/mysql-test/suite/ndb/t/ndb_basic.test
+++ b/mysql-test/suite/ndb/t/ndb_basic.test
@@ -800,9 +800,27 @@ update ignore t1,t2 set a = 1, c = 1 where a = 3 and c = 3;
select * from t1 order by a;
drop table t1,t2;
-# End of 5.0 tests
---echo End of 5.0 tests
+#
+# Bug#31635
+#
+create table t1 (a varchar(100) primary key, b varchar(100)) engine = NDB;
+insert into t1 values
+ ('a', 'a'),('b','b'),('c', 'c'),('aa', 'aa'),('bb', 'bb'),('cc', 'cc');
+replace into t1 values ('a', '-a');
+replace into t1 values ('b', '-b');
+replace into t1 values ('c', '-c');
+
+replace into t1 values ('aa', '-aa');
+replace into t1 values ('bb', '-bb');
+replace into t1 values ('cc', '-cc');
+
+replace into t1 values ('aaa', '-aaa');
+replace into t1 values ('bbb', '-bbb');
+replace into t1 values ('ccc', '-ccc');
+select * from t1 order by 1,2;
+drop table t1;
+--echo End of 5.0 tests
#
# Bug #18483 Cannot create table with FK constraint
diff --git a/mysql-test/suite/ndb/t/ndb_blob.test b/mysql-test/suite/ndb/t/ndb_blob.test
index b9a8c7e20ee..0388913df8b 100644
--- a/mysql-test/suite/ndb/t/ndb_blob.test
+++ b/mysql-test/suite/ndb/t/ndb_blob.test
@@ -497,3 +497,23 @@ select count(*) from t1;
drop table t1;
# End of 4.1 tests
+
+
+# bug # 30674 :
+# NOT NULL Blobs should default to zero-length. Not NULL TEXT
+# should default to zero-chars
+create table t1(
+ a int,
+ blob_nn blob not null,
+ text_nn text not null,
+ blob_nl blob,
+ text_nl text,
+ primary key(a)
+) engine=ndb;
+
+insert into t1(a) values (1);
+insert into t1(a, text_nl) values (2, 'MySQL Cluster NDB');
+
+select a, length(blob_nn), length(text_nn), blob_nl, text_nl from t1 order by a;
+
+drop table t1;
diff --git a/mysql-test/suite/ndb/t/ndb_condition_pushdown.test b/mysql-test/suite/ndb/t/ndb_condition_pushdown.test
index ab56430ac1d..9e6a5e90e40 100644
--- a/mysql-test/suite/ndb/t/ndb_condition_pushdown.test
+++ b/mysql-test/suite/ndb/t/ndb_condition_pushdown.test
@@ -1752,5 +1752,1030 @@ SELECT fname, lname FROM t1 WHERE (fname like 'Y%') or (lname like 'F%');
set engine_condition_pushdown = 1;
SELECT fname, lname FROM t1 WHERE (fname like 'Y%') or (lname like 'F%');
+# bug#29390 (scan filter is too large, discarded)
+
+drop table t1;
+
+create table t1 (a int, b int, c int, d int, primary key using hash(a))
+ engine=ndbcluster;
+
+insert into t1 values (10,1,100,0+0x1111);
+insert into t1 values (20,2,200,0+0x2222);
+insert into t1 values (30,3,300,0+0x3333);
+insert into t1 values (40,4,400,0+0x4444);
+insert into t1 values (50,5,500,0+0x5555);
+
+set engine_condition_pushdown = on;
+
+select a,b,d from t1
+ where b in (0,1,2,5)
+ order by b;
+
+--disable_query_log
+select a,b,d from t1
+ where b in (
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,
+0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2,5,0,1,2)
+ order by b;
+--enable_query_log
+
set engine_condition_pushdown = @old_ecpd;
DROP TABLE t1,t2,t3,t4,t5;
diff --git a/mysql-test/suite/ndb/t/ndb_insert.test b/mysql-test/suite/ndb/t/ndb_insert.test
index 5b74cc9202c..d659f8357f2 100644
--- a/mysql-test/suite/ndb/t/ndb_insert.test
+++ b/mysql-test/suite/ndb/t/ndb_insert.test
@@ -638,142 +638,4 @@ create table t1(a int primary key, b int, unique key(b)) engine=ndb;
insert ignore into t1 values (1,0), (2,0), (2,null), (3,null);
select * from t1 order by a;
drop table t1;
-
-# Bug#26342 auto_increment_increment AND auto_increment_offset REALLY REALLY anger NDB cluster
-
-CREATE TABLE t1 (
- pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
- b INT NOT NULL,
- c INT NOT NULL UNIQUE
-) ENGINE=NDBCLUSTER;
-
-CREATE TABLE t2 (
- pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
- b INT NOT NULL,
- c INT NOT NULL UNIQUE
-) ENGINE=MYISAM;
-
-SET @@session.auto_increment_increment=10;
-INSERT INTO t1 (b,c) VALUES (1,0),(2,1),(3,2);
-INSERT INTO t2 (b,c) VALUES (1,0),(2,1),(3,2);
-SELECT * FROM t1 ORDER BY pk;
-SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
-TRUNCATE t1;
-TRUNCATE t2;
-SET @@session.auto_increment_offset=5;
-INSERT INTO t1 (b,c) VALUES (1,0),(2,1),(3,2);
-INSERT INTO t1 (pk,b,c) VALUES (27,4,3),(NULL,5,4),(99,6,5),(NULL,7,6);
-INSERT INTO t2 (b,c) VALUES (1,0),(2,1),(3,2);
-INSERT INTO t2 (pk,b,c) VALUES (27,4,3),(NULL,5,4),(99,6,5),(NULL,7,6);
-SELECT * FROM t1 ORDER BY pk;
-SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
-TRUNCATE t1;
-TRUNCATE t2;
-SET @@session.auto_increment_increment=2;
-INSERT INTO t1 (b,c) VALUES (1,0),(2,1),(3,2);
-INSERT INTO t2 (b,c) VALUES (1,0),(2,1),(3,2);
-SELECT * FROM t1 ORDER BY pk;
-SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
-DROP TABLE t1, t2;
-
-CREATE TABLE t1 (
- pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
- b INT NOT NULL,
- c INT NOT NULL UNIQUE
-) ENGINE=NDBCLUSTER AUTO_INCREMENT = 7;
-
-CREATE TABLE t2 (
- pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
- b INT NOT NULL,
- c INT NOT NULL UNIQUE
-) ENGINE=MYISAM AUTO_INCREMENT = 7;
-
-SET @@session.auto_increment_offset=1;
-SET @@session.auto_increment_increment=1;
-INSERT INTO t1 (b,c) VALUES (1,0),(2,1),(3,2);
-INSERT INTO t2 (b,c) VALUES (1,0),(2,1),(3,2);
-SELECT * FROM t1 ORDER BY pk;
-SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
-DROP TABLE t1, t2;
-
-CREATE TABLE t1 (
- pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
- b INT NOT NULL,
- c INT NOT NULL UNIQUE
-) ENGINE=NDBCLUSTER AUTO_INCREMENT = 3;
-
-CREATE TABLE t2 (
- pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
- b INT NOT NULL,
- c INT NOT NULL UNIQUE
-) ENGINE=MYISAM AUTO_INCREMENT = 3;
-
-SET @@session.auto_increment_offset=5;
-SET @@session.auto_increment_increment=10;
-INSERT INTO t1 (b,c) VALUES (1,0),(2,1),(3,2);
-INSERT INTO t2 (b,c) VALUES (1,0),(2,1),(3,2);
-SELECT * FROM t1 ORDER BY pk;
-SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
-DROP TABLE t1, t2;
-
-CREATE TABLE t1 (
- pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
- b INT NOT NULL,
- c INT NOT NULL UNIQUE
-) ENGINE=NDBCLUSTER AUTO_INCREMENT = 7;
-
-CREATE TABLE t2 (
- pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
- b INT NOT NULL,
- c INT NOT NULL UNIQUE
-) ENGINE=MYISAM AUTO_INCREMENT = 7;
-
-SET @@session.auto_increment_offset=5;
-SET @@session.auto_increment_increment=10;
-INSERT INTO t1 (b,c) VALUES (1,0),(2,1),(3,2);
-INSERT INTO t2 (b,c) VALUES (1,0),(2,1),(3,2);
-SELECT * FROM t1 ORDER BY pk;
-SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
-DROP TABLE t1, t2;
-
-CREATE TABLE t1 (
- pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
- b INT NOT NULL,
- c INT NOT NULL UNIQUE
-) ENGINE=NDBCLUSTER AUTO_INCREMENT = 5;
-
-CREATE TABLE t2 (
- pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
- b INT NOT NULL,
- c INT NOT NULL UNIQUE
-) ENGINE=MYISAM AUTO_INCREMENT = 5;
-
-SET @@session.auto_increment_offset=5;
-SET @@session.auto_increment_increment=10;
-INSERT INTO t1 (b,c) VALUES (1,0),(2,1),(3,2);
-INSERT INTO t2 (b,c) VALUES (1,0),(2,1),(3,2);
-SELECT * FROM t1 ORDER BY pk;
-SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
-DROP TABLE t1, t2;
-
-CREATE TABLE t1 (
- pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
- b INT NOT NULL,
- c INT NOT NULL UNIQUE
-) ENGINE=NDBCLUSTER AUTO_INCREMENT = 100;
-
-CREATE TABLE t2 (
- pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
- b INT NOT NULL,
- c INT NOT NULL UNIQUE
-) ENGINE=MYISAM AUTO_INCREMENT = 100;
-
-SET @@session.auto_increment_offset=5;
-SET @@session.auto_increment_increment=10;
-INSERT INTO t1 (b,c) VALUES (1,0),(2,1),(3,2);
-INSERT INTO t2 (b,c) VALUES (1,0),(2,1),(3,2);
-SELECT * FROM t1 ORDER BY pk;
-SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
-DROP TABLE t1, t2;
-
# End of 4.1 tests
diff --git a/mysql-test/suite/ndb/t/ndb_lock_table.test b/mysql-test/suite/ndb/t/ndb_lock_table.test
new file mode 100644
index 00000000000..6c21e8e8232
--- /dev/null
+++ b/mysql-test/suite/ndb/t/ndb_lock_table.test
@@ -0,0 +1,15 @@
+-- source include/have_ndb.inc
+
+# BUG 30996
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+create table t1 (a int) engine ndb;
+set autocommit=1;
+lock table t1 write;
+set autocommit=0;
+insert into t1 values (0);
+rollback;
+select * from t1;
+unlock tables;
+drop table t1;
diff --git a/mysql-test/suite/ndb/t/ndb_multi.test b/mysql-test/suite/ndb/t/ndb_multi.test
index b8e052d606b..e033ad1e479 100644
--- a/mysql-test/suite/ndb/t/ndb_multi.test
+++ b/mysql-test/suite/ndb/t/ndb_multi.test
@@ -4,11 +4,11 @@
--disable_warnings
connection server2;
drop table if exists t1, t2, t3, t4;
+flush status;
connection server1;
drop table if exists t1, t2, t3, t4;
---enable_warnings
-
flush status;
+--enable_warnings
# Create test tables on server1
create table t1 (a int) engine=ndbcluster;
@@ -122,4 +122,33 @@ connection server2;
show tables;
drop database db;
+
+#
+# bug#31470, ndb table with special characters in name
+# are not discovered correctly
+connection server1;
+use test;
+create table `test`.`t1$EX`
+ (server_id int unsigned,
+ master_server_id int unsigned,
+ master_epoch bigint unsigned,
+ count int unsigned,
+ primary key(server_id, master_server_id,
+ master_epoch, count))
+ engine ndb;
+
+# check that table shows up ok on both servers
+# before bugfix table would not show up on server2
+--replace_regex /EX/ex/
+show tables like '%$%';
+connection server2;
+use test;
+--replace_regex /EX/ex/
+show tables like '%$%';
+
+# check cleanup
+drop table `test`.`t1$EX`;
+show tables like '%$%';
+
connection server1;
+show tables like '%$%';
diff --git a/mysql-test/suite/ndb/t/ndb_multi_row.test b/mysql-test/suite/ndb/t/ndb_multi_row.test
index c82307839f4..26953093ed0 100644
--- a/mysql-test/suite/ndb/t/ndb_multi_row.test
+++ b/mysql-test/suite/ndb/t/ndb_multi_row.test
@@ -6,11 +6,12 @@
--disable_warnings
connection server2;
drop table if exists t1, t2, t3, t4;
+flush status;
connection server1;
drop table if exists t1, t2, t3, t4;
+flush status;
--enable_warnings
-flush status;
# Create test tables on server1
create table t1 (a int) engine=ndbcluster;
diff --git a/mysql-test/suite/ndb/t/ndb_update.test b/mysql-test/suite/ndb/t/ndb_update.test
index c45f990edcc..ab0fbee171e 100644
--- a/mysql-test/suite/ndb/t/ndb_update.test
+++ b/mysql-test/suite/ndb/t/ndb_update.test
@@ -35,6 +35,11 @@ UPDATE IGNORE t1 set pk1 = 1, c = 2 where pk1 = 4;
select * from t1 order by pk1;
UPDATE t1 set pk1 = pk1 + 10;
select * from t1 order by pk1;
+# bug#25817
+create unique index ib on t1(b);
+update t1 set c = 4 where pk1 = 12;
+update ignore t1 set b = 55 where pk1 = 14;
+select * from t1 order by pk1;
--disable_warnings
DROP TABLE IF EXISTS t1;
diff --git a/mysql-test/suite/ndb/t/ndb_update_no_read.test b/mysql-test/suite/ndb/t/ndb_update_no_read.test
new file mode 100644
index 00000000000..60bea53b7b5
--- /dev/null
+++ b/mysql-test/suite/ndb/t/ndb_update_no_read.test
@@ -0,0 +1,79 @@
+-- source include/have_ndb.inc
+-- source include/not_embedded.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS t1;
+--enable_warnings
+
+#
+# New test case for WL 3686 (which is not until CGE-6.3)
+# but test is committed in 5.1 to verify consistant results.
+#
+# When only constant expressions in update statements and
+# only PK or UK in WHERE clause. No extra WHERE parts are
+# allowed. WL #3687 takes of more advanced variants of
+# avoiding the read before the update/delete
+
+create table t1 (a int not null primary key, b int not null, c int,
+ unique index_b (b) using hash)
+engine ndb;
+
+insert into t1 values (1,10,1),(2,9,1),(3,8,1),(4,7,1),(5,6,1),(6,5,2),(7,4,2),(8,3,2),
+ (9,2,2),(10,1,2);
+
+# These ones should use optimisation
+
+update t1 set c = 111, b = 20 where a = 1;
+
+select * from t1 where a = 1 order by a;
+
+delete from t1 where a = 1;
+
+select * from t1 where a = 1 order by a;
+
+update t1 set c = 12, b = 19 where b = 2;
+
+select * from t1 where b = 2 order by a;
+
+delete from t1 where b = 19;
+
+select * from t1 where b = 19 order by a;
+
+update t1 set c = 22 where a = 10 or a >= 10;
+
+select * from t1 order by a;
+
+update t1 set c = 23 where a in (8,10);
+
+select * from t1 order by a;
+
+update t1 set c = 23 where a in (7,8) or a >= 10;
+
+select * from t1 order by a;
+
+# These ones should not use optimisation
+
+update t1 set c = 11 where a = 3 or b = 7;
+
+select * from t1 where a = 3 or b = 7 order by a;
+
+update t1 set a = 13, b = 20 where a = 3;
+
+select * from t1 where a = 13 order by a;
+
+update t1 set a = 12, b = 19 where b = 7;
+
+select * from t1 where b = 19 order by a;
+
+select * from t1 where b = 7 order by a;
+
+update t1 set c = 12, b = 29 where a = 5 and b = 6;
+
+select * from t1 where b = 19 order by a;
+
+delete from t1 where b = 6 and c = 12;
+
+select * from t1 where b = 6 order by a;
+
+drop table t1;
+
diff --git a/mysql-test/suite/ndb/t/partition_03ndb.test b/mysql-test/suite/ndb/t/partition_03ndb.test
deleted file mode 100644
index 3190ab9dfc7..00000000000
--- a/mysql-test/suite/ndb/t/partition_03ndb.test
+++ /dev/null
@@ -1,26 +0,0 @@
-###############################################
-# #
-# Partition tests NDB tables #
-# #
-###############################################
-
-#
-# NOTE: PLEASE DO NOT ADD NOT NDB SPECIFIC TESTCASES HERE !
-# NON STORAGE SPECIFIC TESTCASES SHOULD BE ADDED IN
-# THE SOURCED FIELS ONLY.
-#
-
-# Storage engine to be tested
-let $engine= 'NDB' ;
--- source include/have_ndb.inc
-eval SET SESSION storage_engine=$engine;
-
-
-# Other storage engine <> storage engine to be tested
-let $engine_other= 'MEMORY';
-# number of rows for the INSERT/UPDATE/DELETE/SELECT experiments
-# on partioned tables
-# Attention: In the moment the result files fit to @max_row = 200 only
-SET @max_row = 200;
-
--- source include/partition_1.inc
diff --git a/mysql-test/suite/ndb/r/ndb_backup_print.result b/mysql-test/suite/ndb_team/r/ndb_backup_print.result
index 7fa073bafb5..7fa073bafb5 100644
--- a/mysql-test/suite/ndb/r/ndb_backup_print.result
+++ b/mysql-test/suite/ndb_team/r/ndb_backup_print.result
diff --git a/mysql-test/suite/ndb/r/ndb_dd_backuprestore.result b/mysql-test/suite/ndb_team/r/ndb_dd_backuprestore.result
index c82fe560121..c82fe560121 100644
--- a/mysql-test/suite/ndb/r/ndb_dd_backuprestore.result
+++ b/mysql-test/suite/ndb_team/r/ndb_dd_backuprestore.result
diff --git a/mysql-test/suite/ndb/t/ndb_backup_print.test b/mysql-test/suite/ndb_team/t/ndb_backup_print.test
index cf869fd56f5..cf869fd56f5 100644
--- a/mysql-test/suite/ndb/t/ndb_backup_print.test
+++ b/mysql-test/suite/ndb_team/t/ndb_backup_print.test
diff --git a/mysql-test/suite/ndb/t/ndb_dd_backuprestore.test b/mysql-test/suite/ndb_team/t/ndb_dd_backuprestore.test
index 48db8ec3e0b..48db8ec3e0b 100644
--- a/mysql-test/suite/ndb/t/ndb_dd_backuprestore.test
+++ b/mysql-test/suite/ndb_team/t/ndb_dd_backuprestore.test
diff --git a/mysql-test/suite/parts/inc/methods1.inc b/mysql-test/suite/parts/inc/methods1.inc
index 24006b6e0f1..d986b67a456 100644
--- a/mysql-test/suite/parts/inc/methods1.inc
+++ b/mysql-test/suite/parts/inc/methods1.inc
@@ -1,5 +1,5 @@
################################################################################
-# include/partition_methods1.inc #
+# inc/partition_methods1.inc #
# #
# Purpose: #
# Create and check partitioned tables #
@@ -11,7 +11,7 @@
# do #
# 1. Create the partitioned table #
# 2 Insert the content of the table t0_template into t1 #
-# 3. Execute include/partition_check.inc #
+# 3. Execute inc/partition_check.inc #
# 4. Drop the table t1 #
# done #
# #
@@ -21,14 +21,14 @@
# has to be set before sourcing this routine. #
# Example: #
# let $unique= , UNIQUE INDEX uidx1 (f_int1); #
-# include/partition_method1s.inc #
+# inc/partition_method1s.inc #
# #
-# Attention: The routine include/partition_methods2.inc is very similar #
+# Attention: The routine inc/partition_methods2.inc is very similar #
# to this one. So if something has to be changed here it #
# might be necessary to do it also there #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-03-05 #
# Change Author: #
# Change Date: #
@@ -52,7 +52,6 @@ $unique
$partitioning;
eval $insert_all;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
#----------- PARTITION BY KEY
@@ -67,7 +66,6 @@ $unique
$partitioning;
eval $insert_all;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
#----------- PARTITION BY LIST
@@ -90,7 +88,6 @@ $unique
$partitioning;
eval $insert_all;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
#----------- PARTITION BY RANGE
@@ -114,7 +111,6 @@ $unique
$partitioning;
eval $insert_all;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
#----------- PARTITION BY RANGE -- SUBPARTITION BY HASH
@@ -137,7 +133,6 @@ $unique
$partitioning;
eval $insert_all;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
#----------- PARTITION BY RANGE -- SUBPARTITION BY KEY
@@ -163,7 +158,6 @@ $unique
$partitioning;
eval $insert_all;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
#----------- PARTITION BY LIST -- SUBPARTITION BY HASH
@@ -186,7 +180,6 @@ $unique
$partitioning;
eval $insert_all;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
#----------- PARTITION BY LIST -- SUBPARTITION BY KEY
@@ -209,5 +202,4 @@ $unique
$partitioning;
eval $insert_all;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
diff --git a/mysql-test/suite/parts/inc/part_blocked_sql_funcs_main.inc b/mysql-test/suite/parts/inc/part_blocked_sql_funcs_main.inc
index cba5c47f01b..1a66a26312a 100644
--- a/mysql-test/suite/parts/inc/part_blocked_sql_funcs_main.inc
+++ b/mysql-test/suite/parts/inc/part_blocked_sql_funcs_main.inc
@@ -21,253 +21,207 @@ let $sqlfunc = ascii(col1);
let $valsqlfunc = ascii('a');
let $coltype = char(30);
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $sqlfunc = ord(col1);
let $valsqlfunc = ord('a');
let $coltype = char(30);
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $sqlfunc = greatest(col1,15);
let $valsqlfunc = greatest(1,15);
let $coltype = int;
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $sqlfunc = isnull(col1);
let $valsqlfunc = isnull(15);
let $coltype = int;
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $sqlfunc = least(col1,15);
let $valsqlfunc = least(15,30);
let $coltype = int;
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $sqlfunc = case when col1>15 then 20 else 10 end;
let $valsqlfunc = case when 1>30 then 20 else 15 end;
let $coltype = int;
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $sqlfunc = ifnull(col1,30);
let $valsqlfunc = ifnull(1,30);
let $coltype = int;
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $sqlfunc = nullif(col1,30);
let $valsqlfunc = nullif(1,30);
let $coltype = int;
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $sqlfunc = bit_length(col1);
let $valsqlfunc = bit_length(255);
let $coltype = int;
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $coltype = char(30);
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $sqlfunc = char_length(col1);
let $valsqlfunc = char_length('a');
#let $coltype = int;
#--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $coltype = char(30);
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $sqlfunc = character_length(col1);
let $valsqlfunc = character_length('a');
let $coltype = char(30)
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $sqlfunc = find_in_set(col1,'1,2,3,4,5,6,7,8,9');
let $valsqlfunc = find_in_set('i','a,b,c,d,e,f,g,h,i');
let $coltype = int;
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $coltype = char(30);
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $sqlfunc = instr(col1,'acb');
let $valsqlfunc = instr('i','a,b,c,d,e,f,g,h,i');
let $coltype = int;
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $coltype = char(30);
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $sqlfunc = length(col1);
let $valsqlfunc = length('a,b,c,d,e,f,g,h,i');
let $coltype = int;
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $sqlfunc = locate('a',col1);
let $valsqlfunc = locate('i','a,b,c,d,e,f,g,h,i');
let $coltype = int;
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $coltype = char(30);
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $sqlfunc = octet_length(col1);
let $valsqlfunc = octet_length('a,b,c,d,e,f,g,h,i');
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $sqlfunc = position('a' in col1);
let $valsqlfunc = position('i' in 'a,b,c,d,e,f,g,h,i');
let $coltype = int;
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $coltype = char(30);
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $sqlfunc = strcmp(col1,'acb');
let $valsqlfunc = strcmp('i','a,b,c,d,e,f,g,h,i');
let $coltype = int;
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $coltype = char(30);
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $sqlfunc = crc32(col1);
let $valsqlfunc = crc32('a,b,c,d,e,f,g,h,i');
let $coltype = char(30);
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $sqlfunc = round(col1);
let $valsqlfunc = round(15);
let $coltype = int;
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $sqlfunc = sign(col1);
let $valsqlfunc = sign(123);
let $coltype = int;
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $sqlfunc = period_add(col1,5);
let $valsqlfunc = period_add(9804,5);
let $coltype = datetime;
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $sqlfunc = period_diff(col1,col2);
let $valsqlfunc = period_diff(9809,199907);
let $coltype = datetime,col2 datetime;
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $coltype = int,col2 int;
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $sqlfunc = timestampdiff(day,5,col1);
let $valsqlfunc = timestampdiff(YEAR,'2002-05-01','2001-01-01');
let $coltype = datetime;
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $sqlfunc = unix_timestamp(col1);
let $valsqlfunc = unix_timestamp ('2002-05-01');
let $coltype = date;
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $sqlfunc = week(col1);
let $valsqlfunc = week('2002-05-01');
let $coltype = datetime;
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $sqlfunc = weekofyear(col1);
let $valsqlfunc = weekofyear('2002-05-01');
let $coltype = datetime;
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $sqlfunc = cast(col1 as signed);
let $valsqlfunc = cast(123 as signed);
let $coltype = varchar(30);
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $sqlfunc = convert(col1,unsigned);
let $valsqlfunc = convert(123,unsigned);
let $coltype = varchar(30);
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $sqlfunc = col1 | 20;
let $valsqlfunc = 10 | 20;
let $coltype = int;
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $sqlfunc = col1 & 20;
let $valsqlfunc = 10 & 20;
let $coltype = int;
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $sqlfunc = col1 ^ 20;
let $valsqlfunc = 10 ^ 20;
let $coltype = int;
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $sqlfunc = col1 << 20;
let $valsqlfunc = 10 << 20;
let $coltype = int;
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $sqlfunc = col1 >> 20;
let $valsqlfunc = 10 >> 20;
let $coltype = int;
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $sqlfunc = ~col1;
let $valsqlfunc = ~20;
let $coltype = int;
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $sqlfunc = bit_count(col1);
let $valsqlfunc = bit_count(20);
let $coltype = int;
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
let $sqlfunc = inet_aton(col1);
let $valsqlfunc = inet_aton('192.168.1.1');
let $coltype = int;
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
set @var =20;
let $sqlfunc = bit_length(col1)+@var-@var;
let $valsqlfunc = bit_length(20)+@var-@var;
let $coltype = int;
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
delimiter //;
@@ -298,5 +252,4 @@ let $sqlfunc = getmaxsigned_t1(col1);
let $valsqlfunc = getmaxsigned(10);
let $coltype = int;
--source suite/parts/inc/partition_blocked_sql_funcs.inc
-# --source include/partition_blocked_sql_funcs.inc
drop function if exists getmaxsigned_t1;
diff --git a/mysql-test/suite/parts/inc/part_supported_sql_funcs_delete.inc b/mysql-test/suite/parts/inc/part_supported_sql_funcs_delete.inc
index c0769cdeef1..3a486619b0b 100644
--- a/mysql-test/suite/parts/inc/part_supported_sql_funcs_delete.inc
+++ b/mysql-test/suite/parts/inc/part_supported_sql_funcs_delete.inc
@@ -1,5 +1,6 @@
################################################################################
-# t/part_supported_sql_funcs_delete.inc # # #
+# t/part_supported_sql_funcs_delete.inc #
+# #
# Purpose: #
# Delete access of the tests frame for allowed sql functions #
# #
diff --git a/mysql-test/suite/parts/inc/part_supported_sql_funcs_main.inc b/mysql-test/suite/parts/inc/part_supported_sql_funcs_main.inc
index 4761d15c6d3..25a9774d2a1 100644
--- a/mysql-test/suite/parts/inc/part_supported_sql_funcs_main.inc
+++ b/mysql-test/suite/parts/inc/part_supported_sql_funcs_main.inc
@@ -38,7 +38,6 @@ let $val2 = 13 ;
let $val3 = 17 ;
let $val4 = 15 ;
--source suite/parts/inc/partition_supported_sql_funcs.inc
-# --source include/partition_supported_sql_funcs.inc
let $sqlfunc = ceiling(col1);
@@ -51,7 +50,6 @@ let $val3 = 17.987;
let $val4 = 15.654 ;
# DISABLED due to bug 30577
#--source suite/parts/inc/partition_supported_sql_funcs.inc
-# --source include/partition_supported_sql_funcs.inc
let $sqlfunc = floor(col1);
let $valsqlfunc = floor(15.123);
@@ -63,7 +61,6 @@ let $val3 = 17.987;
let $val4 = 15.654 ;
# DISABLED due to bug 30577
#--source suite/parts/inc/partition_supported_sql_funcs.inc
-# --source include/partition_supported_sql_funcs.inc
let $sqlfunc = mod(col1,10);
let $valsqlfunc = mod(15,10);
@@ -74,7 +71,6 @@ let $val2 = 19;
let $val3 = 17;
let $val4 = 15 ;
--source suite/parts/inc/partition_supported_sql_funcs.inc
-# --source include/partition_supported_sql_funcs.inc
let $sqlfunc = day(col1);
let $valsqlfunc = day('2006-12-21');
@@ -85,7 +81,6 @@ let $val2 = '2006-01-17';
let $val3 = '2006-01-25';
let $val4 = '2006-02-05';
--source suite/parts/inc/partition_supported_sql_funcs.inc
-# --source include/partition_supported_sql_funcs.inc
let $sqlfunc = dayofmonth(col1);
let $valsqlfunc = dayofmonth('2006-12-24');
@@ -96,7 +91,6 @@ let $val2 = '2006-01-17';
let $val3 = '2006-01-25';
let $val4 = '2006-02-05';
--source suite/parts/inc/partition_supported_sql_funcs.inc
-# --source include/partition_supported_sql_funcs.inc
let $sqlfunc = dayofweek(col1);
let $valsqlfunc = dayofweek('2006-12-24');
@@ -107,7 +101,6 @@ let $val2 = '2006-02-17';
let $val3 = '2006-01-25';
let $val4 = '2006-02-05';
--source suite/parts/inc/partition_supported_sql_funcs.inc
-# --source include/partition_supported_sql_funcs.inc
let $sqlfunc = dayofyear(col1);
let $valsqlfunc = dayofyear('2006-12-25');
@@ -118,10 +111,8 @@ let $val2 = '2006-01-17';
let $val3 = '2006-02-25';
let $val4 = '2006-02-05';
--source suite/parts/inc/partition_supported_sql_funcs.inc
-# --source include/partition_supported_sql_funcs.inc
let $coltype = char(30);
--source suite/parts/inc/partition_supported_sql_funcs.inc
-# --source include/partition_supported_sql_funcs.inc
let $sqlfunc = extract(month from col1);
let $valsqlfunc = extract(year from '1998-11-23');
@@ -132,7 +123,6 @@ let $val2 = '2006-02-17';
let $val3 = '2006-01-25';
let $val4 = '2006-02-05';
--source suite/parts/inc/partition_supported_sql_funcs.inc
-# --source include/partition_supported_sql_funcs.inc
let $sqlfunc = hour(col1);
let $valsqlfunc = hour('18:30');
@@ -143,7 +133,6 @@ let $val2 = '14:30';
let $val3 = '21:59';
let $val4 = '10:30';
--source suite/parts/inc/partition_supported_sql_funcs.inc
-# --source include/partition_supported_sql_funcs.inc
let $sqlfunc = microsecond(col1);
let $valsqlfunc = microsecond('10:30:10.000010');
@@ -154,7 +143,6 @@ let $val2 = '04:30:01.000018';
let $val3 = '00:59:22.000024';
let $val4 = '05:30:34.000037';
--source suite/parts/inc/partition_supported_sql_funcs.inc
-# --source include/partition_supported_sql_funcs.inc
let $sqlfunc = minute(col1);
let $valsqlfunc = minute('18:30');
@@ -164,7 +152,6 @@ let $val2 = '14:30:45';
let $val3 = '21:59:22';
let $val4 = '10:24:23';
--source suite/parts/inc/partition_supported_sql_funcs.inc
-# --source include/partition_supported_sql_funcs.inc
let $sqlfunc = second(col1);
let $valsqlfunc = second('18:30:14');
@@ -175,10 +162,8 @@ let $val2 = '14:30:20';
let $val3 = '21:59:22';
let $val4 = '10:22:33';
--source suite/parts/inc/partition_supported_sql_funcs.inc
-# --source include/partition_supported_sql_funcs.inc
let $coltype = char(30);
--source suite/parts/inc/partition_supported_sql_funcs.inc
-# --source include/partition_supported_sql_funcs.inc
let $sqlfunc = month(col1);
let $valsqlfunc = month('2006-10-14');
@@ -189,7 +174,6 @@ let $val2 = '2006-12-17';
let $val3 = '2006-05-25';
let $val4 = '2006-11-06';
--source suite/parts/inc/partition_supported_sql_funcs.inc
-# --source include/partition_supported_sql_funcs.inc
let $sqlfunc = quarter(col1);
let $valsqlfunc = quarter('2006-10-14');
@@ -200,7 +184,6 @@ let $val2 = '2006-12-17';
let $val3 = '2006-09-25';
let $val4 = '2006-07-30';
--source suite/parts/inc/partition_supported_sql_funcs.inc
-# --source include/partition_supported_sql_funcs.inc
let $sqlfunc = time_to_sec(col1)-(time_to_sec(col1)-20);
let $valsqlfunc = time_to_sec('18:30:14')-(time_to_sec('17:59:59'));
@@ -211,7 +194,6 @@ let $val2 = '14:30:45';
let $val3 = '21:59:22';
let $val4 = '10:33:11';
--source suite/parts/inc/partition_supported_sql_funcs.inc
-# --source include/partition_supported_sql_funcs.inc
let $sqlfunc = to_days(col1)-to_days('2006-01-01');
let $valsqlfunc = to_days('2006-02-02')-to_days('2006-01-01');
@@ -222,7 +204,6 @@ let $val2 = '2006-01-17';
let $val3 = '2006-01-25';
let $val4 = '2006-02-06';
--source suite/parts/inc/partition_supported_sql_funcs.inc
-# --source include/partition_supported_sql_funcs.inc
# DATEDIFF() is implemented as (TO_DAYS(d1) - TO_DAYS(d2))
let $sqlfunc = datediff(col1, '2006-01-01');
@@ -234,7 +215,6 @@ let $val2 = '2006-01-17';
let $val3 = '2006-01-25';
let $val4 = '2006-02-06';
--source suite/parts/inc/partition_supported_sql_funcs.inc
-# --source include/partition_supported_sql_funcs.inc
let $sqlfunc = weekday(col1);
let $valsqlfunc = weekday('2006-10-14');
@@ -245,7 +225,6 @@ let $val2 = '2006-11-17';
let $val3 = '2006-05-25';
let $val4 = '2006-02-06';
--source suite/parts/inc/partition_supported_sql_funcs.inc
-# --source include/partition_supported_sql_funcs.inc
let $sqlfunc = year(col1)-1990;
let $valsqlfunc = year('2005-10-14')-1990;
@@ -256,7 +235,6 @@ let $val2 = '2000-02-17';
let $val3 = '2004-05-25';
let $val4 = '2002-02-15';
--source suite/parts/inc/partition_supported_sql_funcs.inc
-# --source include/partition_supported_sql_funcs.inc
let $sqlfunc = yearweek(col1)-200600;
let $valsqlfunc = yearweek('2006-10-14')-200600;
@@ -267,4 +245,3 @@ let $val2 = '2006-08-17';
let $val3 = '2006-03-25';
let $val4 = '2006-11-15';
--source suite/parts/inc/partition_supported_sql_funcs.inc
-# --source include/partition_supported_sql_funcs.inc
diff --git a/mysql-test/suite/parts/inc/partition.pre b/mysql-test/suite/parts/inc/partition.pre
index c09cfed29e6..0c906ce4581 100644
--- a/mysql-test/suite/parts/inc/partition.pre
+++ b/mysql-test/suite/parts/inc/partition.pre
@@ -1,5 +1,5 @@
################################################################################
-# include/partition.pre #
+# inc/partition.pre #
# #
# Purpose: #
# Auxiliary script creating prerequisites needed by the partitioning tests #
@@ -12,41 +12,35 @@
# The README for the partitioning testcases is at the end of this file. #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
-# Original Date: 2006-03-05 #
-# Change Author: #
-# Change Date: #
-# Change: #
+# Original Author: mleich #
+# Original Date: 2006-03-05 #
+# Change Author: mleich #
+# Change Date: 2007-10-08 #
+# Change: Minor cleanup and fix for #
+# Bug#31243 Test "partition_basic_myisam" truncates path names#
+# - Blow column file_list up to VARBINARY(10000) #
+# - remove reference to fixed bugs #17455, #19305 #
################################################################################
# Set the session storage engine
eval SET @@session.storage_engine = $engine;
##### Disabled/affected testcases, because of open bugs #####
---echo
---echo #------------------------------------------------------------------------
---echo # There are several testcases disabled because of the open bugs
---echo # #15890
-if (`SELECT @@session.storage_engine IN('ndbcluster')`)
-{
---echo # #18730, Bug#18735
-}
---echo # The expected results suffer from the following bugs
---echo # harmless #17455, #19305
---echo # which cannot be suppressed because of technical reasons.
---echo #------------------------------------------------------------------------
-# Attention: Only bugs appearing in all storage engines should be mentioned above.
-# The top level test wrapper (example: t/partition_basic_ndb.test)
-# may set the $fixed_bug<nnnnn> variable to 0 after sourcing
-# this file.
-# Bug#15890 Partitions: Strange interpretation of partition number
-let $fixed_bug15890= 0;
-# Bug#18730: Partitions: NDB, crash on SELECT MIN(<unique column>)
-# Attention: NDB testcases set this variable later to 0
-let $fixed_bug18730= 1;
-# Bug#18735: Partitions: NDB, UNIQUE INDEX, UPDATE, strange server response
-# Attention: NDB testcases set this variable later to 0
-let $fixed_bug18735= 1;
+# --echo
+# --echo #------------------------------------------------------------------------
+# --echo # There are several testcases disabled because of the open bugs
+# if (`SELECT @@session.storage_engine IN('ndbcluster')`)
+# {
+# --echo # #18730
+# }
+# --echo #------------------------------------------------------------------------
+# # Attention: Only bugs appearing in all storage engines should be mentioned above.
+# # The top level test wrapper (example: t/partition_basic_ndb.test)
+# # may set the $fixed_bug<nnnnn> variable to 0 after sourcing
+# # this file.
+# # Bug#18730: Partitions: NDB, crash on SELECT MIN(<unique column>)
+# # Attention: NDB testcases set this variable later to 0
+# let $fixed_bug18730= 1;
--echo
--echo #------------------------------------------------------------------------
@@ -66,6 +60,17 @@ if ($debug)
--echo # It is to be expected, that we get huge differences.
}
+let $ER_DUP_KEY= 1022;
+let $ER_GET_ERRNO= 1030;
+let $ER_BAD_NULL_ERROR= 1048;
+let $ER_DUP_ENTRY= 1062;
+let $ER_PARSE_ERROR= 1064;
+let $ER_TOO_MANY_PARTITIONS_ERROR= 1499;
+let $ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF= 1503;
+let $ER_NO_PARTS_ERROR= 1504;
+let $ER_DROP_PARTITION_NON_EXISTENT= 1507;
+let $ER_SAME_NAME_PARTITION= 1517;
+let $ER_NO_PARTITION_FOR_GIVEN_VALUE= 1526;
# Set the variable $engine_other to a storage engine <> $engine
--disable_query_log
@@ -164,7 +169,7 @@ DROP TABLE IF EXISTS t0_definition;
CREATE TABLE t0_definition (
state CHAR(3),
create_command VARBINARY(5000),
-file_list VARBINARY(5000),
+file_list VARBINARY(10000),
PRIMARY KEY (state)
) ENGINE = MEMORY;
@@ -308,23 +313,23 @@ if (0)
# (t/partition_<feature>_<engine>.test)
# a) General not engine specific settings and requirements
# $debug, $ls, @max_row, $more_trigger_tests, .....
-# --source include/have_partition.inc
+# --source inc/have_partition.inc
# b) Engine specific settings and requirements
# $do_pk_tests, $MAX_VALUE, $engine
# SET SESSION storage_engine
# $engine_other
# c) Generate the prerequisites ($variables, @variables, tables) needed
# via
-# --source include/partition.pre
+# --source inc/partition.pre
# d) Set "fixed_bug<number>" variables to 1 if there are open engine
# specific bugs which need worarounds.
# e) Execute the feature specific testscript via
-# --source include/partition_<feature>.inc
+# --source inc/partition_<feature>.inc
# f) Perform a cleanup by removing all objects created within the tests
-# --source include/partition_cleanup.inc
+# --source inc/partition_cleanup.inc
#
# 2.2. script generating the prerequisites needed in all tests
-# (include/partition.pre)
+# (inc/partition.pre)
# a) Message about open bugs causing that
# - some testcases are disabled
# - it cannot be avoided that the file with expected results suffers
@@ -340,36 +345,70 @@ if (0)
# c) Setting of auxiliary variables
# d) Creation of auxiliary tables ....
#
-# 3. script checking a feature
-# (include/partition_<feature.inc>.inc)
-# Example:
-# a) "set/compute" a CREATE TABLE t1 .. and an ALTER TABLE ... statement
-# b) CREATE TABLE t1 ...
-# c) INSERT INTO t1 (.....) SELECT .... FROM t0_template WHERE ...
-# The first 50 % of all t0_template rows will be inserted into t1.
-# d) ALTER TABLE t1 (Example: ADD/DROP UNIQUE INDEX)
-# e) INSERT INTO t1 (.....) SELECT .... FROM t0_template WHERE ...
-# The second 50 % of all t0_template rows will be inserted into t1.
-# Now t1 and t0_template should have the same content.
-# f) Check the "usability" of the current table t1
-# via
-# --source include/partition_check.pre
-# g) DROP TABLE t1
-# Switch to other CREATE and ALTER statements and run sequence a)-g) again
-# ...
+# 2.3. script checking a feature
+# (inc/partition_<feature.inc>.inc)
+# Example:
+# a) "set/compute" a CREATE TABLE t1 .. and an ALTER TABLE ... statement
+# b) CREATE TABLE t1 ...
+# c) INSERT INTO t1 (.....) SELECT .... FROM t0_template WHERE ...
+# The first 50 % of all t0_template rows will be inserted into t1.
+# d) ALTER TABLE t1 (Example: ADD/DROP UNIQUE INDEX)
+# e) INSERT INTO t1 (.....) SELECT .... FROM t0_template WHERE ...
+# The second 50 % of all t0_template rows will be inserted into t1.
+# Now t1 and t0_template should have the same content.
+# f) Check the "usability" of the current table t1
+# via
+# --source inc/partition_check.pre
+# g) DROP TABLE t1
+# Switch to other CREATE and ALTER statements and run sequence a)-g) again
+# ...
+#
+# 2.4. script checking if a certain table shows the expected behaviour
+# ("usability" check): inc/partition_check.inc
+# - SELECT/INSERT/UPDATE/DELETE affecting single and multiple records
+# - check of values of special interest like NULL etc.
+# - INSERT/UPDATE with BEFORE/AFTER triggers
+# - violations of UNIQUE constraints, if there are any defined
+# - transactions ...
+# - TRUNCATE/OPTIMIZE/..
+# - ...
+#
+#
+# 2.5. There are some auxiliary scripts with sub tests where we cannot predict
+# if we get an error and if we get one, which one.
+# Example: INSERT a record where the value for a certain column equals
+# some existing record.
+# Depending on existing/not existing PRIMARY KEYs, UNIQUE INDEXes
+# the response might be "no error", ER_DUP_KEY, ER_DUP_ENTRY.
+# Our requirements:
+# 1. We cannot abort whenever get an error message from the server.
+# 2. We want the exact server message into the protocol.
+# 3. We want abort testing if we know that a certain error must not happen.
+# Common but unusable Solutions:
+# a) --error 0, ER_DUP_KEY, ER_DUP_ENTRY
+# <statment>
+# We get no error message even if the statement fails.
+# b) --error ER_DUP_KEY, ER_DUP_ENTRY
+# <statment>
+# We might get "got one of the expected errors".
+# There are situations where the statement must be successful.
+# c) --disable_abort_on_error
+# <statment>
+# --enable_abort_on_error
+# And nothing extra
+# We do not abort in case of unexpected server errors.
+#
+# Final solution:
+# --disable_abort_on_error
+# <statment>
+# --enable_abort_on_error
+# Check via error number if the error is not totally unexpected.
+# The sub tests use $ER_DUP_KEY, $ER_DUP_ENTRY, etc.
+# Assignment of values happen in this file.
#
-# 4. script checking if a certain table shows the expected behaviour
-# ("usability" check): include/partition_check.inc
-# - SELECT/INSERT/UPDATE/DELETE affecting single and multiple records
-# - check of values of special interest like NULL etc.
-# - INSERT/UPDATE with BEFORE/AFTER triggers
-# - violations of UNIQUE constraints, if there are any defined
-# - transactions ...
-# - TRUNCATE/OPTIMIZE/..
-# - ...
#
# 3. How to analyze a partitioning bug revealed with these tests/ How to build
-# a small replay script from the monstrous protocols ?
+# a small replay script from the monstrous protocols ?
#------------------------------------------------------------------------------#
# a) crash -- use the file var/master-data/mysql/general_log.CSV
# b) no crash, but unexpected server response (there is no "reject file)
@@ -382,19 +421,19 @@ if (0)
# protocolling of some queries.
# In most cases you will find that the r/<testcase>.<log/reject> contains at
# least a line "# # check <something>: 0".
-# That means that a check within include/partition_check did not got the
+# That means that a check within inc/partition_check did not got the
# expected result.
# A good start for a replay script would be
# 1. Copy t/partition_<feature>_<engine>.test to t/my_test.test
# 2. Edit t/my_test.test
# - set $debug to 1
# - replace the line
-# "--source include/partition_<feature>.inc"
+# "--source inc/partition_<feature>.inc"
# with all statements between the last
# CREATE TABLE t1 statement (included this)
# and the line
-# "# Start usability test (include/partition_check.inc)"
-# - add the content of include/partition_check.inc at the end.
+# "# Start usability test (inc/partition_check.inc)"
+# - add the content of inc/partition_check.inc at the end.
#
# Please excuse that the partitioning tests generate such huge protocols which
# and are not very handy when it comes to bug analysis. I tried to squeez out
diff --git a/mysql-test/include/partition_10.inc b/mysql-test/suite/parts/inc/partition_10.inc
index 74b0fdf7f6a..2050c809463 100644
--- a/mysql-test/include/partition_10.inc
+++ b/mysql-test/suite/parts/inc/partition_10.inc
@@ -1,4 +1,4 @@
-# include/partition_10.inc
+# inc/partition_10.inc
#
# Do some basic checks on a table.
#
@@ -10,7 +10,7 @@
# is like expected.
#
---source include/partition_layout.inc
+--source suite/parts/inc/partition_layout.inc
####### Variations with multiple records
# Select on empty table
@@ -50,20 +50,14 @@ eval UPDATE t1 SET f1 = $max_row + 2, f2 = 'ZZZZZZZ'
WHERE f1 = 0 AND f2 = '#######';
# Select
eval SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = $max_row + 2 AND f2 = 'ZZZZZZZ';
-if ($fixed_bug15968)
-{
# Bug #15968: Partitions: crash when INSERT with f1 = -1 into PARTITION BY HASH(f1)
eval UPDATE t1 SET f1 = 0 - 1, f2 = 'ZZZZZZZ'
WHERE f1 = $max_row + 1 AND f2 = '#######';
# Select
SELECT COUNT(*) AS my_value FROM t1 WHERE f1 = 0 - 1 AND f2 = 'ZZZZZZZ';
-}
# Delete
eval DELETE FROM t1 WHERE f1 = $max_row + 2 AND f2 = 'ZZZZZZZ';
-if ($fixed_bug15968)
-{
DELETE FROM t1 WHERE f1 = 0 - 1 AND f2 = 'ZZZZZZZ';
-}
# Select
SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
diff --git a/mysql-test/include/partition_11.inc b/mysql-test/suite/parts/inc/partition_11.inc
index 7ed4d882aa0..9f10f58a5f0 100644
--- a/mysql-test/include/partition_11.inc
+++ b/mysql-test/suite/parts/inc/partition_11.inc
@@ -1,4 +1,4 @@
-# include/partition_11.inc
+# inc/partition_11.inc
#
# Try to create a table with the given partition number
#
@@ -13,7 +13,7 @@ let $run= `SELECT @my_errno = 0`;
# If this operation was successfull, check + drop this table
if ($run)
{
- --source include/partition_10.inc
+ --source suite/parts/inc/partition_10.inc
eval DROP TABLE t1;
}
#### Try to create a table with the given subpartition number
@@ -29,6 +29,6 @@ let $run= `SELECT @my_errno = 0`;
# If this operation was successfull, check + drop this table
if ($run)
{
- --source include/partition_10.inc
+ --source suite/parts/inc/partition_10.inc
eval DROP TABLE t1;
}
diff --git a/mysql-test/include/partition_12.inc b/mysql-test/suite/parts/inc/partition_12.inc
index 2a5610b82e1..c30990a61ef 100644
--- a/mysql-test/include/partition_12.inc
+++ b/mysql-test/suite/parts/inc/partition_12.inc
@@ -1,10 +1,10 @@
-# include/partition_12.inc
+# inc/partition_12.inc
#
# Do some basic things on a table, if the SQL command executed just before
# sourcing this file was successful.
#
---source include/partition_layout.inc
+--source suite/parts/inc/partition_layout.inc
####### Variations with multiple records
# (mass) Insert max_row_div2 + 1 records
@@ -42,20 +42,14 @@ eval UPDATE t1 SET f1 = $max_row + 2, f2 = 'ZZZZZZZ'
WHERE f1 = 0 AND f2 = '#######';
# Select
eval SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = $max_row + 2 AND f2 = 'ZZZZZZZ';
-if ($fixed_bug15968)
-{
# Bug #15968: Partitions: crash when INSERT with f1 = -1 into PARTITION BY HASH(f1)
eval UPDATE t1 SET f1 = 0 - 1, f2 = 'ZZZZZZZ'
WHERE f1 = $max_row + 1 AND f2 = '#######';
# Select
SELECT COUNT(*) AS my_value FROM t1 WHERE f1 = 0 - 1 AND f2 = 'ZZZZZZZ';
-}
# Delete
eval DELETE FROM t1 WHERE f1 = $max_row + 2 AND f2 = 'ZZZZZZZ';
-if ($fixed_bug15968)
-{
DELETE FROM t1 WHERE f1 = 0 - 1 AND f2 = 'ZZZZZZZ';
-}
# Select
SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
diff --git a/mysql-test/suite/parts/inc/partition_20.inc b/mysql-test/suite/parts/inc/partition_20.inc
index 7901b332a11..cc820b8312b 100644
--- a/mysql-test/suite/parts/inc/partition_20.inc
+++ b/mysql-test/suite/parts/inc/partition_20.inc
@@ -1,10 +1,11 @@
################################################################################
-# include/partition_20.inc #
+# inc/partition_20.inc #
# #
# Purpose: #
-# Auxiliary script, only useful when sourced by include/partition_check.inc. #
+# Auxiliary script, only useful when sourced by #
+# suite/parts/inc/partition_check.inc. #
# #
-# 1. Check if the preceeding statement caused that the expected number of #
+# 1. Check if the preceding statement caused that the expected number of #
# records was #
# - inserted #
# - updated or deleted+inserted #
@@ -17,19 +18,13 @@
# must be set before sourcing this routine. #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-03-05 #
# Change Author: #
# Change Date: #
# Change: #
################################################################################
-# include/partition_20.inc
-#
-# Auxiliary script, only useful when sourced by include/partition_check.inc.
-#
-
-# Check of preceeding statement via Select
if ($no_debug)
{
--disable_query_log
diff --git a/mysql-test/suite/parts/inc/partition_alter1.inc b/mysql-test/suite/parts/inc/partition_alter1.inc
index a9706d5eb98..e3ec924f346 100644
--- a/mysql-test/suite/parts/inc/partition_alter1.inc
+++ b/mysql-test/suite/parts/inc/partition_alter1.inc
@@ -1,12 +1,12 @@
################################################################################
-# include/partition_alter1.inc #
+# inc/partition_alter1.inc #
# #
# Purpose: #
# ADD/DROP PRIMARY KEYs and/or UNIQUE INDEXes tests on partitioned tables #
# This routine is only useful for the partition_<feature>_<engine> tests. #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-03-05 #
# Change Author: #
# Change Date: #
@@ -26,7 +26,7 @@
--echo # within the partitioning function
--echo #------------------------------------------------------------------------
# Rule: Only f_int1 is used within the partitioning function
-# ---> include/partition_alter_11.inc
+# ---> inc/partition_alter_11.inc
if ($do_pk_tests)
{
# The value of the following test is maybe covered by 1.1.3.
@@ -35,12 +35,10 @@ if ($do_pk_tests)
--echo # 1.1.1 PRIMARY KEY consisting of one column
let $alter= ALTER TABLE t1 ADD PRIMARY KEY(f_int1);
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
}
# This must fail, because PRIMARY KEY does not contain f_int1
let $alter= ALTER TABLE t1 ADD PRIMARY KEY(f_int2);
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
}
# The value of the following test is maybe covered by 1.1.4.
if ($more_pk_ui_tests)
@@ -48,65 +46,52 @@ if ($more_pk_ui_tests)
--echo # 1.1.2 UNIQUE INDEX consisting of one column
let $alter= ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1);
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
}
# This must fail, because UNIQUE INDEX does not contain f_int1
let $alter= ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
--source suite/parts/inc/partition_alter_11.inc
-# --source include/partition_alter_11.inc
if ($do_pk_tests)
{
--echo # 1.1.3 PRIMARY KEY consisting of two columns
let $alter= ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
let $alter= ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
}
--echo # 1.1.4 UNIQUE INDEX consisting of two columns
let $alter= ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
--source suite/parts/inc/partition_alter_11.inc
-# --source include/partition_alter_11.inc
let $alter= ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
--source suite/parts/inc/partition_alter_11.inc
-# --source include/partition_alter_11.inc
#
--echo #------------------------------------------------------------------------
--echo # 1.2 ADD PRIMARY KEY or UNIQUE INDEX to table with two columns
--echo # (f_int1 and f_int2) within the partitioning function
--echo #------------------------------------------------------------------------
# Rule: f_int1 and f_int2 is used within the partitioning function
-# ---> include/partition_alter_13.inc
+# ---> inc/partition_alter_13.inc
if ($do_pk_tests)
{
--echo # 1.2.1 PRIMARY KEY consisting of two columns
let $alter= ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
--source suite/parts/inc/partition_alter_13.inc
- # --source include/partition_alter_13.inc
let $alter= ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
--source suite/parts/inc/partition_alter_13.inc
- # --source include/partition_alter_13.inc
}
--echo # 1.2.2 UNIQUE INDEX consisting of two columns
let $alter= ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
--source suite/parts/inc/partition_alter_13.inc
-# --source include/partition_alter_13.inc
let $alter= ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
--source suite/parts/inc/partition_alter_13.inc
-# --source include/partition_alter_13.inc
if ($do_pk_tests)
{
--echo # 1.2.3 PRIMARY KEY and UNIQUE INDEX consisting of two columns
let $alter= ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2), ADD PRIMARY KEY(f_int2,f_int1);
--source suite/parts/inc/partition_alter_13.inc
- # --source include/partition_alter_13.inc
let $alter= ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), ADD PRIMARY KEY(f_int1,f_int2);
--source suite/parts/inc/partition_alter_13.inc
- # --source include/partition_alter_13.inc
let $unique= ;
--source suite/parts/inc/partition_alter_13.inc
- # --source include/partition_alter_13.inc
}
#
#
@@ -122,7 +107,7 @@ if ($do_pk_tests)
--echo # 2.1 Partitioning function contains one column(f_int1)
--echo #------------------------------------------------------------------------
# Rule: Only f_int1 is used within the partitioning function
-# ---> include/partition_alter_11.inc
+# ---> inc/partition_alter_11.inc
# The value of the following test is maybe covered by 2.1.5.
if ($more_pk_ui_tests)
{
@@ -132,14 +117,12 @@ if ($more_pk_ui_tests)
let $unique= , PRIMARY KEY(f_int1);
let $alter= ALTER TABLE t1 DROP PRIMARY KEY;
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
}
#
--echo # 2.1.2 DROP UNIQUE INDEX consisting of one column
let $unique= , UNIQUE INDEX uidx1 (f_int1);
let $alter= ALTER TABLE t1 DROP INDEX uidx1;
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
#
if ($do_pk_tests)
{
@@ -147,20 +130,16 @@ if ($more_pk_ui_tests)
let $alter= ALTER TABLE t1 DROP PRIMARY KEY;
let $unique= , PRIMARY KEY(f_int1,f_int2);
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
let $unique= , PRIMARY KEY(f_int2,f_int1);
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
}
#
--echo # 2.1.4 DROP UNIQUE INDEX consisting of two columns
let $alter= ALTER TABLE t1 DROP INDEX uidx1;
let $unique= , UNIQUE INDEX uidx1 (f_int1,f_int2);
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
let $unique= , UNIQUE INDEX uidx1 (f_int2,f_int1);
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
}
#
if ($do_pk_tests)
@@ -169,42 +148,35 @@ if ($do_pk_tests)
let $unique= , UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1);
let $alter= ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
let $unique= , UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2);
let $alter= ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
}
let $unique= , UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1);
let $alter= ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
--source suite/parts/inc/partition_alter_11.inc
-# --source include/partition_alter_11.inc
#
--echo #------------------------------------------------------------------------
--echo # 2.2 Partitioning function contains two columns (f_int1,f_int2)
--echo #------------------------------------------------------------------------
# Rule: f_int1 and f_int2 is used within the partitioning function
-# ---> include/partition_alter_13.inc
+# ---> inc/partition_alter_13.inc
if ($do_pk_tests)
{
--echo # 2.2.1 DROP PRIMARY KEY consisting of two columns
let $alter= ALTER TABLE t1 DROP PRIMARY KEY;
let $unique= , PRIMARY KEY(f_int1,f_int2);
--source suite/parts/inc/partition_alter_13.inc
- # --source include/partition_alter_13.inc
let $unique= , PRIMARY KEY(f_int2,f_int1);
--source suite/parts/inc/partition_alter_13.inc
- # --source include/partition_alter_13.inc
}
#
--echo # 2.2.2 DROP UNIQUE INDEX consisting of two columns
let $alter= ALTER TABLE t1 DROP INDEX uidx1;
let $unique= , UNIQUE INDEX uidx1 (f_int1,f_int2);
--source suite/parts/inc/partition_alter_13.inc
-# --source include/partition_alter_13.inc
let $unique= , UNIQUE INDEX uidx1 (f_int2,f_int1);
--source suite/parts/inc/partition_alter_13.inc
-# --source include/partition_alter_13.inc
#
if ($do_pk_tests)
{
@@ -212,26 +184,23 @@ if ($do_pk_tests)
let $unique= , UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1);
let $alter= ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
--source suite/parts/inc/partition_alter_13.inc
- # --source include/partition_alter_13.inc
let $unique= , UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2);
let $alter= ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
--source suite/parts/inc/partition_alter_13.inc
- # --source include/partition_alter_13.inc
}
let $unique= , UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1);
let $alter= ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
--source suite/parts/inc/partition_alter_13.inc
-# --source include/partition_alter_13.inc
if (0)
{
--echo
--echo #========================================================================
--echo # 3. ALTER TABLE "ALTER" PRIMARY KEY
---echo # ML: I think that an ALTER TABLE statement where a PRIMARY KEY is
---echo # dropped and recreated (with different layout) might be of
---echo # interest, if the tree containing the table data has to be
---echo # reorganized during this operation.
+--echo # mleich: I think that an ALTER TABLE statement where a PRIMARY
+--echo # KEY is dropped and recreated (with different layout) might
+--echo # be of interest, if the tree containing the table data has
+--echo # to be reorganized during this operation.
--echo # To be implemented
--echo #========================================================================
--echo
diff --git a/mysql-test/suite/parts/inc/partition_alter2.inc b/mysql-test/suite/parts/inc/partition_alter2.inc
index 3e01c3972bc..3960b8e8a09 100644
--- a/mysql-test/suite/parts/inc/partition_alter2.inc
+++ b/mysql-test/suite/parts/inc/partition_alter2.inc
@@ -1,12 +1,12 @@
################################################################################
-# include/partition_alter2.inc #
+# inc/partition_alter2.inc #
# #
# Purpose: #
# Tests where the columns used within the partitioning function are altered. #
# This routine is only useful for the partition_<feature>_<engine> tests. .#
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-03-05 #
# Change Author: #
# Change Date: #
@@ -22,12 +22,11 @@
--echo # 1.1 ALTER column f_int2 not used in partitioning function
--echo #------------------------------------------------------------------------
# Rule: Only f_int1 is used within the partitioning function
-# ---> include/partition_alter_11.inc
+# ---> inc/partition_alter_11.inc
let $alter= ALTER TABLE t1 MODIFY f_int2 BIGINT;
--echo # 1.1.1 no PRIMARY KEY or UNIQUE INDEX exists
let $unique= ;
--source suite/parts/inc/partition_alter_11.inc
-# --source include/partition_alter_11.inc
#
if ($do_pk_tests)
{
@@ -38,14 +37,11 @@ if ($do_pk_tests)
{
let $unique= , PRIMARY KEY (f_int1);
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
}
let $unique= , PRIMARY KEY (f_int1,f_int2);
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
let $unique= , PRIMARY KEY (f_int2,f_int1);
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
}
#
--echo # 1.1.3 UNIQUE INDEX exists
@@ -55,14 +51,11 @@ if ($more_pk_ui_tests)
{
let $unique= , UNIQUE INDEX uidx1 (f_int1);
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
}
let $unique= , UNIQUE INDEX uidx1 (f_int1,f_int2);
--source suite/parts/inc/partition_alter_11.inc
-# --source include/partition_alter_11.inc
let $unique= , UNIQUE INDEX uidx1 (f_int2,f_int1);
--source suite/parts/inc/partition_alter_11.inc
-# --source include/partition_alter_11.inc
#
if ($more_pk_ui_tests)
{
@@ -71,47 +64,35 @@ if ($more_pk_ui_tests)
--echo # 1.2 ALTER column f_int1 used in partitioning function
--echo #------------------------------------------------------------------------
# Rule: Only f_int1 is used within the partitioning function
- # ---> include/partition_alter_11.inc
+ # ---> inc/partition_alter_11.inc
let $alter= ALTER TABLE t1 MODIFY f_int1 BIGINT;
--echo # 1.2.1 no PRIMARY KEY or UNIQUE INDEX exists
let $unique= ;
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
--source suite/parts/inc/partition_alter_13.inc
- # --source include/partition_alter_13.inc
#
if ($do_pk_tests)
{
--echo # 1.2.2 PRIMARY KEY exists
let $unique= , PRIMARY KEY (f_int1);
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
let $unique= , PRIMARY KEY (f_int1,f_int2);
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
--source suite/parts/inc/partition_alter_13.inc
- # --source include/partition_alter_13.inc
let $unique= , PRIMARY KEY (f_int2,f_int1);
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
--source suite/parts/inc/partition_alter_13.inc
- # --source include/partition_alter_13.inc
}
#
--echo # 1.2.3 UNIQUE INDEX exists
let $unique= , UNIQUE INDEX uidx (f_int1);
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
let $unique= , UNIQUE INDEX uidx (f_int1,f_int2);
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
--source suite/parts/inc/partition_alter_13.inc
- # --source include/partition_alter_13.inc
let $unique= , UNIQUE INDEX uidx (f_int2,f_int1);
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
--source suite/parts/inc/partition_alter_13.inc
- # --source include/partition_alter_13.inc
}
#
--echo #------------------------------------------------------------------------
@@ -119,14 +100,12 @@ if ($more_pk_ui_tests)
--echo # f_int1 or (f_int1 and f_int2) used in partitioning function
--echo #------------------------------------------------------------------------
# Rule: f_int1 and f_int2 is used within the partitioning function
-# ---> include/partition_alter_13.inc
+# ---> inc/partition_alter_13.inc
let $alter= ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
--echo # 1.3.1 no PRIMARY KEY or UNIQUE INDEX exists
let $unique= ;
--source suite/parts/inc/partition_alter_11.inc
-# --source include/partition_alter_11.inc
--source suite/parts/inc/partition_alter_13.inc
-# --source include/partition_alter_13.inc
#
if ($do_pk_tests)
{
@@ -137,18 +116,13 @@ if ($do_pk_tests)
{
let $unique= , PRIMARY KEY (f_int1);
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
}
let $unique= , PRIMARY KEY (f_int1,f_int2);
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
--source suite/parts/inc/partition_alter_13.inc
- # --source include/partition_alter_13.inc
let $unique= , PRIMARY KEY (f_int2,f_int1);
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
--source suite/parts/inc/partition_alter_13.inc
- # --source include/partition_alter_13.inc
}
#
--echo # 1.3.3 UNIQUE INDEX exists
@@ -158,18 +132,13 @@ if ($more_pk_ui_tests)
{
let $unique= , UNIQUE INDEX uidx (f_int1);
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
}
let $unique= , UNIQUE INDEX uidx (f_int1,f_int2);
--source suite/parts/inc/partition_alter_11.inc
-# --source include/partition_alter_11.inc
--source suite/parts/inc/partition_alter_13.inc
-# --source include/partition_alter_13.inc
let $unique= , UNIQUE INDEX uidx (f_int2,f_int1);
--source suite/parts/inc/partition_alter_11.inc
-# --source include/partition_alter_11.inc
--source suite/parts/inc/partition_alter_13.inc
-# --source include/partition_alter_13.inc
--echo
--echo #========================================================================
@@ -180,12 +149,11 @@ let $unique= , UNIQUE INDEX uidx (f_int2,f_int1);
--echo # 2.1 ALTER column f_int2 not used in partitioning function
--echo #------------------------------------------------------------------------
# Rule: Only f_int1 is used within the partitioning function
-# ---> include/partition_alter_11.inc
+# ---> inc/partition_alter_11.inc
let $alter= ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
--echo # 2.1.1 no PRIMARY KEY or UNIQUE INDEX exists
let $unique= ;
--source suite/parts/inc/partition_alter_11.inc
-# --source include/partition_alter_11.inc
#
if ($do_pk_tests)
{
@@ -196,14 +164,11 @@ if ($do_pk_tests)
--echo # 2.1.2 PRIMARY KEY exists
let $unique= , PRIMARY KEY (f_int1);
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
}
let $unique= , PRIMARY KEY (f_int1,f_int2);
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
let $unique= , PRIMARY KEY (f_int2,f_int1);
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
}
#
--echo # 2.1.3 UNIQUE INDEX exists
@@ -213,14 +178,11 @@ if ($more_pk_ui_tests)
{
let $unique= , UNIQUE INDEX uidx1 (f_int1);
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
}
let $unique= , UNIQUE INDEX uidx1 (f_int1,f_int2);
--source suite/parts/inc/partition_alter_11.inc
-# --source include/partition_alter_11.inc
let $unique= , UNIQUE INDEX uidx1 (f_int2,f_int1);
--source suite/parts/inc/partition_alter_11.inc
-# --source include/partition_alter_11.inc
#
if ($more_pk_ui_tests)
{
@@ -229,61 +191,47 @@ if ($more_pk_ui_tests)
--echo # 2.2 ALTER column f_int1 used in partitioning function
--echo #------------------------------------------------------------------------
# Rule: Only f_int1 is used within the partitioning function
- # ---> include/partition_alter_11.inc
+ # ---> inc/partition_alter_11.inc
let $alter= ALTER TABLE t1 MODIFY f_int1 MEDIUMINT;
--echo # 2.2.1 no PRIMARY KEY or UNIQUE INDEX exists
let $unique= ;
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
--source suite/parts/inc/partition_alter_13.inc
- # --source include/partition_alter_13.inc
#
if ($do_pk_tests)
{
--echo # 2.2.2 PRIMARY KEY exists
let $unique= , PRIMARY KEY (f_int1);
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
let $unique= , PRIMARY KEY (f_int1,f_int2);
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
--source suite/parts/inc/partition_alter_13.inc
- # --source include/partition_alter_13.inc
let $unique= , PRIMARY KEY (f_int2,f_int1);
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
--source suite/parts/inc/partition_alter_13.inc
- # --source include/partition_alter_13.inc
}
#
--echo # 2.2.3 UNIQUE INDEX exists
let $unique= , UNIQUE INDEX uidx (f_int1);
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
let $unique= , UNIQUE INDEX uidx (f_int1,f_int2);
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
--source suite/parts/inc/partition_alter_13.inc
- # --source include/partition_alter_13.inc
let $unique= , UNIQUE INDEX uidx (f_int2,f_int1);
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
--source suite/parts/inc/partition_alter_13.inc
- # --source include/partition_alter_13.inc
}
#
--echo #------------------------------------------------------------------------
--echo # 2.3 ALTER column f_int1 and f_int2 used in partitioning function
--echo #------------------------------------------------------------------------
# Rule: f_int1 and f_int2 is used within the partitioning function
-# ---> include/partition_alter_13.inc
+# ---> inc/partition_alter_13.inc
let $alter= ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
--echo # 2.3.1 no PRIMARY KEY or UNIQUE INDEX exists
let $unique= ;
--source suite/parts/inc/partition_alter_11.inc
-# --source include/partition_alter_11.inc
--source suite/parts/inc/partition_alter_13.inc
-# --source include/partition_alter_13.inc
#
if ($do_pk_tests)
{
@@ -295,17 +243,12 @@ if ($do_pk_tests)
let $unique= , PRIMARY KEY (f_int1);
--source suite/parts/inc/partition_alter_11.inc
}
- # --source include/partition_alter_11.inc
let $unique= , PRIMARY KEY (f_int1,f_int2);
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
--source suite/parts/inc/partition_alter_13.inc
- # --source include/partition_alter_13.inc
let $unique= , PRIMARY KEY (f_int2,f_int1);
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
--source suite/parts/inc/partition_alter_13.inc
- # --source include/partition_alter_13.inc
}
#
--echo # 2.3.3 UNIQUE INDEX exists
@@ -315,18 +258,13 @@ if ($more_pk_ui_tests)
{
let $unique= , UNIQUE INDEX uidx (f_int1);
--source suite/parts/inc/partition_alter_11.inc
- # --source include/partition_alter_11.inc
}
let $unique= , UNIQUE INDEX uidx (f_int1,f_int2);
--source suite/parts/inc/partition_alter_11.inc
-# --source include/partition_alter_11.inc
--source suite/parts/inc/partition_alter_13.inc
-# --source include/partition_alter_13.inc
let $unique= , UNIQUE INDEX uidx (f_int2,f_int1);
--source suite/parts/inc/partition_alter_11.inc
-# --source include/partition_alter_11.inc
--source suite/parts/inc/partition_alter_13.inc
-# --source include/partition_alter_13.inc
#
if (0)
@@ -338,8 +276,8 @@ if (0)
--echo # INTEGER --> FLOAT
--echo # INTEGER --> DECIMAL
--echo # INTEGER --> VARCHAR
---echo # ML: I assume that at least the first two variants are of some
---echo # interest. But I am unsure if the server allows such
+--echo # mleich: I assume that at least the first two variants are of
+--echo # some interest. But I am unsure if the server allows such
--echo # conversions. I also think that such operations have a
--echo # conversions very small likelihood.
--echo # To be implemented.
diff --git a/mysql-test/suite/parts/inc/partition_alter3.inc b/mysql-test/suite/parts/inc/partition_alter3.inc
index 4b1539f4260..1fad361b371 100644
--- a/mysql-test/suite/parts/inc/partition_alter3.inc
+++ b/mysql-test/suite/parts/inc/partition_alter3.inc
@@ -1,11 +1,11 @@
################################################################################
-# include/partition_alter3.inc #
+# inc/partition_alter3.inc #
# #
# Purpose: #
# Tests for partition management commands for HASH and KEY partitioning #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-04-11 #
# Change Author: #
# Change Date: #
@@ -32,7 +32,7 @@ SELECT IF(9999 - 1000 + 1 > @max_row, @max_row , 9999 - 1000 + 1)
INTO @exp_row_count;
# DEBUG SELECT @exp_row_count;
# 4. Print the layout, check Readability
---source include/partition_layout.inc
+--source suite/parts/inc/partition_layout.inc
--source suite/parts/inc/partition_check_read1.inc
#
--echo #------------------------------------------------------------------------
@@ -44,16 +44,16 @@ ALTER TABLE t1 ADD PARTITION (PARTITION part2);
#
--echo # 1.1.2 Assign HASH partitioning
ALTER TABLE t1 PARTITION BY HASH(YEAR(f_date));
---source include/partition_layout.inc
+--source suite/parts/inc/partition_layout.inc
--source suite/parts/inc/partition_check_read1.inc
#
--echo # 1.1.3 Assign other HASH partitioning to already partitioned table
--echo # + test and switch back + test
ALTER TABLE t1 PARTITION BY HASH(DAYOFYEAR(f_date));
---source include/partition_layout.inc
+--source suite/parts/inc/partition_layout.inc
--source suite/parts/inc/partition_check_read1.inc
ALTER TABLE t1 PARTITION BY HASH(YEAR(f_date));
---source include/partition_layout.inc
+--source suite/parts/inc/partition_layout.inc
--source suite/parts/inc/partition_check_read1.inc
#
--echo # 1.1.4 Add PARTITIONS not fitting to HASH --> must fail
@@ -64,7 +64,7 @@ ALTER TABLE t1 ADD PARTITION (PARTITION part2 VALUES LESS THAN (0));
#
--echo # 1.1.5 Add two named partitions + test
ALTER TABLE t1 ADD PARTITION (PARTITION part1, PARTITION part7);
---source include/partition_layout.inc
+--source suite/parts/inc/partition_layout.inc
--source suite/parts/inc/partition_check_read1.inc
#
--echo # 1.1.6 Add two named partitions, name clash --> must fail
@@ -73,12 +73,12 @@ ALTER TABLE t1 ADD PARTITION (PARTITION part1, PARTITION part7);
#
--echo # 1.1.7 Add one named partition + test
ALTER TABLE t1 ADD PARTITION (PARTITION part2);
---source include/partition_layout.inc
+--source suite/parts/inc/partition_layout.inc
--source suite/parts/inc/partition_check_read1.inc
#
--echo # 1.1.8 Add four not named partitions + test
ALTER TABLE t1 ADD PARTITION PARTITIONS 4;
---source include/partition_layout.inc
+--source suite/parts/inc/partition_layout.inc
--source suite/parts/inc/partition_check_read1.inc
--echo #------------------------------------------------------------------------
@@ -89,7 +89,7 @@ ALTER TABLE t1 ADD PARTITION PARTITIONS 4;
ALTER TABLE t1 DROP PARTITION part1;
#
--echo # 1.2.2 COALESCE PARTITION partitionname is not supported
---error 1064
+--error ER_PARSE_ERROR
ALTER TABLE t1 COALESCE PARTITION part1;
#
--echo # 1.2.3 Decrease by 0 is non sense --> must fail
@@ -101,7 +101,7 @@ let $loop= 7;
while ($loop)
{
ALTER TABLE t1 COALESCE PARTITION 1;
- --source include/partition_layout.inc
+ --source suite/parts/inc/partition_layout.inc
--source suite/parts/inc/partition_check_read1.inc
dec $loop;
}
@@ -111,14 +111,13 @@ ALTER TABLE t1 COALESCE PARTITION 1;
#
--echo # 1.2.6 Remove partitioning
ALTER TABLE t1 REMOVE PARTITIONING;
---source include/partition_layout.inc
+--source suite/parts/inc/partition_layout.inc
--source suite/parts/inc/partition_check_read1.inc
#
--echo # 1.2.7 Remove partitioning from not partitioned table --> ????
ALTER TABLE t1 REMOVE PARTITIONING;
DROP TABLE t1;
--source suite/parts/inc/partition_check_drop.inc
-# --source suite/parts/inc/partition_check_drop.inc
--echo
--echo #========================================================================
@@ -134,7 +133,7 @@ $column_list
# 2. Fill the table t1 with some records
eval $insert_all;
# 4. Print the layout, check Readability
---source include/partition_layout.inc
+--source suite/parts/inc/partition_layout.inc
--source suite/parts/inc/partition_check_read2.inc
#
--echo #------------------------------------------------------------------------
@@ -143,7 +142,7 @@ eval $insert_all;
--echo #------------------------------------------------------------------------
--echo # 2.1.1 Assign KEY partitioning
ALTER TABLE t1 PARTITION BY KEY(f_int1);
---source include/partition_layout.inc
+--source suite/parts/inc/partition_layout.inc
--source suite/parts/inc/partition_check_read2.inc
#
--echo # 2.1.2 Add PARTITIONS not fitting to KEY --> must fail
@@ -154,17 +153,17 @@ ALTER TABLE t1 ADD PARTITION (PARTITION part2 VALUES LESS THAN (0));
#
--echo # 2.1.3 Add two named partitions + test
ALTER TABLE t1 ADD PARTITION (PARTITION part1, PARTITION part7);
---source include/partition_layout.inc
+--source suite/parts/inc/partition_layout.inc
--source suite/parts/inc/partition_check_read2.inc
#
--echo # 2.1.4 Add one named partition + test
ALTER TABLE t1 ADD PARTITION (PARTITION part2);
---source include/partition_layout.inc
+--source suite/parts/inc/partition_layout.inc
--source suite/parts/inc/partition_check_read2.inc
#
--echo # 2.1.5 Add four not named partitions + test
ALTER TABLE t1 ADD PARTITION PARTITIONS 4;
---source include/partition_layout.inc
+--source suite/parts/inc/partition_layout.inc
--source suite/parts/inc/partition_check_read2.inc
--echo #------------------------------------------------------------------------
@@ -180,7 +179,7 @@ let $loop= 7;
while ($loop)
{
ALTER TABLE t1 COALESCE PARTITION 1;
- --source include/partition_layout.inc
+ --source suite/parts/inc/partition_layout.inc
--source suite/parts/inc/partition_check_read2.inc
dec $loop;
}
@@ -190,12 +189,11 @@ ALTER TABLE t1 COALESCE PARTITION 1;
#
--echo # 2.2.6 Remove partitioning
ALTER TABLE t1 REMOVE PARTITIONING;
---source include/partition_layout.inc
+--source suite/parts/inc/partition_layout.inc
--source suite/parts/inc/partition_check_read2.inc
#
--echo # 2.2.7 Remove partitioning from not partitioned table --> ????
ALTER TABLE t1 REMOVE PARTITIONING;
DROP TABLE t1;
--source suite/parts/inc/partition_check_drop.inc
-# --source suite/parts/inc/partition_check_drop.inc
diff --git a/mysql-test/suite/parts/inc/partition_alter4.inc b/mysql-test/suite/parts/inc/partition_alter4.inc
index e6f5dadbcca..040c13d69d6 100644
--- a/mysql-test/suite/parts/inc/partition_alter4.inc
+++ b/mysql-test/suite/parts/inc/partition_alter4.inc
@@ -1,5 +1,5 @@
################################################################################
-# include/partition_alter1.inc #
+# inc/partition_alter1.inc #
# #
# Purpose: #
# Execute ALTER ... OPTIMIZE/CHECK/REBUID/ANALYZE statements (maintenance) #
@@ -22,19 +22,15 @@
--echo # 1.1 ALTER ... ANALYZE PARTITION part_1;
let $alter= ALTER TABLE t1 ANALYZE PARTITION part_1;
--source suite/parts/inc/partition_alter_41.inc
-# --source include/partition_alter_41.inc
--echo # 1.2 ALTER ... ANALYZE PARTITION part_1,part_2;
let $alter= ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
--source suite/parts/inc/partition_alter_41.inc
-# --source include/partition_alter_41.inc
--echo # 1.3 ALTER ... ANALYZE PARTITION part_1,part_2,part_5,part_6,part_10;
let $alter= ALTER TABLE t1 ANALYZE PARTITION part_1,part_2,part_5,part_6,part_10;
--source suite/parts/inc/partition_alter_41.inc
-# --source include/partition_alter_41.inc
--echo # 1.4 ALTER ... ANALYZE PARTITION part_1,part_1,part_1;
let $alter= ALTER TABLE t1 ANALYZE PARTITION part_1,part_1,part_1;
--source suite/parts/inc/partition_alter_41.inc
-# --source include/partition_alter_41.inc
--echo #------------------------------------------------------------------------
--echo # 2 ALTER ... CHECK PARTITION
@@ -42,19 +38,15 @@ let $alter= ALTER TABLE t1 ANALYZE PARTITION part_1,part_1,part_1;
--echo # 2.1 ALTER ... CHECK PARTITION part_1;
let $alter= ALTER TABLE t1 CHECK PARTITION part_1;
--source suite/parts/inc/partition_alter_41.inc
-# --source include/partition_alter_41.inc
--echo # 2.2 ALTER ... CHECK PARTITION part_1,part_2;
let $alter= ALTER TABLE t1 CHECK PARTITION part_1,part_2;
--source suite/parts/inc/partition_alter_41.inc
-# --source include/partition_alter_41.inc
--echo # 2.3 ALTER ... CHECK PARTITION part_1,part_2,part_5,part_6,part_10;
let $alter= ALTER TABLE t1 CHECK PARTITION part_1,part_2,part_5,part_6,part_10;
--source suite/parts/inc/partition_alter_41.inc
-# --source include/partition_alter_41.inc
--echo # 2.4 ALTER ... CHECK PARTITION part_1,part_1,part_1;
let $alter= ALTER TABLE t1 CHECK PARTITION part_1,part_1,part_1;
--source suite/parts/inc/partition_alter_41.inc
-# --source include/partition_alter_41.inc
--echo #------------------------------------------------------------------------
--echo # 3 ALTER ... OPTIMIZE PARTITION
@@ -62,19 +54,15 @@ let $alter= ALTER TABLE t1 CHECK PARTITION part_1,part_1,part_1;
--echo # 3.1 ALTER ... OPTIMIZE PARTITION part_1;
let $alter= ALTER TABLE t1 OPTIMIZE PARTITION part_1;
--source suite/parts/inc/partition_alter_41.inc
-# --source include/partition_alter_41.inc
--echo # 3.2 ALTER ... OPTIMIZE PARTITION part_1,part_2;
let $alter= ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2;
--source suite/parts/inc/partition_alter_41.inc
-# --source include/partition_alter_41.inc
--echo # 3.3 ALTER ... OPTIMIZE PARTITION part_1,part_2,part_5,part_6,part_10;
let $alter= ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2,part_5,part_6,part_10;
--source suite/parts/inc/partition_alter_41.inc
-# --source include/partition_alter_41.inc
--echo # 3.4 ALTER ... OPTIMIZE PARTITION part_1,part_1,part_1;
let $alter= ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_1,part_1;
--source suite/parts/inc/partition_alter_41.inc
-# --source include/partition_alter_41.inc
--echo #------------------------------------------------------------------------
--echo # 4 ALTER ... REBUILD PARTITION
@@ -82,19 +70,15 @@ let $alter= ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_1,part_1;
--echo # 4.1 ALTER ... REBUILD PARTITION part_1;
let $alter= ALTER TABLE t1 REBUILD PARTITION part_1;
--source suite/parts/inc/partition_alter_41.inc
-# --source include/partition_alter_41.inc
--echo # 4.2 ALTER ... REBUILD PARTITION part_1,part_2;
let $alter= ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
--source suite/parts/inc/partition_alter_41.inc
-# --source include/partition_alter_41.inc
--echo # 4.3 ALTER ... REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
let $alter= ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
--source suite/parts/inc/partition_alter_41.inc
-# --source include/partition_alter_41.inc
--echo # 4.4 ALTER ... REBUILD PARTITION part_1,part_1,part_1;
let $alter= ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1;
--source suite/parts/inc/partition_alter_41.inc
-# --source include/partition_alter_41.inc
--echo #------------------------------------------------------------------------
--echo # 5 ALTER ... REPAIR PARTITION
@@ -102,19 +86,15 @@ let $alter= ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1;
--echo # 5.1 ALTER ... REBUILD PARTITION part_1;
let $alter= ALTER TABLE t1 REBUILD PARTITION part_1;
--source suite/parts/inc/partition_alter_41.inc
-# --source include/partition_alter_41.inc
--echo # 5.2 ALTER ... REBUILD PARTITION part_1,part_2;
let $alter= ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
--source suite/parts/inc/partition_alter_41.inc
-# --source include/partition_alter_41.inc
--echo # 5.3 ALTER ... REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
let $alter= ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
--source suite/parts/inc/partition_alter_41.inc
-# --source include/partition_alter_41.inc
--echo # 5.4 ALTER ... REBUILD PARTITION part_1,part_1,part_1;
let $alter= ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1;
--source suite/parts/inc/partition_alter_41.inc
-# --source include/partition_alter_41.inc
--echo #------------------------------------------------------------------------
--echo # 6 ALTER ... REMOVE PARTITIONING
@@ -122,5 +102,4 @@ let $alter= ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1;
--echo # 6.1 ALTER ... REMOVE PARTITIONING;
let $alter= ALTER TABLE t1 REMOVE PARTITIONING;
--source suite/parts/inc/partition_alter_41.inc
-# --source include/partition_alter_41.inc
diff --git a/mysql-test/suite/parts/inc/partition_alter_1.inc b/mysql-test/suite/parts/inc/partition_alter_1.inc
index 1498970547a..b62efd24072 100644
--- a/mysql-test/suite/parts/inc/partition_alter_1.inc
+++ b/mysql-test/suite/parts/inc/partition_alter_1.inc
@@ -1,17 +1,17 @@
################################################################################
-# include/partition_alter_1.inc #
+# inc/partition_alter_1.inc #
# #
# Purpose: #
# Alter a partioned table and check the usability afterwards #
# This script is only usefule when sourced by #
-# include/partition_alter_1[1|3].inc #
+# inc/partition_alter_1[1|3].inc #
# #
# 0. Expect there is a table t1 #
# 1. Insert the first half of the table t0_template into t1 #
# 2. Execute the ALTER TABLE statement within the variable $alter #
# Case SQL code in #
# 0: 1. Insert the second half of the table t0_template into t1 #
-# 2. Execute the usability test include/partition_check.inc #
+# 2. Execute the usability test inc/partition_check.inc #
# >0, but expected: nothing #
# >0 and unexpected: abort #
# 3. DROP the table t1 #
@@ -20,25 +20,27 @@
# Example: #
# CREATE TABLE t1 (f_int1 INT,f_int2 INT, .... ); #
# let $alter= ALTER TABLE t1 ADD PRIMARY KEY(f_int2); #
-# include/partition_alter_1.inc #
+# inc/partition_alter_1.inc #
# #
# The parameters $insert_first_half and $insert_second_half #
-# are also to be set outside (source ./include/partition.pre). #
+# are also to be set outside (source ./inc/partition.pre). #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
-# Original Date: 2006-03-05 #
-# Change Author: #
-# Change Date: #
-# Change: #
+# Original Author: mleich #
+# Original Date: 2006-03-05 #
+# Change Author: mleich #
+# Change Date: 2007-10-08 #
+# Change: Fix for #
+# Bug#31481 test suite parts: Many tests fail because of #
+# changed server error codes #
################################################################################
eval $insert_first_half;
# Possible/Expected return codes for ALTER TABLE ...
# 0
# 1030: ER_GET_ERRNO
-# 1500: ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF
-# 1504: ER_DROP_PARTITION_NON_EXISTENT
+# 1502: ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF
+# 1506: ER_DROP_PARTITION_NON_EXISTENT
--disable_abort_on_error
eval $alter;
--enable_abort_on_error
@@ -48,13 +50,15 @@ if ($no_debug)
}
eval SET @my_errno = $mysql_errno;
let $run_test= `SELECT @my_errno = 0`;
-let $unexpected_error= `SELECT @my_errno NOT IN (0,1030,1500,1504)`;
-if ($unexpected_error)
+if (`SELECT @my_errno NOT IN (0,$ER_GET_ERRNO,
+ $ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF,
+ $ER_DROP_PARTITION_NON_EXISTENT)`);
{
--echo # The last command got an unexepected error response.
- --echo # Expected/handled SQL codes are 0,1030,1500,1504
+ --echo # Expected/handled SQL codes are 0,$ER_GET_ERRNO,$ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF,$ER_DROP_PARTITION_NON_EXISTENT
SELECT '# SQL code we got was: ' AS "", @my_errno AS "";
--echo # Sorry, have to abort.
+ --echo # Please check the error name to number mapping in inc/partition.pre.
exit;
--echo
}
@@ -64,6 +68,5 @@ if ($run_test)
{
eval $insert_second_half;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
}
DROP TABLE t1;
diff --git a/mysql-test/suite/parts/inc/partition_alter_11.inc b/mysql-test/suite/parts/inc/partition_alter_11.inc
index f26d8e822ae..c7dd2d1d15f 100644
--- a/mysql-test/suite/parts/inc/partition_alter_11.inc
+++ b/mysql-test/suite/parts/inc/partition_alter_11.inc
@@ -1,5 +1,5 @@
################################################################################
-# include/partition_alter_11.inc #
+# inc/partition_alter_11.inc #
# #
# Purpose: #
# Check ALTER partitioned table and the state of the table afterwards #
@@ -10,7 +10,7 @@
# PARTITION BY RANGE/LIST ... SUBPARTITION BY HASH/KEY ... #
# do #
# 1. Create the partitioned table #
-# 2. Execute include/partition_alter_1.inc, which will #
+# 2. Execute inc/partition_alter_1.inc, which will #
# - Insert the first half of the table t0_template into t1 #
# - Execute the ALTER TABLE statement #
# - Insert the second half of the table t0_template into t1 #
@@ -26,14 +26,14 @@
# Example: #
# let $unique= , UNIQUE INDEX uidx1 (f_int1); #
# let $alter= ALTER TABLE t1 DROP UNIQUE INDEX uidx1; #
-# include/partition_alter1.inc #
+# inc/partition_alter1.inc #
# #
# Attention: The routine include/partition_alter_13.inc is very similar #
# to this one. So if something has to be changed here it #
# might be necessary to do it also there #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-03-05 #
# Change Author: #
# Change Date: #
@@ -56,7 +56,6 @@ $unique
)
$partitioning;
--source suite/parts/inc/partition_alter_1.inc
-# --source include/partition_alter_1.inc
#----------- PARTITION BY KEY
if ($with_partitioning)
@@ -69,7 +68,6 @@ $unique
)
$partitioning;
--source suite/parts/inc/partition_alter_1.inc
-# --source include/partition_alter_1.inc
#----------- PARTITION BY LIST
if ($with_partitioning)
@@ -90,7 +88,6 @@ $unique
)
$partitioning;
--source suite/parts/inc/partition_alter_1.inc
-# --source include/partition_alter_1.inc
#----------- PARTITION BY RANGE
if ($with_partitioning)
@@ -112,7 +109,6 @@ $unique
)
$partitioning;
--source suite/parts/inc/partition_alter_1.inc
-# --source include/partition_alter_1.inc
#----------- PARTITION BY RANGE -- SUBPARTITION BY HASH
if ($with_partitioning)
@@ -133,7 +129,6 @@ $unique
)
$partitioning;
--source suite/parts/inc/partition_alter_1.inc
-# --source include/partition_alter_1.inc
#----------- PARTITION BY RANGE -- SUBPARTITION BY KEY
if ($with_partitioning)
@@ -157,7 +152,6 @@ $unique
)
$partitioning;
--source suite/parts/inc/partition_alter_1.inc
-# --source include/partition_alter_1.inc
#----------- PARTITION BY LIST -- SUBPARTITION BY HASH
if ($with_partitioning)
@@ -178,7 +172,6 @@ $unique
)
$partitioning;
--source suite/parts/inc/partition_alter_1.inc
-# --source include/partition_alter_1.inc
#----------- PARTITION BY LIST -- SUBPARTITION BY KEY
if ($with_partitioning)
@@ -199,4 +192,3 @@ $unique
)
$partitioning;
--source suite/parts/inc/partition_alter_1.inc
-# --source include/partition_alter_1.inc
diff --git a/mysql-test/suite/parts/inc/partition_alter_13.inc b/mysql-test/suite/parts/inc/partition_alter_13.inc
index 5152230795a..cfc622a7c82 100644
--- a/mysql-test/suite/parts/inc/partition_alter_13.inc
+++ b/mysql-test/suite/parts/inc/partition_alter_13.inc
@@ -1,5 +1,5 @@
################################################################################
-# include/partition_alter_13.inc #
+# inc/partition_alter_13.inc #
# #
# Purpose: #
# Check ALTER partitioned table and the state of the table afterwards #
@@ -10,7 +10,7 @@
# PARTITION BY RANGE/LIST ... SUBPARTITION BY HASH/KEY ... #
# do #
# 1. Create the partitioned table #
-# 2. Execute include/partition_alter_1.inc, which will #
+# 2. Execute inc/partition_alter_1.inc, which will #
# - Insert the first half of the table t0_template into t1 #
# - Execute the ALTER TABLE statement #
# - Insert the second half of the table t0_template into t1 #
@@ -26,14 +26,14 @@
# Example: #
# let $unique= , UNIQUE INDEX uidx1 (f_int1); #
# let $alter= ALTER TABLE t1 DROP UNIQUE INDEX uidx1; #
-# include/partition_alter1.inc #
+# inc/partition_alter1.inc #
# #
# Attention: The routine include/partition_alter_11.inc is very similar #
# to this one. So if something has to be changed here it #
# might be necessary to do it also there #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-03-05 #
# Change Author: #
# Change Date: #
@@ -56,7 +56,6 @@ $unique
)
$partitioning;
--source suite/parts/inc/partition_alter_1.inc
-# --source include/partition_alter_1.inc
#----------- PARTITION BY KEY
if ($with_partitioning)
@@ -69,7 +68,6 @@ $unique
)
$partitioning;
--source suite/parts/inc/partition_alter_1.inc
-# --source include/partition_alter_1.inc
#----------- PARTITION BY LIST
if ($with_partitioning)
@@ -90,7 +88,6 @@ $unique
)
$partitioning;
--source suite/parts/inc/partition_alter_1.inc
-# --source include/partition_alter_1.inc
#----------- PARTITION BY RANGE
if ($with_partitioning)
@@ -112,7 +109,6 @@ $unique
)
$partitioning;
--source suite/parts/inc/partition_alter_1.inc
-# --source include/partition_alter_1.inc
#----------- PARTITION BY RANGE -- SUBPARTITION BY HASH
if ($with_partitioning)
@@ -133,7 +129,6 @@ $unique
)
$partitioning;
--source suite/parts/inc/partition_alter_1.inc
-# --source include/partition_alter_1.inc
#----------- PARTITION BY RANGE -- SUBPARTITION BY KEY
if ($with_partitioning)
@@ -157,7 +152,6 @@ $unique
)
$partitioning;
--source suite/parts/inc/partition_alter_1.inc
-# --source include/partition_alter_1.inc
#----------- PARTITION BY LIST -- SUBPARTITION BY HASH
if ($with_partitioning)
@@ -178,7 +172,6 @@ $unique
)
$partitioning;
--source suite/parts/inc/partition_alter_1.inc
-# --source include/partition_alter_1.inc
#----------- PARTITION BY LIST -- SUBPARTITION BY KEY
if ($with_partitioning)
@@ -199,4 +192,3 @@ $unique
)
$partitioning;
--source suite/parts/inc/partition_alter_1.inc
-# --source include/partition_alter_1.inc
diff --git a/mysql-test/suite/parts/inc/partition_alter_41.inc b/mysql-test/suite/parts/inc/partition_alter_41.inc
index 303ec8c2062..53469c08a19 100644
--- a/mysql-test/suite/parts/inc/partition_alter_41.inc
+++ b/mysql-test/suite/parts/inc/partition_alter_41.inc
@@ -1,5 +1,5 @@
################################################################################
-# include/partition_alter_11.inc #
+# inc/partition_alter_11.inc #
# #
# Purpose: #
# Check ALTER partitioned table and the state of the table afterwards #
@@ -10,11 +10,11 @@
# PARTITION BY RANGE/LIST ... SUBPARTITION BY HASH/KEY ... #
# do #
# 1. Create the partitioned table #
-# 2. Execute include/partition_alter_1.inc, which will #
+# 2. Execute inc/partition_alter_1.inc, which will #
# - Insert the first half of the table t0_template into t1 #
# - Execute the ALTER TABLE statement #
# - Insert the second half of the table t0_template into t1 #
-# - Execute the usability test include/partition_check.inc #
+# - Execute the usability test inc/partition_check.inc #
# - Drop the table t1 #
# done #
# #
@@ -26,14 +26,14 @@
# Example: #
# let $unique= , UNIQUE INDEX uidx1 (f_int1); #
# let $alter= ALTER TABLE t1 DROP UNIQUE INDEX uidx1; #
-# include/partition_alter1.inc #
+# inc/partition_alter1.inc #
# #
-# Attention: The routine include/partition_alter_13.inc is very similar #
+# Attention: The routine inc/partition_alter_13.inc is very similar #
# to this one. So if something has to be changed here it #
# might be necessary to do it also there #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-03-05 #
# Change Author: #
# Change Date: #
@@ -56,7 +56,6 @@ $unique
)
$partitioning;
--source suite/parts/inc/partition_alter_1.inc
-# --source include/partition_alter_1.inc
#----------- PARTITION BY KEY
if ($with_partitioning)
@@ -69,7 +68,6 @@ $unique
)
$partitioning;
--source suite/parts/inc/partition_alter_1.inc
-# --source include/partition_alter_1.inc
#----------- PARTITION BY LIST
if ($with_partitioning)
@@ -90,7 +88,6 @@ $unique
)
$partitioning;
--source suite/parts/inc/partition_alter_1.inc
-# --source include/partition_alter_1.inc
#----------- PARTITION BY RANGE
if ($with_partitioning)
@@ -112,7 +109,6 @@ $unique
)
$partitioning;
--source suite/parts/inc/partition_alter_1.inc
-# --source include/partition_alter_1.inc
#----------- PARTITION BY RANGE -- SUBPARTITION BY HASH
if ($with_partitioning)
@@ -133,7 +129,6 @@ $unique
)
$partitioning;
--source suite/parts/inc/partition_alter_1.inc
-# --source include/partition_alter_1.inc
#----------- PARTITION BY RANGE -- SUBPARTITION BY KEY
if ($with_partitioning)
@@ -157,7 +152,6 @@ $unique
)
$partitioning;
--source suite/parts/inc/partition_alter_1.inc
-# --source include/partition_alter_1.inc
#----------- PARTITION BY LIST -- SUBPARTITION BY HASH
if ($with_partitioning)
@@ -178,7 +172,6 @@ $unique
)
$partitioning;
--source suite/parts/inc/partition_alter_1.inc
-# --source include/partition_alter_1.inc
#----------- PARTITION BY LIST -- SUBPARTITION BY KEY
if ($with_partitioning)
@@ -199,4 +192,3 @@ $unique
)
$partitioning;
--source suite/parts/inc/partition_alter_1.inc
-# --source include/partition_alter_1.inc
diff --git a/mysql-test/suite/parts/inc/partition_basic.inc b/mysql-test/suite/parts/inc/partition_basic.inc
index 9854edab634..a5815d3b71c 100644
--- a/mysql-test/suite/parts/inc/partition_basic.inc
+++ b/mysql-test/suite/parts/inc/partition_basic.inc
@@ -1,12 +1,12 @@
################################################################################
-# include/partition_basic.inc #
+# inc/partition_basic.inc #
# #
# Purpose: #
# Basic tests around create partitioned table with/without PRIMARY KEY and #
# /or UNIQUE INDEX #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-03-05 #
# Change Author: #
# Change Date: #
@@ -29,7 +29,6 @@
--echo # 1.1 The partitioning function contains one column.
let $unique= ;
--source suite/parts/inc/partition_methods1.inc
-# --source include/partition_methods1.inc
#
--echo # 1.1.1 with DATA DIECTORY/INDEX DIRECTORY
#
@@ -50,16 +49,13 @@ let $unique= ;
let $with_directories= 1;
--source suite/parts/inc/partition_methods1.inc
- # --source include/partition_methods1.inc
--source suite/parts/inc/partition_directory.inc
- # --source include/partition_methods1.inc
let $with_directories= 0;
--enable_query_log
#
--echo # 1.2 The partitioning function contains two columns.
let $unique= ;
--source suite/parts/inc/partition_methods2.inc
-# --source include/partition_methods2.inc
#
--echo #------------------------------------------------------------------------
--echo # 2 Tables with PRIMARY KEY and/or UNIQUE INDEXes
@@ -72,12 +68,10 @@ if ($more_pk_ui_tests)
--echo # 2.1 PRIMARY KEY consisting of one column
let $unique= , PRIMARY KEY(f_int1);
--source suite/parts/inc/partition_methods1.inc
- # --source include/partition_methods1.inc
}
--echo # 2.2 UNIQUE INDEX consisting of one column
let $unique= , UNIQUE INDEX uidx1 (f_int1);
--source suite/parts/inc/partition_methods1.inc
- # --source include/partition_methods1.inc
--echo # 2.2.1 with DATA DIECTORY/INDEX DIRECTORY
#
@@ -98,7 +92,6 @@ if ($more_pk_ui_tests)
let $with_directories= TRUE;
--source suite/parts/inc/partition_methods1.inc
- # --source include/partition_methods1.inc
let $with_directories= FALSE;
--enable_query_log
#
@@ -107,19 +100,15 @@ if ($more_pk_ui_tests)
--echo # 2.3 PRIMARY KEY consisting of two columns
let $unique= , PRIMARY KEY(f_int1,f_int2);
--source suite/parts/inc/partition_methods1.inc
- # --source include/partition_methods1.inc
let $unique= , PRIMARY KEY(f_int2,f_int1);
--source suite/parts/inc/partition_methods1.inc
- # --source include/partition_methods1.inc
}
#
--echo # 2.4 UNIQUE INDEX consisting of two columns
let $unique= , UNIQUE INDEX uidx1 (f_int1,f_int2);
--source suite/parts/inc/partition_methods1.inc
- # --source include/partition_methods1.inc
let $unique= , UNIQUE INDEX uidx1 (f_int2,f_int1);
--source suite/parts/inc/partition_methods1.inc
- # --source include/partition_methods1.inc
#
}
--echo # 2.5 PRIMARY KEY + UNIQUE INDEX consisting of two columns
@@ -127,14 +116,11 @@ if ($do_pk_tests)
{
let $unique= , UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1);
--source suite/parts/inc/partition_methods1.inc
- # --source include/partition_methods1.inc
let $unique= , UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2);
--source suite/parts/inc/partition_methods1.inc
- # --source include/partition_methods1.inc
}
let $unique= , UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1);
--source suite/parts/inc/partition_methods1.inc
-# --source include/partition_methods1.inc
--echo #------------------------------------------------------------------------
--echo # 3 Tables with PRIMARY KEY and/or UNIQUE INDEXes
@@ -148,20 +134,16 @@ if ($more_pk_ui_tests)
--echo # 3.1 PRIMARY KEY consisting of two columns
let $unique= , PRIMARY KEY(f_int1,f_int2);
--source suite/parts/inc/partition_methods2.inc
- # --source include/partition_methods2.inc
let $unique= , PRIMARY KEY(f_int2,f_int1);
--source suite/parts/inc/partition_methods2.inc
- # --source include/partition_methods2.inc
}
#
--echo # 3.2 UNIQUE INDEX consisting of two columns
let $unique= , UNIQUE INDEX uidx1 (f_int1,f_int2);
--source suite/parts/inc/partition_methods2.inc
- # --source include/partition_methods2.inc
let $unique= , UNIQUE INDEX uidx1 (f_int2,f_int1);
--source suite/parts/inc/partition_methods2.inc
- # --source include/partition_methods2.inc
}
#
--echo # 3.3 PRIMARY KEY and UNIQUE INDEX consisting of two columns
@@ -169,11 +151,8 @@ if ($do_pk_tests)
{
let $unique= , UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1);
--source suite/parts/inc/partition_methods2.inc
- # --source include/partition_methods2.inc
let $unique= , UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2);
--source suite/parts/inc/partition_methods2.inc
- # --source include/partition_methods2.inc
}
let $unique= , UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1);
--source suite/parts/inc/partition_methods2.inc
-# --source include/partition_methods2.inc
diff --git a/mysql-test/suite/parts/inc/partition_binary.inc b/mysql-test/suite/parts/inc/partition_binary.inc
index 7243d6c2ce7..3ee363927c4 100644
--- a/mysql-test/suite/parts/inc/partition_binary.inc
+++ b/mysql-test/suite/parts/inc/partition_binary.inc
@@ -1,3 +1,5 @@
+--echo ---- Partitioning and binary data type
+
--disable_query_log
# DATA DIRECTORY
eval SET @data_dir = 'DATA DIRECTORY =
@@ -43,6 +45,9 @@ select count(*) from t2;
select hex(a) from t2;
drop table t2;
+# mleich: Several partitioning functions are no more allowed.
+if (0)
+{
eval create table t3 (a binary(255) not null, primary key(a)) engine=$engine
partition by range (ascii(a)) subpartition by key (a) subpartitions 4 (
partition pa16 values less than (16),
@@ -66,6 +71,7 @@ select count(*) from t3;
select hex(a) from t3;
drop table t3;
+
eval create table t4 (a binary(255) not null, primary key(a)) engine=$engine
partition by list (ascii(a)) subpartition by key (a) subpartitions 4 (
partition pa16 values in (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16),
@@ -86,6 +92,9 @@ eval insert into t4 values (repeat(char(ascii('a')+$letter),$count+54));
dec $count;
inc $letter;
}
+
select count(*) from t4;
select hex(a) from t4;
drop table t4;
+}
+# End of tests with disallowed partitioning functions.
diff --git a/mysql-test/suite/parts/inc/partition_bit.inc b/mysql-test/suite/parts/inc/partition_bit.inc
index 3dd880595a3..6fcf3b208bb 100644
--- a/mysql-test/suite/parts/inc/partition_bit.inc
+++ b/mysql-test/suite/parts/inc/partition_bit.inc
@@ -14,7 +14,7 @@ let $index_directory = `select @indx_dir`;
drop table if exists t1;
--enable_warnings
---error 1439
+--error ER_TOO_BIG_DISPLAYWIDTH
eval create table t1 (a bit(65), primary key (a)) engine=$engine partition by key (a);
eval create table t1 (a bit(0), primary key (a)) engine=$engine partition by key (a);
diff --git a/mysql-test/suite/parts/inc/partition_blob.inc b/mysql-test/suite/parts/inc/partition_blob.inc
index ccff06ba633..b22693c9f3d 100644
--- a/mysql-test/suite/parts/inc/partition_blob.inc
+++ b/mysql-test/suite/parts/inc/partition_blob.inc
@@ -1,3 +1,5 @@
+--echo ---- Partitioning and blob data type
+
--disable_query_log
# DATA DIRECTORY
eval SET @data_dir = 'DATA DIRECTORY =
diff --git a/mysql-test/suite/parts/inc/partition_char.inc b/mysql-test/suite/parts/inc/partition_char.inc
index 4e330b122e3..b3d7ae3c2a1 100644
--- a/mysql-test/suite/parts/inc/partition_char.inc
+++ b/mysql-test/suite/parts/inc/partition_char.inc
@@ -1,3 +1,5 @@
+--echo ---- Partitioning and char data type
+
--disable_query_log
# DATA DIRECTORY
eval SET @data_dir = 'DATA DIRECTORY =
@@ -42,6 +44,7 @@ select count(*) from t2;
select * from t2;
drop table t2;
+# mleich: Several partitioning functions are no more allowed.
if (0)
{
eval create table t3 (a char(255) not null, primary key(a)) engine=$engine
@@ -91,5 +94,4 @@ select count(*) from t4;
select a from t4;
drop table t4;
}
-#if (0)
-
+# End of tests with disallowed partitioning functions.
diff --git a/mysql-test/suite/parts/inc/partition_check.inc b/mysql-test/suite/parts/inc/partition_check.inc
index 6f03ed58241..19d548cc8ef 100644
--- a/mysql-test/suite/parts/inc/partition_check.inc
+++ b/mysql-test/suite/parts/inc/partition_check.inc
@@ -1,5 +1,5 @@
################################################################################
-# include/partition_check.inc #
+# inc/partition_check.inc #
# #
# Purpose: #
# Do some basic usability checks on table t1. #
@@ -27,7 +27,7 @@
# Records can be deleted or inserted, but the content of the #
# records after a test/testsequence should follow this scheme. #
# #
-# All checks of preceeding statements via Select are so written, #
+# All checks of preceding statements via Select are so written, #
# that they deliver a #
# # check <n> success: 1 #
# when everything is like expected. #
@@ -35,18 +35,21 @@
# This is useful for cleanups. #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
-# Original Date: 2006-03-05 #
-# Change Author: #
-# Change Date: #
-# Change: #
+# Original Author: mleich #
+# Original Date: 2006-03-05 #
+# Change Author: mleich #
+# Change Date: 2007-10-08 #
+# Change: Around fix for #
+# Bug#31243 Test "partition_basic_myisam" truncates path names#
+# Adjustments of expected error codes: #
+# ER_NO_PARTITION_FOR_GIVEN_VALUE is now 1525 #
+# ER_SAME_NAME_PARTITION is now 1516 #
################################################################################
---echo # Start usability test (include/partition_check.inc)
+--echo # Start usability test (inc/partition_check.inc)
# Print the CREATE TABLE STATEMENT and store the current layout of the table
--source suite/parts/inc/partition_layout_check1.inc
-# --source include/partition_layout_check1.inc
#-------------------------------------------------------------------------------
@@ -156,8 +159,7 @@ if ($run)
# partitioning mechanism.
# Sideeffect: Attempt to INSERT one record
# DUPLICATE KEY will appear if we have UNIQUE columns
-# 1022: ER_DUP_KEY
-# 1062: ER_DUP_ENTRY
+# ER_DUP_KEY, ER_DUP_ENTRY
--disable_abort_on_error
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
SELECT f_int1, f_int1, CAST(f_int1 AS CHAR),
@@ -170,14 +172,13 @@ if ($no_debug)
}
eval SET @my_errno = $mysql_errno;
let $run_delete= `SELECT @my_errno = 0`;
-let $any_unique= `SELECT @my_errno IN (1022,1062)`;
-let $unexpected_error= `SELECT @my_errno NOT IN (0,1022,1062)`;
+let $any_unique= `SELECT @my_errno IN ($ER_DUP_KEY,$ER_DUP_ENTRY)`;
# DEBUG eval SELECT $run_delete AS run_delete, $any_unique AS any_unique,
-# $unexpected_error AS unexpected_error;
-if ($unexpected_error)
+# @my_errno AS sql_errno;
+if (`SELECT @my_errno NOT IN (0,$ER_DUP_KEY,$ER_DUP_ENTRY)`)
{
--echo # The last command got an unexepected error response.
- --echo # Expected/handled SQL codes are 0,1022,1062
+ --echo # Expected/handled SQL codes are 0,$ER_DUP_KEY,$ER_DUP_ENTRY
SELECT '# SQL code we got was: ' AS "", @my_errno AS "";
--echo # Sorry, have to abort.
exit;
@@ -200,8 +201,7 @@ if ($any_unique)
## 1.3.1 Check, if f_int1 is UNIQUE
# Sideeffect: Attempt to INSERT one record
# DUPLICATE KEY will appear if we have UNIQUE columns
- # 1022: ER_DUP_KEY
- # 1062: ER_DUP_ENTRY
+ # ER_DUP_KEY, ER_DUP_ENTRY
--disable_abort_on_error
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
SELECT f_int1, 2 * @max_row + f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
@@ -214,14 +214,13 @@ if ($any_unique)
}
eval SET @my_errno = $mysql_errno;
let $run_delete= `SELECT @my_errno = 0`;
- let $f_int1_is_unique= `SELECT @my_errno IN (1022,1062)`;
- let $unexpected_error= `SELECT @my_errno NOT IN (0,1022,1062)`;
+ let $f_int1_is_unique= `SELECT @my_errno IN ($ER_DUP_KEY,$ER_DUP_ENTRY)`;
# DEBUG eval SELECT $run_delete AS run_delete, $f_int1_is_unique AS any_unique,
- # $unexpected_error AS unexpected_error;
- if ($unexpected_error)
+ # @my_errno AS sql_errno;
+ if (`SELECT @my_errno NOT IN (0,$ER_DUP_KEY,$ER_DUP_ENTRY)`)
{
--echo # The last command got an unexepected error response.
- --echo # Expected/handled SQL codes are 0,1022,1062
+ --echo # Expected/handled SQL codes are 0,$ER_DUP_KEY,$ER_DUP_ENTRY
SELECT '# SQL code we got was: ' AS "", @my_errno AS "";
--echo # Sorry, have to abort.
exit;
@@ -238,7 +237,7 @@ if ($any_unique)
DELETE FROM t1 WHERE f_charbig = 'delete me';
}
- ## 1.3.2 Check, if f_int2 is UNIQUE
+ ## 1.3.2 Check, if f_int2 is UNIQUE (get ER_DUP_KEY or ER_DUP_ENTRY
--disable_abort_on_error
INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig)
SELECT 2 * @max_row + f_int1, f_int1, CAST((2 * @max_row + f_int1) AS CHAR),
@@ -251,14 +250,13 @@ if ($any_unique)
}
eval SET @my_errno = $mysql_errno;
let $run_delete= `SELECT @my_errno = 0`;
- let $f_int1_is_unique= `SELECT @my_errno IN (1022,1062)`;
- let $unexpected_error= `SELECT @my_errno NOT IN (0,1022,1062)`;
+ let $f_int1_is_unique= `SELECT @my_errno IN ($ER_DUP_KEY,$ER_DUP_ENTRY)`;
# DEBUG eval SELECT $run_delete AS run_delete, $f_int1_is_unique AS any_unique,
- # $unexpected_error AS unexpected_error;
- if ($unexpected_error)
+ # @my_errno AS sql_errno;
+ if (`SELECT @my_errno NOT IN (0,$ER_DUP_KEY,$ER_DUP_ENTRY)`)
{
--echo # The last command got an unexepected error response.
- --echo # Expected/handled SQL codes are 0,1022,1062
+ --echo # Expected/handled SQL codes are 0,$ER_DUP_KEY,$ER_DUP_ENTRY
SELECT '# SQL code we got was: ' AS "", @my_errno AS "";
--echo # Sorry, have to abort.
exit;
@@ -285,14 +283,11 @@ if ($any_unique)
# per f_int1 used in partitioning function
let $col_to_check= f_int1;
--source suite/parts/inc/partition_check_read.inc
-# --source include/partition_check_read.inc
## 2.2 Read all existing and some not existing records of table
# per f_int2 used in partitioning function
let $col_to_check= f_int2;
--source suite/parts/inc/partition_check_read.inc
-if ($fixed_bug18735)
-{
#-------------------------------------------------------------------------------
# 3 Some operations with multiple records
@@ -317,7 +312,7 @@ SELECT '# check multiple-2 success: ' AS "",COUNT(*) = @max_row - @max_row_div3
# (Insert the records deleted in 3.2)
INSERT INTO t1 SELECT * FROM t0_template
WHERE MOD(f_int1,3) = 0;
-# Check of preceeding statement via Select
+# Check of preceding statement via Select
if ($no_debug)
{
--disable_query_log
@@ -333,7 +328,7 @@ FROM t1;
UPDATE t1 SET f_int1 = f_int1 + @max_row
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4
AND @max_row_div2 + @max_row_div4;
-# Check of preceeding statement via Select
+# Check of preceding statement via Select
if ($no_debug)
{
--disable_query_log
@@ -348,7 +343,7 @@ SELECT '# check multiple-4 success: ' AS "",(COUNT(*) = @max_row) AND (MIN(f_int
DELETE FROM t1
WHERE f_int1 BETWEEN @max_row_div2 - @max_row_div4 + @max_row
AND @max_row_div2 + @max_row_div4 + @max_row;
-# Check of preceeding statement via Select
+# Check of preceding statement via Select
if ($no_debug)
{
--disable_query_log
@@ -401,7 +396,7 @@ INSERT INTO t1
SET f_int1 = @cur_value , f_int2 = @cur_value,
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
f_charbig = '#SINGLE#';
-# Check of preceeding statement via Select
+# Check of preceding statement via Select
if ($no_debug)
{
--disable_query_log
@@ -419,7 +414,7 @@ INSERT INTO t1
SET f_int1 = @cur_value , f_int2 = @cur_value,
f_char1 = CAST(@cur_value AS CHAR), f_char2 = CAST(@cur_value AS CHAR),
f_charbig = '#SINGLE#';
-# Check of preceeding statement via Select
+# Check of preceding statement via Select
if ($no_debug)
{
--disable_query_log
@@ -439,7 +434,7 @@ SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1;
# Bug#18735: Partitions: NDB, UNIQUE INDEX, UPDATE, strange server response
UPDATE t1 SET f_int1 = @cur_value2
WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
-# Check of preceeding statement via Select
+# Check of preceding statement via Select
if ($no_debug)
{
--disable_query_log
@@ -460,7 +455,7 @@ SELECT MAX(f_int1) INTO @cur_value2 FROM t1;
# Bug#18735: Partitions: NDB, UNIQUE INDEX, UPDATE, strange server response
UPDATE t1 SET f_int1 = @cur_value1
WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#';
-# Check of preceeding statement via Select
+# Check of preceding statement via Select
if ($no_debug)
{
--disable_query_log
@@ -472,7 +467,7 @@ WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#';
# 4.5 Delete the record with the highest value of f_int1.
SELECT MAX(f_int1) INTO @cur_value FROM t1;
DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#';
-# Check of preceeding statements via Select
+# Check of preceding statements via Select
if ($no_debug)
{
--disable_query_log
@@ -483,7 +478,7 @@ WHERE f_charbig = '#SINGLE#' AND f_int1 = f_int1 = @cur_value;
#
# 4.6 Delete the record with f_int1 = -1
DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#';
-# Check of preceeding statements via Select
+# Check of preceding statements via Select
if ($no_debug)
{
--disable_query_log
@@ -495,9 +490,9 @@ WHERE f_charbig = '#SINGLE#' AND f_int1 IN (-1,@cur_value);
# 4.7 Insert one record with such a big value for f_int1, so that in case
# - f_int1 is used within the partitioning algorithm
# - we use range partitioning
-# we get error ER_NO_PARTITION_FOR_GIVEN_VALUE (1523)
+# we get error ER_NO_PARTITION_FOR_GIVEN_VALUE
# "Table has no partition for value ...."
-# or ER_SAME_NAME_PARTITION (1514)
+# or ER_SAME_NAME_PARTITION
--disable_abort_on_error
eval INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#$max_int_4##';
--enable_abort_on_error
@@ -506,17 +501,16 @@ if ($no_debug)
--disable_query_log
}
eval SET @my_errno = $mysql_errno;
-let $unexpected_error= `SELECT @my_errno NOT IN (0,1514,1523)`;
-if ($unexpected_error)
+if (`SELECT @my_errno NOT IN (0,$ER_SAME_NAME_PARTITION,$ER_NO_PARTITION_FOR_GIVEN_VALUE)`)
{
--echo # The last command got an unexepected error response.
- --echo # Expected/handled SQL codes are 0,1514,1523
+ --echo # Expected/handled SQL codes are 0,$ER_SAME_NAME_PARTITION,$ER_NO_PARTITION_FOR_GIVEN_VALUE
SELECT '# SQL code we got was: ' AS "", @my_errno AS "";
--echo # Sorry, have to abort.
exit;
--echo
}
-# Check of preceeding statement via Select, if the INSERT was successful
+# Check of preceding statement via Select, if the INSERT was successful
let $run= `SELECT @my_errno = 0`;
if ($run)
{
@@ -534,8 +528,6 @@ eval DELETE FROM t1 WHERE f_charbig = '#$max_int_4##';
}
--enable_query_log
-}
-# End workaround for Bug#18735
#-------------------------------------------------------------------------------
# 5 Experiments with NULL
@@ -558,14 +550,13 @@ INSERT t1 SET f_int1 = 0 , f_int2 = 0,
# mechanism if the result of the expression in the partitioning algorithm
# becomes NULL.
# This INSERT will fail, if f_int1 is PRIMARY KEY or UNIQUE INDEX
-# 1048: ER_BAD_NULL_ERROR
+# with ER_BAD_NULL_ERROR.
--disable_abort_on_error
-
INSERT INTO t1
SET f_int1 = NULL , f_int2 = -@max_row,
f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR),
f_charbig = '#NULL#';
-# Some other NULL experiments if preceeding INSERT was successfull
+# Some other NULL experiments if preceding INSERT was successfull
--enable_abort_on_error
if ($no_debug)
{
@@ -573,13 +564,13 @@ if ($no_debug)
}
eval SET @my_errno = $mysql_errno;
let $run= `SELECT @my_errno = 0`;
-let $unexpected_error= `SELECT @my_errno NOT IN (0,1048)`;
-if ($unexpected_error)
+if (`SELECT @my_errno NOT IN (0,$ER_BAD_NULL_ERROR)`)
{
--echo # The last command got an unexepected error response.
- --echo # Expected/handled SQL codes are 0,1048
+ --echo # Expected/handled SQL codes are 0,$ER_BAD_NULL_ERROR
SELECT '# SQL code we got was: ' AS "", @my_errno AS "";
--echo # Sorry, have to abort.
+ --echo # Please check the error name to number mapping in inc/partition.pre.
exit;
--echo
}
@@ -589,7 +580,7 @@ if ($unexpected_error)
# The following checks do not make sense if f_int1 cannot be NULL
if ($run)
{
-# Check of preceeding statement via Select
+# Check of preceding statement via Select
if ($no_debug)
{
--disable_query_log
@@ -608,7 +599,7 @@ if ($no_debug)
{
--disable_query_log
}
-# Check of preceeding statement via Select
+# Check of preceding statement via Select
SELECT '# check null-2 success: ' AS "",COUNT(*) = 1 AS "" FROM t1
WHERE f_int1 = -@max_row AND f_charbig = '#NULL#';
--enable_query_log
@@ -620,7 +611,7 @@ if ($no_debug)
{
--disable_query_log
}
-# Check of preceeding statement via Select
+# Check of preceding statement via Select
SELECT '# check null-3 success: ' AS "",COUNT(*) = 1 AS "" FROM t1
WHERE f_int1 IS NULL AND f_charbig = '#NULL#';
--enable_query_log
@@ -628,7 +619,7 @@ WHERE f_int1 IS NULL AND f_charbig = '#NULL#';
DELETE FROM t1
WHERE f_int1 IS NULL AND f_int2 = -@max_row AND f_char1 = CAST(-@max_row AS CHAR)
AND f_char2 = CAST(-@max_row AS CHAR) AND f_charbig = '#NULL#';
-# Check of preceeding statement via Select
+# Check of preceding statement via Select
if ($no_debug)
{
--disable_query_log
@@ -693,7 +684,6 @@ if ($any_unique)
UPDATE f_int1 = 2 * @max_row + source_tab.f_int1,
f_charbig = 'was updated';
--source suite/parts/inc/partition_20.inc
- # --source include/partition_20.inc
}
if ($f_int2_is_unique)
@@ -709,7 +699,6 @@ if ($any_unique)
UPDATE f_int2 = 2 * @max_row + source_tab.f_int1,
f_charbig = 'was updated';
--source suite/parts/inc/partition_20.inc
- # --source include/partition_20.inc
}
## 6.3 f_int1, f_int2 is UNIQUE, UPDATE f_int1, f_int2 when DUPLICATE KEY
@@ -723,7 +712,6 @@ if ($any_unique)
f_int2 = 2 * @max_row + source_tab.f_int1,
f_charbig = 'was updated';
--source suite/parts/inc/partition_20.inc
- # --source include/partition_20.inc
## 6.4 REPLACE
# Bug#16782: Partitions: crash, REPLACE .. on table with PK, DUPLICATE KEY
@@ -732,7 +720,7 @@ if ($any_unique)
FROM t0_template source_tab
WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row;
# DEBUG SELECT * FROM t1 ORDER BY f_int1, f_int2;
- # Check of preceeding statement via Select
+ # Check of preceding statement via Select
if ($no_debug)
{
--disable_query_log
@@ -759,10 +747,6 @@ if ($any_unique)
# DEBUG SELECT * FROM t1 ORDER BY f_int1, f_int2;
}
-if ($fixed_bug18735)
-{
- # The following tests work cannot like intended, if we had to omit
- # tests because of Bug#18735
#-------------------------------------------------------------------------------
# 7 Transactions
@@ -939,14 +923,12 @@ if ($debug)
SELECT * FROM t1 ORDER BY f_int1;
}
-}
-# End workaround for Bug#18735
#-------------------------------------------------------------------------------
# 8 Some special cases
# 8.1 Dramatic increase of the record/partition/subpartition/table sizes
UPDATE t1 SET f_charbig = REPEAT('b', 1000);
-# partial check of preceeding statement via Select
+# partial check of preceding statement via Select
if ($no_debug)
{
--disable_query_log
@@ -957,7 +939,7 @@ WHERE f_int1 = 1 AND f_charbig = REPEAT('b', 1000);
#
# 8.2 Dramatic decrease of the record/partition/subpartition/table sizes
UPDATE t1 SET f_charbig = '';
-# partial check of preceeding statement via Select
+# partial check of preceding statement via Select
if ($no_debug)
{
--disable_query_log
@@ -973,8 +955,7 @@ if ($debug)
SELECT * FROM t1 ORDER BY f_int1;
}
-if ($fixed_bug18735)
-{
+
#-------------------------------------------------------------------------------
# 9 TRIGGERs
let $num= 1;
@@ -994,28 +975,22 @@ SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
let $event= BEFORE INSERT;
--source suite/parts/inc/partition_trigg1.inc
-# --source include/partition_trigg1.inc
let $event= AFTER INSERT;
--source suite/parts/inc/partition_trigg1.inc
-# --source include/partition_trigg1.inc
let $statement= UPDATE t0_aux SET f_int1 = - f_int1, f_int2 = - f_int2
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
let $event= BEFORE UPDATE;
--source suite/parts/inc/partition_trigg1.inc
-# --source include/partition_trigg1.inc
let $event= AFTER UPDATE;
--source suite/parts/inc/partition_trigg1.inc
-# --source include/partition_trigg1.inc
let $statement= DELETE FROM t0_aux
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
let $event= BEFORE DELETE;
--source suite/parts/inc/partition_trigg1.inc
-# --source include/partition_trigg1.inc
let $event= AFTER DELETE;
--source suite/parts/inc/partition_trigg1.inc
-# --source include/partition_trigg1.inc
# Cleanup
eval DELETE FROM $tab_in_trigg
@@ -1048,28 +1023,22 @@ SELECT f_int1,f_int2,f_char1,f_char2,NULL FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
let $event= BEFORE INSERT;
--source suite/parts/inc/partition_trigg1.inc
-# --source include/partition_trigg1.inc
let $event= AFTER INSERT;
--source suite/parts/inc/partition_trigg1.inc
-# --source include/partition_trigg1.inc
let $statement= UPDATE t1 SET f_int1 = - f_int1, f_int2 = - f_int2
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
let $event= BEFORE UPDATE;
--source suite/parts/inc/partition_trigg1.inc
-# --source include/partition_trigg1.inc
let $event= AFTER UPDATE;
--source suite/parts/inc/partition_trigg1.inc
-# --source include/partition_trigg1.inc
let $statement= DELETE FROM t1
WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1));
let $event= BEFORE DELETE;
--source suite/parts/inc/partition_trigg1.inc
-# --source include/partition_trigg1.inc
let $event= AFTER DELETE;
--source suite/parts/inc/partition_trigg1.inc
-# --source include/partition_trigg1.inc
eval DELETE FROM $tab_in_trigg
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
}
@@ -1091,7 +1060,6 @@ SET f_charbig = '####updated per update statement itself####';
let $source= old;
let $event= BEFORE UPDATE;
--source suite/parts/inc/partition_trigg2.inc
-# --source include/partition_trigg2.inc
# FIXME when AFTER TRIGGER can be used
# Currently (2006-02-23) a AFTER TRIGGER is not allowed to modify a row, which
# was just modified: 1362: Updating of NEW row is not allowed in after trigger
@@ -1107,7 +1075,6 @@ f_charbig = '####updated per update statement itself####';
let $source= old;
let $event= BEFORE UPDATE;
--source suite/parts/inc/partition_trigg2.inc
-# --source include/partition_trigg2.inc
# FIXME when AFTER TRIGGER can be used
# Currently (2006-02-23) a AFTER TRIGGER is not allowed to modify a row, which
# was just modified: 1362: Updating of NEW row is not allowed in after trigger
@@ -1115,7 +1082,6 @@ let $event= BEFORE UPDATE;
let $source= new;
let $event= BEFORE UPDATE;
--source suite/parts/inc/partition_trigg2.inc
-# --source include/partition_trigg2.inc
# FIXME when AFTER TRIGGER can be used
if ($debug)
@@ -1134,7 +1100,6 @@ ORDER BY f_int1;
let $event= BEFORE INSERT;
let $source= new;
--source suite/parts/inc/partition_trigg3.inc
-# --source include/partition_trigg3.inc
# FIXME when AFTER TRIGGER can be used
# 9.4.2 INSERT assigns no values to the recalculate columns
@@ -1146,7 +1111,6 @@ ORDER BY f_int1;
let $event= BEFORE INSERT;
let $source= new;
--source suite/parts/inc/partition_trigg3.inc
-# --source include/partition_trigg3.inc
# FIXME when AFTER TRIGGER can be used
if ($debug)
@@ -1154,8 +1118,6 @@ if ($debug)
SELECT * FROM t1 ORDER BY f_int1;
}
-}
-# End workaround for Bug#18735
#-------------------------------------------------------------------------------
# 10 ANALYZE/CHECK/CHECKSUM
@@ -1177,17 +1139,15 @@ CHECKSUM TABLE t1 EXTENDED;
# FIXME What will happen with NDB ?
OPTIMIZE TABLE t1;
--source suite/parts/inc/partition_layout_check2.inc
-# --source include/partition_layout_check2.inc
# 10.2 REPAIR TABLE
REPAIR TABLE t1 EXTENDED;
--source suite/parts/inc/partition_layout_check2.inc
-# --source include/partition_layout_check2.inc
#
# 11.3 Truncate
# Manual about TRUNCATE on tables ( != InnoDB table with FOREIGN KEY ):
# Truncate operations drop and re-create the table ....
TRUNCATE t1;
-# Check of preceeding statement via Select
+# Check of preceding statement via Select
if ($no_debug)
{
--disable_query_log
@@ -1195,6 +1155,5 @@ if ($no_debug)
SELECT '# check TRUNCATE success: ' AS "",COUNT(*) = 0 AS "" FROM t1;
--enable_query_log
--source suite/parts/inc/partition_layout_check2.inc
-# --source include/partition_layout_check2.inc
---echo # End usability test (include/partition_check.inc)
+--echo # End usability test (inc/partition_check.inc)
diff --git a/mysql-test/suite/parts/inc/partition_check_drop.inc b/mysql-test/suite/parts/inc/partition_check_drop.inc
index 825ebecba24..88ebdb7ad48 100644
--- a/mysql-test/suite/parts/inc/partition_check_drop.inc
+++ b/mysql-test/suite/parts/inc/partition_check_drop.inc
@@ -1,5 +1,5 @@
################################################################################
-# include/partition_check_drop.inc #
+# inc/partition_check_drop.inc #
# #
# Purpose: #
# Check that a drop table removes all files belonging to this table. #
@@ -9,7 +9,7 @@
# This routine is only useful for the partition_<feature>_<engine> tests. #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-05-12 #
# Change Author: #
# Change Date: #
@@ -52,7 +52,7 @@ if ($found_garbage)
if ($ls)
{
--echo # Attention: There are unused files.
- --echo # Either the DROP TABLE or a preceeding ALTER TABLE
+ --echo # Either the DROP TABLE or a preceding ALTER TABLE
--echo # <alter partitioning> worked incomplete.
--echo # We found:
# Print the list of files into the protocol
diff --git a/mysql-test/suite/parts/inc/partition_check_read.inc b/mysql-test/suite/parts/inc/partition_check_read.inc
index 14bbd46ac7f..e42bb9c90ab 100644
--- a/mysql-test/suite/parts/inc/partition_check_read.inc
+++ b/mysql-test/suite/parts/inc/partition_check_read.inc
@@ -1,5 +1,5 @@
################################################################################
-# include/partition_check_read.inc #
+# inc/partition_check_read.inc #
# #
# Purpose: #
# Read table t1 row by row #
@@ -10,7 +10,7 @@
# - the table contains all expected rows #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-03-05 #
# Change Author: #
# Change Date: #
@@ -80,7 +80,7 @@ if ($no_debug)
--disable_query_log
}
--echo # check read via $col_to_check success: $success
-# ML: The following is omitted because of not reported mysqltest bug
+# mleich: The following is omitted because of not reported mysqltest bug
# (@max_row time the success message)
if (0)
{
diff --git a/mysql-test/suite/parts/inc/partition_check_read1.inc b/mysql-test/suite/parts/inc/partition_check_read1.inc
index dad5c347052..0b8b800a371 100644
--- a/mysql-test/suite/parts/inc/partition_check_read1.inc
+++ b/mysql-test/suite/parts/inc/partition_check_read1.inc
@@ -1,5 +1,5 @@
################################################################################
-# include/partition_check_read1.inc #
+# inc/partition_check_read1.inc #
# #
# Purpose: #
# Read rows from table t1 in different ways #
@@ -10,7 +10,7 @@
# must be set before sourcing this routine. #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-04-11 #
# Change Author: #
# Change Date: #
diff --git a/mysql-test/suite/parts/inc/partition_check_read2.inc b/mysql-test/suite/parts/inc/partition_check_read2.inc
index 4c32456a31e..60964355d14 100644
--- a/mysql-test/suite/parts/inc/partition_check_read2.inc
+++ b/mysql-test/suite/parts/inc/partition_check_read2.inc
@@ -1,12 +1,12 @@
################################################################################
-# include/partition_check_read2.inc #
+# inc/partition_check_read2.inc #
# #
# Purpose: #
# Read rows from table t1 in different ways #
# This routine is only useful for the partition_<feature>_<engine> tests. #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-04-11 #
# Change Author: #
# Change Date: #
diff --git a/mysql-test/suite/parts/inc/partition_cleanup.inc b/mysql-test/suite/parts/inc/partition_cleanup.inc
index dcd6005287e..34d3e435509 100644
--- a/mysql-test/suite/parts/inc/partition_cleanup.inc
+++ b/mysql-test/suite/parts/inc/partition_cleanup.inc
@@ -1,12 +1,12 @@
################################################################################
-# include/partition_cleanup.inc #
+# inc/partition_cleanup.inc #
# #
# Purpose: #
# Removal of the objects created by the t/partition_<feature>_<engine>.test #
# scripts. #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-03-05 #
# Change Author: #
# Change Date: #
diff --git a/mysql-test/suite/parts/inc/partition_directory.inc b/mysql-test/suite/parts/inc/partition_directory.inc
index 17748df4f4d..5acdf13a8f9 100644
--- a/mysql-test/suite/parts/inc/partition_directory.inc
+++ b/mysql-test/suite/parts/inc/partition_directory.inc
@@ -1,5 +1,5 @@
################################################################################
-# include/partition_rectory.inc #
+# inc/partition_directory.inc #
# #
# Purpose: #
# Create and check partitioned tables #
@@ -9,7 +9,7 @@
# do #
# 1. Create the partitioned table #
# 2 Insert the content of the table t0_template into t1 #
-# 3. Execute include/partition_check.inc #
+# 3. Execute inc/partition_check.inc #
# 4. Drop the table t1 #
# done #
#------------------------------------------------------------------------------#
@@ -49,7 +49,6 @@ $partitioning;
--enable_query_log
eval $insert_all;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
--source suite/parts/inc/partition_check_drop.inc
@@ -86,7 +85,6 @@ $partitioning;
--enable_query_log
eval $insert_all;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
--source suite/parts/inc/partition_check_drop.inc
@@ -122,7 +120,6 @@ $partitioning;
--enable_query_log
eval $insert_all;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
--source suite/parts/inc/partition_check_drop.inc
@@ -153,7 +150,6 @@ $partitioning;
--enable_query_log
eval $insert_all;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
--source suite/parts/inc/partition_check_drop.inc
@@ -181,7 +177,6 @@ $partitioning;
--enable_query_log
eval $insert_all;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
--source suite/parts/inc/partition_check_drop.inc
@@ -212,7 +207,6 @@ $partitioning;
--enable_query_log
eval $insert_all;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
--source suite/parts/inc/partition_check_drop.inc
@@ -256,7 +250,6 @@ $partitioning;
--enable_query_log
eval $insert_all;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
--source suite/parts/inc/partition_check_drop.inc
diff --git a/mysql-test/suite/parts/inc/partition_engine.inc b/mysql-test/suite/parts/inc/partition_engine.inc
index 2beb08e7626..769e3d71530 100644
--- a/mysql-test/suite/parts/inc/partition_engine.inc
+++ b/mysql-test/suite/parts/inc/partition_engine.inc
@@ -1,5 +1,5 @@
################################################################################
-# include/partition_engine.inc #
+# inc/partition_engine.inc #
# #
# Purpose: #
# Tests around Create/Alter partitioned tables and storage engine settings #
@@ -17,7 +17,7 @@
# storage engine to use. #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-03-05 #
# Change Author: #
# Change Date: #
@@ -45,7 +45,6 @@ $column_list
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
#
--echo #------------------------------------------------------------------------
@@ -62,7 +61,6 @@ PARTITION BY HASH(f_int1)
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
eval CREATE TABLE t1 (
$column_list
@@ -79,7 +77,6 @@ SUBPARTITION BY HASH(f_int1)
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
#
--echo #------------------------------------------------------------------------
@@ -96,7 +93,6 @@ PARTITION BY HASH(f_int1)
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
eval CREATE TABLE t1 (
$column_list
@@ -108,7 +104,6 @@ PARTITION BY HASH(f_int1)
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
eval CREATE TABLE t1 (
$column_list
@@ -125,7 +120,6 @@ SUBPARTITION BY HASH(f_int1)
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
eval CREATE TABLE t1 (
$column_list
@@ -142,7 +136,6 @@ SUBPARTITION BY HASH(f_int1)
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
#
--echo #------------------------------------------------------------------------
@@ -164,7 +157,6 @@ SUBPARTITION BY HASH(f_int1)
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
eval CREATE TABLE t1 (
$column_list
@@ -181,7 +173,6 @@ SUBPARTITION BY HASH(f_int1)
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
#
--echo #------------------------------------------------------------------------
@@ -199,7 +190,6 @@ PARTITION BY HASH(f_int1)
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
eval CREATE TABLE t1 (
$column_list
@@ -216,7 +206,6 @@ SUBPARTITION BY HASH(f_int1)
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
--echo # 6.2 Storage engine assignment after partition name + after
--echo # subpartition name
@@ -236,7 +225,6 @@ SUBPARTITION BY HASH(f_int1)
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
--echo #------------------------------------------------------------------------
@@ -252,7 +240,6 @@ PARTITION BY HASH(f_int1) ( PARTITION part1 ENGINE = $engine);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
# Bug#15966 Partitions: crash if session default engine <> engine used in create table
eval CREATE TABLE t1 (
@@ -266,6 +253,5 @@ SUBPARTITION BY HASH(f_int1)
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
eval SET SESSION storage_engine=$engine;
diff --git a/mysql-test/suite/parts/inc/partition_enum.inc b/mysql-test/suite/parts/inc/partition_enum.inc
index 67e790743f0..886ab6a5f97 100644
--- a/mysql-test/suite/parts/inc/partition_enum.inc
+++ b/mysql-test/suite/parts/inc/partition_enum.inc
@@ -1,3 +1,5 @@
+--echo ---- Partitioning and enum data type
+
--disable_query_log
# DATA DIRECTORY
eval SET @data_dir = 'DATA DIRECTORY =
@@ -47,6 +49,9 @@ select count(*) from t2;
select * from t2;
drop table t2;
+# mleich: Several partitioning functions are no more allowed.
+if (0)
+{
eval create table t3 (a enum (
'1','2','3','4','5','6','7','8','9','0',
'A','B','C','D','E','F','G','H','I','J','K','L',
@@ -71,4 +76,5 @@ dec $letter;
select count(*) from t3;
select * from t3;
drop table t3;
-
+}
+# End of tests with disallowed partitioning functions.
diff --git a/mysql-test/include/partition_layout.inc b/mysql-test/suite/parts/inc/partition_layout.inc
index e8d2b0f9123..c4181ef1cfd 100644
--- a/mysql-test/include/partition_layout.inc
+++ b/mysql-test/suite/parts/inc/partition_layout.inc
@@ -1,4 +1,4 @@
-# include/partition_layout.inc
+# inc/partition_layout.inc
#
# Print partitioning related informations about the table t1
#
diff --git a/mysql-test/suite/parts/inc/partition_layout_check1.inc b/mysql-test/suite/parts/inc/partition_layout_check1.inc
index d3441b3d886..9989f4ed9e3 100644
--- a/mysql-test/suite/parts/inc/partition_layout_check1.inc
+++ b/mysql-test/suite/parts/inc/partition_layout_check1.inc
@@ -1,17 +1,17 @@
################################################################################
-# include/partition_layout_check1.inc #
+# inc/partition_layout_check1.inc #
# #
# Purpose: #
# Store the SHOW CREATE TABLE output and the list of files belonging to #
# this table + print this into the protocol #
# This script is only usefule when sourced within the partitioning tests. #
# #
-# Attention: The routine include/partition_layout_check2.inc is very similar #
+# Attention: The routine inc/partition_layout_check2.inc is very similar #
# to this one. So if something has to be changed here it #
# might be necessary to do it also there #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-03-05 #
# Change Author: #
# Change Date: #
diff --git a/mysql-test/suite/parts/inc/partition_layout_check2.inc b/mysql-test/suite/parts/inc/partition_layout_check2.inc
index 8a45613559d..05c44a73a7f 100644
--- a/mysql-test/suite/parts/inc/partition_layout_check2.inc
+++ b/mysql-test/suite/parts/inc/partition_layout_check2.inc
@@ -1,18 +1,18 @@
################################################################################
-# include/partition_layout_check2.inc #
+# inc/partition_layout_check2.inc #
# #
# Purpose: #
# Store the SHOW CREATE TABLE output and the list of files belonging to #
# this table + Check if the layout of the table was not modified #
-# since the call of include/partition_layout_check1.inc #
+# since the call of inc/partition_layout_check1.inc #
# This script is only usefule when sourced within the partitioning tests. #
# #
-# Attention: The routine include/partition_layout_check1.inc is very similar #
+# Attention: The routine inc/partition_layout_check1.inc is very similar #
# to this one. So if something has to be changed here it #
# might be necessary to do it also there #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-03-05 #
# Change Author: #
# Change Date: #
diff --git a/mysql-test/suite/parts/inc/partition_methods1.inc b/mysql-test/suite/parts/inc/partition_methods1.inc
index 6e49c51cc3d..1edcdcb3743 100644
--- a/mysql-test/suite/parts/inc/partition_methods1.inc
+++ b/mysql-test/suite/parts/inc/partition_methods1.inc
@@ -1,5 +1,5 @@
################################################################################
-# include/partition_methods1.inc #
+# inc/partition_methods1.inc #
# #
# Purpose: #
# Create and check partitioned tables #
@@ -11,7 +11,7 @@
# do #
# 1. Create the partitioned table #
# 2 Insert the content of the table t0_template into t1 #
-# 3. Execute include/partition_check.inc #
+# 3. Execute inc/partition_check.inc #
# 4. Drop the table t1 #
# done #
# #
@@ -21,14 +21,14 @@
# has to be set before sourcing this routine. #
# Example: #
# let $unique= , UNIQUE INDEX uidx1 (f_int1); #
-# include/partition_method1s.inc #
+# inc/partition_method1s.inc #
# #
-# Attention: The routine include/partition_methods2.inc is very similar #
+# Attention: The routine inc/partition_methods2.inc is very similar #
# to this one. So if something has to be changed here it #
# might be necessary to do it also there #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-03-05 #
# Change Author: HH #
# Change Date: 2006-05-12 #
@@ -66,7 +66,6 @@ $partitioning;
--enable_query_log
eval $insert_all;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
--source suite/parts/inc/partition_check_drop.inc
@@ -107,7 +106,6 @@ $partitioning;
--enable_query_log
eval $insert_all;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
--source suite/parts/inc/partition_check_drop.inc
@@ -143,7 +141,6 @@ $partitioning;
--enable_query_log
eval $insert_all;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
--source suite/parts/inc/partition_check_drop.inc
@@ -180,7 +177,6 @@ $partitioning;
--enable_query_log
eval $insert_all;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
--source suite/parts/inc/partition_check_drop.inc
@@ -212,7 +208,6 @@ $partitioning;
--enable_query_log
eval $insert_all;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
--source suite/parts/inc/partition_check_drop.inc
@@ -247,7 +242,6 @@ $partitioning;
--enable_query_log
eval $insert_all;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
--source suite/parts/inc/partition_check_drop.inc
@@ -299,7 +293,6 @@ $partitioning;
--enable_query_log
eval $insert_all;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
--source suite/parts/inc/partition_check_drop.inc
@@ -329,7 +322,6 @@ $partitioning;
--enable_query_log
eval $insert_all;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
--source suite/parts/inc/partition_check_drop.inc
let $with_directories= FALSE;
diff --git a/mysql-test/suite/parts/inc/partition_methods2.inc b/mysql-test/suite/parts/inc/partition_methods2.inc
index 31b083bfa7a..91821d620b6 100644
--- a/mysql-test/suite/parts/inc/partition_methods2.inc
+++ b/mysql-test/suite/parts/inc/partition_methods2.inc
@@ -1,5 +1,5 @@
################################################################################
-# include/partition_methods2.inc #
+# inc/partition_methods2.inc #
# #
# Purpose: #
# Create and check partitioned tables #
@@ -10,7 +10,7 @@
# do #
# 1. Create the partitioned table #
# 2 Insert the content of the table t0_template into t1 #
-# 3. Execute include/partition_check.inc #
+# 3. Execute inc/partition_check.inc #
# 4. Drop the table t1 #
# done #
# #
@@ -20,14 +20,14 @@
# has to be set before sourcing this routine. #
# Example: #
# let $unique= , UNIQUE INDEX uidx1 (f_int1); #
-# include/partition_methods2.inc #
+# inc/partition_methods2.inc #
# #
-# Attention: The routine include/partition_methods1.inc is very similar #
+# Attention: The routine inc/partition_methods1.inc is very similar #
# to this one. So if something has to be changed here it #
# might be necessary to do it also there #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-03-05 #
# Change Author: #
# Change Date: #
@@ -51,7 +51,6 @@ $unique
$partitioning;
eval $insert_all;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
#----------- PARTITION BY KEY
@@ -66,7 +65,6 @@ $unique
$partitioning;
eval $insert_all;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
#----------- PARTITION BY LIST
@@ -89,7 +87,6 @@ $unique
$partitioning;
eval $insert_all;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
#----------- PARTITION BY RANGE
@@ -113,7 +110,6 @@ $unique
$partitioning;
eval $insert_all;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
#----------- PARTITION BY RANGE -- SUBPARTITION BY HASH
@@ -136,7 +132,6 @@ $unique
$partitioning;
eval $insert_all;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
#----------- PARTITION BY RANGE -- SUBPARTITION BY KEY
@@ -162,7 +157,6 @@ $unique
$partitioning;
eval $insert_all;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
#----------- PARTITION BY LIST -- SUBPARTITION BY HASH
@@ -185,7 +179,6 @@ $unique
$partitioning;
eval $insert_all;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
#----------- PARTITION BY LIST -- SUBPARTITION BY KEY
@@ -208,5 +201,4 @@ $unique
$partitioning;
eval $insert_all;
--source suite/parts/inc/partition_check.inc
-# --source include/partition_check.inc
DROP TABLE t1;
diff --git a/mysql-test/suite/parts/inc/partition_set.inc b/mysql-test/suite/parts/inc/partition_set.inc
index 292a28e7e1a..b9501ad04b6 100644
--- a/mysql-test/suite/parts/inc/partition_set.inc
+++ b/mysql-test/suite/parts/inc/partition_set.inc
@@ -1,3 +1,5 @@
+--echo ---- Partitioning and set data type
+
--disable_query_log
# DATA DIRECTORY
eval SET @data_dir = 'DATA DIRECTORY =
diff --git a/mysql-test/suite/parts/inc/partition_supported_sql_funcs.inc b/mysql-test/suite/parts/inc/partition_supported_sql_funcs.inc
index 0f30fd199f8..d9c1f5836f0 100644
--- a/mysql-test/suite/parts/inc/partition_supported_sql_funcs.inc
+++ b/mysql-test/suite/parts/inc/partition_supported_sql_funcs.inc
@@ -234,7 +234,6 @@ subpartition by hash($sqlfunc) subpartitions 5
let $t5=t5;
let $t6=t6;
--source suite/parts/inc/part_supported_sql_funcs_delete.inc
- # --source include/part_supported_sql_funcs_delete.inc
let $t1=t11;
let $t2=t22;
@@ -243,7 +242,6 @@ subpartition by hash($sqlfunc) subpartitions 5
let $t5=t55;
let $t6=t66;
--source suite/parts/inc/part_supported_sql_funcs_delete.inc
- # --source include/part_supported_sql_funcs_delete.inc
--echo -------------------------
--echo ---- some alter table end
--echo -------------------------
diff --git a/mysql-test/suite/parts/inc/partition_syntax.inc b/mysql-test/suite/parts/inc/partition_syntax.inc
index a2a29d25e48..e72aad80f0a 100644
--- a/mysql-test/suite/parts/inc/partition_syntax.inc
+++ b/mysql-test/suite/parts/inc/partition_syntax.inc
@@ -1,11 +1,11 @@
################################################################################
-# include/partition_syntax.inc #
+# inc/partition_syntax.inc #
# #
# Purpose: #
# Tests around Create partitioned tables syntax #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-03-05 #
# Change Author: #
# Change Date: #
@@ -107,17 +107,13 @@ let $unique_index= UNIQUE INDEX (f_int2);
#----------- PARTITION BY HASH
let $partition_scheme= PARTITION BY HASH(f_int1) PARTITIONS 2;
--source suite/parts/inc/partition_syntax_2.inc
-# --source include/partition_syntax_2.inc
let $partition_scheme= PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
--source suite/parts/inc/partition_syntax_2.inc
-# --source include/partition_syntax_2.inc
#----------- PARTITION BY KEY
let $partition_scheme= PARTITION BY KEY(f_int1) PARTITIONS 2;
--source suite/parts/inc/partition_syntax_2.inc
-# --source include/partition_syntax_2.inc
let $partition_scheme= PARTITION BY KEY(f_int1,f_int2) PARTITIONS 2;
--source suite/parts/inc/partition_syntax_2.inc
-# --source include/partition_syntax_2.inc
#----------- PARTITION BY LIST
let $partition_scheme= PARTITION BY LIST(MOD(f_int1,3))
(PARTITION partN VALUES IN (NULL),
@@ -125,25 +121,21 @@ let $partition_scheme= PARTITION BY LIST(MOD(f_int1,3))
PARTITION part1 VALUES IN (1),
PARTITION part2 VALUES IN (2));
--source suite/parts/inc/partition_syntax_2.inc
-# --source include/partition_syntax_2.inc
let $partition_scheme= PARTITION BY LIST(MOD(f_int1 + f_int2,3))
(PARTITION partN VALUES IN (NULL),
PARTITION part0 VALUES IN (0),
PARTITION part1 VALUES IN (1),
PARTITION part2 VALUES IN (2));
--source suite/parts/inc/partition_syntax_2.inc
-# --source include/partition_syntax_2.inc
#----------- PARTITION BY RANGE
let $partition_scheme= PARTITION BY RANGE(f_int1)
(PARTITION part1 VALUES LESS THAN (1),
PARTITION part2 VALUES LESS THAN (2147483646));
--source suite/parts/inc/partition_syntax_2.inc
-# --source include/partition_syntax_2.inc
let $partition_scheme= PARTITION BY RANGE(f_int1 + f_int2)
(PARTITION part1 VALUES LESS THAN (1),
PARTITION part2 VALUES LESS THAN (2147483646));
--source suite/parts/inc/partition_syntax_2.inc
-# --source include/partition_syntax_2.inc
#
--echo #------------------------------------------------------------------------
@@ -200,14 +192,12 @@ SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 3
(PARTITION part1 VALUES LESS THAN (1),
PARTITION part2 VALUES LESS THAN (2147483646));
--source suite/parts/inc/partition_syntax_2.inc
-# --source include/partition_syntax_2.inc
#----------- PARTITION BY RANGE -- SUBPARTITION BY KEY
let $partition_scheme= PARTITION BY RANGE(f_int2)
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
(PARTITION part1 VALUES LESS THAN (1),
PARTITION part2 VALUES LESS THAN (2147483646));
--source suite/parts/inc/partition_syntax_2.inc
-# --source include/partition_syntax_2.inc
#----------- PARTITION BY LIST -- SUBPARTITION BY HASH
let $partition_scheme= PARTITION BY LIST(MOD(f_int2,3))
SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
@@ -216,7 +206,6 @@ SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
PARTITION part1 VALUES IN (1),
PARTITION part2 VALUES IN (2));
--source suite/parts/inc/partition_syntax_2.inc
-# --source include/partition_syntax_2.inc
#----------- PARTITION BY LIST -- SUBPARTITION BY KEY
let $partition_scheme= PARTITION BY LIST(MOD(f_int2,3))
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 2
@@ -225,7 +214,6 @@ SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 2
PARTITION part1 VALUES IN (1),
PARTITION part2 VALUES IN (2));
--source suite/parts/inc/partition_syntax_2.inc
-# --source include/partition_syntax_2.inc
--echo
--echo #========================================================================
@@ -249,7 +237,7 @@ PARTITION BY RANGE(f_int1)
--echo # This is a limitation of MySQL 5.1, which could be removed in
--echo # later releases.
--echo #------------------------------------------------------------------------
---error 1064
+--error ER_PARSE_ERROR
eval CREATE TABLE t1 (
$column_list,
PRIMARY KEY (f_int1)
@@ -324,7 +312,7 @@ PARTITION BY RANGE(f_int1)
--echo #------------------------------------------------------------------------
--echo # 3.5.1 NULL in RANGE partitioning clause
--echo # 3.5.1.1 VALUE LESS THAN (NULL) is not allowed
---error 1064
+--error ER_PARSE_ERROR
eval CREATE TABLE t1 (
$column_list
)
@@ -332,7 +320,7 @@ PARTITION BY RANGE(f_int1)
( PARTITION part1 VALUES LESS THAN (NULL),
PARTITION part2 VALUES LESS THAN (1000));
--echo # 3.5.1.2 VALUE LESS THAN (NULL) is not allowed
---error 1064
+--error ER_PARSE_ERROR
eval CREATE TABLE t1 (
$column_list
)
@@ -359,7 +347,6 @@ PARTITION BY LIST(MOD(f_int1,2))
( PARTITION part1 VALUES IN (NULL),
PARTITION part3 VALUES IN (1));
--source suite/parts/inc/partition_layout_check1.inc
-# --source include/partition_layout_check1.inc
DROP TABLE t1;
--echo # 3.5.3 Reveal that IN (...NULL) is not mapped to IN(0)
# Bug#15447: Partitions: NULL is treated as zero
@@ -372,7 +359,6 @@ PARTITION BY LIST(MOD(f_int1,2))
PARTITION part2 VALUES IN (0),
PARTITION part3 VALUES IN (1));
--source suite/parts/inc/partition_layout_check1.inc
-# --source include/partition_layout_check1.inc
DROP TABLE t1;
# FIXME Implement some non integer constant tests
@@ -395,7 +381,6 @@ $column_list
)
PARTITION BY HASH(f_int1);
--source suite/parts/inc/partition_layout_check1.inc
-# --source include/partition_layout_check1.inc
DROP TABLE t1;
--echo # 4.1.2 no partition number, named partitions
eval CREATE TABLE t1 (
@@ -403,7 +388,6 @@ $column_list
)
PARTITION BY HASH(f_int1) (PARTITION part1, PARTITION part2);
--source suite/parts/inc/partition_layout_check1.inc
-# --source include/partition_layout_check1.inc
DROP TABLE t1;
# Attention: Several combinations are impossible
# If subpartitioning exists
@@ -456,21 +440,20 @@ let $part3_Y= `SELECT @AUX`;
eval $part01 $column_list $part02 $part1_N $part2_N $part3_N ;
DROP TABLE t1;
# Bug#15407 Partitions: crash if subpartition
---error 1064
+--error ER_PARSE_ERROR
eval $part01 $column_list $part02 $part1_N $part2_N $part3_Y ;
---error 1064
+--error ER_PARSE_ERROR
eval $part01 $column_list $part02 $part1_N $part2_Y $part3_N ;
---error 1064
+--error ER_PARSE_ERROR
eval $part01 $column_list $part02 $part1_N $part2_Y $part3_Y ;
---error 1064
+--error ER_PARSE_ERROR
eval $part01 $column_list $part02 $part1_Y $part2_N $part3_N ;
---error 1064
+--error ER_PARSE_ERROR
eval $part01 $column_list $part02 $part1_Y $part2_N $part3_Y ;
---error 1064
+--error ER_PARSE_ERROR
eval $part01 $column_list $part02 $part1_Y $part2_Y $part3_N ;
eval $part01 $column_list $part02 $part1_Y $part2_Y $part3_Y ;
--source suite/parts/inc/partition_layout_check1.inc
-# --source include/partition_layout_check1.inc
DROP TABLE t1;
--echo #------------------------------------------------------------------------
@@ -480,172 +463,128 @@ DROP TABLE t1;
DROP TABLE IF EXISTS t1;
--enable_warnings
--echo # 4.2.1 partition/subpartition numbers INTEGER notation
-# ML: "positive/negative" is my private judgement. It need no to correspond
-# with the server response.
+# mleich: "positive/negative" is my private judgement. It need not to
+# correspond with the server response.
# (positive) number = 2
let $part_number= 2;
--source suite/parts/inc/partition_syntax_1.inc
-# --source include/partition_syntax_1.inc
# (positive) special case number = 1
let $part_number= 1;
--source suite/parts/inc/partition_syntax_1.inc
-# --source include/partition_syntax_1.inc
# (negative) 0 is non sense
let $part_number= 0;
--source suite/parts/inc/partition_syntax_1.inc
-# --source include/partition_syntax_1.inc
# (negative) -1 is non sense
let $part_number= -1;
--source suite/parts/inc/partition_syntax_1.inc
-# --source include/partition_syntax_1.inc
# (negative) 1000000 is too huge
let $part_number= 1000000;
--source suite/parts/inc/partition_syntax_1.inc
-# --source include/partition_syntax_1.inc
--echo # 4.2.2 partition/subpartition numbers DECIMAL notation
# (positive) number = 2.0
let $part_number= 2.0;
--source suite/parts/inc/partition_syntax_1.inc
-# --source include/partition_syntax_1.inc
# (negative) -2.0 is non sense
let $part_number= -2.0;
--source suite/parts/inc/partition_syntax_1.inc
-# --source include/partition_syntax_1.inc
# (negative) case number = 0.0 is non sense
let $part_number= 0.0;
--source suite/parts/inc/partition_syntax_1.inc
-# --source include/partition_syntax_1.inc
-if ($fixed_bug15890)
-{
# Bug#15890 Partitions: Strange interpretation of partition number
# (negative) number = 1.6 is non sense
let $part_number= 1.6;
--source suite/parts/inc/partition_syntax_1.inc
-# --source include/partition_syntax_1.inc
-}
# (negative) number is too huge
let $part_number= 999999999999999999999999999999.999999999999999999999999999999;
--source suite/parts/inc/partition_syntax_1.inc
-# --source include/partition_syntax_1.inc
# (negative) number is nearly zero
let $part_number= 0.000000000000000000000000000001;
--source suite/parts/inc/partition_syntax_1.inc
-# --source include/partition_syntax_1.inc
--echo # 4.2.3 partition/subpartition numbers FLOAT notation
##### FLOAT notation
# (positive) number = 2.0E+0
let $part_number= 2.0E+0;
--source suite/parts/inc/partition_syntax_1.inc
-# --source include/partition_syntax_1.inc
-if ($fixed_bug15890)
-{
# Bug#15890 Partitions: Strange interpretation of partition number
# (positive) number = 0.2E+1
let $part_number= 0.2E+1;
--source suite/parts/inc/partition_syntax_1.inc
-# --source include/partition_syntax_1.inc
-}
# (negative) -2.0E+0 is non sense
let $part_number= -2.0E+0;
--source suite/parts/inc/partition_syntax_1.inc
-# --source include/partition_syntax_1.inc
-if ($fixed_bug15890)
-{
# Bug#15890 Partitions: Strange interpretation of partition number
# (negative) 0.16E+1 is non sense
let $part_number= 0.16E+1;
--source suite/parts/inc/partition_syntax_1.inc
-# --source include/partition_syntax_1.inc
-}
# (negative) 0.0E+300 is zero
let $part_number= 0.0E+300;
--source suite/parts/inc/partition_syntax_1.inc
-# --source include/partition_syntax_1.inc
-if ($fixed_bug15890)
-{
# Bug#15890 Partitions: Strange interpretation of partition number
# (negative) 1E+300 is too huge
let $part_number= 1E+300;
--source suite/parts/inc/partition_syntax_1.inc
-# --source include/partition_syntax_1.inc
# (negative) 1E-300 is nearly zero
let $part_number= 1E-300;
--source suite/parts/inc/partition_syntax_1.inc
-# --source include/partition_syntax_1.inc
-}
--echo # 4.2.4 partition/subpartition numbers STRING notation
##### STRING notation
# (negative?) case number = '2'
let $part_number= '2';
--source suite/parts/inc/partition_syntax_1.inc
-# --source include/partition_syntax_1.inc
# (negative?) case number = '2.0'
let $part_number= '2.0';
--source suite/parts/inc/partition_syntax_1.inc
-# --source include/partition_syntax_1.inc
# (negative?) case number = '0.2E+1'
let $part_number= '0.2E+1';
--source suite/parts/inc/partition_syntax_1.inc
-# --source include/partition_syntax_1.inc
# (negative) Strings starts with digit, but 'A' follows
let $part_number= '2A';
--source suite/parts/inc/partition_syntax_1.inc
-# --source include/partition_syntax_1.inc
# (negative) Strings starts with 'A', but digit follows
let $part_number= 'A2';
--source suite/parts/inc/partition_syntax_1.inc
-# --source include/partition_syntax_1.inc
# (negative) empty string
let $part_number= '';
--source suite/parts/inc/partition_syntax_1.inc
-# --source include/partition_syntax_1.inc
# (negative) string without any digits
let $part_number= 'GARBAGE';
--source suite/parts/inc/partition_syntax_1.inc
-# --source include/partition_syntax_1.inc
--echo # 4.2.5 partition/subpartition numbers other notations
# (negative) Strings starts with digit, but 'A' follows
let $part_number= 2A;
--source suite/parts/inc/partition_syntax_1.inc
-# --source include/partition_syntax_1.inc
# (negative) Strings starts with 'A', but digit follows
let $part_number= A2;
--source suite/parts/inc/partition_syntax_1.inc
-# --source include/partition_syntax_1.inc
# (negative) string without any digits
let $part_number= GARBAGE;
--source suite/parts/inc/partition_syntax_1.inc
-# --source include/partition_syntax_1.inc
# (negative?) double quotes
let $part_number= "2";
--source suite/parts/inc/partition_syntax_1.inc
-# --source include/partition_syntax_1.inc
# (negative) Strings starts with digit, but 'A' follows
let $part_number= "2A";
--source suite/parts/inc/partition_syntax_1.inc
-# --source include/partition_syntax_1.inc
# (negative) Strings starts with 'A', but digit follows
let $part_number= "A2";
--source suite/parts/inc/partition_syntax_1.inc
-# --source include/partition_syntax_1.inc
# (negative) string without any digits
let $part_number= "GARBAGE";
--source suite/parts/inc/partition_syntax_1.inc
-# --source include/partition_syntax_1.inc
--echo # 4.2.6 (negative) partition/subpartition numbers per @variables
SET @aux = 5;
---error 1064
+--error ER_PARSE_ERROR
eval CREATE TABLE t1 (
$column_list
)
PARTITION BY HASH(f_int1) PARTITIONS @aux;
---error 1064
+--error ER_PARSE_ERROR
eval CREATE TABLE t1 (
$column_list
)
@@ -665,7 +604,6 @@ $column_list
)
PARTITION BY HASH(f_int1) PARTITIONS 2 ( PARTITION part1, PARTITION part2 ) ;
--source suite/parts/inc/partition_layout_check1.inc
-# --source include/partition_layout_check1.inc
DROP TABLE t1;
eval CREATE TABLE t1 (
$column_list
@@ -678,20 +616,19 @@ SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
(SUBPARTITION subpart21, SUBPARTITION subpart22)
);
--source suite/parts/inc/partition_layout_check1.inc
-# --source include/partition_layout_check1.inc
DROP TABLE t1;
--echo # 4.3.2 (positive) number of partition/subpartition ,
--echo # 0 (= no) named partition/subpartition
--echo # already checked above
--echo # 4.3.3 (negative) number of partitions/subpartitions
--echo # > number of named partitions/subpartitions
---error 1064
+--error ER_PARSE_ERROR
eval CREATE TABLE t1 (
$column_list
)
PARTITION BY HASH(f_int1) PARTITIONS 2 ( PARTITION part1 ) ;
# Wrong number of named subpartitions in first partition
---error 1064
+--error ER_PARSE_ERROR
eval CREATE TABLE t1 (
$column_list
)
@@ -703,7 +640,7 @@ SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
(SUBPARTITION subpart21, SUBPARTITION subpart22)
);
# Wrong number of named subpartitions in non first/non last partition
---error 1064
+--error ER_PARSE_ERROR
eval CREATE TABLE t1 (
$column_list
)
@@ -717,7 +654,7 @@ SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
(SUBPARTITION subpart31, SUBPARTITION subpart32)
);
# Wrong number of named subpartitions in last partition
---error 1064
+--error ER_PARSE_ERROR
eval CREATE TABLE t1 (
$column_list
)
@@ -729,13 +666,13 @@ SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
(SUBPARTITION subpart21 )
);
--echo # 4.3.4 (negative) number of partitions < number of named partitions
---error 1064
+--error ER_PARSE_ERROR
eval CREATE TABLE t1 (
$column_list
)
PARTITION BY HASH(f_int1) PARTITIONS 1 ( PARTITION part1, PARTITION part2 ) ;
# Wrong number of named subpartitions in first partition
---error 1064
+--error ER_PARSE_ERROR
eval CREATE TABLE t1 (
$column_list
)
@@ -747,7 +684,7 @@ SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 1
(SUBPARTITION subpart21, SUBPARTITION subpart22)
);
# Wrong number of named subpartitions in non first/non last partition
---error 1064
+--error ER_PARSE_ERROR
eval CREATE TABLE t1 (
$column_list
)
@@ -761,7 +698,7 @@ SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 1
(SUBPARTITION subpart31, SUBPARTITION subpart32)
);
# Wrong number of named subpartitions in last partition
---error 1064
+--error ER_PARSE_ERROR
eval CREATE TABLE t1 (
$column_list
)
diff --git a/mysql-test/suite/parts/inc/partition_syntax_1.inc b/mysql-test/suite/parts/inc/partition_syntax_1.inc
index e3e1b3ccbb7..a7168b6af3b 100644
--- a/mysql-test/suite/parts/inc/partition_syntax_1.inc
+++ b/mysql-test/suite/parts/inc/partition_syntax_1.inc
@@ -1,8 +1,8 @@
################################################################################
-# include/partition_syntax_1.inc #
+# inc/partition_syntax_1.inc #
# #
# Purpose: #
-# Auxiliary script, only useful when sourced by include/partition_syntax.inc #
+# Auxiliary script, only useful when sourced by inc/partition_syntax.inc #
# #
# Try to create a table with number of partitions/subpartitions #
# = $part_number. Print the layout of the table and drop it. #
@@ -10,11 +10,13 @@
# The parameter $part_number must be set before sourcing this script. #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
-# Original Date: 2006-03-05 #
-# Change Author: #
-# Change Date: #
-# Change: #
+# Original Author: mleich #
+# Original Date: 2006-03-05 #
+# Change Author: mleich #
+# Change Date: 2007-10-08 #
+# Change: Fix for #
+# Bug#31481 test suite parts: Many tests fail because of #
+# changed server error codes #
################################################################################
--disable_abort_on_error
@@ -27,16 +29,13 @@ PARTITION BY HASH(f_int1) PARTITIONS $part_number;
eval SET @my_errno= $mysql_errno ;
let $run= `SELECT @my_errno = 0`;
# Expected error codes are
-# 0
-# 1064 ER_PARSE_ERROR
-# Reason: assign -1 partitions
-# 1496 ER_TOO_MANY_PARTITIONS_ERROR
-# 1501 ER_NO_PARTS_ERROR
-let $unexpected_error= `SELECT @my_errno NOT IN (0,1064,1496,1501)`;
-if ($unexpected_error)
+# 0, ER_PARSE_ERROR (Reason: assign -1 partitions), ER_TOO_MANY_PARTITIONS_ERROR
+# and ER_NO_PARTS_ERROR
+if (`SELECT @my_errno NOT IN (0,$ER_PARSE_ERROR,$ER_TOO_MANY_PARTITIONS_ERROR,
+ $ER_NO_PARTS_ERROR)`)
{
--echo # The last command got an unexepected error response.
- --echo # Expected/handled SQL codes are 0,1064,1496,1501
+ --echo # Expected/handled SQL codes are 0,$ER_PARSE_ERROR,$ER_TOO_MANY_PARTITIONS_ERROR,$ER_NO_PARTS_ERROR
SELECT '# SQL code we got was: ' AS "", @my_errno AS "";
--echo # Sorry, have to abort.
exit;
@@ -48,7 +47,6 @@ if ($unexpected_error)
if ($run)
{
--source suite/parts/inc/partition_layout_check1.inc
- # --source include/partition_layout_check1.inc
eval DROP TABLE t1;
}
#### Try to create a table with the given subpartition number
@@ -65,16 +63,13 @@ SUBPARTITIONS $part_number
eval SET @my_errno= $mysql_errno ;
let $run= `SELECT @my_errno = 0`;
# Expected error codes are
-# 0
-# 1064 ER_PARSE_ERROR
-# Reason: assign -1 partitions
-# 1496 ER_TOO_MANY_PARTITIONS_ERROR
-# 1501 ER_NO_PARTS_ERROR
-let $unexpected_error= `SELECT @my_errno NOT IN (0,1064,1496,1501)`;
-if ($unexpected_error)
+# 0, ER_PARSE_ERROR (Reason: assign -1 partitions), ER_TOO_MANY_PARTITIONS_ERROR
+# and ER_NO_PARTS_ERROR
+if (`SELECT @my_errno NOT IN (0,$ER_PARSE_ERROR,$ER_TOO_MANY_PARTITIONS_ERROR,
+ $ER_NO_PARTS_ERROR)`)
{
--echo # The last command got an unexepected error response.
- --echo # Expected/handled SQL codes are 0,1064,1496,1501
+ --echo # Expected/handled SQL codes are 0,$ER_PARSE_ERROR,$ER_TOO_MANY_PARTITIONS_ERROR,$ER_NO_PARTS_ERROR
SELECT '# SQL code we got was: ' AS "", @my_errno AS "";
--echo # Sorry, have to abort.
exit;
@@ -86,6 +81,5 @@ if ($unexpected_error)
if ($run)
{
--source suite/parts/inc/partition_layout_check1.inc
- # --source include/partition_layout_check1.inc
eval DROP TABLE t1;
}
diff --git a/mysql-test/suite/parts/inc/partition_syntax_2.inc b/mysql-test/suite/parts/inc/partition_syntax_2.inc
index 9adf1c9b2a0..b8e728ee79b 100644
--- a/mysql-test/suite/parts/inc/partition_syntax_2.inc
+++ b/mysql-test/suite/parts/inc/partition_syntax_2.inc
@@ -1,11 +1,11 @@
################################################################################
-# include/partition_syntax_2.inc #
+# inc/partition_syntax_2.inc #
# #
# Purpose: #
-# Auxiliary script, only useful when sourced by include/partition_syntax.inc.#
+# Auxiliary script, only useful when sourced by inc/partition_syntax.inc. #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-05-11 #
# Change Author: #
# Change Date: #
@@ -35,11 +35,7 @@ if (`SELECT @@session.storage_engine IN('ndbcluster')`)
)
$partition_scheme;
eval $insert_all;
- if ($fixed_bug18735)
- {
--source suite/parts/inc/partition_check.inc
- # --source include/partition_check.inc
- }
DROP TABLE t1;
eval CREATE TABLE t1 (
$column_list,
@@ -47,10 +43,6 @@ if (`SELECT @@session.storage_engine IN('ndbcluster')`)
)
$partition_scheme;
eval $insert_all;
- if ($fixed_bug18735)
- {
--source suite/parts/inc/partition_check.inc
- # --source include/partition_check.inc
- }
DROP TABLE t1;
}
diff --git a/mysql-test/suite/parts/inc/partition_text.inc b/mysql-test/suite/parts/inc/partition_text.inc
index a655552c457..761f5dfb118 100644
--- a/mysql-test/suite/parts/inc/partition_text.inc
+++ b/mysql-test/suite/parts/inc/partition_text.inc
@@ -1,3 +1,5 @@
+--echo ---- Partitioning and text data type
+
--disable_query_log
# DATA DIRECTORY
eval SET @data_dir = 'DATA DIRECTORY =
@@ -53,4 +55,3 @@ partition by key (a) partitions 30;
#select count(*) from t2;
#select * from t2;
#drop table t2;
-
diff --git a/mysql-test/suite/parts/inc/partition_trigg1.inc b/mysql-test/suite/parts/inc/partition_trigg1.inc
index 7ebf2f411d3..7bb5aa162a9 100644
--- a/mysql-test/suite/parts/inc/partition_trigg1.inc
+++ b/mysql-test/suite/parts/inc/partition_trigg1.inc
@@ -1,8 +1,8 @@
################################################################################
-# include/partition_trigg1.inc #
+# inc/partition_trigg1.inc #
# #
# Purpose: #
-# Auxiliary script, only useful when sourced by include/partition_check.inc. #
+# Auxiliary script, only useful when sourced by inc/partition_check.inc. #
# One trigger uses new values (--> event UPDATE, INSERT only) #
# One trigger uses old values (--> event UPDATE, DELETE only) #
# #
@@ -12,7 +12,7 @@
# 4. Revert the modifications #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-03-05 #
# Change Author: #
# Change Date: #
@@ -45,7 +45,7 @@ if ($run1)
eval $statement;
- # Check of preceeding statement via Select
+ # Check of preceding statement via Select
if ($no_debug)
{
--disable_query_log
@@ -94,7 +94,7 @@ if ($run1)
eval $statement;
- # Check of preceeding statement via Select
+ # Check of preceding statement via Select
if ($no_debug)
{
--disable_query_log
diff --git a/mysql-test/suite/parts/inc/partition_trigg2.inc b/mysql-test/suite/parts/inc/partition_trigg2.inc
index 767dbd52e47..2849ca21ff0 100644
--- a/mysql-test/suite/parts/inc/partition_trigg2.inc
+++ b/mysql-test/suite/parts/inc/partition_trigg2.inc
@@ -1,8 +1,8 @@
################################################################################
-# include/partition_trigg2.inc #
+# inc/partition_trigg2.inc #
# #
# Purpose: #
-# Auxiliary script, only useful when sourced by include/partition_check.inc. #
+# Auxiliary script, only useful when sourced by inc/partition_check.inc. #
# The trigger uses new values (--> event UPDATE, INSERT only) #
# #
# 1. Create a trigger #
@@ -11,7 +11,7 @@
# 4. Revert the modifications #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-03-05 #
# Change Author: #
# Change Date: #
@@ -27,7 +27,7 @@ BEGIN
END|
delimiter ;|
eval $statement;
-# Check of preceeding statement via Select
+# Check of preceding statement via Select
if ($no_debug)
{
--disable_query_log
diff --git a/mysql-test/suite/parts/inc/partition_trigg3.inc b/mysql-test/suite/parts/inc/partition_trigg3.inc
index a129cf75a1d..b56847ada44 100644
--- a/mysql-test/suite/parts/inc/partition_trigg3.inc
+++ b/mysql-test/suite/parts/inc/partition_trigg3.inc
@@ -1,8 +1,8 @@
-###############################################################################
-# include/partition_trigg3.inc #
+################################################################################
+# inc/partition_trigg3.inc #
# #
# Purpose: #
-# Auxiliary script, only useful when sourced by include/partition_check.inc. #
+# Auxiliary script, only useful when sourced by inc/partition_check.inc. #
# The trigger uses new values (--> event UPDATE, INSERT only) #
# #
# 1. Create a trigger #
@@ -11,23 +11,13 @@
# 4. Revert the modifications #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-03-05 #
# Change Author: #
# Change Date: #
# Change: #
################################################################################
-# include/partition_trigg3.inc
-#
-# Auxiliary script, only useful when sourced by include/partition_check.inc.
-#
-# 1. Create a trigger
-# 2. Execute a statement, which activates the trigger
-# 3. Check the results of the trigger activity
-# 4. Revert the modifications
-#
-
delimiter |;
# Original version of the trigger
# eval CREATE TRIGGER trg_3 $event ON t1 FOR EACH ROW
@@ -55,20 +45,12 @@ END|
delimiter ;|
# Additional statements because of Bug(limitation)#17704
SET @counter = 1;
-if ($fixed_bug18730)
-{
# Bug#18730 Partitions: NDB, crash on SELECT MIN(<unique column>)
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
-}
-if (!$fixed_bug18730)
-{
-# Bug#18730 Partitions: NDB, crash on SELECT MIN(<unique column>)
-SELECT @max_row, 1 INTO @my_max1,@my_min2;
-}
# Additional statements end
eval $statement;
DROP TRIGGER trg_3;
-# Check of preceeding statement via Select
+# Check of preceding statement via Select
if ($no_debug)
{
--disable_query_log
diff --git a/mysql-test/suite/parts/inc/partition_value.inc b/mysql-test/suite/parts/inc/partition_value.inc
index 58691752bdf..3e25e740de6 100644
--- a/mysql-test/suite/parts/inc/partition_value.inc
+++ b/mysql-test/suite/parts/inc/partition_value.inc
@@ -1,11 +1,11 @@
################################################################################
-# include/partition_value.inc #
+# inc/partition_value.inc #
# #
# Purpose: #
# Tests around "exotic" values calculated by the partitioning function #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-04-11 #
# Change Author: #
# Change Date: #
diff --git a/mysql-test/suite/parts/inc/partition_varbinary.inc b/mysql-test/suite/parts/inc/partition_varbinary.inc
index b112cbe312e..48fd6d890d8 100644
--- a/mysql-test/suite/parts/inc/partition_varbinary.inc
+++ b/mysql-test/suite/parts/inc/partition_varbinary.inc
@@ -1,3 +1,5 @@
+--echo ---- Partitioning and varbinary data type
+
--disable_query_log
# DATA DIRECTORY
eval SET @data_dir = 'DATA DIRECTORY =
diff --git a/mysql-test/suite/parts/inc/partition_varchar.inc b/mysql-test/suite/parts/inc/partition_varchar.inc
index 1cd33fa49da..c018a16e919 100644
--- a/mysql-test/suite/parts/inc/partition_varchar.inc
+++ b/mysql-test/suite/parts/inc/partition_varchar.inc
@@ -1,3 +1,5 @@
+--echo ---- Partitioning and varchar data type
+
--disable_query_log
# DATA DIRECTORY
eval SET @data_dir = 'DATA DIRECTORY =
diff --git a/mysql-test/suite/parts/r/partition_alter1_innodb.result b/mysql-test/suite/parts/r/partition_alter1_innodb.result
index 22f02356b77..a1d40af196c 100644
--- a/mysql-test/suite/parts/r/partition_alter1_innodb.result
+++ b/mysql-test/suite/parts/r/partition_alter1_innodb.result
@@ -2,14 +2,6 @@ SET @max_row = 20;
SET @@session.storage_engine = 'InnoDB';
#------------------------------------------------------------------------
-# There are several testcases disabled because of the open bugs
-# #15890
-# The expected results suffer from the following bugs
-# harmless #17455, #19305
-# which cannot be suppressed because of technical reasons.
-#------------------------------------------------------------------------
-
-#------------------------------------------------------------------------
# 0. Setting of auxiliary variables + Creation of an auxiliary tables
# needed in many testcases
#------------------------------------------------------------------------
@@ -31,7 +23,7 @@ DROP TABLE IF EXISTS t0_definition;
CREATE TABLE t0_definition (
state CHAR(3),
create_command VARBINARY(5000),
-file_list VARBINARY(5000),
+file_list VARBINARY(10000),
PRIMARY KEY (state)
) ENGINE = MEMORY;
DROP TABLE IF EXISTS t0_aux;
@@ -389,7 +381,7 @@ ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -860,7 +852,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -878,7 +870,7 @@ ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -1349,7 +1341,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -1375,7 +1367,7 @@ ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -1846,7 +1838,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -1870,7 +1862,7 @@ ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -2339,7 +2331,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -2361,7 +2353,7 @@ ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -2832,7 +2824,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -2858,7 +2850,7 @@ ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -3327,7 +3319,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -3353,7 +3345,7 @@ ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -3824,7 +3816,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -3846,7 +3838,7 @@ ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -4317,7 +4309,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -4336,7 +4328,7 @@ ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -4807,7 +4799,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -4825,7 +4817,7 @@ ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -5296,7 +5288,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -5322,7 +5314,7 @@ ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -5793,7 +5785,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -5817,7 +5809,7 @@ ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -6286,7 +6278,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -6308,7 +6300,7 @@ ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -6779,7 +6771,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -6805,7 +6797,7 @@ ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -7274,7 +7266,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -7300,7 +7292,7 @@ ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -7771,7 +7763,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -7793,7 +7785,7 @@ ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -8264,7 +8256,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# 1.1.4 UNIQUE INDEX consisting of two columns
DROP TABLE IF EXISTS t1;
@@ -8284,7 +8276,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -8771,7 +8763,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -8789,7 +8781,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -9276,7 +9268,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -9302,7 +9294,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -9789,7 +9781,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -9813,7 +9805,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -10298,7 +10290,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -10320,7 +10312,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -10807,7 +10799,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -10833,7 +10825,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -11318,7 +11310,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -11344,7 +11336,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -11831,7 +11823,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -11853,7 +11845,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -12340,7 +12332,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -12359,7 +12351,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -12846,7 +12838,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -12864,7 +12856,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -13351,7 +13343,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -13377,7 +13369,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -13864,7 +13856,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -13888,7 +13880,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -14373,7 +14365,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -14395,7 +14387,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -14882,7 +14874,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -14908,7 +14900,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -15393,7 +15385,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -15419,7 +15411,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -15906,7 +15898,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -15928,7 +15920,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -16415,7 +16407,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
#------------------------------------------------------------------------
# 1.2 ADD PRIMARY KEY or UNIQUE INDEX to table with two columns
@@ -16439,7 +16431,7 @@ ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -16910,7 +16902,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -16928,7 +16920,7 @@ ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -17399,7 +17391,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -17425,7 +17417,7 @@ ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -17896,7 +17888,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -17920,7 +17912,7 @@ ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -18389,7 +18381,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -18411,7 +18403,7 @@ ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -18880,7 +18872,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -18906,7 +18898,7 @@ ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -19375,7 +19367,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -19401,7 +19393,7 @@ ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -19872,7 +19864,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -19894,7 +19886,7 @@ ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -20365,7 +20357,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -20384,7 +20376,7 @@ ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -20855,7 +20847,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -20873,7 +20865,7 @@ ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -21344,7 +21336,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -21370,7 +21362,7 @@ ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -21841,7 +21833,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -21865,7 +21857,7 @@ ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -22334,7 +22326,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -22356,7 +22348,7 @@ ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -22825,7 +22817,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -22851,7 +22843,7 @@ ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -23320,7 +23312,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -23346,7 +23338,7 @@ ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -23817,7 +23809,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -23839,7 +23831,7 @@ ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -24310,7 +24302,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# 1.2.2 UNIQUE INDEX consisting of two columns
DROP TABLE IF EXISTS t1;
@@ -24330,7 +24322,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -24817,7 +24809,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -24835,7 +24827,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -25322,7 +25314,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -25348,7 +25340,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -25835,7 +25827,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -25859,7 +25851,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -26344,7 +26336,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -26366,7 +26358,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -26851,7 +26843,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -26877,7 +26869,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -27362,7 +27354,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -27388,7 +27380,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -27875,7 +27867,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -27897,7 +27889,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -28384,7 +28376,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -28403,7 +28395,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -28890,7 +28882,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -28908,7 +28900,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -29395,7 +29387,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -29421,7 +29413,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -29908,7 +29900,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -29932,7 +29924,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -30417,7 +30409,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -30439,7 +30431,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -30924,7 +30916,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -30950,7 +30942,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -31435,7 +31427,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -31461,7 +31453,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -31948,7 +31940,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -31970,7 +31962,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -32457,7 +32449,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# 1.2.3 PRIMARY KEY and UNIQUE INDEX consisting of two columns
DROP TABLE IF EXISTS t1;
@@ -32477,7 +32469,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2), ADD PRIMARY KEY(f_int2,f_
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -32949,7 +32941,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -32967,7 +32959,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2), ADD PRIMARY KEY(f_int2,f_
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -33439,7 +33431,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -33465,7 +33457,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2), ADD PRIMARY KEY(f_int2,f_
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -33937,7 +33929,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -33961,7 +33953,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2), ADD PRIMARY KEY(f_int2,f_
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -34431,7 +34423,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -34453,7 +34445,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2), ADD PRIMARY KEY(f_int2,f_
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -34923,7 +34915,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -34949,7 +34941,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2), ADD PRIMARY KEY(f_int2,f_
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -35419,7 +35411,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -35445,7 +35437,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2), ADD PRIMARY KEY(f_int2,f_
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -35917,7 +35909,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -35939,7 +35931,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2), ADD PRIMARY KEY(f_int2,f_
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -36411,7 +36403,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -36430,7 +36422,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), ADD PRIMARY KEY(f_int1,f_
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -36902,7 +36894,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -36920,7 +36912,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), ADD PRIMARY KEY(f_int1,f_
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -37392,7 +37384,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -37418,7 +37410,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), ADD PRIMARY KEY(f_int1,f_
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -37890,7 +37882,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -37914,7 +37906,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), ADD PRIMARY KEY(f_int1,f_
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -38384,7 +38376,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -38406,7 +38398,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), ADD PRIMARY KEY(f_int1,f_
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -38876,7 +38868,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -38902,7 +38894,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), ADD PRIMARY KEY(f_int1,f_
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -39372,7 +39364,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -39398,7 +39390,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), ADD PRIMARY KEY(f_int1,f_
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -39870,7 +39862,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -39892,7 +39884,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), ADD PRIMARY KEY(f_int1,f_
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -40364,7 +40356,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -40383,7 +40375,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), ADD PRIMARY KEY(f_int1,f_
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -40855,7 +40847,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -40873,7 +40865,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), ADD PRIMARY KEY(f_int1,f_
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -41345,7 +41337,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -41371,7 +41363,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), ADD PRIMARY KEY(f_int1,f_
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -41843,7 +41835,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -41867,7 +41859,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), ADD PRIMARY KEY(f_int1,f_
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -42337,7 +42329,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -42359,7 +42351,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), ADD PRIMARY KEY(f_int1,f_
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -42829,7 +42821,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -42855,7 +42847,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), ADD PRIMARY KEY(f_int1,f_
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -43325,7 +43317,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -43351,7 +43343,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), ADD PRIMARY KEY(f_int1,f_
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -43823,7 +43815,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -43845,7 +43837,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), ADD PRIMARY KEY(f_int1,f_
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -44317,7 +44309,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
#========================================================================
@@ -44344,7 +44336,7 @@ ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -44763,7 +44755,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -44781,7 +44773,7 @@ ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -45200,7 +45192,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -45226,7 +45218,7 @@ ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -45645,7 +45637,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -45669,7 +45661,7 @@ ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -46086,7 +46078,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -46108,7 +46100,7 @@ ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -46527,7 +46519,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -46553,7 +46545,7 @@ ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -46970,7 +46962,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -46996,7 +46988,7 @@ ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -47415,7 +47407,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -47437,7 +47429,7 @@ ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -47856,7 +47848,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -47875,7 +47867,7 @@ ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -48294,7 +48286,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -48312,7 +48304,7 @@ ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -48731,7 +48723,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -48757,7 +48749,7 @@ ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -49176,7 +49168,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -49200,7 +49192,7 @@ ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -49617,7 +49609,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -49639,7 +49631,7 @@ ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -50058,7 +50050,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -50084,7 +50076,7 @@ ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -50501,7 +50493,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -50527,7 +50519,7 @@ ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -50946,7 +50938,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -50968,7 +50960,7 @@ ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -51387,7 +51379,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -51406,7 +51398,7 @@ ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -51841,7 +51833,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -51859,7 +51851,7 @@ ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -52294,7 +52286,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -52320,7 +52312,7 @@ ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -52755,7 +52747,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -52779,7 +52771,7 @@ ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -53212,7 +53204,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -53234,7 +53226,7 @@ ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -53669,7 +53661,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -53695,7 +53687,7 @@ ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -54128,7 +54120,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -54154,7 +54146,7 @@ ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -54589,7 +54581,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -54611,7 +54603,7 @@ ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -55046,7 +55038,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
#------------------------------------------------------------------------
# 2.2 Partitioning function contains two columns (f_int1,f_int2)
@@ -55069,7 +55061,7 @@ ALTER TABLE t1 DROP PRIMARY KEY;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -55488,7 +55480,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -55506,7 +55498,7 @@ ALTER TABLE t1 DROP PRIMARY KEY;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -55925,7 +55917,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -55951,7 +55943,7 @@ ALTER TABLE t1 DROP PRIMARY KEY;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -56370,7 +56362,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -56394,7 +56386,7 @@ ALTER TABLE t1 DROP PRIMARY KEY;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -56811,7 +56803,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -56833,7 +56825,7 @@ ALTER TABLE t1 DROP PRIMARY KEY;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -57250,7 +57242,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -57276,7 +57268,7 @@ ALTER TABLE t1 DROP PRIMARY KEY;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -57693,7 +57685,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -57719,7 +57711,7 @@ ALTER TABLE t1 DROP PRIMARY KEY;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -58138,7 +58130,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -58160,7 +58152,7 @@ ALTER TABLE t1 DROP PRIMARY KEY;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -58579,7 +58571,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -58598,7 +58590,7 @@ ALTER TABLE t1 DROP PRIMARY KEY;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -59017,7 +59009,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -59035,7 +59027,7 @@ ALTER TABLE t1 DROP PRIMARY KEY;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -59454,7 +59446,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -59480,7 +59472,7 @@ ALTER TABLE t1 DROP PRIMARY KEY;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -59899,7 +59891,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -59923,7 +59915,7 @@ ALTER TABLE t1 DROP PRIMARY KEY;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -60340,7 +60332,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -60362,7 +60354,7 @@ ALTER TABLE t1 DROP PRIMARY KEY;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -60779,7 +60771,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -60805,7 +60797,7 @@ ALTER TABLE t1 DROP PRIMARY KEY;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -61222,7 +61214,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -61248,7 +61240,7 @@ ALTER TABLE t1 DROP PRIMARY KEY;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -61667,7 +61659,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -61689,7 +61681,7 @@ ALTER TABLE t1 DROP PRIMARY KEY;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -62108,7 +62100,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# 2.2.2 DROP UNIQUE INDEX consisting of two columns
DROP TABLE IF EXISTS t1;
@@ -62128,7 +62120,7 @@ ALTER TABLE t1 DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -62563,7 +62555,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -62581,7 +62573,7 @@ ALTER TABLE t1 DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -63016,7 +63008,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -63042,7 +63034,7 @@ ALTER TABLE t1 DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -63477,7 +63469,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -63501,7 +63493,7 @@ ALTER TABLE t1 DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -63934,7 +63926,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -63956,7 +63948,7 @@ ALTER TABLE t1 DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -64389,7 +64381,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -64415,7 +64407,7 @@ ALTER TABLE t1 DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -64848,7 +64840,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -64874,7 +64866,7 @@ ALTER TABLE t1 DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -65309,7 +65301,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -65331,7 +65323,7 @@ ALTER TABLE t1 DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -65766,7 +65758,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -65785,7 +65777,7 @@ ALTER TABLE t1 DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -66220,7 +66212,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -66238,7 +66230,7 @@ ALTER TABLE t1 DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -66673,7 +66665,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -66699,7 +66691,7 @@ ALTER TABLE t1 DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -67134,7 +67126,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -67158,7 +67150,7 @@ ALTER TABLE t1 DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -67591,7 +67583,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -67613,7 +67605,7 @@ ALTER TABLE t1 DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -68046,7 +68038,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -68072,7 +68064,7 @@ ALTER TABLE t1 DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -68505,7 +68497,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -68531,7 +68523,7 @@ ALTER TABLE t1 DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -68966,7 +68958,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -68988,7 +68980,7 @@ ALTER TABLE t1 DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -69423,7 +69415,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# 2.2.3 DROP PRIMARY KEY + UNIQUE INDEX consisting of two columns
DROP TABLE IF EXISTS t1;
@@ -69443,7 +69435,7 @@ ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -69862,7 +69854,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -69880,7 +69872,7 @@ ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -70299,7 +70291,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -70325,7 +70317,7 @@ ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -70744,7 +70736,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -70768,7 +70760,7 @@ ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -71185,7 +71177,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -71207,7 +71199,7 @@ ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -71624,7 +71616,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -71650,7 +71642,7 @@ ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -72067,7 +72059,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -72093,7 +72085,7 @@ ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -72512,7 +72504,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -72534,7 +72526,7 @@ ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -72953,7 +72945,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -72972,7 +72964,7 @@ ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -73391,7 +73383,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -73409,7 +73401,7 @@ ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -73828,7 +73820,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -73854,7 +73846,7 @@ ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -74273,7 +74265,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -74297,7 +74289,7 @@ ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -74714,7 +74706,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -74736,7 +74728,7 @@ ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -75153,7 +75145,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -75179,7 +75171,7 @@ ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -75596,7 +75588,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -75622,7 +75614,7 @@ ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -76041,7 +76033,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -76063,7 +76055,7 @@ ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -76482,7 +76474,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -76501,7 +76493,7 @@ ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -76936,7 +76928,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -76954,7 +76946,7 @@ ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -77389,7 +77381,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -77415,7 +77407,7 @@ ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -77850,7 +77842,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -77874,7 +77866,7 @@ ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -78307,7 +78299,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -78329,7 +78321,7 @@ ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -78762,7 +78754,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -78788,7 +78780,7 @@ ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -79221,7 +79213,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -79247,7 +79239,7 @@ ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -79682,7 +79674,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -79704,7 +79696,7 @@ ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -80139,7 +80131,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP VIEW IF EXISTS v1;
DROP TABLE IF EXISTS t1;
diff --git a/mysql-test/suite/parts/r/partition_alter1_myisam.result b/mysql-test/suite/parts/r/partition_alter1_myisam.result
index b2f1d657151..1058342aa8d 100644
--- a/mysql-test/suite/parts/r/partition_alter1_myisam.result
+++ b/mysql-test/suite/parts/r/partition_alter1_myisam.result
@@ -2,14 +2,6 @@ SET @max_row = 20;
SET @@session.storage_engine = 'MyISAM';
#------------------------------------------------------------------------
-# There are several testcases disabled because of the open bugs
-# #15890
-# The expected results suffer from the following bugs
-# harmless #17455, #19305
-# which cannot be suppressed because of technical reasons.
-#------------------------------------------------------------------------
-
-#------------------------------------------------------------------------
# 0. Setting of auxiliary variables + Creation of an auxiliary tables
# needed in many testcases
#------------------------------------------------------------------------
@@ -31,7 +23,7 @@ DROP TABLE IF EXISTS t0_definition;
CREATE TABLE t0_definition (
state CHAR(3),
create_command VARBINARY(5000),
-file_list VARBINARY(5000),
+file_list VARBINARY(10000),
PRIMARY KEY (state)
) ENGINE = MEMORY;
DROP TABLE IF EXISTS t0_aux;
@@ -230,7 +222,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -727,7 +719,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -745,7 +737,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -1248,7 +1240,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -1274,7 +1266,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -1783,7 +1775,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -1807,7 +1799,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -2310,7 +2302,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -2332,7 +2324,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -2841,7 +2833,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -2867,7 +2859,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -3374,7 +3366,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -3400,7 +3392,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -3909,7 +3901,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -3931,7 +3923,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -4442,7 +4434,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -4461,7 +4453,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -4958,7 +4950,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -4976,7 +4968,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -5479,7 +5471,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -5505,7 +5497,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -6014,7 +6006,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -6038,7 +6030,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -6541,7 +6533,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -6563,7 +6555,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -7072,7 +7064,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -7098,7 +7090,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -7605,7 +7597,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -7631,7 +7623,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -8140,7 +8132,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -8162,7 +8154,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -8673,7 +8665,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
#------------------------------------------------------------------------
# 1.2 ADD PRIMARY KEY or UNIQUE INDEX to table with two columns
@@ -8697,7 +8689,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -9194,7 +9186,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -9212,7 +9204,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -9715,7 +9707,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -9741,7 +9733,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -10250,7 +10242,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -10274,7 +10266,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -10777,7 +10769,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -10799,7 +10791,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -11306,7 +11298,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -11332,7 +11324,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -11839,7 +11831,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -11865,7 +11857,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -12374,7 +12366,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -12396,7 +12388,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -12907,7 +12899,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -12926,7 +12918,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -13423,7 +13415,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -13441,7 +13433,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -13944,7 +13936,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -13970,7 +13962,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -14479,7 +14471,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -14503,7 +14495,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -15006,7 +14998,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -15028,7 +15020,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -15535,7 +15527,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -15561,7 +15553,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -16068,7 +16060,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -16094,7 +16086,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -16603,7 +16595,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -16625,7 +16617,7 @@ ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -17136,7 +17128,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
#========================================================================
@@ -17162,7 +17154,7 @@ ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -17607,7 +17599,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -17625,7 +17617,7 @@ ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -18076,7 +18068,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -18102,7 +18094,7 @@ ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -18559,7 +18551,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -18583,7 +18575,7 @@ ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -19034,7 +19026,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -19056,7 +19048,7 @@ ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -19513,7 +19505,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -19539,7 +19531,7 @@ ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -19994,7 +19986,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -20020,7 +20012,7 @@ ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -20477,7 +20469,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -20499,7 +20491,7 @@ ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -20958,7 +20950,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
#------------------------------------------------------------------------
# 2.2 Partitioning function contains two columns (f_int1,f_int2)
@@ -20981,7 +20973,7 @@ ALTER TABLE t1 DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -21426,7 +21418,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -21444,7 +21436,7 @@ ALTER TABLE t1 DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -21895,7 +21887,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -21921,7 +21913,7 @@ ALTER TABLE t1 DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -22378,7 +22370,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -22402,7 +22394,7 @@ ALTER TABLE t1 DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -22853,7 +22845,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -22875,7 +22867,7 @@ ALTER TABLE t1 DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -23330,7 +23322,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -23356,7 +23348,7 @@ ALTER TABLE t1 DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -23811,7 +23803,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -23837,7 +23829,7 @@ ALTER TABLE t1 DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -24294,7 +24286,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -24316,7 +24308,7 @@ ALTER TABLE t1 DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -24775,7 +24767,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -24794,7 +24786,7 @@ ALTER TABLE t1 DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -25239,7 +25231,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -25257,7 +25249,7 @@ ALTER TABLE t1 DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -25708,7 +25700,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -25734,7 +25726,7 @@ ALTER TABLE t1 DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -26191,7 +26183,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -26215,7 +26207,7 @@ ALTER TABLE t1 DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -26666,7 +26658,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -26688,7 +26680,7 @@ ALTER TABLE t1 DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -27143,7 +27135,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -27169,7 +27161,7 @@ ALTER TABLE t1 DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -27624,7 +27616,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -27650,7 +27642,7 @@ ALTER TABLE t1 DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -28107,7 +28099,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -28129,7 +28121,7 @@ ALTER TABLE t1 DROP INDEX uidx1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -28588,7 +28580,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -28607,7 +28599,7 @@ ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -29052,7 +29044,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -29070,7 +29062,7 @@ ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -29521,7 +29513,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -29547,7 +29539,7 @@ ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -30004,7 +29996,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -30028,7 +30020,7 @@ ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -30479,7 +30471,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -30501,7 +30493,7 @@ ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -30956,7 +30948,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -30982,7 +30974,7 @@ ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -31437,7 +31429,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -31463,7 +31455,7 @@ ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -31920,7 +31912,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -31942,7 +31934,7 @@ ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -32401,7 +32393,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP VIEW IF EXISTS v1;
DROP TABLE IF EXISTS t1;
diff --git a/mysql-test/suite/parts/r/partition_alter2_innodb.result b/mysql-test/suite/parts/r/partition_alter2_innodb.result
index cdddae40467..0bb44bb2a1d 100644
--- a/mysql-test/suite/parts/r/partition_alter2_innodb.result
+++ b/mysql-test/suite/parts/r/partition_alter2_innodb.result
@@ -2,14 +2,6 @@ SET @max_row = 20;
SET @@session.storage_engine = 'InnoDB';
#------------------------------------------------------------------------
-# There are several testcases disabled because of the open bugs
-# #15890
-# The expected results suffer from the following bugs
-# harmless #17455, #19305
-# which cannot be suppressed because of technical reasons.
-#------------------------------------------------------------------------
-
-#------------------------------------------------------------------------
# 0. Setting of auxiliary variables + Creation of an auxiliary tables
# needed in many testcases
#------------------------------------------------------------------------
@@ -31,7 +23,7 @@ DROP TABLE IF EXISTS t0_definition;
CREATE TABLE t0_definition (
state CHAR(3),
create_command VARBINARY(5000),
-file_list VARBINARY(5000),
+file_list VARBINARY(10000),
PRIMARY KEY (state)
) ENGINE = MEMORY;
DROP TABLE IF EXISTS t0_aux;
@@ -71,7 +63,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -506,7 +498,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -524,7 +516,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -959,7 +951,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -985,7 +977,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -1420,7 +1412,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -1444,7 +1436,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -1877,7 +1869,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -1899,7 +1891,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -2334,7 +2326,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -2360,7 +2352,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -2793,7 +2785,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -2819,7 +2811,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -3254,7 +3246,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -3276,7 +3268,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -3711,7 +3703,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# 1.1.2 PRIMARY KEY exists
DROP TABLE IF EXISTS t1;
@@ -3731,7 +3723,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -4202,7 +4194,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -4220,7 +4212,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -4691,7 +4683,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -4717,7 +4709,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -5188,7 +5180,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -5212,7 +5204,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -5681,7 +5673,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -5703,7 +5695,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -6174,7 +6166,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -6200,7 +6192,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -6669,7 +6661,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -6695,7 +6687,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -7166,7 +7158,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -7188,7 +7180,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -7659,7 +7651,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -7678,7 +7670,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -8149,7 +8141,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -8167,7 +8159,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -8638,7 +8630,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -8664,7 +8656,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -9135,7 +9127,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -9159,7 +9151,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -9628,7 +9620,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -9650,7 +9642,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -10121,7 +10113,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -10147,7 +10139,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -10616,7 +10608,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -10642,7 +10634,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -11113,7 +11105,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -11135,7 +11127,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -11606,7 +11598,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# 1.1.3 UNIQUE INDEX exists
DROP TABLE IF EXISTS t1;
@@ -11626,7 +11618,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -12113,7 +12105,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -12131,7 +12123,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -12618,7 +12610,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -12644,7 +12636,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -13131,7 +13123,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -13155,7 +13147,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -13640,7 +13632,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -13662,7 +13654,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -14149,7 +14141,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -14175,7 +14167,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -14660,7 +14652,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -14686,7 +14678,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -15173,7 +15165,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -15195,7 +15187,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -15682,7 +15674,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -15701,7 +15693,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -16188,7 +16180,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -16206,7 +16198,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -16693,7 +16685,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -16719,7 +16711,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -17206,7 +17198,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -17230,7 +17222,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -17715,7 +17707,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -17737,7 +17729,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -18224,7 +18216,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -18250,7 +18242,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -18735,7 +18727,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -18761,7 +18753,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -19248,7 +19240,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -19270,7 +19262,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -19757,7 +19749,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
#------------------------------------------------------------------------
# 1.3 ALTER column f_int1 and f_int2
@@ -19781,7 +19773,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -20216,7 +20208,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -20234,7 +20226,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -20669,7 +20661,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -20695,7 +20687,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -21130,7 +21122,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -21154,7 +21146,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -21587,7 +21579,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -21609,7 +21601,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -22044,7 +22036,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -22070,7 +22062,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -22503,7 +22495,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -22529,7 +22521,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -22964,7 +22956,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -22986,7 +22978,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -23421,7 +23413,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -23440,7 +23432,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -23875,7 +23867,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -23893,7 +23885,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -24328,7 +24320,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -24354,7 +24346,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -24789,7 +24781,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -24813,7 +24805,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -25246,7 +25238,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -25268,7 +25260,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -25701,7 +25693,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -25727,7 +25719,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -26160,7 +26152,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -26186,7 +26178,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -26621,7 +26613,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -26643,7 +26635,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -27078,7 +27070,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# 1.3.2 PRIMARY KEY exists
DROP TABLE IF EXISTS t1;
@@ -27098,7 +27090,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -27569,7 +27561,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -27587,7 +27579,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -28058,7 +28050,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -28084,7 +28076,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -28555,7 +28547,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -28579,7 +28571,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -29048,7 +29040,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -29070,7 +29062,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -29541,7 +29533,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -29567,7 +29559,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -30036,7 +30028,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -30062,7 +30054,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -30533,7 +30525,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -30555,7 +30547,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -31026,7 +31018,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -31045,7 +31037,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -31516,7 +31508,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -31534,7 +31526,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -32005,7 +31997,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -32031,7 +32023,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -32502,7 +32494,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -32526,7 +32518,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -32995,7 +32987,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -33017,7 +33009,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -33486,7 +33478,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -33512,7 +33504,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -33981,7 +33973,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -34007,7 +33999,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -34478,7 +34470,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -34500,7 +34492,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -34971,7 +34963,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -34990,7 +34982,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -35461,7 +35453,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -35479,7 +35471,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -35950,7 +35942,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -35976,7 +35968,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -36447,7 +36439,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -36471,7 +36463,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -36940,7 +36932,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -36962,7 +36954,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -37433,7 +37425,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -37459,7 +37451,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -37928,7 +37920,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -37954,7 +37946,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -38425,7 +38417,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -38447,7 +38439,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -38918,7 +38910,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -38937,7 +38929,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -39408,7 +39400,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -39426,7 +39418,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -39897,7 +39889,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -39923,7 +39915,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -40394,7 +40386,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -40418,7 +40410,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -40887,7 +40879,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -40909,7 +40901,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -41378,7 +41370,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -41404,7 +41396,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -41873,7 +41865,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -41899,7 +41891,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -42370,7 +42362,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -42392,7 +42384,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -42863,7 +42855,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# 1.3.3 UNIQUE INDEX exists
DROP TABLE IF EXISTS t1;
@@ -42883,7 +42875,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -43370,7 +43362,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -43388,7 +43380,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -43875,7 +43867,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -43901,7 +43893,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -44388,7 +44380,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -44412,7 +44404,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -44897,7 +44889,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -44919,7 +44911,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -45406,7 +45398,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -45432,7 +45424,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -45917,7 +45909,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -45943,7 +45935,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -46430,7 +46422,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -46452,7 +46444,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -46939,7 +46931,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -46958,7 +46950,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -47445,7 +47437,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -47463,7 +47455,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -47950,7 +47942,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -47976,7 +47968,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -48463,7 +48455,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -48487,7 +48479,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -48972,7 +48964,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -48994,7 +48986,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -49479,7 +49471,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -49505,7 +49497,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -49990,7 +49982,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -50016,7 +50008,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -50503,7 +50495,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -50525,7 +50517,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -51012,7 +51004,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -51031,7 +51023,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -51518,7 +51510,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -51536,7 +51528,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -52023,7 +52015,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -52049,7 +52041,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -52536,7 +52528,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -52560,7 +52552,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -53045,7 +53037,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -53067,7 +53059,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -53554,7 +53546,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -53580,7 +53572,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -54065,7 +54057,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -54091,7 +54083,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -54578,7 +54570,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -54600,7 +54592,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -55087,7 +55079,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -55106,7 +55098,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -55593,7 +55585,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -55611,7 +55603,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -56098,7 +56090,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -56124,7 +56116,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -56611,7 +56603,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -56635,7 +56627,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -57120,7 +57112,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -57142,7 +57134,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -57627,7 +57619,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -57653,7 +57645,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -58138,7 +58130,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -58164,7 +58156,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -58651,7 +58643,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -58673,7 +58665,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -59160,7 +59152,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
#========================================================================
@@ -59188,7 +59180,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -59625,7 +59617,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -59643,7 +59635,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -60080,7 +60072,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -60106,7 +60098,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -60543,7 +60535,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -60567,7 +60559,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -61000,7 +60992,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -61022,7 +61014,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -61459,7 +61451,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -61485,7 +61477,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -61918,7 +61910,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -61944,7 +61936,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -62381,7 +62373,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -62403,7 +62395,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -62840,7 +62832,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -62859,7 +62851,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -63332,7 +63324,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -63350,7 +63342,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -63823,7 +63815,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -63849,7 +63841,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -64322,7 +64314,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -64346,7 +64338,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -64815,7 +64807,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -64837,7 +64829,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -65310,7 +65302,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -65336,7 +65328,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -65805,7 +65797,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -65831,7 +65823,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -66304,7 +66296,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -66326,7 +66318,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -66799,7 +66791,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -66818,7 +66810,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -67291,7 +67283,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -67309,7 +67301,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -67782,7 +67774,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -67808,7 +67800,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -68281,7 +68273,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -68305,7 +68297,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -68774,7 +68766,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -68796,7 +68788,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -69269,7 +69261,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -69295,7 +69287,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -69764,7 +69756,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -69790,7 +69782,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -70263,7 +70255,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -70285,7 +70277,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -70758,7 +70750,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# 2.1.3 UNIQUE INDEX exists
DROP TABLE IF EXISTS t1;
@@ -70778,7 +70770,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -71267,7 +71259,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -71285,7 +71277,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -71774,7 +71766,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -71800,7 +71792,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -72289,7 +72281,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -72313,7 +72305,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -72798,7 +72790,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -72820,7 +72812,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -73309,7 +73301,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -73335,7 +73327,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -73820,7 +73812,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -73846,7 +73838,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -74335,7 +74327,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -74357,7 +74349,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -74846,7 +74838,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -74865,7 +74857,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -75354,7 +75346,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -75372,7 +75364,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -75861,7 +75853,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -75887,7 +75879,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -76376,7 +76368,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -76400,7 +76392,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -76885,7 +76877,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -76907,7 +76899,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -77396,7 +77388,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -77422,7 +77414,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -77907,7 +77899,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -77933,7 +77925,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -78422,7 +78414,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -78444,7 +78436,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -78933,7 +78925,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
#------------------------------------------------------------------------
# 2.3 ALTER column f_int1 and f_int2 used in partitioning function
@@ -78956,7 +78948,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -79394,7 +79386,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -79412,7 +79404,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -79850,7 +79842,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -79876,7 +79868,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -80314,7 +80306,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -80338,7 +80330,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -80776,7 +80768,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -80798,7 +80790,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -81236,7 +81228,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -81262,7 +81254,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -81700,7 +81692,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -81726,7 +81718,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -82164,7 +82156,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -82186,7 +82178,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -82624,7 +82616,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -82643,7 +82635,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -83081,7 +83073,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -83099,7 +83091,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -83537,7 +83529,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -83563,7 +83555,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -84001,7 +83993,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -84025,7 +84017,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -84463,7 +84455,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -84485,7 +84477,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -84923,7 +84915,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -84949,7 +84941,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -85387,7 +85379,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -85413,7 +85405,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -85851,7 +85843,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -85873,7 +85865,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -86311,7 +86303,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# 2.3.2 PRIMARY KEY exists
DROP TABLE IF EXISTS t1;
@@ -86331,7 +86323,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -86805,7 +86797,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -86823,7 +86815,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -87297,7 +87289,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -87323,7 +87315,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -87797,7 +87789,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -87821,7 +87813,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -88295,7 +88287,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -88317,7 +88309,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -88791,7 +88783,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -88817,7 +88809,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -89291,7 +89283,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -89317,7 +89309,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -89791,7 +89783,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -89813,7 +89805,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -90287,7 +90279,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -90306,7 +90298,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -90780,7 +90772,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -90798,7 +90790,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -91272,7 +91264,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -91298,7 +91290,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -91772,7 +91764,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -91796,7 +91788,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -92270,7 +92262,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -92292,7 +92284,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -92766,7 +92758,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -92792,7 +92784,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -93266,7 +93258,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -93292,7 +93284,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -93766,7 +93758,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -93788,7 +93780,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -94262,7 +94254,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -94281,7 +94273,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -94755,7 +94747,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -94773,7 +94765,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -95247,7 +95239,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -95273,7 +95265,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -95747,7 +95739,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -95771,7 +95763,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -96245,7 +96237,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -96267,7 +96259,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -96741,7 +96733,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -96767,7 +96759,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -97241,7 +97233,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -97267,7 +97259,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -97741,7 +97733,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -97763,7 +97755,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -98237,7 +98229,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -98256,7 +98248,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -98730,7 +98722,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -98748,7 +98740,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -99222,7 +99214,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -99248,7 +99240,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -99722,7 +99714,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -99746,7 +99738,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -100220,7 +100212,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -100242,7 +100234,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -100716,7 +100708,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -100742,7 +100734,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -101216,7 +101208,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -101242,7 +101234,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -101716,7 +101708,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -101738,7 +101730,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -102212,7 +102204,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# 2.3.3 UNIQUE INDEX exists
DROP TABLE IF EXISTS t1;
@@ -102232,7 +102224,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -102722,7 +102714,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -102740,7 +102732,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -103230,7 +103222,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -103256,7 +103248,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -103746,7 +103738,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -103770,7 +103762,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -104260,7 +104252,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -104282,7 +104274,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -104772,7 +104764,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -104798,7 +104790,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -105288,7 +105280,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -105314,7 +105306,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -105804,7 +105796,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -105826,7 +105818,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -106316,7 +106308,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -106335,7 +106327,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -106825,7 +106817,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -106843,7 +106835,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -107333,7 +107325,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -107359,7 +107351,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -107849,7 +107841,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -107873,7 +107865,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -108363,7 +108355,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -108385,7 +108377,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -108875,7 +108867,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -108901,7 +108893,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -109391,7 +109383,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -109417,7 +109409,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -109907,7 +109899,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -109929,7 +109921,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -110419,7 +110411,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -110438,7 +110430,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -110928,7 +110920,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -110946,7 +110938,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -111436,7 +111428,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -111462,7 +111454,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -111952,7 +111944,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -111976,7 +111968,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -112466,7 +112458,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -112488,7 +112480,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -112978,7 +112970,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -113004,7 +112996,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -113494,7 +113486,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -113520,7 +113512,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -114010,7 +114002,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -114032,7 +114024,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -114522,7 +114514,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -114541,7 +114533,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -115031,7 +115023,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -115049,7 +115041,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -115539,7 +115531,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -115565,7 +115557,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -116055,7 +116047,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -116079,7 +116071,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -116569,7 +116561,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -116591,7 +116583,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -117081,7 +117073,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -117107,7 +117099,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -117597,7 +117589,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -117623,7 +117615,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -118113,7 +118105,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -118135,7 +118127,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -118625,7 +118617,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP VIEW IF EXISTS v1;
DROP TABLE IF EXISTS t1;
diff --git a/mysql-test/suite/parts/r/partition_alter2_myisam.result b/mysql-test/suite/parts/r/partition_alter2_myisam.result
index 741ce2d8963..18abf7380c3 100644
--- a/mysql-test/suite/parts/r/partition_alter2_myisam.result
+++ b/mysql-test/suite/parts/r/partition_alter2_myisam.result
@@ -2,14 +2,6 @@ SET @max_row = 20;
SET @@session.storage_engine = 'MyISAM';
#------------------------------------------------------------------------
-# There are several testcases disabled because of the open bugs
-# #15890
-# The expected results suffer from the following bugs
-# harmless #17455, #19305
-# which cannot be suppressed because of technical reasons.
-#------------------------------------------------------------------------
-
-#------------------------------------------------------------------------
# 0. Setting of auxiliary variables + Creation of an auxiliary tables
# needed in many testcases
#------------------------------------------------------------------------
@@ -31,7 +23,7 @@ DROP TABLE IF EXISTS t0_definition;
CREATE TABLE t0_definition (
state CHAR(3),
create_command VARBINARY(5000),
-file_list VARBINARY(5000),
+file_list VARBINARY(10000),
PRIMARY KEY (state)
) ENGINE = MEMORY;
DROP TABLE IF EXISTS t0_aux;
@@ -71,7 +63,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -516,7 +508,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -534,7 +526,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -985,7 +977,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -1011,7 +1003,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -1468,7 +1460,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -1492,7 +1484,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -1943,7 +1935,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -1965,7 +1957,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -2422,7 +2414,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -2448,7 +2440,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -2903,7 +2895,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -2929,7 +2921,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -3386,7 +3378,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -3408,7 +3400,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -3867,7 +3859,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# 1.1.3 UNIQUE INDEX exists
DROP TABLE IF EXISTS t1;
@@ -3887,7 +3879,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -4384,7 +4376,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -4402,7 +4394,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -4905,7 +4897,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -4931,7 +4923,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -5440,7 +5432,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -5464,7 +5456,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -5967,7 +5959,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -5989,7 +5981,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -6498,7 +6490,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -6524,7 +6516,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -7031,7 +7023,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -7057,7 +7049,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -7566,7 +7558,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -7588,7 +7580,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -8099,7 +8091,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -8118,7 +8110,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -8615,7 +8607,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -8633,7 +8625,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -9136,7 +9128,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -9162,7 +9154,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -9671,7 +9663,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -9695,7 +9687,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -10198,7 +10190,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -10220,7 +10212,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -10729,7 +10721,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -10755,7 +10747,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -11262,7 +11254,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -11288,7 +11280,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -11797,7 +11789,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -11819,7 +11811,7 @@ ALTER TABLE t1 MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -12330,7 +12322,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
#------------------------------------------------------------------------
# 1.3 ALTER column f_int1 and f_int2
@@ -12354,7 +12346,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -12799,7 +12791,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -12817,7 +12809,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -13268,7 +13260,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -13294,7 +13286,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -13751,7 +13743,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -13775,7 +13767,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -14226,7 +14218,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -14248,7 +14240,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -14705,7 +14697,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -14731,7 +14723,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -15186,7 +15178,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -15212,7 +15204,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -15669,7 +15661,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -15691,7 +15683,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -16150,7 +16142,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -16169,7 +16161,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -16614,7 +16606,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -16632,7 +16624,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -17083,7 +17075,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -17109,7 +17101,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -17566,7 +17558,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -17590,7 +17582,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -18041,7 +18033,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -18063,7 +18055,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -18518,7 +18510,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -18544,7 +18536,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -18999,7 +18991,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -19025,7 +19017,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -19482,7 +19474,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -19504,7 +19496,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -19963,7 +19955,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# 1.3.3 UNIQUE INDEX exists
DROP TABLE IF EXISTS t1;
@@ -19983,7 +19975,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -20480,7 +20472,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -20498,7 +20490,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -21001,7 +20993,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -21027,7 +21019,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -21536,7 +21528,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -21560,7 +21552,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -22063,7 +22055,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -22085,7 +22077,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -22594,7 +22586,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -22620,7 +22612,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -23127,7 +23119,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -23153,7 +23145,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -23662,7 +23654,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -23684,7 +23676,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -24195,7 +24187,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -24214,7 +24206,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -24711,7 +24703,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -24729,7 +24721,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -25232,7 +25224,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -25258,7 +25250,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -25767,7 +25759,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -25791,7 +25783,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -26294,7 +26286,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -26316,7 +26308,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -26823,7 +26815,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -26849,7 +26841,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -27356,7 +27348,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -27382,7 +27374,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -27891,7 +27883,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -27913,7 +27905,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -28424,7 +28416,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -28443,7 +28435,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -28940,7 +28932,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -28958,7 +28950,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -29461,7 +29453,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -29487,7 +29479,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -29996,7 +29988,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -30020,7 +30012,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -30523,7 +30515,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -30545,7 +30537,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -31054,7 +31046,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -31080,7 +31072,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -31587,7 +31579,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -31613,7 +31605,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -32122,7 +32114,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -32144,7 +32136,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -32655,7 +32647,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -32674,7 +32666,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -33171,7 +33163,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -33189,7 +33181,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -33692,7 +33684,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -33718,7 +33710,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -34227,7 +34219,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -34251,7 +34243,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -34754,7 +34746,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -34776,7 +34768,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -35283,7 +35275,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -35309,7 +35301,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -35816,7 +35808,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -35842,7 +35834,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -36351,7 +36343,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -36373,7 +36365,7 @@ ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -36884,7 +36876,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
#========================================================================
@@ -36912,7 +36904,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -37359,7 +37351,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -37377,7 +37369,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -37830,7 +37822,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -37856,7 +37848,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -38315,7 +38307,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -38339,7 +38331,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -38790,7 +38782,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -38812,7 +38804,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -39271,7 +39263,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -39297,7 +39289,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -39752,7 +39744,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -39778,7 +39770,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -40237,7 +40229,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -40259,7 +40251,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -40720,7 +40712,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# 2.1.3 UNIQUE INDEX exists
DROP TABLE IF EXISTS t1;
@@ -40740,7 +40732,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -41239,7 +41231,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -41257,7 +41249,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -41762,7 +41754,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -41788,7 +41780,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -42299,7 +42291,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -42323,7 +42315,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -42826,7 +42818,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -42848,7 +42840,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -43359,7 +43351,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -43385,7 +43377,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -43892,7 +43884,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -43918,7 +43910,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -44429,7 +44421,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -44451,7 +44443,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -44964,7 +44956,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -44983,7 +44975,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -45482,7 +45474,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -45500,7 +45492,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -46005,7 +45997,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -46031,7 +46023,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -46542,7 +46534,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -46566,7 +46558,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -47069,7 +47061,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -47091,7 +47083,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -47602,7 +47594,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -47628,7 +47620,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -48135,7 +48127,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -48161,7 +48153,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -48672,7 +48664,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -48694,7 +48686,7 @@ ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -49207,7 +49199,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
#------------------------------------------------------------------------
# 2.3 ALTER column f_int1 and f_int2 used in partitioning function
@@ -49230,7 +49222,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -49678,7 +49670,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -49696,7 +49688,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -50150,7 +50142,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -50176,7 +50168,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -50636,7 +50628,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -50660,7 +50652,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -51116,7 +51108,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -51138,7 +51130,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -51598,7 +51590,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -51624,7 +51616,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -52084,7 +52076,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -52110,7 +52102,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -52570,7 +52562,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -52592,7 +52584,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -53054,7 +53046,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -53073,7 +53065,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -53521,7 +53513,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -53539,7 +53531,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -53993,7 +53985,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -54019,7 +54011,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -54479,7 +54471,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -54503,7 +54495,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -54959,7 +54951,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -54981,7 +54973,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -55441,7 +55433,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -55467,7 +55459,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -55927,7 +55919,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -55953,7 +55945,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -56413,7 +56405,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -56435,7 +56427,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -56897,7 +56889,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# 2.3.3 UNIQUE INDEX exists
DROP TABLE IF EXISTS t1;
@@ -56917,7 +56909,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -57417,7 +57409,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -57435,7 +57427,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -57941,7 +57933,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -57967,7 +57959,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -58479,7 +58471,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -58503,7 +58495,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -59011,7 +59003,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -59033,7 +59025,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -59545,7 +59537,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -59571,7 +59563,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -60083,7 +60075,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -60109,7 +60101,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -60621,7 +60613,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -60643,7 +60635,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -61157,7 +61149,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -61176,7 +61168,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -61676,7 +61668,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -61694,7 +61686,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -62200,7 +62192,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -62226,7 +62218,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -62738,7 +62730,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -62762,7 +62754,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -63270,7 +63262,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -63292,7 +63284,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -63804,7 +63796,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -63830,7 +63822,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -64342,7 +64334,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -64368,7 +64360,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -64880,7 +64872,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -64902,7 +64894,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -65416,7 +65408,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -65435,7 +65427,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -65935,7 +65927,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -65953,7 +65945,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -66459,7 +66451,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -66485,7 +66477,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -66997,7 +66989,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -67021,7 +67013,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -67529,7 +67521,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -67551,7 +67543,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -68063,7 +68055,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -68089,7 +68081,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -68601,7 +68593,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -68627,7 +68619,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -69139,7 +69131,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -69161,7 +69153,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -69675,7 +69667,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -69694,7 +69686,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -70194,7 +70186,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -70212,7 +70204,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -70718,7 +70710,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -70744,7 +70736,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -71256,7 +71248,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -71280,7 +71272,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -71788,7 +71780,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -71810,7 +71802,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -72322,7 +72314,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -72348,7 +72340,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -72860,7 +72852,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -72886,7 +72878,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -73398,7 +73390,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -73420,7 +73412,7 @@ ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -73934,7 +73926,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP VIEW IF EXISTS v1;
DROP TABLE IF EXISTS t1;
diff --git a/mysql-test/suite/parts/r/partition_alter3_innodb.result b/mysql-test/suite/parts/r/partition_alter3_innodb.result
index 7228462c61d..2ca1e783839 100644
--- a/mysql-test/suite/parts/r/partition_alter3_innodb.result
+++ b/mysql-test/suite/parts/r/partition_alter3_innodb.result
@@ -2,14 +2,6 @@ SET @max_row = 20;
SET @@session.storage_engine = 'InnoDB';
#------------------------------------------------------------------------
-# There are several testcases disabled because of the open bugs
-# #15890
-# The expected results suffer from the following bugs
-# harmless #17455, #19305
-# which cannot be suppressed because of technical reasons.
-#------------------------------------------------------------------------
-
-#------------------------------------------------------------------------
# 0. Setting of auxiliary variables + Creation of an auxiliary tables
# needed in many testcases
#------------------------------------------------------------------------
@@ -31,7 +23,7 @@ DROP TABLE IF EXISTS t0_definition;
CREATE TABLE t0_definition (
state CHAR(3),
create_command VARBINARY(5000),
-file_list VARBINARY(5000),
+file_list VARBINARY(10000),
PRIMARY KEY (state)
) ENGINE = MEMORY;
DROP TABLE IF EXISTS t0_aux;
@@ -321,7 +313,7 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
ALTER TABLE t1 REMOVE PARTITIONING;
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
@@ -600,7 +592,7 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
ALTER TABLE t1 REMOVE PARTITIONING;
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
diff --git a/mysql-test/suite/parts/r/partition_alter3_myisam.result b/mysql-test/suite/parts/r/partition_alter3_myisam.result
index c24858aa2ca..5684ca89b1c 100644
--- a/mysql-test/suite/parts/r/partition_alter3_myisam.result
+++ b/mysql-test/suite/parts/r/partition_alter3_myisam.result
@@ -2,14 +2,6 @@ SET @max_row = 20;
SET @@session.storage_engine = 'MyISAM';
#------------------------------------------------------------------------
-# There are several testcases disabled because of the open bugs
-# #15890
-# The expected results suffer from the following bugs
-# harmless #17455, #19305
-# which cannot be suppressed because of technical reasons.
-#------------------------------------------------------------------------
-
-#------------------------------------------------------------------------
# 0. Setting of auxiliary variables + Creation of an auxiliary tables
# needed in many testcases
#------------------------------------------------------------------------
@@ -31,7 +23,7 @@ DROP TABLE IF EXISTS t0_definition;
CREATE TABLE t0_definition (
state CHAR(3),
create_command VARBINARY(5000),
-file_list VARBINARY(5000),
+file_list VARBINARY(10000),
PRIMARY KEY (state)
) ENGINE = MEMORY;
DROP TABLE IF EXISTS t0_aux;
diff --git a/mysql-test/suite/parts/r/partition_alter4_innodb.result b/mysql-test/suite/parts/r/partition_alter4_innodb.result
index 2c5f57d8a46..0e6f0c22f93 100644
--- a/mysql-test/suite/parts/r/partition_alter4_innodb.result
+++ b/mysql-test/suite/parts/r/partition_alter4_innodb.result
@@ -2,14 +2,6 @@ SET @max_row = 20;
SET @@session.storage_engine = 'InnoDB';
#------------------------------------------------------------------------
-# There are several testcases disabled because of the open bugs
-# #15890
-# The expected results suffer from the following bugs
-# harmless #17455, #19305
-# which cannot be suppressed because of technical reasons.
-#------------------------------------------------------------------------
-
-#------------------------------------------------------------------------
# 0. Setting of auxiliary variables + Creation of an auxiliary tables
# needed in many testcases
#------------------------------------------------------------------------
@@ -31,7 +23,7 @@ DROP TABLE IF EXISTS t0_definition;
CREATE TABLE t0_definition (
state CHAR(3),
create_command VARBINARY(5000),
-file_list VARBINARY(5000),
+file_list VARBINARY(10000),
PRIMARY KEY (state)
) ENGINE = MEMORY;
DROP TABLE IF EXISTS t0_aux;
@@ -70,7 +62,7 @@ ALTER TABLE t1 ANALYZE PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -505,7 +497,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -523,7 +515,7 @@ ALTER TABLE t1 ANALYZE PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -958,7 +950,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -984,7 +976,7 @@ ALTER TABLE t1 ANALYZE PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -1419,7 +1411,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -1443,7 +1435,7 @@ ALTER TABLE t1 ANALYZE PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -1876,7 +1868,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -1898,7 +1890,7 @@ ALTER TABLE t1 ANALYZE PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -2333,7 +2325,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -2359,7 +2351,7 @@ ALTER TABLE t1 ANALYZE PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -2792,7 +2784,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -2818,7 +2810,7 @@ ALTER TABLE t1 ANALYZE PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -3253,7 +3245,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -3275,7 +3267,7 @@ ALTER TABLE t1 ANALYZE PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -3710,7 +3702,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# 1.2 ALTER ... ANALYZE PARTITION part_1,part_2;
DROP TABLE IF EXISTS t1;
@@ -3730,7 +3722,7 @@ ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -4165,7 +4157,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -4183,7 +4175,7 @@ ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -4618,7 +4610,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -4644,7 +4636,7 @@ ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -5079,7 +5071,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -5103,7 +5095,7 @@ ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -5536,7 +5528,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -5558,7 +5550,7 @@ ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -5993,7 +5985,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -6019,7 +6011,7 @@ ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -6452,7 +6444,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -6478,7 +6470,7 @@ ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -6913,7 +6905,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -6935,7 +6927,7 @@ ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -7370,7 +7362,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# 1.3 ALTER ... ANALYZE PARTITION part_1,part_2,part_5,part_6,part_10;
DROP TABLE IF EXISTS t1;
@@ -7713,7 +7705,7 @@ ALTER TABLE t1 CHECK PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -8148,7 +8140,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -8166,7 +8158,7 @@ ALTER TABLE t1 CHECK PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -8601,7 +8593,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -8627,7 +8619,7 @@ ALTER TABLE t1 CHECK PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -9062,7 +9054,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -9086,7 +9078,7 @@ ALTER TABLE t1 CHECK PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -9519,7 +9511,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -9541,7 +9533,7 @@ ALTER TABLE t1 CHECK PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -9976,7 +9968,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -10002,7 +9994,7 @@ ALTER TABLE t1 CHECK PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -10435,7 +10427,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -10461,7 +10453,7 @@ ALTER TABLE t1 CHECK PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -10896,7 +10888,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -10918,7 +10910,7 @@ ALTER TABLE t1 CHECK PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -11353,7 +11345,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# 2.2 ALTER ... CHECK PARTITION part_1,part_2;
DROP TABLE IF EXISTS t1;
@@ -11373,7 +11365,7 @@ ALTER TABLE t1 CHECK PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -11808,7 +11800,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -11826,7 +11818,7 @@ ALTER TABLE t1 CHECK PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -12261,7 +12253,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -12287,7 +12279,7 @@ ALTER TABLE t1 CHECK PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -12722,7 +12714,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -12746,7 +12738,7 @@ ALTER TABLE t1 CHECK PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -13179,7 +13171,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -13201,7 +13193,7 @@ ALTER TABLE t1 CHECK PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -13636,7 +13628,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -13662,7 +13654,7 @@ ALTER TABLE t1 CHECK PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -14095,7 +14087,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -14121,7 +14113,7 @@ ALTER TABLE t1 CHECK PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -14556,7 +14548,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -14578,7 +14570,7 @@ ALTER TABLE t1 CHECK PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -15013,7 +15005,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# 2.3 ALTER ... CHECK PARTITION part_1,part_2,part_5,part_6,part_10;
DROP TABLE IF EXISTS t1;
@@ -15999,7 +15991,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -16434,7 +16426,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -16452,7 +16444,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -16887,7 +16879,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -16913,7 +16905,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -17348,7 +17340,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -17372,7 +17364,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -17805,7 +17797,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -17827,7 +17819,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -18262,7 +18254,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -18288,7 +18280,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -18721,7 +18713,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -18747,7 +18739,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -19182,7 +19174,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -19204,7 +19196,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -19639,7 +19631,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# 4.2 ALTER ... REBUILD PARTITION part_1,part_2;
DROP TABLE IF EXISTS t1;
@@ -19659,7 +19651,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -20094,7 +20086,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -20112,7 +20104,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -20547,7 +20539,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -20573,7 +20565,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -21008,7 +21000,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -21032,7 +21024,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -21465,7 +21457,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -21487,7 +21479,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -21922,7 +21914,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -21948,7 +21940,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -22381,7 +22373,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -22407,7 +22399,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -22842,7 +22834,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -22864,7 +22856,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -23299,7 +23291,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# 4.3 ALTER ... REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
DROP TABLE IF EXISTS t1;
@@ -23642,7 +23634,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -24077,7 +24069,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -24095,7 +24087,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -24530,7 +24522,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -24556,7 +24548,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -24991,7 +24983,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -25015,7 +25007,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -25448,7 +25440,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -25470,7 +25462,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -25905,7 +25897,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -25931,7 +25923,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -26364,7 +26356,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -26390,7 +26382,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -26825,7 +26817,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -26847,7 +26839,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -27282,7 +27274,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# 5.2 ALTER ... REBUILD PARTITION part_1,part_2;
DROP TABLE IF EXISTS t1;
@@ -27302,7 +27294,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -27737,7 +27729,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -27755,7 +27747,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -28190,7 +28182,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -28216,7 +28208,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -28651,7 +28643,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -28675,7 +28667,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -29108,7 +29100,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -29130,7 +29122,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -29565,7 +29557,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -29591,7 +29583,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -30024,7 +30016,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -30050,7 +30042,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -30485,7 +30477,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -30507,7 +30499,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -30942,7 +30934,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# 5.3 ALTER ... REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
DROP TABLE IF EXISTS t1;
@@ -31285,7 +31277,7 @@ ALTER TABLE t1 REMOVE PARTITIONING;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -31720,7 +31712,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -31738,7 +31730,7 @@ ALTER TABLE t1 REMOVE PARTITIONING;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -32173,7 +32165,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -32199,7 +32191,7 @@ ALTER TABLE t1 REMOVE PARTITIONING;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -32634,7 +32626,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -32658,7 +32650,7 @@ ALTER TABLE t1 REMOVE PARTITIONING;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -33093,7 +33085,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -33115,7 +33107,7 @@ ALTER TABLE t1 REMOVE PARTITIONING;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -33550,7 +33542,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -33576,7 +33568,7 @@ ALTER TABLE t1 REMOVE PARTITIONING;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -34011,7 +34003,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -34037,7 +34029,7 @@ ALTER TABLE t1 REMOVE PARTITIONING;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -34472,7 +34464,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -34494,7 +34486,7 @@ ALTER TABLE t1 REMOVE PARTITIONING;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -34929,7 +34921,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP VIEW IF EXISTS v1;
DROP TABLE IF EXISTS t1;
diff --git a/mysql-test/suite/parts/r/partition_alter4_myisam.result b/mysql-test/suite/parts/r/partition_alter4_myisam.result
index 32da415443d..8eac8d414de 100644
--- a/mysql-test/suite/parts/r/partition_alter4_myisam.result
+++ b/mysql-test/suite/parts/r/partition_alter4_myisam.result
@@ -2,14 +2,6 @@ SET @max_row = 20;
SET @@session.storage_engine = 'MyISAM';
#------------------------------------------------------------------------
-# There are several testcases disabled because of the open bugs
-# #15890
-# The expected results suffer from the following bugs
-# harmless #17455, #19305
-# which cannot be suppressed because of technical reasons.
-#------------------------------------------------------------------------
-
-#------------------------------------------------------------------------
# 0. Setting of auxiliary variables + Creation of an auxiliary tables
# needed in many testcases
#------------------------------------------------------------------------
@@ -31,7 +23,7 @@ DROP TABLE IF EXISTS t0_definition;
CREATE TABLE t0_definition (
state CHAR(3),
create_command VARBINARY(5000),
-file_list VARBINARY(5000),
+file_list VARBINARY(10000),
PRIMARY KEY (state)
) ENGINE = MEMORY;
DROP TABLE IF EXISTS t0_aux;
@@ -70,7 +62,7 @@ ALTER TABLE t1 ANALYZE PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -515,7 +507,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -533,7 +525,7 @@ ALTER TABLE t1 ANALYZE PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -984,7 +976,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -1010,7 +1002,7 @@ ALTER TABLE t1 ANALYZE PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -1467,7 +1459,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -1491,7 +1483,7 @@ ALTER TABLE t1 ANALYZE PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -1942,7 +1934,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -1964,7 +1956,7 @@ ALTER TABLE t1 ANALYZE PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -2421,7 +2413,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -2447,7 +2439,7 @@ ALTER TABLE t1 ANALYZE PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -2902,7 +2894,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -2928,7 +2920,7 @@ ALTER TABLE t1 ANALYZE PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -3385,7 +3377,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -3407,7 +3399,7 @@ ALTER TABLE t1 ANALYZE PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -3866,7 +3858,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# 1.2 ALTER ... ANALYZE PARTITION part_1,part_2;
DROP TABLE IF EXISTS t1;
@@ -3886,7 +3878,7 @@ ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -4331,7 +4323,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -4349,7 +4341,7 @@ ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -4800,7 +4792,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -4826,7 +4818,7 @@ ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -5283,7 +5275,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -5307,7 +5299,7 @@ ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -5758,7 +5750,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -5780,7 +5772,7 @@ ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -6237,7 +6229,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -6263,7 +6255,7 @@ ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -6718,7 +6710,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -6744,7 +6736,7 @@ ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -7201,7 +7193,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -7223,7 +7215,7 @@ ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -7682,7 +7674,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# 1.3 ALTER ... ANALYZE PARTITION part_1,part_2,part_5,part_6,part_10;
DROP TABLE IF EXISTS t1;
@@ -8025,7 +8017,7 @@ ALTER TABLE t1 CHECK PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -8470,7 +8462,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -8488,7 +8480,7 @@ ALTER TABLE t1 CHECK PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -8939,7 +8931,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -8965,7 +8957,7 @@ ALTER TABLE t1 CHECK PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -9422,7 +9414,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -9446,7 +9438,7 @@ ALTER TABLE t1 CHECK PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -9897,7 +9889,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -9919,7 +9911,7 @@ ALTER TABLE t1 CHECK PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -10376,7 +10368,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -10402,7 +10394,7 @@ ALTER TABLE t1 CHECK PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -10857,7 +10849,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -10883,7 +10875,7 @@ ALTER TABLE t1 CHECK PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -11340,7 +11332,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -11362,7 +11354,7 @@ ALTER TABLE t1 CHECK PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -11821,7 +11813,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# 2.2 ALTER ... CHECK PARTITION part_1,part_2;
DROP TABLE IF EXISTS t1;
@@ -11841,7 +11833,7 @@ ALTER TABLE t1 CHECK PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -12286,7 +12278,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -12304,7 +12296,7 @@ ALTER TABLE t1 CHECK PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -12755,7 +12747,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -12781,7 +12773,7 @@ ALTER TABLE t1 CHECK PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -13238,7 +13230,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -13262,7 +13254,7 @@ ALTER TABLE t1 CHECK PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -13713,7 +13705,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -13735,7 +13727,7 @@ ALTER TABLE t1 CHECK PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -14192,7 +14184,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -14218,7 +14210,7 @@ ALTER TABLE t1 CHECK PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -14673,7 +14665,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -14699,7 +14691,7 @@ ALTER TABLE t1 CHECK PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -15156,7 +15148,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -15178,7 +15170,7 @@ ALTER TABLE t1 CHECK PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -15637,7 +15629,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# 2.3 ALTER ... CHECK PARTITION part_1,part_2,part_5,part_6,part_10;
DROP TABLE IF EXISTS t1;
@@ -15980,7 +15972,7 @@ ALTER TABLE t1 OPTIMIZE PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -16425,7 +16417,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -16443,7 +16435,7 @@ ALTER TABLE t1 OPTIMIZE PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -16894,7 +16886,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -16920,7 +16912,7 @@ ALTER TABLE t1 OPTIMIZE PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -17377,7 +17369,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -17401,7 +17393,7 @@ ALTER TABLE t1 OPTIMIZE PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -17852,7 +17844,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -17874,7 +17866,7 @@ ALTER TABLE t1 OPTIMIZE PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -18331,7 +18323,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -18357,7 +18349,7 @@ ALTER TABLE t1 OPTIMIZE PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -18812,7 +18804,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -18838,7 +18830,7 @@ ALTER TABLE t1 OPTIMIZE PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -19295,7 +19287,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -19317,7 +19309,7 @@ ALTER TABLE t1 OPTIMIZE PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -19776,7 +19768,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# 3.2 ALTER ... OPTIMIZE PARTITION part_1,part_2;
DROP TABLE IF EXISTS t1;
@@ -19796,7 +19788,7 @@ ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -20241,7 +20233,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -20259,7 +20251,7 @@ ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -20710,7 +20702,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -20736,7 +20728,7 @@ ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -21193,7 +21185,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -21217,7 +21209,7 @@ ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -21668,7 +21660,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -21690,7 +21682,7 @@ ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -22147,7 +22139,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -22173,7 +22165,7 @@ ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -22628,7 +22620,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -22654,7 +22646,7 @@ ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -23111,7 +23103,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -23133,7 +23125,7 @@ ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -23592,7 +23584,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# 3.3 ALTER ... OPTIMIZE PARTITION part_1,part_2,part_5,part_6,part_10;
DROP TABLE IF EXISTS t1;
@@ -23935,7 +23927,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -24380,7 +24372,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -24398,7 +24390,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -24849,7 +24841,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -24875,7 +24867,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -25332,7 +25324,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -25356,7 +25348,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -25807,7 +25799,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -25829,7 +25821,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -26286,7 +26278,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -26312,7 +26304,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -26767,7 +26759,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -26793,7 +26785,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -27250,7 +27242,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -27272,7 +27264,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -27731,7 +27723,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# 4.2 ALTER ... REBUILD PARTITION part_1,part_2;
DROP TABLE IF EXISTS t1;
@@ -27751,7 +27743,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -28196,7 +28188,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -28214,7 +28206,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -28665,7 +28657,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -28691,7 +28683,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -29148,7 +29140,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -29172,7 +29164,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -29623,7 +29615,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -29645,7 +29637,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -30102,7 +30094,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -30128,7 +30120,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -30583,7 +30575,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -30609,7 +30601,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -31066,7 +31058,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -31088,7 +31080,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -31547,7 +31539,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# 4.3 ALTER ... REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
DROP TABLE IF EXISTS t1;
@@ -31890,7 +31882,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -32335,7 +32327,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -32353,7 +32345,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -32804,7 +32796,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -32830,7 +32822,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -33287,7 +33279,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -33311,7 +33303,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -33762,7 +33754,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -33784,7 +33776,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -34241,7 +34233,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -34267,7 +34259,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -34722,7 +34714,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -34748,7 +34740,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -35205,7 +35197,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -35227,7 +35219,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -35686,7 +35678,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# 5.2 ALTER ... REBUILD PARTITION part_1,part_2;
DROP TABLE IF EXISTS t1;
@@ -35706,7 +35698,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -36151,7 +36143,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -36169,7 +36161,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -36620,7 +36612,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -36646,7 +36638,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -37103,7 +37095,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -37127,7 +37119,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -37578,7 +37570,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -37600,7 +37592,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -38057,7 +38049,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -38083,7 +38075,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -38538,7 +38530,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -38564,7 +38556,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -39021,7 +39013,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -39043,7 +39035,7 @@ ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -39502,7 +39494,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# 5.3 ALTER ... REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
DROP TABLE IF EXISTS t1;
@@ -39845,7 +39837,7 @@ ALTER TABLE t1 REMOVE PARTITIONING;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -40287,7 +40279,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -40305,7 +40297,7 @@ ALTER TABLE t1 REMOVE PARTITIONING;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -40747,7 +40739,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -40773,7 +40765,7 @@ ALTER TABLE t1 REMOVE PARTITIONING;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -41215,7 +41207,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -41239,7 +41231,7 @@ ALTER TABLE t1 REMOVE PARTITIONING;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -41681,7 +41673,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -41703,7 +41695,7 @@ ALTER TABLE t1 REMOVE PARTITIONING;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -42145,7 +42137,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -42171,7 +42163,7 @@ ALTER TABLE t1 REMOVE PARTITIONING;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -42613,7 +42605,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -42639,7 +42631,7 @@ ALTER TABLE t1 REMOVE PARTITIONING;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -43081,7 +43073,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -43103,7 +43095,7 @@ ALTER TABLE t1 REMOVE PARTITIONING;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -43545,7 +43537,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP VIEW IF EXISTS v1;
DROP TABLE IF EXISTS t1;
diff --git a/mysql-test/suite/parts/r/partition_basic_innodb.result b/mysql-test/suite/parts/r/partition_basic_innodb.result
index dc875980678..b9097e33ce0 100644
--- a/mysql-test/suite/parts/r/partition_basic_innodb.result
+++ b/mysql-test/suite/parts/r/partition_basic_innodb.result
@@ -2,14 +2,6 @@ SET @max_row = 20;
SET @@session.storage_engine = 'InnoDB';
#------------------------------------------------------------------------
-# There are several testcases disabled because of the open bugs
-# #15890
-# The expected results suffer from the following bugs
-# harmless #17455, #19305
-# which cannot be suppressed because of technical reasons.
-#------------------------------------------------------------------------
-
-#------------------------------------------------------------------------
# 0. Setting of auxiliary variables + Creation of an auxiliary tables
# needed in many testcases
#------------------------------------------------------------------------
@@ -31,7 +23,7 @@ DROP TABLE IF EXISTS t0_definition;
CREATE TABLE t0_definition (
state CHAR(3),
create_command VARBINARY(5000),
-file_list VARBINARY(5000),
+file_list VARBINARY(10000),
PRIMARY KEY (state)
) ENGINE = MEMORY;
DROP TABLE IF EXISTS t0_aux;
@@ -61,7 +53,7 @@ SET @@session.sql_mode= '';
DROP TABLE IF EXISTS t1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -496,17 +488,17 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
--- not determined ---
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -941,17 +933,17 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
--- not determined ---
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -1386,17 +1378,17 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
--- not determined ---
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -1829,17 +1821,17 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
--- not determined ---
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -2274,17 +2266,17 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
--- not determined ---
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -2717,17 +2709,17 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
--- not determined ---
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -3162,17 +3154,17 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
--- not determined ---
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -3607,10 +3599,10 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
@@ -3618,7 +3610,7 @@ unified filelist
# 1.1.1 with DATA DIECTORY/INDEX DIRECTORY
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -4053,17 +4045,17 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
--- not determined ---
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -4498,17 +4490,17 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
--- not determined ---
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -4943,17 +4935,17 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
--- not determined ---
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -5386,17 +5378,17 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
--- not determined ---
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -5831,17 +5823,17 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
--- not determined ---
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -6274,17 +6266,17 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
--- not determined ---
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -6719,17 +6711,17 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
--- not determined ---
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -7164,10 +7156,10 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
@@ -7175,7 +7167,7 @@ unified filelist
DROP TABLE IF EXISTS t1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -7610,17 +7602,17 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
--- not determined ---
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -8055,17 +8047,17 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
--- not determined ---
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -8500,17 +8492,17 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
--- not determined ---
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -8943,17 +8935,17 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
--- not determined ---
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -9388,17 +9380,17 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
--- not determined ---
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -9831,17 +9823,17 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
--- not determined ---
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -10276,10 +10268,10 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
@@ -10297,7 +10289,7 @@ f_charbig VARCHAR(1000)
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -10732,7 +10724,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -10745,7 +10737,7 @@ f_charbig VARCHAR(1000)
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -11180,7 +11172,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -11201,7 +11193,7 @@ PARTITION part2 VALUES IN (2),
PARTITION part3 VALUES IN (3));
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -11636,7 +11628,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -11655,7 +11647,7 @@ PARTITION parte VALUES LESS THAN (20),
PARTITION partf VALUES LESS THAN (2147483646));
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -12088,7 +12080,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -12105,7 +12097,7 @@ PARTITION partc VALUES LESS THAN (10),
PARTITION partd VALUES LESS THAN (2147483646));
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -12538,7 +12530,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -12559,7 +12551,7 @@ PARTITION part4 VALUES LESS THAN (2147483646)
(SUBPARTITION subpart41, SUBPARTITION subpart42));
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -12992,7 +12984,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -13013,7 +13005,7 @@ PARTITION part4 VALUES IN (NULL)
(SUBPARTITION sp41, SUBPARTITION sp42));
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -13448,7 +13440,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -13465,7 +13457,7 @@ SUBPARTITION BY KEY(f_int2) SUBPARTITIONS 3
PARTITION part3 VALUES IN (NULL));
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -13900,7 +13892,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
#------------------------------------------------------------------------
# 2 Tables with PRIMARY KEY and/or UNIQUE INDEXes
@@ -13910,7 +13902,7 @@ DROP TABLE t1;
DROP TABLE IF EXISTS t1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -14382,17 +14374,17 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
--- not determined ---
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -14864,17 +14856,17 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
--- not determined ---
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -15346,17 +15338,17 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
--- not determined ---
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -15826,17 +15818,17 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
--- not determined ---
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -16308,17 +16300,17 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
--- not determined ---
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -16788,17 +16780,17 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
--- not determined ---
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -17270,17 +17262,17 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
--- not determined ---
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -17752,10 +17744,10 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
@@ -17763,7 +17755,7 @@ unified filelist
DROP TABLE IF EXISTS t1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -18235,17 +18227,17 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
--- not determined ---
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -18717,17 +18709,17 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
--- not determined ---
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -19199,17 +19191,17 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
--- not determined ---
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -19679,17 +19671,17 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
--- not determined ---
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -20161,17 +20153,17 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
--- not determined ---
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -20641,17 +20633,17 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
--- not determined ---
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -21123,17 +21115,17 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
--- not determined ---
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -21605,10 +21597,10 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
@@ -21616,7 +21608,7 @@ unified filelist
DROP TABLE IF EXISTS t1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -22104,17 +22096,17 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
--- not determined ---
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -22602,17 +22594,17 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
--- not determined ---
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -23100,17 +23092,17 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
--- not determined ---
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -23596,17 +23588,17 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
--- not determined ---
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -24094,17 +24086,17 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
--- not determined ---
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -24590,17 +24582,17 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
--- not determined ---
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -25088,17 +25080,17 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
--- not determined ---
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -25586,10 +25578,10 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# Attention: There are unused files.
-# Either the DROP TABLE or a preceeding ALTER TABLE
+# Either the DROP TABLE or a preceding ALTER TABLE
# <alter partitioning> worked incomplete.
# We found:
unified filelist
@@ -25611,7 +25603,7 @@ f_charbig VARCHAR(1000)
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -26083,7 +26075,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -26096,7 +26088,7 @@ f_charbig VARCHAR(1000)
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -26568,7 +26560,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -26589,7 +26581,7 @@ PARTITION part2 VALUES IN (2),
PARTITION part3 VALUES IN (3));
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -27061,7 +27053,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -27080,7 +27072,7 @@ PARTITION parte VALUES LESS THAN (20),
PARTITION partf VALUES LESS THAN (2147483646));
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -27550,7 +27542,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -27567,7 +27559,7 @@ PARTITION partc VALUES LESS THAN (10),
PARTITION partd VALUES LESS THAN (2147483646));
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -28037,7 +28029,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -28058,7 +28050,7 @@ PARTITION part4 VALUES LESS THAN (2147483646)
(SUBPARTITION subpart41, SUBPARTITION subpart42));
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -28528,7 +28520,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -28549,7 +28541,7 @@ PARTITION part4 VALUES IN (NULL)
(SUBPARTITION sp41, SUBPARTITION sp42));
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -29021,7 +29013,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -29038,7 +29030,7 @@ SUBPARTITION BY KEY(f_int2) SUBPARTITIONS 3
PARTITION part3 VALUES IN (NULL));
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -29510,7 +29502,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -29524,7 +29516,7 @@ f_charbig VARCHAR(1000)
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -29996,7 +29988,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -30009,7 +30001,7 @@ f_charbig VARCHAR(1000)
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -30481,7 +30473,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -30502,7 +30494,7 @@ PARTITION part2 VALUES IN (2),
PARTITION part3 VALUES IN (3));
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -30974,7 +30966,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -30993,7 +30985,7 @@ PARTITION parte VALUES LESS THAN (20),
PARTITION partf VALUES LESS THAN (2147483646));
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -31463,7 +31455,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -31480,7 +31472,7 @@ PARTITION partc VALUES LESS THAN (10),
PARTITION partd VALUES LESS THAN (2147483646));
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -31950,7 +31942,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -31971,7 +31963,7 @@ PARTITION part4 VALUES LESS THAN (2147483646)
(SUBPARTITION subpart41, SUBPARTITION subpart42));
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -32441,7 +32433,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -32462,7 +32454,7 @@ PARTITION part4 VALUES IN (NULL)
(SUBPARTITION sp41, SUBPARTITION sp42));
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -32934,7 +32926,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -32951,7 +32943,7 @@ SUBPARTITION BY KEY(f_int2) SUBPARTITIONS 3
PARTITION part3 VALUES IN (NULL));
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -33423,7 +33415,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
@@ -33437,7 +33429,7 @@ f_charbig VARCHAR(1000)
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -33925,7 +33917,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -33938,7 +33930,7 @@ f_charbig VARCHAR(1000)
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -34426,7 +34418,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -34447,7 +34439,7 @@ PARTITION part2 VALUES IN (2),
PARTITION part3 VALUES IN (3));
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -34935,7 +34927,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -34954,7 +34946,7 @@ PARTITION parte VALUES LESS THAN (20),
PARTITION partf VALUES LESS THAN (2147483646));
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -35440,7 +35432,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -35457,7 +35449,7 @@ PARTITION partc VALUES LESS THAN (10),
PARTITION partd VALUES LESS THAN (2147483646));
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -35943,7 +35935,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -35964,7 +35956,7 @@ PARTITION part4 VALUES LESS THAN (2147483646)
(SUBPARTITION subpart41, SUBPARTITION subpart42));
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -36450,7 +36442,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -36471,7 +36463,7 @@ PARTITION part4 VALUES IN (NULL)
(SUBPARTITION sp41, SUBPARTITION sp42));
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -36959,7 +36951,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -36976,7 +36968,7 @@ SUBPARTITION BY KEY(f_int2) SUBPARTITIONS 3
PARTITION part3 VALUES IN (NULL));
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -37464,7 +37456,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP VIEW IF EXISTS v1;
DROP TABLE IF EXISTS t1;
diff --git a/mysql-test/suite/parts/r/partition_basic_myisam.result b/mysql-test/suite/parts/r/partition_basic_myisam.result
index 471eb4973f6..7e0d5bcd62a 100644
--- a/mysql-test/suite/parts/r/partition_basic_myisam.result
+++ b/mysql-test/suite/parts/r/partition_basic_myisam.result
@@ -2,14 +2,6 @@ SET @max_row = 20;
SET @@session.storage_engine = 'MyISAM';
#------------------------------------------------------------------------
-# There are several testcases disabled because of the open bugs
-# #15890
-# The expected results suffer from the following bugs
-# harmless #17455, #19305
-# which cannot be suppressed because of technical reasons.
-#------------------------------------------------------------------------
-
-#------------------------------------------------------------------------
# 0. Setting of auxiliary variables + Creation of an auxiliary tables
# needed in many testcases
#------------------------------------------------------------------------
@@ -31,7 +23,7 @@ DROP TABLE IF EXISTS t0_definition;
CREATE TABLE t0_definition (
state CHAR(3),
create_command VARBINARY(5000),
-file_list VARBINARY(5000),
+file_list VARBINARY(10000),
PRIMARY KEY (state)
) ENGINE = MEMORY;
DROP TABLE IF EXISTS t0_aux;
@@ -61,7 +53,7 @@ SET @@session.sql_mode= '';
DROP TABLE IF EXISTS t1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -506,11 +498,11 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -961,11 +953,11 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -1422,11 +1414,11 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -1877,11 +1869,11 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -2338,11 +2330,11 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -2797,11 +2789,11 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -3258,11 +3250,11 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -3721,12 +3713,12 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# 1.1.1 with DATA DIECTORY/INDEX DIRECTORY
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -3736,7 +3728,7 @@ t1 CREATE TABLE `t1` (
`f_char1` char(20) DEFAULT NULL,
`f_char2` char(20) DEFAULT NULL,
`f_charbig` varchar(1000) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY HASH (f_int1) (PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
unified filelist
$MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYD
@@ -4167,37 +4159,37 @@ OPTIMIZE TABLE t1;
Table Op Msg_type Msg_text
test.t1 optimize status OK
state new
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY HASH (f_int1) (PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#p2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p2.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par
state old
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY HASH (f_int1) (PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#p2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p2.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par MYSQLTEST_VARDIR/master-data/test/data/t1#P#p1.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#p2.MYD MYSQLTEST_VARDIR/master-data/test/index/t1#P#p1.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#p2.MYI
# check layout success: 0
REPAIR TABLE t1 EXTENDED;
Table Op Msg_type Msg_text
test.t1 repair status OK
state new
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY HASH (f_int1) (PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#p2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p2.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par
state old
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY HASH (f_int1) (PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#p2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p2.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par MYSQLTEST_VARDIR/master-data/test/data/t1#P#p1.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#p2.MYD MYSQLTEST_VARDIR/master-data/test/index/t1#P#p1.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#p2.MYI
# check layout success: 0
TRUNCATE t1;
# check TRUNCATE success: 1
state new
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY HASH (f_int1) (PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#p2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p2.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par
state old
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY HASH (f_int1) (PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#p2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p2.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par MYSQLTEST_VARDIR/master-data/test/data/t1#P#p1.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#p2.MYD MYSQLTEST_VARDIR/master-data/test/index/t1#P#p1.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#p2.MYI
# check layout success: 0
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -4207,7 +4199,7 @@ t1 CREATE TABLE `t1` (
`f_char1` char(20) DEFAULT NULL,
`f_char2` char(20) DEFAULT NULL,
`f_charbig` varchar(1000) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY HASH (f_int1) (PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p3 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p4 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p5 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p3 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p4 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p5 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
unified filelist
$MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYD
@@ -4650,37 +4642,37 @@ OPTIMIZE TABLE t1;
Table Op Msg_type Msg_text
test.t1 optimize status OK
state new
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY HASH (f_int1) (PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p3 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p4 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p5 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p3 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p4 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p5 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#p2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p2.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#p3.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p3.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#p4.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p4.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#p5.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p5.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par
state old
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY HASH (f_int1) (PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p3 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p4 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p5 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p3 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p4 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p5 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#p2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p2.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#p3.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p3.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#p4.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p4.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#p5.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p5.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par MYSQLTEST_VARDIR/master-data/test/data/t1#P#p1.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#p2.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#p3.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#p4.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#p5.MYD MYSQLTEST_VARDIR/master-data/test/index/t1#P#p1.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#p2.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#p3.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#p4.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#p5.MYI
# check layout success: 0
REPAIR TABLE t1 EXTENDED;
Table Op Msg_type Msg_text
test.t1 repair status OK
state new
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY HASH (f_int1) (PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p3 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p4 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p5 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p3 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p4 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p5 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#p2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p2.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#p3.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p3.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#p4.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p4.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#p5.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p5.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par
state old
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY HASH (f_int1) (PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p3 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p4 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p5 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p3 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p4 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p5 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#p2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p2.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#p3.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p3.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#p4.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p4.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#p5.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p5.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par MYSQLTEST_VARDIR/master-data/test/data/t1#P#p1.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#p2.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#p3.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#p4.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#p5.MYD MYSQLTEST_VARDIR/master-data/test/index/t1#P#p1.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#p2.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#p3.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#p4.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#p5.MYI
# check layout success: 0
TRUNCATE t1;
# check TRUNCATE success: 1
state new
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY HASH (f_int1) (PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p3 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p4 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p5 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p3 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p4 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p5 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#p2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p2.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#p3.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p3.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#p4.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p4.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#p5.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p5.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par
state old
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY HASH (f_int1) (PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p3 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p4 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p5 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY HASH (f_int1) (PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p3 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p4 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION p5 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#p2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p2.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#p3.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p3.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#p4.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p4.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#p5.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#p5.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par MYSQLTEST_VARDIR/master-data/test/data/t1#P#p1.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#p2.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#p3.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#p4.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#p5.MYD MYSQLTEST_VARDIR/master-data/test/index/t1#P#p1.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#p2.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#p3.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#p4.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#p5.MYI
# check layout success: 0
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -4690,7 +4682,7 @@ t1 CREATE TABLE `t1` (
`f_char1` char(20) DEFAULT NULL,
`f_char2` char(20) DEFAULT NULL,
`f_charbig` varchar(1000) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part0 VALUES IN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part1 VALUES IN (1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part2 VALUES IN (2) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part3 VALUES IN (3) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part0 VALUES IN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part1 VALUES IN (1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part2 VALUES IN (2) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part3 VALUES IN (3) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
unified filelist
$MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYD
@@ -5145,37 +5137,37 @@ OPTIMIZE TABLE t1;
Table Op Msg_type Msg_text
test.t1 optimize status OK
state new
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part0 VALUES IN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part1 VALUES IN (1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part2 VALUES IN (2) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part3 VALUES IN (3) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part0 VALUES IN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part1 VALUES IN (1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part2 VALUES IN (2) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part3 VALUES IN (3) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par
state old
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part0 VALUES IN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part1 VALUES IN (1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part2 VALUES IN (2) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part3 VALUES IN (3) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part0 VALUES IN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part1 VALUES IN (1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part2 VALUES IN (2) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part3 VALUES IN (3) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par MYSQLTEST_VARDIR/master-data/test/data/t1#P#part0.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part1.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part2.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part3.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part_1.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part_2.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part_3.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part_N.MYD MYSQLTEST_VARDIR/master-data/test/index/t1#P#part0.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part1.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part2.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part3.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part_1.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part_2.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part_3.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part_N.MYI
# check layout success: 0
REPAIR TABLE t1 EXTENDED;
Table Op Msg_type Msg_text
test.t1 repair status OK
state new
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part0 VALUES IN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part1 VALUES IN (1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part2 VALUES IN (2) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part3 VALUES IN (3) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part0 VALUES IN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part1 VALUES IN (1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part2 VALUES IN (2) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part3 VALUES IN (3) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par
state old
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part0 VALUES IN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part1 VALUES IN (1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part2 VALUES IN (2) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part3 VALUES IN (3) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part0 VALUES IN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part1 VALUES IN (1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part2 VALUES IN (2) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part3 VALUES IN (3) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par MYSQLTEST_VARDIR/master-data/test/data/t1#P#part0.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part1.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part2.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part3.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part_1.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part_2.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part_3.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part_N.MYD MYSQLTEST_VARDIR/master-data/test/index/t1#P#part0.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part1.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part2.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part3.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part_1.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part_2.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part_3.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part_N.MYI
# check layout success: 0
TRUNCATE t1;
# check TRUNCATE success: 1
state new
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part0 VALUES IN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part1 VALUES IN (1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part2 VALUES IN (2) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part3 VALUES IN (3) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part0 VALUES IN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part1 VALUES IN (1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part2 VALUES IN (2) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part3 VALUES IN (3) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par
state old
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part0 VALUES IN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part1 VALUES IN (1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part2 VALUES IN (2) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part3 VALUES IN (3) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part0 VALUES IN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part1 VALUES IN (1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part2 VALUES IN (2) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part3 VALUES IN (3) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part_1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part_2.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part_3.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part_N.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par MYSQLTEST_VARDIR/master-data/test/data/t1#P#part0.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part1.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part2.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part3.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part_1.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part_2.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part_3.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part_N.MYD MYSQLTEST_VARDIR/master-data/test/index/t1#P#part0.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part1.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part2.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part3.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part_1.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part_2.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part_3.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part_N.MYI
# check layout success: 0
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -5185,7 +5177,7 @@ t1 CREATE TABLE `t1` (
`f_char1` char(20) DEFAULT NULL,
`f_char2` char(20) DEFAULT NULL,
`f_charbig` varchar(1000) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (15) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION parte VALUES LESS THAN (20) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partf VALUES LESS THAN (2147483646) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (15) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION parte VALUES LESS THAN (20) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partf VALUES LESS THAN (2147483646) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
unified filelist
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYD
@@ -5630,37 +5622,37 @@ OPTIMIZE TABLE t1;
Table Op Msg_type Msg_text
test.t1 optimize status OK
state new
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (15) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION parte VALUES LESS THAN (20) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partf VALUES LESS THAN (2147483646) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (15) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION parte VALUES LESS THAN (20) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partf VALUES LESS THAN (2147483646) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partb.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partb.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partc.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partc.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partd.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partd.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#parte.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#parte.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partf.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partf.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par
state old
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (15) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION parte VALUES LESS THAN (20) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partf VALUES LESS THAN (2147483646) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (15) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION parte VALUES LESS THAN (20) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partf VALUES LESS THAN (2147483646) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partb.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partb.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partc.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partc.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partd.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partd.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#parte.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#parte.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partf.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partf.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par MYSQLTEST_VARDIR/master-data/test/data/t1#P#parta.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#partb.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#partc.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#partd.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#parte.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#partf.MYD MYSQLTEST_VARDIR/master-data/test/index/t1#P#parta.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#partb.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#partc.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#partd.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#parte.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#partf.MYI
# check layout success: 0
REPAIR TABLE t1 EXTENDED;
Table Op Msg_type Msg_text
test.t1 repair status OK
state new
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (15) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION parte VALUES LESS THAN (20) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partf VALUES LESS THAN (2147483646) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (15) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION parte VALUES LESS THAN (20) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partf VALUES LESS THAN (2147483646) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partb.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partb.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partc.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partc.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partd.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partd.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#parte.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#parte.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partf.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partf.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par
state old
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (15) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION parte VALUES LESS THAN (20) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partf VALUES LESS THAN (2147483646) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (15) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION parte VALUES LESS THAN (20) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partf VALUES LESS THAN (2147483646) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partb.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partb.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partc.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partc.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partd.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partd.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#parte.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#parte.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partf.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partf.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par MYSQLTEST_VARDIR/master-data/test/data/t1#P#parta.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#partb.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#partc.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#partd.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#parte.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#partf.MYD MYSQLTEST_VARDIR/master-data/test/index/t1#P#parta.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#partb.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#partc.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#partd.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#parte.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#partf.MYI
# check layout success: 0
TRUNCATE t1;
# check TRUNCATE success: 1
state new
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (15) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION parte VALUES LESS THAN (20) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partf VALUES LESS THAN (2147483646) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (15) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION parte VALUES LESS THAN (20) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partf VALUES LESS THAN (2147483646) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partb.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partb.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partc.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partc.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partd.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partd.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#parte.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#parte.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partf.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partf.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par
state old
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (15) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION parte VALUES LESS THAN (20) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partf VALUES LESS THAN (2147483646) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (15) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION parte VALUES LESS THAN (20) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partf VALUES LESS THAN (2147483646) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partb.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partb.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partc.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partc.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partd.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partd.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#parte.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#parte.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partf.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partf.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par MYSQLTEST_VARDIR/master-data/test/data/t1#P#parta.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#partb.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#partc.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#partd.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#parte.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#partf.MYD MYSQLTEST_VARDIR/master-data/test/index/t1#P#parta.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#partb.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#partc.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#partd.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#parte.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#partf.MYI
# check layout success: 0
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -5670,7 +5662,7 @@ t1 CREATE TABLE `t1` (
`f_char1` char(20) DEFAULT NULL,
`f_char2` char(20) DEFAULT NULL,
`f_charbig` varchar(1000) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (2147483646) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (2147483646) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
unified filelist
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp0.MYD
@@ -6125,37 +6117,37 @@ OPTIMIZE TABLE t1;
Table Op Msg_type Msg_text
test.t1 optimize status OK
state new
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (2147483646) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (2147483646) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp1.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par
state old
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (2147483646) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (2147483646) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp1.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par MYSQLTEST_VARDIR/master-data/test/data/t1#P#parta#SP#partasp0.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#parta#SP#partasp1.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#partb#SP#partbsp0.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#partb#SP#partbsp1.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#partc#SP#partcsp0.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#partc#SP#partcsp1.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#partd#SP#partdsp0.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#partd#SP#partdsp1.MYD MYSQLTEST_VARDIR/master-data/test/index/t1#P#parta#SP#partasp0.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#parta#SP#partasp1.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#partb#SP#partbsp0.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#partb#SP#partbsp1.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#partc#SP#partcsp0.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#partc#SP#partcsp1.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#partd#SP#partdsp0.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#partd#SP#partdsp1.MYI
# check layout success: 0
REPAIR TABLE t1 EXTENDED;
Table Op Msg_type Msg_text
test.t1 repair status OK
state new
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (2147483646) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (2147483646) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp1.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par
state old
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (2147483646) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (2147483646) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp1.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par MYSQLTEST_VARDIR/master-data/test/data/t1#P#parta#SP#partasp0.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#parta#SP#partasp1.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#partb#SP#partbsp0.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#partb#SP#partbsp1.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#partc#SP#partcsp0.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#partc#SP#partcsp1.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#partd#SP#partdsp0.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#partd#SP#partdsp1.MYD MYSQLTEST_VARDIR/master-data/test/index/t1#P#parta#SP#partasp0.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#parta#SP#partasp1.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#partb#SP#partbsp0.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#partb#SP#partbsp1.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#partc#SP#partcsp0.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#partc#SP#partcsp1.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#partd#SP#partdsp0.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#partd#SP#partdsp1.MYI
# check layout success: 0
TRUNCATE t1;
# check TRUNCATE success: 1
state new
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (2147483646) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (2147483646) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp1.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par
state old
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (2147483646) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (2147483646) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partb#SP#partbsp1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partc#SP#partcsp1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#partd#SP#partdsp1.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par MYSQLTEST_VARDIR/master-data/test/data/t1#P#parta#SP#partasp0.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#parta#SP#partasp1.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#partb#SP#partbsp0.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#partb#SP#partbsp1.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#partc#SP#partcsp0.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#partc#SP#partcsp1.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#partd#SP#partdsp0.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#partd#SP#partdsp1.MYD MYSQLTEST_VARDIR/master-data/test/index/t1#P#parta#SP#partasp0.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#parta#SP#partasp1.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#partb#SP#partbsp0.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#partb#SP#partbsp1.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#partc#SP#partcsp0.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#partc#SP#partcsp1.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#partd#SP#partdsp0.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#partd#SP#partdsp1.MYI
# check layout success: 0
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -6165,7 +6157,7 @@ t1 CREATE TABLE `t1` (
`f_char1` char(20) DEFAULT NULL,
`f_char2` char(20) DEFAULT NULL,
`f_charbig` varchar(1000) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart12 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart22 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart32 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart42 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM)) */
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart12 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart22 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart32 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart42 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM)) */
unified filelist
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart11.MYD
@@ -6618,37 +6610,37 @@ OPTIMIZE TABLE t1;
Table Op Msg_type Msg_text
test.t1 optimize status OK
state new
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart12 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart22 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart32 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart42 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM)) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart12 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart22 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart32 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart42 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM)) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart11.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart11.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart12.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart12.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart21.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart21.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart22.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart22.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart31.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart31.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart32.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart32.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart41.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart41.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart42.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart42.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par
state old
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart12 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart22 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart32 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart42 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM)) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart12 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart22 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart32 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart42 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM)) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart11.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart11.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart12.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart12.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart21.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart21.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart22.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart22.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart31.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart31.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart32.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart32.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart41.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart41.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart42.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart42.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par MYSQLTEST_VARDIR/master-data/test/data/t1#P#part1#SP#subpart11.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part1#SP#subpart12.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part2#SP#subpart21.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part2#SP#subpart22.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part3#SP#subpart31.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part3#SP#subpart32.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part4#SP#subpart41.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part4#SP#subpart42.MYD MYSQLTEST_VARDIR/master-data/test/index/t1#P#part1#SP#subpart11.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part1#SP#subpart12.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part2#SP#subpart21.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part2#SP#subpart22.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part3#SP#subpart31.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part3#SP#subpart32.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part4#SP#subpart41.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part4#SP#subpart42.MYI
# check layout success: 0
REPAIR TABLE t1 EXTENDED;
Table Op Msg_type Msg_text
test.t1 repair status OK
state new
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart12 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart22 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart32 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart42 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM)) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart12 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart22 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart32 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart42 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM)) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart11.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart11.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart12.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart12.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart21.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart21.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart22.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart22.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart31.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart31.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart32.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart32.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart41.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart41.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart42.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart42.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par
state old
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart12 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart22 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart32 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart42 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM)) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart12 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart22 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart32 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart42 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM)) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart11.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart11.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart12.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart12.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart21.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart21.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart22.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart22.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart31.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart31.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart32.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart32.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart41.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart41.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart42.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart42.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par MYSQLTEST_VARDIR/master-data/test/data/t1#P#part1#SP#subpart11.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part1#SP#subpart12.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part2#SP#subpart21.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part2#SP#subpart22.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part3#SP#subpart31.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part3#SP#subpart32.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part4#SP#subpart41.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part4#SP#subpart42.MYD MYSQLTEST_VARDIR/master-data/test/index/t1#P#part1#SP#subpart11.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part1#SP#subpart12.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part2#SP#subpart21.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part2#SP#subpart22.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part3#SP#subpart31.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part3#SP#subpart32.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part4#SP#subpart41.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part4#SP#subpart42.MYI
# check layout success: 0
TRUNCATE t1;
# check TRUNCATE success: 1
state new
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart12 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart22 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart32 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart42 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM)) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart12 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart22 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart32 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart42 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM)) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart11.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart11.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart12.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart12.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart21.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart21.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart22.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart22.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart31.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart31.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart32.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart32.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart41.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart41.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart42.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart42.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par
state old
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart12 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart22 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart32 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart42 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM)) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart12 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart22 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart32 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart42 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM)) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart11.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart11.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart12.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart12.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart21.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart21.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart22.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#subpart22.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart31.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart31.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart32.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#subpart32.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart41.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart41.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart42.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#subpart42.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par MYSQLTEST_VARDIR/master-data/test/data/t1#P#part1#SP#subpart11.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part1#SP#subpart12.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part2#SP#subpart21.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part2#SP#subpart22.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part3#SP#subpart31.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part3#SP#subpart32.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part4#SP#subpart41.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part4#SP#subpart42.MYD MYSQLTEST_VARDIR/master-data/test/index/t1#P#part1#SP#subpart11.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part1#SP#subpart12.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part2#SP#subpart21.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part2#SP#subpart22.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part3#SP#subpart31.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part3#SP#subpart32.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part4#SP#subpart41.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part4#SP#subpart42.MYI
# check layout success: 0
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -6658,7 +6650,7 @@ t1 CREATE TABLE `t1` (
`f_char1` char(20) DEFAULT NULL,
`f_char2` char(20) DEFAULT NULL,
`f_charbig` varchar(1000) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp12 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp22 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp32 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp42 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM)) */
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp12 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp22 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp32 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp42 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM)) */
unified filelist
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp11.MYD
@@ -7113,37 +7105,37 @@ OPTIMIZE TABLE t1;
Table Op Msg_type Msg_text
test.t1 optimize status OK
state new
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp12 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp22 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp32 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp42 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM)) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp12 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp22 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp32 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp42 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM)) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp11.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp11.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp12.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp12.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp21.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp21.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp22.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp22.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp31.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp31.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp32.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp32.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp41.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp41.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp42.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp42.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par
state old
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp12 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp22 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp32 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp42 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM)) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp12 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp22 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp32 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp42 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM)) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp11.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp11.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp12.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp12.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp21.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp21.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp22.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp22.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp31.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp31.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp32.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp32.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp41.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp41.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp42.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp42.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par MYSQLTEST_VARDIR/master-data/test/data/t1#P#part1#SP#sp11.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part1#SP#sp12.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part2#SP#sp21.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part2#SP#sp22.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part3#SP#sp31.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part3#SP#sp32.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part4#SP#sp41.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part4#SP#sp42.MYD MYSQLTEST_VARDIR/master-data/test/index/t1#P#part1#SP#sp11.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part1#SP#sp12.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part2#SP#sp21.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part2#SP#sp22.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part3#SP#sp31.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part3#SP#sp32.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part4#SP#sp41.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part4#SP#sp42.MYI
# check layout success: 0
REPAIR TABLE t1 EXTENDED;
Table Op Msg_type Msg_text
test.t1 repair status OK
state new
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp12 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp22 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp32 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp42 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM)) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp12 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp22 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp32 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp42 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM)) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp11.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp11.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp12.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp12.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp21.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp21.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp22.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp22.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp31.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp31.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp32.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp32.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp41.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp41.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp42.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp42.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par
state old
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp12 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp22 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp32 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp42 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM)) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp12 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp22 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp32 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp42 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM)) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp11.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp11.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp12.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp12.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp21.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp21.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp22.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp22.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp31.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp31.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp32.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp32.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp41.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp41.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp42.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp42.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par MYSQLTEST_VARDIR/master-data/test/data/t1#P#part1#SP#sp11.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part1#SP#sp12.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part2#SP#sp21.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part2#SP#sp22.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part3#SP#sp31.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part3#SP#sp32.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part4#SP#sp41.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part4#SP#sp42.MYD MYSQLTEST_VARDIR/master-data/test/index/t1#P#part1#SP#sp11.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part1#SP#sp12.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part2#SP#sp21.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part2#SP#sp22.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part3#SP#sp31.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part3#SP#sp32.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part4#SP#sp41.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part4#SP#sp42.MYI
# check layout success: 0
TRUNCATE t1;
# check TRUNCATE success: 1
state new
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp12 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp22 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp32 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp42 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM)) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp12 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp22 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp32 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp42 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM)) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp11.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp11.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp12.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp12.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp21.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp21.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp22.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp22.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp31.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp31.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp32.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp32.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp41.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp41.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp42.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp42.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par
state old
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp12 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp22 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp32 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp42 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM)) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp12 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp22 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp32 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp42 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM)) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp11.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp11.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp12.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp12.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp21.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp21.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp22.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#sp22.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp31.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp31.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp32.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#sp32.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp41.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp41.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp42.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part4#SP#sp42.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par MYSQLTEST_VARDIR/master-data/test/data/t1#P#part1#SP#sp11.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part1#SP#sp12.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part2#SP#sp21.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part2#SP#sp22.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part3#SP#sp31.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part3#SP#sp32.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part4#SP#sp41.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part4#SP#sp42.MYD MYSQLTEST_VARDIR/master-data/test/index/t1#P#part1#SP#sp11.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part1#SP#sp12.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part2#SP#sp21.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part2#SP#sp22.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part3#SP#sp31.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part3#SP#sp32.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part4#SP#sp41.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part4#SP#sp42.MYI
# check layout success: 0
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -7153,7 +7145,7 @@ t1 CREATE TABLE `t1` (
`f_char1` char(20) DEFAULT NULL,
`f_char2` char(20) DEFAULT NULL,
`f_charbig` varchar(1000) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part2 VALUES IN (1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part3 VALUES IN (NULL) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part2 VALUES IN (1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part3 VALUES IN (NULL) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
unified filelist
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp0.MYD
@@ -7612,38 +7604,38 @@ OPTIMIZE TABLE t1;
Table Op Msg_type Msg_text
test.t1 optimize status OK
state new
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part2 VALUES IN (1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part3 VALUES IN (NULL) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part2 VALUES IN (1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part3 VALUES IN (NULL) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp2.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp2.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp2.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par
state old
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part2 VALUES IN (1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part3 VALUES IN (NULL) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part2 VALUES IN (1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part3 VALUES IN (NULL) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp2.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp2.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp2.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par MYSQLTEST_VARDIR/master-data/test/data/t1#P#part1#SP#part1sp0.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part1#SP#part1sp1.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part1#SP#part1sp2.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part2#SP#part2sp0.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part2#SP#part2sp1.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part2#SP#part2sp2.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part3#SP#part3sp0.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part3#SP#part3sp1.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part3#SP#part3sp2.MYD MYSQLTEST_VARDIR/master-data/test/index/t1#P#part1#SP#part1sp0.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part1#SP#part1sp1.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part1#SP#part1sp2.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part2#SP#part2sp0.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part2#SP#part2sp1.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part2#SP#part2sp2.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part3#SP#part3sp0.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part3#SP#part3sp1.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part3#SP#part3sp2.MYI
# check layout success: 0
REPAIR TABLE t1 EXTENDED;
Table Op Msg_type Msg_text
test.t1 repair status OK
state new
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part2 VALUES IN (1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part3 VALUES IN (NULL) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part2 VALUES IN (1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part3 VALUES IN (NULL) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp2.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp2.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp2.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par
state old
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part2 VALUES IN (1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part3 VALUES IN (NULL) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part2 VALUES IN (1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part3 VALUES IN (NULL) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp2.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp2.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp2.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par MYSQLTEST_VARDIR/master-data/test/data/t1#P#part1#SP#part1sp0.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part1#SP#part1sp1.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part1#SP#part1sp2.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part2#SP#part2sp0.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part2#SP#part2sp1.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part2#SP#part2sp2.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part3#SP#part3sp0.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part3#SP#part3sp1.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part3#SP#part3sp2.MYD MYSQLTEST_VARDIR/master-data/test/index/t1#P#part1#SP#part1sp0.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part1#SP#part1sp1.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part1#SP#part1sp2.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part2#SP#part2sp0.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part2#SP#part2sp1.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part2#SP#part2sp2.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part3#SP#part3sp0.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part3#SP#part3sp1.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part3#SP#part3sp2.MYI
# check layout success: 0
TRUNCATE t1;
# check TRUNCATE success: 1
state new
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part2 VALUES IN (1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part3 VALUES IN (NULL) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part2 VALUES IN (1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part3 VALUES IN (NULL) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp2.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp2.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp2.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par
state old
-Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part2 VALUES IN (1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part3 VALUES IN (NULL) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+Table definition SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `f_int1` int(11) DEFAULT NULL, `f_int2` int(11) DEFAULT NULL, `f_char1` char(20) DEFAULT NULL, `f_char2` char(20) DEFAULT NULL, `f_charbig` varchar(1000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part2 VALUES IN (1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part3 VALUES IN (NULL) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
File list MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp2.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part2#SP#part2sp2.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp0.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp0.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp1.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp1.MYI MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp2.MYD MYSQLTEST_VARDIR/master-data/test/t1#P#part3#SP#part3sp2.MYI MYSQLTEST_VARDIR/master-data/test/t1.frm MYSQLTEST_VARDIR/master-data/test/t1.par MYSQLTEST_VARDIR/master-data/test/data/t1#P#part1#SP#part1sp0.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part1#SP#part1sp1.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part1#SP#part1sp2.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part2#SP#part2sp0.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part2#SP#part2sp1.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part2#SP#part2sp2.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part3#SP#part3sp0.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part3#SP#part3sp1.MYD MYSQLTEST_VARDIR/master-data/test/data/t1#P#part3#SP#part3sp2.MYD MYSQLTEST_VARDIR/master-data/test/index/t1#P#part1#SP#part1sp0.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part1#SP#part1sp1.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part1#SP#part1sp2.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part2#SP#part2sp0.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part2#SP#part2sp1.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part2#SP#part2sp2.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part3#SP#part3sp0.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part3#SP#part3sp1.MYI MYSQLTEST_VARDIR/master-data/test/index/t1#P#part3#SP#part3sp2.MYI
# check layout success: 0
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP TABLE IF EXISTS t1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -8088,11 +8080,11 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -8543,11 +8535,11 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -8557,7 +8549,7 @@ t1 CREATE TABLE `t1` (
`f_char1` char(20) DEFAULT NULL,
`f_char2` char(20) DEFAULT NULL,
`f_charbig` varchar(1000) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' ENGINE = MyISAM, PARTITION part0 VALUES IN (0) INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' ENGINE = MyISAM, PARTITION part3 VALUES IN (3) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' ENGINE = MyISAM, PARTITION part0 VALUES IN (0) INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part1 VALUES IN (1) ENGINE = MyISAM, PARTITION part2 VALUES IN (2) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' ENGINE = MyISAM, PARTITION part3 VALUES IN (3) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
unified filelist
$MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYD
@@ -9004,11 +8996,11 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -9018,7 +9010,7 @@ t1 CREATE TABLE `t1` (
`f_char1` char(20) DEFAULT NULL,
`f_char2` char(20) DEFAULT NULL,
`f_charbig` varchar(1000) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION parte VALUES LESS THAN (20) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' ENGINE = MyISAM, PARTITION partf VALUES LESS THAN (2147483646) INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (15) ENGINE = MyISAM, PARTITION parte VALUES LESS THAN (20) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' ENGINE = MyISAM, PARTITION partf VALUES LESS THAN (2147483646) INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
unified filelist
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYD
@@ -9459,11 +9451,11 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -9473,7 +9465,7 @@ t1 CREATE TABLE `t1` (
`f_char1` char(20) DEFAULT NULL,
`f_char2` char(20) DEFAULT NULL,
`f_charbig` varchar(1000) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (2147483646) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (2147483646) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
unified filelist
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp0.MYD
@@ -9920,11 +9912,11 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -9934,7 +9926,7 @@ t1 CREATE TABLE `t1` (
`f_char1` char(20) DEFAULT NULL,
`f_char2` char(20) DEFAULT NULL,
`f_charbig` varchar(1000) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' ENGINE = MyISAM, SUBPARTITION subpart12 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' ENGINE = MyISAM), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart22 INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart32 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' ENGINE = MyISAM, SUBPARTITION subpart12 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' ENGINE = MyISAM), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart22 INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart32 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 ENGINE = MyISAM, SUBPARTITION subpart42 ENGINE = MyISAM)) */
unified filelist
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart11.MYD
@@ -10379,11 +10371,11 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -10393,7 +10385,7 @@ t1 CREATE TABLE `t1` (
`f_char1` char(20) DEFAULT NULL,
`f_char2` char(20) DEFAULT NULL,
`f_charbig` varchar(1000) DEFAULT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp12 INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' ENGINE = MyISAM, SUBPARTITION sp22 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp32 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp42 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM)) */
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp12 INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' ENGINE = MyISAM, SUBPARTITION sp22 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp32 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp42 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM)) */
unified filelist
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp11.MYD
@@ -10840,7 +10832,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# 1.2 The partitioning function contains two columns.
DROP TABLE IF EXISTS t1;
@@ -10855,7 +10847,7 @@ f_charbig VARCHAR(1000)
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -11300,7 +11292,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -11313,7 +11305,7 @@ f_charbig VARCHAR(1000)
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -11764,7 +11756,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -11785,7 +11777,7 @@ PARTITION part2 VALUES IN (2),
PARTITION part3 VALUES IN (3));
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -12242,7 +12234,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -12261,7 +12253,7 @@ PARTITION parte VALUES LESS THAN (20),
PARTITION partf VALUES LESS THAN (2147483646));
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -12712,7 +12704,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -12729,7 +12721,7 @@ PARTITION partc VALUES LESS THAN (10),
PARTITION partd VALUES LESS THAN (2147483646));
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -13184,7 +13176,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -13205,7 +13197,7 @@ PARTITION part4 VALUES LESS THAN (2147483646)
(SUBPARTITION subpart41, SUBPARTITION subpart42));
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -13660,7 +13652,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -13681,7 +13673,7 @@ PARTITION part4 VALUES IN (NULL)
(SUBPARTITION sp41, SUBPARTITION sp42));
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -14138,7 +14130,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -14155,7 +14147,7 @@ SUBPARTITION BY KEY(f_int2) SUBPARTITIONS 3
PARTITION part3 VALUES IN (NULL));
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -14614,7 +14606,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
#------------------------------------------------------------------------
# 2 Tables with PRIMARY KEY and/or UNIQUE INDEXes
@@ -14624,7 +14616,7 @@ DROP TABLE t1;
DROP TABLE IF EXISTS t1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -15122,11 +15114,11 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -15630,11 +15622,11 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -15646,7 +15638,7 @@ t1 CREATE TABLE `t1` (
`f_charbig` varchar(1000) DEFAULT NULL,
UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part0 VALUES IN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part1 VALUES IN (1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part2 VALUES IN (2) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part3 VALUES IN (3) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (MOD(f_int1,4)) (PARTITION part_3 VALUES IN (-3) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_2 VALUES IN (-2) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_1 VALUES IN (-1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part_N VALUES IN (NULL) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part0 VALUES IN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part1 VALUES IN (1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part2 VALUES IN (2) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part3 VALUES IN (3) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
unified filelist
$MYSQLTEST_VARDIR/master-data/test/t1#P#part0.MYD
@@ -16144,11 +16136,11 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -16160,7 +16152,7 @@ t1 CREATE TABLE `t1` (
`f_charbig` varchar(1000) DEFAULT NULL,
UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (15) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION parte VALUES LESS THAN (20) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partf VALUES LESS THAN (2147483646) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) (PARTITION parta VALUES LESS THAN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (15) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION parte VALUES LESS THAN (20) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partf VALUES LESS THAN (2147483646) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
unified filelist
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta.MYD
@@ -16652,11 +16644,11 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -16668,7 +16660,7 @@ t1 CREATE TABLE `t1` (
`f_charbig` varchar(1000) DEFAULT NULL,
UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (2147483646) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1 DIV 2) SUBPARTITION BY HASH (f_int1) SUBPARTITIONS 2 (PARTITION parta VALUES LESS THAN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partb VALUES LESS THAN (5) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partc VALUES LESS THAN (10) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION partd VALUES LESS THAN (2147483646) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
unified filelist
$MYSQLTEST_VARDIR/master-data/test/t1#P#parta#SP#partasp0.MYD
@@ -17166,11 +17158,11 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -17182,7 +17174,7 @@ t1 CREATE TABLE `t1` (
`f_charbig` varchar(1000) DEFAULT NULL,
UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart12 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart22 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart32 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart42 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM)) */
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (f_int1) SUBPARTITION BY KEY (f_int1) (PARTITION part1 VALUES LESS THAN (0) (SUBPARTITION subpart11 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart12 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part2 VALUES LESS THAN (5) (SUBPARTITION subpart21 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart22 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part3 VALUES LESS THAN (10) (SUBPARTITION subpart31 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart32 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part4 VALUES LESS THAN (2147483646) (SUBPARTITION subpart41 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION subpart42 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM)) */
unified filelist
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#subpart11.MYD
@@ -17678,11 +17670,11 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -17694,7 +17686,7 @@ t1 CREATE TABLE `t1` (
`f_charbig` varchar(1000) DEFAULT NULL,
UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp12 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp22 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp32 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp42 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM)) */
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) SUBPARTITION BY HASH (f_int1 + 1) (PARTITION part1 VALUES IN (0) (SUBPARTITION sp11 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp12 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part2 VALUES IN (1) (SUBPARTITION sp21 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp22 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part3 VALUES IN (2) (SUBPARTITION sp31 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp32 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, SUBPARTITION sp42 DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM)) */
unified filelist
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#sp11.MYD
@@ -18192,11 +18184,11 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -18208,7 +18200,7 @@ t1 CREATE TABLE `t1` (
`f_charbig` varchar(1000) DEFAULT NULL,
UNIQUE KEY `uidx1` (`f_int1`,`f_int2`),
UNIQUE KEY `uidx2` (`f_int2`,`f_int1`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/master-data/test/data/' INDEX DIRECTORY='MYSQLTEST_VARDIR/master-data/test/index/' /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part2 VALUES IN (1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part3 VALUES IN (NULL) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) SUBPARTITION BY KEY (f_int1) SUBPARTITIONS 3 (PARTITION part1 VALUES IN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part2 VALUES IN (1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM, PARTITION part3 VALUES IN (NULL) DATA DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/data' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/master-data/test/index' ENGINE = MyISAM) */
unified filelist
$MYSQLTEST_VARDIR/master-data/test/t1#P#part1#SP#part1sp0.MYD
@@ -18708,7 +18700,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
#------------------------------------------------------------------------
# 3 Tables with PRIMARY KEY and/or UNIQUE INDEXes
@@ -18727,7 +18719,7 @@ f_charbig VARCHAR(1000)
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -19225,7 +19217,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -19238,7 +19230,7 @@ f_charbig VARCHAR(1000)
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -19742,7 +19734,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -19763,7 +19755,7 @@ PARTITION part2 VALUES IN (2),
PARTITION part3 VALUES IN (3));
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -20273,7 +20265,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -20292,7 +20284,7 @@ PARTITION parte VALUES LESS THAN (20),
PARTITION partf VALUES LESS THAN (2147483646));
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -20796,7 +20788,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -20813,7 +20805,7 @@ PARTITION partc VALUES LESS THAN (10),
PARTITION partd VALUES LESS THAN (2147483646));
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -21321,7 +21313,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -21342,7 +21334,7 @@ PARTITION part4 VALUES LESS THAN (2147483646)
(SUBPARTITION subpart41, SUBPARTITION subpart42));
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -21850,7 +21842,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -21871,7 +21863,7 @@ PARTITION part4 VALUES IN (NULL)
(SUBPARTITION sp41, SUBPARTITION sp42));
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -22381,7 +22373,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -22398,7 +22390,7 @@ SUBPARTITION BY KEY(f_int2) SUBPARTITIONS 3
PARTITION part3 VALUES IN (NULL));
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -22910,7 +22902,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
DROP VIEW IF EXISTS v1;
DROP TABLE IF EXISTS t1;
diff --git a/mysql-test/suite/parts/r/partition_bit_myisam.result b/mysql-test/suite/parts/r/partition_bit_myisam.result
index 2bd1b1afd2c..e5b31e0c154 100644
--- a/mysql-test/suite/parts/r/partition_bit_myisam.result
+++ b/mysql-test/suite/parts/r/partition_bit_myisam.result
@@ -23,7 +23,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`a` bit(1) NOT NULL DEFAULT '\0',
PRIMARY KEY (`a`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='/tmp/' INDEX DIRECTORY='/tmp/' /*!50100 PARTITION BY KEY (a) (PARTITION pa1 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) (PARTITION pa1 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
drop table t1;
create table t1 (a bit(64), primary key (a)) engine='MyISAM'
partition by key (a) partitions 2;
@@ -66,7 +66,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`a` bit(64) NOT NULL DEFAULT '\0\0\0\0\0\0\0\0',
PRIMARY KEY (`a`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='/tmp/' INDEX DIRECTORY='/tmp/' /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
insert into t1 values
(b'1111111111111111111111111111111111111111111111111111111111111111'),
(b'1000000000000000000000000000000000000000000000000000000000000000'),
diff --git a/mysql-test/suite/parts/r/partition_char_innodb.result b/mysql-test/suite/parts/r/partition_char_innodb.result
index 27399a0ad41..c9609537f08 100644
--- a/mysql-test/suite/parts/r/partition_char_innodb.result
+++ b/mysql-test/suite/parts/r/partition_char_innodb.result
@@ -1,3 +1,4 @@
+---- Partitioning and char data type
create table t1 (a char(255) not null, primary key(a)) engine='InnoDB'
partition by key (a) (
partition pa1 DATA DIRECTORY =
@@ -12,14 +13,12 @@ partition pa3 DATA DIRECTORY =
partition pa4 DATA DIRECTORY =
'/tmp' INDEX DIRECTORY =
'/tmp' max_rows=40 min_rows=2);
-Warnings:
-Warning 1266 Using storage engine MyISAM for table 't1'
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` char(255) NOT NULL,
PRIMARY KEY (`a`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='/tmp/' INDEX DIRECTORY='/tmp/' /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = InnoDB, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = InnoDB, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = InnoDB, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = InnoDB) */
insert into t1 values (repeat('a',255)), ('b'), (repeat('a',128)), (repeat('b',64));
select * from t1;
a
@@ -40,14 +39,12 @@ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
drop table t1;
create table t2 (a char(255) not null, primary key(a)) engine='InnoDB'
partition by key (a) partitions 27;
-Warnings:
-Warning 1266 Using storage engine MyISAM for table 't2'
show create table t2;
Table Create Table
t2 CREATE TABLE `t2` (
`a` char(255) NOT NULL,
PRIMARY KEY (`a`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) PARTITIONS 27 */
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) PARTITIONS 27 */
26 inserts;
insert into t2 values (repeat(char(ascii('a')+0),26+54));
insert into t2 values (repeat(char(ascii('a')+1),25+54));
@@ -107,6 +104,7 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
drop table t2;
+---- Partitioning and binary data type
create table t1 (a binary(255) not null, primary key(a)) engine='InnoDB'
partition by key (a) (
partition pa1 DATA DIRECTORY =
@@ -121,14 +119,12 @@ partition pa3 DATA DIRECTORY =
partition pa4 DATA DIRECTORY =
'/tmp' INDEX DIRECTORY =
'/tmp' max_rows=40 min_rows=2);
-Warnings:
-Warning 1266 Using storage engine MyISAM for table 't1'
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` binary(255) NOT NULL,
PRIMARY KEY (`a`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='/tmp/' INDEX DIRECTORY='/tmp/' /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = InnoDB, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = InnoDB, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = InnoDB, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = InnoDB) */
insert into t1 values (repeat('a',255)), ('b'), (repeat('a',128)), (repeat('b',64));
select hex(a) from t1;
hex(a)
@@ -152,14 +148,12 @@ hex(a)
drop table t1;
create table t2 (a binary(255) not null, primary key(a)) engine='InnoDB'
partition by key (a) partitions 27;
-Warnings:
-Warning 1266 Using storage engine MyISAM for table 't2'
show create table t2;
Table Create Table
t2 CREATE TABLE `t2` (
`a` binary(255) NOT NULL,
PRIMARY KEY (`a`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) PARTITIONS 27 */
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) PARTITIONS 27 */
26 inserts;
insert into t2 values (repeat(char(ascii('a')+0),26+54));
insert into t2 values (repeat(char(ascii('a')+1),25+54));
@@ -219,157 +213,7 @@ hex(a)
797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
drop table t2;
-create table t3 (a binary(255) not null, primary key(a)) engine='InnoDB'
-partition by range (ascii(a)) subpartition by key (a) subpartitions 4 (
-partition pa16 values less than (16),
-partition pa32 values less than (32),
-partition pa64 values less than (64),
-partition pa128 values less than (128),
-partition pa256 values less than (256)
-);
-Warnings:
-Warning 1266 Using storage engine MyISAM for table 't3'
-show create table t3;
-Table Create Table
-t3 CREATE TABLE `t3` (
- `a` binary(255) NOT NULL,
- PRIMARY KEY (`a`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (ascii(a)) SUBPARTITION BY KEY (a) SUBPARTITIONS 4 (PARTITION pa16 VALUES LESS THAN (16) ENGINE = MyISAM, PARTITION pa32 VALUES LESS THAN (32) ENGINE = MyISAM, PARTITION pa64 VALUES LESS THAN (64) ENGINE = MyISAM, PARTITION pa128 VALUES LESS THAN (128) ENGINE = MyISAM, PARTITION pa256 VALUES LESS THAN (256) ENGINE = MyISAM) */
-26 inserts;
-insert into t3 values (repeat(char(ascii('a')+0),26+54));
-insert into t3 values (repeat(char(ascii('a')+1),25+54));
-insert into t3 values (repeat(char(ascii('a')+2),24+54));
-insert into t3 values (repeat(char(ascii('a')+3),23+54));
-insert into t3 values (repeat(char(ascii('a')+4),22+54));
-insert into t3 values (repeat(char(ascii('a')+5),21+54));
-insert into t3 values (repeat(char(ascii('a')+6),20+54));
-insert into t3 values (repeat(char(ascii('a')+7),19+54));
-insert into t3 values (repeat(char(ascii('a')+8),18+54));
-insert into t3 values (repeat(char(ascii('a')+9),17+54));
-insert into t3 values (repeat(char(ascii('a')+10),16+54));
-insert into t3 values (repeat(char(ascii('a')+11),15+54));
-insert into t3 values (repeat(char(ascii('a')+12),14+54));
-insert into t3 values (repeat(char(ascii('a')+13),13+54));
-insert into t3 values (repeat(char(ascii('a')+14),12+54));
-insert into t3 values (repeat(char(ascii('a')+15),11+54));
-insert into t3 values (repeat(char(ascii('a')+16),10+54));
-insert into t3 values (repeat(char(ascii('a')+17),9+54));
-insert into t3 values (repeat(char(ascii('a')+18),8+54));
-insert into t3 values (repeat(char(ascii('a')+19),7+54));
-insert into t3 values (repeat(char(ascii('a')+20),6+54));
-insert into t3 values (repeat(char(ascii('a')+21),5+54));
-insert into t3 values (repeat(char(ascii('a')+22),4+54));
-insert into t3 values (repeat(char(ascii('a')+23),3+54));
-insert into t3 values (repeat(char(ascii('a')+24),2+54));
-insert into t3 values (repeat(char(ascii('a')+25),1+54));
-select count(*) from t3;
-count(*)
-26
-select hex(a) from t3;
-hex(a)
-616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868680000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777770000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-drop table t3;
-create table t4 (a binary(255) not null, primary key(a)) engine='InnoDB'
-partition by list (ascii(a)) subpartition by key (a) subpartitions 4 (
-partition pa16 values in (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16),
-partition pa32 values in (17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32),
-partition pa64 values in (33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64),
-partition pa128 values in (65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128),
-partition pa256 values in (129,130,131,132,133,134,135,136,137,138,139,140
-,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256)
-);
-Warnings:
-Warning 1266 Using storage engine MyISAM for table 't4'
-show create table t4;
-Table Create Table
-t4 CREATE TABLE `t4` (
- `a` binary(255) NOT NULL,
- PRIMARY KEY (`a`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (ascii(a)) SUBPARTITION BY KEY (a) SUBPARTITIONS 4 (PARTITION pa16 VALUES IN (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16) ENGINE = MyISAM, PARTITION pa32 VALUES IN (17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32) ENGINE = MyISAM, PARTITION pa64 VALUES IN (33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64) ENGINE = MyISAM, PARTITION pa128 VALUES IN (65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128) ENGINE = MyISAM, PARTITION pa256 VALUES IN (129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256) ENGINE = MyISAM) */
-26 inserts;
-insert into t4 values (repeat(char(ascii('a')+0),26+54));
-insert into t4 values (repeat(char(ascii('a')+1),25+54));
-insert into t4 values (repeat(char(ascii('a')+2),24+54));
-insert into t4 values (repeat(char(ascii('a')+3),23+54));
-insert into t4 values (repeat(char(ascii('a')+4),22+54));
-insert into t4 values (repeat(char(ascii('a')+5),21+54));
-insert into t4 values (repeat(char(ascii('a')+6),20+54));
-insert into t4 values (repeat(char(ascii('a')+7),19+54));
-insert into t4 values (repeat(char(ascii('a')+8),18+54));
-insert into t4 values (repeat(char(ascii('a')+9),17+54));
-insert into t4 values (repeat(char(ascii('a')+10),16+54));
-insert into t4 values (repeat(char(ascii('a')+11),15+54));
-insert into t4 values (repeat(char(ascii('a')+12),14+54));
-insert into t4 values (repeat(char(ascii('a')+13),13+54));
-insert into t4 values (repeat(char(ascii('a')+14),12+54));
-insert into t4 values (repeat(char(ascii('a')+15),11+54));
-insert into t4 values (repeat(char(ascii('a')+16),10+54));
-insert into t4 values (repeat(char(ascii('a')+17),9+54));
-insert into t4 values (repeat(char(ascii('a')+18),8+54));
-insert into t4 values (repeat(char(ascii('a')+19),7+54));
-insert into t4 values (repeat(char(ascii('a')+20),6+54));
-insert into t4 values (repeat(char(ascii('a')+21),5+54));
-insert into t4 values (repeat(char(ascii('a')+22),4+54));
-insert into t4 values (repeat(char(ascii('a')+23),3+54));
-insert into t4 values (repeat(char(ascii('a')+24),2+54));
-insert into t4 values (repeat(char(ascii('a')+25),1+54));
-select count(*) from t4;
-count(*)
-26
-select hex(a) from t4;
-hex(a)
-616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868680000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777770000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-drop table t4;
+---- Partitioning and varchar data type
create table t1 (a varchar(767) not null, primary key(a)) engine='InnoDB'
partition by key (a) (
partition pa1 DATA DIRECTORY =
@@ -384,14 +228,12 @@ partition pa3 DATA DIRECTORY =
partition pa4 DATA DIRECTORY =
'/tmp' INDEX DIRECTORY =
'/tmp' max_rows=40 min_rows=2);
-Warnings:
-Warning 1266 Using storage engine MyISAM for table 't1'
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` varchar(767) NOT NULL,
PRIMARY KEY (`a`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='/tmp/' INDEX DIRECTORY='/tmp/' /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = InnoDB, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = InnoDB, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = InnoDB, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = InnoDB) */
insert into t1 values (repeat('a',767)), ('b'), (repeat('a',500)), (repeat('b',64));
select * from t1;
a
@@ -412,14 +254,12 @@ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
drop table t1;
create table t2 (a varchar(767) not null, primary key(a)) engine='InnoDB'
partition by key (a) partitions 27;
-Warnings:
-Warning 1266 Using storage engine MyISAM for table 't2'
show create table t2;
Table Create Table
t2 CREATE TABLE `t2` (
`a` varchar(767) NOT NULL,
PRIMARY KEY (`a`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) PARTITIONS 27 */
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) PARTITIONS 27 */
26 inserts;
insert into t2 values (repeat(char(ascii('a')+0),26*26));
insert into t2 values (repeat(char(ascii('a')+1),25*25));
@@ -479,6 +319,7 @@ xxxxxxxxx
yyyy
z
drop table t2;
+---- Partitioning and varbinary data type
create table t1 (a varbinary(767) not null, primary key(a)) engine='InnoDB'
partition by key (a) (
partition pa1 DATA DIRECTORY =
@@ -493,14 +334,12 @@ partition pa3 DATA DIRECTORY =
partition pa4 DATA DIRECTORY =
'/tmp' INDEX DIRECTORY =
'/tmp' max_rows=40 min_rows=2);
-Warnings:
-Warning 1266 Using storage engine MyISAM for table 't1'
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` varbinary(767) NOT NULL,
PRIMARY KEY (`a`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='/tmp/' INDEX DIRECTORY='/tmp/' /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = InnoDB, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = InnoDB, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = InnoDB, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = InnoDB) */
insert into t1 values (repeat('a',767)), ('b'), (repeat('a',500)), (repeat('b',64));
select * from t1;
a
@@ -521,14 +360,12 @@ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
drop table t1;
create table t2 (a varbinary(767) not null, primary key(a)) engine='InnoDB'
partition by key (a) partitions 30;
-Warnings:
-Warning 1266 Using storage engine MyISAM for table 't2'
show create table t2;
Table Create Table
t2 CREATE TABLE `t2` (
`a` varbinary(767) NOT NULL,
PRIMARY KEY (`a`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) PARTITIONS 30 */
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) PARTITIONS 30 */
26 inserts;
insert into t2 values (repeat(char(ascii('a')+0),26*26));
insert into t2 values (repeat(char(ascii('a')+1),25*25));
@@ -588,6 +425,7 @@ xxxxxxxxx
yyyy
z
drop table t2;
+---- Partitioning and enum data type
create table t1 (a enum('A','B','C','D','E','F','G','H','I','J','K','L') not null, primary key(a)) engine='InnoDB'
partition by key (a) (
partition pa1 DATA DIRECTORY =
@@ -602,14 +440,12 @@ partition pa3 DATA DIRECTORY =
partition pa4 DATA DIRECTORY =
'/tmp' INDEX DIRECTORY =
'/tmp' max_rows=40 min_rows=2);
-Warnings:
-Warning 1266 Using storage engine MyISAM for table 't1'
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` enum('A','B','C','D','E','F','G','H','I','J','K','L') NOT NULL,
PRIMARY KEY (`a`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='/tmp/' INDEX DIRECTORY='/tmp/' /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = InnoDB, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = InnoDB, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = InnoDB, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = InnoDB) */
insert into t1 values ('A'),('D'),('L'),('G');
select * from t1;
a
@@ -641,14 +477,12 @@ create table t2 (a enum (
'Y','Z'
) not null, primary key(a)) engine='InnoDB'
partition by key (a) partitions 27;
-Warnings:
-Warning 1266 Using storage engine MyISAM for table 't2'
show create table t2;
Table Create Table
t2 CREATE TABLE `t2` (
`a` enum('1','2','3','4','5','6','7','8','9','0','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') NOT NULL,
PRIMARY KEY (`a`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) PARTITIONS 27 */
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) PARTITIONS 27 */
0 inserts;
insert into t2 values (char(ascii('A')+26));
Warnings:
@@ -721,60 +555,7 @@ X
Y
Z
drop table t2;
-create table t3 (a enum (
-'1','2','3','4','5','6','7','8','9','0',
-'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'
-) not null, primary key(a)) engine='InnoDB'
-partition by range (cast(a as unsigned)) subpartition by key (a) subpartitions 3 (
-partition pa9 values less than (10),
-partition pa18 values less than (19),
-partition pa27 values less than (28),
-partition pa36 values less than (37)
-);
-Warnings:
-Warning 1266 Using storage engine MyISAM for table 't3'
-show create table t3;
-Table Create Table
-t3 CREATE TABLE `t3` (
- `a` enum('1','2','3','4','5','6','7','8','9','0','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') NOT NULL,
- PRIMARY KEY (`a`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (cast(a as unsigned)) SUBPARTITION BY KEY (a) SUBPARTITIONS 3 (PARTITION pa9 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION pa18 VALUES LESS THAN (19) ENGINE = MyISAM, PARTITION pa27 VALUES LESS THAN (28) ENGINE = MyISAM, PARTITION pa36 VALUES LESS THAN (37) ENGINE = MyISAM) */
-0 inserts;
-select count(*) from t3;
-count(*)
-0
-select * from t3;
-a
-drop table t3;
-create table t4 (a enum (
-'1','2','3','4','5','6','7','8','9','0',
-'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'
-) not null, primary key(a)) engine='InnoDB'
-partition by list (cast(a as unsigned)) subpartition by key (a) subpartitions 3 (
-partition pa9 values in (1,2,3,4,5,6,7,8,9),
-partition pa18 values in (10,11,12,13,14,15,16,17,18),
-partition pa27 values in (19,20,21,22,23,24,25,26,27),
-partition pa36 values in (28,29,30,31,32,33,34,35,36)
-);
-Warnings:
-Warning 1266 Using storage engine MyISAM for table 't4'
-show create table t4;
-Table Create Table
-t4 CREATE TABLE `t4` (
- `a` enum('1','2','3','4','5','6','7','8','9','0','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') NOT NULL,
- PRIMARY KEY (`a`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (cast(a as unsigned)) SUBPARTITION BY KEY (a) SUBPARTITIONS 3 (PARTITION pa9 VALUES IN (1,2,3,4,5,6,7,8,9) ENGINE = MyISAM, PARTITION pa18 VALUES IN (10,11,12,13,14,15,16,17,18) ENGINE = MyISAM, PARTITION pa27 VALUES IN (19,20,21,22,23,24,25,26,27) ENGINE = MyISAM, PARTITION pa36 VALUES IN (28,29,30,31,32,33,34,35,36) ENGINE = MyISAM) */
-0 inserts;
-select count(*) from t4;
-count(*)
-0
-select * from t4;
-a
-drop table t4;
+---- Partitioning and set data type
create table t1 (a set('A','B','C','D','E','F','G','H','I','J','K','L') not null, primary key(a)) engine='InnoDB'
partition by key (a) (
partition pa1 DATA DIRECTORY =
@@ -789,14 +570,12 @@ partition pa3 DATA DIRECTORY =
partition pa4 DATA DIRECTORY =
'/tmp' INDEX DIRECTORY =
'/tmp' max_rows=40 min_rows=2);
-Warnings:
-Warning 1266 Using storage engine MyISAM for table 't1'
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` set('A','B','C','D','E','F','G','H','I','J','K','L') NOT NULL,
PRIMARY KEY (`a`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='/tmp/' INDEX DIRECTORY='/tmp/' /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = InnoDB, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = InnoDB, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = InnoDB, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = InnoDB) */
insert into t1 values ('A,B'),('C,D'),('E,L'),('G,H,K');
select * from t1 order by a;
a
@@ -828,14 +607,12 @@ create table t2 (a set (
'Y','Z'
) not null, primary key(a)) engine='InnoDB'
partition by key (a) partitions 27;
-Warnings:
-Warning 1266 Using storage engine MyISAM for table 't2'
show create table t2;
Table Create Table
t2 CREATE TABLE `t2` (
`a` set('1','2','3','4','5','6','7','8','9','0','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') NOT NULL,
PRIMARY KEY (`a`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) PARTITIONS 27 */
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) PARTITIONS 27 */
insert into t2 values ('A'),('B'),('C'),('D'),('E'),('F'),('G'),('H'),('I'),('K'),('L'),('M'),('N'),('O'),('P'),('Q'),('S'),('T'),('U'),('V'),('X'),('Y'),('Z');
insert into t2 values ('A,B'),('B,C'),('C,D'),('D,E'),('E,F'),('F,G'),('G,H'),('H,I'),('I,J'),('K,L'),('L,M'),('M,N'),('N,O'),('O,P'),('P,Q'),('Q,R'),('S,T'),('T,U'),('U,V'),('V,W'),('X,Y'),('Y,Z'),('Z,A');
insert into t2 values ('A,B,C'),('B,C,D'),('C,D,E'),('D,E,F'),('E,F,G'),('F,G,H'),('G,H,I'),('H,I,J'),('I,J,K'),('K,L,M'),('L,M,N'),('M,N,O'),('N,O,P'),('O,P,Q'),('P,Q,R'),('Q,R,S'),('S,T,U'),('T,U,V'),('U,V,W'),('V,W,X'),('X,Y,Z'),('Y,Z,A'),('Z,A,B');
@@ -947,56 +724,7 @@ Y,Z
A,Y,Z
X,Y,Z
drop table t2;
-create table t3 (a set (
-'1','2','3','4','5','6','7','8','9','0'
-) not null, primary key(a)) engine='InnoDB'
-partition by range (cast(a as unsigned)) subpartition by key (a) subpartitions 3 (
-partition pa9 values less than (10),
-partition pa18 values less than (19),
-partition pa27 values less than (28),
-partition pa36 values less than (37),
-partition pa64 values less than (65),
-partition pa128 values less than (129),
-partition pa256 values less than (257),
-partition pa512 values less than (513),
-partition pa768 values less than (769),
-partition pa1024 values less than (1025)
-);
-Warnings:
-Warning 1266 Using storage engine MyISAM for table 't3'
-show create table t3;
-Table Create Table
-t3 CREATE TABLE `t3` (
- `a` set('1','2','3','4','5','6','7','8','9','0') NOT NULL,
- PRIMARY KEY (`a`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (cast(a as unsigned)) SUBPARTITION BY KEY (a) SUBPARTITIONS 3 (PARTITION pa9 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION pa18 VALUES LESS THAN (19) ENGINE = MyISAM, PARTITION pa27 VALUES LESS THAN (28) ENGINE = MyISAM, PARTITION pa36 VALUES LESS THAN (37) ENGINE = MyISAM, PARTITION pa64 VALUES LESS THAN (65) ENGINE = MyISAM, PARTITION pa128 VALUES LESS THAN (129) ENGINE = MyISAM, PARTITION pa256 VALUES LESS THAN (257) ENGINE = MyISAM, PARTITION pa512 VALUES LESS THAN (513) ENGINE = MyISAM, PARTITION pa768 VALUES LESS THAN (769) ENGINE = MyISAM, PARTITION pa1024 VALUES LESS THAN (1025) ENGINE = MyISAM) */
-select count(*) from t3;
-count(*)
-0
-select * from t3 order by a;
-a
-drop table t3;
-create table t4 (a set (
-'1','2','3') not null, primary key(a)) engine='InnoDB'
-partition by list (cast(a as unsigned)) subpartition by key (a) subpartitions 3 (
-partition pa9 values in (1,2,3,4,5,6,7,8,9),
-partition pa18 values in (10,11,12,13,14,15,16,17,18),
-partition pa27 values in (19,20,21,22,23,24,25,26,27)
-);
-Warnings:
-Warning 1266 Using storage engine MyISAM for table 't4'
-show create table t4;
-Table Create Table
-t4 CREATE TABLE `t4` (
- `a` set('1','2','3') NOT NULL,
- PRIMARY KEY (`a`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (cast(a as unsigned)) SUBPARTITION BY KEY (a) SUBPARTITIONS 3 (PARTITION pa9 VALUES IN (1,2,3,4,5,6,7,8,9) ENGINE = MyISAM, PARTITION pa18 VALUES IN (10,11,12,13,14,15,16,17,18) ENGINE = MyISAM, PARTITION pa27 VALUES IN (19,20,21,22,23,24,25,26,27) ENGINE = MyISAM) */
-select count(*) from t4;
-count(*)
-0
-select * from t4 order by a;
-a
-drop table t4;
+---- Partitioning and blob data type
create table t1 (a blob not null, primary key(a(767))) engine='InnoDB'
partition by key (a) (
partition pa1 DATA DIRECTORY =
@@ -1024,6 +752,7 @@ ERROR HY000: A BLOB field is not allowed in partition function
create table t2 (a longblob not null, primary key(a(767))) engine='InnoDB'
partition by key (a) partitions 30;
ERROR HY000: A BLOB field is not allowed in partition function
+---- Partitioning and text data type
create table t1 (a text not null, primary key(a(767))) engine='InnoDB'
partition by key (a) (
partition pa1 DATA DIRECTORY =
diff --git a/mysql-test/suite/parts/r/partition_char_myisam.result b/mysql-test/suite/parts/r/partition_char_myisam.result
index 514b2dba1bf..1009f52348d 100644
--- a/mysql-test/suite/parts/r/partition_char_myisam.result
+++ b/mysql-test/suite/parts/r/partition_char_myisam.result
@@ -1,5 +1,6 @@
-create table t1 (a date not null, b varchar(50) not null, c varchar(50) not null, d enum('m', 'w'), primary key(a,b,c,d)) engine='MyISAM'
-partition by key (a,b,c,d) (
+---- Partitioning and char data type
+create table t1 (a char(255) not null, primary key(a)) engine='MyISAM'
+partition by key (a) (
partition pa1 DATA DIRECTORY =
'/tmp' INDEX DIRECTORY =
'/tmp' max_rows=20 min_rows=2,
@@ -15,26 +16,764 @@ partition pa4 DATA DIRECTORY =
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `a` date NOT NULL,
- `b` varchar(50) NOT NULL,
- `c` varchar(50) NOT NULL,
- `d` enum('m','w') NOT NULL DEFAULT 'm',
- PRIMARY KEY (`a`,`b`,`c`,`d`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='/tmp/' INDEX DIRECTORY='/tmp/' /*!50100 PARTITION BY KEY (a,b,c,d) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
-insert into t1 values
-('1975-01-01', 'abcde', 'abcde','m'),
-('1983-12-31', 'cdef', 'srtbvsr', 'w'),
-('1980-10-14', 'fgbbd', 'dtzndtz', 'w'),
-('2000-06-15', 'jukg','zikhuk','m');
-select * from t1;
-a b c d
-1975-01-01 abcde abcde m
-1980-10-14 fgbbd dtzndtz w
-1983-12-31 cdef srtbvsr w
-2000-06-15 jukg zikhuk m
-select * from t1 where a<19851231;
-a b c d
-1975-01-01 abcde abcde m
-1980-10-14 fgbbd dtzndtz w
-1983-12-31 cdef srtbvsr w
+ `a` char(255) NOT NULL,
+ PRIMARY KEY (`a`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
+insert into t1 values (repeat('a',255)), ('b'), (repeat('a',128)), (repeat('b',64));
+select * from t1;
+a
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+b
+bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+select * from t1 where a='b';
+a
+b
+update t1 set a='bb' where a='b';
+delete from t1 where a='bb';
+select * from t1;
+a
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+drop table t1;
+create table t2 (a char(255) not null, primary key(a)) engine='MyISAM'
+partition by key (a) partitions 27;
+show create table t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `a` char(255) NOT NULL,
+ PRIMARY KEY (`a`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) PARTITIONS 27 */
+26 inserts;
+insert into t2 values (repeat(char(ascii('a')+0),26+54));
+insert into t2 values (repeat(char(ascii('a')+1),25+54));
+insert into t2 values (repeat(char(ascii('a')+2),24+54));
+insert into t2 values (repeat(char(ascii('a')+3),23+54));
+insert into t2 values (repeat(char(ascii('a')+4),22+54));
+insert into t2 values (repeat(char(ascii('a')+5),21+54));
+insert into t2 values (repeat(char(ascii('a')+6),20+54));
+insert into t2 values (repeat(char(ascii('a')+7),19+54));
+insert into t2 values (repeat(char(ascii('a')+8),18+54));
+insert into t2 values (repeat(char(ascii('a')+9),17+54));
+insert into t2 values (repeat(char(ascii('a')+10),16+54));
+insert into t2 values (repeat(char(ascii('a')+11),15+54));
+insert into t2 values (repeat(char(ascii('a')+12),14+54));
+insert into t2 values (repeat(char(ascii('a')+13),13+54));
+insert into t2 values (repeat(char(ascii('a')+14),12+54));
+insert into t2 values (repeat(char(ascii('a')+15),11+54));
+insert into t2 values (repeat(char(ascii('a')+16),10+54));
+insert into t2 values (repeat(char(ascii('a')+17),9+54));
+insert into t2 values (repeat(char(ascii('a')+18),8+54));
+insert into t2 values (repeat(char(ascii('a')+19),7+54));
+insert into t2 values (repeat(char(ascii('a')+20),6+54));
+insert into t2 values (repeat(char(ascii('a')+21),5+54));
+insert into t2 values (repeat(char(ascii('a')+22),4+54));
+insert into t2 values (repeat(char(ascii('a')+23),3+54));
+insert into t2 values (repeat(char(ascii('a')+24),2+54));
+insert into t2 values (repeat(char(ascii('a')+25),1+54));
+select count(*) from t2;
+count(*)
+26
+select * from t2;
+a
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
+eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
+hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
+iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
+jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj
+kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
+lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll
+mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
+nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
+oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
+ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
+qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
+rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
+ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
+ttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt
+uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
+vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
+zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
+drop table t2;
+---- Partitioning and binary data type
+create table t1 (a binary(255) not null, primary key(a)) engine='MyISAM'
+partition by key (a) (
+partition pa1 DATA DIRECTORY =
+'/tmp' INDEX DIRECTORY =
+'/tmp' max_rows=20 min_rows=2,
+partition pa2 DATA DIRECTORY =
+'/tmp' INDEX DIRECTORY =
+'/tmp' max_rows=30 min_rows=3,
+partition pa3 DATA DIRECTORY =
+'/tmp' INDEX DIRECTORY =
+'/tmp' max_rows=30 min_rows=4,
+partition pa4 DATA DIRECTORY =
+'/tmp' INDEX DIRECTORY =
+'/tmp' max_rows=40 min_rows=2);
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` binary(255) NOT NULL,
+ PRIMARY KEY (`a`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
+insert into t1 values (repeat('a',255)), ('b'), (repeat('a',128)), (repeat('b',64));
+select hex(a) from t1;
+hex(a)
+616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161
+620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+select a from t1 where substr(a,1,2)='b\0';
+a
+b
+update t1 set a='cc' where substr(a,1,2)= 'b\0';
+select a from t1 where substr(a,1,1)='c';
+a
+cc
+delete from t1 where substr(a,1,2)='cc';
+select hex(a) from t1;
+hex(a)
+616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161
+626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+drop table t1;
+create table t2 (a binary(255) not null, primary key(a)) engine='MyISAM'
+partition by key (a) partitions 27;
+show create table t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `a` binary(255) NOT NULL,
+ PRIMARY KEY (`a`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) PARTITIONS 27 */
+26 inserts;
+insert into t2 values (repeat(char(ascii('a')+0),26+54));
+insert into t2 values (repeat(char(ascii('a')+1),25+54));
+insert into t2 values (repeat(char(ascii('a')+2),24+54));
+insert into t2 values (repeat(char(ascii('a')+3),23+54));
+insert into t2 values (repeat(char(ascii('a')+4),22+54));
+insert into t2 values (repeat(char(ascii('a')+5),21+54));
+insert into t2 values (repeat(char(ascii('a')+6),20+54));
+insert into t2 values (repeat(char(ascii('a')+7),19+54));
+insert into t2 values (repeat(char(ascii('a')+8),18+54));
+insert into t2 values (repeat(char(ascii('a')+9),17+54));
+insert into t2 values (repeat(char(ascii('a')+10),16+54));
+insert into t2 values (repeat(char(ascii('a')+11),15+54));
+insert into t2 values (repeat(char(ascii('a')+12),14+54));
+insert into t2 values (repeat(char(ascii('a')+13),13+54));
+insert into t2 values (repeat(char(ascii('a')+14),12+54));
+insert into t2 values (repeat(char(ascii('a')+15),11+54));
+insert into t2 values (repeat(char(ascii('a')+16),10+54));
+insert into t2 values (repeat(char(ascii('a')+17),9+54));
+insert into t2 values (repeat(char(ascii('a')+18),8+54));
+insert into t2 values (repeat(char(ascii('a')+19),7+54));
+insert into t2 values (repeat(char(ascii('a')+20),6+54));
+insert into t2 values (repeat(char(ascii('a')+21),5+54));
+insert into t2 values (repeat(char(ascii('a')+22),4+54));
+insert into t2 values (repeat(char(ascii('a')+23),3+54));
+insert into t2 values (repeat(char(ascii('a')+24),2+54));
+insert into t2 values (repeat(char(ascii('a')+25),1+54));
+select count(*) from t2;
+count(*)
+26
+select hex(a) from t2;
+hex(a)
+616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868680000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777770000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+drop table t2;
+---- Partitioning and varchar data type
+create table t1 (a varchar(767) not null, primary key(a)) engine='MyISAM'
+partition by key (a) (
+partition pa1 DATA DIRECTORY =
+'/tmp' INDEX DIRECTORY =
+'/tmp' max_rows=20 min_rows=2,
+partition pa2 DATA DIRECTORY =
+'/tmp' INDEX DIRECTORY =
+'/tmp' max_rows=30 min_rows=3,
+partition pa3 DATA DIRECTORY =
+'/tmp' INDEX DIRECTORY =
+'/tmp' max_rows=30 min_rows=4,
+partition pa4 DATA DIRECTORY =
+'/tmp' INDEX DIRECTORY =
+'/tmp' max_rows=40 min_rows=2);
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` varchar(767) NOT NULL,
+ PRIMARY KEY (`a`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
+insert into t1 values (repeat('a',767)), ('b'), (repeat('a',500)), (repeat('b',64));
+select * from t1;
+a
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+b
+bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+select * from t1 where a='b';
+a
+b
+update t1 set a='bb' where a='b';
+delete from t1 where a='bb';
+select * from t1;
+a
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+drop table t1;
+create table t2 (a varchar(767) not null, primary key(a)) engine='MyISAM'
+partition by key (a) partitions 27;
+show create table t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `a` varchar(767) NOT NULL,
+ PRIMARY KEY (`a`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) PARTITIONS 27 */
+26 inserts;
+insert into t2 values (repeat(char(ascii('a')+0),26*26));
+insert into t2 values (repeat(char(ascii('a')+1),25*25));
+insert into t2 values (repeat(char(ascii('a')+2),24*24));
+insert into t2 values (repeat(char(ascii('a')+3),23*23));
+insert into t2 values (repeat(char(ascii('a')+4),22*22));
+insert into t2 values (repeat(char(ascii('a')+5),21*21));
+insert into t2 values (repeat(char(ascii('a')+6),20*20));
+insert into t2 values (repeat(char(ascii('a')+7),19*19));
+insert into t2 values (repeat(char(ascii('a')+8),18*18));
+insert into t2 values (repeat(char(ascii('a')+9),17*17));
+insert into t2 values (repeat(char(ascii('a')+10),16*16));
+insert into t2 values (repeat(char(ascii('a')+11),15*15));
+insert into t2 values (repeat(char(ascii('a')+12),14*14));
+insert into t2 values (repeat(char(ascii('a')+13),13*13));
+insert into t2 values (repeat(char(ascii('a')+14),12*12));
+insert into t2 values (repeat(char(ascii('a')+15),11*11));
+insert into t2 values (repeat(char(ascii('a')+16),10*10));
+insert into t2 values (repeat(char(ascii('a')+17),9*9));
+insert into t2 values (repeat(char(ascii('a')+18),8*8));
+insert into t2 values (repeat(char(ascii('a')+19),7*7));
+insert into t2 values (repeat(char(ascii('a')+20),6*6));
+insert into t2 values (repeat(char(ascii('a')+21),5*5));
+insert into t2 values (repeat(char(ascii('a')+22),4*4));
+insert into t2 values (repeat(char(ascii('a')+23),3*3));
+insert into t2 values (repeat(char(ascii('a')+24),2*2));
+insert into t2 values (repeat(char(ascii('a')+25),1*1));
+select count(*) from t2;
+count(*)
+26
+select * from t2;
+a
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
+eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
+hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
+iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
+jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj
+kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
+lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll
+mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
+nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
+oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
+ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
+qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
+rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
+ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
+ttttttttttttttttttttttttttttttttttttttttttttttttt
+uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
+vvvvvvvvvvvvvvvvvvvvvvvvv
+wwwwwwwwwwwwwwww
+xxxxxxxxx
+yyyy
+z
+drop table t2;
+---- Partitioning and varbinary data type
+create table t1 (a varbinary(767) not null, primary key(a)) engine='MyISAM'
+partition by key (a) (
+partition pa1 DATA DIRECTORY =
+'/tmp' INDEX DIRECTORY =
+'/tmp' max_rows=20 min_rows=2,
+partition pa2 DATA DIRECTORY =
+'/tmp' INDEX DIRECTORY =
+'/tmp' max_rows=30 min_rows=3,
+partition pa3 DATA DIRECTORY =
+'/tmp' INDEX DIRECTORY =
+'/tmp' max_rows=30 min_rows=4,
+partition pa4 DATA DIRECTORY =
+'/tmp' INDEX DIRECTORY =
+'/tmp' max_rows=40 min_rows=2);
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` varbinary(767) NOT NULL,
+ PRIMARY KEY (`a`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
+insert into t1 values (repeat('a',767)), ('b'), (repeat('a',500)), (repeat('b',64));
+select * from t1;
+a
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+b
+bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+select * from t1 where a='b';
+a
+b
+update t1 set a='bb' where a='b';
+delete from t1 where a='bb';
+select * from t1;
+a
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
drop table t1;
+create table t2 (a varbinary(767) not null, primary key(a)) engine='MyISAM'
+partition by key (a) partitions 30;
+show create table t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `a` varbinary(767) NOT NULL,
+ PRIMARY KEY (`a`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) PARTITIONS 30 */
+26 inserts;
+insert into t2 values (repeat(char(ascii('a')+0),26*26));
+insert into t2 values (repeat(char(ascii('a')+1),25*25));
+insert into t2 values (repeat(char(ascii('a')+2),24*24));
+insert into t2 values (repeat(char(ascii('a')+3),23*23));
+insert into t2 values (repeat(char(ascii('a')+4),22*22));
+insert into t2 values (repeat(char(ascii('a')+5),21*21));
+insert into t2 values (repeat(char(ascii('a')+6),20*20));
+insert into t2 values (repeat(char(ascii('a')+7),19*19));
+insert into t2 values (repeat(char(ascii('a')+8),18*18));
+insert into t2 values (repeat(char(ascii('a')+9),17*17));
+insert into t2 values (repeat(char(ascii('a')+10),16*16));
+insert into t2 values (repeat(char(ascii('a')+11),15*15));
+insert into t2 values (repeat(char(ascii('a')+12),14*14));
+insert into t2 values (repeat(char(ascii('a')+13),13*13));
+insert into t2 values (repeat(char(ascii('a')+14),12*12));
+insert into t2 values (repeat(char(ascii('a')+15),11*11));
+insert into t2 values (repeat(char(ascii('a')+16),10*10));
+insert into t2 values (repeat(char(ascii('a')+17),9*9));
+insert into t2 values (repeat(char(ascii('a')+18),8*8));
+insert into t2 values (repeat(char(ascii('a')+19),7*7));
+insert into t2 values (repeat(char(ascii('a')+20),6*6));
+insert into t2 values (repeat(char(ascii('a')+21),5*5));
+insert into t2 values (repeat(char(ascii('a')+22),4*4));
+insert into t2 values (repeat(char(ascii('a')+23),3*3));
+insert into t2 values (repeat(char(ascii('a')+24),2*2));
+insert into t2 values (repeat(char(ascii('a')+25),1*1));
+select count(*) from t2;
+count(*)
+26
+select * from t2;
+a
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
+eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
+hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
+iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
+jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj
+kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
+lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll
+mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
+nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
+oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
+ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
+qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
+rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
+ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
+ttttttttttttttttttttttttttttttttttttttttttttttttt
+uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
+vvvvvvvvvvvvvvvvvvvvvvvvv
+wwwwwwwwwwwwwwww
+xxxxxxxxx
+yyyy
+z
+drop table t2;
+---- Partitioning and enum data type
+create table t1 (a enum('A','B','C','D','E','F','G','H','I','J','K','L') not null, primary key(a)) engine='MyISAM'
+partition by key (a) (
+partition pa1 DATA DIRECTORY =
+'/tmp' INDEX DIRECTORY =
+'/tmp' max_rows=20 min_rows=2,
+partition pa2 DATA DIRECTORY =
+'/tmp' INDEX DIRECTORY =
+'/tmp' max_rows=30 min_rows=3,
+partition pa3 DATA DIRECTORY =
+'/tmp' INDEX DIRECTORY =
+'/tmp' max_rows=30 min_rows=4,
+partition pa4 DATA DIRECTORY =
+'/tmp' INDEX DIRECTORY =
+'/tmp' max_rows=40 min_rows=2);
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` enum('A','B','C','D','E','F','G','H','I','J','K','L') NOT NULL,
+ PRIMARY KEY (`a`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
+insert into t1 values ('A'),('D'),('L'),('G');
+select * from t1;
+a
+A
+D
+G
+L
+select * from t1 where a='A';
+a
+A
+update t1 set a='E' where a='L';
+select * from t1;
+a
+A
+D
+E
+G
+delete from t1 where a='E';
+select * from t1;
+a
+A
+D
+G
+drop table t1;
+create table t2 (a enum (
+'1','2','3','4','5','6','7','8','9','0',
+'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'
+) not null, primary key(a)) engine='MyISAM'
+partition by key (a) partitions 27;
+show create table t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `a` enum('1','2','3','4','5','6','7','8','9','0','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') NOT NULL,
+ PRIMARY KEY (`a`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) PARTITIONS 27 */
+0 inserts;
+insert into t2 values (char(ascii('A')+26));
+Warnings:
+Warning 1265 Data truncated for column 'a' at row 1
+insert into t2 values (char(ascii('A')+25));
+insert into t2 values (char(ascii('A')+24));
+insert into t2 values (char(ascii('A')+23));
+insert into t2 values (char(ascii('A')+22));
+insert into t2 values (char(ascii('A')+21));
+insert into t2 values (char(ascii('A')+20));
+insert into t2 values (char(ascii('A')+19));
+insert into t2 values (char(ascii('A')+18));
+insert into t2 values (char(ascii('A')+17));
+insert into t2 values (char(ascii('A')+16));
+insert into t2 values (char(ascii('A')+15));
+insert into t2 values (char(ascii('A')+14));
+insert into t2 values (char(ascii('A')+13));
+insert into t2 values (char(ascii('A')+12));
+insert into t2 values (char(ascii('A')+11));
+insert into t2 values (char(ascii('A')+10));
+insert into t2 values (char(ascii('A')+9));
+insert into t2 values (char(ascii('A')+8));
+insert into t2 values (char(ascii('A')+7));
+insert into t2 values (char(ascii('A')+6));
+insert into t2 values (char(ascii('A')+5));
+insert into t2 values (char(ascii('A')+4));
+insert into t2 values (char(ascii('A')+3));
+insert into t2 values (char(ascii('A')+2));
+insert into t2 values (char(ascii('A')+1));
+insert into t2 values ('1'),('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9'),('0');
+select count(*) from t2;
+count(*)
+36
+select * from t2;
+a
+
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+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
+drop table t2;
+---- Partitioning and set data type
+create table t1 (a set('A','B','C','D','E','F','G','H','I','J','K','L') not null, primary key(a)) engine='MyISAM'
+partition by key (a) (
+partition pa1 DATA DIRECTORY =
+'/tmp' INDEX DIRECTORY =
+'/tmp' max_rows=20 min_rows=2,
+partition pa2 DATA DIRECTORY =
+'/tmp' INDEX DIRECTORY =
+'/tmp' max_rows=30 min_rows=3,
+partition pa3 DATA DIRECTORY =
+'/tmp' INDEX DIRECTORY =
+'/tmp' max_rows=30 min_rows=4,
+partition pa4 DATA DIRECTORY =
+'/tmp' INDEX DIRECTORY =
+'/tmp' max_rows=40 min_rows=2);
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` set('A','B','C','D','E','F','G','H','I','J','K','L') NOT NULL,
+ PRIMARY KEY (`a`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
+insert into t1 values ('A,B'),('C,D'),('E,L'),('G,H,K');
+select * from t1 order by a;
+a
+A,B
+C,D
+G,H,K
+E,L
+select * from t1 where a='A,B';
+a
+A,B
+update t1 set a='A,B,C' where a='E,L';
+select * from t1 order by a;
+a
+A,B
+A,B,C
+C,D
+G,H,K
+delete from t1 where a='A,B';
+select * from t1 order by a;
+a
+A,B,C
+C,D
+G,H,K
+drop table t1;
+create table t2 (a set (
+'1','2','3','4','5','6','7','8','9','0',
+'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'
+) not null, primary key(a)) engine='MyISAM'
+partition by key (a) partitions 27;
+show create table t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `a` set('1','2','3','4','5','6','7','8','9','0','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') NOT NULL,
+ PRIMARY KEY (`a`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) PARTITIONS 27 */
+insert into t2 values ('A'),('B'),('C'),('D'),('E'),('F'),('G'),('H'),('I'),('K'),('L'),('M'),('N'),('O'),('P'),('Q'),('S'),('T'),('U'),('V'),('X'),('Y'),('Z');
+insert into t2 values ('A,B'),('B,C'),('C,D'),('D,E'),('E,F'),('F,G'),('G,H'),('H,I'),('I,J'),('K,L'),('L,M'),('M,N'),('N,O'),('O,P'),('P,Q'),('Q,R'),('S,T'),('T,U'),('U,V'),('V,W'),('X,Y'),('Y,Z'),('Z,A');
+insert into t2 values ('A,B,C'),('B,C,D'),('C,D,E'),('D,E,F'),('E,F,G'),('F,G,H'),('G,H,I'),('H,I,J'),('I,J,K'),('K,L,M'),('L,M,N'),('M,N,O'),('N,O,P'),('O,P,Q'),('P,Q,R'),('Q,R,S'),('S,T,U'),('T,U,V'),('U,V,W'),('V,W,X'),('X,Y,Z'),('Y,Z,A'),('Z,A,B');
+insert into t2 values ('1'),('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9'),('0');
+insert into t2 values ('1,2'),('2,3'),('3,4'),('4,5'),('5,6'),('6,7'),('7,8'),('8,9'),('9,0'),('0,1');
+insert into t2 values ('1,2,3'),('2,3,4'),('3,4,5'),('4,5,6'),('5,6,7'),('6,7,8'),('7,8,9'),('8,9,0'),('9,0,1'),('0,1,2');
+select count(*) from t2;
+count(*)
+99
+select * from t2 order by a;
+a
+1
+2
+1,2
+3
+2,3
+1,2,3
+4
+3,4
+2,3,4
+5
+4,5
+3,4,5
+6
+5,6
+4,5,6
+7
+6,7
+5,6,7
+8
+7,8
+6,7,8
+9
+8,9
+7,8,9
+0
+1,0
+1,2,0
+9,0
+1,9,0
+8,9,0
+A
+B
+A,B
+C
+B,C
+A,B,C
+D
+C,D
+B,C,D
+E
+D,E
+C,D,E
+F
+E,F
+D,E,F
+G
+F,G
+E,F,G
+H
+G,H
+F,G,H
+I
+H,I
+G,H,I
+I,J
+H,I,J
+K
+I,J,K
+L
+K,L
+M
+L,M
+K,L,M
+N
+M,N
+L,M,N
+O
+N,O
+M,N,O
+P
+O,P
+N,O,P
+Q
+P,Q
+O,P,Q
+Q,R
+P,Q,R
+S
+Q,R,S
+T
+S,T
+U
+T,U
+S,T,U
+V
+U,V
+T,U,V
+V,W
+U,V,W
+X
+V,W,X
+Y
+X,Y
+Z
+A,Z
+A,B,Z
+Y,Z
+A,Y,Z
+X,Y,Z
+drop table t2;
+---- Partitioning and blob data type
+create table t1 (a blob not null, primary key(a(767))) engine='MyISAM'
+partition by key (a) (
+partition pa1 DATA DIRECTORY =
+'/tmp' INDEX DIRECTORY =
+'/tmp' max_rows=20 min_rows=2,
+partition pa2 DATA DIRECTORY =
+'/tmp' INDEX DIRECTORY =
+'/tmp' max_rows=30 min_rows=3,
+partition pa3 DATA DIRECTORY =
+'/tmp' INDEX DIRECTORY =
+'/tmp' max_rows=30 min_rows=4,
+partition pa4 DATA DIRECTORY =
+'/tmp' INDEX DIRECTORY =
+'/tmp' max_rows=40 min_rows=2);
+ERROR HY000: A BLOB field is not allowed in partition function
+create table t2 (a blob not null, primary key(a(767))) engine='MyISAM'
+partition by key (a) partitions 30;
+ERROR HY000: A BLOB field is not allowed in partition function
+create table t2 (a tinyblob not null, primary key(a(767))) engine='MyISAM'
+partition by key (a) partitions 30;
+ERROR HY000: A BLOB field is not allowed in partition function
+create table t2 (a mediumblob not null, primary key(a(767))) engine='MyISAM'
+partition by key (a) partitions 30;
+ERROR HY000: A BLOB field is not allowed in partition function
+create table t2 (a longblob not null, primary key(a(767))) engine='MyISAM'
+partition by key (a) partitions 30;
+ERROR HY000: A BLOB field is not allowed in partition function
+---- Partitioning and text data type
+create table t1 (a text not null, primary key(a(767))) engine='MyISAM'
+partition by key (a) (
+partition pa1 DATA DIRECTORY =
+'/tmp' INDEX DIRECTORY =
+'/tmp' max_rows=20 min_rows=2,
+partition pa2 DATA DIRECTORY =
+'/tmp' INDEX DIRECTORY =
+'/tmp' max_rows=30 min_rows=3,
+partition pa3 DATA DIRECTORY =
+'/tmp' INDEX DIRECTORY =
+'/tmp' max_rows=30 min_rows=4,
+partition pa4 DATA DIRECTORY =
+'/tmp' INDEX DIRECTORY =
+'/tmp' max_rows=40 min_rows=2);
+ERROR HY000: A BLOB field is not allowed in partition function
+create table t2 (a tinytext not null, primary key(a(767))) engine='MyISAM'
+partition by key (a) partitions 30;
+ERROR HY000: A BLOB field is not allowed in partition function
+create table t2 (a mediumtext not null, primary key(a(767))) engine='MyISAM'
+partition by key (a) partitions 30;
+ERROR HY000: A BLOB field is not allowed in partition function
+create table t2 (a longtext not null, primary key(a(767))) engine='MyISAM'
+partition by key (a) partitions 30;
+ERROR HY000: A BLOB field is not allowed in partition function
diff --git a/mysql-test/suite/parts/r/partition_datetime_myisam.result b/mysql-test/suite/parts/r/partition_datetime_myisam.result
index 1ef281f2766..7e05d368cf8 100644
--- a/mysql-test/suite/parts/r/partition_datetime_myisam.result
+++ b/mysql-test/suite/parts/r/partition_datetime_myisam.result
@@ -17,7 +17,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`a` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`a`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='/tmp/' INDEX DIRECTORY='/tmp/' /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
insert into t1 values ('1975-01-01 21:21:21'), ('2020-12-31 12:10:30'), ('1980-10-14 03:03'), ('2000-06-15 23:59');
select * from t1;
a
@@ -298,7 +298,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`a` date NOT NULL,
PRIMARY KEY (`a`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='/tmp/' INDEX DIRECTORY='/tmp/' /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
insert into t1 values ('1975-01-01'), ('2020-12-31'), ('1980-10-14'), ('2000-06-15');
select * from t1;
a
@@ -625,7 +625,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`a` time NOT NULL,
PRIMARY KEY (`a`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='/tmp/' INDEX DIRECTORY='/tmp/' /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
insert into t1 values ('21:21:21'), ('12:10:30'), ('03:03:03'), ('23:59');
select * from t1;
a
@@ -1090,7 +1090,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`a` datetime NOT NULL,
PRIMARY KEY (`a`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='/tmp/' INDEX DIRECTORY='/tmp/' /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
insert into t1 values ('1975-01-01 21:21:21'), ('2020-12-31 12:10:30'), ('1980-10-14 03:03'), ('2000-06-15 23:59');
select * from t1;
a
@@ -1367,7 +1367,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`a` year(4) NOT NULL,
PRIMARY KEY (`a`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='/tmp/' INDEX DIRECTORY='/tmp/' /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
insert into t1 values ('1975'), (2020), ('1980'), ('2000');
select * from t1;
a
diff --git a/mysql-test/suite/parts/r/partition_decimal_myisam.result b/mysql-test/suite/parts/r/partition_decimal_myisam.result
index 464ac4ddaf5..4d06f4d7b38 100644
--- a/mysql-test/suite/parts/r/partition_decimal_myisam.result
+++ b/mysql-test/suite/parts/r/partition_decimal_myisam.result
@@ -17,7 +17,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`a` decimal(10,4) NOT NULL,
PRIMARY KEY (`a`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='/tmp/' INDEX DIRECTORY='/tmp/' /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
insert into t1 values (999999.9999), (-999999.9999), (123456.7899), (-123456.7899), (-1.5), (1), (0), (-1), (1.5), (1234.567), (-1234.567);
select * from t1;
a
diff --git a/mysql-test/suite/parts/r/partition_engine_innodb.result b/mysql-test/suite/parts/r/partition_engine_innodb.result
index bea9a59da9b..04a5a492269 100644
--- a/mysql-test/suite/parts/r/partition_engine_innodb.result
+++ b/mysql-test/suite/parts/r/partition_engine_innodb.result
@@ -2,14 +2,6 @@ SET @max_row = 20;
SET @@session.storage_engine = 'InnoDB';
#------------------------------------------------------------------------
-# There are several testcases disabled because of the open bugs
-# #15890
-# The expected results suffer from the following bugs
-# harmless #17455, #19305
-# which cannot be suppressed because of technical reasons.
-#------------------------------------------------------------------------
-
-#------------------------------------------------------------------------
# 0. Setting of auxiliary variables + Creation of an auxiliary tables
# needed in many testcases
#------------------------------------------------------------------------
@@ -31,7 +23,7 @@ DROP TABLE IF EXISTS t0_definition;
CREATE TABLE t0_definition (
state CHAR(3),
create_command VARBINARY(5000),
-file_list VARBINARY(5000),
+file_list VARBINARY(10000),
PRIMARY KEY (state)
) ENGINE = MEMORY;
DROP TABLE IF EXISTS t0_aux;
@@ -65,7 +57,7 @@ f_charbig VARCHAR(1000)
PARTITION BY HASH(f_int1) PARTITIONS 2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -500,7 +492,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
#------------------------------------------------------------------------
# 2 Assignment of storage engine just after partition or subpartition
@@ -519,7 +511,7 @@ PARTITION part2 STORAGE ENGINE = 'InnoDB'
);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -954,7 +946,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -974,7 +966,7 @@ SUBPARTITION subpart22 STORAGE ENGINE = 'InnoDB')
);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -1407,7 +1399,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
#------------------------------------------------------------------------
# 3 Some but not all named partitions or subpartitions get a storage
@@ -1426,7 +1418,7 @@ PARTITION part2
);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -1861,7 +1853,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -1876,7 +1868,7 @@ PARTITION part2 STORAGE ENGINE = 'InnoDB'
);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -2311,7 +2303,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -2331,7 +2323,7 @@ SUBPARTITION subpart22 STORAGE ENGINE = 'InnoDB')
);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -2764,7 +2756,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -2784,7 +2776,7 @@ SUBPARTITION subpart22 )
);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -3217,7 +3209,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
#------------------------------------------------------------------------
# 4 Storage engine assignment after partition name + after name of
@@ -3241,7 +3233,7 @@ SUBPARTITION subpart22 STORAGE ENGINE = 'InnoDB')
);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -3674,7 +3666,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -3694,7 +3686,7 @@ SUBPARTITION subpart22)
);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -4127,7 +4119,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
#------------------------------------------------------------------------
# 5 Precedence of storage engine assignments (if there is any)
@@ -4147,7 +4139,7 @@ PARTITION part2 STORAGE ENGINE = 'InnoDB'
);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -4582,7 +4574,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -4602,7 +4594,7 @@ SUBPARTITION subpart22 STORAGE ENGINE = 'InnoDB')
);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -5035,7 +5027,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# 6.2 Storage engine assignment after partition name + after
# subpartition name
@@ -5057,7 +5049,7 @@ SUBPARTITION subpart22 STORAGE ENGINE = 'InnoDB')
);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -5490,7 +5482,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
#------------------------------------------------------------------------
# 6 Session default engine differs from engine used within create table
@@ -5506,7 +5498,7 @@ f_charbig VARCHAR(1000)
PARTITION BY HASH(f_int1) ( PARTITION part1 ENGINE = 'InnoDB');
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -5941,7 +5933,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -5957,7 +5949,7 @@ SUBPARTITION BY HASH(f_int1)
SUBPARTITION subpart12 STORAGE ENGINE = 'InnoDB'));
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -6390,7 +6382,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
SET SESSION storage_engine='InnoDB';
DROP VIEW IF EXISTS v1;
diff --git a/mysql-test/suite/parts/r/partition_engine_myisam.result b/mysql-test/suite/parts/r/partition_engine_myisam.result
index 343077c5e4d..f81becc6eea 100644
--- a/mysql-test/suite/parts/r/partition_engine_myisam.result
+++ b/mysql-test/suite/parts/r/partition_engine_myisam.result
@@ -2,14 +2,6 @@ SET @max_row = 20;
SET @@session.storage_engine = 'MyISAM';
#------------------------------------------------------------------------
-# There are several testcases disabled because of the open bugs
-# #15890
-# The expected results suffer from the following bugs
-# harmless #17455, #19305
-# which cannot be suppressed because of technical reasons.
-#------------------------------------------------------------------------
-
-#------------------------------------------------------------------------
# 0. Setting of auxiliary variables + Creation of an auxiliary tables
# needed in many testcases
#------------------------------------------------------------------------
@@ -31,7 +23,7 @@ DROP TABLE IF EXISTS t0_definition;
CREATE TABLE t0_definition (
state CHAR(3),
create_command VARBINARY(5000),
-file_list VARBINARY(5000),
+file_list VARBINARY(10000),
PRIMARY KEY (state)
) ENGINE = MEMORY;
DROP TABLE IF EXISTS t0_aux;
@@ -65,7 +57,7 @@ f_charbig VARCHAR(1000)
PARTITION BY HASH(f_int1) PARTITIONS 2;
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -510,7 +502,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
#------------------------------------------------------------------------
# 2 Assignment of storage engine just after partition or subpartition
@@ -529,7 +521,7 @@ PARTITION part2 STORAGE ENGINE = 'MyISAM'
);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -974,7 +966,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -994,7 +986,7 @@ SUBPARTITION subpart22 STORAGE ENGINE = 'MyISAM')
);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -1441,7 +1433,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
#------------------------------------------------------------------------
# 3 Some but not all named partitions or subpartitions get a storage
@@ -1460,7 +1452,7 @@ PARTITION part2
);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -1905,7 +1897,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -1920,7 +1912,7 @@ PARTITION part2 STORAGE ENGINE = 'MyISAM'
);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -2365,7 +2357,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -2385,7 +2377,7 @@ SUBPARTITION subpart22 STORAGE ENGINE = 'MyISAM')
);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -2832,7 +2824,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -2852,7 +2844,7 @@ SUBPARTITION subpart22 )
);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -3299,7 +3291,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
#------------------------------------------------------------------------
# 4 Storage engine assignment after partition name + after name of
@@ -3323,7 +3315,7 @@ SUBPARTITION subpart22 STORAGE ENGINE = 'MyISAM')
);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -3770,7 +3762,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -3790,7 +3782,7 @@ SUBPARTITION subpart22)
);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -4237,7 +4229,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
#------------------------------------------------------------------------
# 5 Precedence of storage engine assignments (if there is any)
@@ -4257,7 +4249,7 @@ PARTITION part2 STORAGE ENGINE = 'MyISAM'
);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -4702,7 +4694,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -4722,7 +4714,7 @@ SUBPARTITION subpart22 STORAGE ENGINE = 'MyISAM')
);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -5169,7 +5161,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
# 6.2 Storage engine assignment after partition name + after
# subpartition name
@@ -5191,7 +5183,7 @@ SUBPARTITION subpart22 STORAGE ENGINE = 'MyISAM')
);
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -5638,7 +5630,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
#------------------------------------------------------------------------
# 6 Session default engine differs from engine used within create table
@@ -5654,7 +5646,7 @@ f_charbig VARCHAR(1000)
PARTITION BY HASH(f_int1) ( PARTITION part1 ENGINE = 'MyISAM');
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -6097,7 +6089,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
CREATE TABLE t1 (
f_int1 INTEGER,
@@ -6113,7 +6105,7 @@ SUBPARTITION BY HASH(f_int1)
SUBPARTITION subpart12 STORAGE ENGINE = 'MyISAM'));
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
-# Start usability test (include/partition_check.inc)
+# Start usability test (inc/partition_check.inc)
create_command
SHOW CREATE TABLE t1;
Table Create Table
@@ -6556,7 +6548,7 @@ TRUNCATE t1;
# check TRUNCATE success: 1
# check layout success: 1
-# End usability test (include/partition_check.inc)
+# End usability test (inc/partition_check.inc)
DROP TABLE t1;
SET SESSION storage_engine='MyISAM';
DROP VIEW IF EXISTS v1;
diff --git a/mysql-test/suite/parts/r/partition_float_innodb.result b/mysql-test/suite/parts/r/partition_float_innodb.result
index bc30987b33f..c203fabfd87 100644
--- a/mysql-test/suite/parts/r/partition_float_innodb.result
+++ b/mysql-test/suite/parts/r/partition_float_innodb.result
@@ -89,152 +89,6 @@ select count(*) from t2;
count(*)
3072
drop table t2;
-create table t3 (a float not null, primary key(a)) engine='InnoDB'
-partition by range (cast(floor(a) as signed)) subpartition by key (a) subpartitions 3 (
-partition pa1 values less than (3),
-partition pa3 values less than (6),
-partition pa10 values less than (10)
-);
-show create table t3;
-Table Create Table
-t3 CREATE TABLE `t3` (
- `a` float NOT NULL,
- PRIMARY KEY (`a`)
-) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (cast(floor(a) as signed)) SUBPARTITION BY KEY (a) SUBPARTITIONS 3 (PARTITION pa1 VALUES LESS THAN (3) ENGINE = InnoDB, PARTITION pa3 VALUES LESS THAN (6) ENGINE = InnoDB, PARTITION pa10 VALUES LESS THAN (10) ENGINE = InnoDB) */
-9*3 inserts;
-insert into t3 values (9);
-insert into t3 values (9+0.33);
-insert into t3 values (9+0.75);
-insert into t3 values (8);
-insert into t3 values (8+0.33);
-insert into t3 values (8+0.75);
-insert into t3 values (7);
-insert into t3 values (7+0.33);
-insert into t3 values (7+0.75);
-insert into t3 values (6);
-insert into t3 values (6+0.33);
-insert into t3 values (6+0.75);
-insert into t3 values (5);
-insert into t3 values (5+0.33);
-insert into t3 values (5+0.75);
-insert into t3 values (4);
-insert into t3 values (4+0.33);
-insert into t3 values (4+0.75);
-insert into t3 values (3);
-insert into t3 values (3+0.33);
-insert into t3 values (3+0.75);
-insert into t3 values (2);
-insert into t3 values (2+0.33);
-insert into t3 values (2+0.75);
-insert into t3 values (1);
-insert into t3 values (1+0.33);
-insert into t3 values (1+0.75);
-select count(*) from t3;
-count(*)
-27
-select * from t3;
-a
-1
-1.33
-1.75
-2
-2.33
-2.75
-3
-3.33
-3.75
-4
-4.33
-4.75
-5
-5.33
-5.75
-6
-6.33
-6.75
-7
-7.33
-7.75
-8
-8.33
-8.75
-9
-9.33
-9.75
-drop table t3;
-create table t4 (a float not null, primary key(a)) engine='InnoDB'
-partition by list (cast(floor(a) as signed)) subpartition by key (a) subpartitions 3 (
-partition pa1 values in (1,2,3),
-partition pa3 values in (4,5,6),
-partition pa10 values in (7,8,9,10)
-);
-show create table t4;
-Table Create Table
-t4 CREATE TABLE `t4` (
- `a` float NOT NULL,
- PRIMARY KEY (`a`)
-) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (cast(floor(a) as signed)) SUBPARTITION BY KEY (a) SUBPARTITIONS 3 (PARTITION pa1 VALUES IN (1,2,3) ENGINE = InnoDB, PARTITION pa3 VALUES IN (4,5,6) ENGINE = InnoDB, PARTITION pa10 VALUES IN (7,8,9,10) ENGINE = InnoDB) */
-9*3 inserts;
-insert into t4 values (9);
-insert into t4 values (9+0.33);
-insert into t4 values (9+0.75);
-insert into t4 values (8);
-insert into t4 values (8+0.33);
-insert into t4 values (8+0.75);
-insert into t4 values (7);
-insert into t4 values (7+0.33);
-insert into t4 values (7+0.75);
-insert into t4 values (6);
-insert into t4 values (6+0.33);
-insert into t4 values (6+0.75);
-insert into t4 values (5);
-insert into t4 values (5+0.33);
-insert into t4 values (5+0.75);
-insert into t4 values (4);
-insert into t4 values (4+0.33);
-insert into t4 values (4+0.75);
-insert into t4 values (3);
-insert into t4 values (3+0.33);
-insert into t4 values (3+0.75);
-insert into t4 values (2);
-insert into t4 values (2+0.33);
-insert into t4 values (2+0.75);
-insert into t4 values (1);
-insert into t4 values (1+0.33);
-insert into t4 values (1+0.75);
-select count(*) from t4;
-count(*)
-27
-select * from t4;
-a
-1
-1.33
-1.75
-2
-2.33
-2.75
-3
-3.33
-3.75
-4
-4.33
-4.75
-5
-5.33
-5.75
-6
-6.33
-6.75
-7
-7.33
-7.75
-8
-8.33
-8.75
-9
-9.33
-9.75
-drop table t4;
create table t1 (a double not null, primary key(a)) engine='InnoDB'
partition by key (a) (
partition pa1 DATA DIRECTORY =
@@ -318,149 +172,3 @@ select count(*) from t2;
count(*)
3072
drop table t2;
-create table t3 (a double not null, primary key(a)) engine='InnoDB'
-partition by range (cast(floor(a) as signed)) subpartition by key (a) subpartitions 3 (
-partition pa1 values less than (3),
-partition pa3 values less than (6),
-partition pa10 values less than (10)
-);
-show create table t3;
-Table Create Table
-t3 CREATE TABLE `t3` (
- `a` double NOT NULL,
- PRIMARY KEY (`a`)
-) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (cast(floor(a) as signed)) SUBPARTITION BY KEY (a) SUBPARTITIONS 3 (PARTITION pa1 VALUES LESS THAN (3) ENGINE = InnoDB, PARTITION pa3 VALUES LESS THAN (6) ENGINE = InnoDB, PARTITION pa10 VALUES LESS THAN (10) ENGINE = InnoDB) */
-9*3 inserts;
-insert into t3 values (9);
-insert into t3 values (9+0.33);
-insert into t3 values (9+0.75);
-insert into t3 values (8);
-insert into t3 values (8+0.33);
-insert into t3 values (8+0.75);
-insert into t3 values (7);
-insert into t3 values (7+0.33);
-insert into t3 values (7+0.75);
-insert into t3 values (6);
-insert into t3 values (6+0.33);
-insert into t3 values (6+0.75);
-insert into t3 values (5);
-insert into t3 values (5+0.33);
-insert into t3 values (5+0.75);
-insert into t3 values (4);
-insert into t3 values (4+0.33);
-insert into t3 values (4+0.75);
-insert into t3 values (3);
-insert into t3 values (3+0.33);
-insert into t3 values (3+0.75);
-insert into t3 values (2);
-insert into t3 values (2+0.33);
-insert into t3 values (2+0.75);
-insert into t3 values (1);
-insert into t3 values (1+0.33);
-insert into t3 values (1+0.75);
-select count(*) from t3;
-count(*)
-27
-select * from t3;
-a
-1
-1.33
-1.75
-2
-2.33
-2.75
-3
-3.33
-3.75
-4
-4.33
-4.75
-5
-5.33
-5.75
-6
-6.33
-6.75
-7
-7.33
-7.75
-8
-8.33
-8.75
-9
-9.33
-9.75
-drop table t3;
-create table t4 (a double not null, primary key(a)) engine='InnoDB'
-partition by list (cast(floor(a) as signed)) subpartition by key (a) subpartitions 3 (
-partition pa1 values in (1,2,3),
-partition pa3 values in (4,5,6),
-partition pa10 values in (7,8,9,10)
-);
-show create table t4;
-Table Create Table
-t4 CREATE TABLE `t4` (
- `a` double NOT NULL,
- PRIMARY KEY (`a`)
-) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (cast(floor(a) as signed)) SUBPARTITION BY KEY (a) SUBPARTITIONS 3 (PARTITION pa1 VALUES IN (1,2,3) ENGINE = InnoDB, PARTITION pa3 VALUES IN (4,5,6) ENGINE = InnoDB, PARTITION pa10 VALUES IN (7,8,9,10) ENGINE = InnoDB) */
-9*3 inserts;
-insert into t4 values (9);
-insert into t4 values (9+0.33);
-insert into t4 values (9+0.75);
-insert into t4 values (8);
-insert into t4 values (8+0.33);
-insert into t4 values (8+0.75);
-insert into t4 values (7);
-insert into t4 values (7+0.33);
-insert into t4 values (7+0.75);
-insert into t4 values (6);
-insert into t4 values (6+0.33);
-insert into t4 values (6+0.75);
-insert into t4 values (5);
-insert into t4 values (5+0.33);
-insert into t4 values (5+0.75);
-insert into t4 values (4);
-insert into t4 values (4+0.33);
-insert into t4 values (4+0.75);
-insert into t4 values (3);
-insert into t4 values (3+0.33);
-insert into t4 values (3+0.75);
-insert into t4 values (2);
-insert into t4 values (2+0.33);
-insert into t4 values (2+0.75);
-insert into t4 values (1);
-insert into t4 values (1+0.33);
-insert into t4 values (1+0.75);
-select count(*) from t4;
-count(*)
-27
-select * from t4;
-a
-1
-1.33
-1.75
-2
-2.33
-2.75
-3
-3.33
-3.75
-4
-4.33
-4.75
-5
-5.33
-5.75
-6
-6.33
-6.75
-7
-7.33
-7.75
-8
-8.33
-8.75
-9
-9.33
-9.75
-drop table t4;
diff --git a/mysql-test/suite/parts/r/partition_float_myisam.result b/mysql-test/suite/parts/r/partition_float_myisam.result
index aba62b8ba70..13881548473 100644
--- a/mysql-test/suite/parts/r/partition_float_myisam.result
+++ b/mysql-test/suite/parts/r/partition_float_myisam.result
@@ -17,7 +17,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`a` float NOT NULL,
PRIMARY KEY (`a`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='/tmp/' INDEX DIRECTORY='/tmp/' /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
insert into t1 values (-3.402823466E+38), (3.402823466E+38), (-1.5), (-1), (0), (1), (1.5);
select * from t1;
a
@@ -108,7 +108,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`a` double NOT NULL,
PRIMARY KEY (`a`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='/tmp/' INDEX DIRECTORY='/tmp/' /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
insert into t1 values (-2.2250738585072014E+208), (-2.2250738585072014E-208), (-1.5), (-1), (0), (1.5), (1234.567), (2.2250738585072014E+208);
select * from t1;
a
diff --git a/mysql-test/suite/parts/r/partition_int_myisam.result b/mysql-test/suite/parts/r/partition_int_myisam.result
index d00f8e5f772..7f16cdb207a 100644
--- a/mysql-test/suite/parts/r/partition_int_myisam.result
+++ b/mysql-test/suite/parts/r/partition_int_myisam.result
@@ -17,7 +17,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`a` tinyint(3) unsigned NOT NULL,
PRIMARY KEY (`a`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='/tmp/' INDEX DIRECTORY='/tmp/' /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
insert into t1 values (255), (254), (253), (252), (1), (2), (128);
select * from t1;
a
@@ -125,7 +125,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`a` smallint(5) unsigned NOT NULL,
PRIMARY KEY (`a`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='/tmp/' INDEX DIRECTORY='/tmp/' /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
insert into t1 values (65535), (65534), (65533), (65532), (1), (2), (256);
select * from t1;
a
@@ -233,7 +233,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`a` int(10) unsigned NOT NULL,
PRIMARY KEY (`a`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='/tmp/' INDEX DIRECTORY='/tmp/' /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
insert into t1 values (4294967295), (4294967294), (4294967293), (4294967292), (1), (2), (65535);
select * from t1;
a
@@ -341,7 +341,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`a` mediumint(8) unsigned NOT NULL,
PRIMARY KEY (`a`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='/tmp/' INDEX DIRECTORY='/tmp/' /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
insert into t1 values (16777215), (16777214), (16777213), (16777212), (1), (2), (65535);
select * from t1;
a
@@ -449,7 +449,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`a` bigint(20) unsigned NOT NULL,
PRIMARY KEY (`a`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='/tmp/' INDEX DIRECTORY='/tmp/' /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
insert into t1 values (18446744073709551615), (0xFFFFFFFFFFFFFFFE), (18446744073709551613), (18446744073709551612), (1), (2), (65535);
select * from t1;
a
diff --git a/mysql-test/suite/parts/r/partition_special_myisam.result b/mysql-test/suite/parts/r/partition_special_myisam.result
index f3249f49778..85e6d5445fd 100644
--- a/mysql-test/suite/parts/r/partition_special_myisam.result
+++ b/mysql-test/suite/parts/r/partition_special_myisam.result
@@ -20,7 +20,7 @@ t1 CREATE TABLE `t1` (
`c` varchar(50) NOT NULL,
`d` enum('m','w') NOT NULL DEFAULT 'm',
PRIMARY KEY (`a`,`b`,`c`,`d`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='/tmp/' INDEX DIRECTORY='/tmp/' /*!50100 PARTITION BY KEY (a,b,c,d) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a,b,c,d) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
insert into t1 values
('1975-01-01', 'abcde', 'abcde','m'),
('1983-12-31', 'cdef', 'srtbvsr', 'w'),
@@ -65,7 +65,7 @@ t1 CREATE TABLE `t1` (
`h` tinyint(4) NOT NULL,
`i` char(255) DEFAULT NULL,
PRIMARY KEY (`a`,`b`,`c`,`d`,`e`,`f`,`g`,`h`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='/tmp/' INDEX DIRECTORY='/tmp/' /*!50100 PARTITION BY KEY (a,b,c,d,e,f,g,h) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a,b,c,d,e,f,g,h) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
insert into t1 values
('1975-01-01', 'abcde', 'abcde','m', 1234, 123.45, 32412341234, 113, 'tbhth nrzh ztfghgfh fzh ftzhj fztjh'),
('1983-12-31', 'cdef', 'srtbvsr', 'w', 45634, 13452.56, 3452346456, 127, 'liuugbzvdmrlti b itiortudirtfgtibm dfi'),
@@ -118,7 +118,7 @@ t1 CREATE TABLE `t1` (
`h1` tinyint(4) NOT NULL,
`i` char(255) DEFAULT NULL,
PRIMARY KEY (`a`,`b`,`c`,`d`,`e`,`f`,`g`,`h`,`a1`,`b1`,`c1`,`d1`,`e1`,`f1`,`g1`,`h1`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='/tmp/' INDEX DIRECTORY='/tmp/' /*!50100 PARTITION BY KEY (a,b,c,d,e,f,g,h,a1,b1,c1,d1,e1,f1,g1,h1) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a,b,c,d,e,f,g,h,a1,b1,c1,d1,e1,f1,g1,h1) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
insert into t1 values
('1975-01-01', 'abcde', 'abcde','m', 1234, 123.45, 32412341234, 113,'1975-01-01', 'abcde', 'abcde','m', 1234, 123.45, 32412341234, 113, 'tbhth nrzh ztfghgfh fzh ftzhj fztjh'),
('1983-12-31', 'cdef', 'srtbvsr', 'w', 45634, 13452.56, 3452346456, 127,'1983-12-31', 'cdef', 'srtbvsr', 'w', 45634, 13452.56, 3452346456, 127, 'liuugbzvdmrlti b itiortudirtfgtibm dfi'),
@@ -202,7 +202,7 @@ t1 CREATE TABLE `t1` (
`h3` tinyint(4) NOT NULL,
`i` char(255) DEFAULT NULL,
PRIMARY KEY (`a`,`b`,`c`,`d`,`e`,`f`,`g`,`h`,`a1`,`b1`,`c1`,`d1`,`e1`,`f1`,`g1`,`h1`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='/tmp/' INDEX DIRECTORY='/tmp/' /*!50100 PARTITION BY KEY (a,b,c,d,e,f,g,h) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (a,b,c,d,e,f,g,h) (PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM, PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 DATA DIRECTORY = '/tmp' INDEX DIRECTORY = '/tmp' ENGINE = MyISAM) */
insert into t1 values
('1975-01-01', 'abcde', 'abcde','m', 1234, 123.45, 32412341234, 113,'1975-01-01', 'abcde', 'abcde','m', 1234, 123.45, 32412341234, 113,'1975-01-01', 'abcde', 'abcde','m', 1234, 123.45, 32412341234, 113, '1975-01-01', 'abcde', 'abcde','m', 1234, 123.45, 32412341234, 113, 'tbhth nrzh ztfghgfh fzh ftzhj fztjh'),
('1983-12-31', 'cdef', 'srtbvsr', 'w', 45634, 13452.56, 3452346456, 127,'1983-12-31', 'cdef', 'srtbvsr', 'w', 45634, 13452.56, 3452346456, 127, '1983-12-31', 'cdef', 'srtbvsr', 'w', 45634, 13452.56, 3452346456, 127, '1983-12-31', 'cdef', 'srtbvsr', 'w', 45634, 13452.56, 3452346456, 127, 'liuugbzvdmrlti b itiortudirtfgtibm dfi'),
diff --git a/mysql-test/suite/parts/r/partition_syntax_innodb.result b/mysql-test/suite/parts/r/partition_syntax_innodb.result
index c6fb2d38e4c..a26d2ec65b9 100644
--- a/mysql-test/suite/parts/r/partition_syntax_innodb.result
+++ b/mysql-test/suite/parts/r/partition_syntax_innodb.result
@@ -2,14 +2,6 @@ SET @max_row = 20;
SET @@session.storage_engine = 'InnoDB';
#------------------------------------------------------------------------
-# There are several testcases disabled because of the open bugs
-# #15890
-# The expected results suffer from the following bugs
-# harmless #17455, #19305
-# which cannot be suppressed because of technical reasons.
-#------------------------------------------------------------------------
-
-#------------------------------------------------------------------------
# 0. Setting of auxiliary variables + Creation of an auxiliary tables
# needed in many testcases
#------------------------------------------------------------------------
@@ -31,7 +23,7 @@ DROP TABLE IF EXISTS t0_definition;
CREATE TABLE t0_definition (
state CHAR(3),
create_command VARBINARY(5000),
-file_list VARBINARY(5000),
+file_list VARBINARY(10000),
PRIMARY KEY (state)
) ENGINE = MEMORY;
DROP TABLE IF EXISTS t0_aux;
@@ -1061,6 +1053,29 @@ f_char1 CHAR(20),
f_char2 CHAR(20),
f_charbig VARCHAR(1000)
)
+PARTITION BY HASH(f_int1) PARTITIONS 1.6;
+ERROR 42000: Only integers allowed as number here near '1.6' at line 8
+CREATE TABLE t1 (
+f_int1 INTEGER,
+f_int2 INTEGER,
+f_char1 CHAR(20),
+f_char2 CHAR(20),
+f_charbig VARCHAR(1000)
+)
+PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int1)
+SUBPARTITIONS 1.6
+(PARTITION part1 VALUES LESS THAN (10),
+PARTITION part2 VALUES LESS THAN (2147483646));
+ERROR 42000: Only integers allowed as number here near '1.6
+(PARTITION part1 VALUES LESS THAN (10),
+PARTITION part2 VALUES LESS THAN (21' at line 9
+CREATE TABLE t1 (
+f_int1 INTEGER,
+f_int2 INTEGER,
+f_char1 CHAR(20),
+f_char2 CHAR(20),
+f_charbig VARCHAR(1000)
+)
PARTITION BY HASH(f_int1) PARTITIONS 999999999999999999999999999999.999999999999999999999999999999;
ERROR 42000: Only integers allowed as number here near '999999999999999999999999999999.999999999999999999999999999999' at line 8
CREATE TABLE t1 (
@@ -1130,6 +1145,29 @@ f_char1 CHAR(20),
f_char2 CHAR(20),
f_charbig VARCHAR(1000)
)
+PARTITION BY HASH(f_int1) PARTITIONS 0.2E+1;
+ERROR 42000: Only integers allowed as number here near '0.2E+1' at line 8
+CREATE TABLE t1 (
+f_int1 INTEGER,
+f_int2 INTEGER,
+f_char1 CHAR(20),
+f_char2 CHAR(20),
+f_charbig VARCHAR(1000)
+)
+PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int1)
+SUBPARTITIONS 0.2E+1
+(PARTITION part1 VALUES LESS THAN (10),
+PARTITION part2 VALUES LESS THAN (2147483646));
+ERROR 42000: Only integers allowed as number here near '0.2E+1
+(PARTITION part1 VALUES LESS THAN (10),
+PARTITION part2 VALUES LESS THAN ' at line 9
+CREATE TABLE t1 (
+f_int1 INTEGER,
+f_int2 INTEGER,
+f_char1 CHAR(20),
+f_char2 CHAR(20),
+f_charbig VARCHAR(1000)
+)
PARTITION BY HASH(f_int1) PARTITIONS -2.0E+0;
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 '-2.0E+0' at line 8
CREATE TABLE t1 (
@@ -1153,6 +1191,29 @@ f_char1 CHAR(20),
f_char2 CHAR(20),
f_charbig VARCHAR(1000)
)
+PARTITION BY HASH(f_int1) PARTITIONS 0.16E+1;
+ERROR 42000: Only integers allowed as number here near '0.16E+1' at line 8
+CREATE TABLE t1 (
+f_int1 INTEGER,
+f_int2 INTEGER,
+f_char1 CHAR(20),
+f_char2 CHAR(20),
+f_charbig VARCHAR(1000)
+)
+PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int1)
+SUBPARTITIONS 0.16E+1
+(PARTITION part1 VALUES LESS THAN (10),
+PARTITION part2 VALUES LESS THAN (2147483646));
+ERROR 42000: Only integers allowed as number here near '0.16E+1
+(PARTITION part1 VALUES LESS THAN (10),
+PARTITION part2 VALUES LESS THAN' at line 9
+CREATE TABLE t1 (
+f_int1 INTEGER,
+f_int2 INTEGER,
+f_char1 CHAR(20),
+f_char2 CHAR(20),
+f_charbig VARCHAR(1000)
+)
PARTITION BY HASH(f_int1) PARTITIONS 0.0E+300;
ERROR 42000: Only integers allowed as number here near '0.0E+300' at line 8
CREATE TABLE t1 (
@@ -1169,6 +1230,52 @@ PARTITION part2 VALUES LESS THAN (2147483646));
ERROR 42000: Only integers allowed as number here near '0.0E+300
(PARTITION part1 VALUES LESS THAN (10),
PARTITION part2 VALUES LESS THA' at line 9
+CREATE TABLE t1 (
+f_int1 INTEGER,
+f_int2 INTEGER,
+f_char1 CHAR(20),
+f_char2 CHAR(20),
+f_charbig VARCHAR(1000)
+)
+PARTITION BY HASH(f_int1) PARTITIONS 1E+300;
+ERROR 42000: Only integers allowed as number here near '1E+300' at line 8
+CREATE TABLE t1 (
+f_int1 INTEGER,
+f_int2 INTEGER,
+f_char1 CHAR(20),
+f_char2 CHAR(20),
+f_charbig VARCHAR(1000)
+)
+PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int1)
+SUBPARTITIONS 1E+300
+(PARTITION part1 VALUES LESS THAN (10),
+PARTITION part2 VALUES LESS THAN (2147483646));
+ERROR 42000: Only integers allowed as number here near '1E+300
+(PARTITION part1 VALUES LESS THAN (10),
+PARTITION part2 VALUES LESS THAN ' at line 9
+CREATE TABLE t1 (
+f_int1 INTEGER,
+f_int2 INTEGER,
+f_char1 CHAR(20),
+f_char2 CHAR(20),
+f_charbig VARCHAR(1000)
+)
+PARTITION BY HASH(f_int1) PARTITIONS 1E-300;
+ERROR 42000: Only integers allowed as number here near '1E-300' at line 8
+CREATE TABLE t1 (
+f_int1 INTEGER,
+f_int2 INTEGER,
+f_char1 CHAR(20),
+f_char2 CHAR(20),
+f_charbig VARCHAR(1000)
+)
+PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int1)
+SUBPARTITIONS 1E-300
+(PARTITION part1 VALUES LESS THAN (10),
+PARTITION part2 VALUES LESS THAN (2147483646));
+ERROR 42000: Only integers allowed as number here near '1E-300
+(PARTITION part1 VALUES LESS THAN (10),
+PARTITION part2 VALUES LESS THAN ' at line 9
# 4.2.4 partition/subpartition numbers STRING notation
CREATE TABLE t1 (
f_int1 INTEGER,
diff --git a/mysql-test/suite/parts/r/partition_syntax_myisam.result b/mysql-test/suite/parts/r/partition_syntax_myisam.result
index 49a7b155a58..93cb075ce2f 100644
--- a/mysql-test/suite/parts/r/partition_syntax_myisam.result
+++ b/mysql-test/suite/parts/r/partition_syntax_myisam.result
@@ -2,14 +2,6 @@ SET @max_row = 20;
SET @@session.storage_engine = 'MyISAM';
#------------------------------------------------------------------------
-# There are several testcases disabled because of the open bugs
-# #15890
-# The expected results suffer from the following bugs
-# harmless #17455, #19305
-# which cannot be suppressed because of technical reasons.
-#------------------------------------------------------------------------
-
-#------------------------------------------------------------------------
# 0. Setting of auxiliary variables + Creation of an auxiliary tables
# needed in many testcases
#------------------------------------------------------------------------
@@ -31,7 +23,7 @@ DROP TABLE IF EXISTS t0_definition;
CREATE TABLE t0_definition (
state CHAR(3),
create_command VARBINARY(5000),
-file_list VARBINARY(5000),
+file_list VARBINARY(10000),
PRIMARY KEY (state)
) ENGINE = MEMORY;
DROP TABLE IF EXISTS t0_aux;
@@ -1143,6 +1135,29 @@ f_char1 CHAR(20),
f_char2 CHAR(20),
f_charbig VARCHAR(1000)
)
+PARTITION BY HASH(f_int1) PARTITIONS 1.6;
+ERROR 42000: Only integers allowed as number here near '1.6' at line 8
+CREATE TABLE t1 (
+f_int1 INTEGER,
+f_int2 INTEGER,
+f_char1 CHAR(20),
+f_char2 CHAR(20),
+f_charbig VARCHAR(1000)
+)
+PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int1)
+SUBPARTITIONS 1.6
+(PARTITION part1 VALUES LESS THAN (10),
+PARTITION part2 VALUES LESS THAN (2147483646));
+ERROR 42000: Only integers allowed as number here near '1.6
+(PARTITION part1 VALUES LESS THAN (10),
+PARTITION part2 VALUES LESS THAN (21' at line 9
+CREATE TABLE t1 (
+f_int1 INTEGER,
+f_int2 INTEGER,
+f_char1 CHAR(20),
+f_char2 CHAR(20),
+f_charbig VARCHAR(1000)
+)
PARTITION BY HASH(f_int1) PARTITIONS 999999999999999999999999999999.999999999999999999999999999999;
ERROR 42000: Only integers allowed as number here near '999999999999999999999999999999.999999999999999999999999999999' at line 8
CREATE TABLE t1 (
@@ -1212,6 +1227,29 @@ f_char1 CHAR(20),
f_char2 CHAR(20),
f_charbig VARCHAR(1000)
)
+PARTITION BY HASH(f_int1) PARTITIONS 0.2E+1;
+ERROR 42000: Only integers allowed as number here near '0.2E+1' at line 8
+CREATE TABLE t1 (
+f_int1 INTEGER,
+f_int2 INTEGER,
+f_char1 CHAR(20),
+f_char2 CHAR(20),
+f_charbig VARCHAR(1000)
+)
+PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int1)
+SUBPARTITIONS 0.2E+1
+(PARTITION part1 VALUES LESS THAN (10),
+PARTITION part2 VALUES LESS THAN (2147483646));
+ERROR 42000: Only integers allowed as number here near '0.2E+1
+(PARTITION part1 VALUES LESS THAN (10),
+PARTITION part2 VALUES LESS THAN ' at line 9
+CREATE TABLE t1 (
+f_int1 INTEGER,
+f_int2 INTEGER,
+f_char1 CHAR(20),
+f_char2 CHAR(20),
+f_charbig VARCHAR(1000)
+)
PARTITION BY HASH(f_int1) PARTITIONS -2.0E+0;
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 '-2.0E+0' at line 8
CREATE TABLE t1 (
@@ -1235,6 +1273,29 @@ f_char1 CHAR(20),
f_char2 CHAR(20),
f_charbig VARCHAR(1000)
)
+PARTITION BY HASH(f_int1) PARTITIONS 0.16E+1;
+ERROR 42000: Only integers allowed as number here near '0.16E+1' at line 8
+CREATE TABLE t1 (
+f_int1 INTEGER,
+f_int2 INTEGER,
+f_char1 CHAR(20),
+f_char2 CHAR(20),
+f_charbig VARCHAR(1000)
+)
+PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int1)
+SUBPARTITIONS 0.16E+1
+(PARTITION part1 VALUES LESS THAN (10),
+PARTITION part2 VALUES LESS THAN (2147483646));
+ERROR 42000: Only integers allowed as number here near '0.16E+1
+(PARTITION part1 VALUES LESS THAN (10),
+PARTITION part2 VALUES LESS THAN' at line 9
+CREATE TABLE t1 (
+f_int1 INTEGER,
+f_int2 INTEGER,
+f_char1 CHAR(20),
+f_char2 CHAR(20),
+f_charbig VARCHAR(1000)
+)
PARTITION BY HASH(f_int1) PARTITIONS 0.0E+300;
ERROR 42000: Only integers allowed as number here near '0.0E+300' at line 8
CREATE TABLE t1 (
@@ -1251,6 +1312,52 @@ PARTITION part2 VALUES LESS THAN (2147483646));
ERROR 42000: Only integers allowed as number here near '0.0E+300
(PARTITION part1 VALUES LESS THAN (10),
PARTITION part2 VALUES LESS THA' at line 9
+CREATE TABLE t1 (
+f_int1 INTEGER,
+f_int2 INTEGER,
+f_char1 CHAR(20),
+f_char2 CHAR(20),
+f_charbig VARCHAR(1000)
+)
+PARTITION BY HASH(f_int1) PARTITIONS 1E+300;
+ERROR 42000: Only integers allowed as number here near '1E+300' at line 8
+CREATE TABLE t1 (
+f_int1 INTEGER,
+f_int2 INTEGER,
+f_char1 CHAR(20),
+f_char2 CHAR(20),
+f_charbig VARCHAR(1000)
+)
+PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int1)
+SUBPARTITIONS 1E+300
+(PARTITION part1 VALUES LESS THAN (10),
+PARTITION part2 VALUES LESS THAN (2147483646));
+ERROR 42000: Only integers allowed as number here near '1E+300
+(PARTITION part1 VALUES LESS THAN (10),
+PARTITION part2 VALUES LESS THAN ' at line 9
+CREATE TABLE t1 (
+f_int1 INTEGER,
+f_int2 INTEGER,
+f_char1 CHAR(20),
+f_char2 CHAR(20),
+f_charbig VARCHAR(1000)
+)
+PARTITION BY HASH(f_int1) PARTITIONS 1E-300;
+ERROR 42000: Only integers allowed as number here near '1E-300' at line 8
+CREATE TABLE t1 (
+f_int1 INTEGER,
+f_int2 INTEGER,
+f_char1 CHAR(20),
+f_char2 CHAR(20),
+f_charbig VARCHAR(1000)
+)
+PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int1)
+SUBPARTITIONS 1E-300
+(PARTITION part1 VALUES LESS THAN (10),
+PARTITION part2 VALUES LESS THAN (2147483646));
+ERROR 42000: Only integers allowed as number here near '1E-300
+(PARTITION part1 VALUES LESS THAN (10),
+PARTITION part2 VALUES LESS THAN ' at line 9
# 4.2.4 partition/subpartition numbers STRING notation
CREATE TABLE t1 (
f_int1 INTEGER,
diff --git a/mysql-test/suite/parts/r/rpl_partition.result b/mysql-test/suite/parts/r/rpl_partition.result
index 79a95fd613b..bd77d4317bd 100644
--- a/mysql-test/suite/parts/r/rpl_partition.result
+++ b/mysql-test/suite/parts/r/rpl_partition.result
@@ -121,7 +121,7 @@ Create Table CREATE TABLE `t3` (
`fkid` mediumint(9) DEFAULT NULL,
`filler` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
-) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (id) SUBPARTITION BY HASH (id) SUBPARTITIONS 2 (PARTITION pa1 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION pa2 VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION pa3 VALUES LESS THAN (30) ENGINE = MyISAM, PARTITION pa4 VALUES LESS THAN (40) ENGINE = MyISAM, PARTITION pa5 VALUES LESS THAN (50) ENGINE = MyISAM, PARTITION pa6 VALUES LESS THAN (60) ENGINE = MyISAM, PARTITION pa7 VALUES LESS THAN (70) ENGINE = MyISAM, PARTITION pa8 VALUES LESS THAN (80) ENGINE = MyISAM, PARTITION pa9 VALUES LESS THAN (90) ENGINE = MyISAM, PARTITION pa10 VALUES LESS THAN (100) ENGINE = MyISAM, PARTITION pa11 VALUES LESS THAN MAXVALUE ENGINE = MyISAM) */
+) ENGINE=MyISAM AUTO_INCREMENT=1001 DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (id) SUBPARTITION BY HASH (id) SUBPARTITIONS 2 (PARTITION pa1 VALUES LESS THAN (10) ENGINE = MyISAM, PARTITION pa2 VALUES LESS THAN (20) ENGINE = MyISAM, PARTITION pa3 VALUES LESS THAN (30) ENGINE = MyISAM, PARTITION pa4 VALUES LESS THAN (40) ENGINE = MyISAM, PARTITION pa5 VALUES LESS THAN (50) ENGINE = MyISAM, PARTITION pa6 VALUES LESS THAN (60) ENGINE = MyISAM, PARTITION pa7 VALUES LESS THAN (70) ENGINE = MyISAM, PARTITION pa8 VALUES LESS THAN (80) ENGINE = MyISAM, PARTITION pa9 VALUES LESS THAN (90) ENGINE = MyISAM, PARTITION pa10 VALUES LESS THAN (100) ENGINE = MyISAM, PARTITION pa11 VALUES LESS THAN MAXVALUE ENGINE = MyISAM) */
show slave status;
Slave_IO_State #
Master_Host 127.0.0.1
diff --git a/mysql-test/suite/parts/t/disabled.def b/mysql-test/suite/parts/t/disabled.def
index 1b70519b72c..97dce441cc2 100644
--- a/mysql-test/suite/parts/t/disabled.def
+++ b/mysql-test/suite/parts/t/disabled.def
@@ -3,18 +3,23 @@ ndb_dd_backuprestore : cannot create t1
ndb_partition_error : cannot create t1
ndb_partition_list : cannot create t1
ndb_partition_range : cannot create t1
+part_supported_sql_func_ndb : cannot create t1
+partition_alter1_ndb : timeout. Needs too much time.
+partition_alter2_ndb : cannot create t1
+partition_basic_ndb : cannot create t1
+partition_bit_myisam : BUG#34225 2008-02-02 mats test suit parts uses /tmp-dir instead of mysql-test dir, which causes failures
partition_bit_ndb : cannot create t1
+partition_char_myisam : BUG#34225 2008-02-02 mats test suit parts uses /tmp-dir instead of mysql-test dir, which causes failures
+partition_datetime_myisam : BUG#34225 2008-02-02 mats test suit parts uses /tmp-dir instead of mysql-test dir, which causes failures
+partition_decimal_myisam : BUG#34225 2008-02-02 mats test suit parts uses /tmp-dir instead of mysql-test dir, which causes failures
+partition_engine_ndb : cannot create t1
+partition_float_myisam : BUG#34225 2008-02-02 mats test suit parts uses /tmp-dir instead of mysql-test dir, which causes failures
+partition_int_myisam : BUG#34225 2008-02-02 mats test suit parts uses /tmp-dir instead of mysql-test dir, which causes failures
partition_int_ndb : cannot create t1
+partition_sessions : needs system_3_init.inc
+partition_special_myisam : BUG#34225 2008-02-02 mats test suit parts uses /tmp-dir instead of mysql-test dir, which causes failures
partition_syntax_ndb : cannot create t1
-partition_value_myisam : Bug#30581 partition_value tests use disallowed CAST() function
partition_value_innodb : Bug#30581 partition_value tests use disallowed CAST() function
+partition_value_myisam : Bug#30581 partition_value tests use disallowed CAST() function
partition_value_ndb : cannot create t1
-partition_basic_ndb : cannot create t1
-partition_alter1_ndb : timeout. Needs too much time.
-partition_alter2_ndb : cannot create t1
-partition_char_innodb : crash. Bug? More investigations
-partition_sessions : needs system_3_init.inc
-partition_engine_ndb : cannot create t1
-part_supported_sql_func_ndb : cannot create t1
rpl_ndb_dd_partitions : cannot create t1
-partition_float_innodb : Bug#30583 Partition on DOUBLE key + INNODB + count(*) == crash
diff --git a/mysql-test/suite/parts/t/part_blocked_sql_func_innodb.test b/mysql-test/suite/parts/t/part_blocked_sql_func_innodb.test
index c2bbf6ad26c..12f5aabf59f 100644
--- a/mysql-test/suite/parts/t/part_blocked_sql_func_innodb.test
+++ b/mysql-test/suite/parts/t/part_blocked_sql_func_innodb.test
@@ -14,11 +14,11 @@
################################################################################
#
-# NOTE: PLEASE DO NOT ADD NOT MYISAM SPECIFIC TESTCASES HERE !
+# NOTE: PLEASE DO NOT ADD NOT INNODB SPECIFIC TESTCASES HERE !
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
-# Please read the README at the end of include/partition.pre before changing
+# Please read the README at the end of inc/partition.pre before changing
# any of the variables.
#
@@ -40,5 +40,3 @@ let $engine= 'INNODB';
#------------------------------------------------------------------------------#
--source suite/parts/inc/part_blocked_sql_funcs_main.inc
-# --source inc/part_blocked_sql_funcs_main.inc
-
diff --git a/mysql-test/suite/parts/t/part_blocked_sql_func_myisam.test b/mysql-test/suite/parts/t/part_blocked_sql_func_myisam.test
index bd7247e4ba5..6478f8c9f81 100644
--- a/mysql-test/suite/parts/t/part_blocked_sql_func_myisam.test
+++ b/mysql-test/suite/parts/t/part_blocked_sql_func_myisam.test
@@ -18,7 +18,7 @@
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
-# Please read the README at the end of include/partition.pre before changing
+# Please read the README at the end of inc/partition.pre before changing
# any of the variables.
#
@@ -39,5 +39,3 @@ let $engine= 'MYISAM';
#------------------------------------------------------------------------------#
--source suite/parts/inc/part_blocked_sql_funcs_main.inc
-# --source inc/part_blocked_sql_funcs_main.inc
-
diff --git a/mysql-test/suite/parts/t/part_supported_sql_func_innodb.test b/mysql-test/suite/parts/t/part_supported_sql_func_innodb.test
index ee765bbe1d0..e8d263e369c 100644
--- a/mysql-test/suite/parts/t/part_supported_sql_func_innodb.test
+++ b/mysql-test/suite/parts/t/part_supported_sql_func_innodb.test
@@ -14,7 +14,7 @@
################################################################################
#
-# NOTE: PLEASE DO NOT ADD NOT MYISAM SPECIFIC TESTCASES HERE !
+# NOTE: PLEASE DO NOT ADD NOT INNODB SPECIFIC TESTCASES HERE !
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
@@ -38,5 +38,3 @@ let $engine= 'INNODB';
#------------------------------------------------------------------------------#
--source suite/parts/inc/part_supported_sql_funcs_main.inc
-# --source inc/part_supported_sql_funcs_main.inc
-
diff --git a/mysql-test/suite/parts/t/part_supported_sql_func_myisam.test b/mysql-test/suite/parts/t/part_supported_sql_func_myisam.test
index 58c7d8ebfb1..4fb1e532c6b 100644
--- a/mysql-test/suite/parts/t/part_supported_sql_func_myisam.test
+++ b/mysql-test/suite/parts/t/part_supported_sql_func_myisam.test
@@ -18,7 +18,7 @@
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
-# Please read the README at the end of include/partition.pre before changing
+# Please read the README at the end of inc/partition.pre before changing
# any of the variables.
#
@@ -40,5 +40,3 @@ let $engine= 'MYISAM';
#------------------------------------------------------------------------------#
--source suite/parts/inc/part_supported_sql_funcs_main.inc
-# --source inc/part_supported_sql_funcs_main.inc
-
diff --git a/mysql-test/suite/parts/t/part_supported_sql_func_ndb.test b/mysql-test/suite/parts/t/part_supported_sql_func_ndb.test
index c21ffe16d19..c21649ba396 100644
--- a/mysql-test/suite/parts/t/part_supported_sql_func_ndb.test
+++ b/mysql-test/suite/parts/t/part_supported_sql_func_ndb.test
@@ -30,11 +30,9 @@ let $do_long_tests= 1;
#------------------------------------------------------------------------------#
# Engine specific settings and requirements
---source include/have_ndb.inc
##### Storage engine to be tested
+--source include/have_ndb.inc
let $engine= 'NDB';
#------------------------------------------------------------------------------#
--source suite/parts/inc/part_supported_sql_funcs_main.inc
-# --source inc/part_supported_sql_funcs_main.inc
-
diff --git a/mysql-test/suite/parts/t/partition_alter1_innodb.test b/mysql-test/suite/parts/t/partition_alter1_innodb.test
index 2667f1dbccd..bc07a832043 100644
--- a/mysql-test/suite/parts/t/partition_alter1_innodb.test
+++ b/mysql-test/suite/parts/t/partition_alter1_innodb.test
@@ -6,7 +6,7 @@
# InnoDB branch #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-03-05 #
# Change Author: #
# Change Date: #
@@ -18,7 +18,7 @@
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
-# Please read the README at the end of include/partition.pre before changing
+# Please read the README at the end of inc/partition.pre before changing
# any of the variables.
#
@@ -47,8 +47,8 @@ let $more_pk_ui_tests= 0;
# Engine specific settings and requirements
##### Storage engine to be tested
-let $engine= 'InnoDB';
--source include/have_innodb.inc
+let $engine= 'InnoDB';
##### Execute the test of "table" files
# InnoDB has no files per PK, UI, ...
@@ -64,7 +64,6 @@ let $MAX_VALUE= (2147483646);
# Generate the prerequisites ($variables, @variables, tables) needed
--source suite/parts/inc/partition.pre
-# --source inc/partition.pre
##### Workarounds for known open engine specific bugs
# none
@@ -72,7 +71,6 @@ let $MAX_VALUE= (2147483646);
#------------------------------------------------------------------------------#
# Execute the tests to be applied to all storage engines
--source suite/parts/inc/partition_alter1.inc
-# --source inc/partition_alter1.inc
#------------------------------------------------------------------------------#
# Execute storage engine specific tests
@@ -80,4 +78,3 @@ let $MAX_VALUE= (2147483646);
#------------------------------------------------------------------------------#
# Cleanup
--source suite/parts/inc/partition_cleanup.inc
-# --source inc/partition_cleanup.inc
diff --git a/mysql-test/suite/parts/t/partition_alter1_myisam.test b/mysql-test/suite/parts/t/partition_alter1_myisam.test
index 0959de92c15..a6a60f4a61d 100644
--- a/mysql-test/suite/parts/t/partition_alter1_myisam.test
+++ b/mysql-test/suite/parts/t/partition_alter1_myisam.test
@@ -6,7 +6,7 @@
# MyISAM branch #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-03-05 #
# Change Author: #
# Change Date: #
@@ -18,7 +18,7 @@
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
-# Please read the README at the end of include/partition.pre before changing
+# Please read the README at the end of inc/partition.pre before changing
# any of the variables.
#
@@ -63,7 +63,6 @@ let $MAX_VALUE= (2147483646);
# Generate the prerequisites ($variables, @variables, tables) needed
--source suite/parts/inc/partition.pre
-# --source inc/partition.pre
##### Workarounds for known open engine specific bugs
# none
@@ -71,7 +70,6 @@ let $MAX_VALUE= (2147483646);
#------------------------------------------------------------------------------#
# Execute the tests to be applied to all storage engines
--source suite/parts/inc/partition_alter1.inc
-# --source inc/partition_alter1.inc
#------------------------------------------------------------------------------#
# Execute storage engine specific tests
@@ -79,4 +77,3 @@ let $MAX_VALUE= (2147483646);
#------------------------------------------------------------------------------#
# Cleanup
--source suite/parts/inc/partition_cleanup.inc
-# --source inc/partition_cleanup.inc
diff --git a/mysql-test/suite/parts/t/partition_alter1_ndb.test b/mysql-test/suite/parts/t/partition_alter1_ndb.test
index 96ea9376eb9..cb18b203d39 100644
--- a/mysql-test/suite/parts/t/partition_alter1_ndb.test
+++ b/mysql-test/suite/parts/t/partition_alter1_ndb.test
@@ -6,7 +6,7 @@
# NDB branch #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-03-05 #
# Change Author: #
# Change Date: #
@@ -18,7 +18,7 @@
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
-# Please read the README at the end of include/partition.pre before changing
+# Please read the README at the end of inc/partition.pre before changing
# any of the variables.
#
@@ -47,8 +47,8 @@ let $more_pk_ui_tests= 0;
# Engine specific settings and requirements
##### Storage engine to be tested
-let $engine= 'ndbcluster';
--source include/have_ndb.inc
+let $engine= 'ndbcluster';
##### Execute the test of "table" files
# NDB has no files per PK, UI, ...
@@ -67,7 +67,6 @@ let $MAX_VALUE= (2147483646);
# Generate the prerequisites ($variables, @variables, tables) needed
--source suite/parts/inc/partition.pre
-# --source inc/partition.pre
##### Workarounds for known open engine specific bugs
# Bug#18735: Partitions: NDB, UNIQUE INDEX, UPDATE, strange server response
@@ -76,7 +75,6 @@ let $fixed_bug18735= 0;
#------------------------------------------------------------------------------#
# Execute the tests to be applied to all storage engines
--source suite/parts/inc/partition_alter1.inc
-# --source inc/partition_alter1.inc
#------------------------------------------------------------------------------#
# Execute storage engine specific tests
@@ -84,4 +82,3 @@ let $fixed_bug18735= 0;
#------------------------------------------------------------------------------#
# Cleanup
--source suite/parts/inc/partition_cleanup.inc
-# --source inc/partition_cleanup.inc
diff --git a/mysql-test/suite/parts/t/partition_alter2_innodb.test b/mysql-test/suite/parts/t/partition_alter2_innodb.test
index df2b4a0e048..a5efdc71437 100644
--- a/mysql-test/suite/parts/t/partition_alter2_innodb.test
+++ b/mysql-test/suite/parts/t/partition_alter2_innodb.test
@@ -6,7 +6,7 @@
# InnoDB branch #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-03-05 #
# Change Author: #
# Change Date: #
@@ -18,7 +18,7 @@
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
-# Please read the README at the end of include/partition.pre before changing
+# Please read the README at the end of inc/partition.pre before changing
# any of the variables.
#
@@ -47,8 +47,8 @@ let $more_pk_ui_tests= 0;
# Engine specific settings and requirements
##### Storage engine to be tested
-let $engine= 'InnoDB';
--source include/have_innodb.inc
+let $engine= 'InnoDB';
##### Execute the test of "table" files
# InnoDB has no files per PK, UI, ...
@@ -64,7 +64,6 @@ let $MAX_VALUE= (2147483646);
# Generate the prerequisites ($variables, @variables, tables) needed
--source suite/parts/inc/partition.pre
-# --source inc/partition.pre
##### Workarounds for known open engine specific bugs
# none
@@ -72,7 +71,6 @@ let $MAX_VALUE= (2147483646);
#------------------------------------------------------------------------------#
# Execute the tests to be applied to all storage engines
--source suite/parts/inc/partition_alter2.inc
-# --source inc/partition_alter2.inc
#------------------------------------------------------------------------------#
# Execute storage engine specific tests
@@ -80,4 +78,3 @@ let $MAX_VALUE= (2147483646);
#------------------------------------------------------------------------------#
# Cleanup
--source suite/parts/inc/partition_cleanup.inc
-# --source inc/partition_cleanup.inc
diff --git a/mysql-test/suite/parts/t/partition_alter2_myisam.test b/mysql-test/suite/parts/t/partition_alter2_myisam.test
index b8b92d1b218..a5b6380ef15 100644
--- a/mysql-test/suite/parts/t/partition_alter2_myisam.test
+++ b/mysql-test/suite/parts/t/partition_alter2_myisam.test
@@ -6,7 +6,7 @@
# MyISAM branch #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-03-05 #
# Change Author: #
# Change Date: #
@@ -18,7 +18,7 @@
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
-# Please read the README at the end of include/partition.pre before changing
+# Please read the README at the end of inc/partition.pre before changing
# any of the variables.
#
@@ -63,7 +63,6 @@ let $MAX_VALUE= (2147483646);
# Generate the prerequisites ($variables, @variables, tables) needed
--source suite/parts/inc/partition.pre
-# --source inc/partition.pre
##### Workarounds for known open engine specific bugs
# none
@@ -71,7 +70,6 @@ let $MAX_VALUE= (2147483646);
#------------------------------------------------------------------------------#
# Execute the tests to be applied to all storage engines
--source suite/parts/inc/partition_alter2.inc
-# --source inc/partition_alter2.inc
#------------------------------------------------------------------------------#
# Execute storage engine specific tests
@@ -79,4 +77,3 @@ let $MAX_VALUE= (2147483646);
#------------------------------------------------------------------------------#
# Cleanup
--source suite/parts/inc/partition_cleanup.inc
-# --source inc/partition_cleanup.inc
diff --git a/mysql-test/suite/parts/t/partition_alter2_ndb.test b/mysql-test/suite/parts/t/partition_alter2_ndb.test
index 8506ec3fea8..e9b4da93b7a 100644
--- a/mysql-test/suite/parts/t/partition_alter2_ndb.test
+++ b/mysql-test/suite/parts/t/partition_alter2_ndb.test
@@ -6,7 +6,7 @@
# NDB branch #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-03-05 #
# Change Author: #
# Change Date: #
@@ -18,7 +18,7 @@
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
-# Please read the README at the end of include/partition.pre before changing
+# Please read the README at the end of inc/partition.pre before changing
# any of the variables.
#
@@ -48,8 +48,8 @@ let $more_pk_ui_tests= 0;
# Engine specific settings and requirements
##### Storage engine to be tested
-let $engine= 'ndbcluster';
--source include/have_ndb.inc
+let $engine= 'ndbcluster';
##### Execute the test of "table" files
# NDB has no files per PK, UI, ...
@@ -68,7 +68,6 @@ let $MAX_VALUE= (2147483646);
# Generate the prerequisites ($variables, @variables, tables) needed
--source suite/parts/inc/partition.pre
-# --source inc/partition.pre
##### Workarounds for known open engine specific bugs
# none
@@ -76,7 +75,6 @@ let $MAX_VALUE= (2147483646);
#------------------------------------------------------------------------------#
# Execute the tests to be applied to all storage engines
--source suite/parts/inc/partition_alter2.inc
-# --source inc/partition_alter2.inc
#------------------------------------------------------------------------------#
# Execute storage engine specific tests
@@ -84,4 +82,3 @@ let $MAX_VALUE= (2147483646);
#------------------------------------------------------------------------------#
# Cleanup
--source suite/parts/inc/partition_cleanup.inc
-# --source inc/partition_cleanup.inc
diff --git a/mysql-test/suite/parts/t/partition_alter3_innodb.test b/mysql-test/suite/parts/t/partition_alter3_innodb.test
index 253cd7242bd..23c1a987aae 100644
--- a/mysql-test/suite/parts/t/partition_alter3_innodb.test
+++ b/mysql-test/suite/parts/t/partition_alter3_innodb.test
@@ -6,7 +6,7 @@
# InnoDB branch #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-04-24 #
# Change Author: #
# Change Date: #
@@ -18,7 +18,7 @@
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
-# Please read the README at the end of include/partition.pre before changing
+# Please read the README at the end of inc/partition.pre before changing
# any of the variables.
#
@@ -46,8 +46,8 @@ let $more_pk_ui_tests= 0;
# Engine specific settings and requirements
##### Storage engine to be tested
-let $engine= 'InnoDB';
--source include/have_innodb.inc
+let $engine= 'InnoDB';
##### Execute the test of "table" files
# InnoDB has no files per PK, UI, ...
@@ -63,7 +63,6 @@ let $MAX_VALUE= (2147483646);
# Generate the prerequisites ($variables, @variables, tables) needed
--source suite/parts/inc/partition.pre
-# --source inc/partition.pre
##### Workarounds for known open engine specific bugs
# none
@@ -71,7 +70,6 @@ let $MAX_VALUE= (2147483646);
#------------------------------------------------------------------------------#
# Execute the tests to be applied to all storage engines
--source suite/parts/inc/partition_alter3.inc
-# --source inc/partition_alter3.inc
#------------------------------------------------------------------------------#
# Execute storage engine specific tests
@@ -79,4 +77,3 @@ let $MAX_VALUE= (2147483646);
#------------------------------------------------------------------------------#
# Cleanup
--source suite/parts/inc/partition_cleanup.inc
-# --source inc/partition_cleanup.inc
diff --git a/mysql-test/suite/parts/t/partition_alter3_myisam.test b/mysql-test/suite/parts/t/partition_alter3_myisam.test
index 894340de4db..2212065fcc1 100644
--- a/mysql-test/suite/parts/t/partition_alter3_myisam.test
+++ b/mysql-test/suite/parts/t/partition_alter3_myisam.test
@@ -6,7 +6,7 @@
# MyISAM branch #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-04-11 #
# Change Author: #
# Change Date: #
@@ -18,7 +18,7 @@
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
-# Please read the README at the end of include/partition.pre before changing
+# Please read the README at the end of inc/partition.pre before changing
# any of the variables.
#
@@ -62,7 +62,6 @@ let $MAX_VALUE= (2147483646);
# Generate the prerequisites ($variables, @variables, tables) needed
--source suite/parts/inc/partition.pre
-# --source inc/partition.pre
##### Workarounds for known open engine specific bugs
# none
@@ -70,7 +69,6 @@ let $MAX_VALUE= (2147483646);
#------------------------------------------------------------------------------#
# Execute the tests to be applied to all storage engines
--source suite/parts/inc/partition_alter3.inc
-# --source inc/partition_alter3.inc
#------------------------------------------------------------------------------#
# Execute storage engine specific tests
@@ -78,4 +76,3 @@ let $MAX_VALUE= (2147483646);
#------------------------------------------------------------------------------#
# Cleanup
--source suite/parts/inc/partition_cleanup.inc
-# --source inc/partition_cleanup.inc
diff --git a/mysql-test/suite/parts/t/partition_alter4_innodb.test b/mysql-test/suite/parts/t/partition_alter4_innodb.test
index eea8b9997ef..3061e5c9e7f 100644
--- a/mysql-test/suite/parts/t/partition_alter4_innodb.test
+++ b/mysql-test/suite/parts/t/partition_alter4_innodb.test
@@ -18,7 +18,7 @@
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
-# Please read the README at the end of include/partition.pre before changing
+# Please read the README at the end of inc/partition.pre before changing
# any of the variables.
#
@@ -47,8 +47,8 @@ let $more_pk_ui_tests= 0;
# Engine specific settings and requirements
##### Storage engine to be tested
-let $engine= 'InnoDB';
--source include/have_innodb.inc
+let $engine= 'InnoDB';
##### Execute the test of "table" files
# InnoDB has no files per PK, UI, ...
@@ -64,7 +64,6 @@ let $MAX_VALUE= (2147483646);
# Generate the prerequisites ($variables, @variables, tables) needed
--source suite/parts/inc/partition.pre
-# --source inc/partition.pre
##### Workarounds for known open engine specific bugs
# none
@@ -72,7 +71,6 @@ let $MAX_VALUE= (2147483646);
#------------------------------------------------------------------------------#
# Execute the tests to be applied to all storage engines
--source suite/parts/inc/partition_alter4.inc
-# --source inc/partition_alter4.inc
#------------------------------------------------------------------------------#
# Execute storage engine specific tests
@@ -80,4 +78,3 @@ let $MAX_VALUE= (2147483646);
#------------------------------------------------------------------------------#
# Cleanup
--source suite/parts/inc/partition_cleanup.inc
-# --source inc/partition_cleanup.inc
diff --git a/mysql-test/suite/parts/t/partition_alter4_myisam.test b/mysql-test/suite/parts/t/partition_alter4_myisam.test
index 064dc111ef3..3b2117a3745 100644
--- a/mysql-test/suite/parts/t/partition_alter4_myisam.test
+++ b/mysql-test/suite/parts/t/partition_alter4_myisam.test
@@ -18,7 +18,7 @@
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
-# Please read the README at the end of include/partition.pre before changing
+# Please read the README at the end of inc/partition.pre before changing
# any of the variables.
#
@@ -63,7 +63,6 @@ let $MAX_VALUE= (2147483646);
# Generate the prerequisites ($variables, @variables, tables) needed
--source suite/parts/inc/partition.pre
-# --source inc/partition.pre
##### Workarounds for known open engine specific bugs
# none
@@ -71,7 +70,6 @@ let $MAX_VALUE= (2147483646);
#------------------------------------------------------------------------------#
# Execute the tests to be applied to all storage engines
--source suite/parts/inc/partition_alter4.inc
-# --source inc/partition_alter4.inc
#------------------------------------------------------------------------------#
# Execute storage engine specific tests
@@ -79,4 +77,3 @@ let $MAX_VALUE= (2147483646);
#------------------------------------------------------------------------------#
# Cleanup
--source suite/parts/inc/partition_cleanup.inc
-# --source inc/partition_cleanup.inc
diff --git a/mysql-test/suite/parts/t/partition_basic_innodb.test b/mysql-test/suite/parts/t/partition_basic_innodb.test
index 8e6f6e6d166..2c3e172014c 100644
--- a/mysql-test/suite/parts/t/partition_basic_innodb.test
+++ b/mysql-test/suite/parts/t/partition_basic_innodb.test
@@ -6,7 +6,7 @@
# InnoDB branch #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-03-05 #
# Change Author: #
# Change Date: #
@@ -18,7 +18,7 @@
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
-# Please read the README at the end of include/partition.pre before changing
+# Please read the README at the end of inc/partition.pre before changing
# any of the variables.
#
@@ -47,8 +47,8 @@ let $more_pk_ui_tests= 0;
# Engine specific settings and requirements
##### Storage engine to be tested
-let $engine= 'InnoDB';
--source include/have_innodb.inc
+let $engine= 'InnoDB';
##### Execute the test of "table" files
# InnoDB has no files per PK, UI, ...
@@ -64,7 +64,6 @@ let $MAX_VALUE= (2147483646);
# Generate the prerequisites ($variables, @variables, tables) needed
--source suite/parts/inc/partition.pre
-# --source inc/partition.pre
##### Workarounds for known open engine specific bugs
# none
@@ -72,7 +71,6 @@ let $MAX_VALUE= (2147483646);
#------------------------------------------------------------------------------#
# Execute the tests to be applied to all storage engines
--source suite/parts/inc/partition_basic.inc
-# --source inc/partition_basic.inc
#------------------------------------------------------------------------------#
# Execute storage engine specific tests
@@ -80,4 +78,3 @@ let $MAX_VALUE= (2147483646);
#------------------------------------------------------------------------------#
# Cleanup
--source suite/parts/inc/partition_cleanup.inc
-# --source inc/partition_cleanup.inc
diff --git a/mysql-test/suite/parts/t/partition_basic_myisam.test b/mysql-test/suite/parts/t/partition_basic_myisam.test
index 4f653db88e3..c363d06b00a 100644
--- a/mysql-test/suite/parts/t/partition_basic_myisam.test
+++ b/mysql-test/suite/parts/t/partition_basic_myisam.test
@@ -6,7 +6,7 @@
# MyISAM branch #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-03-05 #
# Change Author: #
# Change Date: #
@@ -18,7 +18,7 @@
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
-# Please read the README at the end of include/partition.pre before changing
+# Please read the README at the end of inc/partition.pre before changing
# any of the variables.
#
@@ -48,6 +48,9 @@ let $more_pk_ui_tests= 0;
##### Storage engine to be tested
let $engine= 'MyISAM';
+# The server uses in case of MyISAM symlinking (if available) and the expected
+# results fit to symlinking support.
+--source include/have_symlink.inc
##### Execute the test of "table" files
# MyISAM has files per PK, UI, ...
@@ -63,7 +66,6 @@ let $MAX_VALUE= (2147483646);
# Generate the prerequisites ($variables, @variables, tables) needed
--source suite/parts/inc/partition.pre
-# --source inc/partition.pre
##### Workarounds for known open engine specific bugs
# none
@@ -71,7 +73,6 @@ let $MAX_VALUE= (2147483646);
#------------------------------------------------------------------------------#
# Execute the tests to be applied to all storage engines
--source suite/parts/inc/partition_basic.inc
-# --source inc/partition_basic.inc
#------------------------------------------------------------------------------#
# Execute storage engine specific tests
@@ -79,4 +80,3 @@ let $MAX_VALUE= (2147483646);
#------------------------------------------------------------------------------#
# Cleanup
--source suite/parts/inc/partition_cleanup.inc
-# --source inc/partition_cleanup.inc
diff --git a/mysql-test/suite/parts/t/partition_basic_ndb.test b/mysql-test/suite/parts/t/partition_basic_ndb.test
index 2e6f830eefc..273d92ac80d 100644
--- a/mysql-test/suite/parts/t/partition_basic_ndb.test
+++ b/mysql-test/suite/parts/t/partition_basic_ndb.test
@@ -6,7 +6,7 @@
# NDB branch #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-03-05 #
# Change Author: #
# Change Date: #
@@ -18,7 +18,7 @@
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
-# Please read the README at the end of include/partition.pre before changing
+# Please read the README at the end of inc/partition.pre before changing
# any of the variables.
#
@@ -48,8 +48,8 @@ let $more_pk_ui_tests= 0;
# Engine specific settings and requirements
##### Storage engine to be tested
-let $engine= 'ndbcluster';
--source include/have_ndb.inc
+let $engine= 'ndbcluster';
##### Execute the test of "table" files
# NDB has no files per PK, UI, ...
@@ -68,18 +68,16 @@ let $MAX_VALUE= (2147483646);
# Generate the prerequisites ($variables, @variables, tables) needed
--source suite/parts/inc/partition.pre
-# --source inc/partition.pre
##### Workarounds for known open engine specific bugs
# Bug#18730 Partitions: NDB, crash on SELECT MIN(<unique column>)
-let $fixed_bug18730= 0;
+let $fixed_bug18730= 1;
# Bug#18735: Partitions: NDB, UNIQUE INDEX, UPDATE, strange server response
let $fixed_bug18735= 0;
#------------------------------------------------------------------------------#
# Execute the tests to be applied to all storage engines
--source suite/parts/inc/partition_basic.inc
-# --source inc/partition_basic.inc
#------------------------------------------------------------------------------#
# Execute storage engine specific tests
@@ -87,4 +85,3 @@ let $fixed_bug18735= 0;
#------------------------------------------------------------------------------#
# Cleanup
--source suite/parts/inc/partition_cleanup.inc
-# --source inc/partition_cleanup.inc
diff --git a/mysql-test/suite/parts/t/partition_bit_innodb.test b/mysql-test/suite/parts/t/partition_bit_innodb.test
index 7bc74036b2e..9b8eb90bb18 100644
--- a/mysql-test/suite/parts/t/partition_bit_innodb.test
+++ b/mysql-test/suite/parts/t/partition_bit_innodb.test
@@ -18,7 +18,7 @@
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
-# Please read the README at the end of include/partition.pre before changing
+# Please read the README at the end of inc/partition.pre before changing
# any of the variables.
#
@@ -53,5 +53,3 @@ let $MAX_VALUE= (2147483646);
#------------------------------------------------------------------------------#
# Execute the tests to be applied to all storage engines
--source suite/parts/inc/partition_bit.inc
-# --source inc/partition_basic.inc
-
diff --git a/mysql-test/suite/parts/t/partition_bit_myisam.test b/mysql-test/suite/parts/t/partition_bit_myisam.test
index c21ca104ca5..d2503c4923a 100644
--- a/mysql-test/suite/parts/t/partition_bit_myisam.test
+++ b/mysql-test/suite/parts/t/partition_bit_myisam.test
@@ -18,7 +18,7 @@
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
-# Please read the README at the end of include/partition.pre before changing
+# Please read the README at the end of inc/partition.pre before changing
# any of the variables.
#
@@ -52,5 +52,4 @@ let $MAX_VALUE= (2147483646);
#------------------------------------------------------------------------------#
# Execute the tests to be applied to all storage engines
--source suite/parts/inc/partition_bit.inc
-# --source inc/partition_basic.inc
diff --git a/mysql-test/suite/parts/t/partition_bit_ndb.test b/mysql-test/suite/parts/t/partition_bit_ndb.test
index 9e21c7de158..94e4119031c 100644
--- a/mysql-test/suite/parts/t/partition_bit_ndb.test
+++ b/mysql-test/suite/parts/t/partition_bit_ndb.test
@@ -18,7 +18,7 @@
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
-# Please read the README at the end of include/partition.pre before changing
+# Please read the README at the end of inc/partition.pre before changing
# any of the variables.
#
@@ -53,5 +53,3 @@ let $MAX_VALUE= (2147483646);
#------------------------------------------------------------------------------#
# Execute the tests to be applied to all storage engines
--source suite/parts/inc/partition_bit.inc
-# --source inc/partition_basic.inc
-
diff --git a/mysql-test/suite/parts/t/partition_char_innodb.test b/mysql-test/suite/parts/t/partition_char_innodb.test
index 27295084de4..0fd74dc46bd 100644
--- a/mysql-test/suite/parts/t/partition_char_innodb.test
+++ b/mysql-test/suite/parts/t/partition_char_innodb.test
@@ -18,7 +18,7 @@
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
-# Please read the README at the end of include/partition.pre before changing
+# Please read the README at the end of inc/partition.pre before changing
# any of the variables.
#
@@ -35,8 +35,8 @@ let $debug= 0;
# Engine specific settings and requirements
##### Storage engine to be tested
-let $engine= 'InnoDB';
--source include/have_innodb.inc
+let $engine= 'InnoDB';
##### max rows to be inserted
let $maxrows=65535;
@@ -51,11 +51,3 @@ let $maxrows=65535;
--source suite/parts/inc/partition_set.inc
--source suite/parts/inc/partition_blob.inc
--source suite/parts/inc/partition_text.inc
-# --source inc/partition_char.inc
-# --source inc/partition_binary.inc
-# --source inc/partition_varchar.inc
-# --source inc/partition_varbinary.inc
-# --source inc/partition_enum.inc
-# --source inc/partition_set.inc
-# --source inc/partition_blob.inc
-# --source inc/partition_text.inc
diff --git a/mysql-test/suite/parts/t/partition_char_myisam.test b/mysql-test/suite/parts/t/partition_char_myisam.test
index bdcb2cd9c24..63f478ec4ba 100644
--- a/mysql-test/suite/parts/t/partition_char_myisam.test
+++ b/mysql-test/suite/parts/t/partition_char_myisam.test
@@ -1,9 +1,9 @@
################################################################################
-# t/partition_special_myisam.test #
+# t/partition_char_myisam.test #
# #
# Purpose: #
-# different Tests #
-# MYISAM branch #
+# Tests around character types #
+# MyISAM branch #
# #
#------------------------------------------------------------------------------#
# Original Author: HH #
@@ -18,7 +18,7 @@
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
-# Please read the README at the end of include/partition.pre before changing
+# Please read the README at the end of inc/partition.pre before changing
# any of the variables.
#
@@ -37,7 +37,16 @@ let $debug= 0;
##### Storage engine to be tested
let $engine= 'MyISAM';
+##### max rows to be inserted
+let $maxrows=65535;
+
#------------------------------------------------------------------------------#
# Execute the tests to be applied to all storage engines
---source suite/parts/inc/partition_key_4col.inc
-# --source inc/partition_key_4col.inc
+--source suite/parts/inc/partition_char.inc
+--source suite/parts/inc/partition_binary.inc
+--source suite/parts/inc/partition_varchar.inc
+--source suite/parts/inc/partition_varbinary.inc
+--source suite/parts/inc/partition_enum.inc
+--source suite/parts/inc/partition_set.inc
+--source suite/parts/inc/partition_blob.inc
+--source suite/parts/inc/partition_text.inc
diff --git a/mysql-test/suite/parts/t/partition_datetime_innodb.test b/mysql-test/suite/parts/t/partition_datetime_innodb.test
index eba0bc3e10b..ec292fa04cf 100644
--- a/mysql-test/suite/parts/t/partition_datetime_innodb.test
+++ b/mysql-test/suite/parts/t/partition_datetime_innodb.test
@@ -18,7 +18,7 @@
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
-# Please read the README at the end of include/partition.pre before changing
+# Please read the README at the end of inc/partition.pre before changing
# any of the variables.
#
@@ -35,8 +35,8 @@ let $debug= 0;
# Engine specific settings and requirements
##### Storage engine to be tested
-let $engine= 'InnoDB';
--source include/have_innodb.inc
+let $engine= 'InnoDB';
##### max rows to be inserted
let $maxrows=1024;
@@ -48,8 +48,3 @@ let $maxrows=1024;
--source suite/parts/inc/partition_time.inc
--source suite/parts/inc/partition_datetime.inc
--source suite/parts/inc/partition_year.inc
-# --source inc/partition_timestamp.inc
-# --source inc/partition_date.inc
-# --source inc/partition_time.inc
-# --source inc/partition_datetime.inc
-# --source inc/partition_year.inc
diff --git a/mysql-test/suite/parts/t/partition_datetime_myisam.test b/mysql-test/suite/parts/t/partition_datetime_myisam.test
index 1fd6527d38e..25e304d5dcc 100644
--- a/mysql-test/suite/parts/t/partition_datetime_myisam.test
+++ b/mysql-test/suite/parts/t/partition_datetime_myisam.test
@@ -18,7 +18,7 @@
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
-# Please read the README at the end of include/partition.pre before changing
+# Please read the README at the end of inc/partition.pre before changing
# any of the variables.
#
@@ -47,8 +47,3 @@ let $maxrows=65535;
--source suite/parts/inc/partition_time.inc
--source suite/parts/inc/partition_datetime.inc
--source suite/parts/inc/partition_year.inc
-# --source inc/partition_timestamp.inc
-# --source inc/partition_date.inc
-# --source inc/partition_time.inc
-# --source inc/partition_datetime.inc
-# --source inc/partition_year.inc
diff --git a/mysql-test/suite/parts/t/partition_decimal_innodb.test b/mysql-test/suite/parts/t/partition_decimal_innodb.test
index 22e759ec5d9..6d0aa156abe 100644
--- a/mysql-test/suite/parts/t/partition_decimal_innodb.test
+++ b/mysql-test/suite/parts/t/partition_decimal_innodb.test
@@ -18,7 +18,7 @@
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
-# Please read the README at the end of include/partition.pre before changing
+# Please read the README at the end of inc/partition.pre before changing
# any of the variables.
#
@@ -35,8 +35,8 @@ let $debug= 0;
# Engine specific settings and requirements
##### Storage engine to be tested
-let $engine= 'InnoDB';
--source include/have_innodb.inc
+let $engine= 'InnoDB';
##### number of rows to be inserted
let $maxrows=1024;
@@ -44,4 +44,3 @@ let $maxrows=1024;
#------------------------------------------------------------------------------#
# Execute the tests to be applied to all storage engines
--source suite/parts/inc/partition_decimal.inc
-# --source inc/partition_decimal.inc
diff --git a/mysql-test/suite/parts/t/partition_decimal_myisam.test b/mysql-test/suite/parts/t/partition_decimal_myisam.test
index 9be50028647..49fc64cbd37 100644
--- a/mysql-test/suite/parts/t/partition_decimal_myisam.test
+++ b/mysql-test/suite/parts/t/partition_decimal_myisam.test
@@ -18,7 +18,7 @@
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
-# Please read the README at the end of include/partition.pre before changing
+# Please read the README at the end of inc/partition.pre before changing
# any of the variables.
#
@@ -42,4 +42,3 @@ let $maxrows=65535;
#------------------------------------------------------------------------------#
# Execute the tests to be applied to all storage engines
--source suite/parts/inc/partition_decimal.inc
-# --source inc/partition_decimal.inc
diff --git a/mysql-test/suite/parts/t/partition_engine_innodb.test b/mysql-test/suite/parts/t/partition_engine_innodb.test
index 6205c970b21..13a7b133fa1 100644
--- a/mysql-test/suite/parts/t/partition_engine_innodb.test
+++ b/mysql-test/suite/parts/t/partition_engine_innodb.test
@@ -6,7 +6,7 @@
# InnoDB branch #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-03-05 #
# Change Author: #
# Change Date: #
@@ -18,7 +18,7 @@
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
-# Please read the README at the end of include/partition.pre before changing
+# Please read the README at the end of inc/partition.pre before changing
# any of the variables.
#
@@ -46,8 +46,8 @@ let $more_pk_ui_tests= 0;
# Engine specific settings and requirements
##### Storage engine to be tested
-let $engine= 'InnoDB';
--source include/have_innodb.inc
+let $engine= 'InnoDB';
##### Execute the test of "table" files
# InnoDB has no files per PK, UI, ...
@@ -63,7 +63,6 @@ let $MAX_VALUE= (2147483646);
# Generate the prerequisites ($variables, @variables, tables) needed
--source suite/parts/inc/partition.pre
-# --source inc/partition.pre
##### Workarounds for known open engine specific bugs
# none
@@ -71,7 +70,6 @@ let $MAX_VALUE= (2147483646);
#------------------------------------------------------------------------------#
# Execute the tests to be applied to all storage engines
--source suite/parts/inc/partition_engine.inc
-# --source inc/partition_engine.inc
#------------------------------------------------------------------------------#
# Execute storage engine specific tests
@@ -79,4 +77,3 @@ let $MAX_VALUE= (2147483646);
#------------------------------------------------------------------------------#
# Cleanup
--source suite/parts/inc/partition_cleanup.inc
-# --source inc/partition_cleanup.inc
diff --git a/mysql-test/suite/parts/t/partition_engine_myisam.test b/mysql-test/suite/parts/t/partition_engine_myisam.test
index 437e20ab3ee..a7696d690db 100644
--- a/mysql-test/suite/parts/t/partition_engine_myisam.test
+++ b/mysql-test/suite/parts/t/partition_engine_myisam.test
@@ -6,7 +6,7 @@
# MyISAM branch #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-03-05 #
# Change Author: #
# Change Date: #
@@ -18,7 +18,7 @@
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
-# Please read the README at the end of include/partition.pre before changing
+# Please read the README at the end of inc/partition.pre before changing
# any of the variables.
#
@@ -62,7 +62,6 @@ let $MAX_VALUE= (2147483646);
# Generate the prerequisites ($variables, @variables, tables) needed
--source suite/parts/inc/partition.pre
-# --source inc/partition.pre
##### Workarounds for known open engine specific bugs
# none
@@ -70,7 +69,6 @@ let $MAX_VALUE= (2147483646);
#------------------------------------------------------------------------------#
# Execute the tests to be applied to all storage engines
--source suite/parts/inc/partition_engine.inc
-# --source inc/partition_engine.inc
#------------------------------------------------------------------------------#
# Execute storage engine specific tests
@@ -78,4 +76,3 @@ let $MAX_VALUE= (2147483646);
#------------------------------------------------------------------------------#
# Cleanup
--source suite/parts/inc/partition_cleanup.inc
-# --source inc/partition_cleanup.inc
diff --git a/mysql-test/suite/parts/t/partition_engine_ndb.test b/mysql-test/suite/parts/t/partition_engine_ndb.test
index 223e9b035c6..1e185c8ebaa 100644
--- a/mysql-test/suite/parts/t/partition_engine_ndb.test
+++ b/mysql-test/suite/parts/t/partition_engine_ndb.test
@@ -6,7 +6,7 @@
# NDB branch #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-03-05 #
# Change Author: #
# Change Date: #
@@ -18,7 +18,7 @@
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
-# Please read the README at the end of include/partition.pre before changing
+# Please read the README at the end of inc/partition.pre before changing
# any of the variables.
#
@@ -67,7 +67,6 @@ let $MAX_VALUE= (2147483646);
# Generate the prerequisites ($variables, @variables, tables) needed
--source suite/parts/inc/partition.pre
-# --source inc/partition.pre
##### Workarounds for known open engine specific bugs
# none
@@ -75,7 +74,6 @@ let $MAX_VALUE= (2147483646);
#------------------------------------------------------------------------------#
# Execute the tests to be applied to all storage engines
--source suite/parts/inc/partition_engine.inc
-# --source inc/partition_engine.inc
#------------------------------------------------------------------------------#
# Execute storage engine specific tests
@@ -83,4 +81,3 @@ let $MAX_VALUE= (2147483646);
#------------------------------------------------------------------------------#
# Cleanup
--source suite/parts/inc/partition_cleanup.inc
-# --source inc/partition_cleanup.inc
diff --git a/mysql-test/suite/parts/t/partition_float_innodb.test b/mysql-test/suite/parts/t/partition_float_innodb.test
index 3395d1812d2..2f1fe723dad 100644
--- a/mysql-test/suite/parts/t/partition_float_innodb.test
+++ b/mysql-test/suite/parts/t/partition_float_innodb.test
@@ -1,9 +1,9 @@
################################################################################
-# t/partition_float_myisam.test #
+# t/partition_float_innodb.test #
# #
# Purpose: #
# Tests around float type #
-# MyISAM branch #
+# INNODB branch #
# #
#------------------------------------------------------------------------------#
# Original Author: HH #
@@ -14,11 +14,11 @@
################################################################################
#
-# NOTE: PLEASE DO NOT ADD NOT MYISAM SPECIFIC TESTCASES HERE !
+# NOTE: PLEASE DO NOT ADD NOT INNODB SPECIFIC TESTCASES HERE !
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
-# Please read the README at the end of include/partition.pre before changing
+# Please read the README at the end of inc/partition.pre before changing
# any of the variables.
#
@@ -35,8 +35,8 @@ let $debug= 0;
# Engine specific settings and requirements
##### Storage engine to be tested
-let $engine= 'InnoDB';
--source include/have_innodb.inc
+let $engine= 'InnoDB';
##### Number of row to be inserted.
let $maxrows=1024;
@@ -45,5 +45,3 @@ let $maxrows=1024;
# Execute the tests to be applied to all storage engines
--source suite/parts/inc/partition_float.inc
--source suite/parts/inc/partition_double.inc
-# --source inc/partition_float.inc
-# --source inc/partition_double.inc
diff --git a/mysql-test/suite/parts/t/partition_float_myisam.test b/mysql-test/suite/parts/t/partition_float_myisam.test
index 57ef91a3169..51e0f1f5a21 100644
--- a/mysql-test/suite/parts/t/partition_float_myisam.test
+++ b/mysql-test/suite/parts/t/partition_float_myisam.test
@@ -18,7 +18,7 @@
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
-# Please read the README at the end of include/partition.pre before changing
+# Please read the README at the end of inc/partition.pre before changing
# any of the variables.
#
@@ -43,5 +43,3 @@ let $maxrows=16384;
# Execute the tests to be applied to all storage engines
--source suite/parts/inc/partition_float.inc
--source suite/parts/inc/partition_double.inc
-# --source inc/partition_float.inc
-# --source inc/partition_double.inc
diff --git a/mysql-test/suite/parts/t/partition_int_innodb.test b/mysql-test/suite/parts/t/partition_int_innodb.test
index dc14b369654..698a2c93c22 100644
--- a/mysql-test/suite/parts/t/partition_int_innodb.test
+++ b/mysql-test/suite/parts/t/partition_int_innodb.test
@@ -18,7 +18,7 @@
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
-# Please read the README at the end of include/partition.pre before changing
+# Please read the README at the end of inc/partition.pre before changing
# any of the variables.
#
@@ -35,8 +35,8 @@ let $debug= 0;
# Engine specific settings and requirements
##### Storage engine to be tested
-let $engine= 'InnoDB';
--source include/have_innodb.inc
+let $engine= 'InnoDB';
##### max rows to be inserted
let $maxrows=1024;
@@ -48,8 +48,3 @@ let $maxrows=1024;
--source suite/parts/inc/partition_int.inc
--source suite/parts/inc/partition_mediumint.inc
--source suite/parts/inc/partition_bigint.inc
-# --source inc/partition_tinyint.inc
-# --source inc/partition_samllint.inc
-# --source inc/partition_int.inc
-# --source inc/partition_mediumint.inc
-# --source inc/partition_bigint.inc
diff --git a/mysql-test/suite/parts/t/partition_int_myisam.test b/mysql-test/suite/parts/t/partition_int_myisam.test
index c85a1471a35..b0ede4995e8 100644
--- a/mysql-test/suite/parts/t/partition_int_myisam.test
+++ b/mysql-test/suite/parts/t/partition_int_myisam.test
@@ -18,7 +18,7 @@
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
-# Please read the README at the end of include/partition.pre before changing
+# Please read the README at the end of inc/partition.pre before changing
# any of the variables.
#
@@ -46,8 +46,3 @@ let $maxrows=65535;
--source suite/parts/inc/partition_int.inc
--source suite/parts/inc/partition_mediumint.inc
--source suite/parts/inc/partition_bigint.inc
-# --source inc/partition_tinyint.inc
-# --source inc/partition_samllint.inc
-# --source inc/partition_int.inc
-# --source inc/partition_mediumint.inc
-# --source inc/partition_bigint.inc
diff --git a/mysql-test/suite/parts/t/partition_int_ndb.test b/mysql-test/suite/parts/t/partition_int_ndb.test
index dfa853bed16..0a60408292a 100644
--- a/mysql-test/suite/parts/t/partition_int_ndb.test
+++ b/mysql-test/suite/parts/t/partition_int_ndb.test
@@ -18,7 +18,7 @@
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
-# Please read the README at the end of include/partition.pre before changing
+# Please read the README at the end of inc/partition.pre before changing
# any of the variables.
#
@@ -45,8 +45,3 @@ let $engine= 'NDB';
--source suite/parts/inc/partition_int.inc
--source suite/parts/inc/partition_mediumint.inc
--source suite/parts/inc/partition_bigint.inc
-# --source inc/partition_tinyint.inc
-# --source inc/partition_samllint.inc
-# --source inc/partition_int.inc
-# --source inc/partition_mediumint.inc
-# --source inc/partition_bigint.inc
diff --git a/mysql-test/suite/parts/t/partition_special_innodb.test b/mysql-test/suite/parts/t/partition_special_innodb.test
index f552d64f4e4..598dfea1e27 100644
--- a/mysql-test/suite/parts/t/partition_special_innodb.test
+++ b/mysql-test/suite/parts/t/partition_special_innodb.test
@@ -18,7 +18,7 @@
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
-# Please read the README at the end of include/partition.pre before changing
+# Please read the README at the end of inc/partition.pre before changing
# any of the variables.
#
@@ -35,8 +35,8 @@ let $debug= 0;
# Engine specific settings and requirements
##### Storage engine to be tested
-let $engine= 'InnoDB';
--source include/have_innodb.inc
+let $engine= 'InnoDB';
#------------------------------------------------------------------------------#
# Execute the tests to be applied to all storage engines
@@ -44,7 +44,3 @@ let $engine= 'InnoDB';
--source suite/parts/inc/partition_key_8col.inc
--source suite/parts/inc/partition_key_16col.inc
--source suite/parts/inc/partition_key_32col.inc
-# --source inc/partition_key_4col.inc
-# --source inc/partition_key_8col.inc
-# --source inc/partition_key_16col.inc
-# --source inc/partition_key_32col.inc
diff --git a/mysql-test/suite/parts/t/partition_special_myisam.test b/mysql-test/suite/parts/t/partition_special_myisam.test
index c87d39ab577..e1737ebc3c2 100644
--- a/mysql-test/suite/parts/t/partition_special_myisam.test
+++ b/mysql-test/suite/parts/t/partition_special_myisam.test
@@ -18,7 +18,7 @@
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
-# Please read the README at the end of include/partition.pre before changing
+# Please read the README at the end of inc/partition.pre before changing
# any of the variables.
#
@@ -43,7 +43,3 @@ let $engine= 'MyISAM';
--source suite/parts/inc/partition_key_8col.inc
--source suite/parts/inc/partition_key_16col.inc
--source suite/parts/inc/partition_key_32col.inc
-# --source inc/partition_key_4col.inc
-# --source inc/partition_key_8col.inc
-# --source inc/partition_key_16col.inc
-# --source inc/partition_key_32col.inc
diff --git a/mysql-test/suite/parts/t/partition_syntax_innodb.test b/mysql-test/suite/parts/t/partition_syntax_innodb.test
index ce62b06bd6f..6e65337d267 100644
--- a/mysql-test/suite/parts/t/partition_syntax_innodb.test
+++ b/mysql-test/suite/parts/t/partition_syntax_innodb.test
@@ -6,7 +6,7 @@
# InnoDB branch #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-03-05 #
# Change Author: #
# Change Date: #
@@ -18,7 +18,7 @@
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
-# Please read the README at the end of include/partition.pre before changing
+# Please read the README at the end of inc/partition.pre before changing
# any of the variables.
#
@@ -46,8 +46,8 @@ let $more_pk_ui_tests= 0;
# Engine specific settings and requirements
##### Storage engine to be tested
-let $engine= 'InnoDB';
--source include/have_innodb.inc
+let $engine= 'InnoDB';
##### Execute the test of "table" files
# InnoDB has no files per PK, UI, ...
@@ -63,7 +63,6 @@ let $MAX_VALUE= (2147483646);
# Generate the prerequisites ($variables, @variables, tables) needed
--source suite/parts/inc/partition.pre
-# --source inc/partition.pre
##### Workarounds for known open engine specific bugs
# none
@@ -71,7 +70,6 @@ let $MAX_VALUE= (2147483646);
#------------------------------------------------------------------------------#
# Execute the tests to be applied to all storage engines
--source suite/parts/inc/partition_syntax.inc
-# --source inc/partition_syntax.inc
#------------------------------------------------------------------------------#
# Execute storage engine specific tests
@@ -79,4 +77,3 @@ let $MAX_VALUE= (2147483646);
#------------------------------------------------------------------------------#
# Cleanup
--source suite/parts/inc/partition_cleanup.inc
-# --source inc/partition_cleanup.inc
diff --git a/mysql-test/suite/parts/t/partition_syntax_myisam.test b/mysql-test/suite/parts/t/partition_syntax_myisam.test
index 62396580b50..7777833f6d4 100644
--- a/mysql-test/suite/parts/t/partition_syntax_myisam.test
+++ b/mysql-test/suite/parts/t/partition_syntax_myisam.test
@@ -6,7 +6,7 @@
# MyISAM branch #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-03-05 #
# Change Author: #
# Change Date: #
@@ -18,7 +18,7 @@
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
-# Please read the README at the end of include/partition.pre before changing
+# Please read the README at the end of inc/partition.pre before changing
# any of the variables.
#
@@ -62,7 +62,6 @@ let $MAX_VALUE= (2147483646);
# Generate the prerequisites ($variables, @variables, tables) needed
--source suite/parts/inc/partition.pre
-# --source inc/partition.pre
##### Workarounds for known open engine specific bugs
# none
@@ -70,7 +69,6 @@ let $MAX_VALUE= (2147483646);
#------------------------------------------------------------------------------#
# Execute the tests to be applied to all storage engines
--source suite/parts/inc/partition_syntax.inc
-# --source inc/partition_syntax.inc
#------------------------------------------------------------------------------#
# Execute storage engine specific tests
@@ -78,4 +76,3 @@ let $MAX_VALUE= (2147483646);
#------------------------------------------------------------------------------#
# Cleanup
--source suite/parts/inc/partition_cleanup.inc
-# --source inc/partition_cleanup.inc
diff --git a/mysql-test/suite/parts/t/partition_syntax_ndb.test b/mysql-test/suite/parts/t/partition_syntax_ndb.test
index 3eb453ce7ea..90b74452ab1 100644
--- a/mysql-test/suite/parts/t/partition_syntax_ndb.test
+++ b/mysql-test/suite/parts/t/partition_syntax_ndb.test
@@ -6,7 +6,7 @@
# NDB branch #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-03-05 #
# Change Author: #
# Change Date: #
@@ -18,7 +18,7 @@
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
-# Please read the README at the end of include/partition.pre before changing
+# Please read the README at the end of inc/partition.pre before changing
# any of the variables.
#
@@ -47,8 +47,8 @@ let $more_pk_ui_tests= 0;
# Engine specific settings and requirements
##### Storage engine to be tested
-let $engine= 'ndbcluster';
--source include/have_ndb.inc
+let $engine= 'ndbcluster';
##### Execute the test of "table" files
# NDB has no files per PK, UI, ...
@@ -67,7 +67,6 @@ let $MAX_VALUE= (2147483646);
# Generate the prerequisites ($variables, @variables, tables) needed
--source suite/parts/inc/partition.pre
-# --source inc/partition.pre
##### Workarounds for known open engine specific bugs
# Bug#18735: Partitions: NDB, UNIQUE INDEX, UPDATE, strange server response
@@ -76,7 +75,6 @@ let $fixed_bug18735= 0;
#------------------------------------------------------------------------------#
# Execute the tests to be applied to all storage engines
--source suite/parts/inc/partition_syntax.inc
-# --source inc/partition_syntax.inc
#------------------------------------------------------------------------------#
# Execute storage engine specific tests
@@ -84,4 +82,3 @@ let $fixed_bug18735= 0;
#------------------------------------------------------------------------------#
# Cleanup
--source suite/parts/inc/partition_cleanup.inc
-# --source inc/partition_cleanup.inc
diff --git a/mysql-test/suite/parts/t/partition_value_innodb.test b/mysql-test/suite/parts/t/partition_value_innodb.test
index 2e3c6ff98ad..9d59533a54e 100644
--- a/mysql-test/suite/parts/t/partition_value_innodb.test
+++ b/mysql-test/suite/parts/t/partition_value_innodb.test
@@ -6,7 +6,7 @@
# InnoDB branch #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-04-11 #
# Change Author: #
# Change Date: #
@@ -18,7 +18,7 @@
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
-# Please read the README at the end of include/partition.pre before changing
+# Please read the README at the end of inc/partition.pre before changing
# any of the variables.
#
@@ -46,8 +46,8 @@ let $more_pk_ui_tests= 0;
# Engine specific settings and requirements
##### Storage engine to be tested
-let $engine= 'InnoDB';
--source include/have_innodb.inc
+let $engine= 'InnoDB';
##### Execute the test of "table" files
# InnoDB has no files per PK, UI, ...
@@ -63,7 +63,6 @@ let $MAX_VALUE= (2147483646);
# Generate the prerequisites ($variables, @variables, tables) needed
--source suite/parts/inc/partition.pre
-# --source inc/partition.pre
##### Workarounds for known open engine specific bugs
# none
@@ -71,7 +70,6 @@ let $MAX_VALUE= (2147483646);
#------------------------------------------------------------------------------#
# Execute the tests to be applied to all storage engines
--source suite/parts/inc/partition_value.inc
-# --source inc/partition_value.inc
#------------------------------------------------------------------------------#
# Execute storage engine specific tests
@@ -79,4 +77,3 @@ let $MAX_VALUE= (2147483646);
#------------------------------------------------------------------------------#
# Cleanup
--source suite/parts/inc/partition_cleanup.inc
-# --source inc/partition_cleanup.inc
diff --git a/mysql-test/suite/parts/t/partition_value_myisam.test b/mysql-test/suite/parts/t/partition_value_myisam.test
index 78e781111f7..d6020669509 100644
--- a/mysql-test/suite/parts/t/partition_value_myisam.test
+++ b/mysql-test/suite/parts/t/partition_value_myisam.test
@@ -6,7 +6,7 @@
# MyISAM branch #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-04-11 #
# Change Author: #
# Change Date: #
@@ -18,7 +18,7 @@
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
-# Please read the README at the end of include/partition.pre before changing
+# Please read the README at the end of inc/partition.pre before changing
# any of the variables.
#
@@ -62,7 +62,6 @@ let $MAX_VALUE= (2147483646);
# Generate the prerequisites ($variables, @variables, tables) needed
--source suite/parts/inc/partition.pre
-# --source inc/partition.pre
##### Workarounds for known open engine specific bugs
# none
@@ -70,7 +69,6 @@ let $MAX_VALUE= (2147483646);
#------------------------------------------------------------------------------#
# Execute the tests to be applied to all storage engines
--source suite/parts/inc/partition_value.inc
-# --source inc/partition_value.inc
#------------------------------------------------------------------------------#
# Execute storage engine specific tests
@@ -78,4 +76,3 @@ let $MAX_VALUE= (2147483646);
#------------------------------------------------------------------------------#
# Cleanup
--source suite/parts/inc/partition_cleanup.inc
-# --source inc/partition_cleanup.inc
diff --git a/mysql-test/suite/parts/t/partition_value_ndb.test b/mysql-test/suite/parts/t/partition_value_ndb.test
index 94230af131e..91497c3ec42 100644
--- a/mysql-test/suite/parts/t/partition_value_ndb.test
+++ b/mysql-test/suite/parts/t/partition_value_ndb.test
@@ -6,7 +6,7 @@
# NDB branch #
# #
#------------------------------------------------------------------------------#
-# Original Author: ML #
+# Original Author: mleich #
# Original Date: 2006-04-11 #
# Change Author: #
# Change Date: #
@@ -18,7 +18,7 @@
# TESTCASES WHICH MUST BE APPLIED TO ALL STORAGE ENGINES MUST BE ADDED IN
# THE SOURCED FILES ONLY.
#
-# Please read the README at the end of include/partition.pre before changing
+# Please read the README at the end of inc/partition.pre before changing
# any of the variables.
#
@@ -47,8 +47,8 @@ let $more_pk_ui_tests= 0;
# Engine specific settings and requirements
##### Storage engine to be tested
-let $engine= 'ndbcluster';
--source include/have_ndb.inc
+let $engine= 'ndbcluster';
##### Execute the test of "table" files
# NDB has no files per PK, UI, ...
@@ -67,7 +67,6 @@ let $MAX_VALUE= (2147483646);
# Generate the prerequisites ($variables, @variables, tables) needed
--source suite/parts/inc/partition.pre
-# --source inc/partition.pre
##### Workarounds for known open engine specific bugs
# none
@@ -75,7 +74,6 @@ let $MAX_VALUE= (2147483646);
#------------------------------------------------------------------------------#
# Execute the tests to be applied to all storage engines
--source suite/parts/inc/partition_value.inc
-# --source inc/partition_value.inc
#------------------------------------------------------------------------------#
# Execute storage engine specific tests
@@ -83,4 +81,3 @@ let $MAX_VALUE= (2147483646);
#------------------------------------------------------------------------------#
# Cleanup
--source suite/parts/inc/partition_cleanup.inc
-# --source inc/partition_cleanup.inc
diff --git a/mysql-test/suite/rpl/combinations b/mysql-test/suite/rpl/combinations
new file mode 100644
index 00000000000..ea25611a5d4
--- /dev/null
+++ b/mysql-test/suite/rpl/combinations
@@ -0,0 +1,8 @@
+[row]
+--binlog-format=row
+
+[stmt]
+--binlog-format=statement
+
+[mix]
+--binlog-format=mixed
diff --git a/mysql-test/suite/rpl/data/rpl_bug28618.dat b/mysql-test/suite/rpl/data/rpl_bug28618.dat
new file mode 100644
index 00000000000..b800c4dd39d
--- /dev/null
+++ b/mysql-test/suite/rpl/data/rpl_bug28618.dat
@@ -0,0 +1,3 @@
+1|master only
+2|master only
+3|master only
diff --git a/mysql-test/suite/rpl/include/rpl_mixed_check_select.inc b/mysql-test/suite/rpl/include/rpl_mixed_check_select.inc
index 5d3b80e077b..b3e0cefbbd7 100644
--- a/mysql-test/suite/rpl/include/rpl_mixed_check_select.inc
+++ b/mysql-test/suite/rpl/include/rpl_mixed_check_select.inc
@@ -7,15 +7,15 @@
--echo ==========MASTER==========
SELECT COUNT(*) FROM t1;
-SELECT * FROM t1;
+SELECT * FROM t1 ORDER BY a;
SELECT COUNT(*) FROM t2;
-SELECT * FROM t2;
+SELECT * FROM t2 ORDER BY a;
sync_slave_with_master;
--echo ==========SLAVE===========
USE test_rpl;
SELECT COUNT(*) FROM t1;
-SELECT * FROM t1;
+SELECT * FROM t1 ORDER BY a;
SELECT COUNT(*) FROM t2;
-SELECT * FROM t2;
+SELECT * FROM t2 ORDER BY a;
connection master;
diff --git a/mysql-test/suite/rpl/include/rpl_mixed_check_view.inc b/mysql-test/suite/rpl/include/rpl_mixed_check_view.inc
index 43feedfe64a..a9f7ad8cd68 100644
--- a/mysql-test/suite/rpl/include/rpl_mixed_check_view.inc
+++ b/mysql-test/suite/rpl/include/rpl_mixed_check_view.inc
@@ -7,11 +7,11 @@
--echo ==========MASTER==========
SHOW CREATE VIEW v1;
-SELECT * FROM v1;
+SELECT * FROM v1 ORDER BY a;
sync_slave_with_master;
--echo ==========SLAVE===========
USE test_rpl;
SHOW CREATE VIEW v1;
-SELECT * FROM v1;
+SELECT * FROM v1 ORDER BY a;
connection master;
diff --git a/mysql-test/suite/rpl/include/rpl_mixed_dml.inc b/mysql-test/suite/rpl/include/rpl_mixed_dml.inc
index 96dfdbed541..d7041d82a2a 100644
--- a/mysql-test/suite/rpl/include/rpl_mixed_dml.inc
+++ b/mysql-test/suite/rpl/include/rpl_mixed_dml.inc
@@ -51,10 +51,10 @@ DELETE FROM t2 WHERE a = 2;
--echo
--echo ******************** LOAD DATA INFILE ********************
---exec cp ./suite/rpl/data/rpl_mixed.dat $MYSQLTEST_VARDIR/tmp/
+--copy_file ./suite/rpl/data/rpl_mixed.dat $MYSQLTEST_VARDIR/tmp/rpl_mixed.dat
LOAD DATA INFILE '../tmp/rpl_mixed.dat' INTO TABLE t1 FIELDS TERMINATED BY '|' ;
---exec rm $MYSQLTEST_VARDIR/tmp/rpl_mixed.dat
-SELECT * FROM t1;
+--remove_file $MYSQLTEST_VARDIR/tmp/rpl_mixed.dat
+SELECT * FROM t1 ORDER BY a;
--source suite/rpl/include/rpl_mixed_check_select.inc
--source suite/rpl/include/rpl_mixed_clear_tables.inc
@@ -75,7 +75,7 @@ DELETE FROM t1 WHERE a = 2;
--echo
--echo ******************** SELECT ********************
INSERT INTO t1 VALUES(1, 't1, text 1');
-SELECT * FROM t1 WHERE b <> UUID();
+SELECT * FROM t1 WHERE b <> UUID() ORDER BY a;
--source suite/rpl/include/rpl_mixed_clear_tables.inc
# JOIN
@@ -85,8 +85,8 @@ INSERT INTO t1 VALUES(1, 'CCC');
INSERT INTO t1 VALUES(2, 'DDD');
INSERT INTO t2 VALUES(1, 'DDD');
INSERT INTO t2 VALUES(2, 'CCC');
-SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.a;
-SELECT * FROM t1 INNER JOIN t2 ON t1.b = t2.b;
+SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.a ORDER BY t1.a,t2.a;
+SELECT * FROM t1 INNER JOIN t2 ON t1.b = t2.b ORDER BY t1.a,t2.a;
--source suite/rpl/include/rpl_mixed_clear_tables.inc
# UNION
diff --git a/mysql-test/suite/rpl/r/rpl_000015.result b/mysql-test/suite/rpl/r/rpl_000015.result
index 79d87354cb2..03b96d5870b 100644
--- a/mysql-test/suite/rpl/r/rpl_000015.result
+++ b/mysql-test/suite/rpl/r/rpl_000015.result
@@ -1,7 +1,7 @@
reset master;
show master status;
File Position Binlog_Do_DB Binlog_Ignore_DB
-master-bin.000001 106
+master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB>
reset slave;
SHOW SLAVE STATUS;
change master to master_host='127.0.0.1';
@@ -12,7 +12,7 @@ Master_User test
Master_Port 3306
Connect_Retry 7
Master_Log_File
-Read_Master_Log_Pos 4
+Read_Master_Log_Pos #
Relay_Log_File #
Relay_Log_Pos #
Relay_Master_Log_File
@@ -27,7 +27,7 @@ Replicate_Wild_Ignore_Table
Last_Errno 0
Last_Error
Skip_Counter 0
-Exec_Master_Log_Pos 0
+Exec_Master_Log_Pos #
Relay_Log_Space #
Until_Condition None
Until_Log_File
@@ -53,7 +53,7 @@ Master_User root
Master_Port MASTER_PORT
Connect_Retry 7
Master_Log_File
-Read_Master_Log_Pos 4
+Read_Master_Log_Pos #
Relay_Log_File #
Relay_Log_Pos #
Relay_Master_Log_File
@@ -68,7 +68,7 @@ Replicate_Wild_Ignore_Table
Last_Errno 0
Last_Error
Skip_Counter 0
-Exec_Master_Log_Pos 0
+Exec_Master_Log_Pos #
Relay_Log_Space #
Until_Condition None
Until_Log_File
@@ -93,7 +93,7 @@ Master_User root
Master_Port MASTER_PORT
Connect_Retry 7
Master_Log_File master-bin.000001
-Read_Master_Log_Pos 106
+Read_Master_Log_Pos #
Relay_Log_File #
Relay_Log_Pos #
Relay_Master_Log_File master-bin.000001
@@ -108,7 +108,7 @@ Replicate_Wild_Ignore_Table
Last_Errno 0
Last_Error
Skip_Counter 0
-Exec_Master_Log_Pos 106
+Exec_Master_Log_Pos #
Relay_Log_Space #
Until_Condition None
Until_Log_File
diff --git a/mysql-test/suite/rpl/r/rpl_binlog_grant.result b/mysql-test/suite/rpl/r/rpl_binlog_grant.result
index 43a21913cf6..72dc58effa1 100644
--- a/mysql-test/suite/rpl/r/rpl_binlog_grant.result
+++ b/mysql-test/suite/rpl/r/rpl_binlog_grant.result
@@ -1,3 +1,9 @@
+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 database if exists d1;
create database d1;
use d1;
diff --git a/mysql-test/suite/rpl/r/rpl_bug31076.result b/mysql-test/suite/rpl/r/rpl_bug31076.result
index fb819b03ad3..fd66ca85d57 100644
--- a/mysql-test/suite/rpl/r/rpl_bug31076.result
+++ b/mysql-test/suite/rpl/r/rpl_bug31076.result
@@ -40,6 +40,10 @@ KEY `data` (`data`)
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
BINLOG '
+O1ZVRw8BAAAAZgAAAGoAAAAAAAQANS4xLjIzLXJjLWRlYnVnLWxvZwAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAA7VlVHEzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC
+'/*!*/;
+BINLOG '
Bk3vRhO0AQAAOAAAALcLyQkAAJlXFwIAAAAABXRyYWNrAA12aXNpdHNfZXZlbnRzAAYJAwcPDwM=
Bk3vRhe0AQAAWgAAABEMyQkQAJlXFwIAAAEABv/AIE4AvvVDAQZN70YAK0Rvd25sb2Fkcy9NeVNR
TC00LjEvbXlzcWwtNC4xLjEyYS13aW4zMi56aXBPaAIC
diff --git a/mysql-test/suite/rpl/r/rpl_change_master.result b/mysql-test/suite/rpl/r/rpl_change_master.result
index 7707ca2cf9b..c06c1201e3d 100644
--- a/mysql-test/suite/rpl/r/rpl_change_master.result
+++ b/mysql-test/suite/rpl/r/rpl_change_master.result
@@ -33,7 +33,7 @@ Replicate_Wild_Ignore_Table
Last_Errno 0
Last_Error
Skip_Counter 0
-Exec_Master_Log_Pos 191
+Exec_Master_Log_Pos #
Relay_Log_Space #
Until_Condition None
Until_Log_File
@@ -73,7 +73,7 @@ Replicate_Wild_Ignore_Table
Last_Errno 0
Last_Error
Skip_Counter 0
-Exec_Master_Log_Pos 191
+Exec_Master_Log_Pos #
Relay_Log_Space #
Until_Condition None
Until_Log_File
diff --git a/mysql-test/suite/rpl/r/rpl_create_database.result b/mysql-test/suite/rpl/r/rpl_create_database.result
index 0cfd44bc58c..9780b65f334 100644
--- a/mysql-test/suite/rpl/r/rpl_create_database.result
+++ b/mysql-test/suite/rpl/r/rpl_create_database.result
@@ -20,21 +20,17 @@ INSERT INTO t2 VALUES(2);
ALTER DATABASE mysqltest_sisyfos CHARACTER SET latin1;
USE mysqltest_sisyfos;
ALTER DATABASE mysqltest_bob CHARACTER SET latin1;
-SHOW DATABASES;
-Database
-information_schema
+SHOW DATABASES LIKE 'mysql%';
+Database (mysql%)
mysql
mysqltest_bob
mysqltest_prometheus
mysqltest_sisyfos
-test
-SHOW DATABASES;
-Database
-information_schema
+SHOW DATABASES LIKE 'mysql%';
+Database (mysql%)
mysql
mysqltest_prometheus
mysqltest_sisyfos
-test
DROP DATABASE IF EXISTS mysqltest_sisyfos;
USE mysqltest_prometheus;
CREATE TABLE t1 (a INT);
@@ -42,21 +38,17 @@ INSERT INTO t1 VALUES (1);
CREATE DATABASE mysqltest_sisyfos;
USE mysqltest_sisyfos;
CREATE TABLE t2 (a INT);
-SHOW DATABASES;
-Database
-information_schema
+SHOW DATABASES LIKE 'mysql%';
+Database (mysql%)
mysql
mysqltest_bob
mysqltest_prometheus
mysqltest_sisyfos
-test
-SHOW DATABASES;
-Database
-information_schema
+SHOW DATABASES LIKE 'mysql%';
+Database (mysql%)
mysql
mysqltest_prometheus
mysqltest_sisyfos
-test
USE mysqltest_prometheus;
SHOW TABLES;
Tables_in_mysqltest_prometheus
diff --git a/mysql-test/suite/rpl/r/rpl_drop_view.result b/mysql-test/suite/rpl/r/rpl_drop_view.result
new file mode 100644
index 00000000000..ef625464881
--- /dev/null
+++ b/mysql-test/suite/rpl/r/rpl_drop_view.result
@@ -0,0 +1,27 @@
+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, t2;
+drop view if exists v1, v2, v3, not_exist_view;
+create table t1 (a int);
+create table t2 (b int);
+create table t3 (c int);
+create view v1 as select * from t1;
+create view v2 as select * from t2;
+create view v3 as select * from t3;
+drop view not_exist_view;
+ERROR 42S02: Unknown table 'not_exist_view'
+drop view v1, not_exist_view;
+ERROR 42S02: Unknown table 'not_exist_view'
+select * from v1;
+ERROR 42S02: Table 'test.v1' doesn't exist
+drop view v2, v3;
+select * from v1;
+ERROR 42S02: Table 'test.v1' doesn't exist
+select * from v2;
+ERROR 42S02: Table 'test.v2' doesn't exist
+select * from v3;
+ERROR 42S02: Table 'test.v3' doesn't exist
diff --git a/mysql-test/suite/rpl/r/rpl_extraCol_innodb.result b/mysql-test/suite/rpl/r/rpl_extraCol_innodb.result
index fe5a5b28682..e268e4c2e51 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 1534
+Last_Errno 1535
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 #
@@ -90,7 +90,7 @@ Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno #
Last_IO_Error #
-Last_SQL_Errno 1534
+Last_SQL_Errno 1535
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;
@@ -139,7 +139,7 @@ Replicate_Do_Table
Replicate_Ignore_Table #
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
-Last_Errno 1534
+Last_Errno 1535
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 #
@@ -157,7 +157,7 @@ Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno #
Last_IO_Error #
-Last_SQL_Errno 1534
+Last_SQL_Errno 1535
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;
@@ -201,7 +201,7 @@ Replicate_Do_Table
Replicate_Ignore_Table #
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
-Last_Errno 1534
+Last_Errno 1535
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 #
@@ -219,7 +219,7 @@ Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno #
Last_IO_Error #
-Last_SQL_Errno 1534
+Last_SQL_Errno 1535
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;
@@ -263,7 +263,7 @@ Replicate_Do_Table
Replicate_Ignore_Table #
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
-Last_Errno 1534
+Last_Errno 1535
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 #
@@ -281,7 +281,7 @@ Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno #
Last_IO_Error #
-Last_SQL_Errno 1534
+Last_SQL_Errno 1535
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;
@@ -324,7 +324,7 @@ Replicate_Do_Table
Replicate_Ignore_Table #
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
-Last_Errno 1534
+Last_Errno 1535
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 #
@@ -342,7 +342,7 @@ Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno #
Last_IO_Error #
-Last_SQL_Errno 1534
+Last_SQL_Errno 1535
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 ***
@@ -436,7 +436,7 @@ Replicate_Do_Table
Replicate_Ignore_Table #
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
-Last_Errno 1534
+Last_Errno 1535
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 #
@@ -454,7 +454,7 @@ Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno #
Last_IO_Error #
-Last_SQL_Errno 1534
+Last_SQL_Errno 1535
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;
@@ -497,7 +497,7 @@ Replicate_Do_Table
Replicate_Ignore_Table #
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
-Last_Errno 1534
+Last_Errno 1535
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 #
@@ -515,7 +515,7 @@ Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno #
Last_IO_Error #
-Last_SQL_Errno 1534
+Last_SQL_Errno 1535
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;
@@ -615,6 +615,66 @@ c1 c2 c3 c4 c5 c6 c7
1 1.00 Replication Testing Extra Col b1b1b1b1b1b1b1b1 Kyle 1 CURRENT_TIMESTAMP
2 2.00 This Test Should work b1b1b1b1b1b1b1b1 JOE 1 CURRENT_TIMESTAMP
3 3.00 If is does not, I will open a bug b1b1b1b1b1b1b1b1 QA 1 CURRENT_TIMESTAMP
+*** Create t14a on slave ***
+STOP SLAVE;
+RESET SLAVE;
+CREATE TABLE t14a (c1 INT KEY, c4 BLOB, c5 CHAR(5),
+c6 INT DEFAULT '1',
+c7 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
+)ENGINE='InnoDB';
+*** Create t14a on Master ***
+CREATE TABLE t14a (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
+) ENGINE='InnoDB';
+RESET MASTER;
+*** Start Slave ***
+START SLAVE;
+*** Master Data Insert ***
+set @b1 = 'b1b1b1b1';
+set @b1 = concat(@b1,@b1);
+INSERT INTO t14a () VALUES(1,@b1,'Kyle'),
+(2,@b1,'JOE'),
+(3,@b1,'QA');
+SELECT * FROM t14a ORDER BY c1;
+c1 c4 c5
+1 b1b1b1b1b1b1b1b1 Kyle
+2 b1b1b1b1b1b1b1b1 JOE
+3 b1b1b1b1b1b1b1b1 QA
+*** Select on Slave ****
+SELECT * FROM t14a ORDER BY c1;
+c1 c4 c5 c6 c7
+1 b1b1b1b1b1b1b1b1 Kyle 1 CURRENT_TIMESTAMP
+2 b1b1b1b1b1b1b1b1 JOE 1 CURRENT_TIMESTAMP
+3 b1b1b1b1b1b1b1b1 QA 1 CURRENT_TIMESTAMP
+STOP SLAVE;
+RESET SLAVE;
+*** Master Drop c5 ***
+ALTER TABLE t14a DROP COLUMN c5;
+RESET MASTER;
+*** Start Slave ***
+START SLAVE;
+*** Master Data Insert ***
+set @b1 = 'b1b1b1b1';
+set @b1 = concat(@b1,@b1);
+INSERT INTO t14a () VALUES(4,@b1),
+(5,@b1),
+(6,@b1);
+SELECT * FROM t14a ORDER BY c1;
+c1 c4
+1 b1b1b1b1b1b1b1b1
+2 b1b1b1b1b1b1b1b1
+3 b1b1b1b1b1b1b1b1
+4 b1b1b1b1b1b1b1b1
+5 b1b1b1b1b1b1b1b1
+6 b1b1b1b1b1b1b1b1
+*** Select on Slave ****
+SELECT * FROM t14a ORDER BY c1;
+c1 c4 c5 c6 c7
+1 b1b1b1b1b1b1b1b1 Kyle 1 CURRENT_TIMESTAMP
+2 b1b1b1b1b1b1b1b1 JOE 1 CURRENT_TIMESTAMP
+3 b1b1b1b1b1b1b1b1 QA 1 CURRENT_TIMESTAMP
+4 b1b1b1b1b1b1b1b1 NULL 1 CURRENT_TIMESTAMP
+5 b1b1b1b1b1b1b1b1 NULL 1 CURRENT_TIMESTAMP
+6 b1b1b1b1b1b1b1b1 NULL 1 CURRENT_TIMESTAMP
*** connect to master and drop columns ***
ALTER TABLE t14 DROP COLUMN c2;
ALTER TABLE t14 DROP COLUMN c4;
@@ -707,7 +767,7 @@ 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;
+SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
START SLAVE;
*** Try to insert in master ****
INSERT INTO t15 () VALUES(5,2.00,'Replication Testing',@b1,'Buda',2);
@@ -723,6 +783,7 @@ c1 c2 c3 c4 c5 c6 c7
1 1.00 Replication Testing Extra Col b1b1b1b1b1b1b1b1 Kyle 1 CURRENT_TIMESTAMP
2 2.00 This Test Should work b1b1b1b1b1b1b1b1 JOE 1 CURRENT_TIMESTAMP
3 3.00 If is does not, I will open a bug b1b1b1b1b1b1b1b1 QA 1 CURRENT_TIMESTAMP
+5 2.00 Replication Testing b1b1b1b1b1b1b1b1 Buda 2 CURRENT_TIMESTAMP
*** DROP TABLE t15 ***
DROP TABLE t15;
*** Create t16 on slave ***
@@ -822,7 +883,7 @@ Replicate_Do_Table
Replicate_Ignore_Table #
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
-Last_Errno 1534
+Last_Errno 1535
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 #
@@ -840,7 +901,7 @@ Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno #
Last_IO_Error #
-Last_SQL_Errno 1534
+Last_SQL_Errno 1535
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 e70a2efaf29..364354d3a17 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 1534
+Last_Errno 1535
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 #
@@ -90,7 +90,7 @@ Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno #
Last_IO_Error #
-Last_SQL_Errno 1534
+Last_SQL_Errno 1535
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;
@@ -139,7 +139,7 @@ Replicate_Do_Table
Replicate_Ignore_Table #
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
-Last_Errno 1534
+Last_Errno 1535
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 #
@@ -157,7 +157,7 @@ Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno #
Last_IO_Error #
-Last_SQL_Errno 1534
+Last_SQL_Errno 1535
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;
@@ -201,7 +201,7 @@ Replicate_Do_Table
Replicate_Ignore_Table #
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
-Last_Errno 1534
+Last_Errno 1535
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 #
@@ -219,7 +219,7 @@ Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno #
Last_IO_Error #
-Last_SQL_Errno 1534
+Last_SQL_Errno 1535
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;
@@ -263,7 +263,7 @@ Replicate_Do_Table
Replicate_Ignore_Table #
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
-Last_Errno 1534
+Last_Errno 1535
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 #
@@ -281,7 +281,7 @@ Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno #
Last_IO_Error #
-Last_SQL_Errno 1534
+Last_SQL_Errno 1535
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;
@@ -324,7 +324,7 @@ Replicate_Do_Table
Replicate_Ignore_Table #
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
-Last_Errno 1534
+Last_Errno 1535
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 #
@@ -342,7 +342,7 @@ Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno #
Last_IO_Error #
-Last_SQL_Errno 1534
+Last_SQL_Errno 1535
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 ***
@@ -436,7 +436,7 @@ Replicate_Do_Table
Replicate_Ignore_Table #
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
-Last_Errno 1534
+Last_Errno 1535
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 #
@@ -454,7 +454,7 @@ Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno #
Last_IO_Error #
-Last_SQL_Errno 1534
+Last_SQL_Errno 1535
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;
@@ -497,7 +497,7 @@ Replicate_Do_Table
Replicate_Ignore_Table #
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
-Last_Errno 1534
+Last_Errno 1535
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 #
@@ -515,7 +515,7 @@ Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno #
Last_IO_Error #
-Last_SQL_Errno 1534
+Last_SQL_Errno 1535
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;
@@ -615,6 +615,66 @@ c1 c2 c3 c4 c5 c6 c7
1 1.00 Replication Testing Extra Col b1b1b1b1b1b1b1b1 Kyle 1 CURRENT_TIMESTAMP
2 2.00 This Test Should work b1b1b1b1b1b1b1b1 JOE 1 CURRENT_TIMESTAMP
3 3.00 If is does not, I will open a bug b1b1b1b1b1b1b1b1 QA 1 CURRENT_TIMESTAMP
+*** Create t14a on slave ***
+STOP SLAVE;
+RESET SLAVE;
+CREATE TABLE t14a (c1 INT KEY, c4 BLOB, c5 CHAR(5),
+c6 INT DEFAULT '1',
+c7 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
+)ENGINE='MyISAM';
+*** Create t14a on Master ***
+CREATE TABLE t14a (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
+) ENGINE='MyISAM';
+RESET MASTER;
+*** Start Slave ***
+START SLAVE;
+*** Master Data Insert ***
+set @b1 = 'b1b1b1b1';
+set @b1 = concat(@b1,@b1);
+INSERT INTO t14a () VALUES(1,@b1,'Kyle'),
+(2,@b1,'JOE'),
+(3,@b1,'QA');
+SELECT * FROM t14a ORDER BY c1;
+c1 c4 c5
+1 b1b1b1b1b1b1b1b1 Kyle
+2 b1b1b1b1b1b1b1b1 JOE
+3 b1b1b1b1b1b1b1b1 QA
+*** Select on Slave ****
+SELECT * FROM t14a ORDER BY c1;
+c1 c4 c5 c6 c7
+1 b1b1b1b1b1b1b1b1 Kyle 1 CURRENT_TIMESTAMP
+2 b1b1b1b1b1b1b1b1 JOE 1 CURRENT_TIMESTAMP
+3 b1b1b1b1b1b1b1b1 QA 1 CURRENT_TIMESTAMP
+STOP SLAVE;
+RESET SLAVE;
+*** Master Drop c5 ***
+ALTER TABLE t14a DROP COLUMN c5;
+RESET MASTER;
+*** Start Slave ***
+START SLAVE;
+*** Master Data Insert ***
+set @b1 = 'b1b1b1b1';
+set @b1 = concat(@b1,@b1);
+INSERT INTO t14a () VALUES(4,@b1),
+(5,@b1),
+(6,@b1);
+SELECT * FROM t14a ORDER BY c1;
+c1 c4
+1 b1b1b1b1b1b1b1b1
+2 b1b1b1b1b1b1b1b1
+3 b1b1b1b1b1b1b1b1
+4 b1b1b1b1b1b1b1b1
+5 b1b1b1b1b1b1b1b1
+6 b1b1b1b1b1b1b1b1
+*** Select on Slave ****
+SELECT * FROM t14a ORDER BY c1;
+c1 c4 c5 c6 c7
+1 b1b1b1b1b1b1b1b1 Kyle 1 CURRENT_TIMESTAMP
+2 b1b1b1b1b1b1b1b1 JOE 1 CURRENT_TIMESTAMP
+3 b1b1b1b1b1b1b1b1 QA 1 CURRENT_TIMESTAMP
+4 b1b1b1b1b1b1b1b1 NULL 1 CURRENT_TIMESTAMP
+5 b1b1b1b1b1b1b1b1 NULL 1 CURRENT_TIMESTAMP
+6 b1b1b1b1b1b1b1b1 NULL 1 CURRENT_TIMESTAMP
*** connect to master and drop columns ***
ALTER TABLE t14 DROP COLUMN c2;
ALTER TABLE t14 DROP COLUMN c4;
@@ -707,7 +767,7 @@ 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;
+SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
START SLAVE;
*** Try to insert in master ****
INSERT INTO t15 () VALUES(5,2.00,'Replication Testing',@b1,'Buda',2);
@@ -723,6 +783,7 @@ c1 c2 c3 c4 c5 c6 c7
1 1.00 Replication Testing Extra Col b1b1b1b1b1b1b1b1 Kyle 1 CURRENT_TIMESTAMP
2 2.00 This Test Should work b1b1b1b1b1b1b1b1 JOE 1 CURRENT_TIMESTAMP
3 3.00 If is does not, I will open a bug b1b1b1b1b1b1b1b1 QA 1 CURRENT_TIMESTAMP
+5 2.00 Replication Testing b1b1b1b1b1b1b1b1 Buda 2 CURRENT_TIMESTAMP
*** DROP TABLE t15 ***
DROP TABLE t15;
*** Create t16 on slave ***
@@ -822,7 +883,7 @@ Replicate_Do_Table
Replicate_Ignore_Table #
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
-Last_Errno 1534
+Last_Errno 1535
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 #
@@ -840,7 +901,7 @@ Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno #
Last_IO_Error #
-Last_SQL_Errno 1534
+Last_SQL_Errno 1535
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_extraColmaster_innodb.result b/mysql-test/suite/rpl/r/rpl_extraColmaster_innodb.result
index 18906617925..86648ba12c3 100644
--- a/mysql-test/suite/rpl/r/rpl_extraColmaster_innodb.result
+++ b/mysql-test/suite/rpl/r/rpl_extraColmaster_innodb.result
Binary files differ
diff --git a/mysql-test/suite/rpl/r/rpl_extraColmaster_myisam.result b/mysql-test/suite/rpl/r/rpl_extraColmaster_myisam.result
index 5bc1a13b107..96d4ca237d1 100644
--- a/mysql-test/suite/rpl/r/rpl_extraColmaster_myisam.result
+++ b/mysql-test/suite/rpl/r/rpl_extraColmaster_myisam.result
Binary files differ
diff --git a/mysql-test/suite/rpl/r/rpl_flushlog_loop.result b/mysql-test/suite/rpl/r/rpl_flushlog_loop.result
index b47c262eb66..ca06a5a328c 100644
--- a/mysql-test/suite/rpl/r/rpl_flushlog_loop.result
+++ b/mysql-test/suite/rpl/r/rpl_flushlog_loop.result
@@ -4,6 +4,13 @@ reset master;
reset slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
start slave;
+show variables like 'relay_log%';
+Variable_name Value
+relay_log MYSQLTEST_VARDIR/master-data/relay-log
+relay_log_index
+relay_log_info_file relay-log.info
+relay_log_purge ON
+relay_log_space_limit 0
stop slave;
change master to master_host='127.0.0.1',master_user='root',
master_password='',master_port=MASTER_PORT;
diff --git a/mysql-test/suite/rpl/r/rpl_foreign_key_innodb.result b/mysql-test/suite/rpl/r/rpl_foreign_key_innodb.result
index 2239c32eea3..e7a912b75fa 100644
--- a/mysql-test/suite/rpl/r/rpl_foreign_key_innodb.result
+++ b/mysql-test/suite/rpl/r/rpl_foreign_key_innodb.result
@@ -40,3 +40,16 @@ Got one of the listed errors
SET FOREIGN_KEY_CHECKS=0;
DROP TABLE IF EXISTS t1,t2,t3;
SET FOREIGN_KEY_CHECKS=1;
+create table t1 (b int primary key) engine = INNODB;
+create table t2 (a int primary key, b int, foreign key (b) references t1(b))
+engine = INNODB;
+insert into t1 set b=1;
+insert into t2 set a=1, b=1;
+set foreign_key_checks=0;
+set @@session.binlog_format=row;
+delete from t1;
+must sync w/o a problem (could not with the buggy code)
+select count(*) from t1 /* must be zero */;
+count(*)
+0
+drop table t2,t1;
diff --git a/mysql-test/suite/rpl/r/rpl_found_rows.result b/mysql-test/suite/rpl/r/rpl_found_rows.result
new file mode 100644
index 00000000000..7e757a1d141
--- /dev/null
+++ b/mysql-test/suite/rpl/r/rpl_found_rows.result
@@ -0,0 +1,233 @@
+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;
+==== 0. Setting it all up ====
+SET BINLOG_FORMAT=STATEMENT;
+**** On Master ****
+CREATE TABLE t1 (a INT);
+CREATE TABLE logtbl (sect INT, test INT, count INT);
+INSERT INTO t1 VALUES (1),(2),(3);
+INSERT INTO t1 SELECT 2*a+3 FROM t1;
+INSERT INTO t1 SELECT 2*a+3 FROM t1;
+INSERT INTO t1 SELECT 2*a+3 FROM t1;
+INSERT INTO t1 SELECT 2*a+3 FROM t1;
+INSERT INTO t1 SELECT 2*a+3 FROM t1;
+INSERT INTO t1 SELECT 2*a+3 FROM t1;
+#### 1. Using statement mode ####
+==== 1.1. Simple test ====
+SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a > 5 ORDER BY a LIMIT 1;
+a
+7
+SELECT FOUND_ROWS() INTO @a;
+INSERT INTO logtbl VALUES(1,1,@a);
+SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a < 5 ORDER BY a LIMIT 1;
+a
+1
+SELECT FOUND_ROWS() INTO @a;
+INSERT INTO logtbl VALUES(1,2,@a);
+SELECT * FROM logtbl WHERE sect = 1 ORDER BY sect,test;
+sect test count
+1 1 183
+1 2 3
+**** On Slave ****
+SELECT * FROM logtbl WHERE sect = 1 ORDER BY sect,test;
+sect test count
+1 1 183
+1 2 3
+==== 1.2. Stored procedure ====
+**** On Master ****
+CREATE PROCEDURE calc_and_log(sect INT, test INT) BEGIN
+DECLARE cnt INT;
+SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a < 5 ORDER BY a LIMIT 1;
+SELECT FOUND_ROWS() INTO cnt;
+INSERT INTO logtbl VALUES(sect,test,cnt);
+SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a > 5 ORDER BY a LIMIT 1;
+SELECT FOUND_ROWS() INTO cnt;
+INSERT INTO logtbl VALUES(sect,test+1,cnt);
+END $$
+CALL calc_and_log(2,1);
+a
+1
+a
+7
+CREATE PROCEDURE just_log(sect INT, test INT, found_rows INT) BEGIN
+INSERT INTO logtbl VALUES (sect,test,found_rows);
+END $$
+SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a > 5 ORDER BY a LIMIT 1;
+a
+7
+SELECT FOUND_ROWS() INTO @found_rows;
+CALL just_log(2,3,@found_rows);
+SELECT * FROM logtbl WHERE sect = 2 ORDER BY sect,test;
+sect test count
+2 1 3
+2 2 183
+2 3 183
+**** On Slave ****
+SELECT * FROM logtbl WHERE sect = 2 ORDER BY sect,test;
+sect test count
+2 1 3
+2 2 183
+2 3 183
+==== 1.3. Stored functions ====
+**** On Master ****
+CREATE FUNCTION log_rows(sect INT, test INT, found_rows INT)
+RETURNS INT
+BEGIN
+INSERT INTO logtbl VALUES(sect,test,found_rows);
+RETURN found_rows;
+END $$
+SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a > 5 ORDER BY a LIMIT 1;
+a
+7
+SELECT FOUND_ROWS() INTO @found_rows;
+SELECT log_rows(3,1,@found_rows), log_rows(3,2,@found_rows);
+log_rows(3,1,@found_rows) log_rows(3,2,@found_rows)
+183 183
+SELECT * FROM logtbl WHERE sect = 3 ORDER BY sect,test;
+sect test count
+3 1 183
+3 2 183
+**** On Slave ****
+SELECT * FROM logtbl WHERE sect = 3 ORDER BY sect,test;
+sect test count
+3 1 183
+3 2 183
+==== 1.9. Cleanup ====
+**** On Master ****
+DELETE FROM logtbl;
+DROP PROCEDURE just_log;
+DROP PROCEDURE calc_and_log;
+DROP FUNCTION log_rows;
+**** Resetting master and slave ****
+STOP SLAVE;
+RESET SLAVE;
+RESET MASTER;
+START SLAVE;
+#### 2. Using mixed mode ####
+==== 2.1. Checking a procedure ====
+**** On Master ****
+SET BINLOG_FORMAT=MIXED;
+CREATE PROCEDURE just_log(sect INT, test INT) BEGIN
+INSERT INTO logtbl VALUES (sect,test,FOUND_ROWS());
+END $$
+**** On Master 1 ****
+SET BINLOG_FORMAT=MIXED;
+SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a > 5 ORDER BY a LIMIT 1;
+a
+7
+CALL just_log(1,1);
+**** On Master ****
+SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a > 5 ORDER BY a LIMIT 1;
+a
+7
+CALL just_log(1,2);
+**** On Master 1 ****
+SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a < 5 ORDER BY a LIMIT 1;
+a
+1
+CALL just_log(1,3);
+**** On Master ****
+SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a > 5 ORDER BY a LIMIT 1;
+a
+7
+CALL just_log(1,4);
+SELECT * FROM logtbl WHERE sect = 1 ORDER BY sect,test;
+sect test count
+1 1 183
+1 2 183
+1 3 3
+1 4 183
+**** On Slave ****
+SELECT * FROM logtbl WHERE sect = 1 ORDER BY sect,test;
+sect test count
+1 1 183
+1 2 183
+1 3 3
+1 4 183
+==== 2.1. Checking a stored function ====
+**** On Master ****
+CREATE FUNCTION log_rows(sect INT, test INT)
+RETURNS INT
+BEGIN
+DECLARE found_rows INT;
+SELECT FOUND_ROWS() INTO found_rows;
+INSERT INTO logtbl VALUES(sect,test,found_rows);
+RETURN found_rows;
+END $$
+SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a < 5 ORDER BY a LIMIT 1;
+a
+1
+SELECT log_rows(2,1), log_rows(2,2);
+log_rows(2,1) log_rows(2,2)
+3 3
+CREATE TABLE t2 (a INT, b INT);
+CREATE TRIGGER t2_tr BEFORE INSERT ON t2 FOR EACH ROW
+BEGIN
+INSERT INTO logtbl VALUES (NEW.a, NEW.b, FOUND_ROWS());
+END $$
+SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a < 5 ORDER BY a LIMIT 1;
+a
+1
+INSERT INTO t2 VALUES (2,3), (2,4);
+DROP TRIGGER t2_tr;
+CREATE TRIGGER t2_tr BEFORE INSERT ON t2 FOR EACH ROW
+BEGIN
+DECLARE dummy INT;
+SELECT log_rows(NEW.a, NEW.b) INTO dummy;
+END $$
+SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a > 5 ORDER BY a LIMIT 1;
+a
+7
+INSERT INTO t2 VALUES (2,5), (2,6);
+DROP TRIGGER t2_tr;
+CREATE PROCEDURE log_me_inner(sect INT, test INT)
+BEGIN
+DECLARE dummy INT;
+SELECT log_rows(sect, test) INTO dummy;
+SELECT log_rows(sect, test+1) INTO dummy;
+END $$
+CREATE PROCEDURE log_me(sect INT, test INT)
+BEGIN
+CALL log_me_inner(sect,test);
+END $$
+CREATE TRIGGER t2_tr BEFORE INSERT ON t2 FOR EACH ROW
+BEGIN
+CALL log_me(NEW.a, NEW.b);
+END $$
+SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a > 5 ORDER BY a LIMIT 1;
+a
+7
+INSERT INTO t2 VALUES (2,5), (2,6);
+SELECT * FROM logtbl WHERE sect = 2 ORDER BY sect,test;
+sect test count
+2 1 3
+2 2 3
+2 3 3
+2 4 3
+2 5 183
+2 5 183
+2 6 183
+2 6 0
+2 6 183
+2 7 0
+SELECT * FROM logtbl WHERE sect = 2 ORDER BY sect,test;
+sect test count
+2 1 3
+2 2 3
+2 3 3
+2 4 3
+2 5 183
+2 5 183
+2 6 183
+2 6 0
+2 6 183
+2 7 0
+DROP TABLE t1, logtbl;
+DROP PROCEDURE just_log;
+DROP PROCEDURE log_me;
+DROP PROCEDURE log_me_inner;
+DROP FUNCTION log_rows;
diff --git a/mysql-test/suite/rpl/r/rpl_grant.result b/mysql-test/suite/rpl/r/rpl_grant.result
index 935d1ca67c7..1bed6101e3c 100644
--- a/mysql-test/suite/rpl/r/rpl_grant.result
+++ b/mysql-test/suite/rpl/r/rpl_grant.result
@@ -7,40 +7,40 @@ start slave;
**** On Master ****
CREATE USER dummy@localhost;
CREATE USER dummy1@localhost, dummy2@localhost;
-SELECT user, host FROM mysql.user WHERE user != 'root';
+SELECT user, host FROM mysql.user WHERE user like 'dummy%';
user host
dummy localhost
dummy1 localhost
dummy2 localhost
-SELECT COUNT(*) FROM mysql.user;
+SELECT COUNT(*) FROM mysql.user WHERE user like 'dummy%';
COUNT(*)
-6
+3
**** On Slave ****
-SELECT user,host FROM mysql.user WHERE user != 'root';
+SELECT user,host FROM mysql.user WHERE user like 'dummy%';
user host
dummy localhost
dummy1 localhost
dummy2 localhost
-SELECT COUNT(*) FROM mysql.user;
+SELECT COUNT(*) FROM mysql.user WHERE user like 'dummy%';
COUNT(*)
-6
+3
**** On Master ****
DROP USER nonexisting@localhost;
ERROR HY000: Operation DROP USER failed for 'nonexisting'@'localhost'
DROP USER nonexisting@localhost, dummy@localhost;
ERROR HY000: Operation DROP USER failed for 'nonexisting'@'localhost'
DROP USER dummy1@localhost, dummy2@localhost;
-SELECT user, host FROM mysql.user WHERE user != 'root';
+SELECT user, host FROM mysql.user WHERE user like 'dummy%';
user host
-SELECT COUNT(*) FROM mysql.user;
+SELECT COUNT(*) FROM mysql.user WHERE user like 'dummy%';
COUNT(*)
-3
+0
**** On Slave ****
-SELECT user,host FROM mysql.user WHERE user != 'root';
+SELECT user,host FROM mysql.user WHERE user like 'dummy%';
user host
-SELECT COUNT(*) FROM mysql.user;
+SELECT COUNT(*) FROM mysql.user WHERE user like 'dummy%';
COUNT(*)
-3
+0
SHOW SLAVE STATUS;
Slave_IO_State #
Master_Host 127.0.0.1
@@ -48,7 +48,7 @@ Master_User root
Master_Port MASTER_PORT
Connect_Retry 1
Master_Log_File master-bin.000001
-Read_Master_Log_Pos 617
+Read_Master_Log_Pos #
Relay_Log_File #
Relay_Log_Pos #
Relay_Master_Log_File master-bin.000001
@@ -57,13 +57,13 @@ Slave_SQL_Running Yes
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 0
Last_Error
Skip_Counter 0
-Exec_Master_Log_Pos 617
+Exec_Master_Log_Pos #
Relay_Log_Space #
Until_Condition None
Until_Log_File
@@ -76,7 +76,7 @@ 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 0
Last_SQL_Error
diff --git a/mysql-test/suite/rpl/r/rpl_idempotency.result b/mysql-test/suite/rpl/r/rpl_idempotency.result
new file mode 100644
index 00000000000..5a4052864ad
--- /dev/null
+++ b/mysql-test/suite/rpl/r/rpl_idempotency.result
@@ -0,0 +1,226 @@
+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;
+CREATE TABLE t1 (a INT PRIMARY KEY);
+CREATE TABLE t2 (a INT);
+INSERT INTO t1 VALUES (-1),(-2),(-3);
+INSERT INTO t2 VALUES (-1),(-2),(-3);
+DELETE FROM t1 WHERE a = -2;
+DELETE FROM t2 WHERE a = -2;
+DELETE FROM t1 WHERE a = -2;
+DELETE FROM t2 WHERE a = -2;
+SELECT * FROM t1 ORDER BY a;
+a
+-3
+-1
+SELECT * FROM t2 ORDER BY a;
+a
+-3
+-1
+SELECT * FROM t1 ORDER BY a;
+a
+-3
+-1
+SELECT * FROM t2 ORDER BY a;
+a
+-3
+-1
+Last_SQL_Error
+0
+INSERT IGNORE INTO t1 VALUES (-2);
+INSERT IGNORE INTO t1 VALUES (-2);
+SELECT * FROM t1 ORDER BY a;
+a
+-3
+-2
+-1
+SELECT * FROM t1 ORDER BY a;
+a
+-3
+-2
+-1
+Last_SQL_Error
+0
+UPDATE t1 SET a = 1 WHERE a = -1;
+UPDATE t2 SET a = 1 WHERE a = -1;
+UPDATE t1 SET a = 1 WHERE a = -1;
+UPDATE t2 SET a = 1 WHERE a = -1;
+SELECT * FROM t1 ORDER BY a;
+a
+-3
+-2
+1
+SELECT * FROM t2 ORDER BY a;
+a
+-3
+1
+SELECT * FROM t1 ORDER BY a;
+a
+-3
+-2
+1
+SELECT * FROM t2 ORDER BY a;
+a
+-3
+1
+Last_SQL_Error
+0
+DROP TABLE t1, t2;
+select @@global.slave_exec_mode /* must be IDEMPOTENT */;
+@@global.slave_exec_mode
+IDEMPOTENT
+create table ti1 (b int primary key) engine = innodb;
+create table ti2 (a int primary key, b int, foreign key (b) references ti1(b))
+engine = innodb;
+set foreign_key_checks=1 /* ensure the check */;
+insert into ti1 values (1),(2),(3);
+insert into ti2 set a=2, b=2;
+select * from ti1 order by b /* must be (1),(2),(3) */;
+b
+1
+2
+3
+insert into ti2 set a=1, b=1;
+select * from ti2 order by b /* must be (1,1) (2,2) */;
+a b
+1 1
+2 2
+set @save_binlog_format= @@session.binlog_format;
+set @@session.binlog_format= row;
+delete from ti1 where b=1;
+select * from ti1 order by b /* must be (2),(3) */;
+b
+2
+3
+select * from ti1 order by b /* must stays as were on master (1),(2),(3) */;
+b
+1
+2
+3
+delete from ti1 where b=3;
+insert into ti2 set a=3, b=3;
+select * from ti2 order by b /* must be (1,1),(2,2) - not inserted */;
+a b
+1 1
+2 2
+set global slave_exec_mode='IDEMPOTENT';
+set global slave_exec_mode='STRICT';
+set global slave_exec_mode='IDEMPOTENT,STRICT';
+ERROR HY000: Ambiguous slave modes combination.
+select @@global.slave_exec_mode /* must be STRICT */;
+@@global.slave_exec_mode
+STRICT
+*** foreign keys errors as above now forces to stop
+set foreign_key_checks=0;
+drop table ti2, ti1;
+create table ti1 (b int primary key) engine = innodb;
+create table ti2 (a int primary key, b int, foreign key (b) references ti1(b))
+engine = innodb;
+set foreign_key_checks=1 /* ensure the check */;
+insert into ti1 values (1),(2),(3);
+insert into ti2 set a=2, b=2;
+select * from ti1 order by b /* must be (1),(2),(3) */;
+b
+1
+2
+3
+*** conspire future problem
+insert into ti2 set a=1, b=1;
+select * from ti2 order by b /* must be (1,1) (2,2) */;
+a b
+1 1
+2 2
+delete from ti1 where b=1 /* offending delete event */;
+select * from ti1 order by b /* must be (2),(3) */;
+b
+2
+3
+*** slave must stop
+Last_SQL_Error
+0
+select * from ti1 order by b /* must be (1),(2),(3) - not deleted */;
+b
+1
+2
+3
+set foreign_key_checks= 0;
+delete from ti2 where b=1;
+set foreign_key_checks= 1;
+set global slave_exec_mode='IDEMPOTENT';
+start slave sql_thread;
+set global slave_exec_mode='STRICT';
+*** conspire the following insert failure
+*** conspire future problem
+delete from ti1 where b=3;
+insert into ti2 set a=3, b=3 /* offending write event */;
+*** slave must stop
+Last_SQL_Error
+1452
+select * from ti2 order by b /* must be (2,2) */;
+a b
+2 2
+set foreign_key_checks= 0;
+insert into ti1 set b=3;
+set foreign_key_checks= 1;
+set global slave_exec_mode='IDEMPOTENT';
+start slave sql_thread;
+set global slave_exec_mode='STRICT';
+select * from ti2 order by b /* must be (2,2),(3,3) */;
+a b
+2 2
+3 3
+*** other errors
+*** conspiring query
+insert into ti1 set b=1;
+insert into ti1 set b=1 /* offending write event */;
+*** slave must stop
+Last_SQL_Error
+1062
+set foreign_key_checks= 0;
+delete from ti1 where b=1;
+set foreign_key_checks= 1;
+set global slave_exec_mode='IDEMPOTENT';
+start slave sql_thread;
+set global slave_exec_mode='STRICT';
+CREATE TABLE t1 (a INT PRIMARY KEY);
+CREATE TABLE t2 (a INT);
+INSERT INTO t1 VALUES (-1),(-2),(-3);
+INSERT INTO t2 VALUES (-1),(-2),(-3);
+DELETE FROM t1 WHERE a = -2;
+DELETE FROM t2 WHERE a = -2;
+DELETE FROM t1 WHERE a = -2;
+*** slave must stop
+Last_SQL_Error
+1032
+set global slave_exec_mode='IDEMPOTENT';
+start slave sql_thread;
+set global slave_exec_mode='STRICT';
+DELETE FROM t2 WHERE a = -2;
+*** slave must stop
+Last_SQL_Error
+0
+set global slave_exec_mode='IDEMPOTENT';
+start slave sql_thread;
+set global slave_exec_mode='STRICT';
+UPDATE t1 SET a = 1 WHERE a = -1;
+UPDATE t2 SET a = 1 WHERE a = -1;
+UPDATE t1 SET a = 1 WHERE a = -1;
+*** slave must stop
+Last_SQL_Error
+1032
+set global slave_exec_mode='IDEMPOTENT';
+start slave sql_thread;
+set global slave_exec_mode='STRICT';
+UPDATE t2 SET a = 1 WHERE a = -1;
+*** slave must stop
+Last_SQL_Error
+0
+set global slave_exec_mode='IDEMPOTENT';
+start slave sql_thread;
+set global slave_exec_mode='STRICT';
+set @@session.binlog_format= @save_binlog_format;
+drop table t1,t2,ti2,ti1;
+*** end of tests
diff --git a/mysql-test/suite/rpl/r/rpl_ignore_table.result b/mysql-test/suite/rpl/r/rpl_ignore_table.result
index e7200b31212..cdc3f5e9579 100644
--- a/mysql-test/suite/rpl/r/rpl_ignore_table.result
+++ b/mysql-test/suite/rpl/r/rpl_ignore_table.result
@@ -115,6 +115,7 @@ GRANT INSERT, INSERT (a), UPDATE (a), REFERENCES (a) ON `test`.`t4` TO 'mysqltes
show grants for mysqltest4@localhost;
Grants for mysqltest4@localhost
GRANT USAGE ON *.* TO 'mysqltest4'@'localhost' IDENTIFIED BY PASSWORD '*196BDEDE2AE4F84CA44C47D54D78478C7E2BD7B7'
+set global slave_exec_mode='IDEMPOTENT';
drop table t1, t4, mysqltest2.t2;
drop database mysqltest2;
delete from mysql.user where user like "mysqltest%";
@@ -132,6 +133,7 @@ INSERT INTO t5 (word) VALUES ('TEST’');
SELECT HEX(word) FROM t5;
HEX(word)
54455354E28099
+set @@global.slave_exec_mode= default;
SELECT HEX(word) FROM t5;
HEX(word)
54455354E28099
diff --git a/mysql-test/suite/rpl/r/rpl_incident.result b/mysql-test/suite/rpl/r/rpl_incident.result
index 568078cc276..c3baabbdbc3 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 1589
+Last_Errno 1590
Last_Error The incident LOST_EVENTS occured on the master. Message: <none>
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 1589
+Last_SQL_Errno 1590
Last_SQL_Error The incident LOST_EVENTS occured on the master. Message: <none>
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
START SLAVE;
diff --git a/mysql-test/suite/rpl/r/rpl_init_slave.result b/mysql-test/suite/rpl/r/rpl_init_slave.result
index 740c918976c..5ff72e57f0e 100644
--- a/mysql-test/suite/rpl/r/rpl_init_slave.result
+++ b/mysql-test/suite/rpl/r/rpl_init_slave.result
@@ -4,6 +4,9 @@ reset master;
reset slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
start slave;
+set global max_connections=151;
+stop slave;
+start slave;
show variables like 'init_slave';
Variable_name Value
init_slave set global max_connections=500
diff --git a/mysql-test/suite/rpl/r/rpl_innodb_bug28430.result b/mysql-test/suite/rpl/r/rpl_innodb_bug28430.result
index fb2782ed9f4..e92f74e27eb 100644
--- a/mysql-test/suite/rpl/r/rpl_innodb_bug28430.result
+++ b/mysql-test/suite/rpl/r/rpl_innodb_bug28430.result
@@ -113,31 +113,31 @@ Create Table CREATE TABLE `byrange_tbl` (
`fkid` mediumint(9) DEFAULT NULL,
`filler` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (id) SUBPARTITION BY HASH (id) SUBPARTITIONS 2 (PARTITION pa1 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION pa2 VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION pa3 VALUES LESS THAN (30) ENGINE = InnoDB, PARTITION pa4 VALUES LESS THAN (40) ENGINE = InnoDB, PARTITION pa5 VALUES LESS THAN (50) ENGINE = InnoDB, PARTITION pa6 VALUES LESS THAN (60) ENGINE = InnoDB, PARTITION pa7 VALUES LESS THAN (70) ENGINE = InnoDB, PARTITION pa8 VALUES LESS THAN (80) ENGINE = InnoDB, PARTITION pa9 VALUES LESS THAN (90) ENGINE = InnoDB, PARTITION pa10 VALUES LESS THAN (100) ENGINE = InnoDB, PARTITION pa11 VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */
-show slave status;
-Slave_IO_State Waiting for master to send event
+) ENGINE=InnoDB AUTO_INCREMENT=1001 DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (id) SUBPARTITION BY HASH (id) SUBPARTITIONS 2 (PARTITION pa1 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION pa2 VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION pa3 VALUES LESS THAN (30) ENGINE = InnoDB, PARTITION pa4 VALUES LESS THAN (40) ENGINE = InnoDB, PARTITION pa5 VALUES LESS THAN (50) ENGINE = InnoDB, PARTITION pa6 VALUES LESS THAN (60) ENGINE = InnoDB, PARTITION pa7 VALUES LESS THAN (70) ENGINE = InnoDB, PARTITION pa8 VALUES LESS THAN (80) ENGINE = InnoDB, PARTITION pa9 VALUES LESS THAN (90) ENGINE = InnoDB, PARTITION pa10 VALUES LESS THAN (100) ENGINE = InnoDB, PARTITION pa11 VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */
+SHOW SLAVE STATUS;
+Slave_IO_State #
Master_Host 127.0.0.1
Master_User root
Master_Port MASTER_PORT
Connect_Retry 1
Master_Log_File master-bin.000001
Read_Master_Log_Pos 945470
-Relay_Log_File slave-relay-bin.000003
-Relay_Log_Pos 945616
+Relay_Log_File #
+Relay_Log_Pos #
Relay_Master_Log_File master-bin.000001
Slave_IO_Running Yes
Slave_SQL_Running Yes
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 0
Last_Error
Skip_Counter 0
Exec_Master_Log_Pos 945470
-Relay_Log_Space 945771
+Relay_Log_Space #
Until_Condition None
Until_Log_File
Until_Log_Pos 0
@@ -149,8 +149,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 0
Last_SQL_Error
SELECT count(*) "Slave norm" FROM test.regular_tbl;
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 19c5299df25..f8220ca25d3 100644
--- a/mysql-test/suite/rpl/r/rpl_innodb_mixed_dml.result
+++ b/mysql-test/suite/rpl/r/rpl_innodb_mixed_dml.result
@@ -41,26 +41,26 @@ DELETE FROM t2 WHERE b <> UUID();
SELECT COUNT(*) FROM t1;
COUNT(*)
1
-SELECT * FROM t1;
+SELECT * FROM t1 ORDER BY a;
a b
2 t1, text 2
SELECT COUNT(*) FROM t2;
COUNT(*)
0
-SELECT * FROM t2;
+SELECT * FROM t2 ORDER BY a;
a b
==========SLAVE===========
USE test_rpl;
SELECT COUNT(*) FROM t1;
COUNT(*)
1
-SELECT * FROM t1;
+SELECT * FROM t1 ORDER BY a;
a b
2 t1, text 2
SELECT COUNT(*) FROM t2;
COUNT(*)
0
-SELECT * FROM t2;
+SELECT * FROM t2 ORDER BY a;
a b
DELETE FROM t1;
DELETE FROM t2;
@@ -76,13 +76,13 @@ DELETE FROM t2 WHERE a = 2;
SELECT COUNT(*) FROM t1;
COUNT(*)
1
-SELECT * FROM t1;
+SELECT * FROM t1 ORDER BY a;
a b
1 t1, text 1
SELECT COUNT(*) FROM t2;
COUNT(*)
1
-SELECT * FROM t2;
+SELECT * FROM t2 ORDER BY a;
a b
1 t2, text 1
==========SLAVE===========
@@ -90,13 +90,13 @@ USE test_rpl;
SELECT COUNT(*) FROM t1;
COUNT(*)
1
-SELECT * FROM t1;
+SELECT * FROM t1 ORDER BY a;
a b
1 t1, text 1
SELECT COUNT(*) FROM t2;
COUNT(*)
1
-SELECT * FROM t2;
+SELECT * FROM t2 ORDER BY a;
a b
1 t2, text 1
DELETE FROM t1;
@@ -104,7 +104,7 @@ DELETE FROM t2;
******************** LOAD DATA INFILE ********************
LOAD DATA INFILE '../tmp/rpl_mixed.dat' INTO TABLE t1 FIELDS TERMINATED BY '|' ;
-SELECT * FROM t1;
+SELECT * FROM t1 ORDER BY a;
a b
10 line A
20 line B
@@ -113,7 +113,7 @@ a b
SELECT COUNT(*) FROM t1;
COUNT(*)
3
-SELECT * FROM t1;
+SELECT * FROM t1 ORDER BY a;
a b
10 line A
20 line B
@@ -121,14 +121,14 @@ a b
SELECT COUNT(*) FROM t2;
COUNT(*)
0
-SELECT * FROM t2;
+SELECT * FROM t2 ORDER BY a;
a b
==========SLAVE===========
USE test_rpl;
SELECT COUNT(*) FROM t1;
COUNT(*)
3
-SELECT * FROM t1;
+SELECT * FROM t1 ORDER BY a;
a b
10 line A
20 line B
@@ -136,7 +136,7 @@ a b
SELECT COUNT(*) FROM t2;
COUNT(*)
0
-SELECT * FROM t2;
+SELECT * FROM t2 ORDER BY a;
a b
DELETE FROM t1;
DELETE FROM t2;
@@ -153,35 +153,35 @@ DELETE FROM t1 WHERE a = 2;
SELECT COUNT(*) FROM t1;
COUNT(*)
2
-SELECT * FROM t1;
+SELECT * FROM t1 ORDER BY a;
a b
1 t1, text 11
3 t1, text 33
SELECT COUNT(*) FROM t2;
COUNT(*)
0
-SELECT * FROM t2;
+SELECT * FROM t2 ORDER BY a;
a b
==========SLAVE===========
USE test_rpl;
SELECT COUNT(*) FROM t1;
COUNT(*)
2
-SELECT * FROM t1;
+SELECT * FROM t1 ORDER BY a;
a b
1 t1, text 11
3 t1, text 33
SELECT COUNT(*) FROM t2;
COUNT(*)
0
-SELECT * FROM t2;
+SELECT * FROM t2 ORDER BY a;
a b
DELETE FROM t1;
DELETE FROM t2;
******************** SELECT ********************
INSERT INTO t1 VALUES(1, 't1, text 1');
-SELECT * FROM t1 WHERE b <> UUID();
+SELECT * FROM t1 WHERE b <> UUID() ORDER BY a;
a b
1 t1, text 1
DELETE FROM t1;
@@ -192,11 +192,11 @@ INSERT INTO t1 VALUES(1, 'CCC');
INSERT INTO t1 VALUES(2, 'DDD');
INSERT INTO t2 VALUES(1, 'DDD');
INSERT INTO t2 VALUES(2, 'CCC');
-SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.a;
+SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.a ORDER BY t1.a,t2.a;
a b a b
1 CCC 1 DDD
2 DDD 2 CCC
-SELECT * FROM t1 INNER JOIN t2 ON t1.b = t2.b;
+SELECT * FROM t1 INNER JOIN t2 ON t1.b = t2.b ORDER BY t1.a,t2.a;
a b a b
1 CCC 2 CCC
2 DDD 1 DDD
@@ -219,50 +219,50 @@ INSERT INTO t1 VALUES(1, 't1, text 1');
SELECT COUNT(*) FROM t1;
COUNT(*)
1
-SELECT * FROM t1;
+SELECT * FROM t1 ORDER BY a;
a b
1 t1, text 1
SELECT COUNT(*) FROM t2;
COUNT(*)
0
-SELECT * FROM t2;
+SELECT * FROM t2 ORDER BY a;
a b
==========SLAVE===========
USE test_rpl;
SELECT COUNT(*) FROM t1;
COUNT(*)
1
-SELECT * FROM t1;
+SELECT * FROM t1 ORDER BY a;
a b
1 t1, text 1
SELECT COUNT(*) FROM t2;
COUNT(*)
0
-SELECT * FROM t2;
+SELECT * FROM t2 ORDER BY a;
a b
TRUNCATE t1;
==========MASTER==========
SELECT COUNT(*) FROM t1;
COUNT(*)
0
-SELECT * FROM t1;
+SELECT * FROM t1 ORDER BY a;
a b
SELECT COUNT(*) FROM t2;
COUNT(*)
0
-SELECT * FROM t2;
+SELECT * FROM t2 ORDER BY a;
a b
==========SLAVE===========
USE test_rpl;
SELECT COUNT(*) FROM t1;
COUNT(*)
0
-SELECT * FROM t1;
+SELECT * FROM t1 ORDER BY a;
a b
SELECT COUNT(*) FROM t2;
COUNT(*)
0
-SELECT * FROM t2;
+SELECT * FROM t2 ORDER BY a;
a b
DELETE FROM t1;
DELETE FROM t2;
@@ -275,13 +275,13 @@ UPDATE t1 SET b = 't1, text 1 updated' WHERE a = 1;
SELECT COUNT(*) FROM t1;
COUNT(*)
1
-SELECT * FROM t1;
+SELECT * FROM t1 ORDER BY a;
a b
1 t1, text 1 updated
SELECT COUNT(*) FROM t2;
COUNT(*)
1
-SELECT * FROM t2;
+SELECT * FROM t2 ORDER BY a;
a b
1 t2, text 1
==========SLAVE===========
@@ -289,13 +289,13 @@ USE test_rpl;
SELECT COUNT(*) FROM t1;
COUNT(*)
1
-SELECT * FROM t1;
+SELECT * FROM t1 ORDER BY a;
a b
1 t1, text 1 updated
SELECT COUNT(*) FROM t2;
COUNT(*)
1
-SELECT * FROM t2;
+SELECT * FROM t2 ORDER BY a;
a b
1 t2, text 1
UPDATE t1, t2 SET t1.b = 'test', t2.b = 'test';
@@ -303,13 +303,13 @@ UPDATE t1, t2 SET t1.b = 'test', t2.b = 'test';
SELECT COUNT(*) FROM t1;
COUNT(*)
1
-SELECT * FROM t1;
+SELECT * FROM t1 ORDER BY a;
a b
1 test
SELECT COUNT(*) FROM t2;
COUNT(*)
1
-SELECT * FROM t2;
+SELECT * FROM t2 ORDER BY a;
a b
1 test
==========SLAVE===========
@@ -317,13 +317,13 @@ USE test_rpl;
SELECT COUNT(*) FROM t1;
COUNT(*)
1
-SELECT * FROM t1;
+SELECT * FROM t1 ORDER BY a;
a b
1 test
SELECT COUNT(*) FROM t2;
COUNT(*)
1
-SELECT * FROM t2;
+SELECT * FROM t2 ORDER BY a;
a b
1 test
DELETE FROM t1;
@@ -349,26 +349,26 @@ COMMIT;
SELECT COUNT(*) FROM t1;
COUNT(*)
1
-SELECT * FROM t1;
+SELECT * FROM t1 ORDER BY a;
a b
1 start
SELECT COUNT(*) FROM t2;
COUNT(*)
0
-SELECT * FROM t2;
+SELECT * FROM t2 ORDER BY a;
a b
==========SLAVE===========
USE test_rpl;
SELECT COUNT(*) FROM t1;
COUNT(*)
1
-SELECT * FROM t1;
+SELECT * FROM t1 ORDER BY a;
a b
1 start
SELECT COUNT(*) FROM t2;
COUNT(*)
0
-SELECT * FROM t2;
+SELECT * FROM t2 ORDER BY a;
a b
START TRANSACTION;
INSERT INTO t1 VALUES (2, 'rollback');
@@ -377,26 +377,26 @@ ROLLBACK;
SELECT COUNT(*) FROM t1;
COUNT(*)
1
-SELECT * FROM t1;
+SELECT * FROM t1 ORDER BY a;
a b
1 start
SELECT COUNT(*) FROM t2;
COUNT(*)
0
-SELECT * FROM t2;
+SELECT * FROM t2 ORDER BY a;
a b
==========SLAVE===========
USE test_rpl;
SELECT COUNT(*) FROM t1;
COUNT(*)
1
-SELECT * FROM t1;
+SELECT * FROM t1 ORDER BY a;
a b
1 start
SELECT COUNT(*) FROM t2;
COUNT(*)
0
-SELECT * FROM t2;
+SELECT * FROM t2 ORDER BY a;
a b
START TRANSACTION;
INSERT INTO t1 VALUES (3, 'before savepoint s1');
@@ -407,27 +407,27 @@ ROLLBACK TO SAVEPOINT s1;
SELECT COUNT(*) FROM t1;
COUNT(*)
2
-SELECT * FROM t1;
+SELECT * FROM t1 ORDER BY a;
a b
1 start
3 before savepoint s1
SELECT COUNT(*) FROM t2;
COUNT(*)
0
-SELECT * FROM t2;
+SELECT * FROM t2 ORDER BY a;
a b
==========SLAVE===========
USE test_rpl;
SELECT COUNT(*) FROM t1;
COUNT(*)
1
-SELECT * FROM t1;
+SELECT * FROM t1 ORDER BY a;
a b
1 start
SELECT COUNT(*) FROM t2;
COUNT(*)
0
-SELECT * FROM t2;
+SELECT * FROM t2 ORDER BY a;
a b
START TRANSACTION;
INSERT INTO t1 VALUES (5, 'before savepoint s2');
@@ -441,7 +441,7 @@ DELETE FROM t1 WHERE a = 7;
SELECT COUNT(*) FROM t1;
COUNT(*)
4
-SELECT * FROM t1;
+SELECT * FROM t1 ORDER BY a;
a b
1 start
3 before savepoint s1
@@ -450,14 +450,14 @@ a b
SELECT COUNT(*) FROM t2;
COUNT(*)
0
-SELECT * FROM t2;
+SELECT * FROM t2 ORDER BY a;
a b
==========SLAVE===========
USE test_rpl;
SELECT COUNT(*) FROM t1;
COUNT(*)
4
-SELECT * FROM t1;
+SELECT * FROM t1 ORDER BY a;
a b
1 start
3 before savepoint s1
@@ -466,7 +466,7 @@ a b
SELECT COUNT(*) FROM t2;
COUNT(*)
0
-SELECT * FROM t2;
+SELECT * FROM t2 ORDER BY a;
a b
DELETE FROM t1;
DELETE FROM t2;
@@ -610,28 +610,28 @@ DELETE FROM t1 WHERE a = 202;
SELECT COUNT(*) FROM t1;
COUNT(*)
2
-SELECT * FROM t1;
+SELECT * FROM t1 ORDER BY a;
a b
100 test
201 test
SELECT COUNT(*) FROM t2;
COUNT(*)
0
-SELECT * FROM t2;
+SELECT * FROM t2 ORDER BY a;
a b
==========SLAVE===========
USE test_rpl;
SELECT COUNT(*) FROM t1;
COUNT(*)
2
-SELECT * FROM t1;
+SELECT * FROM t1 ORDER BY a;
a b
100 test
201 test
SELECT COUNT(*) FROM t2;
COUNT(*)
0
-SELECT * FROM t2;
+SELECT * FROM t2 ORDER BY a;
a b
ALTER PROCEDURE p1 COMMENT 'p1';
DROP PROCEDURE p1;
@@ -649,13 +649,13 @@ INSERT INTO t1 VALUES (1, 'test');
SELECT COUNT(*) FROM t1;
COUNT(*)
1
-SELECT * FROM t1;
+SELECT * FROM t1 ORDER BY a;
a b
1 test
SELECT COUNT(*) FROM t2;
COUNT(*)
1
-SELECT * FROM t2;
+SELECT * FROM t2 ORDER BY a;
a b
1 test
==========SLAVE===========
@@ -663,13 +663,13 @@ USE test_rpl;
SELECT COUNT(*) FROM t1;
COUNT(*)
1
-SELECT * FROM t1;
+SELECT * FROM t1 ORDER BY a;
a b
1 test
SELECT COUNT(*) FROM t2;
COUNT(*)
1
-SELECT * FROM t2;
+SELECT * FROM t2 ORDER BY a;
a b
1 test
DELETE FROM t1;
@@ -694,51 +694,51 @@ test_rpl e1 @ SYSTEM RECURRING NULL 1 # # NULL SLAVESIDE_DISABLED 1 latin1 latin
SELECT COUNT(*) FROM t1;
COUNT(*)
1
-SELECT * FROM t1;
+SELECT * FROM t1 ORDER BY a;
a b
1 test1
SELECT COUNT(*) FROM t2;
COUNT(*)
0
-SELECT * FROM t2;
+SELECT * FROM t2 ORDER BY a;
a b
==========SLAVE===========
USE test_rpl;
SELECT COUNT(*) FROM t1;
COUNT(*)
1
-SELECT * FROM t1;
+SELECT * FROM t1 ORDER BY a;
a b
1 test1
SELECT COUNT(*) FROM t2;
COUNT(*)
0
-SELECT * FROM t2;
+SELECT * FROM t2 ORDER BY a;
a b
==========MASTER==========
SELECT COUNT(*) FROM t1;
COUNT(*)
1
-SELECT * FROM t1;
+SELECT * FROM t1 ORDER BY a;
a b
1 test1
SELECT COUNT(*) FROM t2;
COUNT(*)
0
-SELECT * FROM t2;
+SELECT * FROM t2 ORDER BY a;
a b
==========SLAVE===========
USE test_rpl;
SELECT COUNT(*) FROM t1;
COUNT(*)
1
-SELECT * FROM t1;
+SELECT * FROM t1 ORDER BY a;
a b
1 test1
SELECT COUNT(*) FROM t2;
COUNT(*)
0
-SELECT * FROM t2;
+SELECT * FROM t2 ORDER BY a;
a b
ALTER EVENT e1 RENAME TO e2;
==========MASTER==========
@@ -754,26 +754,26 @@ test_rpl e2 @ SYSTEM RECURRING NULL 1 # # NULL SLAVESIDE_DISABLED 1 latin1 latin
SELECT COUNT(*) FROM t1;
COUNT(*)
1
-SELECT * FROM t1;
+SELECT * FROM t1 ORDER BY a;
a b
1 test1
SELECT COUNT(*) FROM t2;
COUNT(*)
0
-SELECT * FROM t2;
+SELECT * FROM t2 ORDER BY a;
a b
==========SLAVE===========
USE test_rpl;
SELECT COUNT(*) FROM t1;
COUNT(*)
1
-SELECT * FROM t1;
+SELECT * FROM t1 ORDER BY a;
a b
1 test1
SELECT COUNT(*) FROM t2;
COUNT(*)
0
-SELECT * FROM t2;
+SELECT * FROM t2 ORDER BY a;
a b
DROP EVENT e2;
==========MASTER==========
@@ -795,7 +795,7 @@ CREATE VIEW v2 AS SELECT * FROM t1 WHERE b <> UUID();
SHOW CREATE VIEW v1;
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;
+SELECT * FROM v1 ORDER BY a;
a b
1 test1
==========SLAVE===========
@@ -803,7 +803,7 @@ USE test_rpl;
SHOW CREATE VIEW v1;
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;
+SELECT * FROM v1 ORDER BY a;
a b
1 test1
ALTER VIEW v1 AS SELECT * FROM t1 WHERE a = 2;
@@ -811,7 +811,7 @@ ALTER VIEW v1 AS SELECT * FROM t1 WHERE a = 2;
SHOW CREATE VIEW v1;
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;
+SELECT * FROM v1 ORDER BY a;
a b
2 test2
==========SLAVE===========
@@ -819,7 +819,7 @@ USE test_rpl;
SHOW CREATE VIEW v1;
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;
+SELECT * FROM v1 ORDER BY a;
a b
2 test2
DROP VIEW v1;
@@ -835,108 +835,158 @@ master-bin.000001 # Format_desc 1 # Server ver: #
master-bin.000001 # Query 1 # CREATE DATABASE test_rpl
master-bin.000001 # Query 1 # use `test_rpl`; CREATE TABLE t1 (a int auto_increment not null, b char(254), PRIMARY KEY(a)) ENGINE=innodb
master-bin.000001 # Query 1 # use `test_rpl`; CREATE TABLE t2 (a int auto_increment not null, b char(254), PRIMARY KEY(a)) ENGINE=innodb
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; INSERT INTO t1 VALUES(1, 't1, text 1')
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; INSERT INTO t1 VALUES(2, 't1, text 2')
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; INSERT INTO t2 VALUES(1, 't2, text 1')
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t1 WHERE a = 1
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
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 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t1
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t2
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; INSERT INTO t1 VALUES(1, 't1, text 1')
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Table_map 1 # table_id: # (test_rpl.t1)
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; INSERT INTO t2 SELECT * FROM t1
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; INSERT INTO t2 VALUES (1, 't1, text 1') ON DUPLICATE KEY UPDATE b = 't2, text 1'
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t1 WHERE a = 2
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t2 WHERE a = 2
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t1
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t2
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Begin_load_query 1 # ;file_id=#;block_len=#
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=#
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t1
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t2
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; INSERT INTO t1 VALUES(1, 't1, text 1')
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; INSERT INTO t1 VALUES(2, 't1, text 2')
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; INSERT INTO t1 VALUES(3, 't1, text 3')
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; REPLACE INTO t1 VALUES(1, 't1, text 11')
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Table_map 1 # table_id: # (test_rpl.t1)
master-bin.000001 # Update_rows 1 # table_id: # flags: STMT_END_F
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; REPLACE INTO t1 SET a=3, b='t1, text 33'
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t1 WHERE a = 2
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t1
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t2
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; INSERT INTO t1 VALUES(1, 't1, text 1')
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t1
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t2
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; INSERT INTO t1 VALUES(1, 'CCC')
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; INSERT INTO t1 VALUES(2, 'DDD')
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; INSERT INTO t2 VALUES(1, 'DDD')
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; INSERT INTO t2 VALUES(2, 'CCC')
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t1
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t2
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; INSERT INTO t1 VALUES(1, 't1, text 1')
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; INSERT INTO t2 VALUES(1, 't2, text 1')
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t1
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t2
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; INSERT INTO t1 VALUES(1, 't1, text 1')
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; TRUNCATE t1
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t1
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t2
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; INSERT INTO t1 VALUES(1, 't1, text 1')
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; INSERT INTO t2 VALUES(1, 't2, text 1')
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; UPDATE t1 SET b = 't1, text 1 updated' WHERE a = 1
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; UPDATE t1, t2 SET t1.b = 'test', t2.b = 'test'
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t1
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t2
master-bin.000001 # Xid 1 # #
master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
@@ -952,10 +1002,13 @@ master-bin.000001 # Query 1 # use `test_rpl`; INSERT INTO t1 VALUES (6, 'after s
master-bin.000001 # Table_map 1 # table_id: # (test_rpl.t1)
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t1 WHERE a = 7
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t1
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t2
master-bin.000001 # Xid 1 # #
master-bin.000001 # Query 1 # use `test_rpl`; CREATE USER 'user_test_rpl'@'localhost' IDENTIFIED BY PASSWORD '*1111111111111111111111111111111111111111'
@@ -964,6 +1017,7 @@ master-bin.000001 # Query 1 # use `test_rpl`; REVOKE SELECT ON *.* FROM 'user_te
master-bin.000001 # Query 1 # use `test_rpl`; SET PASSWORD FOR 'user_test_rpl'@'localhost'='*0000000000000000000000000000000000000000'
master-bin.000001 # Query 1 # use `test_rpl`; RENAME USER 'user_test_rpl'@'localhost' TO 'user_test_rpl_2'@'localhost'
master-bin.000001 # Query 1 # use `test_rpl`; DROP USER 'user_test_rpl_2'@'localhost'
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; INSERT INTO t1 VALUES(100, 'test')
master-bin.000001 # Xid 1 # #
master-bin.000001 # Query 1 # use `test_rpl`; ANALYZE TABLE t1
@@ -977,50 +1031,65 @@ master-bin.000001 # Query 1 # use `test_rpl`; CREATE DEFINER=`root`@`localhost`
BEGIN
UPDATE t1 SET b = UUID() WHERE a = 202;
END
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; INSERT INTO t1 VALUES(201, 'test 201')
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; UPDATE t1 SET b = 'test' WHERE a = 201
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; INSERT INTO t1 VALUES(202, 'test 202')
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Table_map 1 # table_id: # (test_rpl.t1)
master-bin.000001 # Update_rows 1 # table_id: # flags: STMT_END_F
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t1 WHERE a = 202
master-bin.000001 # Xid 1 # #
master-bin.000001 # Query 1 # use `test_rpl`; ALTER PROCEDURE p1 COMMENT 'p1'
master-bin.000001 # Query 1 # use `test_rpl`; DROP PROCEDURE p1
master-bin.000001 # Query 1 # use `test_rpl`; DROP PROCEDURE p2
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t1
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t2
master-bin.000001 # Xid 1 # #
master-bin.000001 # Query 1 # use `test_rpl`; CREATE DEFINER=`root`@`localhost` TRIGGER tr1 BEFORE INSERT ON t1
FOR EACH ROW BEGIN
INSERT INTO t2 SET a = NEW.a, b = NEW.b;
END
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
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 # 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 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t1
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t2
master-bin.000001 # Xid 1 # #
master-bin.000001 # Query 1 # use `test_rpl`; DROP TRIGGER tr1
master-bin.000001 # Query 1 # use `test_rpl`; GRANT EVENT ON *.* TO 'root'@'localhost'
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; INSERT INTO t1 VALUES(1, 'test1')
master-bin.000001 # Xid 1 # #
master-bin.000001 # Query 1 # use `test_rpl`; CREATE EVENT e1 ON SCHEDULE EVERY '1' SECOND COMMENT 'e_second_comment' DO DELETE FROM t1
master-bin.000001 # Query 1 # use `test_rpl`; ALTER EVENT e1 RENAME TO e2
master-bin.000001 # Query 1 # use `test_rpl`; DROP EVENT e2
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t1
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t2
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; INSERT INTO t1 VALUES(1, 'test1')
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; INSERT INTO t1 VALUES(2, 'test2')
master-bin.000001 # Xid 1 # #
master-bin.000001 # Query 1 # use `test_rpl`; CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS SELECT * FROM t1 WHERE a = 1
@@ -1028,8 +1097,10 @@ master-bin.000001 # Query 1 # use `test_rpl`; CREATE ALGORITHM=UNDEFINED DEFINER
master-bin.000001 # Query 1 # use `test_rpl`; ALTER ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS SELECT * FROM t1 WHERE a = 2
master-bin.000001 # Query 1 # use `test_rpl`; DROP VIEW v1
master-bin.000001 # Query 1 # use `test_rpl`; DROP VIEW v2
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t1
master-bin.000001 # Xid 1 # #
+master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t2
master-bin.000001 # Xid 1 # #
drop database test_rpl;
diff --git a/mysql-test/suite/rpl/r/rpl_invoked_features.result b/mysql-test/suite/rpl/r/rpl_invoked_features.result
index 3bcef762497..aed1dcdbb47 100644
--- a/mysql-test/suite/rpl/r/rpl_invoked_features.result
+++ b/mysql-test/suite/rpl/r/rpl_invoked_features.result
@@ -17,13 +17,13 @@ DROP EVENT IF EXISTS e11;
CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY, b INT, c VARCHAR(64)) ENGINE=myisam;
INSERT INTO t1 VALUES (1,1,'1');
INSERT INTO t1 VALUES (2,2,UUID());
-CREATE TABLE t2 (a INT, b INT, c VARCHAR(64)) ENGINE=myisam;
+CREATE TABLE t2 (a INT UNIQUE, b INT, c VARCHAR(64)) ENGINE=myisam;
INSERT INTO t2 VALUES (1,1,'1');
INSERT INTO t2 VALUES (2,2,UUID());
CREATE TABLE t11 (a INT NOT NULL PRIMARY KEY, b INT, c VARCHAR(64)) ENGINE=innodb;
INSERT INTO t11 VALUES (1,1,'1');
INSERT INTO t11 VALUES (2,2,UUID());
-CREATE TABLE t12 (a INT, b INT, c VARCHAR(64)) ENGINE=innodb;
+CREATE TABLE t12 (a INT UNIQUE, b INT, c VARCHAR(64)) ENGINE=innodb;
INSERT INTO t12 VALUES (1,1,'1');
INSERT INTO t12 VALUES (2,2,UUID());
@@ -49,21 +49,15 @@ BEGIN
UPDATE t12 SET c = '';
UPDATE t13 SET c = '';
END|
-CREATE EVENT e1 ON SCHEDULE EVERY 1 SECOND ENABLE DO
+CREATE EVENT e1 ON SCHEDULE EVERY 1 SECOND DISABLE DO
BEGIN
-DECLARE c INT;
-SELECT a INTO c FROM t1 WHERE a < 11 ORDER BY a DESC LIMIT 1;
-IF c = 7 THEN
+ALTER EVENT e1 DISABLE;
CALL p1(10, '');
-END IF;
END|
-CREATE EVENT e11 ON SCHEDULE EVERY 1 SECOND ENABLE DO
+CREATE EVENT e11 ON SCHEDULE EVERY 1 SECOND DISABLE DO
BEGIN
-DECLARE c INT;
-SELECT a INTO c FROM t11 WHERE a < 11 ORDER BY a DESC LIMIT 1;
-IF c = 7 THEN
+ALTER EVENT e11 DISABLE;
CALL p11(10, '');
-END IF;
END|
CREATE FUNCTION f1 (x INT) RETURNS VARCHAR(64)
BEGIN
@@ -78,11 +72,11 @@ RETURN f1(x);
END|
CREATE PROCEDURE p1 (IN x INT, IN y VARCHAR(64))
BEGIN
-INSERT INTO t1 VALUES (x,x,y);
+INSERT IGNORE INTO t1 VALUES (x,x,y);
END|
CREATE PROCEDURE p11 (IN x INT, IN y VARCHAR(64))
BEGIN
-INSERT INTO t11 VALUES (x,x,y);
+INSERT IGNORE INTO t11 VALUES (x,x,y);
END|
CREATE TABLE t3 SELECT * FROM v1;
@@ -110,6 +104,8 @@ INSERT INTO t11 VALUES(7,7,f2(7));
INSERT INTO t11 VALUES (103,103,'');
SET GLOBAL EVENT_SCHEDULER = on;
+ALTER EVENT e1 ENABLE;
+ALTER EVENT e11 ENABLE;
SET GLOBAL EVENT_SCHEDULER = off;
SHOW TABLES LIKE 't%';
@@ -120,26 +116,26 @@ t12
t13
t2
t3
-SELECT table_name FROM information_schema.views WHERE table_schema='test';
+SELECT table_name FROM information_schema.views WHERE table_schema='test' ORDER BY table_name;
table_name
v1
v11
-SELECT trigger_name, event_manipulation, event_object_table FROM information_schema.triggers WHERE trigger_schema='test';
+SELECT trigger_name, event_manipulation, event_object_table FROM information_schema.triggers WHERE trigger_schema='test' ORDER BY trigger_name;
trigger_name event_manipulation event_object_table
-t1_tr1 INSERT t1
-t1_tr2 UPDATE t1
t11_tr1 INSERT t11
t11_tr2 UPDATE t11
-SELECT routine_type, routine_name FROM information_schema.routines WHERE routine_schema='test';
+t1_tr1 INSERT t1
+t1_tr2 UPDATE t1
+SELECT routine_type, routine_name FROM information_schema.routines WHERE routine_schema='test' ORDER BY routine_name;
routine_type routine_name
FUNCTION f1
FUNCTION f2
PROCEDURE p1
PROCEDURE p11
-SELECT event_name, status FROM information_schema.events WHERE event_schema='test';
+SELECT event_name, status FROM information_schema.events WHERE event_schema='test' ORDER BY event_name;
event_name status
-e1 ENABLED
-e11 ENABLED
+e1 DISABLED
+e11 DISABLED
SELECT COUNT(*) FROM t1;
COUNT(*)
@@ -280,23 +276,23 @@ t12
t13
t2
t3
-SELECT table_name FROM information_schema.views WHERE table_schema='test';
+SELECT table_name FROM information_schema.views WHERE table_schema='test' ORDER BY table_name;
table_name
v1
v11
-SELECT trigger_name, event_manipulation, event_object_table FROM information_schema.triggers WHERE trigger_schema='test';
+SELECT trigger_name, event_manipulation, event_object_table FROM information_schema.triggers WHERE trigger_schema='test' ORDER BY trigger_name;
trigger_name event_manipulation event_object_table
-t1_tr1 INSERT t1
-t1_tr2 UPDATE t1
t11_tr1 INSERT t11
t11_tr2 UPDATE t11
-SELECT routine_type, routine_name FROM information_schema.routines WHERE routine_schema='test';
+t1_tr1 INSERT t1
+t1_tr2 UPDATE t1
+SELECT routine_type, routine_name FROM information_schema.routines WHERE routine_schema='test' ORDER BY routine_name;
routine_type routine_name
FUNCTION f1
FUNCTION f2
PROCEDURE p1
PROCEDURE p11
-SELECT event_name, status FROM information_schema.events WHERE event_schema='test';
+SELECT event_name, status FROM information_schema.events WHERE event_schema='test' ORDER BY event_name;
event_name status
e1 SLAVESIDE_DISABLED
e11 SLAVESIDE_DISABLED
@@ -438,6 +434,8 @@ UPDATE t3 SET c='';
UPDATE t11 SET c='';
UPDATE t12 SET c='';
UPDATE t13 SET c='';
+ALTER TABLE t3 ORDER BY a;
+ALTER TABLE t13 ORDER BY a;
diff --git a/mysql-test/suite/rpl/r/rpl_load_from_master.result b/mysql-test/suite/rpl/r/rpl_load_from_master.result
index 08b45ec1db0..e1c2ecb35be 100644
--- a/mysql-test/suite/rpl/r/rpl_load_from_master.result
+++ b/mysql-test/suite/rpl/r/rpl_load_from_master.result
@@ -30,13 +30,11 @@ drop database mysqltest2;
set sql_log_bin = 0;
create database mysqltest2;
create database mysqltest;
-show databases;
-Database
-information_schema
+show databases like 'mysql%';
+Database (mysql%)
mysql
mysqltest
mysqltest2
-test
create table mysqltest2.t1(n int, s char(20))ENGINE=MyISAM;
create table mysqltest2.t2(n int, s text)ENGINE=MyISAM;
insert into mysqltest2.t1 values (1, 'one'), (2, 'two'), (3, 'three');
@@ -47,11 +45,9 @@ insert into mysqltest.t1 values (1, 'one test'), (2, 'two test'), (3, 'three tes
insert into mysqltest.t2 values (11, 'eleven test'), (12, 'twelve test'),
(13, 'thirteen test');
set sql_log_bin = 1;
-show databases;
-Database
-information_schema
+show databases like 'mysql%';
+Database (mysql%)
mysql
-test
create database mysqltest2;
create table mysqltest2.t1(n int, s char(20))ENGINE=MyISAM;
insert into mysqltest2.t1 values (1, 'original foo.t1');
@@ -66,14 +62,12 @@ insert into mysqltest.t1 values (1, 'original bar.t1');
create table mysqltest.t3(n int, s char(20))ENGINE=MyISAM;
insert into mysqltest.t3 values (1, 'original bar.t3');
load data from master;
-show databases;
-Database
-information_schema
+show databases like 'mysql%';
+Database (mysql%)
mysql
mysqltest
mysqltest2
mysqltest3
-test
use mysqltest2;
show tables;
Tables_in_mysqltest2
diff --git a/mysql-test/suite/rpl/r/rpl_loaddata_fatal.result b/mysql-test/suite/rpl/r/rpl_loaddata_fatal.result
index d30110f85e9..a4d67754bd6 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 1592
+Last_Errno 1593
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 1592
+Last_SQL_Errno 1593
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_loaddata_map.result b/mysql-test/suite/rpl/r/rpl_loaddata_map.result
new file mode 100644
index 00000000000..e6ddc1ebedc
--- /dev/null
+++ b/mysql-test/suite/rpl/r/rpl_loaddata_map.result
@@ -0,0 +1,26 @@
+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;
+create table t2 (id int not null primary key auto_increment);
+select @@session.read_buffer_size - @@session.max_allowed_packet > 0 ;
+@@session.read_buffer_size - @@session.max_allowed_packet > 0
+1
+load data infile 'MYSQLTEST_VARDIR/tmp/bug30435_5k.txt' into table t2;
+select count(*) from t2 /* 5 000 */;
+count(*)
+5000
+show binlog events in 'master-bin.000002' from 106;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000002 106 Query 1 # use `test`; create table t2 (id int not null primary key auto_increment)
+master-bin.000002 229 Begin_load_query 1 # ;file_id=#;block_len=8192
+master-bin.000002 8444 Append_block 1 # ;file_id=#;block_len=8192
+master-bin.000002 16659 Append_block 1 # ;file_id=#;block_len=7509
+master-bin.000002 24191 Execute_load_query 1 # use `test`; load data infile 'MYSQLTEST_VARDIR/tmp/bug30435_5k.txt' into table t2 ;file_id=#
+select count(*) from t2 /* 5 000 */;
+count(*)
+5000
+drop table t1, t2;
+end of the tests
diff --git a/mysql-test/suite/rpl/r/rpl_log_pos.result b/mysql-test/suite/rpl/r/rpl_log_pos.result
index 0f3552af5bc..e0c4dedde10 100644
--- a/mysql-test/suite/rpl/r/rpl_log_pos.result
+++ b/mysql-test/suite/rpl/r/rpl_log_pos.result
@@ -6,7 +6,7 @@ drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
start slave;
show master status;
File Position Binlog_Do_DB Binlog_Ignore_DB
-master-bin.000001 106 <Binlog_Ignore_DB>
+master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB>
stop slave;
change master to master_log_pos=75;
SHOW SLAVE STATUS;
@@ -16,7 +16,7 @@ Master_User root
Master_Port MASTER_PORT
Connect_Retry 1
Master_Log_File master-bin.000001
-Read_Master_Log_Pos 75
+Read_Master_Log_Pos #
Relay_Log_File #
Relay_Log_Pos #
Relay_Master_Log_File master-bin.000001
@@ -31,7 +31,7 @@ Replicate_Wild_Ignore_Table
Last_Errno 0
Last_Error
Skip_Counter 0
-Exec_Master_Log_Pos 75
+Exec_Master_Log_Pos #
Relay_Log_Space #
Until_Condition None
Until_Log_File
@@ -91,12 +91,12 @@ Last_SQL_Errno 0
Last_SQL_Error
show master status;
File Position Binlog_Do_DB Binlog_Ignore_DB
-master-bin.000001 106 <Binlog_Ignore_DB>
+master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB>
create table if not exists t1 (n int);
drop table if exists t1;
create table t1 (n int);
insert into t1 values (1),(2),(3);
-change master to master_log_pos=106;
+change master to master_log_pos=4;
start slave;
select * from t1 ORDER BY n;
n
diff --git a/mysql-test/suite/rpl/r/rpl_packet.result b/mysql-test/suite/rpl/r/rpl_packet.result
index 981c234d380..dd56eb0471c 100644
--- a/mysql-test/suite/rpl/r/rpl_packet.result
+++ b/mysql-test/suite/rpl/r/rpl_packet.result
@@ -27,6 +27,42 @@ STOP SLAVE;
START SLAVE;
CREATE TABLe `t1` (`f1` LONGTEXT) ENGINE=MyISAM;
INSERT INTO `t1`(`f1`) VALUES ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2048');
-SHOW STATUS LIKE 'Slave_running';
-Variable_name Value
-Slave_running OFF
+show slave status;
+Slave_IO_State #
+Master_Host 127.0.0.1
+Master_User root
+Master_Port MASTER_MYPORT
+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 No
+Slave_SQL_Running #
+Replicate_Do_DB
+Replicate_Ignore_DB
+Replicate_Do_Table
+Replicate_Ignore_Table
+Replicate_Wild_Do_Table
+Replicate_Wild_Ignore_Table
+Last_Errno 0
+Last_Error
+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 0
+Last_IO_Error
+Last_SQL_Errno 0
+Last_SQL_Error
diff --git a/mysql-test/suite/rpl/r/rpl_rotate_logs.result b/mysql-test/suite/rpl/r/rpl_rotate_logs.result
index 2282067ddfd..6314a9a61fb 100644
--- a/mysql-test/suite/rpl/r/rpl_rotate_logs.result
+++ b/mysql-test/suite/rpl/r/rpl_rotate_logs.result
@@ -21,7 +21,7 @@ Master_User root
Master_Port MASTER_PORT
Connect_Retry 60
Master_Log_File master-bin.000001
-Read_Master_Log_Pos 556
+Read_Master_Log_Pos #
Relay_Log_File #
Relay_Log_Pos #
Relay_Master_Log_File master-bin.000001
@@ -36,7 +36,7 @@ Replicate_Wild_Ignore_Table
Last_Errno 0
Last_Error
Skip_Counter 0
-Exec_Master_Log_Pos 556
+Exec_Master_Log_Pos #
Relay_Log_Space #
Until_Condition None
Until_Log_File
@@ -63,9 +63,9 @@ insert into t2 values (34),(67),(123);
flush logs;
show binary logs;
Log_name File_size
-master-bin.000001 600
-master-bin.000002 371
-master-bin.000003 106
+master-bin.000001 #
+master-bin.000002 #
+master-bin.000003 #
create table t3 select * from temp_table;
select * from t3;
a
@@ -78,21 +78,22 @@ set global sql_slave_skip_counter=1;
start slave;
purge master logs to 'master-bin.000002';
show master logs;
-Log_name File_size
-master-bin.000002 371
-master-bin.000003 415
+Log_name master-bin.000002
+File_size #
+Log_name master-bin.000003
+File_size #
purge binary logs to 'master-bin.000002';
show binary logs;
Log_name File_size
-master-bin.000002 371
-master-bin.000003 415
+master-bin.000002 #
+master-bin.000003 #
select @time_for_purge:=DATE_ADD(UPDATE_TIME, INTERVAL 1 SECOND)
from information_schema.tables
where TABLE_SCHEMA="test" and TABLE_NAME="t2";
purge master logs before (@time_for_purge);
show binary logs;
Log_name File_size
-master-bin.000003 415
+master-bin.000003 #
insert into t2 values (65);
SHOW SLAVE STATUS;
Slave_IO_State #
@@ -101,7 +102,7 @@ Master_User root
Master_Port MASTER_PORT
Connect_Retry 60
Master_Log_File master-bin.000003
-Read_Master_Log_Pos 504
+Read_Master_Log_Pos #
Relay_Log_File #
Relay_Log_Pos #
Relay_Master_Log_File master-bin.000003
@@ -116,7 +117,7 @@ Replicate_Wild_Ignore_Table
Last_Errno 0
Last_Error
Skip_Counter 0
-Exec_Master_Log_Pos 504
+Exec_Master_Log_Pos #
Relay_Log_Space #
Until_Condition None
Until_Log_File
@@ -149,12 +150,12 @@ count(*)
create table t4 select * from temp_table;
show binary logs;
Log_name File_size
-master-bin.000003 4193
-master-bin.000004 4198
-master-bin.000005 2040
+master-bin.000003 #
+master-bin.000004 #
+master-bin.000005 #
show master status;
File Position Binlog_Do_DB Binlog_Ignore_DB
-master-bin.000005 2040
+master-bin.000005 # <Binlog_Do_DB> <Binlog_Ignore_DB>
select * from t4;
a
testing temporary tables part 2
@@ -165,7 +166,7 @@ Master_User root
Master_Port MASTER_PORT
Connect_Retry 60
Master_Log_File master-bin.000005
-Read_Master_Log_Pos 2040
+Read_Master_Log_Pos #
Relay_Log_File #
Relay_Log_Pos #
Relay_Master_Log_File master-bin.000005
@@ -180,7 +181,7 @@ Replicate_Wild_Ignore_Table
Last_Errno 0
Last_Error
Skip_Counter 0
-Exec_Master_Log_Pos 2040
+Exec_Master_Log_Pos #
Relay_Log_Space #
Until_Condition None
Until_Log_File
diff --git a/mysql-test/suite/rpl/r/rpl_row_basic_11bugs.result b/mysql-test/suite/rpl/r/rpl_row_basic_11bugs.result
index 7dc9926522b..f49c23248e5 100644
--- a/mysql-test/suite/rpl/r/rpl_row_basic_11bugs.result
+++ b/mysql-test/suite/rpl/r/rpl_row_basic_11bugs.result
@@ -242,3 +242,36 @@ a b
3 1
4 4
drop table t1,t2;
+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;
+**** On Master ****
+SET SESSION BINLOG_FORMAT=ROW;
+CREATE TABLE t1 (a INT PRIMARY KEY, b SET('master','slave'));
+INSERT INTO t1 VALUES (1,'master,slave'), (2,'master,slave');
+**** On Slave ****
+UPDATE t1 SET a = 5, b = 'slave' WHERE a = 1;
+SELECT * FROM t1 ORDER BY a;
+a b
+2 master,slave
+5 slave
+set @@global.slave_exec_mode= 'IDEMPOTENT';
+**** On Master ****
+UPDATE t1 SET a = 5, b = 'master' WHERE a = 1;
+SELECT * FROM t1 ORDER BY a;
+a b
+2 master,slave
+5 master
+**** On Slave ****
+set @@global.slave_exec_mode= default;
+Last_SQL_Error
+
+SELECT * FROM t1 ORDER BY a;
+a b
+2 master,slave
+5 slave
+DROP TABLE t1;
+**** On Master ****
+DROP TABLE t1;
diff --git a/mysql-test/suite/rpl/r/rpl_row_basic_2myisam.result b/mysql-test/suite/rpl/r/rpl_row_basic_2myisam.result
index a6877b27b95..22284a26412 100644
--- a/mysql-test/suite/rpl/r/rpl_row_basic_2myisam.result
+++ b/mysql-test/suite/rpl/r/rpl_row_basic_2myisam.result
@@ -370,6 +370,7 @@ C1 C2
1 3
2 6
3 9
+set @@global.slave_exec_mode= 'IDEMPOTENT';
--- on master: new values inserted ---
INSERT INTO t7 VALUES (1,2), (2,4), (3,6);
SELECT * FROM t7 ORDER BY C1;
@@ -377,6 +378,7 @@ C1 C2
1 2
2 4
3 6
+set @@global.slave_exec_mode= default;
--- on slave: old values should be overwritten by replicated values ---
SELECT * FROM t7 ORDER BY C1;
C1 C2
@@ -406,8 +408,10 @@ a b c
2 4 6
3 6 9
99 99 99
+set @@global.slave_exec_mode= 'IDEMPOTENT';
--- on master ---
INSERT INTO t8 VALUES (2,4,8);
+set @@global.slave_exec_mode= default;
--- on slave ---
SELECT * FROM t8 ORDER BY a;
a b c
@@ -415,4 +419,25 @@ a b c
2 4 8
3 6 9
99 99 99
+**** Test for BUG#31552 ****
+**** On Master ****
+DELETE FROM t1;
+**** Resetting master and slave ****
+STOP SLAVE;
+RESET SLAVE;
+RESET MASTER;
+START SLAVE;
+**** On Master ****
+INSERT INTO t1 VALUES ('K','K'), ('L','L'), ('M','M');
+**** On Master ****
+set @@global.slave_exec_mode= 'IDEMPOTENT';
+DELETE FROM t1 WHERE C1 = 'L';
+DELETE FROM t1;
+SELECT COUNT(*) FROM t1 ORDER BY c1,c2;
+COUNT(*) 0
+set @@global.slave_exec_mode= default;
+Last_SQL_Error
+0
+SELECT COUNT(*) FROM t1 ORDER BY c1,c2;
+COUNT(*) 0
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7,t8;
diff --git a/mysql-test/suite/rpl/r/rpl_row_basic_3innodb.result b/mysql-test/suite/rpl/r/rpl_row_basic_3innodb.result
index 4c6ec627db5..f7b9e5d627a 100644
--- a/mysql-test/suite/rpl/r/rpl_row_basic_3innodb.result
+++ b/mysql-test/suite/rpl/r/rpl_row_basic_3innodb.result
@@ -370,6 +370,7 @@ C1 C2
1 3
2 6
3 9
+set @@global.slave_exec_mode= 'IDEMPOTENT';
--- on master: new values inserted ---
INSERT INTO t7 VALUES (1,2), (2,4), (3,6);
SELECT * FROM t7 ORDER BY C1;
@@ -377,6 +378,7 @@ C1 C2
1 2
2 4
3 6
+set @@global.slave_exec_mode= default;
--- on slave: old values should be overwritten by replicated values ---
SELECT * FROM t7 ORDER BY C1;
C1 C2
@@ -406,8 +408,10 @@ a b c
2 4 6
3 6 9
99 99 99
+set @@global.slave_exec_mode= 'IDEMPOTENT';
--- on master ---
INSERT INTO t8 VALUES (2,4,8);
+set @@global.slave_exec_mode= default;
--- on slave ---
SELECT * FROM t8 ORDER BY a;
a b c
@@ -415,4 +419,25 @@ a b c
2 4 8
3 6 9
99 99 99
+**** Test for BUG#31552 ****
+**** On Master ****
+DELETE FROM t1;
+**** Resetting master and slave ****
+STOP SLAVE;
+RESET SLAVE;
+RESET MASTER;
+START SLAVE;
+**** On Master ****
+INSERT INTO t1 VALUES ('K','K'), ('L','L'), ('M','M');
+**** On Master ****
+set @@global.slave_exec_mode= 'IDEMPOTENT';
+DELETE FROM t1 WHERE C1 = 'L';
+DELETE FROM t1;
+SELECT COUNT(*) FROM t1 ORDER BY c1,c2;
+COUNT(*) 0
+set @@global.slave_exec_mode= default;
+Last_SQL_Error
+0
+SELECT COUNT(*) FROM t1 ORDER BY c1,c2;
+COUNT(*) 0
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7,t8;
diff --git a/mysql-test/suite/rpl/r/rpl_row_charset.result b/mysql-test/suite/rpl/r/rpl_row_charset.result
index e51f3e57d1f..caaa9d8332b 100644
--- a/mysql-test/suite/rpl/r/rpl_row_charset.result
+++ b/mysql-test/suite/rpl/r/rpl_row_charset.result
@@ -40,7 +40,7 @@ show create database mysqltest3;
Database Create Database
mysqltest3 CREATE DATABASE `mysqltest3` /*!40100 DEFAULT CHARACTER SET armscii8 COLLATE armscii8_bin */
use mysqltest2;
-create table t1 (a int auto_increment primary key, b varchar(100));
+create table t1 (a int auto_increment primary key, b varchar(100))engine=myisam;;
set character_set_client=cp850, collation_connection=latin2_croatian_ci;
insert into t1 (b) values(@@character_set_server);
insert into t1 (b) values(@@collation_server);
@@ -117,7 +117,7 @@ master-bin.000001 # Query # # create database mysqltest2 character set latin2
master-bin.000001 # Query # # create database mysqltest3
master-bin.000001 # Query # # drop database mysqltest3
master-bin.000001 # Query # # create database mysqltest3
-master-bin.000001 # Query # # use `mysqltest2`; create table t1 (a int auto_increment primary key, b varchar(100))
+master-bin.000001 # Query # # use `mysqltest2`; create table t1 (a int auto_increment primary key, b varchar(100))engine=myisam
master-bin.000001 # Table_map # # table_id: # (mysqltest2.t1)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
master-bin.000001 # Table_map # # table_id: # (mysqltest2.t1)
@@ -177,14 +177,16 @@ select "--- --3943--" as "";
--- --3943--
use test;
-CREATE TABLE t1 (c1 VARBINARY(255), c2 VARBINARY(255));
+CREATE TABLE t1 (c1 VARBINARY(255), c2 VARBINARY(255))ENGINE=myisam;;
SET CHARACTER_SET_CLIENT=koi8r,
CHARACTER_SET_CONNECTION=cp1251,
CHARACTER_SET_RESULTS=koi8r;
INSERT INTO t1 (c1, c2) VALUES ('îÕ, ÚÁ ÒÙÂÁÌËÕ','îÕ, ÚÁ ÒÙÂÁÌËÕ');
+SET SQL_BIG_SELECTS=1;
select hex(c1), hex(c2) from t1;
hex(c1) hex(c2)
CDF32C20E7E020F0FBE1E0EBEAF3 CDF32C20E7E020F0FBE1E0EBEAF3
+SET SQL_BIG_SELECTS=1;
select hex(c1), hex(c2) from t1;
hex(c1) hex(c2)
CDF32C20E7E020F0FBE1E0EBEAF3 CDF32C20E7E020F0FBE1E0EBEAF3
diff --git a/mysql-test/suite/rpl/r/rpl_row_charset_innodb.result b/mysql-test/suite/rpl/r/rpl_row_charset_innodb.result
new file mode 100644
index 00000000000..4edc224135e
--- /dev/null
+++ b/mysql-test/suite/rpl/r/rpl_row_charset_innodb.result
@@ -0,0 +1,227 @@
+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;
+set timestamp=1000000000;
+drop database if exists mysqltest2;
+drop database if exists mysqltest3;
+create database mysqltest2 character set latin2;
+set @@character_set_server=latin5;
+create database mysqltest3;
+
+--- --master--
+show create database mysqltest2;
+Database Create Database
+mysqltest2 CREATE DATABASE `mysqltest2` /*!40100 DEFAULT CHARACTER SET latin2 */
+show create database mysqltest3;
+Database Create Database
+mysqltest3 CREATE DATABASE `mysqltest3` /*!40100 DEFAULT CHARACTER SET latin5 */
+
+--- --slave--
+show create database mysqltest2;
+Database Create Database
+mysqltest2 CREATE DATABASE `mysqltest2` /*!40100 DEFAULT CHARACTER SET latin2 */
+show create database mysqltest3;
+Database Create Database
+mysqltest3 CREATE DATABASE `mysqltest3` /*!40100 DEFAULT CHARACTER SET latin5 */
+set @@collation_server=armscii8_bin;
+drop database mysqltest3;
+create database mysqltest3;
+
+--- --master--
+show create database mysqltest3;
+Database Create Database
+mysqltest3 CREATE DATABASE `mysqltest3` /*!40100 DEFAULT CHARACTER SET armscii8 COLLATE armscii8_bin */
+
+--- --slave--
+show create database mysqltest3;
+Database Create Database
+mysqltest3 CREATE DATABASE `mysqltest3` /*!40100 DEFAULT CHARACTER SET armscii8 COLLATE armscii8_bin */
+use mysqltest2;
+create table t1 (a int auto_increment primary key, b varchar(100))engine=innodb;;
+set character_set_client=cp850, collation_connection=latin2_croatian_ci;
+insert into t1 (b) values(@@character_set_server);
+insert into t1 (b) values(@@collation_server);
+insert into t1 (b) values(@@character_set_client);
+insert into t1 (b) values(@@character_set_connection);
+insert into t1 (b) values(@@collation_connection);
+
+--- --master--
+select * from t1 order by a;
+a b
+1 armscii8
+2 armscii8_bin
+3 cp850
+4 latin2
+5 latin2_croatian_ci
+
+--- --slave--
+select * from mysqltest2.t1 order by a;
+a b
+1 armscii8
+2 armscii8_bin
+3 cp850
+4 latin2
+5 latin2_croatian_ci
+select "--- --muller--" as "";
+
+--- --muller--
+set character_set_client=latin1, collation_connection=latin1_german1_ci;
+truncate table t1;
+insert into t1 (b) values(@@collation_connection);
+insert into t1 (b) values(LEAST("Müller","Muffler"));
+set collation_connection=latin1_german2_ci;
+insert into t1 (b) values(@@collation_connection);
+insert into t1 (b) values(LEAST("Müller","Muffler"));
+
+--- --master--
+select * from t1 order by a;
+a b
+1 latin1_german1_ci
+2 Muffler
+3 latin1_german2_ci
+4 Müller
+
+--- --slave--
+select * from mysqltest2.t1 order by a;
+a b
+1 latin1_german1_ci
+2 Muffler
+3 latin1_german2_ci
+4 Müller
+select "--- --INSERT--" as "";
+
+--- --INSERT--
+set @a= _cp850 'Müller' collate cp850_general_ci;
+truncate table t1;
+insert into t1 (b) values(collation(@a));
+
+--- --master--
+select * from t1 order by a;
+a b
+1 cp850_general_ci
+
+--- --slave--
+select * from mysqltest2.t1 order by a;
+a b
+1 cp850_general_ci
+drop database mysqltest2;
+drop database mysqltest3;
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # drop database if exists mysqltest2
+master-bin.000001 # Query # # drop database if exists mysqltest3
+master-bin.000001 # Query # # create database mysqltest2 character set latin2
+master-bin.000001 # Query # # create database mysqltest3
+master-bin.000001 # Query # # drop database mysqltest3
+master-bin.000001 # Query # # create database mysqltest3
+master-bin.000001 # Query # # use `mysqltest2`; create table t1 (a int auto_increment primary key, b varchar(100))engine=innodb
+master-bin.000001 # Query # # use `mysqltest2`; BEGIN
+master-bin.000001 # Table_map # # table_id: # (mysqltest2.t1)
+master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+master-bin.000001 # Query # # use `mysqltest2`; BEGIN
+master-bin.000001 # Table_map # # table_id: # (mysqltest2.t1)
+master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+master-bin.000001 # Query # # use `mysqltest2`; BEGIN
+master-bin.000001 # Table_map # # table_id: # (mysqltest2.t1)
+master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+master-bin.000001 # Query # # use `mysqltest2`; BEGIN
+master-bin.000001 # Table_map # # table_id: # (mysqltest2.t1)
+master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+master-bin.000001 # Query # # use `mysqltest2`; BEGIN
+master-bin.000001 # Table_map # # table_id: # (mysqltest2.t1)
+master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+master-bin.000001 # Query # # use `mysqltest2`; BEGIN
+master-bin.000001 # Query # # use `mysqltest2`; truncate table t1
+master-bin.000001 # Xid # # COMMIT /* XID */
+master-bin.000001 # Query # # use `mysqltest2`; BEGIN
+master-bin.000001 # Table_map # # table_id: # (mysqltest2.t1)
+master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+master-bin.000001 # Query # # use `mysqltest2`; BEGIN
+master-bin.000001 # Table_map # # table_id: # (mysqltest2.t1)
+master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+master-bin.000001 # Query # # use `mysqltest2`; BEGIN
+master-bin.000001 # Table_map # # table_id: # (mysqltest2.t1)
+master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+master-bin.000001 # Query # # use `mysqltest2`; BEGIN
+master-bin.000001 # Table_map # # table_id: # (mysqltest2.t1)
+master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+master-bin.000001 # Query # # use `mysqltest2`; BEGIN
+master-bin.000001 # Query # # use `mysqltest2`; truncate table t1
+master-bin.000001 # Xid # # COMMIT /* XID */
+master-bin.000001 # Query # # use `mysqltest2`; BEGIN
+master-bin.000001 # Table_map # # table_id: # (mysqltest2.t1)
+master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+master-bin.000001 # Query # # drop database mysqltest2
+master-bin.000001 # Query # # drop database mysqltest3
+select "--- --global--" as "";
+
+--- --global--
+set global character_set_server=latin2;
+set global character_set_server=latin1;
+set global character_set_server=latin2;
+set global character_set_server=latin1;
+select "--- --oneshot--" as "";
+
+--- --oneshot--
+set one_shot @@character_set_server=latin5;
+set @@max_join_size=1000;
+select @@character_set_server;
+@@character_set_server
+latin5
+select @@character_set_server;
+@@character_set_server
+latin1
+set @@character_set_server=latin5;
+select @@character_set_server;
+@@character_set_server
+latin5
+select @@character_set_server;
+@@character_set_server
+latin5
+set one_shot max_join_size=10;
+ERROR HY000: The 'SET ONE_SHOT' syntax is reserved for purposes internal to the MySQL server
+set character_set_client=9999999;
+ERROR 42000: Unknown character set: '9999999'
+set collation_server=9999998;
+ERROR HY000: Unknown collation: '9999998'
+select "--- --3943--" as "";
+
+--- --3943--
+use test;
+CREATE TABLE t1 (c1 VARBINARY(255), c2 VARBINARY(255))ENGINE=innodb;;
+SET CHARACTER_SET_CLIENT=koi8r,
+CHARACTER_SET_CONNECTION=cp1251,
+CHARACTER_SET_RESULTS=koi8r;
+INSERT INTO t1 (c1, c2) VALUES ('îÕ, ÚÁ ÒÙÂÁÌËÕ','îÕ, ÚÁ ÒÙÂÁÌËÕ');
+SET SQL_BIG_SELECTS=1;
+select hex(c1), hex(c2) from t1;
+hex(c1) hex(c2)
+CDF32C20E7E020F0FBE1E0EBEAF3 CDF32C20E7E020F0FBE1E0EBEAF3
+SET SQL_BIG_SELECTS=1;
+select hex(c1), hex(c2) from t1;
+hex(c1) hex(c2)
+CDF32C20E7E020F0FBE1E0EBEAF3 CDF32C20E7E020F0FBE1E0EBEAF3
+drop table t1;
+select "--- --6676--" as "";
+
+--- --6676--
+create table `t1` (
+`pk` varchar(10) not null default '',
+primary key (`pk`)
+) engine=innodb default charset=latin1;
+set @p=_latin1 'test';
+update t1 set pk='test' where pk=@p;
+drop table t1;
diff --git a/mysql-test/suite/rpl/r/rpl_row_colSize.result b/mysql-test/suite/rpl/r/rpl_row_colSize.result
index 9358e36cac6..6d002a722f1 100644
--- a/mysql-test/suite/rpl/r/rpl_row_colSize.result
+++ b/mysql-test/suite/rpl/r/rpl_row_colSize.result
@@ -37,7 +37,7 @@ Replicate_Do_Table
Replicate_Ignore_Table #
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
-Last_Errno 1534
+Last_Errno 1535
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 #
@@ -55,7 +55,7 @@ Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno #
Last_IO_Error #
-Last_SQL_Errno 1534
+Last_SQL_Errno 1535
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(*)
@@ -91,7 +91,7 @@ Replicate_Do_Table
Replicate_Ignore_Table #
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
-Last_Errno 1534
+Last_Errno 1535
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 #
@@ -109,7 +109,7 @@ Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno #
Last_IO_Error #
-Last_SQL_Errno 1534
+Last_SQL_Errno 1535
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(*)
@@ -145,7 +145,7 @@ Replicate_Do_Table
Replicate_Ignore_Table #
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
-Last_Errno 1534
+Last_Errno 1535
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 #
@@ -163,7 +163,7 @@ Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno #
Last_IO_Error #
-Last_SQL_Errno 1534
+Last_SQL_Errno 1535
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(*)
@@ -200,7 +200,7 @@ Replicate_Do_Table
Replicate_Ignore_Table #
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
-Last_Errno 1534
+Last_Errno 1535
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 #
@@ -218,7 +218,7 @@ Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno #
Last_IO_Error #
-Last_SQL_Errno 1534
+Last_SQL_Errno 1535
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(*)
@@ -255,7 +255,7 @@ Replicate_Do_Table
Replicate_Ignore_Table #
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
-Last_Errno 1534
+Last_Errno 1535
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 #
@@ -273,7 +273,7 @@ Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno #
Last_IO_Error #
-Last_SQL_Errno 1534
+Last_SQL_Errno 1535
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(*)
@@ -309,7 +309,7 @@ Replicate_Do_Table
Replicate_Ignore_Table #
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
-Last_Errno 1534
+Last_Errno 1535
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 #
@@ -327,7 +327,7 @@ Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno #
Last_IO_Error #
-Last_SQL_Errno 1534
+Last_SQL_Errno 1535
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(*)
@@ -364,7 +364,7 @@ Replicate_Do_Table
Replicate_Ignore_Table #
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
-Last_Errno 1534
+Last_Errno 1535
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 #
@@ -382,7 +382,7 @@ Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno #
Last_IO_Error #
-Last_SQL_Errno 1534
+Last_SQL_Errno 1535
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(*)
@@ -419,7 +419,7 @@ Replicate_Do_Table
Replicate_Ignore_Table #
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
-Last_Errno 1534
+Last_Errno 1535
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 #
@@ -437,7 +437,7 @@ Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno #
Last_IO_Error #
-Last_SQL_Errno 1534
+Last_SQL_Errno 1535
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(*)
@@ -505,7 +505,7 @@ Replicate_Do_Table
Replicate_Ignore_Table #
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
-Last_Errno 1534
+Last_Errno 1535
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 #
@@ -523,7 +523,7 @@ Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno #
Last_IO_Error #
-Last_SQL_Errno 1534
+Last_SQL_Errno 1535
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(*)
@@ -560,7 +560,7 @@ Replicate_Do_Table
Replicate_Ignore_Table #
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
-Last_Errno 1534
+Last_Errno 1535
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 #
@@ -578,7 +578,7 @@ Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno #
Last_IO_Error #
-Last_SQL_Errno 1534
+Last_SQL_Errno 1535
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(*)
@@ -614,7 +614,7 @@ Replicate_Do_Table
Replicate_Ignore_Table #
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
-Last_Errno 1534
+Last_Errno 1535
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 #
@@ -632,7 +632,7 @@ Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno #
Last_IO_Error #
-Last_SQL_Errno 1534
+Last_SQL_Errno 1535
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(*)
@@ -668,7 +668,7 @@ Replicate_Do_Table
Replicate_Ignore_Table #
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
-Last_Errno 1534
+Last_Errno 1535
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 #
@@ -686,7 +686,7 @@ Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno #
Last_IO_Error #
-Last_SQL_Errno 1534
+Last_SQL_Errno 1535
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(*)
@@ -723,7 +723,7 @@ Replicate_Do_Table
Replicate_Ignore_Table #
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
-Last_Errno 1534
+Last_Errno 1535
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 #
@@ -741,7 +741,7 @@ Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno #
Last_IO_Error #
-Last_SQL_Errno 1534
+Last_SQL_Errno 1535
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(*)
diff --git a/mysql-test/suite/rpl/r/rpl_row_create_table.result b/mysql-test/suite/rpl/r/rpl_row_create_table.result
index 84c36278e1d..ba5a13a57bf 100644
--- a/mysql-test/suite/rpl/r/rpl_row_create_table.result
+++ b/mysql-test/suite/rpl/r/rpl_row_create_table.result
@@ -127,7 +127,7 @@ NULL 5 10
NULL 6 12
CREATE TABLE t7 (UNIQUE(b)) SELECT a,b FROM tt3;
ERROR 23000: Duplicate entry '2' for key 'b'
-SHOW BINLOG EVENTS FROM 1100;
+SHOW BINLOG EVENTS FROM 1374;
Log_name Pos Event_type Server_id End_log_pos Info
CREATE TABLE t7 (a INT, b INT UNIQUE);
INSERT INTO t7 SELECT a,b FROM tt3;
@@ -137,11 +137,11 @@ a b
1 2
2 4
3 6
-SHOW BINLOG EVENTS FROM 1100;
+SHOW BINLOG EVENTS FROM 1374;
Log_name Pos Event_type Server_id End_log_pos Info
-# 1100 Query # 1200 use `test`; CREATE TABLE t7 (a INT, b INT UNIQUE)
-# 1200 Table_map # 1242 table_id: # (test.t7)
-# 1242 Write_rows # 1298 table_id: # flags: STMT_END_F
+# 1374 Query # 1474 use `test`; CREATE TABLE t7 (a INT, b INT UNIQUE)
+# 1474 Table_map # 1516 table_id: # (test.t7)
+# 1516 Write_rows # 1572 table_id: # flags: STMT_END_F
SELECT * FROM t7 ORDER BY a,b;
a b
1 2
@@ -154,10 +154,10 @@ INSERT INTO t7 SELECT a,b FROM tt4;
ROLLBACK;
Warnings:
Warning 1196 Some non-transactional changed tables couldn't be rolled back
-SHOW BINLOG EVENTS FROM 1298;
+SHOW BINLOG EVENTS FROM 1572;
Log_name Pos Event_type Server_id End_log_pos Info
-# 1298 Table_map # 1340 table_id: # (test.t7)
-# 1340 Write_rows # 1396 table_id: # flags: STMT_END_F
+# 1572 Table_map # 1614 table_id: # (test.t7)
+# 1614 Write_rows # 1670 table_id: # flags: STMT_END_F
SELECT * FROM t7 ORDER BY a,b;
a b
1 2
@@ -192,10 +192,10 @@ Create Table CREATE TABLE `t9` (
`a` int(11) DEFAULT NULL,
`b` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
-SHOW BINLOG EVENTS FROM 1396;
+SHOW BINLOG EVENTS FROM 1670;
Log_name Pos Event_type Server_id End_log_pos Info
-# 1396 Query # 1482 use `test`; CREATE TABLE t8 LIKE t4
-# 1482 Query # 1621 use `test`; CREATE TABLE `t9` (
+# 1670 Query # 1756 use `test`; CREATE TABLE t8 LIKE t4
+# 1756 Query # 1895 use `test`; CREATE TABLE `t9` (
`a` int(11) DEFAULT NULL,
`b` int(11) DEFAULT NULL
)
@@ -398,14 +398,15 @@ SELECT * FROM t2 ORDER BY a;
a
SHOW BINLOG EVENTS FROM 637;
Log_name Pos Event_type Server_id End_log_pos Info
-# 637 Query # 717 use `test`; TRUNCATE TABLE t2
-# 717 Xid # 744 COMMIT /* XID */
-# 744 Query # 812 use `test`; BEGIN
-# 812 Table_map # 853 table_id: # (test.t2)
-# 853 Write_rows # 897 table_id: # flags: STMT_END_F
-# 897 Table_map # 938 table_id: # (test.t2)
-# 938 Write_rows # 977 table_id: # flags: STMT_END_F
-# 977 Query # 1048 use `test`; ROLLBACK
+# 637 Query # 705 use `test`; BEGIN
+# 705 Query # 785 use `test`; TRUNCATE TABLE t2
+# 785 Xid # 812 COMMIT /* XID */
+# 812 Query # 880 use `test`; BEGIN
+# 880 Table_map # 921 table_id: # (test.t2)
+# 921 Write_rows # 965 table_id: # flags: STMT_END_F
+# 965 Table_map # 1006 table_id: # (test.t2)
+# 1006 Write_rows # 1045 table_id: # flags: STMT_END_F
+# 1045 Query # 1116 use `test`; ROLLBACK
SELECT * FROM t2 ORDER BY a;
a
DROP TABLE t1,t2;
diff --git a/mysql-test/suite/rpl/r/rpl_row_extraColmaster_ndb.result b/mysql-test/suite/rpl/r/rpl_row_extraColmaster_ndb.result
deleted file mode 100644
index 0b1f2e6c8bf..00000000000
--- a/mysql-test/suite/rpl/r/rpl_row_extraColmaster_ndb.result
+++ /dev/null
Binary files differ
diff --git a/mysql-test/suite/rpl/r/rpl_row_log_innodb.result b/mysql-test/suite/rpl/r/rpl_row_log_innodb.result
index 9ed35f34dc5..e08c47558a0 100644
--- a/mysql-test/suite/rpl/r/rpl_row_log_innodb.result
+++ b/mysql-test/suite/rpl/r/rpl_row_log_innodb.result
@@ -20,11 +20,13 @@ show binlog events;
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Format_desc 1 # Server ver: VERSION, Binlog ver: 4
master-bin.000001 # Query 1 # use `test`; create table t1(n int not null auto_increment primary key)ENGINE=InnoDB
+master-bin.000001 # Query 1 # use `test`; BEGIN
master-bin.000001 # Table_map 1 # table_id: # (test.t1)
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
master-bin.000001 # Xid 1 # COMMIT /* XID */
master-bin.000001 # Query 1 # use `test`; drop table t1
master-bin.000001 # Query 1 # use `test`; create table t1 (word char(20) not null)ENGINE=InnoDB
+master-bin.000001 # Query 1 # use `test`; BEGIN
master-bin.000001 # Table_map 1 # table_id: # (test.t1)
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
master-bin.000001 # Xid 1 # COMMIT /* XID */
@@ -34,10 +36,10 @@ master-bin.000001 # Query 1 # use `test`; create table t1(n int not null auto_in
show binlog events from 106 limit 2;
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Query 1 # use `test`; create table t1(n int not null auto_increment primary key)ENGINE=InnoDB
-master-bin.000001 # Table_map 1 # table_id: # (test.t1)
+master-bin.000001 # Query 1 # use `test`; BEGIN
show binlog events from 106 limit 2,1;
Log_name Pos Event_type Server_id End_log_pos Info
-master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
+master-bin.000001 # Table_map 1 # table_id: # (test.t1)
flush logs;
create table t3 (a int)ENGINE=InnoDB;
select * from t1 order by 1 asc;
@@ -194,11 +196,13 @@ insert into t2 values (1);
show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Query # # use `test`; create table t1(n int not null auto_increment primary key)ENGINE=InnoDB
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Table_map # # table_id: # (test.t1)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
master-bin.000001 # Xid # # COMMIT /* XID */
master-bin.000001 # Query # # use `test`; drop table t1
master-bin.000001 # Query # # use `test`; create table t1 (word char(20) not null)ENGINE=InnoDB
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Table_map # # table_id: # (test.t1)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
master-bin.000001 # Xid # # COMMIT /* XID */
@@ -208,27 +212,30 @@ Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000002 # Format_desc 1 # Server ver: VERSION, Binlog ver: 4
master-bin.000002 # Query 1 # use `test`; create table t3 (a int)ENGINE=InnoDB
master-bin.000002 # Query 1 # use `test`; create table t2 (n int)ENGINE=InnoDB
+master-bin.000002 # Query 1 # use `test`; BEGIN
master-bin.000002 # Table_map 1 # table_id: # (test.t2)
master-bin.000002 # Write_rows 1 # table_id: # flags: STMT_END_F
master-bin.000002 # Xid 1 # COMMIT /* XID */
show binary logs;
Log_name File_size
-master-bin.000001 1320
-master-bin.000002 406
+master-bin.000001 1456
+master-bin.000002 474
start slave;
show binary logs;
Log_name File_size
-slave-bin.000001 1418
-slave-bin.000002 307
+slave-bin.000001 1536
+slave-bin.000002 366
show binlog events in 'slave-bin.000001' from 4;
Log_name Pos Event_type Server_id End_log_pos Info
slave-bin.000001 # Format_desc 2 # Server ver: VERSION, Binlog ver: 4
slave-bin.000001 # Query 1 # use `test`; create table t1(n int not null auto_increment primary key)ENGINE=InnoDB
+slave-bin.000001 # Query 1 # BEGIN
slave-bin.000001 # Table_map 1 # table_id: # (test.t1)
slave-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
slave-bin.000001 # Xid 1 # COMMIT /* XID */
slave-bin.000001 # Query 1 # use `test`; drop table t1
slave-bin.000001 # Query 1 # use `test`; create table t1 (word char(20) not null)ENGINE=InnoDB
+slave-bin.000001 # Query 1 # BEGIN
slave-bin.000001 # Table_map 1 # table_id: # (test.t1)
slave-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
slave-bin.000001 # Xid 1 # COMMIT /* XID */
@@ -238,6 +245,7 @@ show binlog events in 'slave-bin.000002' from 4;
Log_name Pos Event_type Server_id End_log_pos Info
slave-bin.000002 # Format_desc 2 # Server ver: VERSION, Binlog ver: 4
slave-bin.000002 # Query 1 # use `test`; create table t2 (n int)ENGINE=InnoDB
+slave-bin.000002 # Query 1 # BEGIN
slave-bin.000002 # Table_map 1 # table_id: # (test.t2)
slave-bin.000002 # Write_rows 1 # table_id: # flags: STMT_END_F
slave-bin.000002 # Xid 1 # COMMIT /* XID */
@@ -248,7 +256,7 @@ Master_User root
Master_Port MASTER_PORT
Connect_Retry 1
Master_Log_File master-bin.000002
-Read_Master_Log_Pos 406
+Read_Master_Log_Pos 474
Relay_Log_File #
Relay_Log_Pos #
Relay_Master_Log_File master-bin.000002
@@ -263,7 +271,7 @@ Replicate_Wild_Ignore_Table
Last_Errno 0
Last_Error
Skip_Counter 0
-Exec_Master_Log_Pos 406
+Exec_Master_Log_Pos 474
Relay_Log_Space #
Until_Condition None
Until_Log_File
diff --git a/mysql-test/suite/rpl/r/rpl_row_max_relay_size.result b/mysql-test/suite/rpl/r/rpl_row_max_relay_size.result
index 06266f1de82..392f5904233 100644
--- a/mysql-test/suite/rpl/r/rpl_row_max_relay_size.result
+++ b/mysql-test/suite/rpl/r/rpl_row_max_relay_size.result
@@ -30,7 +30,7 @@ Master_User root
Master_Port MASTER_PORT
Connect_Retry 1
Master_Log_File master-bin.000001
-Read_Master_Log_Pos 60268
+Read_Master_Log_Pos #
Relay_Log_File #
Relay_Log_Pos #
Relay_Master_Log_File master-bin.000001
@@ -45,7 +45,7 @@ Replicate_Wild_Ignore_Table
Last_Errno 0
Last_Error
Skip_Counter 0
-Exec_Master_Log_Pos 60268
+Exec_Master_Log_Pos #
Relay_Log_Space #
Until_Condition None
Until_Log_File
@@ -78,7 +78,7 @@ Master_User root
Master_Port MASTER_PORT
Connect_Retry 1
Master_Log_File master-bin.000001
-Read_Master_Log_Pos 60268
+Read_Master_Log_Pos #
Relay_Log_File #
Relay_Log_Pos #
Relay_Master_Log_File master-bin.000001
@@ -93,7 +93,7 @@ Replicate_Wild_Ignore_Table
Last_Errno 0
Last_Error
Skip_Counter 0
-Exec_Master_Log_Pos 60268
+Exec_Master_Log_Pos #
Relay_Log_Space #
Until_Condition None
Until_Log_File
@@ -126,7 +126,7 @@ Master_User root
Master_Port MASTER_PORT
Connect_Retry 1
Master_Log_File master-bin.000001
-Read_Master_Log_Pos 60268
+Read_Master_Log_Pos #
Relay_Log_File #
Relay_Log_Pos #
Relay_Master_Log_File master-bin.000001
@@ -141,7 +141,7 @@ Replicate_Wild_Ignore_Table
Last_Errno 0
Last_Error
Skip_Counter 0
-Exec_Master_Log_Pos 60268
+Exec_Master_Log_Pos #
Relay_Log_Space #
Until_Condition None
Until_Log_File
@@ -171,7 +171,7 @@ Master_User root
Master_Port MASTER_PORT
Connect_Retry 1
Master_Log_File
-Read_Master_Log_Pos 4
+Read_Master_Log_Pos #
Relay_Log_File #
Relay_Log_Pos #
Relay_Master_Log_File
@@ -186,7 +186,7 @@ Replicate_Wild_Ignore_Table
Last_Errno 0
Last_Error
Skip_Counter 0
-Exec_Master_Log_Pos 0
+Exec_Master_Log_Pos #
Relay_Log_Space #
Until_Condition None
Until_Log_File
@@ -217,7 +217,7 @@ Master_User root
Master_Port MASTER_PORT
Connect_Retry 1
Master_Log_File master-bin.000001
-Read_Master_Log_Pos 60354
+Read_Master_Log_Pos #
Relay_Log_File #
Relay_Log_Pos #
Relay_Master_Log_File master-bin.000001
@@ -232,7 +232,7 @@ Replicate_Wild_Ignore_Table
Last_Errno 0
Last_Error
Skip_Counter 0
-Exec_Master_Log_Pos 60354
+Exec_Master_Log_Pos #
Relay_Log_Space #
Until_Condition None
Until_Log_File
@@ -261,7 +261,7 @@ Master_User root
Master_Port MASTER_PORT
Connect_Retry 1
Master_Log_File master-bin.000001
-Read_Master_Log_Pos 60430
+Read_Master_Log_Pos #
Relay_Log_File #
Relay_Log_Pos #
Relay_Master_Log_File master-bin.000001
@@ -276,7 +276,7 @@ Replicate_Wild_Ignore_Table
Last_Errno 0
Last_Error
Skip_Counter 0
-Exec_Master_Log_Pos 60430
+Exec_Master_Log_Pos #
Relay_Log_Space #
Until_Condition None
Until_Log_File
@@ -295,10 +295,8 @@ Last_SQL_Errno 0
Last_SQL_Error
flush logs;
show master status;
-File master-bin.000002
-Position 106
-Binlog_Do_DB <Binlog_Ignore_DB>
-Binlog_Ignore_DB
+File Position Binlog_Do_DB Binlog_Ignore_DB
+master-bin.000002 # <Binlog_Do_DB> <Binlog_Ignore_DB>
set global max_binlog_size= @my_max_binlog_size;
#
# End of 4.1 tests
diff --git a/mysql-test/suite/rpl/r/rpl_row_mysqlbinlog.result b/mysql-test/suite/rpl/r/rpl_row_mysqlbinlog.result
index e2df1459ac0..1d5b118d822 100644
--- a/mysql-test/suite/rpl/r/rpl_row_mysqlbinlog.result
+++ b/mysql-test/suite/rpl/r/rpl_row_mysqlbinlog.result
@@ -155,13 +155,15 @@ c1 c3 c4 c5
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
+ROLLBACK/*!*/;
use test/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1/*!*/;
SET @@session.sql_mode=0/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
-CREATE TABLE t3(c1 INT NOT NULL PRIMARY KEY, c2 LONGBLOB, c3 TIMESTAMP, c4 TEXT, c5 FLOAT)/*!*/;
+CREATE TABLE t3(c1 INT NOT NULL PRIMARY KEY, c2 LONGBLOB, c3 TIMESTAMP, c4 TEXT, c5 FLOAT)
+/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
@@ -178,13 +180,17 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
SET @@session.sql_mode=0/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
-DROP TABLE IF EXISTS t1,t2,t3/*!*/;
+DROP TABLE IF EXISTS t1,t2,t3
+/*!*/;
SET TIMESTAMP=1000000000/*!*/;
-CREATE TABLE t1(word VARCHAR(20))/*!*/;
+CREATE TABLE t1(word VARCHAR(20))
+/*!*/;
SET TIMESTAMP=1000000000/*!*/;
-CREATE TABLE t2(id INT AUTO_INCREMENT NOT NULL PRIMARY KEY)/*!*/;
+CREATE TABLE t2(id INT AUTO_INCREMENT NOT NULL PRIMARY KEY)
+/*!*/;
SET TIMESTAMP=1000000000/*!*/;
-CREATE TABLE t3(c1 INT NOT NULL PRIMARY KEY, c2 LONGBLOB, c3 TIMESTAMP, c4 TEXT, c5 FLOAT)/*!*/;
+CREATE TABLE t3(c1 INT NOT NULL PRIMARY KEY, c2 LONGBLOB, c3 TIMESTAMP, c4 TEXT, c5 FLOAT)
+/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
@@ -279,13 +285,17 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
SET @@session.sql_mode=0/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
-DROP TABLE IF EXISTS t1,t2,t3/*!*/;
+DROP TABLE IF EXISTS t1,t2,t3
+/*!*/;
SET TIMESTAMP=1000000000/*!*/;
-CREATE TABLE t1(word VARCHAR(20))/*!*/;
+CREATE TABLE t1(word VARCHAR(20))
+/*!*/;
SET TIMESTAMP=1000000000/*!*/;
-CREATE TABLE t2(id INT AUTO_INCREMENT NOT NULL PRIMARY KEY)/*!*/;
+CREATE TABLE t2(id INT AUTO_INCREMENT NOT NULL PRIMARY KEY)
+/*!*/;
SET TIMESTAMP=1000000000/*!*/;
-CREATE TABLE t3(c1 INT NOT NULL PRIMARY KEY, c2 LONGBLOB, c3 TIMESTAMP, c4 TEXT, c5 FLOAT)/*!*/;
+CREATE TABLE t3(c1 INT NOT NULL PRIMARY KEY, c2 LONGBLOB, c3 TIMESTAMP, c4 TEXT, c5 FLOAT)
+/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
@@ -295,13 +305,15 @@ ROLLBACK /* added by mysqlbinlog */;
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
+ROLLBACK/*!*/;
use test/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1/*!*/;
SET @@session.sql_mode=0/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
-CREATE TABLE t3(c1 INT NOT NULL PRIMARY KEY, c2 LONGBLOB, c3 TIMESTAMP, c4 TEXT, c5 FLOAT)/*!*/;
+CREATE TABLE t3(c1 INT NOT NULL PRIMARY KEY, c2 LONGBLOB, c3 TIMESTAMP, c4 TEXT, c5 FLOAT)
+/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
diff --git a/mysql-test/suite/rpl/r/rpl_row_mystery22.result b/mysql-test/suite/rpl/r/rpl_row_mystery22.result
index bcf65e4ede3..5e42a89d741 100644
--- a/mysql-test/suite/rpl/r/rpl_row_mystery22.result
+++ b/mysql-test/suite/rpl/r/rpl_row_mystery22.result
@@ -5,6 +5,7 @@ reset slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
start slave;
create table t1(n int auto_increment primary key, s char(10));
+set @@global.slave_exec_mode= 'IDEMPOTENT';
insert into t1 values (2,'old');
insert into t1 values(NULL,'new');
insert into t1 values(NULL,'new');
@@ -28,3 +29,4 @@ n s
1 new
3 new
drop table t1;
+set @@global.slave_exec_mode= default;
diff --git a/mysql-test/suite/rpl/r/rpl_row_reset_slave.result b/mysql-test/suite/rpl/r/rpl_row_reset_slave.result
index fd23e254072..6126ec4bacc 100644
--- a/mysql-test/suite/rpl/r/rpl_row_reset_slave.result
+++ b/mysql-test/suite/rpl/r/rpl_row_reset_slave.result
@@ -11,7 +11,7 @@ Master_User root
Master_Port MASTER_PORT
Connect_Retry 1
Master_Log_File master-bin.000001
-Read_Master_Log_Pos 106
+Read_Master_Log_Pos #
Relay_Log_File #
Relay_Log_Pos #
Relay_Master_Log_File master-bin.000001
@@ -26,7 +26,7 @@ Replicate_Wild_Ignore_Table
Last_Errno 0
Last_Error
Skip_Counter 0
-Exec_Master_Log_Pos 106
+Exec_Master_Log_Pos #
Relay_Log_Space #
Until_Condition None
Until_Log_File
@@ -52,7 +52,7 @@ Master_User test
Master_Port MASTER_PORT
Connect_Retry 1
Master_Log_File master-bin.000001
-Read_Master_Log_Pos 106
+Read_Master_Log_Pos #
Relay_Log_File #
Relay_Log_Pos #
Relay_Master_Log_File master-bin.000001
@@ -67,7 +67,7 @@ Replicate_Wild_Ignore_Table
Last_Errno 0
Last_Error
Skip_Counter 0
-Exec_Master_Log_Pos 106
+Exec_Master_Log_Pos #
Relay_Log_Space #
Until_Condition None
Until_Log_File
@@ -92,7 +92,7 @@ Master_User root
Master_Port MASTER_PORT
Connect_Retry 1
Master_Log_File
-Read_Master_Log_Pos 4
+Read_Master_Log_Pos #
Relay_Log_File #
Relay_Log_Pos #
Relay_Master_Log_File
@@ -107,7 +107,7 @@ Replicate_Wild_Ignore_Table
Last_Errno 0
Last_Error
Skip_Counter 0
-Exec_Master_Log_Pos 0
+Exec_Master_Log_Pos #
Relay_Log_Space #
Until_Condition None
Until_Log_File
@@ -132,7 +132,7 @@ Master_User root
Master_Port MASTER_PORT
Connect_Retry 1
Master_Log_File master-bin.000001
-Read_Master_Log_Pos 106
+Read_Master_Log_Pos #
Relay_Log_File #
Relay_Log_Pos #
Relay_Master_Log_File master-bin.000001
@@ -147,7 +147,7 @@ Replicate_Wild_Ignore_Table
Last_Errno 0
Last_Error
Skip_Counter 0
-Exec_Master_Log_Pos 106
+Exec_Master_Log_Pos #
Relay_Log_Space #
Until_Condition None
Until_Log_File
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 566537ab745..6859a406b16 100644
--- a/mysql-test/suite/rpl/r/rpl_row_tabledefs_2myisam.result
+++ b/mysql-test/suite/rpl/r/rpl_row_tabledefs_2myisam.result
@@ -37,6 +37,7 @@ ALTER TABLE t8 ADD e1 INT NOT NULL DEFAULT 0, ADD e2 INT NOT NULL DEFAULT 0,
ADD e3 INT NOT NULL DEFAULT 0, ADD e4 INT NOT NULL DEFAULT 0,
ADD e5 INT NOT NULL DEFAULT 0, ADD e6 INT NOT NULL DEFAULT 0,
ADD e7 INT NOT NULL DEFAULT 0, ADD e8 INT NOT NULL DEFAULT 0;
+set @@global.slave_exec_mode= 'IDEMPOTENT';
INSERT INTO t1_int VALUES (2, 4, 4711);
INSERT INTO t1_char VALUES (2, 4, 'Foo is a bar');
INSERT INTO t1_bit VALUES (2, 4, b'101', b'11100', b'01');
@@ -60,6 +61,7 @@ a b
1 2
2 5
**** On Slave ****
+set @@global.slave_exec_mode= default;
SELECT a,b,x FROM t1_int ORDER BY a;
a b x
1 2 42
@@ -123,7 +125,7 @@ Replicate_Ignore_Table
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
Last_Errno 1364
-Last_Error Error in Write_rows event: error during transaction execution on table test.t1_nodef.
+Last_Error <Last_Error>
Skip_Counter 0
Exec_Master_Log_Pos #
Relay_Log_Space #
@@ -139,9 +141,9 @@ Master_SSL_Key
Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno 0
-Last_IO_Error
+Last_IO_Error <Last_IO_Error>
Last_SQL_Errno 1364
-Last_SQL_Error Error in Write_rows event: error during transaction execution on table test.t1_nodef.
+Last_SQL_Error <Last_SQL_Error>
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
START SLAVE;
INSERT INTO t9 VALUES (2);
@@ -174,7 +176,7 @@ Replicate_Ignore_Table
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
Last_Errno 0
-Last_Error
+Last_Error <Last_Error>
Skip_Counter 0
Exec_Master_Log_Pos #
Relay_Log_Space #
@@ -190,9 +192,9 @@ Master_SSL_Key
Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno 0
-Last_IO_Error
+Last_IO_Error <Last_IO_Error>
Last_SQL_Errno 0
-Last_SQL_Error
+Last_SQL_Error <Last_SQL_Error>
INSERT INTO t9 VALUES (4);
INSERT INTO t4 VALUES (4);
SHOW SLAVE STATUS;
@@ -214,8 +216,8 @@ Replicate_Do_Table
Replicate_Ignore_Table
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
-Last_Errno 1534
-Last_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 3, test.t4 has type 4
+Last_Errno 1535
+Last_Error <Last_Error>
Skip_Counter 0
Exec_Master_Log_Pos #
Relay_Log_Space #
@@ -231,9 +233,9 @@ Master_SSL_Key
Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno 0
-Last_IO_Error
-Last_SQL_Errno 1534
-Last_SQL_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 3, test.t4 has type 4
+Last_IO_Error <Last_IO_Error>
+Last_SQL_Errno 1535
+Last_SQL_Error <Last_SQL_Error>
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
START SLAVE;
INSERT INTO t9 VALUES (5);
@@ -257,8 +259,8 @@ Replicate_Do_Table
Replicate_Ignore_Table
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
-Last_Errno 1534
-Last_Error Table definition on master and slave does not match: Column 1 type mismatch - received type 3, test.t5 has type 4
+Last_Errno 1535
+Last_Error <Last_Error>
Skip_Counter 0
Exec_Master_Log_Pos #
Relay_Log_Space #
@@ -274,9 +276,9 @@ Master_SSL_Key
Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno 0
-Last_IO_Error
-Last_SQL_Errno 1534
-Last_SQL_Error Table definition on master and slave does not match: Column 1 type mismatch - received type 3, test.t5 has type 4
+Last_IO_Error <Last_IO_Error>
+Last_SQL_Errno 1535
+Last_SQL_Error <Last_SQL_Error>
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
START SLAVE;
INSERT INTO t9 VALUES (6);
@@ -300,8 +302,8 @@ Replicate_Do_Table
Replicate_Ignore_Table
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
-Last_Errno 1534
-Last_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 3, test.t6 has type 4
+Last_Errno 1535
+Last_Error <Last_Error>
Skip_Counter 0
Exec_Master_Log_Pos #
Relay_Log_Space #
@@ -317,9 +319,9 @@ Master_SSL_Key
Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno 0
-Last_IO_Error
-Last_SQL_Errno 1534
-Last_SQL_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 3, test.t6 has type 4
+Last_IO_Error <Last_IO_Error>
+Last_SQL_Errno 1535
+Last_SQL_Error <Last_SQL_Error>
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
START SLAVE;
INSERT INTO t9 VALUES (6);
@@ -343,7 +345,7 @@ Replicate_Ignore_Table
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
Last_Errno 0
-Last_Error
+Last_Error <Last_Error>
Skip_Counter 0
Exec_Master_Log_Pos #
Relay_Log_Space #
@@ -359,9 +361,9 @@ Master_SSL_Key
Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno 0
-Last_IO_Error
+Last_IO_Error <Last_IO_Error>
Last_SQL_Errno 0
-Last_SQL_Error
+Last_SQL_Error <Last_SQL_Error>
INSERT INTO t7 VALUES (1),(2),(3);
INSERT INTO t8 VALUES (1),(2),(3);
SELECT * FROM t7 ORDER BY a;
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 83df75b81e9..17b2a2f7b52 100644
--- a/mysql-test/suite/rpl/r/rpl_row_tabledefs_3innodb.result
+++ b/mysql-test/suite/rpl/r/rpl_row_tabledefs_3innodb.result
@@ -37,6 +37,7 @@ ALTER TABLE t8 ADD e1 INT NOT NULL DEFAULT 0, ADD e2 INT NOT NULL DEFAULT 0,
ADD e3 INT NOT NULL DEFAULT 0, ADD e4 INT NOT NULL DEFAULT 0,
ADD e5 INT NOT NULL DEFAULT 0, ADD e6 INT NOT NULL DEFAULT 0,
ADD e7 INT NOT NULL DEFAULT 0, ADD e8 INT NOT NULL DEFAULT 0;
+set @@global.slave_exec_mode= 'IDEMPOTENT';
INSERT INTO t1_int VALUES (2, 4, 4711);
INSERT INTO t1_char VALUES (2, 4, 'Foo is a bar');
INSERT INTO t1_bit VALUES (2, 4, b'101', b'11100', b'01');
@@ -60,6 +61,7 @@ a b
1 2
2 5
**** On Slave ****
+set @@global.slave_exec_mode= default;
SELECT a,b,x FROM t1_int ORDER BY a;
a b x
1 2 42
@@ -123,7 +125,7 @@ Replicate_Ignore_Table
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
Last_Errno 1364
-Last_Error Error in Write_rows event: error during transaction execution on table test.t1_nodef.
+Last_Error <Last_Error>
Skip_Counter 0
Exec_Master_Log_Pos #
Relay_Log_Space #
@@ -139,9 +141,9 @@ Master_SSL_Key
Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno 0
-Last_IO_Error
+Last_IO_Error <Last_IO_Error>
Last_SQL_Errno 1364
-Last_SQL_Error Error in Write_rows event: error during transaction execution on table test.t1_nodef.
+Last_SQL_Error <Last_SQL_Error>
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
START SLAVE;
INSERT INTO t9 VALUES (2);
@@ -174,7 +176,7 @@ Replicate_Ignore_Table
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
Last_Errno 0
-Last_Error
+Last_Error <Last_Error>
Skip_Counter 0
Exec_Master_Log_Pos #
Relay_Log_Space #
@@ -190,9 +192,9 @@ Master_SSL_Key
Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno 0
-Last_IO_Error
+Last_IO_Error <Last_IO_Error>
Last_SQL_Errno 0
-Last_SQL_Error
+Last_SQL_Error <Last_SQL_Error>
INSERT INTO t9 VALUES (4);
INSERT INTO t4 VALUES (4);
SHOW SLAVE STATUS;
@@ -214,8 +216,8 @@ Replicate_Do_Table
Replicate_Ignore_Table
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
-Last_Errno 1534
-Last_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 3, test.t4 has type 4
+Last_Errno 1535
+Last_Error <Last_Error>
Skip_Counter 0
Exec_Master_Log_Pos #
Relay_Log_Space #
@@ -231,9 +233,9 @@ Master_SSL_Key
Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno 0
-Last_IO_Error
-Last_SQL_Errno 1534
-Last_SQL_Error Table definition on master and slave does not match: Column 0 type mismatch - received type 3, test.t4 has type 4
+Last_IO_Error <Last_IO_Error>
+Last_SQL_Errno 1535
+Last_SQL_Error <Last_SQL_Error>
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
START SLAVE;
INSERT INTO t9 VALUES (5);
@@ -257,8 +259,8 @@ Replicate_Do_Table
Replicate_Ignore_Table
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
-Last_Errno 1534
-Last_Error Table definition on master and slave does not match: Column 1 type mismatch - received type 3, test.t5 has type 4
+Last_Errno 1535
+Last_Error <Last_Error>
Skip_Counter 0
Exec_Master_Log_Pos #
Relay_Log_Space #
@@ -274,9 +276,9 @@ Master_SSL_Key
Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno 0
-Last_IO_Error
-Last_SQL_Errno 1534
-Last_SQL_Error Table definition on master and slave does not match: Column 1 type mismatch - received type 3, test.t5 has type 4
+Last_IO_Error <Last_IO_Error>
+Last_SQL_Errno 1535
+Last_SQL_Error <Last_SQL_Error>
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
START SLAVE;
INSERT INTO t9 VALUES (6);
@@ -300,8 +302,8 @@ Replicate_Do_Table
Replicate_Ignore_Table
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
-Last_Errno 1534
-Last_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 3, test.t6 has type 4
+Last_Errno 1535
+Last_Error <Last_Error>
Skip_Counter 0
Exec_Master_Log_Pos #
Relay_Log_Space #
@@ -317,9 +319,9 @@ Master_SSL_Key
Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno 0
-Last_IO_Error
-Last_SQL_Errno 1534
-Last_SQL_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 3, test.t6 has type 4
+Last_IO_Error <Last_IO_Error>
+Last_SQL_Errno 1535
+Last_SQL_Error <Last_SQL_Error>
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
START SLAVE;
INSERT INTO t9 VALUES (6);
@@ -343,7 +345,7 @@ Replicate_Ignore_Table
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
Last_Errno 0
-Last_Error
+Last_Error <Last_Error>
Skip_Counter 0
Exec_Master_Log_Pos #
Relay_Log_Space #
@@ -359,9 +361,9 @@ Master_SSL_Key
Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno 0
-Last_IO_Error
+Last_IO_Error <Last_IO_Error>
Last_SQL_Errno 0
-Last_SQL_Error
+Last_SQL_Error <Last_SQL_Error>
INSERT INTO t7 VALUES (1),(2),(3);
INSERT INTO t8 VALUES (1),(2),(3);
SELECT * FROM t7 ORDER BY a;
diff --git a/mysql-test/suite/rpl/r/rpl_row_trig001.result b/mysql-test/suite/rpl/r/rpl_row_trig001.result
index 6665dc6d555..ea0ef27fccd 100644
--- a/mysql-test/suite/rpl/r/rpl_row_trig001.result
+++ b/mysql-test/suite/rpl/r/rpl_row_trig001.result
@@ -8,7 +8,7 @@ CREATE TABLE test.t1 (n MEDIUMINT NOT NULL, d DATETIME, PRIMARY KEY(n));
CREATE TABLE test.t2 (n MEDIUMINT NOT NULL AUTO_INCREMENT, f FLOAT, d DATETIME, PRIMARY KEY(n));
CREATE TABLE test.t3 (n MEDIUMINT NOT NULL AUTO_INCREMENT, d DATETIME, PRIMARY KEY(n));
INSERT INTO test.t1 VALUES (1,NOW());
-CREATE TRIGGER test.t2_ai AFTER INSERT ON test.t2 FOR EACH ROW UPDATE test.t1 SET d=NOW() where n = 1;//
+CREATE TRIGGER test.t2_ai AFTER INSERT ON test.t2 FOR EACH ROW UPDATE test.t1 SET d=NOW() where n = 1//
CREATE PROCEDURE test.p3()
BEGIN
INSERT INTO test.t3 (d) VALUES (NOW());
@@ -18,6 +18,7 @@ CREATE PROCEDURE test.p2()
BEGIN
INSERT INTO test.t2 (f,d) VALUES (RAND(),NOW());
END//
+INSERT INTO test.t1 VALUES (1+1, NOW());
<End test section 2 (Tiggers & SP)>
-----------------------------------
diff --git a/mysql-test/suite/rpl/r/rpl_server_id.result b/mysql-test/suite/rpl/r/rpl_server_id.result
new file mode 100644
index 00000000000..1e74394c122
--- /dev/null
+++ b/mysql-test/suite/rpl/r/rpl_server_id.result
@@ -0,0 +1,34 @@
+set global server_id=1;
+reset master;
+drop table if exists t1,t2,t3;
+create table t1 (a int);
+select @@server_id;
+@@server_id
+1
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query 1 # use `test`; drop table if exists t1,t2,t3
+master-bin.000001 # Query 1 # use `test`; create table t1 (a int)
+set global server_id=2;
+create table t2 (b int);
+select @@server_id;
+@@server_id
+2
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query 1 # use `test`; drop table if exists t1,t2,t3
+master-bin.000001 # Query 1 # use `test`; create table t1 (a int)
+master-bin.000001 # Query 2 # use `test`; create table t2 (b int)
+set global server_id=3;
+create table t3 (c int);
+select @@server_id;
+@@server_id
+3
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query 1 # use `test`; drop table if exists t1,t2,t3
+master-bin.000001 # Query 1 # use `test`; create table t1 (a int)
+master-bin.000001 # Query 2 # use `test`; create table t2 (b int)
+master-bin.000001 # Query 3 # use `test`; create table t3 (c int)
+set global server_id=1;
+drop table t1,t2,t3;
diff --git a/mysql-test/suite/rpl/r/rpl_skip_error.result b/mysql-test/suite/rpl/r/rpl_skip_error.result
index 525909387b3..aacc89f7a47 100644
--- a/mysql-test/suite/rpl/r/rpl_skip_error.result
+++ b/mysql-test/suite/rpl/r/rpl_skip_error.result
@@ -29,8 +29,43 @@ select * from t1;
a
1
2
-3
-show slave status;
-Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master Master_SSL_Verify_Server_Cert Last_IO_Errno Last_IO_Error Last_SQL_Errno Last_SQL_Error
-# 127.0.0.1 root MASTER_PORT 1 master-bin.000001 786 # # master-bin.000001 Yes Yes 0 0 786 # None 0 No # No 0 0
+SHOW SLAVE STATUS;
+Slave_IO_State #
+Master_Host 127.0.0.1
+Master_User root
+Master_Port 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 Yes
+Replicate_Do_DB
+Replicate_Ignore_DB
+Replicate_Do_Table
+Replicate_Ignore_Table #
+Replicate_Wild_Do_Table
+Replicate_Wild_Ignore_Table
+Last_Errno 0
+Last_Error
+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 0
+Last_SQL_Error
drop table t1;
diff --git a/mysql-test/suite/rpl/r/rpl_slave_skip.result b/mysql-test/suite/rpl/r/rpl_slave_skip.result
index 8e492fe4732..f89fa34e319 100644
--- a/mysql-test/suite/rpl/r/rpl_slave_skip.result
+++ b/mysql-test/suite/rpl/r/rpl_slave_skip.result
@@ -142,3 +142,211 @@ Last_SQL_Errno 0
Last_SQL_Error
**** On Master ****
DROP TABLE t1, t2;
+SET SESSION BINLOG_FORMAT=ROW;
+SET AUTOCOMMIT=0;
+CREATE TABLE t1 (a INT, b VARCHAR(20)) ENGINE=myisam;
+CREATE TABLE t2 (a INT, b VARCHAR(20)) ENGINE=myisam;
+CREATE TABLE t3 (a INT, b VARCHAR(20)) ENGINE=myisam;
+INSERT INTO t1 VALUES (1,'master/slave');
+INSERT INTO t2 VALUES (1,'master/slave');
+INSERT INTO t3 VALUES (1,'master/slave');
+CREATE TRIGGER tr1 AFTER UPDATE on t1 FOR EACH ROW
+BEGIN
+INSERT INTO t2 VALUES (NEW.a,NEW.b);
+DELETE FROM t2 WHERE a < NEW.a;
+END|
+CREATE TRIGGER tr2 AFTER INSERT on t2 FOR EACH ROW
+BEGIN
+UPDATE t3 SET a =2, b = 'master only';
+END|
+**** On Slave ****
+STOP SLAVE;
+**** On Master ****
+UPDATE t1 SET a = 2, b = 'master only' WHERE a = 1;
+DROP TRIGGER tr1;
+DROP TRIGGER tr2;
+INSERT INTO t1 VALUES (3,'master/slave');
+INSERT INTO t2 VALUES (3,'master/slave');
+INSERT INTO t3 VALUES (3,'master/slave');
+SELECT * FROM t1 ORDER BY a;
+a b
+2 master only
+3 master/slave
+SELECT * FROM t2 ORDER BY a;
+a b
+2 master only
+3 master/slave
+SELECT * FROM t3 ORDER BY a;
+a b
+2 master only
+3 master/slave
+*** On Slave ***
+SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
+START SLAVE;
+SELECT * FROM t1 ORDER BY a;
+a b
+1 master/slave
+3 master/slave
+SELECT * FROM t2 ORDER BY a;
+a b
+1 master/slave
+3 master/slave
+SELECT * FROM t3 ORDER BY a;
+a b
+1 master/slave
+3 master/slave
+DROP TABLE t1, t2, t3;
+**** Case 2: Row binlog format and transactional tables ****
+*** On Master ***
+CREATE TABLE t4 (a INT, b VARCHAR(20)) ENGINE=innodb;
+CREATE TABLE t5 (a INT, b VARCHAR(20)) ENGINE=innodb;
+CREATE TABLE t6 (a INT, b VARCHAR(20)) ENGINE=innodb;
+**** On Slave ****
+STOP SLAVE;
+*** On Master ***
+BEGIN;
+INSERT INTO t4 VALUES (2, 'master only');
+INSERT INTO t5 VALUES (2, 'master only');
+INSERT INTO t6 VALUES (2, 'master only');
+COMMIT;
+BEGIN;
+INSERT INTO t4 VALUES (3, 'master/slave');
+INSERT INTO t5 VALUES (3, 'master/slave');
+INSERT INTO t6 VALUES (3, 'master/slave');
+COMMIT;
+SELECT * FROM t4 ORDER BY a;
+a b
+2 master only
+3 master/slave
+SELECT * FROM t5 ORDER BY a;
+a b
+2 master only
+3 master/slave
+SELECT * FROM t6 ORDER BY a;
+a b
+2 master only
+3 master/slave
+*** On Slave ***
+SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
+START SLAVE;
+SELECT * FROM t4 ORDER BY a;
+a b
+3 master/slave
+SELECT * FROM t5 ORDER BY a;
+a b
+3 master/slave
+SELECT * FROM t6 ORDER BY a;
+a b
+3 master/slave
+**** On Slave ****
+STOP SLAVE;
+*** On Master ***
+BEGIN;
+INSERT INTO t4 VALUES (6, 'master only');
+INSERT INTO t5 VALUES (6, 'master only');
+INSERT INTO t6 VALUES (6, 'master only');
+COMMIT;
+BEGIN;
+INSERT INTO t4 VALUES (7, 'master only');
+INSERT INTO t5 VALUES (7, 'master only');
+INSERT INTO t6 VALUES (7, 'master only');
+COMMIT;
+SELECT * FROM t4 ORDER BY a;
+a b
+2 master only
+3 master/slave
+6 master only
+7 master only
+SELECT * FROM t5 ORDER BY a;
+a b
+2 master only
+3 master/slave
+6 master only
+7 master only
+SELECT * FROM t6 ORDER BY a;
+a b
+2 master only
+3 master/slave
+6 master only
+7 master only
+*** On Slave ***
+SET GLOBAL SQL_SLAVE_SKIP_COUNTER=10;
+START SLAVE;
+SELECT * FROM t4 ORDER BY a;
+a b
+3 master/slave
+SELECT * FROM t5 ORDER BY a;
+a b
+3 master/slave
+SELECT * FROM t6 ORDER BY a;
+a b
+3 master/slave
+STOP SLAVE;
+SET AUTOCOMMIT=0;
+INSERT INTO t4 VALUES (4, 'master only');
+INSERT INTO t5 VALUES (4, 'master only');
+INSERT INTO t6 VALUES (4, 'master only');
+COMMIT;
+INSERT INTO t4 VALUES (5, 'master/slave');
+INSERT INTO t5 VALUES (5, 'master/slave');
+INSERT INTO t6 VALUES (5, 'master/slave');
+COMMIT;
+SELECT * FROM t4 ORDER BY a;
+a b
+2 master only
+3 master/slave
+4 master only
+5 master/slave
+6 master only
+7 master only
+SELECT * FROM t5 ORDER BY a;
+a b
+2 master only
+3 master/slave
+4 master only
+5 master/slave
+6 master only
+7 master only
+SELECT * FROM t6 ORDER BY a;
+a b
+2 master only
+3 master/slave
+4 master only
+5 master/slave
+6 master only
+7 master only
+*** On Slave ***
+SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
+START SLAVE;
+SELECT * FROM t4 ORDER BY a;
+a b
+3 master/slave
+5 master/slave
+SELECT * FROM t5 ORDER BY a;
+a b
+3 master/slave
+5 master/slave
+SELECT * FROM t6 ORDER BY a;
+a b
+3 master/slave
+5 master/slave
+DROP TABLE t4, t5, t6;
+**** Case 3: Statement logging format and LOAD DATA with non-transactional table ****
+*** On Master ***
+CREATE TABLE t10 (a INT, b VARCHAR(20)) ENGINE=myisam;
+*** On Slave ***
+STOP SLAVE;
+*** On Master ***
+SET SESSION BINLOG_FORMAT=STATEMENT;
+LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/rpl_bug28618.dat' INTO TABLE t10 FIELDS TERMINATED BY '|';
+SELECT * FROM t10 ORDER BY a;
+a b
+1 master only
+2 master only
+3 master only
+*** On Slave ***
+SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
+START SLAVE;
+SELECT * FROM t10 ORDER BY a;
+a b
+DROP TABLE t10;
diff --git a/mysql-test/suite/rpl/r/rpl_sp_effects.result b/mysql-test/suite/rpl/r/rpl_sp_effects.result
index c2c44b06972..a39d189aa3a 100644
--- a/mysql-test/suite/rpl/r/rpl_sp_effects.result
+++ b/mysql-test/suite/rpl/r/rpl_sp_effects.result
@@ -235,4 +235,45 @@ drop table t1;
drop function f1;
drop function f2;
drop procedure p1;
+create table t2 (b BIT(7));
+create procedure sp_bug26199(bitvalue BIT(7))
+begin
+insert into t2 set b = bitvalue;
+end //
+create function sf_bug26199(b BIT(7)) returns int
+begin
+insert into t2 values(b);
+return 0;
+end//
+call sp_bug26199(b'1110');
+call sp_bug26199('\0');
+select sf_bug26199(b'1111111');
+sf_bug26199(b'1111111')
+0
+select sf_bug26199(b'101111111');
+sf_bug26199(b'101111111')
+0
+Warnings:
+Warning 1264 Out of range value for column 'b' at row 1
+select sf_bug26199('\'');
+sf_bug26199('\'')
+0
+select hex(b) from t2;
+hex(b)
+E
+0
+7F
+7F
+27
+select hex(b) from t2;
+hex(b)
+E
+0
+7F
+7F
+27
+drop table t2;
+drop procedure sp_bug26199;
+drop function sf_bug26199;
SET GLOBAL log_bin_trust_function_creators = 0;
+end of the tests
diff --git a/mysql-test/suite/rpl/r/rpl_start_stop_slave.result b/mysql-test/suite/rpl/r/rpl_start_stop_slave.result
index 1fcb586d1fb..04ece812f35 100644
--- a/mysql-test/suite/rpl/r/rpl_start_stop_slave.result
+++ b/mysql-test/suite/rpl/r/rpl_start_stop_slave.result
@@ -4,8 +4,8 @@ reset master;
reset slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
start slave;
-stop slave;
create table t1(n int);
+stop slave;
start slave;
stop slave io_thread;
start slave io_thread;
diff --git a/mysql-test/suite/rpl/r/rpl_stm_charset.result b/mysql-test/suite/rpl/r/rpl_stm_charset.result
index fd9c40843d5..1f21f226be8 100644
--- a/mysql-test/suite/rpl/r/rpl_stm_charset.result
+++ b/mysql-test/suite/rpl/r/rpl_stm_charset.result
@@ -184,78 +184,101 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
SET @@session.sql_mode=0/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
-drop database if exists mysqltest2/*!*/;
+drop database if exists mysqltest2
+/*!*/;
SET TIMESTAMP=1000000000/*!*/;
-drop database if exists mysqltest3/*!*/;
+drop database if exists mysqltest3
+/*!*/;
SET TIMESTAMP=1000000000/*!*/;
-create database mysqltest2 character set latin2/*!*/;
+create database mysqltest2 character set latin2
+/*!*/;
SET TIMESTAMP=1000000000/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=30/*!*/;
-create database mysqltest3/*!*/;
+create database mysqltest3
+/*!*/;
SET TIMESTAMP=1000000000/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=64/*!*/;
-drop database mysqltest3/*!*/;
+drop database mysqltest3
+/*!*/;
SET TIMESTAMP=1000000000/*!*/;
-create database mysqltest3/*!*/;
+create database mysqltest3
+/*!*/;
use mysqltest2/*!*/;
SET TIMESTAMP=1000000000/*!*/;
-create table t1 (a int auto_increment primary key, b varchar(100))/*!*/;
+create table t1 (a int auto_increment primary key, b varchar(100))
+/*!*/;
SET INSERT_ID=1/*!*/;
SET TIMESTAMP=1000000000/*!*/;
/*!\C cp850 *//*!*/;
SET @@session.character_set_client=4,@@session.collation_connection=27,@@session.collation_server=64/*!*/;
-insert into t1 (b) values(@@character_set_server)/*!*/;
+insert into t1 (b) values(@@character_set_server)
+/*!*/;
SET INSERT_ID=2/*!*/;
SET TIMESTAMP=1000000000/*!*/;
-insert into t1 (b) values(@@collation_server)/*!*/;
+insert into t1 (b) values(@@collation_server)
+/*!*/;
SET INSERT_ID=3/*!*/;
SET TIMESTAMP=1000000000/*!*/;
-insert into t1 (b) values(@@character_set_client)/*!*/;
+insert into t1 (b) values(@@character_set_client)
+/*!*/;
SET INSERT_ID=4/*!*/;
SET TIMESTAMP=1000000000/*!*/;
-insert into t1 (b) values(@@character_set_connection)/*!*/;
+insert into t1 (b) values(@@character_set_connection)
+/*!*/;
SET INSERT_ID=5/*!*/;
SET TIMESTAMP=1000000000/*!*/;
-insert into t1 (b) values(@@collation_connection)/*!*/;
+insert into t1 (b) values(@@collation_connection)
+/*!*/;
SET TIMESTAMP=1000000000/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=5,@@session.collation_server=64/*!*/;
-truncate table t1/*!*/;
+truncate table t1
+/*!*/;
SET INSERT_ID=1/*!*/;
SET TIMESTAMP=1000000000/*!*/;
-insert into t1 (b) values(@@collation_connection)/*!*/;
+insert into t1 (b) values(@@collation_connection)
+/*!*/;
SET INSERT_ID=2/*!*/;
SET TIMESTAMP=1000000000/*!*/;
-insert into t1 (b) values(LEAST("Müller","Muffler"))/*!*/;
+insert into t1 (b) values(LEAST("Müller","Muffler"))
+/*!*/;
SET INSERT_ID=3/*!*/;
SET TIMESTAMP=1000000000/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=31,@@session.collation_server=64/*!*/;
-insert into t1 (b) values(@@collation_connection)/*!*/;
+insert into t1 (b) values(@@collation_connection)
+/*!*/;
SET INSERT_ID=4/*!*/;
SET TIMESTAMP=1000000000/*!*/;
-insert into t1 (b) values(LEAST("Müller","Muffler"))/*!*/;
+insert into t1 (b) values(LEAST("Müller","Muffler"))
+/*!*/;
SET TIMESTAMP=1000000000/*!*/;
-truncate table t1/*!*/;
+truncate table t1
+/*!*/;
SET INSERT_ID=1/*!*/;
SET @`a`:=_cp850 0x4DFC6C6C6572 COLLATE `cp850_general_ci`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
-insert into t1 (b) values(collation(@a))/*!*/;
+insert into t1 (b) values(collation(@a))
+/*!*/;
SET TIMESTAMP=1000000000/*!*/;
-drop database mysqltest2/*!*/;
+drop database mysqltest2
+/*!*/;
SET TIMESTAMP=1000000000/*!*/;
-drop database mysqltest3/*!*/;
+drop database mysqltest3
+/*!*/;
use test/*!*/;
SET TIMESTAMP=1000000000/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=30/*!*/;
-CREATE TABLE t1 (c1 VARBINARY(255), c2 VARBINARY(255))/*!*/;
+CREATE TABLE t1 (c1 VARBINARY(255), c2 VARBINARY(255))
+/*!*/;
SET TIMESTAMP=1000000000/*!*/;
/*!\C koi8r *//*!*/;
SET @@session.character_set_client=7,@@session.collation_connection=51,@@session.collation_server=30/*!*/;
-INSERT INTO t1 (c1, c2) VALUES ('îÕ, ÚÁ ÒÙÂÁÌËÕ','îÕ, ÚÁ ÒÙÂÁÌËÕ')/*!*/;
+INSERT INTO t1 (c1, c2) VALUES ('îÕ, ÚÁ ÒÙÂÁÌËÕ','îÕ, ÚÁ ÒÙÂÁÌËÕ')
+/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
diff --git a/mysql-test/suite/rpl/r/rpl_stm_log.result b/mysql-test/suite/rpl/r/rpl_stm_log.result
index 02f3dc9044a..18333f5e5e9 100644
--- a/mysql-test/suite/rpl/r/rpl_stm_log.result
+++ b/mysql-test/suite/rpl/r/rpl_stm_log.result
@@ -196,8 +196,8 @@ master-bin.000001 # Intvar # # INSERT_ID=1
master-bin.000001 # Query # # use `test`; insert into t1 values (NULL)
master-bin.000001 # Query # # use `test`; drop table t1
master-bin.000001 # Query # # use `test`; create table t1 (word char(20) not null)ENGINE=MyISAM
-master-bin.000001 # Begin_load_query # # ;file_id=1;block_len=581
-master-bin.000001 # Execute_load_query # # use `test`; load data infile '../std_data_ln/words.dat' into table t1 ignore 1 lines ;file_id=1
+master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=581
+master-bin.000001 # Execute_load_query # # use `test`; load data infile '../std_data_ln/words.dat' into table t1 ignore 1 lines ;file_id=#
master-bin.000001 # Rotate # # master-bin.000002;pos=4
show binlog events in 'master-bin.000002';
Log_name Pos Event_type Server_id End_log_pos Info
diff --git a/mysql-test/suite/rpl/r/rpl_stm_max_relay_size.result b/mysql-test/suite/rpl/r/rpl_stm_max_relay_size.result
index 947b5686a18..2215b34814e 100644
--- a/mysql-test/suite/rpl/r/rpl_stm_max_relay_size.result
+++ b/mysql-test/suite/rpl/r/rpl_stm_max_relay_size.result
@@ -28,7 +28,7 @@ Master_User root
Master_Port MASTER_PORT
Connect_Retry 1
Master_Log_File master-bin.000001
-Read_Master_Log_Pos 72960
+Read_Master_Log_Pos #
Relay_Log_File #
Relay_Log_Pos #
Relay_Master_Log_File master-bin.000001
@@ -43,7 +43,7 @@ Replicate_Wild_Ignore_Table
Last_Errno 0
Last_Error
Skip_Counter 0
-Exec_Master_Log_Pos 72960
+Exec_Master_Log_Pos #
Relay_Log_Space #
Until_Condition None
Until_Log_File
@@ -76,7 +76,7 @@ Master_User root
Master_Port MASTER_PORT
Connect_Retry 1
Master_Log_File master-bin.000001
-Read_Master_Log_Pos 72960
+Read_Master_Log_Pos #
Relay_Log_File #
Relay_Log_Pos #
Relay_Master_Log_File master-bin.000001
@@ -91,7 +91,7 @@ Replicate_Wild_Ignore_Table
Last_Errno 0
Last_Error
Skip_Counter 0
-Exec_Master_Log_Pos 72960
+Exec_Master_Log_Pos #
Relay_Log_Space #
Until_Condition None
Until_Log_File
@@ -124,7 +124,7 @@ Master_User root
Master_Port MASTER_PORT
Connect_Retry 1
Master_Log_File master-bin.000001
-Read_Master_Log_Pos 72960
+Read_Master_Log_Pos #
Relay_Log_File #
Relay_Log_Pos #
Relay_Master_Log_File master-bin.000001
@@ -139,7 +139,7 @@ Replicate_Wild_Ignore_Table
Last_Errno 0
Last_Error
Skip_Counter 0
-Exec_Master_Log_Pos 72960
+Exec_Master_Log_Pos #
Relay_Log_Space #
Until_Condition None
Until_Log_File
@@ -169,7 +169,7 @@ Master_User root
Master_Port MASTER_PORT
Connect_Retry 1
Master_Log_File
-Read_Master_Log_Pos 4
+Read_Master_Log_Pos #
Relay_Log_File #
Relay_Log_Pos #
Relay_Master_Log_File
@@ -184,7 +184,7 @@ Replicate_Wild_Ignore_Table
Last_Errno 0
Last_Error
Skip_Counter 0
-Exec_Master_Log_Pos 0
+Exec_Master_Log_Pos #
Relay_Log_Space #
Until_Condition None
Until_Log_File
@@ -215,7 +215,7 @@ Master_User root
Master_Port MASTER_PORT
Connect_Retry 1
Master_Log_File master-bin.000001
-Read_Master_Log_Pos 73046
+Read_Master_Log_Pos #
Relay_Log_File #
Relay_Log_Pos #
Relay_Master_Log_File master-bin.000001
@@ -230,7 +230,7 @@ Replicate_Wild_Ignore_Table
Last_Errno 0
Last_Error
Skip_Counter 0
-Exec_Master_Log_Pos 73046
+Exec_Master_Log_Pos #
Relay_Log_Space #
Until_Condition None
Until_Log_File
@@ -259,7 +259,7 @@ Master_User root
Master_Port MASTER_PORT
Connect_Retry 1
Master_Log_File master-bin.000001
-Read_Master_Log_Pos 73122
+Read_Master_Log_Pos #
Relay_Log_File #
Relay_Log_Pos #
Relay_Master_Log_File master-bin.000001
@@ -274,7 +274,7 @@ Replicate_Wild_Ignore_Table
Last_Errno 0
Last_Error
Skip_Counter 0
-Exec_Master_Log_Pos 73122
+Exec_Master_Log_Pos #
Relay_Log_Space #
Until_Condition None
Until_Log_File
@@ -293,10 +293,8 @@ Last_SQL_Errno 0
Last_SQL_Error
flush logs;
show master status;
-File master-bin.000002
-Position 106
-Binlog_Do_DB <Binlog_Ignore_DB>
-Binlog_Ignore_DB
+File Position Binlog_Do_DB Binlog_Ignore_DB
+master-bin.000002 # <Binlog_Do_DB> <Binlog_Ignore_DB>
set global max_binlog_size= @my_max_binlog_size;
#
# End of 4.1 tests
diff --git a/mysql-test/suite/rpl/r/rpl_stm_reset_slave.result b/mysql-test/suite/rpl/r/rpl_stm_reset_slave.result
index d08e8646c73..bb89d150af7 100644
--- a/mysql-test/suite/rpl/r/rpl_stm_reset_slave.result
+++ b/mysql-test/suite/rpl/r/rpl_stm_reset_slave.result
@@ -11,7 +11,7 @@ Master_User root
Master_Port MASTER_PORT
Connect_Retry 1
Master_Log_File master-bin.000001
-Read_Master_Log_Pos 106
+Read_Master_Log_Pos #
Relay_Log_File #
Relay_Log_Pos #
Relay_Master_Log_File master-bin.000001
@@ -26,7 +26,7 @@ Replicate_Wild_Ignore_Table
Last_Errno 0
Last_Error
Skip_Counter 0
-Exec_Master_Log_Pos 106
+Exec_Master_Log_Pos #
Relay_Log_Space #
Until_Condition None
Until_Log_File
@@ -52,7 +52,7 @@ Master_User test
Master_Port MASTER_PORT
Connect_Retry 1
Master_Log_File master-bin.000001
-Read_Master_Log_Pos 106
+Read_Master_Log_Pos #
Relay_Log_File #
Relay_Log_Pos #
Relay_Master_Log_File master-bin.000001
@@ -67,7 +67,7 @@ Replicate_Wild_Ignore_Table
Last_Errno 0
Last_Error
Skip_Counter 0
-Exec_Master_Log_Pos 106
+Exec_Master_Log_Pos #
Relay_Log_Space #
Until_Condition None
Until_Log_File
@@ -92,7 +92,7 @@ Master_User root
Master_Port MASTER_PORT
Connect_Retry 1
Master_Log_File
-Read_Master_Log_Pos 4
+Read_Master_Log_Pos #
Relay_Log_File #
Relay_Log_Pos #
Relay_Master_Log_File
@@ -107,7 +107,7 @@ Replicate_Wild_Ignore_Table
Last_Errno 0
Last_Error
Skip_Counter 0
-Exec_Master_Log_Pos 0
+Exec_Master_Log_Pos #
Relay_Log_Space #
Until_Condition None
Until_Log_File
@@ -132,7 +132,7 @@ Master_User root
Master_Port MASTER_PORT
Connect_Retry 1
Master_Log_File master-bin.000001
-Read_Master_Log_Pos 106
+Read_Master_Log_Pos #
Relay_Log_File #
Relay_Log_Pos #
Relay_Master_Log_File master-bin.000001
@@ -147,7 +147,7 @@ Replicate_Wild_Ignore_Table
Last_Errno 0
Last_Error
Skip_Counter 0
-Exec_Master_Log_Pos 106
+Exec_Master_Log_Pos #
Relay_Log_Space #
Until_Condition None
Until_Log_File
diff --git a/mysql-test/suite/rpl/r/rpl_stm_until.result b/mysql-test/suite/rpl/r/rpl_stm_until.result
index 947ce0153b1..619115aa534 100644
--- a/mysql-test/suite/rpl/r/rpl_stm_until.result
+++ b/mysql-test/suite/rpl/r/rpl_stm_until.result
@@ -26,7 +26,7 @@ Master_User root
Master_Port MASTER_PORT
Connect_Retry 1
Master_Log_File master-bin.000001
-Read_Master_Log_Pos 784
+Read_Master_Log_Pos #
Relay_Log_File #
Relay_Log_Pos #
Relay_Master_Log_File master-bin.000001
@@ -41,7 +41,7 @@ Replicate_Wild_Ignore_Table
Last_Errno 0
Last_Error
Skip_Counter 0
-Exec_Master_Log_Pos 327
+Exec_Master_Log_Pos #
Relay_Log_Space #
Until_Condition Master
Until_Log_File master-bin.000001
@@ -72,7 +72,7 @@ Master_User root
Master_Port MASTER_PORT
Connect_Retry 1
Master_Log_File master-bin.000001
-Read_Master_Log_Pos 784
+Read_Master_Log_Pos #
Relay_Log_File #
Relay_Log_Pos #
Relay_Master_Log_File master-bin.000001
@@ -87,7 +87,7 @@ Replicate_Wild_Ignore_Table
Last_Errno 0
Last_Error
Skip_Counter 0
-Exec_Master_Log_Pos 327
+Exec_Master_Log_Pos #
Relay_Log_Space #
Until_Condition Master
Until_Log_File master-no-such-bin.000001
@@ -116,7 +116,7 @@ Master_User root
Master_Port MASTER_PORT
Connect_Retry 1
Master_Log_File master-bin.000001
-Read_Master_Log_Pos 784
+Read_Master_Log_Pos #
Relay_Log_File #
Relay_Log_Pos #
Relay_Master_Log_File master-bin.000001
@@ -131,7 +131,7 @@ Replicate_Wild_Ignore_Table
Last_Errno 0
Last_Error
Skip_Counter 0
-Exec_Master_Log_Pos 616
+Exec_Master_Log_Pos #
Relay_Log_Space #
Until_Condition Relay
Until_Log_File slave-relay-bin.000004
@@ -158,7 +158,7 @@ Master_User root
Master_Port MASTER_PORT
Connect_Retry 1
Master_Log_File master-bin.000001
-Read_Master_Log_Pos 784
+Read_Master_Log_Pos #
Relay_Log_File #
Relay_Log_Pos #
Relay_Master_Log_File master-bin.000001
@@ -173,7 +173,7 @@ Replicate_Wild_Ignore_Table
Last_Errno 0
Last_Error
Skip_Counter 0
-Exec_Master_Log_Pos 784
+Exec_Master_Log_Pos #
Relay_Log_Space #
Until_Condition Master
Until_Log_File master-bin.000001
diff --git a/mysql-test/suite/rpl/r/rpl_switch_stm_row_mixed.result b/mysql-test/suite/rpl/r/rpl_switch_stm_row_mixed.result
index c3f0c07b92c..cae8492abbd 100644
--- a/mysql-test/suite/rpl/r/rpl_switch_stm_row_mixed.result
+++ b/mysql-test/suite/rpl/r/rpl_switch_stm_row_mixed.result
@@ -405,6 +405,26 @@ CREATE TABLE t12 (data LONG);
LOCK TABLES t12 WRITE;
INSERT INTO t12 VALUES(UUID());
UNLOCK TABLES;
+CREATE FUNCTION my_user()
+RETURNS CHAR(64)
+BEGIN
+DECLARE user CHAR(64);
+SELECT USER() INTO user;
+RETURN user;
+END $$
+CREATE FUNCTION my_current_user()
+RETURNS CHAR(64)
+BEGIN
+DECLARE user CHAR(64);
+SELECT CURRENT_USER() INTO user;
+RETURN user;
+END $$
+DROP TABLE IF EXISTS t13;
+CREATE TABLE t13 (data CHAR(64));
+INSERT INTO t13 VALUES (USER());
+INSERT INTO t13 VALUES (my_user());
+INSERT INTO t13 VALUES (CURRENT_USER());
+INSERT INTO t13 VALUES (my_current_user());
show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Query # # drop database if exists mysqltest1
@@ -451,21 +471,27 @@ master-bin.000001 # Query # # use `mysqltest1`; insert into t1 select 'emergency
master-bin.000001 # Table_map # # table_id: # (mysqltest1.t1)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
master-bin.000001 # Query # # use `mysqltest1`; insert into t1 select "yesterday_24_"
+master-bin.000001 # Query # # use `mysqltest1`; BEGIN
master-bin.000001 # Query # # use `mysqltest1`; CREATE TABLE `t2` (
`rpad(UUID(),100,' ')` varchar(100) CHARACTER SET utf8 NOT NULL DEFAULT ''
)
master-bin.000001 # Table_map # # table_id: # (mysqltest1.t2)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # use `mysqltest1`; COMMIT
+master-bin.000001 # Query # # use `mysqltest1`; BEGIN
master-bin.000001 # Query # # use `mysqltest1`; CREATE TABLE `t3` (
`1` varbinary(108) NOT NULL DEFAULT ''
)
master-bin.000001 # Table_map # # table_id: # (mysqltest1.t3)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # use `mysqltest1`; COMMIT
+master-bin.000001 # Query # # use `mysqltest1`; BEGIN
master-bin.000001 # Query # # use `mysqltest1`; CREATE TABLE `t4` (
`a` varchar(100) DEFAULT NULL
)
master-bin.000001 # Table_map # # table_id: # (mysqltest1.t4)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # use `mysqltest1`; COMMIT
master-bin.000001 # Query # # use `mysqltest1`; create table t5 select * from t1 where 3 in (select 1 union select 2 union select curdate() union select 3)
master-bin.000001 # Table_map # # table_id: # (mysqltest1.t5)
master-bin.000001 # Write_rows # # table_id: #
@@ -709,6 +735,30 @@ master-bin.000001 # Query # # use `mysqltest1`; DROP TABLE IF EXISTS t12
master-bin.000001 # Query # # use `mysqltest1`; CREATE TABLE t12 (data LONG)
master-bin.000001 # Table_map # # table_id: # (mysqltest1.t12)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` FUNCTION my_user()
+RETURNS CHAR(64)
+BEGIN
+DECLARE user CHAR(64);
+SELECT USER() INTO user;
+RETURN user;
+END
+master-bin.000001 # Query # # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` FUNCTION my_current_user()
+RETURNS CHAR(64)
+BEGIN
+DECLARE user CHAR(64);
+SELECT CURRENT_USER() INTO user;
+RETURN user;
+END
+master-bin.000001 # Query # # use `mysqltest1`; DROP TABLE IF EXISTS t13
+master-bin.000001 # Query # # use `mysqltest1`; CREATE TABLE t13 (data CHAR(64))
+master-bin.000001 # Table_map # # table_id: # (mysqltest1.t13)
+master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Table_map # # table_id: # (mysqltest1.t13)
+master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Table_map # # table_id: # (mysqltest1.t13)
+master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Table_map # # table_id: # (mysqltest1.t13)
+master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Query # # drop database if exists mysqltest1
@@ -755,21 +805,27 @@ master-bin.000001 # Query # # use `mysqltest1`; insert into t1 select 'emergency
master-bin.000001 # Table_map # # table_id: # (mysqltest1.t1)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
master-bin.000001 # Query # # use `mysqltest1`; insert into t1 select "yesterday_24_"
+master-bin.000001 # Query # # use `mysqltest1`; BEGIN
master-bin.000001 # Query # # use `mysqltest1`; CREATE TABLE `t2` (
`rpad(UUID(),100,' ')` varchar(100) CHARACTER SET utf8 NOT NULL DEFAULT ''
)
master-bin.000001 # Table_map # # table_id: # (mysqltest1.t2)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # use `mysqltest1`; COMMIT
+master-bin.000001 # Query # # use `mysqltest1`; BEGIN
master-bin.000001 # Query # # use `mysqltest1`; CREATE TABLE `t3` (
`1` varbinary(108) NOT NULL DEFAULT ''
)
master-bin.000001 # Table_map # # table_id: # (mysqltest1.t3)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # use `mysqltest1`; COMMIT
+master-bin.000001 # Query # # use `mysqltest1`; BEGIN
master-bin.000001 # Query # # use `mysqltest1`; CREATE TABLE `t4` (
`a` varchar(100) DEFAULT NULL
)
master-bin.000001 # Table_map # # table_id: # (mysqltest1.t4)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # use `mysqltest1`; COMMIT
master-bin.000001 # Query # # use `mysqltest1`; create table t5 select * from t1 where 3 in (select 1 union select 2 union select curdate() union select 3)
master-bin.000001 # Table_map # # table_id: # (mysqltest1.t5)
master-bin.000001 # Write_rows # # table_id: #
@@ -1013,5 +1069,29 @@ master-bin.000001 # Query # # use `mysqltest1`; DROP TABLE IF EXISTS t12
master-bin.000001 # Query # # use `mysqltest1`; CREATE TABLE t12 (data LONG)
master-bin.000001 # Table_map # # table_id: # (mysqltest1.t12)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` FUNCTION my_user()
+RETURNS CHAR(64)
+BEGIN
+DECLARE user CHAR(64);
+SELECT USER() INTO user;
+RETURN user;
+END
+master-bin.000001 # Query # # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` FUNCTION my_current_user()
+RETURNS CHAR(64)
+BEGIN
+DECLARE user CHAR(64);
+SELECT CURRENT_USER() INTO user;
+RETURN user;
+END
+master-bin.000001 # Query # # use `mysqltest1`; DROP TABLE IF EXISTS t13
+master-bin.000001 # Query # # use `mysqltest1`; CREATE TABLE t13 (data CHAR(64))
+master-bin.000001 # Table_map # # table_id: # (mysqltest1.t13)
+master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Table_map # # table_id: # (mysqltest1.t13)
+master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Table_map # # table_id: # (mysqltest1.t13)
+master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Table_map # # table_id: # (mysqltest1.t13)
+master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
drop database mysqltest1;
set global binlog_format =@my_binlog_format;
diff --git a/mysql-test/suite/rpl/r/rpl_temporary_errors.result b/mysql-test/suite/rpl/r/rpl_temporary_errors.result
new file mode 100644
index 00000000000..430e63c5859
--- /dev/null
+++ b/mysql-test/suite/rpl/r/rpl_temporary_errors.result
@@ -0,0 +1,83 @@
+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;
+**** On Master ****
+SET SESSION BINLOG_FORMAT=ROW;
+CREATE TABLE t1 (a INT PRIMARY KEY, b INT);
+INSERT INTO t1 VALUES (1,1), (2,2), (3,3), (4,4);
+**** On Slave ****
+SHOW STATUS LIKE 'Slave_retried_transactions';
+Variable_name Value
+Slave_retried_transactions 0
+set @@global.slave_exec_mode= 'IDEMPOTENT';
+UPDATE t1 SET a = 5, b = 47 WHERE a = 1;
+SELECT * FROM t1;
+a b
+5 47
+2 2
+3 3
+4 4
+**** On Master ****
+UPDATE t1 SET a = 5, b = 5 WHERE a = 1;
+SELECT * FROM t1;
+a b
+5 5
+2 2
+3 3
+4 4
+**** On Slave ****
+set @@global.slave_exec_mode= default;
+SHOW STATUS LIKE 'Slave_retried_transactions';
+Variable_name Value
+Slave_retried_transactions 0
+SELECT * FROM t1;
+a b
+5 47
+2 2
+3 3
+4 4
+SHOW SLAVE STATUS;
+Slave_IO_State #
+Master_Host 127.0.0.1
+Master_User root
+Master_Port 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 Yes
+Replicate_Do_DB
+Replicate_Ignore_DB
+Replicate_Do_Table
+Replicate_Ignore_Table #
+Replicate_Wild_Do_Table
+Replicate_Wild_Ignore_Table
+Last_Errno 0
+Last_Error
+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 0
+Last_SQL_Error
+DROP TABLE t1;
+**** On Master ****
+DROP TABLE t1;
diff --git a/mysql-test/suite/rpl/r/rpl_trigger.result b/mysql-test/suite/rpl/r/rpl_trigger.result
index b4ce3ee1d36..68c82ed037f 100644
--- a/mysql-test/suite/rpl/r/rpl_trigger.result
+++ b/mysql-test/suite/rpl/r/rpl_trigger.result
@@ -91,21 +91,25 @@ select a=b && a=c from t1;
a=b && a=c
1
SELECT routine_name, definer
-FROM information_schema.routines;
+FROM information_schema.routines
+WHERE routine_name = 'bug12480';
routine_name definer
bug12480 root@localhost
SELECT trigger_name, definer
-FROM information_schema.triggers;
+FROM information_schema.triggers
+WHERE trigger_name = 't1_first';
trigger_name definer
t1_first root@localhost
--- On slave --
SELECT routine_name, definer
-FROM information_schema.routines;
+FROM information_schema.routines
+WHERE routine_name = 'bug12480';
routine_name definer
bug12480 root@localhost
SELECT trigger_name, definer
-FROM information_schema.triggers;
+FROM information_schema.triggers
+WHERE trigger_name = 't1_first';
trigger_name definer
t1_first root@localhost
select a=b && a=c from t1;
diff --git a/mysql-test/suite/rpl/r/rpl_truncate_2myisam.result b/mysql-test/suite/rpl/r/rpl_truncate_2myisam.result
index c7ef28ba56b..7eee31dab7a 100644
--- a/mysql-test/suite/rpl/r/rpl_truncate_2myisam.result
+++ b/mysql-test/suite/rpl/r/rpl_truncate_2myisam.result
@@ -4,6 +4,11 @@ reset master;
reset slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
start slave;
+STOP SLAVE;
+DROP TABLE IF EXISTS t1;
+DROP TABLE IF EXISTS t1;
+RESET SLAVE;
+START SLAVE;
**** On Master ****
SET SESSION BINLOG_FORMAT=STATEMENT;
SET GLOBAL BINLOG_FORMAT=STATEMENT;
@@ -31,10 +36,17 @@ a b
DROP TABLE t1;
show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS t1
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=MyISAM
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (1,1), (2,2)
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
master-bin.000001 # Query # # use `test`; DROP TABLE t1
+RESET MASTER;
+STOP SLAVE;
+DROP TABLE IF EXISTS t1;
+DROP TABLE IF EXISTS t1;
+RESET SLAVE;
+START SLAVE;
**** On Master ****
SET SESSION BINLOG_FORMAT=MIXED;
SET GLOBAL BINLOG_FORMAT=MIXED;
@@ -62,10 +74,17 @@ a b
DROP TABLE t1;
show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS t1
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=MyISAM
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (1,1), (2,2)
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
master-bin.000001 # Query # # use `test`; DROP TABLE t1
+RESET MASTER;
+STOP SLAVE;
+DROP TABLE IF EXISTS t1;
+DROP TABLE IF EXISTS t1;
+RESET SLAVE;
+START SLAVE;
**** On Master ****
SET SESSION BINLOG_FORMAT=ROW;
SET GLOBAL BINLOG_FORMAT=ROW;
@@ -93,11 +112,18 @@ a b
DROP TABLE t1;
show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS t1
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=MyISAM
master-bin.000001 # Table_map # # table_id: # (test.t1)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
master-bin.000001 # Query # # use `test`; DROP TABLE t1
+RESET MASTER;
+STOP SLAVE;
+DROP TABLE IF EXISTS t1;
+DROP TABLE IF EXISTS t1;
+RESET SLAVE;
+START SLAVE;
**** On Master ****
SET SESSION BINLOG_FORMAT=STATEMENT;
SET GLOBAL BINLOG_FORMAT=STATEMENT;
@@ -125,10 +151,17 @@ a b
DROP TABLE t1;
show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS t1
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=MyISAM
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (1,1), (2,2)
master-bin.000001 # Query # # use `test`; DELETE FROM t1
master-bin.000001 # Query # # use `test`; DROP TABLE t1
+RESET MASTER;
+STOP SLAVE;
+DROP TABLE IF EXISTS t1;
+DROP TABLE IF EXISTS t1;
+RESET SLAVE;
+START SLAVE;
**** On Master ****
SET SESSION BINLOG_FORMAT=MIXED;
SET GLOBAL BINLOG_FORMAT=MIXED;
@@ -156,10 +189,17 @@ a b
DROP TABLE t1;
show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS t1
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=MyISAM
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (1,1), (2,2)
master-bin.000001 # Query # # use `test`; DELETE FROM t1
master-bin.000001 # Query # # use `test`; DROP TABLE t1
+RESET MASTER;
+STOP SLAVE;
+DROP TABLE IF EXISTS t1;
+DROP TABLE IF EXISTS t1;
+RESET SLAVE;
+START SLAVE;
**** On Master ****
SET SESSION BINLOG_FORMAT=ROW;
SET GLOBAL BINLOG_FORMAT=ROW;
@@ -188,9 +228,11 @@ a b
DROP TABLE t1;
show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS t1
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=MyISAM
master-bin.000001 # Table_map # # table_id: # (test.t1)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
master-bin.000001 # Table_map # # table_id: # (test.t1)
master-bin.000001 # Delete_rows # # table_id: # flags: STMT_END_F
master-bin.000001 # Query # # use `test`; DROP TABLE t1
+RESET MASTER;
diff --git a/mysql-test/suite/rpl/r/rpl_truncate_3innodb.result b/mysql-test/suite/rpl/r/rpl_truncate_3innodb.result
index 7ce48c2e983..728b8450314 100644
--- a/mysql-test/suite/rpl/r/rpl_truncate_3innodb.result
+++ b/mysql-test/suite/rpl/r/rpl_truncate_3innodb.result
@@ -4,6 +4,11 @@ reset master;
reset slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
start slave;
+STOP SLAVE;
+DROP TABLE IF EXISTS t1;
+DROP TABLE IF EXISTS t1;
+RESET SLAVE;
+START SLAVE;
**** On Master ****
SET SESSION BINLOG_FORMAT=STATEMENT;
SET GLOBAL BINLOG_FORMAT=STATEMENT;
@@ -31,12 +36,21 @@ a b
DROP TABLE t1;
show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS t1
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=InnoDB
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (1,1), (2,2)
master-bin.000001 # Xid # # COMMIT /* XID */
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
master-bin.000001 # Xid # # COMMIT /* XID */
master-bin.000001 # Query # # use `test`; DROP TABLE t1
+RESET MASTER;
+STOP SLAVE;
+DROP TABLE IF EXISTS t1;
+DROP TABLE IF EXISTS t1;
+RESET SLAVE;
+START SLAVE;
**** On Master ****
SET SESSION BINLOG_FORMAT=MIXED;
SET GLOBAL BINLOG_FORMAT=MIXED;
@@ -64,12 +78,21 @@ a b
DROP TABLE t1;
show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS t1
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=InnoDB
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (1,1), (2,2)
master-bin.000001 # Xid # # COMMIT /* XID */
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
master-bin.000001 # Xid # # COMMIT /* XID */
master-bin.000001 # Query # # use `test`; DROP TABLE t1
+RESET MASTER;
+STOP SLAVE;
+DROP TABLE IF EXISTS t1;
+DROP TABLE IF EXISTS t1;
+RESET SLAVE;
+START SLAVE;
**** On Master ****
SET SESSION BINLOG_FORMAT=ROW;
SET GLOBAL BINLOG_FORMAT=ROW;
@@ -97,13 +120,22 @@ a b
DROP TABLE t1;
show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS t1
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=InnoDB
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Table_map # # table_id: # (test.t1)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
master-bin.000001 # Xid # # COMMIT /* XID */
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
master-bin.000001 # Xid # # COMMIT /* XID */
master-bin.000001 # Query # # use `test`; DROP TABLE t1
+RESET MASTER;
+STOP SLAVE;
+DROP TABLE IF EXISTS t1;
+DROP TABLE IF EXISTS t1;
+RESET SLAVE;
+START SLAVE;
**** On Master ****
SET SESSION BINLOG_FORMAT=STATEMENT;
SET GLOBAL BINLOG_FORMAT=STATEMENT;
@@ -131,12 +163,21 @@ a b
DROP TABLE t1;
show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS t1
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=InnoDB
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (1,1), (2,2)
master-bin.000001 # Xid # # COMMIT /* XID */
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Query # # use `test`; DELETE FROM t1
master-bin.000001 # Xid # # COMMIT /* XID */
master-bin.000001 # Query # # use `test`; DROP TABLE t1
+RESET MASTER;
+STOP SLAVE;
+DROP TABLE IF EXISTS t1;
+DROP TABLE IF EXISTS t1;
+RESET SLAVE;
+START SLAVE;
**** On Master ****
SET SESSION BINLOG_FORMAT=MIXED;
SET GLOBAL BINLOG_FORMAT=MIXED;
@@ -164,12 +205,21 @@ a b
DROP TABLE t1;
show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS t1
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=InnoDB
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (1,1), (2,2)
master-bin.000001 # Xid # # COMMIT /* XID */
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Query # # use `test`; DELETE FROM t1
master-bin.000001 # Xid # # COMMIT /* XID */
master-bin.000001 # Query # # use `test`; DROP TABLE t1
+RESET MASTER;
+STOP SLAVE;
+DROP TABLE IF EXISTS t1;
+DROP TABLE IF EXISTS t1;
+RESET SLAVE;
+START SLAVE;
**** On Master ****
SET SESSION BINLOG_FORMAT=ROW;
SET GLOBAL BINLOG_FORMAT=ROW;
@@ -198,11 +248,15 @@ a b
DROP TABLE t1;
show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS t1
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=InnoDB
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Table_map # # table_id: # (test.t1)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
master-bin.000001 # Xid # # COMMIT /* XID */
+master-bin.000001 # Query # # use `test`; BEGIN
master-bin.000001 # Table_map # # table_id: # (test.t1)
master-bin.000001 # Delete_rows # # table_id: # flags: STMT_END_F
master-bin.000001 # Xid # # COMMIT /* XID */
master-bin.000001 # Query # # use `test`; DROP TABLE t1
+RESET MASTER;
diff --git a/mysql-test/suite/rpl/r/rpl_udf.result b/mysql-test/suite/rpl/r/rpl_udf.result
index fcd2f4743ba..79a82b5fbc7 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 1591 Statement is not safe to log in statement format.
+Warning 1592 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 1591 Statement is not safe to log in statement format.
+Warning 1592 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 1591 Statement is not safe to log in statement format.
+Warning 1592 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 1591 Statement is not safe to log in statement format.
+Warning 1592 Statement is not safe to log in statement format.
affected rows: 1
SELECT * FROM t1 ORDER BY sum;
sum price
diff --git a/mysql-test/suite/rpl/r/rpl_user.result b/mysql-test/suite/rpl/r/rpl_user.result
new file mode 100644
index 00000000000..a98e7e9ca55
--- /dev/null
+++ b/mysql-test/suite/rpl/r/rpl_user.result
@@ -0,0 +1,45 @@
+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;
+set session sql_log_bin=0;
+delete from mysql.user where Host='fakehost';
+set session sql_log_bin=1;
+set session sql_log_bin=0;
+delete from mysql.user where Host='fakehost';
+set session sql_log_bin=1;
+create user 'foo'@'fakehost';
+create user 'foo'@'fakehost', 'bar'@'fakehost';
+ERROR HY000: Operation CREATE USER failed for 'foo'@'fakehost'
+create user 'foo'@'fakehost', 'bar'@'fakehost';
+ERROR HY000: Operation CREATE USER failed for 'foo'@'fakehost','bar'@'fakehost'
+select Host,User from mysql.user where Host='fakehost';
+Host User
+fakehost bar
+fakehost foo
+rename user 'foo'@'fakehost' to 'foofoo'@'fakehost';
+rename user 'not_exist_user1'@'fakehost' to 'foobar'@'fakehost', 'bar'@'fakehost' to 'barbar'@'fakehost';
+ERROR HY000: Operation RENAME USER failed for 'not_exist_user1'@'fakehost'
+rename user 'not_exist_user1'@'fakehost' to 'foobar'@'fakehost', 'not_exist_user2'@'fakehost' to 'barfoo'@'fakehost';
+ERROR HY000: Operation RENAME USER failed for 'not_exist_user1'@'fakehost','not_exist_user2'@'fakehost'
+select Host,User from mysql.user where Host='fakehost';
+Host User
+fakehost barbar
+fakehost foofoo
+drop user 'foofoo'@'fakehost';
+drop user 'not_exist_user1'@'fakehost', 'barbar'@'fakehost';
+ERROR HY000: Operation DROP USER failed for 'not_exist_user1'@'fakehost'
+drop user 'not_exist_user1'@'fakehost', 'not_exist_user2'@'fakehost';
+ERROR HY000: Operation DROP USER failed for 'not_exist_user1'@'fakehost','not_exist_user2'@'fakehost'
+select Host,User from mysql.user where Host='fakehost';
+Host User
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; create user 'foo'@'fakehost'
+master-bin.000001 # Query # # use `test`; create user 'foo'@'fakehost', 'bar'@'fakehost'
+master-bin.000001 # Query # # use `test`; rename user 'foo'@'fakehost' to 'foofoo'@'fakehost'
+master-bin.000001 # Query # # use `test`; rename user 'not_exist_user1'@'fakehost' to 'foobar'@'fakehost', 'bar'@'fakehost' to 'barbar'@'fakehost'
+master-bin.000001 # Query # # use `test`; drop user 'foofoo'@'fakehost'
+master-bin.000001 # Query # # use `test`; drop user 'not_exist_user1'@'fakehost', 'barbar'@'fakehost'
diff --git a/mysql-test/suite/rpl/t/disabled.def b/mysql-test/suite/rpl/t/disabled.def
index 0c90eaa4378..20c3ccf0486 100644
--- a/mysql-test/suite/rpl/t/disabled.def
+++ b/mysql-test/suite/rpl/t/disabled.def
@@ -11,7 +11,8 @@
##############################################################################
rpl_ddl : BUG#26418 2007-03-01 mleich Slave out of sync after CREATE/DROP TEMPORARY TABLE + ROLLBACK on master
-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.
-rpl_row_extraColmaster_ndb : BUG#29549 : Replication of BLOBs fail for NDB
+rpl_innodb_bug28430 : Bug #32247 2007-11-27 mats Test reports wrong value of "AUTO_INCREMENT" (on a partitioned InnoDB table)
+rpl_view : Bug#32654: rpl_view.test fails randomly
+rpl_ndb_multi : Bug#30751: rpl_ndb_multi missing row in output
+rpl_log_pos : Bug#8693 Test 'rpl_log_pos' fails sometimes
diff --git a/mysql-test/suite/rpl/t/rpl_000015.test b/mysql-test/suite/rpl/t/rpl_000015.test
index 80db596244b..45a43cd38d0 100644
--- a/mysql-test/suite/rpl/t/rpl_000015.test
+++ b/mysql-test/suite/rpl/t/rpl_000015.test
@@ -9,22 +9,22 @@ connect (master,localhost,root,,test,$MASTER_MYPORT,$MASTER_MYSOCK);
connect (slave,localhost,root,,test,$SLAVE_MYPORT,$SLAVE_MYSOCK);
connection master;
reset master;
-show master status;
+source include/show_master_status.inc;
save_master_pos;
connection slave;
reset slave;
-source include/show_slave_status.inc;
+source include/show_slave_status2.inc;
change master to master_host='127.0.0.1';
# The following needs to be cleaned up when change master is fixed
-source include/show_slave_status.inc;
+source include/show_slave_status2.inc;
--replace_result $MASTER_MYPORT MASTER_PORT
eval change master to master_host='127.0.0.1',master_user='root',
master_password='',master_port=$MASTER_MYPORT;
-source include/show_slave_status.inc;
+source include/show_slave_status2.inc;
start slave;
sync_with_master;
-source include/show_slave_status.inc;
+source include/show_slave_status2.inc;
connection master;
--disable_warnings
drop table if exists t1;
diff --git a/mysql-test/suite/rpl/t/rpl_binlog_grant.test b/mysql-test/suite/rpl/t/rpl_binlog_grant.test
index 42af33c2e05..e95f69a3f99 100644
--- a/mysql-test/suite/rpl/t/rpl_binlog_grant.test
+++ b/mysql-test/suite/rpl/t/rpl_binlog_grant.test
@@ -1,3 +1,4 @@
+source include/master-slave.inc;
-- source include/have_innodb.inc
-- source include/not_embedded.inc
-- source include/have_binlog_format_mixed_or_statement.inc
diff --git a/mysql-test/suite/rpl/t/rpl_bug31076.test b/mysql-test/suite/rpl/t/rpl_bug31076.test
index cc8b26ac8f4..9176bafe022 100644
--- a/mysql-test/suite/rpl/t/rpl_bug31076.test
+++ b/mysql-test/suite/rpl/t/rpl_bug31076.test
@@ -39,6 +39,24 @@ CREATE TABLE `visits_events` (
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
--delimiter /*!*/;
+
+# at 4 (0x4)
+#071204 14:29:31 server id 1 end_log_pos 106
+# Position Timestamp Type Master ID Size Master Pos Flags
+# 4 3b 56 55 47 0f 01 00 00 00 66 00 00 00 6a 00 00 00 00 00
+# 17 04 00 35 2e 31 2e 32 33 2d 72 63 2d 64 65 62 75 |..5.1.23.rc.debu|
+# 27 67 2d 6c 6f 67 00 00 00 00 00 00 00 00 00 00 00 |g.log...........|
+# 37 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
+# 47 00 00 00 00 3b 56 55 47 13 38 0d 00 08 00 12 00 |.....VUG.8......|
+# 57 04 04 04 04 12 00 00 53 00 04 1a 08 00 00 00 08 |.......S........|
+# 67 08 08 02 |...|
+# Start: binlog v 4, server v 5.1.23-rc-debug-log created 071204 14:29:31 at startup
+
+BINLOG '
+O1ZVRw8BAAAAZgAAAGoAAAAAAAQANS4xLjIzLXJjLWRlYnVnLWxvZwAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAA7VlVHEzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC
+'/*!*/;
+
# at 164170623
# at 164170679
#7918 3:59:2 server id 436 end_log_pos 164170679
@@ -114,4 +132,5 @@ SELECT * FROM visits_events;
# Cleanup
DROP DATABASE track;
+sync_slave_with_master;
--echo End of 5.1 tests
diff --git a/mysql-test/suite/rpl/t/rpl_change_master.test b/mysql-test/suite/rpl/t/rpl_change_master.test
index 7256fed656f..7e4800c5c77 100644
--- a/mysql-test/suite/rpl/t/rpl_change_master.test
+++ b/mysql-test/suite/rpl/t/rpl_change_master.test
@@ -18,13 +18,9 @@ save_master_pos;
connection slave;
--real_sleep 3 # wait for I/O thread to have read updates
stop slave;
---replace_result $MASTER_MYPORT MASTER_PORT
---replace_column 1 # 7 # 8 # 9 # 16 # 23 # 33 # 35 # 36 #
-query_vertical SHOW SLAVE STATUS;
+source include/show_slave_status2.inc;
change master to master_user='root';
---replace_result $MASTER_MYPORT MASTER_PORT
---replace_column 1 # 7 # 8 # 9 # 16 # 23 # 33 # 35 # 36 #
-query_vertical SHOW SLAVE STATUS;
+source include/show_slave_status2.inc;
start slave;
sync_with_master;
select * from t1;
diff --git a/mysql-test/suite/rpl/t/rpl_colSize.test b/mysql-test/suite/rpl/t/rpl_colSize.test
index 44fb878d4d2..c20f2c3fd35 100644
--- a/mysql-test/suite/rpl/t/rpl_colSize.test
+++ b/mysql-test/suite/rpl/t/rpl_colSize.test
@@ -147,12 +147,14 @@ INSERT INTO t1 VALUES ("This is a test of col a.",
"This is a test of the large col c.",
"Col d");
SELECT * FROM t1;
+--replace_result default DEFAULT
SHOW CREATE TABLE t1;
sync_slave_with_master slave;
--echo Insert some values and select them on slave
SELECT * FROM t1;
+--replace_result default DEFAULT
SHOW CREATE TABLE t1;
@@ -200,12 +202,14 @@ INSERT INTO t1 VALUES (
);
SELECT BIN(a), BIN(b), BIN(c), BIN(d), BIN(e) FROM t1;
+--replace_result default DEFAULT
SHOW CREATE TABLE t1;
sync_slave_with_master slave;
--echo Insert some values and select them on master
SELECT BIN(a), BIN(b), BIN(c), BIN(d), BIN(e) FROM t1;
+--replace_result default DEFAULT
SHOW CREATE TABLE t1;
--echo *** Cleanup ***
diff --git a/mysql-test/suite/rpl/t/rpl_create_database.test b/mysql-test/suite/rpl/t/rpl_create_database.test
index 70cff8daca2..e3e2e637594 100644
--- a/mysql-test/suite/rpl/t/rpl_create_database.test
+++ b/mysql-test/suite/rpl/t/rpl_create_database.test
@@ -42,9 +42,9 @@ USE mysqltest_sisyfos;
# The following should *not* be replicated
ALTER DATABASE mysqltest_bob CHARACTER SET latin1;
-SHOW DATABASES;
+SHOW DATABASES LIKE 'mysql%';
sync_slave_with_master;
-SHOW DATABASES;
+SHOW DATABASES LIKE 'mysql%';
connection master;
DROP DATABASE IF EXISTS mysqltest_sisyfos;
@@ -55,9 +55,9 @@ CREATE DATABASE mysqltest_sisyfos;
USE mysqltest_sisyfos;
CREATE TABLE t2 (a INT);
let $VERSION=`select version()`;
-SHOW DATABASES;
+SHOW DATABASES LIKE 'mysql%';
sync_slave_with_master;
-SHOW DATABASES;
+SHOW DATABASES LIKE 'mysql%';
USE mysqltest_prometheus;
SHOW TABLES;
USE mysqltest_sisyfos;
diff --git a/mysql-test/suite/rpl/t/rpl_critical_errors.test b/mysql-test/suite/rpl/t/rpl_critical_errors.test
index abf827c8d1f..b35cd305f92 100644
--- a/mysql-test/suite/rpl/t/rpl_critical_errors.test
+++ b/mysql-test/suite/rpl/t/rpl_critical_errors.test
@@ -34,7 +34,8 @@ connection master1;
# This sleep is picked so that the query above has started to insert
# some rows into t2. If it hasn't the slave will not stop below.
-sleep 4;
+let $wait_condition= SELECT COUNT(*) > 1000 FROM t1;
+source include/wait_condition.inc
# SHOW PROCESSLIST;
diff --git a/mysql-test/suite/rpl/t/rpl_drop_view.test b/mysql-test/suite/rpl/t/rpl_drop_view.test
new file mode 100644
index 00000000000..8d826b8214d
--- /dev/null
+++ b/mysql-test/suite/rpl/t/rpl_drop_view.test
@@ -0,0 +1,31 @@
+# test case for bug#30998
+# Drop View breaks replication if view does not exist
+#
+
+source include/master-slave.inc;
+--disable_warnings
+drop table if exists t1, t2;
+drop view if exists v1, v2, v3, not_exist_view;
+--enable_warnings
+create table t1 (a int);
+create table t2 (b int);
+create table t3 (c int);
+create view v1 as select * from t1;
+create view v2 as select * from t2;
+create view v3 as select * from t3;
+--error 1051
+drop view not_exist_view;
+--error 1051
+drop view v1, not_exist_view;
+--error 1146
+select * from v1;
+drop view v2, v3;
+save_master_pos;
+connection slave;
+sync_with_master;
+--error 1146
+select * from v1;
+--error 1146
+select * from v2;
+--error 1146
+select * from v3;
diff --git a/mysql-test/suite/rpl/t/rpl_dual_pos_advance.test b/mysql-test/suite/rpl/t/rpl_dual_pos_advance.test
index 27c920a3186..83c15d691be 100644
--- a/mysql-test/suite/rpl/t/rpl_dual_pos_advance.test
+++ b/mysql-test/suite/rpl/t/rpl_dual_pos_advance.test
@@ -106,9 +106,3 @@ connection slave;
sync_with_master;
# End of 4.1 tests
-
-# Cleanup
-# The A->B->A replication causes the master to start writing relay logs
-# in var/run, remove them
-remove_file $MYSQLTEST_VARDIR/run/master-relay-bin.000001;
-remove_file $MYSQLTEST_VARDIR/run/master-relay-bin.index;
diff --git a/mysql-test/suite/rpl/t/rpl_err_ignoredtable.test b/mysql-test/suite/rpl/t/rpl_err_ignoredtable.test
index 4e06a6a7096..e26e240b5ab 100644
--- a/mysql-test/suite/rpl/t/rpl_err_ignoredtable.test
+++ b/mysql-test/suite/rpl/t/rpl_err_ignoredtable.test
@@ -43,13 +43,14 @@ insert into t3 values(connection_id());
send update t2 set a = a + 1 + get_lock('crash_lock%20C', 10);
connection master1;
-real_sleep 2;
+let $wait_condition= SELECT a > 1 FROM t2;
+source include/wait_condition.inc;
select (@id := id) - id from t3;
kill @id;
drop table t2,t3;
insert into t4 values (3),(4);
connection master;
---error 0,1053,2013
+--error 0,1053,2013,1048
reap;
connection master1;
save_master_pos;
diff --git a/mysql-test/suite/rpl/t/rpl_extraColmaster_innodb.test b/mysql-test/suite/rpl/t/rpl_extraColmaster_innodb.test
index 082c22329fa..5255a9cfbad 100644
--- a/mysql-test/suite/rpl/t/rpl_extraColmaster_innodb.test
+++ b/mysql-test/suite/rpl/t/rpl_extraColmaster_innodb.test
@@ -12,4 +12,5 @@ set binlog_format=row;
set binlog_format=statement;
-- source extra/rpl_tests/rpl_extraMaster_Col.test
-
+set binlog_format=mixed;
+-- source extra/rpl_tests/rpl_extraMaster_Col.test
diff --git a/mysql-test/suite/rpl/t/rpl_extraColmaster_myisam.test b/mysql-test/suite/rpl/t/rpl_extraColmaster_myisam.test
index 5bbd7953294..e6b41eabd0d 100644
--- a/mysql-test/suite/rpl/t/rpl_extraColmaster_myisam.test
+++ b/mysql-test/suite/rpl/t/rpl_extraColmaster_myisam.test
@@ -11,3 +11,5 @@ set binlog_format=row;
set binlog_format=statement;
-- source extra/rpl_tests/rpl_extraMaster_Col.test
+set binlog_format=mixed;
+-- source extra/rpl_tests/rpl_extraMaster_Col.test
diff --git a/mysql-test/suite/rpl/t/rpl_flushlog_loop.test b/mysql-test/suite/rpl/t/rpl_flushlog_loop.test
index 7d92ba9c2f4..750b49f19a9 100644
--- a/mysql-test/suite/rpl/t/rpl_flushlog_loop.test
+++ b/mysql-test/suite/rpl/t/rpl_flushlog_loop.test
@@ -2,12 +2,9 @@
# in case of bi-directional replication
-- source include/master-slave.inc
-#
-# Start replication master -> slave
-#
-# We have to sync with master, to ensure slave had time to start properly
-# before we stop it. If not, we get errors about UNIX_TIMESTAMP() in the log.
-sync_slave_with_master;
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+show variables like 'relay_log%';
+
connection slave;
--disable_warnings
stop slave;
diff --git a/mysql-test/suite/rpl/t/rpl_found_rows.test b/mysql-test/suite/rpl/t/rpl_found_rows.test
new file mode 100644
index 00000000000..f868061c951
--- /dev/null
+++ b/mysql-test/suite/rpl/t/rpl_found_rows.test
@@ -0,0 +1,256 @@
+source include/master-slave.inc;
+
+# It is not possible to replicate FOUND_ROWS() using statement-based
+# replication, but there is a workaround that stores the result of
+# FOUND_ROWS() into a user variable and then replicates this instead.
+
+# The purpose of this test case is to test that the workaround
+# function properly even when inside stored programs (i.e., stored
+# routines and triggers).
+
+--echo ==== 0. Setting it all up ====
+
+SET BINLOG_FORMAT=STATEMENT;
+
+--echo **** On Master ****
+connection master;
+CREATE TABLE t1 (a INT);
+CREATE TABLE logtbl (sect INT, test INT, count INT);
+
+INSERT INTO t1 VALUES (1),(2),(3);
+INSERT INTO t1 SELECT 2*a+3 FROM t1;
+INSERT INTO t1 SELECT 2*a+3 FROM t1;
+INSERT INTO t1 SELECT 2*a+3 FROM t1;
+INSERT INTO t1 SELECT 2*a+3 FROM t1;
+INSERT INTO t1 SELECT 2*a+3 FROM t1;
+INSERT INTO t1 SELECT 2*a+3 FROM t1;
+
+--echo #### 1. Using statement mode ####
+
+--echo ==== 1.1. Simple test ====
+
+SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a > 5 ORDER BY a LIMIT 1;
+
+# Instead of
+# INSERT INTO logtbl VALUES(1, 1, FOUND_ROWS());
+# we write
+SELECT FOUND_ROWS() INTO @a;
+INSERT INTO logtbl VALUES(1,1,@a);
+
+SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a < 5 ORDER BY a LIMIT 1;
+# Instead of
+# INSERT INTO logtbl VALUES(1, 2, FOUND_ROWS());
+# we write
+SELECT FOUND_ROWS() INTO @a;
+INSERT INTO logtbl VALUES(1,2,@a);
+
+SELECT * FROM logtbl WHERE sect = 1 ORDER BY sect,test;
+--echo **** On Slave ****
+sync_slave_with_master;
+SELECT * FROM logtbl WHERE sect = 1 ORDER BY sect,test;
+
+--echo ==== 1.2. Stored procedure ====
+
+# Here we do both the calculation and the logging. We also do it twice
+# to make sure that there are no limitations on how many times it can
+# be used.
+
+--echo **** On Master ****
+connection master;
+--delimiter $$
+CREATE PROCEDURE calc_and_log(sect INT, test INT) BEGIN
+ DECLARE cnt INT;
+ SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a < 5 ORDER BY a LIMIT 1;
+ SELECT FOUND_ROWS() INTO cnt;
+ INSERT INTO logtbl VALUES(sect,test,cnt);
+ SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a > 5 ORDER BY a LIMIT 1;
+ SELECT FOUND_ROWS() INTO cnt;
+ INSERT INTO logtbl VALUES(sect,test+1,cnt);
+END $$
+--delimiter ;
+
+CALL calc_and_log(2,1);
+
+--delimiter $$
+CREATE PROCEDURE just_log(sect INT, test INT, found_rows INT) BEGIN
+ INSERT INTO logtbl VALUES (sect,test,found_rows);
+END $$
+--delimiter ;
+
+SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a > 5 ORDER BY a LIMIT 1;
+SELECT FOUND_ROWS() INTO @found_rows;
+CALL just_log(2,3,@found_rows);
+
+SELECT * FROM logtbl WHERE sect = 2 ORDER BY sect,test;
+--echo **** On Slave ****
+sync_slave_with_master;
+SELECT * FROM logtbl WHERE sect = 2 ORDER BY sect,test;
+
+--echo ==== 1.3. Stored functions ====
+--echo **** On Master ****
+connection master;
+--delimiter $$
+CREATE FUNCTION log_rows(sect INT, test INT, found_rows INT)
+ RETURNS INT
+BEGIN
+ INSERT INTO logtbl VALUES(sect,test,found_rows);
+ RETURN found_rows;
+END $$
+--delimiter ;
+
+SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a > 5 ORDER BY a LIMIT 1;
+SELECT FOUND_ROWS() INTO @found_rows;
+SELECT log_rows(3,1,@found_rows), log_rows(3,2,@found_rows);
+
+SELECT * FROM logtbl WHERE sect = 3 ORDER BY sect,test;
+--echo **** On Slave ****
+sync_slave_with_master;
+SELECT * FROM logtbl WHERE sect = 3 ORDER BY sect,test;
+
+--echo ==== 1.9. Cleanup ====
+--echo **** On Master ****
+connection master;
+DELETE FROM logtbl;
+DROP PROCEDURE just_log;
+DROP PROCEDURE calc_and_log;
+DROP FUNCTION log_rows;
+sync_slave_with_master;
+
+source include/reset_master_and_slave.inc;
+
+--echo #### 2. Using mixed mode ####
+
+--echo ==== 2.1. Checking a procedure ====
+
+--echo **** On Master ****
+connection master;
+SET BINLOG_FORMAT=MIXED;
+
+# We will now check some stuff that will not work in statement-based
+# replication, but which should cause the binary log to switch to
+# row-based logging.
+
+--delimiter $$
+CREATE PROCEDURE just_log(sect INT, test INT) BEGIN
+ INSERT INTO logtbl VALUES (sect,test,FOUND_ROWS());
+END $$
+--delimiter ;
+sync_slave_with_master;
+
+--echo **** On Master 1 ****
+connection master1;
+SET BINLOG_FORMAT=MIXED;
+SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a > 5 ORDER BY a LIMIT 1;
+CALL just_log(1,1);
+
+--echo **** On Master ****
+connection master;
+SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a > 5 ORDER BY a LIMIT 1;
+CALL just_log(1,2);
+
+--echo **** On Master 1 ****
+
+connection master1;
+SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a < 5 ORDER BY a LIMIT 1;
+CALL just_log(1,3);
+sync_slave_with_master;
+
+--echo **** On Master ****
+connection master;
+SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a > 5 ORDER BY a LIMIT 1;
+CALL just_log(1,4);
+sync_slave_with_master;
+
+connection master;
+SELECT * FROM logtbl WHERE sect = 1 ORDER BY sect,test;
+--echo **** On Slave ****
+sync_slave_with_master;
+SELECT * FROM logtbl WHERE sect = 1 ORDER BY sect,test;
+
+--echo ==== 2.1. Checking a stored function ====
+--echo **** On Master ****
+connection master;
+--delimiter $$
+CREATE FUNCTION log_rows(sect INT, test INT)
+ RETURNS INT
+BEGIN
+ DECLARE found_rows INT;
+ SELECT FOUND_ROWS() INTO found_rows;
+ INSERT INTO logtbl VALUES(sect,test,found_rows);
+ RETURN found_rows;
+END $$
+--delimiter ;
+
+SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a < 5 ORDER BY a LIMIT 1;
+SELECT log_rows(2,1), log_rows(2,2);
+
+CREATE TABLE t2 (a INT, b INT);
+
+# Trying with referencing FOUND_ROWS() directly in the trigger.
+
+--delimiter $$
+CREATE TRIGGER t2_tr BEFORE INSERT ON t2 FOR EACH ROW
+BEGIN
+ INSERT INTO logtbl VALUES (NEW.a, NEW.b, FOUND_ROWS());
+END $$
+--delimiter ;
+
+SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a < 5 ORDER BY a LIMIT 1;
+INSERT INTO t2 VALUES (2,3), (2,4);
+
+# Referencing FOUND_ROWS() indirectly.
+
+DROP TRIGGER t2_tr;
+
+--delimiter $$
+CREATE TRIGGER t2_tr BEFORE INSERT ON t2 FOR EACH ROW
+BEGIN
+ DECLARE dummy INT;
+ SELECT log_rows(NEW.a, NEW.b) INTO dummy;
+END $$
+--delimiter ;
+
+SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a > 5 ORDER BY a LIMIT 1;
+INSERT INTO t2 VALUES (2,5), (2,6);
+
+# Putting FOUND_ROWS() even lower in the call chain.
+
+connection master;
+DROP TRIGGER t2_tr;
+
+--delimiter $$
+CREATE PROCEDURE log_me_inner(sect INT, test INT)
+BEGIN
+ DECLARE dummy INT;
+ SELECT log_rows(sect, test) INTO dummy;
+ SELECT log_rows(sect, test+1) INTO dummy;
+END $$
+
+CREATE PROCEDURE log_me(sect INT, test INT)
+BEGIN
+ CALL log_me_inner(sect,test);
+END $$
+--delimiter ;
+
+--delimiter $$
+CREATE TRIGGER t2_tr BEFORE INSERT ON t2 FOR EACH ROW
+BEGIN
+ CALL log_me(NEW.a, NEW.b);
+END $$
+--delimiter ;
+
+SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a > 5 ORDER BY a LIMIT 1;
+INSERT INTO t2 VALUES (2,5), (2,6);
+
+SELECT * FROM logtbl WHERE sect = 2 ORDER BY sect,test;
+sync_slave_with_master;
+SELECT * FROM logtbl WHERE sect = 2 ORDER BY sect,test;
+
+connection master;
+DROP TABLE t1, logtbl;
+DROP PROCEDURE just_log;
+DROP PROCEDURE log_me;
+DROP PROCEDURE log_me_inner;
+DROP FUNCTION log_rows;
+sync_slave_with_master;
+
diff --git a/mysql-test/suite/rpl/t/rpl_grant.test b/mysql-test/suite/rpl/t/rpl_grant.test
index 71e36342584..50b243eab92 100644
--- a/mysql-test/suite/rpl/t/rpl_grant.test
+++ b/mysql-test/suite/rpl/t/rpl_grant.test
@@ -9,12 +9,12 @@ connection master;
CREATE USER dummy@localhost;
CREATE USER dummy1@localhost, dummy2@localhost;
-SELECT user, host FROM mysql.user WHERE user != 'root'; # root host non-determ
-SELECT COUNT(*) FROM mysql.user;
+SELECT user, host FROM mysql.user WHERE user like 'dummy%';
+SELECT COUNT(*) FROM mysql.user WHERE user like 'dummy%';
sync_slave_with_master;
--echo **** On Slave ****
-SELECT user,host FROM mysql.user WHERE user != 'root'; # root host non-determ
-SELECT COUNT(*) FROM mysql.user;
+SELECT user,host FROM mysql.user WHERE user like 'dummy%';
+SELECT COUNT(*) FROM mysql.user WHERE user like 'dummy%';
--echo **** On Master ****
connection master;
@@ -30,13 +30,11 @@ DROP USER nonexisting@localhost, dummy@localhost;
# All users exist
DROP USER dummy1@localhost, dummy2@localhost;
-SELECT user, host FROM mysql.user WHERE user != 'root'; # root host non-determ
-SELECT COUNT(*) FROM mysql.user;
+SELECT user, host FROM mysql.user WHERE user like 'dummy%';
+SELECT COUNT(*) FROM mysql.user WHERE user like 'dummy%';
sync_slave_with_master;
--echo **** On Slave ****
-SELECT user,host FROM mysql.user WHERE user != 'root'; # root host non-determ
-SELECT COUNT(*) FROM mysql.user;
+SELECT user,host FROM mysql.user WHERE user like 'dummy%';
+SELECT COUNT(*) FROM mysql.user WHERE user like 'dummy%';
---replace_result $MASTER_MYPORT MASTER_PORT
---replace_column 1 # 8 # 9 # 23 # 33 #
-query_vertical SHOW SLAVE STATUS;
+source include/show_slave_status2.inc;
diff --git a/mysql-test/suite/rpl/t/rpl_idempotency-master.opt b/mysql-test/suite/rpl/t/rpl_idempotency-master.opt
new file mode 100644
index 00000000000..66f581b56d0
--- /dev/null
+++ b/mysql-test/suite/rpl/t/rpl_idempotency-master.opt
@@ -0,0 +1,2 @@
+--innodb
+
diff --git a/mysql-test/suite/rpl/t/rpl_idempotency-slave.opt b/mysql-test/suite/rpl/t/rpl_idempotency-slave.opt
new file mode 100644
index 00000000000..71ccf047474
--- /dev/null
+++ b/mysql-test/suite/rpl/t/rpl_idempotency-slave.opt
@@ -0,0 +1,2 @@
+--slave-exec-mode=IDEMPOTENT --innodb
+
diff --git a/mysql-test/suite/rpl/t/rpl_idempotency.test b/mysql-test/suite/rpl/t/rpl_idempotency.test
new file mode 100644
index 00000000000..cec91a6f4b7
--- /dev/null
+++ b/mysql-test/suite/rpl/t/rpl_idempotency.test
@@ -0,0 +1,415 @@
+# Testing various forms of idempotency for replication that should
+# work the same way under statement based as under row based.
+
+source include/master-slave.inc;
+connection master;
+source include/have_innodb.inc;
+connection slave;
+source include/have_innodb.inc;
+
+connection master;
+CREATE TABLE t1 (a INT PRIMARY KEY);
+CREATE TABLE t2 (a INT);
+INSERT INTO t1 VALUES (-1),(-2),(-3);
+INSERT INTO t2 VALUES (-1),(-2),(-3);
+sync_slave_with_master;
+
+# A delete for a row that does not exist, the statement is
+# deliberately written to be idempotent for statement-based
+# replication as well. We test this towards both a table with a
+# primary key and without a primary key.
+
+connection slave;
+DELETE FROM t1 WHERE a = -2;
+DELETE FROM t2 WHERE a = -2;
+connection master;
+DELETE FROM t1 WHERE a = -2;
+DELETE FROM t2 WHERE a = -2;
+SELECT * FROM t1 ORDER BY a;
+SELECT * FROM t2 ORDER BY a;
+sync_slave_with_master;
+SELECT * FROM t1 ORDER BY a;
+SELECT * FROM t2 ORDER BY a;
+let $last_error = query_get_value("SHOW SLAVE STATUS", Last_SQL_Errno, 1);
+disable_query_log;
+eval SELECT "$last_error" AS Last_SQL_Error;
+enable_query_log;
+
+# An insert of a row that already exists. Since we are replacing the
+# row if it already exists, the most apropriate representation is
+# INSERT IGNORE. We only test this towards a table with a primary key,
+# since the other case does not make sense.
+
+INSERT IGNORE INTO t1 VALUES (-2);
+connection master;
+INSERT IGNORE INTO t1 VALUES (-2);
+SELECT * FROM t1 ORDER BY a;
+sync_slave_with_master;
+SELECT * FROM t1 ORDER BY a;
+let $last_error = query_get_value("SHOW SLAVE STATUS", Last_SQL_Errno, 1);
+disable_query_log;
+eval SELECT "$last_error" AS Last_SQL_Error;
+enable_query_log;
+
+# BUG#19958: RBR idempotency issue for UPDATE and DELETE
+
+# Statement-based and row-based replication have different behaviour
+# when updating a row with an explicit WHERE-clause that matches
+# exactly one row (or no row at all). For statement-based replication,
+# the statement is idempotent since the first time it is executed, it
+# will update exactly one row, and the second time it will not update
+# any row at all. This was not the case for row-based replication, so
+# we test under both row-based and statement-based replication both
+# for tables with and without primary keys.
+
+connection slave;
+UPDATE t1 SET a = 1 WHERE a = -1;
+UPDATE t2 SET a = 1 WHERE a = -1;
+connection master;
+UPDATE t1 SET a = 1 WHERE a = -1;
+UPDATE t2 SET a = 1 WHERE a = -1;
+SELECT * FROM t1 ORDER BY a;
+SELECT * FROM t2 ORDER BY a;
+sync_slave_with_master;
+SELECT * FROM t1 ORDER BY a;
+SELECT * FROM t2 ORDER BY a;
+let $last_error = query_get_value("SHOW SLAVE STATUS", Last_SQL_Errno, 1);
+disable_query_log;
+eval SELECT "$last_error" AS Last_SQL_Error;
+enable_query_log;
+
+connection master;
+DROP TABLE t1, t2;
+sync_slave_with_master;
+
+# bug#31609 Not all RBR slave errors reported as errors
+# bug#31552 Replication breaks when deleting rows from out-of-sync table
+# without PK
+
+#
+# Idempotent applying is not default any longer.
+# The default for slave-exec-mode option and server
+# variable slave_exec_mode is 'STRICT'.
+# When 'STRICT' mode is set, the slave SQL thread will stop whenever
+# the row to change is not found. In 'IDEMPOTENT' mode, the SQL thread
+# will continue running and apply the row - replace if it's Write_rows event -
+# or skip to the next event.
+
+# the previous part of the tests was with IDEMPOTENT slave's mode.
+
+
+#
+# Other than above idempotent errors dealing with foreign keys constraint
+#
+
+select @@global.slave_exec_mode /* must be IDEMPOTENT */;
+
+connection master;
+
+create table ti1 (b int primary key) engine = innodb;
+create table ti2 (a int primary key, b int, foreign key (b) references ti1(b))
+ engine = innodb;
+set foreign_key_checks=1 /* ensure the check */;
+
+insert into ti1 values (1),(2),(3);
+insert into ti2 set a=2, b=2;
+
+sync_slave_with_master;
+
+#connection slave;
+select * from ti1 order by b /* must be (1),(2),(3) */;
+insert into ti2 set a=1, b=1;
+select * from ti2 order by b /* must be (1,1) (2,2) */;
+
+connection master;
+
+# from now on checking rbr specific idempotent errors
+set @save_binlog_format= @@session.binlog_format;
+set @@session.binlog_format= row;
+delete from ti1 where b=1;
+
+select * from ti1 order by b /* must be (2),(3) */;
+
+# slave must catch up (expect some warnings in error.log)
+sync_slave_with_master;
+
+#connection slave;
+select * from ti1 order by b /* must stays as were on master (1),(2),(3) */;
+
+delete from ti1 where b=3;
+
+connection master;
+insert into ti2 set a=3, b=3;
+
+# slave must catch up (expect some warnings in error.log)
+sync_slave_with_master;
+
+#connection slave;
+select * from ti2 order by b /* must be (1,1),(2,2) - not inserted */;
+
+
+#
+# Checking the new global sys variable
+#
+
+connection slave;
+
+set global slave_exec_mode='IDEMPOTENT';
+set global slave_exec_mode='STRICT';
+
+# checking mutual exclusion for the options
+--error ER_SLAVE_AMBIGOUS_EXEC_MODE
+set global slave_exec_mode='IDEMPOTENT,STRICT';
+
+select @@global.slave_exec_mode /* must be STRICT */;
+
+#
+# Checking stops.
+# In the following sections strict slave sql thread is going to
+# stop when faces an idempotent error. In order to proceed
+# the mode is temporarily switched to indempotent.
+#
+
+#
+--echo *** foreign keys errors as above now forces to stop
+#
+
+connection master;
+
+set foreign_key_checks=0;
+drop table ti2, ti1;
+
+create table ti1 (b int primary key) engine = innodb;
+create table ti2 (a int primary key, b int, foreign key (b) references ti1(b))
+ engine = innodb;
+set foreign_key_checks=1 /* ensure the check */;
+
+insert into ti1 values (1),(2),(3);
+insert into ti2 set a=2, b=2;
+
+sync_slave_with_master;
+
+#connection slave;
+select * from ti1 order by b /* must be (1),(2),(3) */;
+--echo *** conspire future problem
+insert into ti2 set a=1, b=1;
+select * from ti2 order by b /* must be (1,1) (2,2) */;
+
+connection master;
+
+delete from ti1 where b=1 /* offending delete event */;
+select * from ti1 order by b /* must be (2),(3) */;
+
+# foreign key: row is referenced
+
+--echo *** slave must stop
+source include/wait_for_slave_sql_to_stop.inc;
+
+connection slave;
+
+let $last_error = query_get_value("SHOW SLAVE STATUS", Last_SQL_Errno, 1);
+disable_query_log;
+eval SELECT "$last_error" AS Last_SQL_Error;
+enable_query_log;
+
+select * from ti1 order by b /* must be (1),(2),(3) - not deleted */;
+set foreign_key_checks= 0;
+delete from ti2 where b=1;
+set foreign_key_checks= 1;
+set global slave_exec_mode='IDEMPOTENT';
+start slave sql_thread;
+connection master;
+sync_slave_with_master;
+#connection slave;
+set global slave_exec_mode='STRICT';
+
+connection master;
+
+sync_slave_with_master;
+
+#connection slave;
+--echo *** conspire the following insert failure
+# foreign key: no referenced row
+
+--echo *** conspire future problem
+delete from ti1 where b=3;
+
+connection master;
+insert into ti2 set a=3, b=3 /* offending write event */;
+--echo *** slave must stop
+
+source include/wait_for_slave_sql_to_stop.inc;
+
+connection slave;
+
+let $last_error = query_get_value("SHOW SLAVE STATUS", Last_SQL_Errno, 1);
+disable_query_log;
+eval SELECT "$last_error" AS Last_SQL_Error;
+enable_query_log;
+
+select * from ti2 order by b /* must be (2,2) */;
+set foreign_key_checks= 0;
+insert into ti1 set b=3;
+set foreign_key_checks= 1;
+set global slave_exec_mode='IDEMPOTENT';
+start slave sql_thread;
+connection master;
+sync_slave_with_master;
+#connection slave;
+set global slave_exec_mode='STRICT';
+
+connection master;
+
+sync_slave_with_master;
+
+select * from ti2 order by b /* must be (2,2),(3,3) */;
+
+#
+--echo *** other errors
+#
+
+# dup key insert
+
+#connection slave;
+--echo *** conspiring query
+insert into ti1 set b=1;
+
+connection master;
+insert into ti1 set b=1 /* offending write event */;
+
+--echo *** slave must stop
+source include/wait_for_slave_sql_to_stop.inc;
+
+connection slave;
+
+let $last_error = query_get_value("SHOW SLAVE STATUS", Last_SQL_Errno, 1);
+disable_query_log;
+eval SELECT "$last_error" AS Last_SQL_Error;
+enable_query_log;
+
+set foreign_key_checks= 0;
+delete from ti1 where b=1;
+set foreign_key_checks= 1;
+set global slave_exec_mode='IDEMPOTENT';
+start slave sql_thread;
+connection master;
+sync_slave_with_master;
+#connection slave;
+set global slave_exec_mode='STRICT';
+
+# key not found
+
+connection master;
+
+CREATE TABLE t1 (a INT PRIMARY KEY);
+CREATE TABLE t2 (a INT);
+INSERT INTO t1 VALUES (-1),(-2),(-3);
+INSERT INTO t2 VALUES (-1),(-2),(-3);
+sync_slave_with_master;
+
+#connection slave;
+DELETE FROM t1 WHERE a = -2;
+DELETE FROM t2 WHERE a = -2;
+connection master;
+DELETE FROM t1 WHERE a = -2;
+
+--echo *** slave must stop
+source include/wait_for_slave_sql_to_stop.inc;
+
+connection slave;
+
+let $last_error = query_get_value("SHOW SLAVE STATUS", Last_SQL_Errno, 1);
+disable_query_log;
+eval SELECT "$last_error" AS Last_SQL_Error;
+enable_query_log;
+
+set global slave_exec_mode='IDEMPOTENT';
+start slave sql_thread;
+connection master;
+sync_slave_with_master;
+#connection slave;
+set global slave_exec_mode='STRICT';
+
+connection master;
+DELETE FROM t2 WHERE a = -2;
+--echo *** slave must stop
+source include/wait_for_slave_sql_to_stop.inc;
+
+connection slave;
+
+let $last_error = query_get_value("SHOW SLAVE STATUS", Last_SQL_Errno, 1);
+disable_query_log;
+eval SELECT "$last_error" AS Last_SQL_Error;
+enable_query_log;
+
+set global slave_exec_mode='IDEMPOTENT';
+start slave sql_thread;
+connection master;
+sync_slave_with_master;
+#connection slave;
+set global slave_exec_mode='STRICT';
+
+UPDATE t1 SET a = 1 WHERE a = -1;
+UPDATE t2 SET a = 1 WHERE a = -1;
+
+connection master;
+UPDATE t1 SET a = 1 WHERE a = -1;
+
+--echo *** slave must stop
+source include/wait_for_slave_sql_to_stop.inc;
+
+connection slave;
+
+let $last_error = query_get_value("SHOW SLAVE STATUS", Last_SQL_Errno, 1);
+disable_query_log;
+eval SELECT "$last_error" AS Last_SQL_Error;
+enable_query_log;
+
+set global slave_exec_mode='IDEMPOTENT';
+start slave sql_thread;
+connection master;
+sync_slave_with_master;
+#connection slave;
+set global slave_exec_mode='STRICT';
+
+
+connection master;
+UPDATE t2 SET a = 1 WHERE a = -1;
+
+--echo *** slave must stop
+source include/wait_for_slave_sql_to_stop.inc;
+
+connection slave;
+
+let $last_error = query_get_value("SHOW SLAVE STATUS", Last_SQL_Errno, 1);
+disable_query_log;
+eval SELECT "$last_error" AS Last_SQL_Error;
+enable_query_log;
+
+set global slave_exec_mode='IDEMPOTENT';
+start slave sql_thread;
+connection master;
+sync_slave_with_master;
+#connection slave;
+set global slave_exec_mode='STRICT';
+
+
+# cleanup for bug#31609 tests
+
+connection master;
+set @@session.binlog_format= @save_binlog_format;
+drop table t1,t2,ti2,ti1;
+
+sync_slave_with_master;
+
+
+--echo *** end of tests
+
+
+
+
+
+
+
+
+
diff --git a/mysql-test/suite/rpl/t/rpl_ignore_table.test b/mysql-test/suite/rpl/t/rpl_ignore_table.test
index fd4ae64165a..7f13b16b0de 100644
--- a/mysql-test/suite/rpl/t/rpl_ignore_table.test
+++ b/mysql-test/suite/rpl/t/rpl_ignore_table.test
@@ -119,6 +119,13 @@ show grants for mysqltest3@localhost;
show grants for mysqltest4@localhost;
# Cleanup
+# connection slave;
+# BUG31552 changes idempotency is not default any longer
+# In order the following `delete from mysql.user',
+# where mysqltest1 does not exist on slave,
+# to succeed on slave the mode is temporarily changed
+set global slave_exec_mode='IDEMPOTENT';
+
connection master;
drop table t1, t4, mysqltest2.t2;
drop database mysqltest2;
@@ -129,7 +136,10 @@ delete from mysql.db where user like "mysqltest%";
# move it to slave instead
#delete from mysql.tables_priv where user like "mysqltest%";
delete from mysql.columns_priv where user like "mysqltest%";
+
sync_slave_with_master;
+# bug#31552: do not restore the mode here but later in order
+# to succeed with yet the following delete from mysql.tables_priv
#BUG27606
delete from mysql.tables_priv where user like "mysqltest%";
@@ -155,6 +165,7 @@ CREATE TEMPORARY TABLE tmptbl504451f4258$1 (id INT NOT NULL) ENGINE=MEMORY;
INSERT INTO t5 (word) VALUES ('TEST’');
SELECT HEX(word) FROM t5;
sync_slave_with_master;
+set @@global.slave_exec_mode= default; # bug#31552 comments above
connection slave;
SELECT HEX(word) FROM t5;
--error 1146
diff --git a/mysql-test/suite/rpl/t/rpl_init_slave.test b/mysql-test/suite/rpl/t/rpl_init_slave.test
index 139b4902e12..1511bd541ed 100644
--- a/mysql-test/suite/rpl/t/rpl_init_slave.test
+++ b/mysql-test/suite/rpl/t/rpl_init_slave.test
@@ -4,9 +4,17 @@ source include/master-slave.inc;
# Test of init_slave variable
#
+set global max_connections=151;
+
+connection slave;
+stop slave;
+source include/wait_for_slave_to_stop.inc;
+start slave;
+source include/wait_for_slave_to_start.inc;
+
+connection master;
save_master_pos;
connection slave;
-sleep 1;
show variables like 'init_slave';
show variables like 'max_connections';
sync_with_master;
diff --git a/mysql-test/suite/rpl/t/rpl_innodb_bug28430.test b/mysql-test/suite/rpl/t/rpl_innodb_bug28430.test
index fe3881ab08f..eb828f07415 100644
--- a/mysql-test/suite/rpl/t/rpl_innodb_bug28430.test
+++ b/mysql-test/suite/rpl/t/rpl_innodb_bug28430.test
@@ -1,4 +1,5 @@
--source include/have_innodb.inc
+--source include/have_partition.inc
--source include/have_binlog_format_mixed_or_row.inc
--source include/master-slave.inc
@@ -135,8 +136,7 @@ SELECT count(*) as "Master byrange" FROM test.byrange_tbl;
--sync_slave_with_master
connection slave;
show create table test.byrange_tbl;
---replace_column 4 MASTER_PORT 33 #
-show slave status;
+source include/show_slave_status.inc;
SELECT count(*) "Slave norm" FROM test.regular_tbl;
SELECT count(*) "Slave bykey" FROM test.bykey_tbl;
SELECT count(*) "Slave byrange" FROM test.byrange_tbl;
diff --git a/mysql-test/suite/rpl/t/rpl_innodb_bug30919.test b/mysql-test/suite/rpl/t/rpl_innodb_bug30919.test
index a3779c68021..56b2c7bc03d 100644
--- a/mysql-test/suite/rpl/t/rpl_innodb_bug30919.test
+++ b/mysql-test/suite/rpl/t/rpl_innodb_bug30919.test
@@ -1,4 +1,5 @@
--source include/have_innodb.inc
+--source include/have_partition.inc
--vertical_results
let $engine_type= 'innodb';
diff --git a/mysql-test/suite/rpl/t/rpl_insert.test b/mysql-test/suite/rpl/t/rpl_insert.test
index 0d471a0e0a9..504ca1809ad 100644
--- a/mysql-test/suite/rpl/t/rpl_insert.test
+++ b/mysql-test/suite/rpl/t/rpl_insert.test
@@ -17,18 +17,8 @@ let $query = "INSERT DELAYED INTO t1 VALUES (1, 'Dr. No'), (2, 'From Russia With
--exec $MYSQL_SLAP --silent --concurrency=5 --iterations=200 --query=$query --delimiter=";"
# Wait until all the 5000 inserts has been inserted into the table
---disable_query_log
-let $counter= 300; # Max 30 seconds wait
-while (`select count(*)!=5000 from mysqlslap.t1`)
-{
- sleep 0.1;
- dec $counter;
- if (!$counter)
- {
- Number of records in t1 didnt reach 5000;
- }
-}
---enable_query_log
+let $wait_condition= SELECT COUNT(*) = 5000 FROM mysqlslap.t1;
+--source include/wait_condition.inc
SELECT COUNT(*) FROM mysqlslap.t1;
sync_slave_with_master;
diff --git a/mysql-test/suite/rpl/t/rpl_invoked_features.test b/mysql-test/suite/rpl/t/rpl_invoked_features.test
index e797e0552ef..17cdc1e61cf 100644
--- a/mysql-test/suite/rpl/t/rpl_invoked_features.test
+++ b/mysql-test/suite/rpl/t/rpl_invoked_features.test
@@ -8,10 +8,9 @@
--source include/master-slave.inc
--source include/have_innodb.inc
-
-#
-# Define variables used by test case
-#
+# --disable_warnings/--enable_warnings added before/after query
+# if one uses UUID() function because we need to avoid warnings
+# for STATEMENT binlog format
# Non-transactional engine
--let $engine_type= myisam
@@ -45,20 +44,24 @@ DROP EVENT IF EXISTS e11;
--echo
eval CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY, b INT, c VARCHAR(64)) ENGINE=$engine_type;
---disable_warnings
INSERT INTO t1 VALUES (1,1,'1');
+--disable_warnings
INSERT INTO t1 VALUES (2,2,UUID());
-eval CREATE TABLE t2 (a INT, b INT, c VARCHAR(64)) ENGINE=$engine_type;
+--enable_warnings
+eval CREATE TABLE t2 (a INT UNIQUE, b INT, c VARCHAR(64)) ENGINE=$engine_type;
INSERT INTO t2 VALUES (1,1,'1');
+--disable_warnings
INSERT INTO t2 VALUES (2,2,UUID());
--enable_warnings
eval CREATE TABLE t11 (a INT NOT NULL PRIMARY KEY, b INT, c VARCHAR(64)) ENGINE=$engine_type2;
---disable_warnings
INSERT INTO t11 VALUES (1,1,'1');
+--disable_warnings
INSERT INTO t11 VALUES (2,2,UUID());
-eval CREATE TABLE t12 (a INT, b INT, c VARCHAR(64)) ENGINE=$engine_type2;
+--enable_warnings
+eval CREATE TABLE t12 (a INT UNIQUE, b INT, c VARCHAR(64)) ENGINE=$engine_type2;
INSERT INTO t12 VALUES (1,1,'1');
+--disable_warnings
INSERT INTO t12 VALUES (2,2,UUID());
--enable_warnings
@@ -96,22 +99,16 @@ BEGIN
END|
# Create events which will run every 1 sec
-CREATE EVENT e1 ON SCHEDULE EVERY 1 SECOND ENABLE DO
+CREATE EVENT e1 ON SCHEDULE EVERY 1 SECOND DISABLE DO
BEGIN
- DECLARE c INT;
- SELECT a INTO c FROM t1 WHERE a < 11 ORDER BY a DESC LIMIT 1;
- IF c = 7 THEN
- CALL p1(10, '');
- END IF;
+ ALTER EVENT e1 DISABLE;
+ CALL p1(10, '');
END|
-CREATE EVENT e11 ON SCHEDULE EVERY 1 SECOND ENABLE DO
+CREATE EVENT e11 ON SCHEDULE EVERY 1 SECOND DISABLE DO
BEGIN
- DECLARE c INT;
- SELECT a INTO c FROM t11 WHERE a < 11 ORDER BY a DESC LIMIT 1;
- IF c = 7 THEN
- CALL p11(10, '');
- END IF;
+ ALTER EVENT e11 DISABLE;
+ CALL p11(10, '');
END|
# Create functions and procedures used for events
@@ -130,12 +127,12 @@ END|
CREATE PROCEDURE p1 (IN x INT, IN y VARCHAR(64))
BEGIN
- INSERT INTO t1 VALUES (x,x,y);
+ INSERT IGNORE INTO t1 VALUES (x,x,y);
END|
CREATE PROCEDURE p11 (IN x INT, IN y VARCHAR(64))
BEGIN
- INSERT INTO t11 VALUES (x,x,y);
+ INSERT IGNORE INTO t11 VALUES (x,x,y);
END|
DELIMITER ;|
@@ -147,17 +144,24 @@ DELIMITER ;|
# Do some actions for non-transactional tables
--echo
---disable_warnings
CREATE TABLE t3 SELECT * FROM v1;
INSERT INTO t1 VALUES (3,3,'');
UPDATE t1 SET c='2' WHERE a = 1;
+--disable_warnings
INSERT INTO t1 VALUES(4,4,f1(4));
+--enable_warnings
INSERT INTO t1 VALUES (100,100,'');
+--disable_warnings
CALL p1(5, UUID());
+--enable_warnings
INSERT INTO t1 VALUES (101,101,'');
+--disable_warnings
INSERT INTO t1 VALUES(6,6,f1(6));
+--enable_warnings
INSERT INTO t1 VALUES (102,102,'');
+--disable_warnings
INSERT INTO t1 VALUES(7,7,f2(7));
+--enable_warnings
INSERT INTO t1 VALUES (103,103,'');
# Do some actions for transactional tables
@@ -165,30 +169,43 @@ INSERT INTO t1 VALUES (103,103,'');
CREATE TABLE t13 SELECT * FROM v11;
INSERT INTO t11 VALUES (3,3,'');
UPDATE t11 SET c='2' WHERE a = 1;
+--disable_warnings
INSERT INTO t11 VALUES(4,4,f1(4));
+--enable_warnings
INSERT INTO t11 VALUES (100,100,'');
+--disable_warnings
CALL p11(5, UUID());
+--enable_warnings
INSERT INTO t11 VALUES (101,101,'');
+--disable_warnings
INSERT INTO t11 VALUES(6,6,f1(6));
+--enable_warnings
INSERT INTO t11 VALUES (102,102,'');
+--disable_warnings
INSERT INTO t11 VALUES(7,7,f2(7));
-INSERT INTO t11 VALUES (103,103,'');
--enable_warnings
+INSERT INTO t11 VALUES (103,103,'');
# Scheduler is on
--echo
+# Temporally events fire sequentally due Bug#29020.
SET GLOBAL EVENT_SCHEDULER = on;
-# Wait 2 sec while events will executed
---sleep 2
+# Wait while events will executed
+ALTER EVENT e1 ENABLE;
+let $wait_condition= SELECT COUNT(*) = 1 FROM t1 WHERE t1.a = 10;
+--source include/wait_condition.inc
+ALTER EVENT e11 ENABLE;
+let $wait_condition= SELECT COUNT(*) = 1 FROM t11 WHERE t11.a = 10;
+--source include/wait_condition.inc
SET GLOBAL EVENT_SCHEDULER = off;
# Check original objects
--echo
SHOW TABLES LIKE 't%';
-SELECT table_name FROM information_schema.views WHERE table_schema='test';
-SELECT trigger_name, event_manipulation, event_object_table FROM information_schema.triggers WHERE trigger_schema='test';
-SELECT routine_type, routine_name FROM information_schema.routines WHERE routine_schema='test';
-SELECT event_name, status FROM information_schema.events WHERE event_schema='test';
+SELECT table_name FROM information_schema.views WHERE table_schema='test' ORDER BY table_name;
+SELECT trigger_name, event_manipulation, event_object_table FROM information_schema.triggers WHERE trigger_schema='test' ORDER BY trigger_name;
+SELECT routine_type, routine_name FROM information_schema.routines WHERE routine_schema='test' ORDER BY routine_name;
+SELECT event_name, status FROM information_schema.events WHERE event_schema='test' ORDER BY event_name;
# Check original data
--echo
@@ -212,10 +229,10 @@ SELECT a,b FROM v11 ORDER BY a;
# Check replicated objects
--echo
SHOW TABLES LIKE 't%';
-SELECT table_name FROM information_schema.views WHERE table_schema='test';
-SELECT trigger_name, event_manipulation, event_object_table FROM information_schema.triggers WHERE trigger_schema='test';
-SELECT routine_type, routine_name FROM information_schema.routines WHERE routine_schema='test';
-SELECT event_name, status FROM information_schema.events WHERE event_schema='test';
+SELECT table_name FROM information_schema.views WHERE table_schema='test' ORDER BY table_name;
+SELECT trigger_name, event_manipulation, event_object_table FROM information_schema.triggers WHERE trigger_schema='test' ORDER BY trigger_name;
+SELECT routine_type, routine_name FROM information_schema.routines WHERE routine_schema='test' ORDER BY routine_name;
+SELECT event_name, status FROM information_schema.events WHERE event_schema='test' ORDER BY event_name;
# Check replicated data
--echo
@@ -234,7 +251,7 @@ SELECT COUNT(*) FROM t13;
SELECT a,b FROM t13 ORDER BY a;
SELECT a,b FROM v11 ORDER BY a;
-# Remove UUID() before comparing
+# Remove UUID() before comparing and sort tables
--connection master
--echo
@@ -245,6 +262,9 @@ UPDATE t11 SET c='';
UPDATE t12 SET c='';
UPDATE t13 SET c='';
+ALTER TABLE t3 ORDER BY a;
+ALTER TABLE t13 ORDER BY a;
+
--sync_slave_with_master slave
# Compare a data from master and slave
@@ -260,13 +280,12 @@ UPDATE t13 SET c='';
# Remove dumps
--echo
---exec rm $MYSQLTEST_VARDIR/tmp/rpl_invoked_features_master.sql
---exec rm $MYSQLTEST_VARDIR/tmp/rpl_invoked_features_slave.sql
+--remove_file $MYSQLTEST_VARDIR/tmp/rpl_invoked_features_master.sql
+--remove_file $MYSQLTEST_VARDIR/tmp/rpl_invoked_features_slave.sql
# Remove tables,views,procedures,functions
--connection master
--echo
---disable_warnings
DROP VIEW IF EXISTS v1,v11;
DROP TABLE IF EXISTS t1,t2,t3,t11,t12,t13;
DROP PROCEDURE IF EXISTS p1;
@@ -275,7 +294,6 @@ DROP FUNCTION IF EXISTS f1;
DROP FUNCTION IF EXISTS f2;
DROP EVENT IF EXISTS e1;
DROP EVENT IF EXISTS e11;
---enable_warnings
--sync_slave_with_master slave
diff --git a/mysql-test/suite/rpl/t/rpl_load_from_master.test b/mysql-test/suite/rpl/t/rpl_load_from_master.test
index 9bab7d5696e..b04d8a44226 100644
--- a/mysql-test/suite/rpl/t/rpl_load_from_master.test
+++ b/mysql-test/suite/rpl/t/rpl_load_from_master.test
@@ -54,7 +54,7 @@ connection master;
set sql_log_bin = 0;
create database mysqltest2;
create database mysqltest;
-show databases;
+show databases like 'mysql%';
create table mysqltest2.t1(n int, s char(20))ENGINE=MyISAM;
create table mysqltest2.t2(n int, s text)ENGINE=MyISAM;
insert into mysqltest2.t1 values (1, 'one'), (2, 'two'), (3, 'three');
@@ -71,7 +71,7 @@ connection slave;
sync_with_master;
# This should show that the slave is empty at this point
-show databases;
+show databases like 'mysql%';
# Create mysqltest2 and mysqltest3 on slave; we expect that LOAD DATA FROM
# MASTER will neither touch database mysqltest nor mysqltest3
create database mysqltest2;
@@ -95,7 +95,7 @@ insert into mysqltest.t3 values (1, 'original bar.t3');
load data from master;
# Now let's check if we have the right tables and the right data in them
-show databases;
+show databases like 'mysql%';
use mysqltest2;
# LOAD DATA FROM MASTER uses only replicate_*_db rules to decide which
diff --git a/mysql-test/suite/rpl/t/rpl_loaddata_map-master.opt b/mysql-test/suite/rpl/t/rpl_loaddata_map-master.opt
new file mode 100644
index 00000000000..831680eb5ef
--- /dev/null
+++ b/mysql-test/suite/rpl/t/rpl_loaddata_map-master.opt
@@ -0,0 +1 @@
+--read_buffer_size=12K --max_allowed_packet=8K
diff --git a/mysql-test/suite/rpl/t/rpl_loaddata_map-slave.opt b/mysql-test/suite/rpl/t/rpl_loaddata_map-slave.opt
new file mode 100644
index 00000000000..95f55bcf7d8
--- /dev/null
+++ b/mysql-test/suite/rpl/t/rpl_loaddata_map-slave.opt
@@ -0,0 +1 @@
+--max_allowed_packet=8K
diff --git a/mysql-test/suite/rpl/t/rpl_loaddata_map.test b/mysql-test/suite/rpl/t/rpl_loaddata_map.test
new file mode 100644
index 00000000000..3d6f09844b6
--- /dev/null
+++ b/mysql-test/suite/rpl/t/rpl_loaddata_map.test
@@ -0,0 +1,53 @@
+#
+# check replication of load data with the server parameters subjected to
+# read_buffer_size > max_allowed_packet
+#
+# BUG#30435 loading large LOAD DATA INFILE breaks slave with
+# read_buffer_size set on master
+# BUG#33413 show binlog events fails if binlog has event size of close
+# to max_allowed_packet
+
+source include/master-slave.inc;
+source include/have_innodb.inc;
+source include/have_binlog_format_mixed_or_statement.inc;
+
+--disable_query_log
+let $rows= 5000;
+create table t1 (id int not null primary key auto_increment);
+
+while($rows)
+{
+ eval insert into t1 values (null);
+ dec $rows;
+}
+eval select * into outfile '$MYSQLTEST_VARDIR/tmp/bug30435_5k.txt' from t1;
+flush logs;
+--enable_query_log
+
+connection master;
+create table t2 (id int not null primary key auto_increment);
+
+select @@session.read_buffer_size - @@session.max_allowed_packet > 0 ;
+
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+eval load data infile '$MYSQLTEST_VARDIR/tmp/bug30435_5k.txt' into table t2;
+select count(*) from t2 /* 5 000 */;
+
+# the binglog will show fragmented Append_block events
+--let $binlog_start=106
+--replace_column 5 #
+--replace_regex /\/\* xid=.* \*\//\/* XID *\// /file_id=[0-9]+/file_id=#/
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--eval show binlog events in 'master-bin.000002' from $binlog_start
+
+
+sync_slave_with_master;
+#connection slave;
+select count(*) from t2 /* 5 000 */;
+
+connection master;
+drop table t1, t2;
+sync_slave_with_master;
+remove_file $MYSQLTEST_VARDIR/tmp/bug30435_5k.txt;
+
+--echo end of the tests
diff --git a/mysql-test/suite/rpl/t/rpl_loadfile.test b/mysql-test/suite/rpl/t/rpl_loadfile.test
index a671bab15bb..532db77c248 100644
--- a/mysql-test/suite/rpl/t/rpl_loadfile.test
+++ b/mysql-test/suite/rpl/t/rpl_loadfile.test
@@ -36,11 +36,12 @@ delimiter ;|
CALL test.p1();
SELECT * FROM test.t1 ORDER BY blob_column;
save_master_pos;
-# Need to allow some time when NDB engine is used for
-# the injector thread to have time to populate binlog
-sleep 10;
sync_slave_with_master;
connection slave;
+# Need to allow some time when NDB engine is used for
+# the injector thread to have time to populate binlog
+let $wait_condition= SELECT INSTR(blob_column,'aberration') > 0 FROM test.t1 WHERE a = 2;
+--source include/wait_condition.inc
SELECT * FROM test.t1 ORDER BY blob_column;
# Cleanup
diff --git a/mysql-test/suite/rpl/t/rpl_log_pos.test b/mysql-test/suite/rpl/t/rpl_log_pos.test
index e5ad6f39ed2..45a097b6f14 100644
--- a/mysql-test/suite/rpl/t/rpl_log_pos.test
+++ b/mysql-test/suite/rpl/t/rpl_log_pos.test
@@ -11,14 +11,13 @@
# Passes with rbr no problem, removed statement include [jbm]
source include/master-slave.inc;
---replace_column 3 <Binlog_Ignore_DB>
-show master status;
+source include/show_master_status.inc;
sync_slave_with_master;
stop slave;
--source include/wait_for_slave_to_stop.inc
change master to master_log_pos=75;
-source include/show_slave_status.inc;
+source include/show_slave_status2.inc;
start slave;
let $slave_param= Slave_SQL_Running;
let $slave_param_value= Yes;
@@ -31,15 +30,14 @@ stop slave;
source include/show_slave_status.inc;
connection master;
---replace_column 3 <Binlog_Ignore_DB>
-show master status;
+source include/show_master_status.inc;
create table if not exists t1 (n int);
drop table if exists t1;
create table t1 (n int);
insert into t1 values (1),(2),(3);
save_master_pos;
connection slave;
-change master to master_log_pos=106;
+change master to master_log_pos=4;
start slave;
sync_with_master;
select * from t1 ORDER BY n;
diff --git a/mysql-test/suite/rpl/t/rpl_misc_functions.test b/mysql-test/suite/rpl/t/rpl_misc_functions.test
index 1c94471c975..4a47e9645f9 100644
--- a/mysql-test/suite/rpl/t/rpl_misc_functions.test
+++ b/mysql-test/suite/rpl/t/rpl_misc_functions.test
@@ -109,6 +109,7 @@ DROP TABLE t1, t1_slave;
DROP PROCEDURE test_replication_sp1;
DROP PROCEDURE test_replication_sp2;
DROP FUNCTION test_replication_sf;
+--remove_file $MYSQLTEST_VARDIR/master-data/test/rpl_misc_functions.outfile
--sync_slave_with_master
diff --git a/mysql-test/suite/rpl/t/rpl_packet.test b/mysql-test/suite/rpl/t/rpl_packet.test
index 316278cb75d..0e17ae3144c 100644
--- a/mysql-test/suite/rpl/t/rpl_packet.test
+++ b/mysql-test/suite/rpl/t/rpl_packet.test
@@ -66,16 +66,11 @@ CREATE TABLe `t1` (`f1` LONGTEXT) ENGINE=MyISAM;
INSERT INTO `t1`(`f1`) VALUES ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2048');
# The slave I/O thread must stop after trying to read the above event
-connection slave;
-sleep 2;
---source include/wait_for_slave_io_to_stop.inc
-SHOW STATUS LIKE 'Slave_running';
-
-# cleanup
-#connection master;
-#drop table t1;
-#connection slave;
-#drop table t1;
-
+connection slave;
+--source include/wait_for_slave_io_to_stop.inc
+--replace_result $MASTER_MYPORT MASTER_MYPORT
+# import is only the 11th column Slave_IO_Running
+--replace_column 1 # 7 # 8 # 9 # 12 # 22 # 23 # 33 #
+query_vertical show slave status;
# End of tests
diff --git a/mysql-test/suite/rpl/t/rpl_rotate_logs.test b/mysql-test/suite/rpl/t/rpl_rotate_logs.test
index 998bce33e8f..9133c429934 100644
--- a/mysql-test/suite/rpl/t/rpl_rotate_logs.test
+++ b/mysql-test/suite/rpl/t/rpl_rotate_logs.test
@@ -65,14 +65,14 @@ insert into temp_table values ("testing temporary tables");
create table t1 (s text);
insert into t1 values('Could not break slave'),('Tried hard');
sync_slave_with_master;
-source include/show_slave_status.inc;
+source include/show_slave_status2.inc;
select * from t1;
connection master;
flush logs;
create table t2(m int not null auto_increment primary key);
insert into t2 values (34),(67),(123);
flush logs;
-show binary logs;
+source include/show_binary_logs.inc;
create table t3 select * from temp_table;
sync_slave_with_master;
@@ -106,10 +106,10 @@ connection master;
sync_slave_with_master;
connection master;
purge master logs to 'master-bin.000002';
-show master logs;
+source include/show_master_logs.inc;
# we just tests if synonyms are accepted
purge binary logs to 'master-bin.000002';
-show binary logs;
+source include/show_binary_logs.inc;
# Calculate time to use in "purge master logs before" by taking
# last modification time of t2 and adding 1 second
@@ -122,10 +122,10 @@ select @time_for_purge:=DATE_ADD(UPDATE_TIME, INTERVAL 1 SECOND)
--enable_result_log
purge master logs before (@time_for_purge);
-show binary logs;
+source include/show_binary_logs.inc;
insert into t2 values (65);
sync_slave_with_master;
-source include/show_slave_status.inc;
+source include/show_slave_status2.inc;
select * from t2;
#
@@ -148,14 +148,14 @@ while ($1)
enable_query_log;
select count(*) from t3 where n >= 4;
create table t4 select * from temp_table;
-show binary logs;
-show master status;
+source include/show_binary_logs.inc;
+source include/show_master_status.inc;
save_master_pos;
connection slave;
sync_with_master;
select * from t4;
-source include/show_slave_status.inc;
+source include/show_slave_status2.inc;
# because of concurrent insert, the table may not be up to date
# if we do not lock
lock tables t3 read;
diff --git a/mysql-test/suite/rpl/t/rpl_row_basic_11bugs.test b/mysql-test/suite/rpl/t/rpl_row_basic_11bugs.test
index fb43664f121..5904585a050 100644
--- a/mysql-test/suite/rpl/t/rpl_row_basic_11bugs.test
+++ b/mysql-test/suite/rpl/t/rpl_row_basic_11bugs.test
@@ -223,3 +223,43 @@ connection master;
drop table t1,t2;
sync_slave_with_master;
+
+#
+# BUG#31702: Missing row on slave causes assertion failure under
+# row-based replication
+#
+
+disable_query_log;
+source include/master-slave-reset.inc;
+enable_query_log;
+
+--echo **** On Master ****
+connection master;
+SET SESSION BINLOG_FORMAT=ROW;
+CREATE TABLE t1 (a INT PRIMARY KEY, b SET('master','slave'));
+INSERT INTO t1 VALUES (1,'master,slave'), (2,'master,slave');
+--echo **** On Slave ****
+sync_slave_with_master;
+UPDATE t1 SET a = 5, b = 'slave' WHERE a = 1;
+SELECT * FROM t1 ORDER BY a;
+# since bug#31552/31609 idempotency is not default any longer. In
+# order the preceeding test UPDATE t1 to pass the mode is switched
+# temprorarily
+set @@global.slave_exec_mode= 'IDEMPOTENT';
+--echo **** On Master ****
+connection master;
+UPDATE t1 SET a = 5, b = 'master' WHERE a = 1;
+SELECT * FROM t1 ORDER BY a;
+--echo **** On Slave ****
+sync_slave_with_master;
+set @@global.slave_exec_mode= default;
+let $last_error = query_get_value("SHOW SLAVE STATUS", Last_SQL_Error, 1);
+disable_query_log;
+eval SELECT "$last_error" AS Last_SQL_Error;
+enable_query_log;
+SELECT * FROM t1 ORDER BY a;
+DROP TABLE t1;
+
+--echo **** On Master ****
+connection master;
+DROP TABLE t1;
diff --git a/mysql-test/suite/rpl/t/rpl_row_charset_innodb-master.opt b/mysql-test/suite/rpl/t/rpl_row_charset_innodb-master.opt
new file mode 100644
index 00000000000..627becdbfb5
--- /dev/null
+++ b/mysql-test/suite/rpl/t/rpl_row_charset_innodb-master.opt
@@ -0,0 +1 @@
+--innodb
diff --git a/mysql-test/suite/rpl/t/rpl_row_charset_innodb-slave.opt b/mysql-test/suite/rpl/t/rpl_row_charset_innodb-slave.opt
new file mode 100644
index 00000000000..627becdbfb5
--- /dev/null
+++ b/mysql-test/suite/rpl/t/rpl_row_charset_innodb-slave.opt
@@ -0,0 +1 @@
+--innodb
diff --git a/mysql-test/suite/rpl/t/rpl_row_charset_innodb.test b/mysql-test/suite/rpl/t/rpl_row_charset_innodb.test
new file mode 100644
index 00000000000..2d48af65581
--- /dev/null
+++ b/mysql-test/suite/rpl/t/rpl_row_charset_innodb.test
@@ -0,0 +1,10 @@
+########################################################
+# By JBM 2005-02-15 Wrapped to allow reuse of test code#
+# Added to skip if ndb is default #
+########################################################
+-- source include/not_ndb_default.inc
+-- source include/have_binlog_format_row.inc
+-- source include/have_innodb.inc
+-- source include/master-slave.inc
+let $engine_type=innodb;
+-- source extra/rpl_tests/rpl_row_charset.test
diff --git a/mysql-test/suite/rpl/t/rpl_row_create_table.test b/mysql-test/suite/rpl/t/rpl_row_create_table.test
index 32a6299f28b..ffddfd2ce4a 100644
--- a/mysql-test/suite/rpl/t/rpl_row_create_table.test
+++ b/mysql-test/suite/rpl/t/rpl_row_create_table.test
@@ -72,7 +72,7 @@ CREATE TABLE t7 (UNIQUE(b)) SELECT a,b FROM tt3;
# Shouldn't be written to the binary log
--replace_column 1 # 4 #
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
-SHOW BINLOG EVENTS FROM 1100;
+SHOW BINLOG EVENTS FROM 1374;
# Test that INSERT-SELECT works the same way as for SBR.
CREATE TABLE t7 (a INT, b INT UNIQUE);
@@ -82,7 +82,7 @@ SELECT * FROM t7 ORDER BY a,b;
# Should be written to the binary log
--replace_column 1 # 4 #
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
-SHOW BINLOG EVENTS FROM 1100;
+SHOW BINLOG EVENTS FROM 1374;
sync_slave_with_master;
SELECT * FROM t7 ORDER BY a,b;
@@ -94,7 +94,7 @@ INSERT INTO t7 SELECT a,b FROM tt4;
ROLLBACK;
--replace_column 1 # 4 #
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
-SHOW BINLOG EVENTS FROM 1298;
+SHOW BINLOG EVENTS FROM 1572;
SELECT * FROM t7 ORDER BY a,b;
sync_slave_with_master;
SELECT * FROM t7 ORDER BY a,b;
@@ -110,7 +110,7 @@ CREATE TEMPORARY TABLE tt7 SELECT 1;
--query_vertical SHOW CREATE TABLE t9
--replace_column 1 # 4 #
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
-SHOW BINLOG EVENTS FROM 1396;
+SHOW BINLOG EVENTS FROM 1670;
sync_slave_with_master;
--echo **** On Slave ****
--query_vertical SHOW CREATE TABLE t8
diff --git a/mysql-test/suite/rpl/t/rpl_row_extraColmaster_ndb.test b/mysql-test/suite/rpl/t/rpl_row_extraColmaster_ndb.test
deleted file mode 100644
index b91947e52e2..00000000000
--- a/mysql-test/suite/rpl/t/rpl_row_extraColmaster_ndb.test
+++ /dev/null
@@ -1,12 +0,0 @@
-###########################################
-# Purpose: Wrapper for rpl_extraMaster_Col.test
-# Using NDB
-###########################################
--- source include/have_ndb.inc
--- source include/ndb_master-slave.inc
--- source include/have_binlog_format_row.inc
-
-let $engine_type = 'NDB';
-
--- source extra/rpl_tests/rpl_extraMaster_Col.test
-
diff --git a/mysql-test/suite/rpl/t/rpl_row_mysqlbinlog.test b/mysql-test/suite/rpl/t/rpl_row_mysqlbinlog.test
index dd46d64f684..be76ac9f3f6 100644
--- a/mysql-test/suite/rpl/t/rpl_row_mysqlbinlog.test
+++ b/mysql-test/suite/rpl/t/rpl_row_mysqlbinlog.test
@@ -344,5 +344,6 @@ FLUSH LOGS;
--exec rm $MYSQLTEST_VARDIR/tmp/local.sql
DROP TABLE IF EXISTS t1, t2, t3, t04, t05, t4, t5;
+sync_slave_with_master;
# End of 4.1 tests
diff --git a/mysql-test/suite/rpl/t/rpl_row_mystery22.test b/mysql-test/suite/rpl/t/rpl_row_mystery22.test
index 9933fec22fc..a3ba8648b22 100644
--- a/mysql-test/suite/rpl/t/rpl_row_mystery22.test
+++ b/mysql-test/suite/rpl/t/rpl_row_mystery22.test
@@ -9,6 +9,12 @@
# first, cause a duplicate key problem on the slave
create table t1(n int auto_increment primary key, s char(10));
sync_slave_with_master;
+
+# bug#31552/31609 idempotency is not default any longer
+# so that the declared in heading comments aim of the test
+# should be backed up with explicit setting of the slave mode
+set @@global.slave_exec_mode= 'IDEMPOTENT';
+
insert into t1 values (2,'old');
connection master;
insert into t1 values(NULL,'new');
@@ -43,3 +49,4 @@ select * from t1 order by n;
connection master;
drop table t1;
sync_slave_with_master;
+set @@global.slave_exec_mode= default;
diff --git a/mysql-test/suite/rpl/t/rpl_row_sp001.test b/mysql-test/suite/rpl/t/rpl_row_sp001.test
index c12e73b6861..1595c4a21d5 100644
--- a/mysql-test/suite/rpl/t/rpl_row_sp001.test
+++ b/mysql-test/suite/rpl/t/rpl_row_sp001.test
@@ -46,11 +46,15 @@ delimiter ;//
-- disable_query_log
-- disable_result_log
+SET @wait_count=1;
let $1=10;
while ($1)
{
call test.p1();
- sleep 1;
+ let $wait_condition= SELECT COUNT(*) = @wait_count FROM test.t1;
+ -- source include/wait_condition.inc
+ -- disable_query_log
+ SET @wait_count = @wait_count + 1;
dec $1;
}
-- enable_result_log
diff --git a/mysql-test/suite/rpl/t/rpl_row_sp005.test b/mysql-test/suite/rpl/t/rpl_row_sp005.test
index 054fa02f514..b118242dc3b 100644
--- a/mysql-test/suite/rpl/t/rpl_row_sp005.test
+++ b/mysql-test/suite/rpl/t/rpl_row_sp005.test
@@ -84,12 +84,15 @@ let $message=< ---- Master selects-- >;
--source include/show_msg.inc
connection master;
CALL test.p1();
-sleep 6;
+let $wait_condition= SELECT COUNT(*) = 4 FROM t3;
+--source include/wait_condition.inc
+save_master_pos;
SELECT * FROM test.t3 ORDER BY id3;
let $message=< ---- Slave selects-- >;
--source include/show_msg.inc
connection slave;
+sync_with_master;
SELECT * FROM test.t3 ORDER BY id3;
connection master;
diff --git a/mysql-test/suite/rpl/t/rpl_row_stop_middle.test b/mysql-test/suite/rpl/t/rpl_row_stop_middle.test
index da363736100..bc169bebfcd 100644
--- a/mysql-test/suite/rpl/t/rpl_row_stop_middle.test
+++ b/mysql-test/suite/rpl/t/rpl_row_stop_middle.test
@@ -33,7 +33,8 @@ start slave;
# hope one second is not enough for slave to reach the last
# Rows_log_event, so that test actually tests something.
-real_sleep 1;
+let $wait_condition= SELECT COUNT(*) >= 10 FROM t1;
+--source include/wait_condition.inc
stop slave;
# see if slave hangs on DROP TABLE
diff --git a/mysql-test/suite/rpl/t/rpl_row_trig001.test b/mysql-test/suite/rpl/t/rpl_row_trig001.test
index 7b1fca2d6a1..8669034713a 100644
--- a/mysql-test/suite/rpl/t/rpl_row_trig001.test
+++ b/mysql-test/suite/rpl/t/rpl_row_trig001.test
@@ -39,7 +39,7 @@ CREATE TABLE test.t3 (n MEDIUMINT NOT NULL AUTO_INCREMENT, d DATETIME, PRIMARY K
INSERT INTO test.t1 VALUES (1,NOW());
delimiter //;
-CREATE TRIGGER test.t2_ai AFTER INSERT ON test.t2 FOR EACH ROW UPDATE test.t1 SET d=NOW() where n = 1;//
+CREATE TRIGGER test.t2_ai AFTER INSERT ON test.t2 FOR EACH ROW UPDATE test.t1 SET d=NOW() where n = 1//
CREATE PROCEDURE test.p3()
BEGIN
INSERT INTO test.t3 (d) VALUES (NOW());
@@ -51,18 +51,33 @@ BEGIN
END//
delimiter ;//
+# Make sure that all definition have propagated to the slave
+sync_slave_with_master;
+
+connection master;
-- disable_query_log
-- disable_result_log
+SET @wait_count = 1;
let $1=10;
while ($1)
{
CALL test.p2();
- sleep 1;
+ let $wait_condition= SELECT COUNT(*) = @wait_count FROM test.t3;
+ --source include/wait_condition.inc
+ --disable_query_log
+ SET @wait_count = @wait_count + 1;
dec $1;
}
-- enable_result_log
-- enable_query_log
+# Just a precaution to make sure all changes have made it over to the
+# slave
+connection master;
+let $count = `select count(*) from t1`;
+eval INSERT INTO test.t1 VALUES ($count+1, NOW());
+sync_slave_with_master;
+
#show binlog events;
#select * from test.t2;
#select * from test.t3;
diff --git a/mysql-test/suite/rpl/t/rpl_row_trig003.test b/mysql-test/suite/rpl/t/rpl_row_trig003.test
index 4a1bbc5ca89..5d667e29d69 100644
--- a/mysql-test/suite/rpl/t/rpl_row_trig003.test
+++ b/mysql-test/suite/rpl/t/rpl_row_trig003.test
@@ -108,11 +108,13 @@ UPDATE test.t2 SET b1 = 0 WHERE b1 = 1;
INSERT INTO test.t1 VALUES(NULL,1,'add some more test data test.', 'and hope for the best', 3.321,5.221,0,YEAR(NOW()),NOW());
-# To make sure BUG#14698 is gone, we sleep 2 seconds before calling trigger
+# To make sure BUG#14698 is gone, we sleep before calling trigger
# (with the bug in, that caused differences in TIMESTAMP columns).
# We just need to let the machine's clock advance, it's not
-# to do synchronization, so real_sleep is good.
-real_sleep 2;
+# to do synchronization.
+
+let $wait_condition= SELECT SUM(f)= ROUND(SUM(f)) FROM t3;
+--source include/wait_condition.inc
DELETE FROM test.t1 WHERE id = 1;
diff --git a/mysql-test/suite/rpl/t/rpl_row_until.test b/mysql-test/suite/rpl/t/rpl_row_until.test
index 9464e5cfadd..610eec305df 100644
--- a/mysql-test/suite/rpl/t/rpl_row_until.test
+++ b/mysql-test/suite/rpl/t/rpl_row_until.test
@@ -13,6 +13,8 @@ save_master_pos;
connection slave;
sync_with_master;
stop slave;
+# Make sure the slave sql and io thread has stopped
+--source include/wait_for_slave_to_stop.inc
connection master;
# create some events on master
@@ -52,6 +54,8 @@ save_master_pos;
connection slave;
sync_with_master;
stop slave;
+# Make sure the slave sql and io thread has stopped
+--source include/wait_for_slave_to_stop.inc
# this should stop immediately as we are already there
start slave until master_log_file='master-bin.000001', master_log_pos=740;
diff --git a/mysql-test/suite/rpl/t/rpl_server_id.test b/mysql-test/suite/rpl/t/rpl_server_id.test
new file mode 100644
index 00000000000..6e98ec6ee6d
--- /dev/null
+++ b/mysql-test/suite/rpl/t/rpl_server_id.test
@@ -0,0 +1,29 @@
+# Test for BUG#28908 Replication: set global server_id is not setting the session server_id
+
+-- source include/have_log_bin.inc
+
+let $saved_server_id=`select @@server_id`;
+set global server_id=1;
+reset master;
+
+-- disable_warnings
+drop table if exists t1,t2,t3;
+-- enable_warnings
+
+create table t1 (a int);
+select @@server_id;
+source include/show_binlog_events2.inc;
+
+set global server_id=2;
+create table t2 (b int);
+select @@server_id;
+source include/show_binlog_events2.inc;
+
+set global server_id=3;
+create table t3 (c int);
+select @@server_id;
+source include/show_binlog_events2.inc;
+
+# cleanup
+eval set global server_id=$saved_server_id;
+drop table t1,t2,t3;
diff --git a/mysql-test/suite/rpl/t/rpl_session_var.test b/mysql-test/suite/rpl/t/rpl_session_var.test
index 2491611e23d..50efc8930a1 100644
--- a/mysql-test/suite/rpl/t/rpl_session_var.test
+++ b/mysql-test/suite/rpl/t/rpl_session_var.test
@@ -51,8 +51,9 @@ CREATE TABLE t1 (
`data` varchar(100),
PRIMARY KEY (`id`)
) ENGINE=MyISAM;
-
+--disable_warnings
INSERT INTO t1(data) VALUES(SESSION_USER());
+--enable_warnings
save_master_pos;
connection slave;
sync_with_master;
diff --git a/mysql-test/suite/rpl/t/rpl_skip_error-slave.opt b/mysql-test/suite/rpl/t/rpl_skip_error-slave.opt
index c84171976a1..a8f5deaa30b 100644
--- a/mysql-test/suite/rpl/t/rpl_skip_error-slave.opt
+++ b/mysql-test/suite/rpl/t/rpl_skip_error-slave.opt
@@ -1 +1 @@
---slave-skip-error=1062,1582
+--slave-skip-error=1062
diff --git a/mysql-test/suite/rpl/t/rpl_skip_error.test b/mysql-test/suite/rpl/t/rpl_skip_error.test
index b68b637b3b0..efd46f4fa09 100644
--- a/mysql-test/suite/rpl/t/rpl_skip_error.test
+++ b/mysql-test/suite/rpl/t/rpl_skip_error.test
@@ -3,6 +3,14 @@
#########################################
# Note that errors are ignored by opt file.
source include/master-slave.inc;
+source include/have_binlog_format_mixed_or_statement.inc;
+
+#
+# Bug #30594
+# Skipping error due to applying Row-based repliation events
+# should be checked with another test file
+# consider names like rpl_row_skip_error
+#
create table t1 (n int not null primary key);
save_master_pos;
@@ -42,9 +50,7 @@ sync_slave_with_master;
connection slave;
select @@server_id;
select * from t1;
---replace_column 1 # 8 # 9 # 23 # 33 #
---replace_result $MASTER_MYPORT MASTER_PORT
-show slave status;
+source include/show_slave_status2.inc;
connection master;
drop table t1;
sync_with_master;
diff --git a/mysql-test/suite/rpl/t/rpl_slave_skip-slave.opt b/mysql-test/suite/rpl/t/rpl_slave_skip-slave.opt
new file mode 100644
index 00000000000..627becdbfb5
--- /dev/null
+++ b/mysql-test/suite/rpl/t/rpl_slave_skip-slave.opt
@@ -0,0 +1 @@
+--innodb
diff --git a/mysql-test/suite/rpl/t/rpl_slave_skip.test b/mysql-test/suite/rpl/t/rpl_slave_skip.test
index b19d6a2730b..6783098fd7c 100644
--- a/mysql-test/suite/rpl/t/rpl_slave_skip.test
+++ b/mysql-test/suite/rpl/t/rpl_slave_skip.test
@@ -1,7 +1,9 @@
source include/master-slave.inc;
+source include/have_innodb.inc;
--echo **** On Slave ****
connection slave;
+source include/have_innodb.inc;
STOP SLAVE;
--echo **** On Master ****
@@ -69,3 +71,240 @@ query_vertical SHOW SLAVE STATUS;
connection master;
DROP TABLE t1, t2;
sync_slave_with_master;
+
+#
+# More tests for BUG#28618
+#
+# Case 1.
+# ROW binlog format and non-transactional tables.
+# Create the group of events via triggers and try to skip
+# some items of that group.
+#
+
+connection master;
+SET SESSION BINLOG_FORMAT=ROW;
+SET AUTOCOMMIT=0;
+
+CREATE TABLE t1 (a INT, b VARCHAR(20)) ENGINE=myisam;
+CREATE TABLE t2 (a INT, b VARCHAR(20)) ENGINE=myisam;
+CREATE TABLE t3 (a INT, b VARCHAR(20)) ENGINE=myisam;
+
+INSERT INTO t1 VALUES (1,'master/slave');
+INSERT INTO t2 VALUES (1,'master/slave');
+INSERT INTO t3 VALUES (1,'master/slave');
+
+DELIMITER |;
+
+CREATE TRIGGER tr1 AFTER UPDATE on t1 FOR EACH ROW
+BEGIN
+ INSERT INTO t2 VALUES (NEW.a,NEW.b);
+ DELETE FROM t2 WHERE a < NEW.a;
+END|
+
+CREATE TRIGGER tr2 AFTER INSERT on t2 FOR EACH ROW
+BEGIN
+ UPDATE t3 SET a =2, b = 'master only';
+END|
+
+DELIMITER ;|
+
+--echo **** On Slave ****
+sync_slave_with_master;
+STOP SLAVE;
+source include/wait_for_slave_to_stop.inc;
+
+--echo **** On Master ****
+connection master;
+UPDATE t1 SET a = 2, b = 'master only' WHERE a = 1;
+DROP TRIGGER tr1;
+DROP TRIGGER tr2;
+INSERT INTO t1 VALUES (3,'master/slave');
+INSERT INTO t2 VALUES (3,'master/slave');
+INSERT INTO t3 VALUES (3,'master/slave');
+
+SELECT * FROM t1 ORDER BY a;
+SELECT * FROM t2 ORDER BY a;
+SELECT * FROM t3 ORDER BY a;
+
+save_master_pos;
+
+--echo *** On Slave ***
+connection slave;
+SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
+START SLAVE;
+source include/wait_for_slave_to_start.inc;
+sync_with_master;
+
+SELECT * FROM t1 ORDER BY a;
+SELECT * FROM t2 ORDER BY a;
+SELECT * FROM t3 ORDER BY a;
+
+connection master;
+DROP TABLE t1, t2, t3;
+sync_slave_with_master;
+
+--echo **** Case 2: Row binlog format and transactional tables ****
+
+# Create the transaction and try to skip some
+# queries from one.
+
+--echo *** On Master ***
+connection master;
+CREATE TABLE t4 (a INT, b VARCHAR(20)) ENGINE=innodb;
+CREATE TABLE t5 (a INT, b VARCHAR(20)) ENGINE=innodb;
+CREATE TABLE t6 (a INT, b VARCHAR(20)) ENGINE=innodb;
+
+--echo **** On Slave ****
+sync_slave_with_master;
+STOP SLAVE;
+source include/wait_for_slave_to_stop.inc;
+
+--echo *** On Master ***
+connection master;
+BEGIN;
+INSERT INTO t4 VALUES (2, 'master only');
+INSERT INTO t5 VALUES (2, 'master only');
+INSERT INTO t6 VALUES (2, 'master only');
+COMMIT;
+
+BEGIN;
+INSERT INTO t4 VALUES (3, 'master/slave');
+INSERT INTO t5 VALUES (3, 'master/slave');
+INSERT INTO t6 VALUES (3, 'master/slave');
+COMMIT;
+
+SELECT * FROM t4 ORDER BY a;
+SELECT * FROM t5 ORDER BY a;
+SELECT * FROM t6 ORDER BY a;
+
+save_master_pos;
+
+--echo *** On Slave ***
+connection slave;
+SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
+START SLAVE;
+source include/wait_for_slave_to_start.inc;
+sync_with_master;
+
+SELECT * FROM t4 ORDER BY a;
+SELECT * FROM t5 ORDER BY a;
+SELECT * FROM t6 ORDER BY a;
+
+# Test skipping two groups
+
+--echo **** On Slave ****
+connection slave;
+STOP SLAVE;
+source include/wait_for_slave_to_stop.inc;
+
+--echo *** On Master ***
+connection master;
+BEGIN;
+INSERT INTO t4 VALUES (6, 'master only');
+INSERT INTO t5 VALUES (6, 'master only');
+INSERT INTO t6 VALUES (6, 'master only');
+COMMIT;
+
+BEGIN;
+INSERT INTO t4 VALUES (7, 'master only');
+INSERT INTO t5 VALUES (7, 'master only');
+INSERT INTO t6 VALUES (7, 'master only');
+COMMIT;
+
+SELECT * FROM t4 ORDER BY a;
+SELECT * FROM t5 ORDER BY a;
+SELECT * FROM t6 ORDER BY a;
+
+save_master_pos;
+
+--echo *** On Slave ***
+connection slave;
+SET GLOBAL SQL_SLAVE_SKIP_COUNTER=10;
+START SLAVE;
+source include/wait_for_slave_to_start.inc;
+sync_with_master;
+
+SELECT * FROM t4 ORDER BY a;
+SELECT * FROM t5 ORDER BY a;
+SELECT * FROM t6 ORDER BY a;
+
+#
+# And the same, but with autocommit = 0
+#
+connection slave;
+STOP SLAVE;
+source include/wait_for_slave_to_stop.inc;
+
+connection master;
+SET AUTOCOMMIT=0;
+
+INSERT INTO t4 VALUES (4, 'master only');
+INSERT INTO t5 VALUES (4, 'master only');
+INSERT INTO t6 VALUES (4, 'master only');
+COMMIT;
+
+INSERT INTO t4 VALUES (5, 'master/slave');
+INSERT INTO t5 VALUES (5, 'master/slave');
+INSERT INTO t6 VALUES (5, 'master/slave');
+COMMIT;
+
+SELECT * FROM t4 ORDER BY a;
+SELECT * FROM t5 ORDER BY a;
+SELECT * FROM t6 ORDER BY a;
+
+save_master_pos;
+
+--echo *** On Slave ***
+connection slave;
+SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
+START SLAVE;
+source include/wait_for_slave_to_start.inc;
+sync_with_master;
+
+SELECT * FROM t4 ORDER BY a;
+SELECT * FROM t5 ORDER BY a;
+SELECT * FROM t6 ORDER BY a;
+
+connection master;
+DROP TABLE t4, t5, t6;
+sync_slave_with_master;
+
+--echo **** Case 3: Statement logging format and LOAD DATA with non-transactional table ****
+
+# LOAD DATA creates two events in binary log for statement binlog format.
+# Try to skip the first.
+
+--echo *** On Master ***
+connection master;
+CREATE TABLE t10 (a INT, b VARCHAR(20)) ENGINE=myisam;
+
+--echo *** On Slave ***
+sync_slave_with_master;
+STOP SLAVE;
+source include/wait_for_slave_to_stop.inc;
+
+--echo *** On Master ***
+connection master;
+SET SESSION BINLOG_FORMAT=STATEMENT;
+exec cp ./suite/rpl/data/rpl_bug28618.dat $MYSQLTEST_VARDIR/tmp/;
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+eval LOAD DATA INFILE '$MYSQLTEST_VARDIR/tmp/rpl_bug28618.dat' INTO TABLE t10 FIELDS TERMINATED BY '|';
+remove_file $MYSQLTEST_VARDIR/tmp/rpl_bug28618.dat;
+
+SELECT * FROM t10 ORDER BY a;
+
+save_master_pos;
+
+--echo *** On Slave ***
+connection slave;
+SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
+START SLAVE;
+source include/wait_for_slave_to_start.inc;
+sync_with_master;
+
+SELECT * FROM t10 ORDER BY a;
+
+connection master;
+DROP TABLE t10;
+sync_slave_with_master;
+
diff --git a/mysql-test/suite/rpl/t/rpl_sp.test b/mysql-test/suite/rpl/t/rpl_sp.test
index f363b64558a..87503dbf9a3 100644
--- a/mysql-test/suite/rpl/t/rpl_sp.test
+++ b/mysql-test/suite/rpl/t/rpl_sp.test
@@ -561,7 +561,6 @@ set @a:= mysqltest2.f1();
sync_slave_with_master;
connection master;
-
# Final inspection which verifies how all statements of this test file
# were written to the binary log.
--replace_column 2 # 5 #
@@ -579,7 +578,7 @@ set global log_bin_trust_function_creators=0;
# Clean up
drop database mysqltest;
drop database mysqltest2;
+sync_slave_with_master;
--echo End of 5.0 tests
--echo End of 5.1 tests
-
diff --git a/mysql-test/suite/rpl/t/rpl_sp_effects.test b/mysql-test/suite/rpl/t/rpl_sp_effects.test
index 027bfd69f36..c1092e3260f 100644
--- a/mysql-test/suite/rpl/t/rpl_sp_effects.test
+++ b/mysql-test/suite/rpl/t/rpl_sp_effects.test
@@ -201,6 +201,10 @@ sync_slave_with_master;
connection slave;
SELECT 'slave', a FROM t1 ORDER BY a;
+#
+# cleanup
+#
+
connection master;
drop table t1;
drop function f1;
@@ -208,4 +212,50 @@ drop function f2;
drop procedure p1;
sync_slave_with_master;
+#
+# bug#26199 Replication Failure on Slave when using stored procs
+# with bit-type parameters
+
+connection master;
+
+create table t2 (b BIT(7));
+delimiter //;
+create procedure sp_bug26199(bitvalue BIT(7))
+begin
+ insert into t2 set b = bitvalue;
+end //
+
+create function sf_bug26199(b BIT(7)) returns int
+begin
+ insert into t2 values(b);
+ return 0;
+end//
+
+DELIMITER ;//
+
+
+
+call sp_bug26199(b'1110');
+call sp_bug26199('\0');
+select sf_bug26199(b'1111111');
+select sf_bug26199(b'101111111');
+select sf_bug26199('\'');
+select hex(b) from t2;
+
+sync_slave_with_master;
+#connection slave;
+select hex(b) from t2;
+
+#
+# cleanup bug#26199
+#
+connection master;
+drop table t2;
+drop procedure sp_bug26199;
+drop function sf_bug26199;
+
+sync_slave_with_master;
+
SET GLOBAL log_bin_trust_function_creators = 0;
+
+--echo end of the tests
diff --git a/mysql-test/suite/rpl/t/rpl_ssl.test b/mysql-test/suite/rpl/t/rpl_ssl.test
index c1b7bc2097b..7e256390e25 100644
--- a/mysql-test/suite/rpl/t/rpl_ssl.test
+++ b/mysql-test/suite/rpl/t/rpl_ssl.test
@@ -42,6 +42,10 @@ select * from t1;
# Do the same thing a number of times
disable_query_log;
disable_result_log;
+# 2007-11-27 mats Bug #32756 Starting and stopping the slave in a loop can lose rows
+# After discussions with Engineering, I'm disabling this part of the test to avoid it causing
+# red trees.
+disable_parsing;
let $i= 100;
while ($i)
{
@@ -54,7 +58,8 @@ while ($i)
stop slave;
dec $i;
}
-start slave;
+enable_parsing;
+START SLAVE;
enable_query_log;
enable_result_log;
connection master;
@@ -76,6 +81,16 @@ if (`select $slave_count != $master_count`)
echo master and slave differed in number of rows;
echo master: $master_count;
echo slave: $slave_count;
+
+ connection master;
+ echo === master ===;
+ select count(*) t1;
+ select * from t1;
+ connection slave;
+ echo === slave ===;
+ select count(*) t1;
+ select * from t1;
+ query_vertical show slave status;
}
connection master;
diff --git a/mysql-test/suite/rpl/t/rpl_ssl1.test b/mysql-test/suite/rpl/t/rpl_ssl1.test
index b660c3991dd..b5355d737d5 100644
--- a/mysql-test/suite/rpl/t/rpl_ssl1.test
+++ b/mysql-test/suite/rpl/t/rpl_ssl1.test
@@ -24,7 +24,8 @@ start slave;
connection master;
insert into t1 values (1);
#reasonable timeout for changes to propagate to slave
-sleep 3;
+let $wait_condition= SELECT COUNT(*) = 1 FROM t1;
+source include/wait_condition.inc;
connection slave;
select * from t1;
diff --git a/mysql-test/suite/rpl/t/rpl_start_stop_slave.test b/mysql-test/suite/rpl/t/rpl_start_stop_slave.test
index 19988cf902a..93c613f4cf4 100644
--- a/mysql-test/suite/rpl/t/rpl_start_stop_slave.test
+++ b/mysql-test/suite/rpl/t/rpl_start_stop_slave.test
@@ -3,12 +3,12 @@ source include/master-slave.inc;
#
# Bug#6148 ()
#
-connection slave;
-stop slave;
-
# Let the master do lots of insertions
connection master;
create table t1(n int);
+sync_slave_with_master;
+stop slave;
+connection master;
let $1=5000;
disable_query_log;
while ($1)
@@ -21,7 +21,8 @@ save_master_pos;
connection slave;
start slave;
-sleep 1;
+let $wait_condition= SELECT COUNT(*) > 0 FROM t1;
+source include/wait_condition.inc;
stop slave io_thread;
start slave io_thread;
sync_with_master;
diff --git a/mysql-test/suite/rpl/t/rpl_stm_extraColmaster_ndb.test b/mysql-test/suite/rpl/t/rpl_stm_extraColmaster_ndb.test
deleted file mode 100644
index 84734204439..00000000000
--- a/mysql-test/suite/rpl/t/rpl_stm_extraColmaster_ndb.test
+++ /dev/null
@@ -1,13 +0,0 @@
-###########################################
-# Purpose: Wrapper for rpl_extraMaster_Col.test
-# Using NDB
-###########################################
--- source include/have_ndb.inc
--- source include/ndb_master-slave.inc
--- source include/have_binlog_format_statement.inc
-
-let $engine_type = 'NDB';
-
--- source extra/rpl_tests/rpl_extraMaster_Col.test
-
-
diff --git a/mysql-test/suite/rpl/t/rpl_stm_mystery22.test b/mysql-test/suite/rpl/t/rpl_stm_mystery22.test
index 017593fdfba..b43a734fffc 100644
--- a/mysql-test/suite/rpl/t/rpl_stm_mystery22.test
+++ b/mysql-test/suite/rpl/t/rpl_stm_mystery22.test
@@ -28,7 +28,7 @@ insert into t1 values(NULL,'new');
save_master_pos;
connection slave;
# wait until the slave tries to run the query, fails and aborts slave thread
-wait_for_slave_to_stop;
+source include/wait_for_slave_sql_error.inc;
select * from t1 order by n;
delete from t1 where n = 2;
--disable_warnings
diff --git a/mysql-test/suite/rpl/t/rpl_stm_until.test b/mysql-test/suite/rpl/t/rpl_stm_until.test
index 98e7e0e5eac..2793e8833fd 100644
--- a/mysql-test/suite/rpl/t/rpl_stm_until.test
+++ b/mysql-test/suite/rpl/t/rpl_stm_until.test
@@ -12,6 +12,8 @@ save_master_pos;
connection slave;
sync_with_master;
stop slave;
+# Make sure the slave sql and io thread has stopped
+--source include/wait_for_slave_to_stop.inc
connection master;
# create some events on master
@@ -29,20 +31,20 @@ start slave until master_log_file='master-bin.000001', master_log_pos=323;
--source include/wait_for_slave_sql_to_stop.inc
# here table should be still not deleted
select * from t1;
-source include/show_slave_status.inc;
+source include/show_slave_status2.inc;
# this should fail right after start
start slave until master_log_file='master-no-such-bin.000001', master_log_pos=291;
--source include/wait_for_slave_sql_to_stop.inc
# again this table should be still not deleted
select * from t1;
-source include/show_slave_status.inc;
+source include/show_slave_status2.inc;
# try replicate all up to and not including the second insert to t2;
start slave until relay_log_file='slave-relay-bin.000004', relay_log_pos=746;
--source include/wait_for_slave_sql_to_stop.inc
select * from t2;
-source include/show_slave_status.inc;
+source include/show_slave_status2.inc;
# clean up
start slave;
@@ -51,13 +53,15 @@ save_master_pos;
connection slave;
sync_with_master;
stop slave;
+# Make sure the slave sql and io thread has stopped
+--source include/wait_for_slave_to_stop.inc
# this should stop immediately as we are already there
start slave until master_log_file='master-bin.000001', master_log_pos=776;
--source include/wait_for_slave_sql_to_stop.inc
# here the sql slave thread should be stopped
--replace_result bin.000005 bin.000004 bin.000006 bin.000004 bin.000007 bin.000004
-source include/show_slave_status.inc;
+source include/show_slave_status2.inc;
#testing various error conditions
--error 1277
diff --git a/mysql-test/suite/rpl/t/rpl_switch_stm_row_mixed.test b/mysql-test/suite/rpl/t/rpl_switch_stm_row_mixed.test
index b0012827db8..adda4f67694 100644
--- a/mysql-test/suite/rpl/t/rpl_switch_stm_row_mixed.test
+++ b/mysql-test/suite/rpl/t/rpl_switch_stm_row_mixed.test
@@ -293,7 +293,8 @@ insert delayed into t2 values(rand());
set @a=2.345;
insert delayed into t2 values(@a);
-sleep 4; # time for the delayed inserts to reach disk
+let $wait_condition= SELECT COUNT(*) = 19 FROM t2;
+--source include/wait_condition.inc
# If you want to do manual testing of the mixed mode regarding UDFs (not
# testable automatically as quite platform- and compiler-dependent),
@@ -518,6 +519,42 @@ CREATE TABLE t12 (data LONG);
LOCK TABLES t12 WRITE;
INSERT INTO t12 VALUES(UUID());
UNLOCK TABLES;
+sync_slave_with_master;
+
+#
+# BUG#28086: SBR of USER() becomes corrupted on slave
+#
+
+connection master;
+
+# Just to get something that is non-trivial, albeit still simple, we
+# stuff the result of USER() and CURRENT_USER() into a variable.
+--delimiter $$
+CREATE FUNCTION my_user()
+ RETURNS CHAR(64)
+BEGIN
+ DECLARE user CHAR(64);
+ SELECT USER() INTO user;
+ RETURN user;
+END $$
+--delimiter ;
+
+--delimiter $$
+CREATE FUNCTION my_current_user()
+ RETURNS CHAR(64)
+BEGIN
+ DECLARE user CHAR(64);
+ SELECT CURRENT_USER() INTO user;
+ RETURN user;
+END $$
+--delimiter ;
+
+DROP TABLE IF EXISTS t13;
+CREATE TABLE t13 (data CHAR(64));
+INSERT INTO t13 VALUES (USER());
+INSERT INTO t13 VALUES (my_user());
+INSERT INTO t13 VALUES (CURRENT_USER());
+INSERT INTO t13 VALUES (my_current_user());
source include/show_binlog_events.inc;
sync_slave_with_master;
diff --git a/mysql-test/suite/rpl/t/rpl_temporary.test b/mysql-test/suite/rpl/t/rpl_temporary.test
index 09b8b83f25f..6619f4518b9 100644
--- a/mysql-test/suite/rpl/t/rpl_temporary.test
+++ b/mysql-test/suite/rpl/t/rpl_temporary.test
@@ -60,23 +60,24 @@ insert into t1 values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
connection con1;
create temporary table t3(f int);
insert into t3 select * from t1 where f<6;
-sleep 1;
+let $wait_condition= SELECT COUNT(*) = 5 FROM t3;
+--source include/wait_condition.inc
connection con2;
create temporary table t3(f int);
-sleep 1;
connection con1;
insert into t2 select count(*) from t3;
-sleep 1;
+let $wait_condition= SELECT COUNT(*) = 1 FROM t2;
+--source include/wait_condition.inc
connection con2;
insert into t3 select * from t1 where f>=4;
-sleep 1;
+let $wait_condition= SELECT COUNT(*) = 7 FROM t3;
+--source include/wait_condition.inc
connection con1;
drop temporary table t3;
-sleep 1;
connection con2;
insert into t2 select count(*) from t3;
@@ -208,8 +209,9 @@ select * from t1;
connection master;
drop table t1;
+--remove_file $MYSQLTEST_VARDIR/tmp/bug14157.sql
# Delete the anonymous users
source include/delete_anonymous_users.inc;
-# End of 5.1 tests
+# End of tests
diff --git a/mysql-test/suite/rpl/t/rpl_temporary_errors-slave.opt b/mysql-test/suite/rpl/t/rpl_temporary_errors-slave.opt
new file mode 100644
index 00000000000..80c171170f6
--- /dev/null
+++ b/mysql-test/suite/rpl/t/rpl_temporary_errors-slave.opt
@@ -0,0 +1,3 @@
+--loose-debug="+d,all_errors_are_temporary_errors" --slave-transaction-retries=2
+
+
diff --git a/mysql-test/suite/rpl/t/rpl_temporary_errors.test b/mysql-test/suite/rpl/t/rpl_temporary_errors.test
new file mode 100644
index 00000000000..f38ed29f7d4
--- /dev/null
+++ b/mysql-test/suite/rpl/t/rpl_temporary_errors.test
@@ -0,0 +1,31 @@
+source include/master-slave.inc;
+
+--echo **** On Master ****
+connection master;
+SET SESSION BINLOG_FORMAT=ROW;
+CREATE TABLE t1 (a INT PRIMARY KEY, b INT);
+INSERT INTO t1 VALUES (1,1), (2,2), (3,3), (4,4);
+--echo **** On Slave ****
+sync_slave_with_master;
+SHOW STATUS LIKE 'Slave_retried_transactions';
+# since bug#31552/31609 idempotency is not default any longer. In order
+# the following UPDATE t1 to pass the mode is switched temprorarily
+set @@global.slave_exec_mode= 'IDEMPOTENT';
+UPDATE t1 SET a = 5, b = 47 WHERE a = 1;
+SELECT * FROM t1;
+--echo **** On Master ****
+connection master;
+UPDATE t1 SET a = 5, b = 5 WHERE a = 1;
+SELECT * FROM t1;
+#SHOW BINLOG EVENTS;
+--echo **** On Slave ****
+sync_slave_with_master;
+set @@global.slave_exec_mode= default;
+SHOW STATUS LIKE 'Slave_retried_transactions';
+SELECT * FROM t1;
+source include/show_slave_status2.inc;
+DROP TABLE t1;
+
+--echo **** On Master ****
+connection master;
+DROP TABLE t1;
diff --git a/mysql-test/suite/rpl/t/rpl_trigger.test b/mysql-test/suite/rpl/t/rpl_trigger.test
index 9f5f6fc9b4c..911110d17dc 100644
--- a/mysql-test/suite/rpl/t/rpl_trigger.test
+++ b/mysql-test/suite/rpl/t/rpl_trigger.test
@@ -101,10 +101,12 @@ let $time=`select a from t1`;
# - dump definers on the slave;
SELECT routine_name, definer
-FROM information_schema.routines;
+FROM information_schema.routines
+WHERE routine_name = 'bug12480';
SELECT trigger_name, definer
-FROM information_schema.triggers;
+FROM information_schema.triggers
+WHERE trigger_name = 't1_first';
save_master_pos;
connection slave;
@@ -119,10 +121,12 @@ select "--- On slave --" as "";
# item.
SELECT routine_name, definer
-FROM information_schema.routines;
+FROM information_schema.routines
+WHERE routine_name = 'bug12480';
SELECT trigger_name, definer
-FROM information_schema.triggers;
+FROM information_schema.triggers
+WHERE trigger_name = 't1_first';
select a=b && a=c from t1;
--disable_query_log
@@ -316,8 +320,13 @@ SELECT * FROM t2;
# 2. Check that the trigger is non-SUID on the slave;
# 3. Check that the trigger can be activated on the slave.
+#
+# We disable warnings here since it affects the result file in
+# different ways depending on the mode being used.
+disable_warnings;
INSERT INTO t1 VALUES(2);
+enable_warnings;
SELECT * FROM t1;
SELECT * FROM t2;
diff --git a/mysql-test/suite/rpl/t/rpl_user.test b/mysql-test/suite/rpl/t/rpl_user.test
new file mode 100644
index 00000000000..b8fe41d03c4
--- /dev/null
+++ b/mysql-test/suite/rpl/t/rpl_user.test
@@ -0,0 +1,61 @@
+# BUG#33862 completely failed DROP USER statement gets replicated
+
+--source include/master-slave.inc
+
+#
+# remove all users will be used in the test
+#
+connection master;
+set session sql_log_bin=0;
+delete from mysql.user where Host='fakehost';
+set session sql_log_bin=1;
+
+connection slave;
+set session sql_log_bin=0;
+delete from mysql.user where Host='fakehost';
+set session sql_log_bin=1;
+
+#
+# Test create user
+#
+connection master;
+create user 'foo'@'fakehost';
+--error ER_CANNOT_USER
+create user 'foo'@'fakehost', 'bar'@'fakehost';
+--error ER_CANNOT_USER
+create user 'foo'@'fakehost', 'bar'@'fakehost';
+
+sync_slave_with_master;
+select Host,User from mysql.user where Host='fakehost';
+
+#
+# Test rename user
+#
+connection master;
+rename user 'foo'@'fakehost' to 'foofoo'@'fakehost';
+--error ER_CANNOT_USER
+rename user 'not_exist_user1'@'fakehost' to 'foobar'@'fakehost', 'bar'@'fakehost' to 'barbar'@'fakehost';
+--error ER_CANNOT_USER
+rename user 'not_exist_user1'@'fakehost' to 'foobar'@'fakehost', 'not_exist_user2'@'fakehost' to 'barfoo'@'fakehost';
+
+sync_slave_with_master;
+select Host,User from mysql.user where Host='fakehost';
+
+#
+# Test drop user
+#
+connection master;
+drop user 'foofoo'@'fakehost';
+--error ER_CANNOT_USER
+drop user 'not_exist_user1'@'fakehost', 'barbar'@'fakehost';
+--error ER_CANNOT_USER
+drop user 'not_exist_user1'@'fakehost', 'not_exist_user2'@'fakehost';
+
+sync_slave_with_master;
+select Host,User from mysql.user where Host='fakehost';
+
+#
+# show the binlog events on the master
+#
+connection master;
+source include/show_binlog_events.inc;
diff --git a/mysql-test/suite/rpl_ndb/r/rpl_ndb_charset.result b/mysql-test/suite/rpl_ndb/r/rpl_ndb_charset.result
index ed9b3cfbfa8..8b1f3093332 100644
--- a/mysql-test/suite/rpl_ndb/r/rpl_ndb_charset.result
+++ b/mysql-test/suite/rpl_ndb/r/rpl_ndb_charset.result
@@ -40,7 +40,7 @@ show create database mysqltest3;
Database Create Database
mysqltest3 CREATE DATABASE `mysqltest3` /*!40100 DEFAULT CHARACTER SET armscii8 COLLATE armscii8_bin */
use mysqltest2;
-create table t1 (a int auto_increment primary key, b varchar(100));
+create table t1 (a int auto_increment primary key, b varchar(100))engine=NDB;;
set character_set_client=cp850, collation_connection=latin2_croatian_ci;
insert into t1 (b) values(@@character_set_server);
insert into t1 (b) values(@@collation_server);
@@ -117,29 +117,27 @@ master-bin.000001 # Query # # create database mysqltest2 character set latin2
master-bin.000001 # Query # # create database mysqltest3
master-bin.000001 # Query # # drop database mysqltest3
master-bin.000001 # Query # # create database mysqltest3
-master-bin.000001 # Query # # use `mysqltest2`; create table t1 (a int auto_increment primary key, b varchar(100))
-master-bin.000001 # Table_map # # table_id: # (mysqltest2.t1)
-master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
-master-bin.000001 # Table_map # # table_id: # (mysqltest2.t1)
-master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
-master-bin.000001 # Table_map # # table_id: # (mysqltest2.t1)
-master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
-master-bin.000001 # Table_map # # table_id: # (mysqltest2.t1)
-master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # use `mysqltest2`; create table t1 (a int auto_increment primary key, b varchar(100))engine=NDB
+master-bin.000001 # Query # # BEGIN
master-bin.000001 # Table_map # # table_id: # (mysqltest2.t1)
+master-bin.000001 # Table_map # # table_id: # (mysql.ndb_apply_status)
+master-bin.000001 # Write_rows # # table_id: #
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
master-bin.000001 # Query # # use `mysqltest2`; truncate table t1
+master-bin.000001 # Query # # BEGIN
master-bin.000001 # Table_map # # table_id: # (mysqltest2.t1)
+master-bin.000001 # Table_map # # table_id: # (mysql.ndb_apply_status)
+master-bin.000001 # Write_rows # # table_id: #
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
-master-bin.000001 # Table_map # # table_id: # (mysqltest2.t1)
-master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
-master-bin.000001 # Table_map # # table_id: # (mysqltest2.t1)
-master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
-master-bin.000001 # Table_map # # table_id: # (mysqltest2.t1)
-master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
master-bin.000001 # Query # # use `mysqltest2`; truncate table t1
+master-bin.000001 # Query # # BEGIN
master-bin.000001 # Table_map # # table_id: # (mysqltest2.t1)
+master-bin.000001 # Table_map # # table_id: # (mysql.ndb_apply_status)
+master-bin.000001 # Write_rows # # table_id: #
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
master-bin.000001 # Query # # drop database mysqltest2
master-bin.000001 # Query # # drop database mysqltest3
select "--- --global--" as "";
@@ -177,14 +175,16 @@ select "--- --3943--" as "";
--- --3943--
use test;
-CREATE TABLE t1 (c1 VARBINARY(255), c2 VARBINARY(255));
+CREATE TABLE t1 (c1 VARBINARY(255), c2 VARBINARY(255))ENGINE=NDB;;
SET CHARACTER_SET_CLIENT=koi8r,
CHARACTER_SET_CONNECTION=cp1251,
CHARACTER_SET_RESULTS=koi8r;
INSERT INTO t1 (c1, c2) VALUES ('îÕ, ÚÁ ÒÙÂÁÌËÕ','îÕ, ÚÁ ÒÙÂÁÌËÕ');
+SET SQL_BIG_SELECTS=1;
select hex(c1), hex(c2) from t1;
hex(c1) hex(c2)
CDF32C20E7E020F0FBE1E0EBEAF3 CDF32C20E7E020F0FBE1E0EBEAF3
+SET SQL_BIG_SELECTS=1;
select hex(c1), hex(c2) from t1;
hex(c1) hex(c2)
CDF32C20E7E020F0FBE1E0EBEAF3 CDF32C20E7E020F0FBE1E0EBEAF3
diff --git a/mysql-test/suite/rpl_ndb/r/rpl_ndb_ctype_ucs2_def.result b/mysql-test/suite/rpl_ndb/r/rpl_ndb_ctype_ucs2_def.result
index 2f9dc4ae616..75151f45419 100644
--- a/mysql-test/suite/rpl_ndb/r/rpl_ndb_ctype_ucs2_def.result
+++ b/mysql-test/suite/rpl_ndb/r/rpl_ndb_ctype_ucs2_def.result
@@ -1,3 +1,9 @@
+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;
show variables like 'collation_server';
Variable_name Value
collation_server ucs2_unicode_ci
@@ -5,5 +11,17 @@ show variables like "%character_set_ser%";
Variable_name Value
character_set_server ucs2
DROP TABLE IF EXISTS t1;
-create table t1 (a int);
+create table t1 (a int) ENGINE=NDB;
drop table t1;
+CREATE TABLE `t1` ( `nid` int(11) NOT NULL default '0',
+`nom` char(4) default NULL,
+`prenom` char(4) default NULL,
+PRIMARY KEY (`nid`))
+ENGINE=ndbcluster;
+INSERT INTO t1 VALUES(1,"XYZ1","ABC1");
+select * from t1 order by nid;
+nid nom prenom
+1 XYZ1 ABC1
+select * from t1 order by nid;
+nid nom prenom
+1 XYZ1 ABC1
diff --git a/mysql-test/suite/rpl_ndb/r/rpl_ndb_ddl.result b/mysql-test/suite/rpl_ndb/r/rpl_ndb_ddl.result
index aeaca1e7de0..e668b57293e 100644
--- a/mysql-test/suite/rpl_ndb/r/rpl_ndb_ddl.result
+++ b/mysql-test/suite/rpl_ndb/r/rpl_ndb_ddl.result
@@ -1086,6 +1086,9 @@ Modified #
Created #
Security_type DEFINER
Comment
+character_set_client latin1
+collation_connection latin1_swedish_ci
+Database Collation latin1_swedish_ci
-------- switch to slave --------
SHOW PROCEDURE STATUS LIKE 'p1';
@@ -1097,6 +1100,9 @@ Modified #
Created #
Security_type DEFINER
Comment
+character_set_client latin1
+collation_connection latin1_swedish_ci
+Database Collation latin1_swedish_ci
-------- switch to master -------
@@ -1149,6 +1155,9 @@ Modified #
Created #
Security_type DEFINER
Comment I have been altered
+character_set_client latin1
+collation_connection latin1_swedish_ci
+Database Collation latin1_swedish_ci
-------- switch to slave --------
SHOW PROCEDURE STATUS LIKE 'p1';
@@ -1160,6 +1169,9 @@ Modified #
Created #
Security_type DEFINER
Comment I have been altered
+character_set_client latin1
+collation_connection latin1_swedish_ci
+Database Collation latin1_swedish_ci
-------- switch to master -------
@@ -1251,13 +1263,13 @@ TEST-INFO: SLAVE: The INSERT is committed (Succeeded)
-------- switch to master -------
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
-------- switch to slave --------
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
-------- switch to master -------
@@ -1302,13 +1314,13 @@ TEST-INFO: SLAVE: The INSERT is committed (Succeeded)
-------- switch to master -------
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
-------- switch to slave --------
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
-------- switch to master -------
@@ -1402,13 +1414,13 @@ TEST-INFO: SLAVE: The INSERT is committed (Succeeded)
-------- switch to master -------
SHOW TRIGGERS;
-Trigger Event Table Statement Timing Created sql_mode Definer
-trg1 INSERT t1 SET @a:=1 BEFORE NULL root@localhost
+Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation
+trg1 INSERT t1 SET @a:=1 BEFORE NULL root@localhost latin1 latin1_swedish_ci latin1_swedish_ci
-------- switch to slave --------
SHOW TRIGGERS;
-Trigger Event Table Statement Timing Created sql_mode Definer
-trg1 INSERT t1 SET @a:=1 BEFORE NULL root@localhost
+Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation
+trg1 INSERT t1 SET @a:=1 BEFORE NULL root@localhost latin1 latin1_swedish_ci latin1_swedish_ci
-------- switch to master -------
@@ -1453,11 +1465,11 @@ TEST-INFO: SLAVE: The INSERT is committed (Succeeded)
-------- switch to master -------
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
-------- switch to slave --------
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
-------- switch to master -------
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 41e888827b1..685fdbf0a6e 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 1534
+Last_Errno 1535
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 #
@@ -90,7 +90,7 @@ Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno #
Last_IO_Error #
-Last_SQL_Errno 1534
+Last_SQL_Errno 1535
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;
@@ -139,7 +139,7 @@ Replicate_Do_Table
Replicate_Ignore_Table #
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
-Last_Errno 1534
+Last_Errno 1535
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 #
@@ -157,7 +157,7 @@ Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno #
Last_IO_Error #
-Last_SQL_Errno 1534
+Last_SQL_Errno 1535
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;
@@ -201,7 +201,7 @@ Replicate_Do_Table
Replicate_Ignore_Table #
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
-Last_Errno 1534
+Last_Errno 1535
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 #
@@ -219,7 +219,7 @@ Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno #
Last_IO_Error #
-Last_SQL_Errno 1534
+Last_SQL_Errno 1535
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;
@@ -263,7 +263,7 @@ Replicate_Do_Table
Replicate_Ignore_Table #
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
-Last_Errno 1534
+Last_Errno 1535
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 #
@@ -281,7 +281,7 @@ Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno #
Last_IO_Error #
-Last_SQL_Errno 1534
+Last_SQL_Errno 1535
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;
@@ -324,7 +324,7 @@ Replicate_Do_Table
Replicate_Ignore_Table #
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
-Last_Errno 1534
+Last_Errno 1535
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 #
@@ -342,7 +342,7 @@ Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno #
Last_IO_Error #
-Last_SQL_Errno 1534
+Last_SQL_Errno 1535
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 ***
@@ -436,7 +436,7 @@ Replicate_Do_Table
Replicate_Ignore_Table #
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
-Last_Errno 1534
+Last_Errno 1535
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 #
@@ -454,7 +454,7 @@ Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno #
Last_IO_Error #
-Last_SQL_Errno 1534
+Last_SQL_Errno 1535
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;
@@ -497,7 +497,7 @@ Replicate_Do_Table
Replicate_Ignore_Table #
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
-Last_Errno 1534
+Last_Errno 1535
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 #
@@ -515,7 +515,7 @@ Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno #
Last_IO_Error #
-Last_SQL_Errno 1534
+Last_SQL_Errno 1535
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;
@@ -615,6 +615,66 @@ c1 c2 c3 c4 c5 c6 c7
1 1.00 Replication Testing Extra Col b1b1b1b1b1b1b1b1 Kyle NULL CURRENT_TIMESTAMP
2 2.00 This Test Should work b1b1b1b1b1b1b1b1 JOE NULL CURRENT_TIMESTAMP
3 3.00 If is does not, I will open a bug b1b1b1b1b1b1b1b1 QA NULL CURRENT_TIMESTAMP
+*** Create t14a on slave ***
+STOP SLAVE;
+RESET SLAVE;
+CREATE TABLE t14a (c1 INT KEY, c4 BLOB, c5 CHAR(5),
+c6 INT DEFAULT '1',
+c7 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
+)ENGINE='NDB';
+*** Create t14a on Master ***
+CREATE TABLE t14a (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
+) ENGINE='NDB';
+RESET MASTER;
+*** Start Slave ***
+START SLAVE;
+*** Master Data Insert ***
+set @b1 = 'b1b1b1b1';
+set @b1 = concat(@b1,@b1);
+INSERT INTO t14a () VALUES(1,@b1,'Kyle'),
+(2,@b1,'JOE'),
+(3,@b1,'QA');
+SELECT * FROM t14a ORDER BY c1;
+c1 c4 c5
+1 b1b1b1b1b1b1b1b1 Kyle
+2 b1b1b1b1b1b1b1b1 JOE
+3 b1b1b1b1b1b1b1b1 QA
+*** Select on Slave ****
+SELECT * FROM t14a ORDER BY c1;
+c1 c4 c5 c6 c7
+1 b1b1b1b1b1b1b1b1 Kyle NULL CURRENT_TIMESTAMP
+2 b1b1b1b1b1b1b1b1 JOE NULL CURRENT_TIMESTAMP
+3 b1b1b1b1b1b1b1b1 QA NULL CURRENT_TIMESTAMP
+STOP SLAVE;
+RESET SLAVE;
+*** Master Drop c5 ***
+ALTER TABLE t14a DROP COLUMN c5;
+RESET MASTER;
+*** Start Slave ***
+START SLAVE;
+*** Master Data Insert ***
+set @b1 = 'b1b1b1b1';
+set @b1 = concat(@b1,@b1);
+INSERT INTO t14a () VALUES(4,@b1),
+(5,@b1),
+(6,@b1);
+SELECT * FROM t14a ORDER BY c1;
+c1 c4
+1 b1b1b1b1b1b1b1b1
+2 b1b1b1b1b1b1b1b1
+3 b1b1b1b1b1b1b1b1
+4 b1b1b1b1b1b1b1b1
+5 b1b1b1b1b1b1b1b1
+6 b1b1b1b1b1b1b1b1
+*** Select on Slave ****
+SELECT * FROM t14a ORDER BY c1;
+c1 c4 c5 c6 c7
+1 b1b1b1b1b1b1b1b1 Kyle NULL CURRENT_TIMESTAMP
+2 b1b1b1b1b1b1b1b1 JOE NULL CURRENT_TIMESTAMP
+3 b1b1b1b1b1b1b1b1 QA NULL CURRENT_TIMESTAMP
+4 b1b1b1b1b1b1b1b1 NULL NULL CURRENT_TIMESTAMP
+5 b1b1b1b1b1b1b1b1 NULL NULL CURRENT_TIMESTAMP
+6 b1b1b1b1b1b1b1b1 NULL NULL CURRENT_TIMESTAMP
*** connect to master and drop columns ***
ALTER TABLE t14 DROP COLUMN c2;
ALTER TABLE t14 DROP COLUMN c4;
@@ -707,7 +767,7 @@ 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;
+SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
START SLAVE;
*** Try to insert in master ****
INSERT INTO t15 () VALUES(5,2.00,'Replication Testing',@b1,'Buda',2);
@@ -823,7 +883,7 @@ Replicate_Do_Table
Replicate_Ignore_Table #
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
-Last_Errno 1534
+Last_Errno 1535
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 #
@@ -841,7 +901,7 @@ Seconds_Behind_Master #
Master_SSL_Verify_Server_Cert No
Last_IO_Errno #
Last_IO_Error #
-Last_SQL_Errno 1534
+Last_SQL_Errno 1535
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_ndb/r/rpl_ndb_extraColMaster.result b/mysql-test/suite/rpl_ndb/r/rpl_ndb_extraColMaster.result
new file mode 100644
index 00000000000..194e6a375f3
--- /dev/null
+++ b/mysql-test/suite/rpl_ndb/r/rpl_ndb_extraColMaster.result
@@ -0,0 +1,2288 @@
+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;
+set binlog_format=row;
+
+***********************************************************
+***********************************************************
+***************** Start of Testing ************************
+***********************************************************
+***********************************************************
+* This test format == binlog_format ROW and engine == 'NDB'
+***********************************************************
+***********************************************************
+
+***** Testing more columns on the Master *****
+
+CREATE TABLE t1 (f1 INT, f2 INT, f3 INT PRIMARY KEY, f4 CHAR(20),
+/* extra */
+f5 FLOAT DEFAULT '2.00',
+f6 CHAR(4) DEFAULT 'TEST',
+f7 INT DEFAULT '0',
+f8 TEXT,
+f9 LONGBLOB,
+f10 BIT(63),
+f11 VARBINARY(64))ENGINE='NDB';
+
+* Alter Table on Slave and drop columns f5 through f11 *
+
+alter table t1 drop f5, drop f6, drop f7, drop f8, drop f9, drop f10, drop f11;
+
+* Insert data in Master then update and delete some rows*
+
+* Select count and 20 rows from Master *
+
+SELECT COUNT(*) FROM t1;
+COUNT(*)
+40
+
+SELECT f1,f2,f3,f4,f5,f6,f7,f8,f9,
+hex(f10),hex(f11) FROM t1 ORDER BY f3 LIMIT 20;
+f1 f2 f3 f4 f5 f6 f7 f8 f9 hex(f10) hex(f11)
+2 2 2 second 2 kaks 2 got stolen from the paradise very fat blob 1555 123456
+3 3 3 next 2 kaks 2 got stolen from the paradise very fat blob 1555 123456
+5 5 5 second 2 kaks 2 got stolen from the paradise very fat blob 1555 123456
+6 6 6 next 2 kaks 2 got stolen from the paradise very fat blob 1555 123456
+8 8 8 second 2 kaks 2 got stolen from the paradise very fat blob 1555 123456
+9 9 9 next 2 kaks 2 got stolen from the paradise very fat blob 1555 123456
+11 11 11 second 2 kaks 2 got stolen from the paradise very fat blob 1555 123456
+12 12 12 next 2 kaks 2 got stolen from the paradise very fat blob 1555 123456
+14 14 14 second 2 kaks 2 got stolen from the paradise very fat blob 1555 123456
+15 15 15 next 2 kaks 2 got stolen from the paradise very fat blob 1555 123456
+17 17 17 second 2 kaks 2 got stolen from the paradise very fat blob 1555 123456
+18 18 18 next 2 kaks 2 got stolen from the paradise very fat blob 1555 123456
+20 20 20 second 2 kaks 2 got stolen from the paradise very fat blob 1555 123456
+21 21 21 next 2 kaks 2 got stolen from the paradise very fat blob 1555 123456
+23 23 23 second 2 kaks 2 got stolen from the paradise very fat blob 1555 123456
+24 24 24 next 2 kaks 2 got stolen from the paradise very fat blob 1555 123456
+26 26 26 second 2 kaks 2 got stolen from the paradise very fat blob 1555 123456
+27 27 27 next 2 kaks 2 got stolen from the paradise very fat blob 1555 123456
+29 29 29 second 2 kaks 2 got stolen from the paradise very fat blob 1555 123456
+30 30 30 next 2 kaks 2 got stolen from the paradise very fat blob 1555 123456
+
+* Select count and 20 rows from Slave *
+
+SELECT COUNT(*) FROM t1;
+COUNT(*)
+40
+
+SELECT * FROM t1 ORDER BY f3 LIMIT 20;
+f1 f2 f3 f4
+2 2 2 second
+3 3 3 next
+5 5 5 second
+6 6 6 next
+8 8 8 second
+9 9 9 next
+11 11 11 second
+12 12 12 next
+14 14 14 second
+15 15 15 next
+17 17 17 second
+18 18 18 next
+20 20 20 second
+21 21 21 next
+23 23 23 second
+24 24 24 next
+26 26 26 second
+27 27 27 next
+29 29 29 second
+30 30 30 next
+
+* Show Slave Status *
+
+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 Yes
+Replicate_Do_DB
+Replicate_Ignore_DB
+Replicate_Do_Table
+Replicate_Ignore_Table
+Replicate_Wild_Do_Table
+Replicate_Wild_Ignore_Table
+Last_Errno 0
+Last_Error
+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 0
+Last_SQL_Error
+
+
+***** Testing Altering table def scenario *****
+
+CREATE TABLE t2 (f1 INT, f2 INT, f3 INT PRIMARY KEY, f4 CHAR(20),
+/* extra */
+f5 DOUBLE DEFAULT '2.00',
+f6 ENUM('a', 'b', 'c') default 'a',
+f7 DECIMAL(17,9) default '1000.00',
+f8 MEDIUMBLOB,
+f9 NUMERIC(6,4) default '2000.00',
+f10 VARCHAR(1024),
+f11 BINARY(20) NOT NULL DEFAULT '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0',
+f12 SET('a', 'b', 'c') default 'b')
+ENGINE='NDB';
+Warnings:
+Warning 1264 Out of range value for column 'f9' at row 1
+
+CREATE TABLE t3 (f1 INT, f2 INT, f3 INT PRIMARY KEY, f4 CHAR(20),
+/* extra */
+f5 DOUBLE DEFAULT '2.00',
+f6 ENUM('a', 'b', 'c') default 'a',
+f8 MEDIUMBLOB,
+f10 VARCHAR(1024),
+f11 BINARY(20) NOT NULL DEFAULT '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0',
+f12 SET('a', 'b', 'c') default 'b')
+ENGINE='NDB';
+
+CREATE TABLE t4 (f1 INT, f2 INT, f3 INT PRIMARY KEY, f4 CHAR(20),
+/* extra */
+f5 DOUBLE DEFAULT '2.00',
+f6 DECIMAL(17,9) default '1000.00',
+f7 MEDIUMBLOB,
+f8 NUMERIC(6,4) default '2000.00',
+f9 VARCHAR(1024),
+f10 BINARY(20) not null default '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0',
+f11 CHAR(255))
+ENGINE='NDB';
+Warnings:
+Warning 1264 Out of range value for column 'f8' at row 1
+
+CREATE TABLE t31 (f1 INT, f2 INT, f3 INT PRIMARY KEY, f4 CHAR(20),
+/* extra */
+f5 BIGINT,
+f6 BLOB,
+f7 DATE,
+f8 DATETIME,
+f9 FLOAT,
+f10 INT,
+f11 LONGBLOB,
+f12 LONGTEXT,
+f13 MEDIUMBLOB,
+f14 MEDIUMINT,
+f15 MEDIUMTEXT,
+f16 REAL,
+f17 SMALLINT,
+f18 TEXT,
+f19 TIME,
+f20 TIMESTAMP,
+f21 TINYBLOB,
+f22 TINYINT,
+f23 TINYTEXT,
+f24 YEAR,
+f25 BINARY(255),
+f26 BIT(64),
+f27 CHAR(255),
+f28 DECIMAL(30,7),
+f29 DOUBLE,
+f30 ENUM ('a','b', 'c') default 'a',
+f31 FLOAT,
+f32 NUMERIC(17,9),
+f33 SET ('a', 'b', 'c') default 'b',
+f34 VARBINARY(1025),
+f35 VARCHAR(257)
+) ENGINE='NDB';
+
+** Alter tables on slave and drop columns **
+
+alter table t2 drop f5, drop f6, drop f7, drop f8, drop f9, drop f10, drop f11, drop
+f12;
+alter table t3 drop f5, drop f6, drop f8, drop f10, drop f11, drop f12;
+alter table t4 drop f5, drop f6, drop f7, drop f8, drop f9, drop f10, drop f11;
+alter table t31
+drop f5, drop f6, drop f7, drop f8, drop f9, drop f10, drop f11,
+drop f12, drop f13, drop f14, drop f15, drop f16, drop f17, drop f18,
+drop f19, drop f20, drop f21, drop f22, drop f23, drop f24, drop f25,
+drop f26, drop f27, drop f28, drop f29, drop f30, drop f31, drop f32,
+drop f33, drop f34, drop f35;
+
+** Insert Data into Master **
+INSERT into t2 set f1=1, f2=1, f3=1, f4='first', f8='f8: medium size blob', f10='f10:
+some var char';
+INSERT into t2 values (2, 2, 2, 'second',
+2.0, 'b', 2000.0002, 'f8: medium size blob', 2000, 'f10: some var char',
+'01234567', 'c'),
+(3, 3, 3, 'third',
+3.0, 'b', 3000.0003, 'f8: medium size blob', 3000, 'f10: some var char',
+'01234567', 'c');
+Warnings:
+Warning 1264 Out of range value for column 'f9' at row 1
+Warning 1264 Out of range value for column 'f9' at row 2
+INSERT into t3 set f1=1, f2=1, f3=1, f4='first', f10='f10: some var char';
+INSERT into t4 set f1=1, f2=1, f3=1, f4='first', f7='f7: medium size blob', f10='f10:
+binary data';
+INSERT into t31 set f1=1, f2=1, f3=1, f4='first';
+INSERT into t31 set f1=1, f2=1, f3=2, f4='second',
+f9=2.2, f10='seven samurai', f28=222.222, f35='222';
+Warnings:
+Warning 1366 Incorrect integer value: 'seven samurai' for column 'f10' at row 1
+INSERT into t31 values (1, 1, 3, 'third',
+/* f5 BIGINT, */ 333333333333333333333333,
+/* f6 BLOB, */ '3333333333333333333333',
+/* f7 DATE, */ '2007-07-18',
+/* f8 DATETIME, */ "2007-07-18",
+/* f9 FLOAT, */ 3.33333333,
+/* f10 INT, */ 333333333,
+/* f11 LONGBLOB, */ '3333333333333333333',
+/* f12 LONGTEXT, */ '3333333333333333333',
+/* f13 MEDIUMBLOB, */ '3333333333333333333',
+/* f14 MEDIUMINT, */ 33,
+/* f15 MEDIUMTEXT, */ 3.3,
+/* f16 REAL, */ 3.3,
+/* f17 SMALLINT, */ 3,
+/* f18 TEXT, */ '33',
+/* f19 TIME, */ '2:59:58.999',
+/* f20 TIMESTAMP, */ 20000303000000,
+/* f21 TINYBLOB, */ '3333',
+/* f22 TINYINT, */ 3,
+/* f23 TINYTEXT, */ '3',
+/* f24 YEAR, */ 3000,
+/* f25 BINARY(255), */ 'three_33333',
+/* f26 BIT(64), */ b'011',
+/* f27 CHAR(255), */ 'three',
+/* f28 DECIMAL(30,7), */ 3.333,
+/* f29 DOUBLE, */ 3.333333333333333333333333333,
+/* f30 ENUM ('a','b','c')*/ 'c',
+/* f31 FLOAT, */ 3.0,
+/* f32 NUMERIC(17,9), */ 3.3333,
+/* f33 SET ('a','b','c'),*/ 'c',
+/*f34 VARBINARY(1025),*/ '3333 minus 3',
+/*f35 VARCHAR(257),*/ 'three times three'
+ );
+Warnings:
+Warning 1264 Out of range value for column 'f5' at row 1
+Warning 1264 Out of range value for column 'f24' at row 1
+INSERT into t31 values (1, 1, 4, 'fourth',
+/* f5 BIGINT, */ 333333333333333333333333,
+/* f6 BLOB, */ '3333333333333333333333',
+/* f7 DATE, */ '2007-07-18',
+/* f8 DATETIME, */ "2007-07-18",
+/* f9 FLOAT, */ 3.33333333,
+/* f10 INT, */ 333333333,
+/* f11 LONGBLOB, */ '3333333333333333333',
+/* f12 LONGTEXT, */ '3333333333333333333',
+/* f13 MEDIUMBLOB, */ '3333333333333333333',
+/* f14 MEDIUMINT, */ 33,
+/* f15 MEDIUMTEXT, */ 3.3,
+/* f16 REAL, */ 3.3,
+/* f17 SMALLINT, */ 3,
+/* f18 TEXT, */ '33',
+/* f19 TIME, */ '2:59:58.999',
+/* f20 TIMESTAMP, */ 20000303000000,
+/* f21 TINYBLOB, */ '3333',
+/* f22 TINYINT, */ 3,
+/* f23 TINYTEXT, */ '3',
+/* f24 YEAR, */ 3000,
+/* f25 BINARY(255), */ 'three_33333',
+/* f26 BIT(64), */ b'011',
+/* f27 CHAR(255), */ 'three',
+/* f28 DECIMAL(30,7), */ 3.333,
+/* f29 DOUBLE, */ 3.333333333333333333333333333,
+/* f30 ENUM ('a','b','c')*/ 'c',
+/* f31 FLOAT, */ 3.0,
+/* f32 NUMERIC(17,9), */ 3.3333,
+/* f33 SET ('a','b','c'),*/ 'c',
+/*f34 VARBINARY(1025),*/ '3333 minus 3',
+/*f35 VARCHAR(257),*/ 'three times three'
+ ),
+(1, 1, 5, 'fifth',
+/* f5 BIGINT, */ 333333333333333333333333,
+/* f6 BLOB, */ '3333333333333333333333',
+/* f7 DATE, */ '2007-07-18',
+/* f8 DATETIME, */ "2007-07-18",
+/* f9 FLOAT, */ 3.33333333,
+/* f10 INT, */ 333333333,
+/* f11 LONGBLOB, */ '3333333333333333333',
+/* f12 LONGTEXT, */ '3333333333333333333',
+/* f13 MEDIUMBLOB, */ '3333333333333333333',
+/* f14 MEDIUMINT, */ 33,
+/* f15 MEDIUMTEXT, */ 3.3,
+/* f16 REAL, */ 3.3,
+/* f17 SMALLINT, */ 3,
+/* f18 TEXT, */ '33',
+/* f19 TIME, */ '2:59:58.999',
+/* f20 TIMESTAMP, */ 20000303000000,
+/* f21 TINYBLOB, */ '3333',
+/* f22 TINYINT, */ 3,
+/* f23 TINYTEXT, */ '3',
+/* f24 YEAR, */ 3000,
+/* f25 BINARY(255), */ 'three_33333',
+/* f26 BIT(64), */ b'011',
+/* f27 CHAR(255), */ 'three',
+/* f28 DECIMAL(30,7), */ 3.333,
+/* f29 DOUBLE, */ 3.333333333333333333333333333,
+/* f30 ENUM ('a','b','c')*/ 'c',
+/* f31 FLOAT, */ 3.0,
+/* f32 NUMERIC(17,9), */ 3.3333,
+/* f33 SET ('a','b','c'),*/ 'c',
+/*f34 VARBINARY(1025),*/ '3333 minus 3',
+/*f35 VARCHAR(257),*/ 'three times three'
+ ),
+(1, 1, 6, 'sixth',
+/* f5 BIGINT, */ NULL,
+/* f6 BLOB, */ '3333333333333333333333',
+/* f7 DATE, */ '2007-07-18',
+/* f8 DATETIME, */ "2007-07-18",
+/* f9 FLOAT, */ 3.33333333,
+/* f10 INT, */ 333333333,
+/* f11 LONGBLOB, */ '3333333333333333333',
+/* f12 LONGTEXT, */ '3333333333333333333',
+/* f13 MEDIUMBLOB, */ '3333333333333333333',
+/* f14 MEDIUMINT, */ 33,
+/* f15 MEDIUMTEXT, */ 3.3,
+/* f16 REAL, */ 3.3,
+/* f17 SMALLINT, */ 3,
+/* f18 TEXT, */ '33',
+/* f19 TIME, */ '2:59:58.999',
+/* f20 TIMESTAMP, */ 20000303000000,
+/* f21 TINYBLOB, */ '3333',
+/* f22 TINYINT, */ 3,
+/* f23 TINYTEXT, */ '3',
+/* f24 YEAR, */ 3000,
+/* f25 BINARY(255), */ 'three_33333',
+/* f26 BIT(64), */ b'011',
+/* f27 CHAR(255), */ 'three',
+/* f28 DECIMAL(30,7), */ 3.333,
+/* f29 DOUBLE, */ 3.333333333333333333333333333,
+/* f30 ENUM ('a','b','c')*/ 'c',
+/* f31 FLOAT, */ 3.0,
+/* f32 NUMERIC(17,9), */ 3.3333,
+/* f33 SET ('a','b','c'),*/ 'c',
+/*f34 VARBINARY(1025),*/ '3333 minus 3',
+/*f35 VARCHAR(257),*/ NULL
+);
+Warnings:
+Warning 1264 Out of range value for column 'f5' at row 1
+Warning 1264 Out of range value for column 'f24' at row 1
+Warning 1264 Out of range value for column 'f5' at row 2
+Warning 1264 Out of range value for column 'f24' at row 2
+Warning 1264 Out of range value for column 'f24' at row 3
+
+** Sync slave with master **
+** Do selects from tables **
+
+select * from t1 order by f3;
+f1 f2 f3 f4
+2 2 2 second
+3 3 3 next
+5 5 5 second
+6 6 6 next
+8 8 8 second
+9 9 9 next
+11 11 11 second
+12 12 12 next
+14 14 14 second
+15 15 15 next
+17 17 17 second
+18 18 18 next
+20 20 20 second
+21 21 21 next
+23 23 23 second
+24 24 24 next
+26 26 26 second
+27 27 27 next
+29 29 29 second
+30 30 30 next
+31 31 31 second
+32 32 32 second
+33 33 33 second
+34 34 34 second
+35 35 35 second
+36 36 36 second
+37 37 37 second
+38 38 38 second
+39 39 39 second
+40 40 40 second
+41 41 41 second
+42 42 42 second
+43 43 43 second
+44 44 44 second
+45 45 45 second
+46 46 46 second
+47 47 47 second
+48 48 48 second
+49 49 49 second
+50 50 50 second
+select * from t2 order by f1;
+f1 f2 f3 f4
+1 1 1 first
+2 2 2 second
+3 3 3 third
+select * from t3 order by f1;
+f1 f2 f3 f4
+1 1 1 first
+select * from t4 order by f1;
+f1 f2 f3 f4
+1 1 1 first
+select * from t31 order by f1;
+f1 f2 f3 f4
+1 1 5 fifth
+1 1 3 third
+1 1 1 first
+1 1 6 sixth
+1 1 2 second
+1 1 4 fourth
+
+** Do updates master **
+
+update t31 set f5=555555555555555 where f3=6;
+update t31 set f2=2 where f3=2;
+update t31 set f1=NULL where f3=1;
+update t31 set f3=NULL, f27=NULL, f35='f35 new value' where f3=3;
+Warnings:
+Warning 1048 Column 'f3' cannot be null
+
+** Delete from Master **
+
+delete from t1;
+delete from t2;
+delete from t3;
+delete from t4;
+delete from t31;
+
+** Check slave status **
+
+select * from t31;
+f1 f2 f3 f4
+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 Yes
+Replicate_Do_DB
+Replicate_Ignore_DB
+Replicate_Do_Table
+Replicate_Ignore_Table
+Replicate_Wild_Do_Table
+Replicate_Wild_Ignore_Table
+Last_Errno 0
+Last_Error
+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 0
+Last_SQL_Error
+
+****************************************
+* columns in master at middle of table *
+* Expect: Proper error message *
+****************************************
+
+** Stop and Reset Slave **
+
+STOP SLAVE;
+RESET SLAVE;
+
+** create table slave side **
+CREATE TABLE t10 (a INT PRIMARY KEY, b BLOB, c CHAR(5)
+) ENGINE='NDB';
+
+** Connect to master and create table **
+
+CREATE TABLE t10 (a INT KEY, b BLOB, f DOUBLE DEFAULT '233',
+c CHAR(5), e INT DEFAULT '1')ENGINE='NDB';
+RESET MASTER;
+
+*** Start Slave ***
+START SLAVE;
+
+*** Master Data Insert ***
+set @b1 = 'b1b1b1b1';
+set @b1 = concat(@b1,@b1);
+INSERT INTO t10 () VALUES(1,@b1,DEFAULT,'Kyle',DEFAULT),
+(2,@b1,DEFAULT,'JOE',DEFAULT),
+(3,@b1,DEFAULT,'QA',DEFAULT);
+
+********************************************
+*** Expect slave to fail with Error 1523 ***
+********************************************
+
+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 1534
+Last_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 5, test.t10 has type 254
+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 1534
+Last_SQL_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 5, test.t10 has type 254
+SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
+START SLAVE;
+
+*** Drop t10 ***
+DROP TABLE t10;
+
+*********************************************
+* More columns in master at middle of table *
+* Expect: Proper error message *
+*********************************************
+
+*** Create t11 on slave ***
+STOP SLAVE;
+RESET SLAVE;
+CREATE TABLE t11 (a INT PRIMARY KEY, b BLOB, c VARCHAR(254)
+) ENGINE='NDB';
+
+*** Create t11 on Master ***
+CREATE TABLE t11 (a INT KEY, b BLOB, f TEXT,
+c CHAR(5) DEFAULT 'test', e INT DEFAULT '1')ENGINE='NDB';
+RESET MASTER;
+
+*** Start Slave ***
+START SLAVE;
+
+*** Master Data Insert ***
+set @b1 = 'b1b1b1b1';
+set @b1 = concat(@b1,@b1);
+INSERT INTO t11 () VALUES(1,@b1,'Testing is fun','Kyle',DEFAULT),
+(2,@b1,'Testing is cool','JOE',DEFAULT),
+(3,@b1,DEFAULT,'QA',DEFAULT);
+
+********************************************
+*** Expect slave to fail with Error 1523 ***
+********************************************
+
+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 1534
+Last_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 252, test.t11 has type 15
+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 1534
+Last_SQL_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 252, test.t11 has type 15
+SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
+START SLAVE;
+
+*** Drop t11 ***
+DROP TABLE t11;
+
+*********************************************
+* More columns in master at middle of table *
+* Expect: This one should pass blob-text *
+*********************************************
+
+*** Create t12 on slave ***
+STOP SLAVE;
+RESET SLAVE;
+CREATE TABLE t12 (a INT PRIMARY KEY, b BLOB, c BLOB
+) ENGINE='NDB';
+
+*** Create t12 on Master ***
+CREATE TABLE t12 (a INT KEY, b BLOB, f TEXT,
+c CHAR(5) DEFAULT 'test', e INT DEFAULT '1')ENGINE='NDB';
+RESET MASTER;
+
+*** Start Slave ***
+START SLAVE;
+
+*** Master Data Insert ***
+set @b1 = 'b1b1b1b1';
+set @b1 = concat(@b1,@b1);
+INSERT INTO t12 () VALUES(1,@b1,'Kyle',DEFAULT,DEFAULT),
+(2,@b1,'JOE',DEFAULT,DEFAULT),
+(3,@b1,'QA',DEFAULT,DEFAULT);
+
+SELECT a,hex(b),f,c,e FROM t12 ORDER BY a;
+a hex(b) f c e
+1 62316231623162316231623162316231 Kyle test 1
+2 62316231623162316231623162316231 JOE test 1
+3 62316231623162316231623162316231 QA test 1
+
+*** Select on Slave ***
+SELECT a,hex(b),c FROM t12 ORDER BY a;
+a hex(b) c
+1 62316231623162316231623162316231 Kyle
+2 62316231623162316231623162316231 JOE
+3 62316231623162316231623162316231 QA
+
+*** Drop t12 ***
+DROP TABLE t12;
+
+****************************************************
+* - Alter Master adding columns at middle of table *
+* Expect: columns added *
+****************************************************
+
+
+*** Create t14 on slave ***
+STOP SLAVE;
+RESET SLAVE;
+CREATE TABLE t14 (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
+) ENGINE='NDB';
+
+*** Create t14 on Master ***
+CREATE TABLE t14 (c1 INT KEY, c4 BLOB, c5 CHAR(5),
+c6 INT DEFAULT '1',
+c7 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
+)ENGINE='NDB';
+RESET MASTER;
+
+*** Start Slave ***
+START SLAVE;
+
+*** Master Data Insert ***
+ALTER TABLE t14 ADD COLUMN c2 DECIMAL(8,2) AFTER c1;
+ALTER TABLE t14 ADD COLUMN c3 TEXT AFTER c2;
+
+set @b1 = 'b1b1b1b1';
+set @b1 = concat(@b1,@b1);
+INSERT INTO t14 () VALUES(1,1.00,'Replication Testing Extra Col',@b1,'Kyle',DEFAULT,DEFAULT),
+(2,2.00,'This Test Should work',@b1,'JOE',DEFAULT,DEFAULT),
+(3,3.00,'If is does not, I will open a bug',@b1,'QA',DEFAULT,DEFAULT);
+
+SELECT c1,c2,c3,hex(c4),c5,c6,c7 FROM t14 ORDER BY c1;
+c1 c2 c3 hex(c4) c5 c6 c7
+1 1.00 Replication Testing Extra Col 62316231623162316231623162316231 Kyle 1 CURRENT_TIMESTAMP
+2 2.00 This Test Should work 62316231623162316231623162316231 JOE 1 CURRENT_TIMESTAMP
+3 3.00 If is does not, I will open a bug 62316231623162316231623162316231 QA 1 CURRENT_TIMESTAMP
+
+*** Select on Slave ****
+SELECT c1,c2,c3,hex(c4),c5 FROM t14 ORDER BY c1;
+c1 c2 c3 hex(c4) c5
+1 1.00 Replication Testing Extra Col 62316231623162316231623162316231 Kyle
+2 2.00 This Test Should work 62316231623162316231623162316231 JOE
+3 3.00 If is does not, I will open a bug 62316231623162316231623162316231 QA
+
+****************************************************
+* - Alter Master Dropping columns from the middle. *
+* Expect: columns dropped *
+****************************************************
+
+*** connect to master and drop columns ***
+ALTER TABLE t14 DROP COLUMN c2;
+ALTER TABLE t14 DROP COLUMN c7;
+
+*** Select from Master ***
+SELECT c1,c3,hex(c4),c5,c6 FROM t14 ORDER BY c1;
+c1 c3 hex(c4) c5 c6
+1 Replication Testing Extra Col 62316231623162316231623162316231 Kyle 1
+2 This Test Should work 62316231623162316231623162316231 JOE 1
+3 If is does not, I will open a bug 62316231623162316231623162316231 QA 1
+
+************
+* Bug30415 *
+************
+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 1091
+Last_Error Error 'Can't DROP 'c7'; check that column/key exists' on query. Default database: 'test'. Query: 'ALTER TABLE t14 DROP COLUMN c7'
+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 1091
+Last_SQL_Error Error 'Can't DROP 'c7'; check that column/key exists' on query. Default database: 'test'. Query: 'ALTER TABLE t14 DROP COLUMN c7'
+STOP SLAVE;
+RESET SLAVE;
+
+*** Drop t14 ***
+DROP TABLE t14;
+DROP TABLE t14;
+RESET MASTER;
+START SLAVE;
+
+*************************************************
+* - Alter Master adding columns at end of table *
+* Expect: Error 1054 *
+*************************************************
+
+*** Create t15 on slave ***
+STOP SLAVE;
+RESET SLAVE;
+CREATE TABLE t15 (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
+) ENGINE='NDB';
+
+*** Create t15 on Master ***
+CREATE TABLE t15 (c1 INT KEY, c4 BLOB, c5 CHAR(5),
+c6 INT DEFAULT '1',
+c7 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
+)ENGINE='NDB';
+RESET MASTER;
+
+*** Start Slave ***
+START SLAVE;
+
+*** Master Data Insert ***
+ALTER TABLE t15 ADD COLUMN c2 DECIMAL(8,2) AFTER c7;
+set @b1 = 'b1b1b1b1';
+set @b1 = concat(@b1,@b1);
+INSERT INTO t15 () VALUES(1,@b1,'Kyle',DEFAULT,DEFAULT,3.00),
+(2,@b1,'JOE',DEFAULT,DEFAULT,3.00),
+(3,@b1,'QA',DEFAULT,DEFAULT,3.00);
+SELECT c1,hex(c4),c5,c6,c7,c2 FROM t15 ORDER BY c1;
+c1 hex(c4) c5 c6 c7 c2
+1 62316231623162316231623162316231 Kyle 1 CURRENT_TIMESTAMP 3.00
+2 62316231623162316231623162316231 JOE 1 CURRENT_TIMESTAMP 3.00
+3 62316231623162316231623162316231 QA 1 CURRENT_TIMESTAMP 3.00
+
+********************************************
+*** Expect slave to fail with Error 1054 ***
+********************************************
+
+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 1054
+Last_Error Error 'Unknown column 'c7' in 't15'' on query. Default database: 'test'. Query: 'ALTER TABLE t15 ADD COLUMN c2 DECIMAL(8,2) AFTER c7'
+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 1054
+Last_SQL_Error Error 'Unknown column 'c7' in 't15'' on query. Default database: 'test'. Query: 'ALTER TABLE t15 ADD COLUMN c2 DECIMAL(8,2) AFTER c7'
+STOP SLAVE;
+RESET SLAVE;
+
+*** Drop t15 ***
+DROP TABLE t15;
+DROP TABLE t15;
+RESET MASTER;
+START SLAVE;
+
+************************************************
+* - Create index on Master column not on slave *
+* Expect:Warning *
+************************************************
+
+*** Create t16 on slave ***
+STOP SLAVE;
+RESET SLAVE;
+CREATE TABLE t16 (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
+) ENGINE='NDB';
+
+*** Create t16 on Master ***
+CREATE TABLE t16 (c1 INT KEY, c4 BLOB, c5 CHAR(5),
+c6 INT DEFAULT '1',
+c7 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
+)ENGINE='NDB';
+RESET MASTER;
+
+*** Start Slave ***
+START SLAVE;
+
+*** Master Create Index and Data Insert ***
+CREATE INDEX part_of_c6 ON t16 (c6);
+set @b1 = 'b1b1b1b1';
+set @b1 = concat(@b1,@b1);
+INSERT INTO t16 () VALUES(1,@b1,'Kyle',DEFAULT,DEFAULT),
+(2,@b1,'JOE',2,DEFAULT),
+(3,@b1,'QA',3,DEFAULT);
+SELECT c1,hex(c4),c5,c6,c7 FROM t16 ORDER BY c1;
+c1 hex(c4) c5 c6 c7
+1 62316231623162316231623162316231 Kyle 1 CURRENT_TIMESTAMP
+2 62316231623162316231623162316231 JOE 2 CURRENT_TIMESTAMP
+3 62316231623162316231623162316231 QA 3 CURRENT_TIMESTAMP
+
+*****************
+*** BUG 30434 ***
+*****************
+
+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 1072
+Last_Error Error 'Key column 'c6' doesn't exist in table' on query. Default database: 'test'. Query: 'CREATE INDEX part_of_c6 ON t16 (c6)'
+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 1072
+Last_SQL_Error Error 'Key column 'c6' doesn't exist in table' on query. Default database: 'test'. Query: 'CREATE INDEX part_of_c6 ON t16 (c6)'
+STOP SLAVE;
+RESET SLAVE;
+
+*** Drop t16 ***
+DROP TABLE t16;
+DROP TABLE t16;
+RESET MASTER;
+START SLAVE;
+
+*****************************************************
+* - Delete rows using column on Master not on slave *
+* Expect: Rows Deleted *
+*****************************************************
+
+*** Create t17 on slave ***
+STOP SLAVE;
+RESET SLAVE;
+CREATE TABLE t17 (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
+) ENGINE='NDB';
+
+*** Create t17 on Master ***
+CREATE TABLE t17 (c1 INT KEY, c4 BLOB, c5 CHAR(5),
+c6 INT DEFAULT '1',
+c7 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
+)ENGINE='NDB';
+RESET MASTER;
+
+*** Start Slave ***
+START SLAVE;
+
+*** Master Data Insert ***
+set @b1 = 'b1b1b1b1';
+set @b1 = concat(@b1,@b1);
+INSERT INTO t17 () VALUES(1,@b1,'Kyle',DEFAULT,DEFAULT),
+(2,@b1,'JOE',2,DEFAULT),
+(3,@b1,'QA',3,DEFAULT);
+SELECT c1,hex(c4),c5,c6,c7 FROM t17 ORDER BY c1;
+c1 hex(c4) c5 c6 c7
+1 62316231623162316231623162316231 Kyle 1 CURRENT_TIMESTAMP
+2 62316231623162316231623162316231 JOE 2 CURRENT_TIMESTAMP
+3 62316231623162316231623162316231 QA 3 CURRENT_TIMESTAMP
+
+** Select * from Slave **
+SELECT c1,hex(c4),c5 FROM t17 ORDER BY c1;
+c1 hex(c4) c5
+1 62316231623162316231623162316231 Kyle
+2 62316231623162316231623162316231 JOE
+3 62316231623162316231623162316231 QA
+
+** Delete from master **
+DELETE FROM t17 WHERE c6 = 3;
+SELECT c1,hex(c4),c5,c6,c7 FROM t17 ORDER BY c1;
+c1 hex(c4) c5 c6 c7
+1 62316231623162316231623162316231 Kyle 1 CURRENT_TIMESTAMP
+2 62316231623162316231623162316231 JOE 2 CURRENT_TIMESTAMP
+
+** Check slave **
+SELECT c1,hex(c4),c5 FROM t17 ORDER BY c1;
+c1 hex(c4) c5
+1 62316231623162316231623162316231 Kyle
+2 62316231623162316231623162316231 JOE
+DROP TABLE t17;
+
+
+*****************************************************
+* - Update row using column on Master not on slave *
+* Expect: Rows updated *
+*****************************************************
+
+** Bug30674 **
+
+*** Create t18 on slave ***
+
+STOP SLAVE;
+RESET SLAVE;
+CREATE TABLE t18 (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
+) ENGINE='NDB';
+
+*** Create t18 on Master ***
+CREATE TABLE t18 (c1 INT KEY, c4 BLOB, c5 CHAR(5),
+c6 INT DEFAULT '1',
+c7 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
+)ENGINE='NDB';
+RESET MASTER;
+
+*** Start Slave ***
+START SLAVE;
+
+*** Master Data Insert ***
+set @b1 = 'b1b1b1b1';
+set @b1 = concat(@b1,@b1);
+INSERT INTO t18 () VALUES(1,@b1,'Kyle',DEFAULT,DEFAULT),
+(2,@b1,'JOE',2,DEFAULT),
+(3,@b1,'QA',3,DEFAULT);
+SELECT c1,hex(c4),c5,c6,c7 FROM t18 ORDER BY c1;
+c1 hex(c4) c5 c6 c7
+1 62316231623162316231623162316231 Kyle 1 CURRENT_TIMESTAMP
+2 62316231623162316231623162316231 JOE 2 CURRENT_TIMESTAMP
+3 62316231623162316231623162316231 QA 3 CURRENT_TIMESTAMP
+
+** Select * from Slave **
+SELECT c1,hex(c4),c5 FROM t18 ORDER BY c1;
+c1 hex(c4) c5
+1 62316231623162316231623162316231 Kyle
+2 62316231623162316231623162316231 JOE
+3 62316231623162316231623162316231 QA
+
+** update from master **
+UPDATE t18 SET c5 = 'TEST' WHERE c6 = 3;
+SELECT c1,hex(c4),c5,c6,c7 FROM t18 ORDER BY c1;
+c1 hex(c4) c5 c6 c7
+1 62316231623162316231623162316231 Kyle 1 CURRENT_TIMESTAMP
+2 62316231623162316231623162316231 JOE 2 CURRENT_TIMESTAMP
+3 62316231623162316231623162316231 TEST 3 CURRENT_TIMESTAMP
+
+** Check slave **
+SELECT c1,hex(c4),c5 FROM t18 ORDER BY c1;
+c1 hex(c4) c5
+1 62316231623162316231623162316231 Kyle
+2 62316231623162316231623162316231 JOE
+3 62316231623162316231623162316231 TEST
+DROP TABLE t18;
+
+
+*****************************************************
+* - Insert UUID column on Master not on slave *
+* Expect: Rows inserted *
+*****************************************************
+
+*** Create t5 on slave ***
+STOP SLAVE;
+RESET SLAVE;
+CREATE TABLE t5 (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
+) ENGINE='NDB';
+
+*** Create t5 on Master ***
+CREATE TABLE t5 (c1 INT KEY, c4 BLOB, c5 CHAR(5),
+c6 LONG,
+c7 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
+)ENGINE='NDB';
+RESET MASTER;
+
+*** Start Slave ***
+START SLAVE;
+
+*** Master Data Insert ***
+set @b1 = 'b1b1b1b1';
+INSERT INTO t5 () VALUES(1,@b1,'Kyle',UUID(),DEFAULT),
+(2,@b1,'JOE',UUID(),DEFAULT),
+(3,@b1,'QA',UUID(),DEFAULT);
+SELECT c1,hex(c4),c5,c6,c7 FROM t5 ORDER BY c1;
+c1 hex(c4) c5 c6 c7
+1 6231623162316231 Kyle UUID TIME
+2 6231623162316231 JOE UUID TIME
+3 6231623162316231 QA UUID TIME
+
+** Select * from Slave **
+SELECT c1,hex(c4),c5 FROM t5 ORDER BY c1;
+c1 hex(c4) c5
+1 6231623162316231 Kyle
+2 6231623162316231 JOE
+3 6231623162316231 QA
+DROP TABLE t5;
+
+set binlog_format=mixed;
+
+***********************************************************
+***********************************************************
+***************** Start of Testing ************************
+***********************************************************
+***********************************************************
+* This test format == binlog_format MIXED and engine == 'NDB'
+***********************************************************
+***********************************************************
+
+***** Testing more columns on the Master *****
+
+CREATE TABLE t1 (f1 INT, f2 INT, f3 INT PRIMARY KEY, f4 CHAR(20),
+/* extra */
+f5 FLOAT DEFAULT '2.00',
+f6 CHAR(4) DEFAULT 'TEST',
+f7 INT DEFAULT '0',
+f8 TEXT,
+f9 LONGBLOB,
+f10 BIT(63),
+f11 VARBINARY(64))ENGINE='NDB';
+
+* Alter Table on Slave and drop columns f5 through f11 *
+
+alter table t1 drop f5, drop f6, drop f7, drop f8, drop f9, drop f10, drop f11;
+
+* Insert data in Master then update and delete some rows*
+
+* Select count and 20 rows from Master *
+
+SELECT COUNT(*) FROM t1;
+COUNT(*)
+40
+
+SELECT f1,f2,f3,f4,f5,f6,f7,f8,f9,
+hex(f10),hex(f11) FROM t1 ORDER BY f3 LIMIT 20;
+f1 f2 f3 f4 f5 f6 f7 f8 f9 hex(f10) hex(f11)
+2 2 2 second 2 kaks 2 got stolen from the paradise very fat blob 1555 123456
+3 3 3 next 2 kaks 2 got stolen from the paradise very fat blob 1555 123456
+5 5 5 second 2 kaks 2 got stolen from the paradise very fat blob 1555 123456
+6 6 6 next 2 kaks 2 got stolen from the paradise very fat blob 1555 123456
+8 8 8 second 2 kaks 2 got stolen from the paradise very fat blob 1555 123456
+9 9 9 next 2 kaks 2 got stolen from the paradise very fat blob 1555 123456
+11 11 11 second 2 kaks 2 got stolen from the paradise very fat blob 1555 123456
+12 12 12 next 2 kaks 2 got stolen from the paradise very fat blob 1555 123456
+14 14 14 second 2 kaks 2 got stolen from the paradise very fat blob 1555 123456
+15 15 15 next 2 kaks 2 got stolen from the paradise very fat blob 1555 123456
+17 17 17 second 2 kaks 2 got stolen from the paradise very fat blob 1555 123456
+18 18 18 next 2 kaks 2 got stolen from the paradise very fat blob 1555 123456
+20 20 20 second 2 kaks 2 got stolen from the paradise very fat blob 1555 123456
+21 21 21 next 2 kaks 2 got stolen from the paradise very fat blob 1555 123456
+23 23 23 second 2 kaks 2 got stolen from the paradise very fat blob 1555 123456
+24 24 24 next 2 kaks 2 got stolen from the paradise very fat blob 1555 123456
+26 26 26 second 2 kaks 2 got stolen from the paradise very fat blob 1555 123456
+27 27 27 next 2 kaks 2 got stolen from the paradise very fat blob 1555 123456
+29 29 29 second 2 kaks 2 got stolen from the paradise very fat blob 1555 123456
+30 30 30 next 2 kaks 2 got stolen from the paradise very fat blob 1555 123456
+
+* Select count and 20 rows from Slave *
+
+SELECT COUNT(*) FROM t1;
+COUNT(*)
+40
+
+SELECT * FROM t1 ORDER BY f3 LIMIT 20;
+f1 f2 f3 f4
+2 2 2 second
+3 3 3 next
+5 5 5 second
+6 6 6 next
+8 8 8 second
+9 9 9 next
+11 11 11 second
+12 12 12 next
+14 14 14 second
+15 15 15 next
+17 17 17 second
+18 18 18 next
+20 20 20 second
+21 21 21 next
+23 23 23 second
+24 24 24 next
+26 26 26 second
+27 27 27 next
+29 29 29 second
+30 30 30 next
+
+* Show Slave Status *
+
+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 Yes
+Replicate_Do_DB
+Replicate_Ignore_DB
+Replicate_Do_Table
+Replicate_Ignore_Table
+Replicate_Wild_Do_Table
+Replicate_Wild_Ignore_Table
+Last_Errno 0
+Last_Error
+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 0
+Last_SQL_Error
+
+
+***** Testing Altering table def scenario *****
+
+CREATE TABLE t2 (f1 INT, f2 INT, f3 INT PRIMARY KEY, f4 CHAR(20),
+/* extra */
+f5 DOUBLE DEFAULT '2.00',
+f6 ENUM('a', 'b', 'c') default 'a',
+f7 DECIMAL(17,9) default '1000.00',
+f8 MEDIUMBLOB,
+f9 NUMERIC(6,4) default '2000.00',
+f10 VARCHAR(1024),
+f11 BINARY(20) NOT NULL DEFAULT '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0',
+f12 SET('a', 'b', 'c') default 'b')
+ENGINE='NDB';
+Warnings:
+Warning 1264 Out of range value for column 'f9' at row 1
+
+CREATE TABLE t3 (f1 INT, f2 INT, f3 INT PRIMARY KEY, f4 CHAR(20),
+/* extra */
+f5 DOUBLE DEFAULT '2.00',
+f6 ENUM('a', 'b', 'c') default 'a',
+f8 MEDIUMBLOB,
+f10 VARCHAR(1024),
+f11 BINARY(20) NOT NULL DEFAULT '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0',
+f12 SET('a', 'b', 'c') default 'b')
+ENGINE='NDB';
+
+CREATE TABLE t4 (f1 INT, f2 INT, f3 INT PRIMARY KEY, f4 CHAR(20),
+/* extra */
+f5 DOUBLE DEFAULT '2.00',
+f6 DECIMAL(17,9) default '1000.00',
+f7 MEDIUMBLOB,
+f8 NUMERIC(6,4) default '2000.00',
+f9 VARCHAR(1024),
+f10 BINARY(20) not null default '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0',
+f11 CHAR(255))
+ENGINE='NDB';
+Warnings:
+Warning 1264 Out of range value for column 'f8' at row 1
+
+CREATE TABLE t31 (f1 INT, f2 INT, f3 INT PRIMARY KEY, f4 CHAR(20),
+/* extra */
+f5 BIGINT,
+f6 BLOB,
+f7 DATE,
+f8 DATETIME,
+f9 FLOAT,
+f10 INT,
+f11 LONGBLOB,
+f12 LONGTEXT,
+f13 MEDIUMBLOB,
+f14 MEDIUMINT,
+f15 MEDIUMTEXT,
+f16 REAL,
+f17 SMALLINT,
+f18 TEXT,
+f19 TIME,
+f20 TIMESTAMP,
+f21 TINYBLOB,
+f22 TINYINT,
+f23 TINYTEXT,
+f24 YEAR,
+f25 BINARY(255),
+f26 BIT(64),
+f27 CHAR(255),
+f28 DECIMAL(30,7),
+f29 DOUBLE,
+f30 ENUM ('a','b', 'c') default 'a',
+f31 FLOAT,
+f32 NUMERIC(17,9),
+f33 SET ('a', 'b', 'c') default 'b',
+f34 VARBINARY(1025),
+f35 VARCHAR(257)
+) ENGINE='NDB';
+
+** Alter tables on slave and drop columns **
+
+alter table t2 drop f5, drop f6, drop f7, drop f8, drop f9, drop f10, drop f11, drop
+f12;
+alter table t3 drop f5, drop f6, drop f8, drop f10, drop f11, drop f12;
+alter table t4 drop f5, drop f6, drop f7, drop f8, drop f9, drop f10, drop f11;
+alter table t31
+drop f5, drop f6, drop f7, drop f8, drop f9, drop f10, drop f11,
+drop f12, drop f13, drop f14, drop f15, drop f16, drop f17, drop f18,
+drop f19, drop f20, drop f21, drop f22, drop f23, drop f24, drop f25,
+drop f26, drop f27, drop f28, drop f29, drop f30, drop f31, drop f32,
+drop f33, drop f34, drop f35;
+
+** Insert Data into Master **
+INSERT into t2 set f1=1, f2=1, f3=1, f4='first', f8='f8: medium size blob', f10='f10:
+some var char';
+INSERT into t2 values (2, 2, 2, 'second',
+2.0, 'b', 2000.0002, 'f8: medium size blob', 2000, 'f10: some var char',
+'01234567', 'c'),
+(3, 3, 3, 'third',
+3.0, 'b', 3000.0003, 'f8: medium size blob', 3000, 'f10: some var char',
+'01234567', 'c');
+Warnings:
+Warning 1264 Out of range value for column 'f9' at row 1
+Warning 1264 Out of range value for column 'f9' at row 2
+INSERT into t3 set f1=1, f2=1, f3=1, f4='first', f10='f10: some var char';
+INSERT into t4 set f1=1, f2=1, f3=1, f4='first', f7='f7: medium size blob', f10='f10:
+binary data';
+INSERT into t31 set f1=1, f2=1, f3=1, f4='first';
+INSERT into t31 set f1=1, f2=1, f3=2, f4='second',
+f9=2.2, f10='seven samurai', f28=222.222, f35='222';
+Warnings:
+Warning 1366 Incorrect integer value: 'seven samurai' for column 'f10' at row 1
+INSERT into t31 values (1, 1, 3, 'third',
+/* f5 BIGINT, */ 333333333333333333333333,
+/* f6 BLOB, */ '3333333333333333333333',
+/* f7 DATE, */ '2007-07-18',
+/* f8 DATETIME, */ "2007-07-18",
+/* f9 FLOAT, */ 3.33333333,
+/* f10 INT, */ 333333333,
+/* f11 LONGBLOB, */ '3333333333333333333',
+/* f12 LONGTEXT, */ '3333333333333333333',
+/* f13 MEDIUMBLOB, */ '3333333333333333333',
+/* f14 MEDIUMINT, */ 33,
+/* f15 MEDIUMTEXT, */ 3.3,
+/* f16 REAL, */ 3.3,
+/* f17 SMALLINT, */ 3,
+/* f18 TEXT, */ '33',
+/* f19 TIME, */ '2:59:58.999',
+/* f20 TIMESTAMP, */ 20000303000000,
+/* f21 TINYBLOB, */ '3333',
+/* f22 TINYINT, */ 3,
+/* f23 TINYTEXT, */ '3',
+/* f24 YEAR, */ 3000,
+/* f25 BINARY(255), */ 'three_33333',
+/* f26 BIT(64), */ b'011',
+/* f27 CHAR(255), */ 'three',
+/* f28 DECIMAL(30,7), */ 3.333,
+/* f29 DOUBLE, */ 3.333333333333333333333333333,
+/* f30 ENUM ('a','b','c')*/ 'c',
+/* f31 FLOAT, */ 3.0,
+/* f32 NUMERIC(17,9), */ 3.3333,
+/* f33 SET ('a','b','c'),*/ 'c',
+/*f34 VARBINARY(1025),*/ '3333 minus 3',
+/*f35 VARCHAR(257),*/ 'three times three'
+ );
+Warnings:
+Warning 1264 Out of range value for column 'f5' at row 1
+Warning 1264 Out of range value for column 'f24' at row 1
+INSERT into t31 values (1, 1, 4, 'fourth',
+/* f5 BIGINT, */ 333333333333333333333333,
+/* f6 BLOB, */ '3333333333333333333333',
+/* f7 DATE, */ '2007-07-18',
+/* f8 DATETIME, */ "2007-07-18",
+/* f9 FLOAT, */ 3.33333333,
+/* f10 INT, */ 333333333,
+/* f11 LONGBLOB, */ '3333333333333333333',
+/* f12 LONGTEXT, */ '3333333333333333333',
+/* f13 MEDIUMBLOB, */ '3333333333333333333',
+/* f14 MEDIUMINT, */ 33,
+/* f15 MEDIUMTEXT, */ 3.3,
+/* f16 REAL, */ 3.3,
+/* f17 SMALLINT, */ 3,
+/* f18 TEXT, */ '33',
+/* f19 TIME, */ '2:59:58.999',
+/* f20 TIMESTAMP, */ 20000303000000,
+/* f21 TINYBLOB, */ '3333',
+/* f22 TINYINT, */ 3,
+/* f23 TINYTEXT, */ '3',
+/* f24 YEAR, */ 3000,
+/* f25 BINARY(255), */ 'three_33333',
+/* f26 BIT(64), */ b'011',
+/* f27 CHAR(255), */ 'three',
+/* f28 DECIMAL(30,7), */ 3.333,
+/* f29 DOUBLE, */ 3.333333333333333333333333333,
+/* f30 ENUM ('a','b','c')*/ 'c',
+/* f31 FLOAT, */ 3.0,
+/* f32 NUMERIC(17,9), */ 3.3333,
+/* f33 SET ('a','b','c'),*/ 'c',
+/*f34 VARBINARY(1025),*/ '3333 minus 3',
+/*f35 VARCHAR(257),*/ 'three times three'
+ ),
+(1, 1, 5, 'fifth',
+/* f5 BIGINT, */ 333333333333333333333333,
+/* f6 BLOB, */ '3333333333333333333333',
+/* f7 DATE, */ '2007-07-18',
+/* f8 DATETIME, */ "2007-07-18",
+/* f9 FLOAT, */ 3.33333333,
+/* f10 INT, */ 333333333,
+/* f11 LONGBLOB, */ '3333333333333333333',
+/* f12 LONGTEXT, */ '3333333333333333333',
+/* f13 MEDIUMBLOB, */ '3333333333333333333',
+/* f14 MEDIUMINT, */ 33,
+/* f15 MEDIUMTEXT, */ 3.3,
+/* f16 REAL, */ 3.3,
+/* f17 SMALLINT, */ 3,
+/* f18 TEXT, */ '33',
+/* f19 TIME, */ '2:59:58.999',
+/* f20 TIMESTAMP, */ 20000303000000,
+/* f21 TINYBLOB, */ '3333',
+/* f22 TINYINT, */ 3,
+/* f23 TINYTEXT, */ '3',
+/* f24 YEAR, */ 3000,
+/* f25 BINARY(255), */ 'three_33333',
+/* f26 BIT(64), */ b'011',
+/* f27 CHAR(255), */ 'three',
+/* f28 DECIMAL(30,7), */ 3.333,
+/* f29 DOUBLE, */ 3.333333333333333333333333333,
+/* f30 ENUM ('a','b','c')*/ 'c',
+/* f31 FLOAT, */ 3.0,
+/* f32 NUMERIC(17,9), */ 3.3333,
+/* f33 SET ('a','b','c'),*/ 'c',
+/*f34 VARBINARY(1025),*/ '3333 minus 3',
+/*f35 VARCHAR(257),*/ 'three times three'
+ ),
+(1, 1, 6, 'sixth',
+/* f5 BIGINT, */ NULL,
+/* f6 BLOB, */ '3333333333333333333333',
+/* f7 DATE, */ '2007-07-18',
+/* f8 DATETIME, */ "2007-07-18",
+/* f9 FLOAT, */ 3.33333333,
+/* f10 INT, */ 333333333,
+/* f11 LONGBLOB, */ '3333333333333333333',
+/* f12 LONGTEXT, */ '3333333333333333333',
+/* f13 MEDIUMBLOB, */ '3333333333333333333',
+/* f14 MEDIUMINT, */ 33,
+/* f15 MEDIUMTEXT, */ 3.3,
+/* f16 REAL, */ 3.3,
+/* f17 SMALLINT, */ 3,
+/* f18 TEXT, */ '33',
+/* f19 TIME, */ '2:59:58.999',
+/* f20 TIMESTAMP, */ 20000303000000,
+/* f21 TINYBLOB, */ '3333',
+/* f22 TINYINT, */ 3,
+/* f23 TINYTEXT, */ '3',
+/* f24 YEAR, */ 3000,
+/* f25 BINARY(255), */ 'three_33333',
+/* f26 BIT(64), */ b'011',
+/* f27 CHAR(255), */ 'three',
+/* f28 DECIMAL(30,7), */ 3.333,
+/* f29 DOUBLE, */ 3.333333333333333333333333333,
+/* f30 ENUM ('a','b','c')*/ 'c',
+/* f31 FLOAT, */ 3.0,
+/* f32 NUMERIC(17,9), */ 3.3333,
+/* f33 SET ('a','b','c'),*/ 'c',
+/*f34 VARBINARY(1025),*/ '3333 minus 3',
+/*f35 VARCHAR(257),*/ NULL
+);
+Warnings:
+Warning 1264 Out of range value for column 'f5' at row 1
+Warning 1264 Out of range value for column 'f24' at row 1
+Warning 1264 Out of range value for column 'f5' at row 2
+Warning 1264 Out of range value for column 'f24' at row 2
+Warning 1264 Out of range value for column 'f24' at row 3
+
+** Sync slave with master **
+** Do selects from tables **
+
+select * from t1 order by f3;
+f1 f2 f3 f4
+2 2 2 second
+3 3 3 next
+5 5 5 second
+6 6 6 next
+8 8 8 second
+9 9 9 next
+11 11 11 second
+12 12 12 next
+14 14 14 second
+15 15 15 next
+17 17 17 second
+18 18 18 next
+20 20 20 second
+21 21 21 next
+23 23 23 second
+24 24 24 next
+26 26 26 second
+27 27 27 next
+29 29 29 second
+30 30 30 next
+31 31 31 second
+32 32 32 second
+33 33 33 second
+34 34 34 second
+35 35 35 second
+36 36 36 second
+37 37 37 second
+38 38 38 second
+39 39 39 second
+40 40 40 second
+41 41 41 second
+42 42 42 second
+43 43 43 second
+44 44 44 second
+45 45 45 second
+46 46 46 second
+47 47 47 second
+48 48 48 second
+49 49 49 second
+50 50 50 second
+select * from t2 order by f1;
+f1 f2 f3 f4
+1 1 1 first
+2 2 2 second
+3 3 3 third
+select * from t3 order by f1;
+f1 f2 f3 f4
+1 1 1 first
+select * from t4 order by f1;
+f1 f2 f3 f4
+1 1 1 first
+select * from t31 order by f1;
+f1 f2 f3 f4
+1 1 5 fifth
+1 1 3 third
+1 1 1 first
+1 1 6 sixth
+1 1 2 second
+1 1 4 fourth
+
+** Do updates master **
+
+update t31 set f5=555555555555555 where f3=6;
+update t31 set f2=2 where f3=2;
+update t31 set f1=NULL where f3=1;
+update t31 set f3=NULL, f27=NULL, f35='f35 new value' where f3=3;
+Warnings:
+Warning 1048 Column 'f3' cannot be null
+
+** Delete from Master **
+
+delete from t1;
+delete from t2;
+delete from t3;
+delete from t4;
+delete from t31;
+
+** Check slave status **
+
+select * from t31;
+f1 f2 f3 f4
+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 Yes
+Replicate_Do_DB
+Replicate_Ignore_DB
+Replicate_Do_Table
+Replicate_Ignore_Table
+Replicate_Wild_Do_Table
+Replicate_Wild_Ignore_Table
+Last_Errno 0
+Last_Error
+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 0
+Last_SQL_Error
+
+****************************************
+* columns in master at middle of table *
+* Expect: Proper error message *
+****************************************
+
+** Stop and Reset Slave **
+
+STOP SLAVE;
+RESET SLAVE;
+
+** create table slave side **
+CREATE TABLE t10 (a INT PRIMARY KEY, b BLOB, c CHAR(5)
+) ENGINE='NDB';
+
+** Connect to master and create table **
+
+CREATE TABLE t10 (a INT KEY, b BLOB, f DOUBLE DEFAULT '233',
+c CHAR(5), e INT DEFAULT '1')ENGINE='NDB';
+RESET MASTER;
+
+*** Start Slave ***
+START SLAVE;
+
+*** Master Data Insert ***
+set @b1 = 'b1b1b1b1';
+set @b1 = concat(@b1,@b1);
+INSERT INTO t10 () VALUES(1,@b1,DEFAULT,'Kyle',DEFAULT),
+(2,@b1,DEFAULT,'JOE',DEFAULT),
+(3,@b1,DEFAULT,'QA',DEFAULT);
+
+********************************************
+*** Expect slave to fail with Error 1523 ***
+********************************************
+
+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 1534
+Last_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 5, test.t10 has type 254
+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 1534
+Last_SQL_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 5, test.t10 has type 254
+SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
+START SLAVE;
+
+*** Drop t10 ***
+DROP TABLE t10;
+
+*********************************************
+* More columns in master at middle of table *
+* Expect: Proper error message *
+*********************************************
+
+*** Create t11 on slave ***
+STOP SLAVE;
+RESET SLAVE;
+CREATE TABLE t11 (a INT PRIMARY KEY, b BLOB, c VARCHAR(254)
+) ENGINE='NDB';
+
+*** Create t11 on Master ***
+CREATE TABLE t11 (a INT KEY, b BLOB, f TEXT,
+c CHAR(5) DEFAULT 'test', e INT DEFAULT '1')ENGINE='NDB';
+RESET MASTER;
+
+*** Start Slave ***
+START SLAVE;
+
+*** Master Data Insert ***
+set @b1 = 'b1b1b1b1';
+set @b1 = concat(@b1,@b1);
+INSERT INTO t11 () VALUES(1,@b1,'Testing is fun','Kyle',DEFAULT),
+(2,@b1,'Testing is cool','JOE',DEFAULT),
+(3,@b1,DEFAULT,'QA',DEFAULT);
+
+********************************************
+*** Expect slave to fail with Error 1523 ***
+********************************************
+
+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 1534
+Last_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 252, test.t11 has type 15
+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 1534
+Last_SQL_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 252, test.t11 has type 15
+SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
+START SLAVE;
+
+*** Drop t11 ***
+DROP TABLE t11;
+
+*********************************************
+* More columns in master at middle of table *
+* Expect: This one should pass blob-text *
+*********************************************
+
+*** Create t12 on slave ***
+STOP SLAVE;
+RESET SLAVE;
+CREATE TABLE t12 (a INT PRIMARY KEY, b BLOB, c BLOB
+) ENGINE='NDB';
+
+*** Create t12 on Master ***
+CREATE TABLE t12 (a INT KEY, b BLOB, f TEXT,
+c CHAR(5) DEFAULT 'test', e INT DEFAULT '1')ENGINE='NDB';
+RESET MASTER;
+
+*** Start Slave ***
+START SLAVE;
+
+*** Master Data Insert ***
+set @b1 = 'b1b1b1b1';
+set @b1 = concat(@b1,@b1);
+INSERT INTO t12 () VALUES(1,@b1,'Kyle',DEFAULT,DEFAULT),
+(2,@b1,'JOE',DEFAULT,DEFAULT),
+(3,@b1,'QA',DEFAULT,DEFAULT);
+
+SELECT a,hex(b),f,c,e FROM t12 ORDER BY a;
+a hex(b) f c e
+1 62316231623162316231623162316231 Kyle test 1
+2 62316231623162316231623162316231 JOE test 1
+3 62316231623162316231623162316231 QA test 1
+
+*** Select on Slave ***
+SELECT a,hex(b),c FROM t12 ORDER BY a;
+a hex(b) c
+1 62316231623162316231623162316231 Kyle
+2 62316231623162316231623162316231 JOE
+3 62316231623162316231623162316231 QA
+
+*** Drop t12 ***
+DROP TABLE t12;
+
+****************************************************
+* - Alter Master adding columns at middle of table *
+* Expect: columns added *
+****************************************************
+
+
+*** Create t14 on slave ***
+STOP SLAVE;
+RESET SLAVE;
+CREATE TABLE t14 (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
+) ENGINE='NDB';
+
+*** Create t14 on Master ***
+CREATE TABLE t14 (c1 INT KEY, c4 BLOB, c5 CHAR(5),
+c6 INT DEFAULT '1',
+c7 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
+)ENGINE='NDB';
+RESET MASTER;
+
+*** Start Slave ***
+START SLAVE;
+
+*** Master Data Insert ***
+ALTER TABLE t14 ADD COLUMN c2 DECIMAL(8,2) AFTER c1;
+ALTER TABLE t14 ADD COLUMN c3 TEXT AFTER c2;
+
+set @b1 = 'b1b1b1b1';
+set @b1 = concat(@b1,@b1);
+INSERT INTO t14 () VALUES(1,1.00,'Replication Testing Extra Col',@b1,'Kyle',DEFAULT,DEFAULT),
+(2,2.00,'This Test Should work',@b1,'JOE',DEFAULT,DEFAULT),
+(3,3.00,'If is does not, I will open a bug',@b1,'QA',DEFAULT,DEFAULT);
+
+SELECT c1,c2,c3,hex(c4),c5,c6,c7 FROM t14 ORDER BY c1;
+c1 c2 c3 hex(c4) c5 c6 c7
+1 1.00 Replication Testing Extra Col 62316231623162316231623162316231 Kyle 1 CURRENT_TIMESTAMP
+2 2.00 This Test Should work 62316231623162316231623162316231 JOE 1 CURRENT_TIMESTAMP
+3 3.00 If is does not, I will open a bug 62316231623162316231623162316231 QA 1 CURRENT_TIMESTAMP
+
+*** Select on Slave ****
+SELECT c1,c2,c3,hex(c4),c5 FROM t14 ORDER BY c1;
+c1 c2 c3 hex(c4) c5
+1 1.00 Replication Testing Extra Col 62316231623162316231623162316231 Kyle
+2 2.00 This Test Should work 62316231623162316231623162316231 JOE
+3 3.00 If is does not, I will open a bug 62316231623162316231623162316231 QA
+
+****************************************************
+* - Alter Master Dropping columns from the middle. *
+* Expect: columns dropped *
+****************************************************
+
+*** connect to master and drop columns ***
+ALTER TABLE t14 DROP COLUMN c2;
+ALTER TABLE t14 DROP COLUMN c7;
+
+*** Select from Master ***
+SELECT c1,c3,hex(c4),c5,c6 FROM t14 ORDER BY c1;
+c1 c3 hex(c4) c5 c6
+1 Replication Testing Extra Col 62316231623162316231623162316231 Kyle 1
+2 This Test Should work 62316231623162316231623162316231 JOE 1
+3 If is does not, I will open a bug 62316231623162316231623162316231 QA 1
+
+************
+* Bug30415 *
+************
+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 1091
+Last_Error Error 'Can't DROP 'c7'; check that column/key exists' on query. Default database: 'test'. Query: 'ALTER TABLE t14 DROP COLUMN c7'
+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 1091
+Last_SQL_Error Error 'Can't DROP 'c7'; check that column/key exists' on query. Default database: 'test'. Query: 'ALTER TABLE t14 DROP COLUMN c7'
+STOP SLAVE;
+RESET SLAVE;
+
+*** Drop t14 ***
+DROP TABLE t14;
+DROP TABLE t14;
+RESET MASTER;
+START SLAVE;
+
+*************************************************
+* - Alter Master adding columns at end of table *
+* Expect: Error 1054 *
+*************************************************
+
+*** Create t15 on slave ***
+STOP SLAVE;
+RESET SLAVE;
+CREATE TABLE t15 (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
+) ENGINE='NDB';
+
+*** Create t15 on Master ***
+CREATE TABLE t15 (c1 INT KEY, c4 BLOB, c5 CHAR(5),
+c6 INT DEFAULT '1',
+c7 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
+)ENGINE='NDB';
+RESET MASTER;
+
+*** Start Slave ***
+START SLAVE;
+
+*** Master Data Insert ***
+ALTER TABLE t15 ADD COLUMN c2 DECIMAL(8,2) AFTER c7;
+set @b1 = 'b1b1b1b1';
+set @b1 = concat(@b1,@b1);
+INSERT INTO t15 () VALUES(1,@b1,'Kyle',DEFAULT,DEFAULT,3.00),
+(2,@b1,'JOE',DEFAULT,DEFAULT,3.00),
+(3,@b1,'QA',DEFAULT,DEFAULT,3.00);
+SELECT c1,hex(c4),c5,c6,c7,c2 FROM t15 ORDER BY c1;
+c1 hex(c4) c5 c6 c7 c2
+1 62316231623162316231623162316231 Kyle 1 CURRENT_TIMESTAMP 3.00
+2 62316231623162316231623162316231 JOE 1 CURRENT_TIMESTAMP 3.00
+3 62316231623162316231623162316231 QA 1 CURRENT_TIMESTAMP 3.00
+
+********************************************
+*** Expect slave to fail with Error 1054 ***
+********************************************
+
+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 1054
+Last_Error Error 'Unknown column 'c7' in 't15'' on query. Default database: 'test'. Query: 'ALTER TABLE t15 ADD COLUMN c2 DECIMAL(8,2) AFTER c7'
+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 1054
+Last_SQL_Error Error 'Unknown column 'c7' in 't15'' on query. Default database: 'test'. Query: 'ALTER TABLE t15 ADD COLUMN c2 DECIMAL(8,2) AFTER c7'
+STOP SLAVE;
+RESET SLAVE;
+
+*** Drop t15 ***
+DROP TABLE t15;
+DROP TABLE t15;
+RESET MASTER;
+START SLAVE;
+
+************************************************
+* - Create index on Master column not on slave *
+* Expect:Warning *
+************************************************
+
+*** Create t16 on slave ***
+STOP SLAVE;
+RESET SLAVE;
+CREATE TABLE t16 (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
+) ENGINE='NDB';
+
+*** Create t16 on Master ***
+CREATE TABLE t16 (c1 INT KEY, c4 BLOB, c5 CHAR(5),
+c6 INT DEFAULT '1',
+c7 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
+)ENGINE='NDB';
+RESET MASTER;
+
+*** Start Slave ***
+START SLAVE;
+
+*** Master Create Index and Data Insert ***
+CREATE INDEX part_of_c6 ON t16 (c6);
+set @b1 = 'b1b1b1b1';
+set @b1 = concat(@b1,@b1);
+INSERT INTO t16 () VALUES(1,@b1,'Kyle',DEFAULT,DEFAULT),
+(2,@b1,'JOE',2,DEFAULT),
+(3,@b1,'QA',3,DEFAULT);
+SELECT c1,hex(c4),c5,c6,c7 FROM t16 ORDER BY c1;
+c1 hex(c4) c5 c6 c7
+1 62316231623162316231623162316231 Kyle 1 CURRENT_TIMESTAMP
+2 62316231623162316231623162316231 JOE 2 CURRENT_TIMESTAMP
+3 62316231623162316231623162316231 QA 3 CURRENT_TIMESTAMP
+
+*****************
+*** BUG 30434 ***
+*****************
+
+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 1072
+Last_Error Error 'Key column 'c6' doesn't exist in table' on query. Default database: 'test'. Query: 'CREATE INDEX part_of_c6 ON t16 (c6)'
+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 1072
+Last_SQL_Error Error 'Key column 'c6' doesn't exist in table' on query. Default database: 'test'. Query: 'CREATE INDEX part_of_c6 ON t16 (c6)'
+STOP SLAVE;
+RESET SLAVE;
+
+*** Drop t16 ***
+DROP TABLE t16;
+DROP TABLE t16;
+RESET MASTER;
+START SLAVE;
+
+*****************************************************
+* - Delete rows using column on Master not on slave *
+* Expect: Rows Deleted *
+*****************************************************
+
+*** Create t17 on slave ***
+STOP SLAVE;
+RESET SLAVE;
+CREATE TABLE t17 (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
+) ENGINE='NDB';
+
+*** Create t17 on Master ***
+CREATE TABLE t17 (c1 INT KEY, c4 BLOB, c5 CHAR(5),
+c6 INT DEFAULT '1',
+c7 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
+)ENGINE='NDB';
+RESET MASTER;
+
+*** Start Slave ***
+START SLAVE;
+
+*** Master Data Insert ***
+set @b1 = 'b1b1b1b1';
+set @b1 = concat(@b1,@b1);
+INSERT INTO t17 () VALUES(1,@b1,'Kyle',DEFAULT,DEFAULT),
+(2,@b1,'JOE',2,DEFAULT),
+(3,@b1,'QA',3,DEFAULT);
+SELECT c1,hex(c4),c5,c6,c7 FROM t17 ORDER BY c1;
+c1 hex(c4) c5 c6 c7
+1 62316231623162316231623162316231 Kyle 1 CURRENT_TIMESTAMP
+2 62316231623162316231623162316231 JOE 2 CURRENT_TIMESTAMP
+3 62316231623162316231623162316231 QA 3 CURRENT_TIMESTAMP
+
+** Select * from Slave **
+SELECT c1,hex(c4),c5 FROM t17 ORDER BY c1;
+c1 hex(c4) c5
+1 62316231623162316231623162316231 Kyle
+2 62316231623162316231623162316231 JOE
+3 62316231623162316231623162316231 QA
+
+** Delete from master **
+DELETE FROM t17 WHERE c6 = 3;
+SELECT c1,hex(c4),c5,c6,c7 FROM t17 ORDER BY c1;
+c1 hex(c4) c5 c6 c7
+1 62316231623162316231623162316231 Kyle 1 CURRENT_TIMESTAMP
+2 62316231623162316231623162316231 JOE 2 CURRENT_TIMESTAMP
+
+** Check slave **
+SELECT c1,hex(c4),c5 FROM t17 ORDER BY c1;
+c1 hex(c4) c5
+1 62316231623162316231623162316231 Kyle
+2 62316231623162316231623162316231 JOE
+DROP TABLE t17;
+
+
+*****************************************************
+* - Update row using column on Master not on slave *
+* Expect: Rows updated *
+*****************************************************
+
+** Bug30674 **
+
+*** Create t18 on slave ***
+
+STOP SLAVE;
+RESET SLAVE;
+CREATE TABLE t18 (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
+) ENGINE='NDB';
+
+*** Create t18 on Master ***
+CREATE TABLE t18 (c1 INT KEY, c4 BLOB, c5 CHAR(5),
+c6 INT DEFAULT '1',
+c7 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
+)ENGINE='NDB';
+RESET MASTER;
+
+*** Start Slave ***
+START SLAVE;
+
+*** Master Data Insert ***
+set @b1 = 'b1b1b1b1';
+set @b1 = concat(@b1,@b1);
+INSERT INTO t18 () VALUES(1,@b1,'Kyle',DEFAULT,DEFAULT),
+(2,@b1,'JOE',2,DEFAULT),
+(3,@b1,'QA',3,DEFAULT);
+SELECT c1,hex(c4),c5,c6,c7 FROM t18 ORDER BY c1;
+c1 hex(c4) c5 c6 c7
+1 62316231623162316231623162316231 Kyle 1 CURRENT_TIMESTAMP
+2 62316231623162316231623162316231 JOE 2 CURRENT_TIMESTAMP
+3 62316231623162316231623162316231 QA 3 CURRENT_TIMESTAMP
+
+** Select * from Slave **
+SELECT c1,hex(c4),c5 FROM t18 ORDER BY c1;
+c1 hex(c4) c5
+1 62316231623162316231623162316231 Kyle
+2 62316231623162316231623162316231 JOE
+3 62316231623162316231623162316231 QA
+
+** update from master **
+UPDATE t18 SET c5 = 'TEST' WHERE c6 = 3;
+SELECT c1,hex(c4),c5,c6,c7 FROM t18 ORDER BY c1;
+c1 hex(c4) c5 c6 c7
+1 62316231623162316231623162316231 Kyle 1 CURRENT_TIMESTAMP
+2 62316231623162316231623162316231 JOE 2 CURRENT_TIMESTAMP
+3 62316231623162316231623162316231 TEST 3 CURRENT_TIMESTAMP
+
+** Check slave **
+SELECT c1,hex(c4),c5 FROM t18 ORDER BY c1;
+c1 hex(c4) c5
+1 62316231623162316231623162316231 Kyle
+2 62316231623162316231623162316231 JOE
+3 62316231623162316231623162316231 TEST
+DROP TABLE t18;
+
+
+*****************************************************
+* - Insert UUID column on Master not on slave *
+* Expect: Rows inserted *
+*****************************************************
+
+*** Create t5 on slave ***
+STOP SLAVE;
+RESET SLAVE;
+CREATE TABLE t5 (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
+) ENGINE='NDB';
+
+*** Create t5 on Master ***
+CREATE TABLE t5 (c1 INT KEY, c4 BLOB, c5 CHAR(5),
+c6 LONG,
+c7 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
+)ENGINE='NDB';
+RESET MASTER;
+
+*** Start Slave ***
+START SLAVE;
+
+*** Master Data Insert ***
+set @b1 = 'b1b1b1b1';
+INSERT INTO t5 () VALUES(1,@b1,'Kyle',UUID(),DEFAULT),
+(2,@b1,'JOE',UUID(),DEFAULT),
+(3,@b1,'QA',UUID(),DEFAULT);
+SELECT c1,hex(c4),c5,c6,c7 FROM t5 ORDER BY c1;
+c1 hex(c4) c5 c6 c7
+1 6231623162316231 Kyle UUID TIME
+2 6231623162316231 JOE UUID TIME
+3 6231623162316231 QA UUID TIME
+
+** Select * from Slave **
+SELECT c1,hex(c4),c5 FROM t5 ORDER BY c1;
+c1 hex(c4) c5
+1 6231623162316231 Kyle
+2 6231623162316231 JOE
+3 6231623162316231 QA
+DROP TABLE t5;
+
diff --git a/mysql-test/suite/rpl_ndb/r/rpl_ndb_stm_innodb.result b/mysql-test/suite/rpl_ndb/r/rpl_ndb_stm_innodb.result
index 426a09f945c..7008dc60d96 100644
--- a/mysql-test/suite/rpl_ndb/r/rpl_ndb_stm_innodb.result
+++ b/mysql-test/suite/rpl_ndb/r/rpl_ndb_stm_innodb.result
@@ -22,11 +22,11 @@ from mysql.ndb_apply_status;
show binlog events from <start_pos> limit 1;
Log_name Pos Event_type Server_id End_log_pos Info
-master-bin.000001 <start_pos> Query 1 # use `test`; insert into t1 values (1,2)
+master-bin.000001 <start_pos> Query 1 # use `test`; BEGIN
show binlog events from <start_pos> limit 1,1;
Log_name Pos Event_type Server_id End_log_pos Info
-master-bin.000001 # Xid 1 445 COMMIT /* XID */
+master-bin.000001 # Query 1 486 use `test`; insert into t1 values (1,2)
begin;
insert into t1 values (2,3);
diff --git a/mysql-test/suite/rpl_ndb/r/rpl_ndb_transaction.result b/mysql-test/suite/rpl_ndb/r/rpl_ndb_transaction.result
new file mode 100644
index 00000000000..bbd0a873dc8
--- /dev/null
+++ b/mysql-test/suite/rpl_ndb/r/rpl_ndb_transaction.result
@@ -0,0 +1,110 @@
+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;
+CREATE TABLE tmyisam (a int) ENGINE = MYISAM;
+CREATE TABLE tinnodb (a int) ENGINE = INNODB;
+CREATE TABLE tndb (a int) ENGINE = NDB;
+SHOW CREATE TABLE tmyisam;
+Table Create Table
+tmyisam CREATE TABLE `tmyisam` (
+ `a` int(11) DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+SHOW CREATE TABLE tinnodb;
+Table Create Table
+tinnodb CREATE TABLE `tinnodb` (
+ `a` int(11) DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SHOW CREATE TABLE tndb;
+Table Create Table
+tndb CREATE TABLE `tndb` (
+ `a` int(11) DEFAULT NULL
+) ENGINE=ndbcluster DEFAULT CHARSET=latin1
+==== Test 1: Non-XA Engines ====
+--- on master ---
+SET AUTOCOMMIT = 1;
+INSERT INTO tndb VALUES (1);
+INSERT INTO tmyisam VALUES (1);
+BEGIN;
+INSERT INTO tndb VALUES (2);
+INSERT INTO tndb VALUES (3);
+COMMIT;
+BEGIN;
+INSERT INTO tmyisam VALUES (2);
+INSERT INTO tmyisam VALUES (3);
+COMMIT;
+BEGIN;
+INSERT INTO tndb VALUES (4);
+INSERT INTO tmyisam VALUES (4);
+COMMIT;
+BEGIN;
+INSERT INTO tndb VALUES (5);
+INSERT INTO tndb VALUES (6);
+ROLLBACK;
+BEGIN;
+INSERT INTO tmyisam VALUES (5);
+INSERT INTO tmyisam VALUES (6);
+ROLLBACK;
+Warnings:
+Warning 1196 Some non-transactional changed tables couldn't be rolled back
+BEGIN;
+INSERT INTO tndb VALUES (7);
+INSERT INTO tmyisam VALUES (7);
+ROLLBACK;
+Warnings:
+Warning 1196 Some non-transactional changed tables couldn't be rolled back
+SELECT * FROM tndb ORDER BY a;
+a
+1
+2
+3
+4
+SELECT * FROM tmyisam ORDER BY a;
+a
+1
+2
+3
+4
+5
+6
+7
+--- on slave ---
+SELECT * FROM tndb ORDER BY a;
+a
+1
+2
+3
+4
+SELECT * FROM tmyisam ORDER BY a;
+a
+1
+2
+3
+4
+5
+6
+7
+==== Test 2: Master crash before writing XID event on XA engine ====
+--- on master ---
+INSERT INTO tinnodb VALUES (1);
+SELECT * FROM tinnodb ORDER BY a;
+a
+1
+--- on slave ---
+STOP SLAVE;
+SELECT "" AS Slave_IO_State;
+Slave_IO_State
+
+SELECT "" AS Last_SQL_Error;
+Last_SQL_Error
+
+SELECT "" AS Last_IO_Error;
+Last_IO_Error
+
+SELECT * FROM tinnodb ORDER BY a;
+a
+--- on master ---
+DROP TABLE tmyisam, tinnodb, tndb;
+DROP TABLE tmyisam, tinnodb, tndb;
diff --git a/mysql-test/suite/rpl_ndb/r/rpl_row_basic_7ndb.result b/mysql-test/suite/rpl_ndb/r/rpl_row_basic_7ndb.result
index 5519e0dcd0c..08232817e92 100644
--- a/mysql-test/suite/rpl_ndb/r/rpl_row_basic_7ndb.result
+++ b/mysql-test/suite/rpl_ndb/r/rpl_row_basic_7ndb.result
@@ -370,6 +370,7 @@ C1 C2
1 3
2 6
3 9
+set @@global.slave_exec_mode= 'IDEMPOTENT';
--- on master: new values inserted ---
INSERT INTO t7 VALUES (1,2), (2,4), (3,6);
SELECT * FROM t7 ORDER BY C1;
@@ -377,6 +378,7 @@ C1 C2
1 2
2 4
3 6
+set @@global.slave_exec_mode= default;
--- on slave: old values should be overwritten by replicated values ---
SELECT * FROM t7 ORDER BY C1;
C1 C2
@@ -389,9 +391,9 @@ INSERT INTO t8 VALUES (99,99,99);
INSERT INTO t8 VALUES (99,22,33);
ERROR 23000: Duplicate entry '99' for key 'PRIMARY'
INSERT INTO t8 VALUES (11,99,33);
-ERROR 23000: Duplicate entry '' for key '*UNKNOWN*'
+ERROR 23000: Duplicate entry '99' for key 'b'
INSERT INTO t8 VALUES (11,22,99);
-ERROR 23000: Duplicate entry '' for key '*UNKNOWN*'
+ERROR 23000: Duplicate entry '99' for key 'c'
SELECT * FROM t8 ORDER BY a;
a b c
99 99 99
@@ -406,8 +408,10 @@ a b c
2 4 6
3 6 9
99 99 99
+set @@global.slave_exec_mode= 'IDEMPOTENT';
--- on master ---
INSERT INTO t8 VALUES (2,4,8);
+set @@global.slave_exec_mode= default;
--- on slave ---
SELECT * FROM t8 ORDER BY a;
a b c
@@ -415,4 +419,25 @@ a b c
2 4 8
3 6 9
99 99 99
+**** Test for BUG#31552 ****
+**** On Master ****
+DELETE FROM t1;
+**** Resetting master and slave ****
+STOP SLAVE;
+RESET SLAVE;
+RESET MASTER;
+START SLAVE;
+**** On Master ****
+INSERT INTO t1 VALUES ('K','K'), ('L','L'), ('M','M');
+**** On Master ****
+set @@global.slave_exec_mode= 'IDEMPOTENT';
+DELETE FROM t1 WHERE C1 = 'L';
+DELETE FROM t1;
+SELECT COUNT(*) FROM t1 ORDER BY c1,c2;
+COUNT(*) 0
+set @@global.slave_exec_mode= default;
+Last_SQL_Error
+0
+SELECT COUNT(*) FROM t1 ORDER BY c1,c2;
+COUNT(*) 0
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7,t8;
diff --git a/mysql-test/suite/rpl_ndb/t/disabled.def b/mysql-test/suite/rpl_ndb/t/disabled.def
index f372d44cb90..0b0ce3df51b 100644
--- a/mysql-test/suite/rpl_ndb/t/disabled.def
+++ b/mysql-test/suite/rpl_ndb/t/disabled.def
@@ -11,16 +11,11 @@
##############################################################################
-rpl_ndb_2innodb : BUG#19227 2006-04-20 pekka pk delete apparently not replicated
-rpl_ndb_2myisam : BUG#19227 Seems to pass currently
-rpl_ndb_2other : BUG#21842 2007-08-30 tsmith test has never worked on bigendian (sol10-sparc-a, powermacg5
-rpl_ndb_dd_partitions : BUG#19259 2006-04-21 rpl_ndb_dd_partitions fails on s/AMD
-rpl_ndb_innodb2ndb : Bug#29549 rpl_ndb_myisam2ndb,rpl_ndb_innodb2ndb failed on Solaris for pack_length issue
-rpl_ndb_myisam2ndb : Bug#29549 rpl_ndb_myisam2ndb,rpl_ndb_innodb2ndb failed on Solaris for pack_length issue
-rpl_ndb_ddl : BUG#28798 2007-05-31 lars Valgrind failure in NDB
-rpl_ndb_mix_innodb : BUG#28123 rpl_ndb_mix_innodb.test casue slave to core on sol10-sparc-a
-rpl_ndb_ctype_ucs2_def : BUG#27404 util thd mysql_parse sig11 when mysqld default multibyte charset
-
+rpl_ndb_2innodb : Bug #32648 Test failure between NDB Cluster and other engines
+rpl_ndb_2myisam : Bug #32648 Test failure between NDB Cluster and other engines
+rpl_ndb_2other : Bug #32648 Test failure between NDB Cluster and other engines
+rpl_ndb_extraColMaster : BUG#30854 : Tables name show as binary in slave err msg on vm-win2003-64-b and Solaris
+rpl_ndb_mix_innodb : Bug #32720 Test rpl_ndb_mix_innodb fails on SPARC and PowerPC
# the below testcase have been reworked to avoid the bug, test contains comment, keep bug open
diff --git a/mysql-test/suite/rpl_ndb/t/rpl_ndb_charset.test b/mysql-test/suite/rpl_ndb/t/rpl_ndb_charset.test
index 4bac267443e..f14229a52f9 100644
--- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_charset.test
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_charset.test
@@ -1,8 +1,8 @@
########################################################
# By JBM 2005-02-15 Wrapped to allow reuse of test code#
########################################################
---source include/have_ndb.inc
--- source include/have_binlog_format_row.inc
+-- source include/have_ndb.inc
+-- source include/have_binlog_format_mixed_or_row.inc
-- source include/ndb_master-slave.inc
let $engine_type=NDB;
-- source extra/rpl_tests/rpl_row_charset.test
diff --git a/mysql-test/suite/rpl_ndb/t/rpl_ndb_extraColMaster.test b/mysql-test/suite/rpl_ndb/t/rpl_ndb_extraColMaster.test
new file mode 100644
index 00000000000..d78eda7eef1
--- /dev/null
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_extraColMaster.test
@@ -0,0 +1,14 @@
+#############################################################
+# Purpose: To test having extra columns on the master WL#3915
+#############################################################
+-- source include/have_ndb.inc
+-- source include/ndb_master-slave.inc
+-- source include/have_binlog_format_mixed_or_row.inc
+
+let $engine_type = 'NDB';
+
+set binlog_format=row;
+-- source extra/rpl_tests/rpl_extraMaster_Col.test
+
+set binlog_format=mixed;
+-- source extra/rpl_tests/rpl_extraMaster_Col.test
diff --git a/mysql-test/suite/rpl_ndb/t/rpl_ndb_transaction-master.opt b/mysql-test/suite/rpl_ndb/t/rpl_ndb_transaction-master.opt
new file mode 100644
index 00000000000..5411960b4aa
--- /dev/null
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_transaction-master.opt
@@ -0,0 +1 @@
+--innodb --debug=d,do_not_write_xid
diff --git a/mysql-test/suite/rpl_ndb/t/rpl_ndb_transaction-slave.opt b/mysql-test/suite/rpl_ndb/t/rpl_ndb_transaction-slave.opt
new file mode 100644
index 00000000000..627becdbfb5
--- /dev/null
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_transaction-slave.opt
@@ -0,0 +1 @@
+--innodb
diff --git a/mysql-test/suite/rpl_ndb/t/rpl_ndb_transaction.test b/mysql-test/suite/rpl_ndb/t/rpl_ndb_transaction.test
new file mode 100644
index 00000000000..3c7c15926a4
--- /dev/null
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_transaction.test
@@ -0,0 +1,131 @@
+# Tests that transactions are replicated correctly, with various
+# combinations of non-transactional and transactional non-XA tables.
+# Also tests that an XA transaction where the master crashes just
+# before writing the XID log event is executed correctly. See below
+# for implementation details.
+
+source include/ndb_master-slave.inc;
+source include/have_ndb.inc;
+source include/have_debug.inc;
+
+CREATE TABLE tmyisam (a int) ENGINE = MYISAM;
+CREATE TABLE tinnodb (a int) ENGINE = INNODB;
+CREATE TABLE tndb (a int) ENGINE = NDB;
+
+SHOW CREATE TABLE tmyisam;
+SHOW CREATE TABLE tinnodb;
+SHOW CREATE TABLE tndb;
+
+
+--echo ==== Test 1: Non-XA Engines ====
+# Test that everything works fine with non-XA engines. We just try
+# all ways to do transactions involving ndb and/or myisam, with
+# rollback or commit.
+
+--echo --- on master ---
+
+SET AUTOCOMMIT = 1;
+
+INSERT INTO tndb VALUES (1);
+INSERT INTO tmyisam VALUES (1);
+
+BEGIN;
+INSERT INTO tndb VALUES (2);
+INSERT INTO tndb VALUES (3);
+COMMIT;
+
+BEGIN;
+INSERT INTO tmyisam VALUES (2);
+INSERT INTO tmyisam VALUES (3);
+COMMIT;
+
+BEGIN;
+INSERT INTO tndb VALUES (4);
+INSERT INTO tmyisam VALUES (4);
+COMMIT;
+
+BEGIN;
+INSERT INTO tndb VALUES (5);
+INSERT INTO tndb VALUES (6);
+ROLLBACK;
+
+BEGIN;
+INSERT INTO tmyisam VALUES (5);
+INSERT INTO tmyisam VALUES (6);
+--warning 1196
+ROLLBACK;
+
+BEGIN;
+INSERT INTO tndb VALUES (7);
+INSERT INTO tmyisam VALUES (7);
+--warning 1196
+ROLLBACK;
+
+SELECT * FROM tndb ORDER BY a;
+SELECT * FROM tmyisam ORDER BY a;
+
+--echo --- on slave ---
+--sync_slave_with_master
+SELECT * FROM tndb ORDER BY a;
+SELECT * FROM tmyisam ORDER BY a;
+
+
+--echo ==== Test 2: Master crash before writing XID event on XA engine ====
+# We now want to test the following scenario, to verify that BUG#26395
+# has been fixed:
+
+# "master and slave have a transactional table that uses XA. Master
+# has AUTOCOMMIT on and executes a statement (in this case an
+# INSERT). Master crashes just before writing the XID event."
+
+# In this scenario, master will roll back, so slave should not execute
+# the statement, and slave should roll back later when master is
+# restarted.
+
+# However, we want the master to be alive so that we are sure it
+# replicates the statement to the slave. So in the test case, we must
+# therefore not crash the master. Instead, we fake the crash by just
+# not writing the XID event to the binlog. This is done by the
+# --debug=d,do_not_write_xid flag in the .opt file.
+
+# So, unlike if the master had crashed, the master *will* execute the
+# statement. But the slave should not execute it. Hence, after the
+# first test is executed, the expected result on master is a table
+# with one row, and on slave a table with no rows.
+
+# To simulate the slave correctly, we wait until everything up to the
+# XID is replicated. We cannot sync_slave_with_master, because that
+# would wait for the transaction to end. Instead, we wait for
+# "sufficiently long time". Then we stop the slave.
+
+# Note: since this puts the master binlog in an inconsistent state,
+# this should be the last test of the file.
+
+--echo --- on master ---
+--connection master
+
+INSERT INTO tinnodb VALUES (1);
+SELECT * FROM tinnodb ORDER BY a;
+
+--echo --- on slave ---
+--connection slave
+--sleep 3
+STOP SLAVE;
+source include/wait_for_slave_to_stop.inc;
+let $tmp= query_get_value("SHOW SLAVE STATUS", Slave_IO_State, 1);
+eval SELECT "$tmp" AS Slave_IO_State;
+let $tmp= query_get_value("SHOW SLAVE STATUS", Last_SQL_Error, 1);
+eval SELECT "$tmp" AS Last_SQL_Error;
+let $tmp= query_get_value("SHOW SLAVE STATUS", Last_IO_Error, 1);
+eval SELECT "$tmp" AS Last_IO_Error;
+SELECT * FROM tinnodb ORDER BY a;
+
+# Clean up. We cannot do it on master and replicate over, because
+# master binlog is in a bad state after last test. So we do it both on
+# master and on slave.
+--echo --- on master ---
+connection master;
+DROP TABLE tmyisam, tinnodb, tndb;
+
+connection slave;
+DROP TABLE tmyisam, tinnodb, tndb;
diff --git a/mysql-test/suite/stress/include/ddl3.inc b/mysql-test/suite/stress/include/ddl3.inc
index aacf09f9428..d41c8506be4 100644
--- a/mysql-test/suite/stress/include/ddl3.inc
+++ b/mysql-test/suite/stress/include/ddl3.inc
@@ -24,7 +24,7 @@
#----------------------------------------------------------------------
# Settings for Subtest 3 variants
# Scenario: CREATE TABLE/CREATE TABLE(F)/DROP TABLE/DROP TABLE(F)
-let $create_table= CREATE TABLE t1 (f1 BIGINT) ENGINE=$engine_type;
+let $create_table= CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=$engine_type;
let $drop_table= DROP TABLE t1;
#----------------------------------------------------------------------
diff --git a/mysql-test/suite/stress/r/ddl_archive.result b/mysql-test/suite/stress/r/ddl_archive.result
index 47c64a6af94..457fc30b9f9 100644
--- a/mysql-test/suite/stress/r/ddl_archive.result
+++ b/mysql-test/suite/stress/r/ddl_archive.result
@@ -29,26 +29,26 @@ DROP TABLE IF EXISTS t1;
# con2: SELECT COUNT(*) <> 1 FROM t1 WHERE f1 = 1 (expect to get ER_NO_SUCH_TABLE)
# Subtest 3A (one connection, no PREPARE/EXECUTE)
# connection action
-# default: CREATE TABLE t1 (f1 BIGINT) ENGINE=ARCHIVE
-# default: CREATE TABLE t1 (f1 BIGINT) ENGINE=ARCHIVE (expect to get ER_TABLE_EXISTS_ERROR)
+# default: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=ARCHIVE
+# default: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=ARCHIVE (expect to get ER_TABLE_EXISTS_ERROR)
# default: DROP TABLE t1
# default: DROP TABLE t1 (expect to get ER_BAD_TABLE_ERROR)
# Subtest 3B (one connection, use PREPARE/EXECUTE)
# connection action
-# default: CREATE TABLE t1 (f1 BIGINT) ENGINE=ARCHIVE
-# default: CREATE TABLE t1 (f1 BIGINT) ENGINE=ARCHIVE (expect to get ER_TABLE_EXISTS_ERROR)
+# default: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=ARCHIVE
+# default: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=ARCHIVE (expect to get ER_TABLE_EXISTS_ERROR)
# default: DROP TABLE t1
# default: DROP TABLE t1 (expect to get ER_BAD_TABLE_ERROR)
# Subtest 3C (two connections, no PREPARE/EXECUTE)
# connection action
-# default: CREATE TABLE t1 (f1 BIGINT) ENGINE=ARCHIVE
-# con2: CREATE TABLE t1 (f1 BIGINT) ENGINE=ARCHIVE (expect to get ER_TABLE_EXISTS_ERROR)
+# default: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=ARCHIVE
+# con2: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=ARCHIVE (expect to get ER_TABLE_EXISTS_ERROR)
# default: DROP TABLE t1
# con2: DROP TABLE t1 (expect to get ER_BAD_TABLE_ERROR)
# Subtest 3D (two connections, use PREPARE/EXECUTE)
# connection action
-# default: CREATE TABLE t1 (f1 BIGINT) ENGINE=ARCHIVE
-# con2: CREATE TABLE t1 (f1 BIGINT) ENGINE=ARCHIVE (expect to get ER_TABLE_EXISTS_ERROR)
+# default: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=ARCHIVE
+# con2: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=ARCHIVE (expect to get ER_TABLE_EXISTS_ERROR)
# default: DROP TABLE t1
# con2: DROP TABLE t1 (expect to get ER_BAD_TABLE_ERROR)
# Subtest 5A (one connection, no PREPARE/EXECUTE)
diff --git a/mysql-test/suite/stress/r/ddl_csv.result b/mysql-test/suite/stress/r/ddl_csv.result
index 3dfa0c8fd15..2346638360b 100644
--- a/mysql-test/suite/stress/r/ddl_csv.result
+++ b/mysql-test/suite/stress/r/ddl_csv.result
@@ -29,26 +29,26 @@ DROP TABLE IF EXISTS t1;
# con2: SELECT COUNT(*) <> 1 FROM t1 WHERE f1 = 1 (expect to get ER_NO_SUCH_TABLE)
# Subtest 3A (one connection, no PREPARE/EXECUTE)
# connection action
-# default: CREATE TABLE t1 (f1 BIGINT) ENGINE=CSV
-# default: CREATE TABLE t1 (f1 BIGINT) ENGINE=CSV (expect to get ER_TABLE_EXISTS_ERROR)
+# default: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=CSV
+# default: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=CSV (expect to get ER_TABLE_EXISTS_ERROR)
# default: DROP TABLE t1
# default: DROP TABLE t1 (expect to get ER_BAD_TABLE_ERROR)
# Subtest 3B (one connection, use PREPARE/EXECUTE)
# connection action
-# default: CREATE TABLE t1 (f1 BIGINT) ENGINE=CSV
-# default: CREATE TABLE t1 (f1 BIGINT) ENGINE=CSV (expect to get ER_TABLE_EXISTS_ERROR)
+# default: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=CSV
+# default: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=CSV (expect to get ER_TABLE_EXISTS_ERROR)
# default: DROP TABLE t1
# default: DROP TABLE t1 (expect to get ER_BAD_TABLE_ERROR)
# Subtest 3C (two connections, no PREPARE/EXECUTE)
# connection action
-# default: CREATE TABLE t1 (f1 BIGINT) ENGINE=CSV
-# con2: CREATE TABLE t1 (f1 BIGINT) ENGINE=CSV (expect to get ER_TABLE_EXISTS_ERROR)
+# default: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=CSV
+# con2: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=CSV (expect to get ER_TABLE_EXISTS_ERROR)
# default: DROP TABLE t1
# con2: DROP TABLE t1 (expect to get ER_BAD_TABLE_ERROR)
# Subtest 3D (two connections, use PREPARE/EXECUTE)
# connection action
-# default: CREATE TABLE t1 (f1 BIGINT) ENGINE=CSV
-# con2: CREATE TABLE t1 (f1 BIGINT) ENGINE=CSV (expect to get ER_TABLE_EXISTS_ERROR)
+# default: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=CSV
+# con2: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=CSV (expect to get ER_TABLE_EXISTS_ERROR)
# default: DROP TABLE t1
# con2: DROP TABLE t1 (expect to get ER_BAD_TABLE_ERROR)
DEALLOCATE PREPARE stmt_start;
diff --git a/mysql-test/suite/stress/r/ddl_innodb.result b/mysql-test/suite/stress/r/ddl_innodb.result
index 6417d3e1c5c..911aed2622a 100644
--- a/mysql-test/suite/stress/r/ddl_innodb.result
+++ b/mysql-test/suite/stress/r/ddl_innodb.result
@@ -53,26 +53,26 @@ ENGINE = InnoDB
# con2: SELECT COUNT(*) <> 1 FROM t1 WHERE f1 = 1 (expect to get ER_NO_SUCH_TABLE)
# Subtest 3A (one connection, no PREPARE/EXECUTE)
# connection action
-# default: CREATE TABLE t1 (f1 BIGINT) ENGINE=InnoDB
-# default: CREATE TABLE t1 (f1 BIGINT) ENGINE=InnoDB (expect to get ER_TABLE_EXISTS_ERROR)
+# default: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=InnoDB
+# default: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=InnoDB (expect to get ER_TABLE_EXISTS_ERROR)
# default: DROP TABLE t1
# default: DROP TABLE t1 (expect to get ER_BAD_TABLE_ERROR)
# Subtest 3B (one connection, use PREPARE/EXECUTE)
# connection action
-# default: CREATE TABLE t1 (f1 BIGINT) ENGINE=InnoDB
-# default: CREATE TABLE t1 (f1 BIGINT) ENGINE=InnoDB (expect to get ER_TABLE_EXISTS_ERROR)
+# default: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=InnoDB
+# default: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=InnoDB (expect to get ER_TABLE_EXISTS_ERROR)
# default: DROP TABLE t1
# default: DROP TABLE t1 (expect to get ER_BAD_TABLE_ERROR)
# Subtest 3C (two connections, no PREPARE/EXECUTE)
# connection action
-# default: CREATE TABLE t1 (f1 BIGINT) ENGINE=InnoDB
-# con2: CREATE TABLE t1 (f1 BIGINT) ENGINE=InnoDB (expect to get ER_TABLE_EXISTS_ERROR)
+# default: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=InnoDB
+# con2: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=InnoDB (expect to get ER_TABLE_EXISTS_ERROR)
# default: DROP TABLE t1
# con2: DROP TABLE t1 (expect to get ER_BAD_TABLE_ERROR)
# Subtest 3D (two connections, use PREPARE/EXECUTE)
# connection action
-# default: CREATE TABLE t1 (f1 BIGINT) ENGINE=InnoDB
-# con2: CREATE TABLE t1 (f1 BIGINT) ENGINE=InnoDB (expect to get ER_TABLE_EXISTS_ERROR)
+# default: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=InnoDB
+# con2: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=InnoDB (expect to get ER_TABLE_EXISTS_ERROR)
# default: DROP TABLE t1
# con2: DROP TABLE t1 (expect to get ER_BAD_TABLE_ERROR)
CREATE TABLE t1 (f1 BIGINT, f2 BIGINT, UNIQUE(f1), UNIQUE (f2)) ENGINE=InnoDB;
diff --git a/mysql-test/suite/stress/r/ddl_memory.result b/mysql-test/suite/stress/r/ddl_memory.result
index 1700fbc2745..7ad9f9a61c5 100644
--- a/mysql-test/suite/stress/r/ddl_memory.result
+++ b/mysql-test/suite/stress/r/ddl_memory.result
@@ -53,26 +53,26 @@ ENGINE = MEMORY
# con2: SELECT COUNT(*) <> 1 FROM t1 WHERE f1 = 1 (expect to get ER_NO_SUCH_TABLE)
# Subtest 3A (one connection, no PREPARE/EXECUTE)
# connection action
-# default: CREATE TABLE t1 (f1 BIGINT) ENGINE=MEMORY
-# default: CREATE TABLE t1 (f1 BIGINT) ENGINE=MEMORY (expect to get ER_TABLE_EXISTS_ERROR)
+# default: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=MEMORY
+# default: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=MEMORY (expect to get ER_TABLE_EXISTS_ERROR)
# default: DROP TABLE t1
# default: DROP TABLE t1 (expect to get ER_BAD_TABLE_ERROR)
# Subtest 3B (one connection, use PREPARE/EXECUTE)
# connection action
-# default: CREATE TABLE t1 (f1 BIGINT) ENGINE=MEMORY
-# default: CREATE TABLE t1 (f1 BIGINT) ENGINE=MEMORY (expect to get ER_TABLE_EXISTS_ERROR)
+# default: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=MEMORY
+# default: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=MEMORY (expect to get ER_TABLE_EXISTS_ERROR)
# default: DROP TABLE t1
# default: DROP TABLE t1 (expect to get ER_BAD_TABLE_ERROR)
# Subtest 3C (two connections, no PREPARE/EXECUTE)
# connection action
-# default: CREATE TABLE t1 (f1 BIGINT) ENGINE=MEMORY
-# con2: CREATE TABLE t1 (f1 BIGINT) ENGINE=MEMORY (expect to get ER_TABLE_EXISTS_ERROR)
+# default: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=MEMORY
+# con2: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=MEMORY (expect to get ER_TABLE_EXISTS_ERROR)
# default: DROP TABLE t1
# con2: DROP TABLE t1 (expect to get ER_BAD_TABLE_ERROR)
# Subtest 3D (two connections, use PREPARE/EXECUTE)
# connection action
-# default: CREATE TABLE t1 (f1 BIGINT) ENGINE=MEMORY
-# con2: CREATE TABLE t1 (f1 BIGINT) ENGINE=MEMORY (expect to get ER_TABLE_EXISTS_ERROR)
+# default: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=MEMORY
+# con2: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=MEMORY (expect to get ER_TABLE_EXISTS_ERROR)
# default: DROP TABLE t1
# con2: DROP TABLE t1 (expect to get ER_BAD_TABLE_ERROR)
CREATE TABLE t1 (f1 BIGINT, f2 BIGINT, UNIQUE(f1), UNIQUE (f2)) ENGINE=MEMORY;
diff --git a/mysql-test/suite/stress/r/ddl_myisam.result b/mysql-test/suite/stress/r/ddl_myisam.result
index 82be55b8371..808b22dc859 100644
--- a/mysql-test/suite/stress/r/ddl_myisam.result
+++ b/mysql-test/suite/stress/r/ddl_myisam.result
@@ -53,26 +53,26 @@ ENGINE = MyISAM
# con2: SELECT COUNT(*) <> 1 FROM t1 WHERE f1 = 1 (expect to get ER_NO_SUCH_TABLE)
# Subtest 3A (one connection, no PREPARE/EXECUTE)
# connection action
-# default: CREATE TABLE t1 (f1 BIGINT) ENGINE=MyISAM
-# default: CREATE TABLE t1 (f1 BIGINT) ENGINE=MyISAM (expect to get ER_TABLE_EXISTS_ERROR)
+# default: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=MyISAM
+# default: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=MyISAM (expect to get ER_TABLE_EXISTS_ERROR)
# default: DROP TABLE t1
# default: DROP TABLE t1 (expect to get ER_BAD_TABLE_ERROR)
# Subtest 3B (one connection, use PREPARE/EXECUTE)
# connection action
-# default: CREATE TABLE t1 (f1 BIGINT) ENGINE=MyISAM
-# default: CREATE TABLE t1 (f1 BIGINT) ENGINE=MyISAM (expect to get ER_TABLE_EXISTS_ERROR)
+# default: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=MyISAM
+# default: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=MyISAM (expect to get ER_TABLE_EXISTS_ERROR)
# default: DROP TABLE t1
# default: DROP TABLE t1 (expect to get ER_BAD_TABLE_ERROR)
# Subtest 3C (two connections, no PREPARE/EXECUTE)
# connection action
-# default: CREATE TABLE t1 (f1 BIGINT) ENGINE=MyISAM
-# con2: CREATE TABLE t1 (f1 BIGINT) ENGINE=MyISAM (expect to get ER_TABLE_EXISTS_ERROR)
+# default: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=MyISAM
+# con2: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=MyISAM (expect to get ER_TABLE_EXISTS_ERROR)
# default: DROP TABLE t1
# con2: DROP TABLE t1 (expect to get ER_BAD_TABLE_ERROR)
# Subtest 3D (two connections, use PREPARE/EXECUTE)
# connection action
-# default: CREATE TABLE t1 (f1 BIGINT) ENGINE=MyISAM
-# con2: CREATE TABLE t1 (f1 BIGINT) ENGINE=MyISAM (expect to get ER_TABLE_EXISTS_ERROR)
+# default: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=MyISAM
+# con2: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=MyISAM (expect to get ER_TABLE_EXISTS_ERROR)
# default: DROP TABLE t1
# con2: DROP TABLE t1 (expect to get ER_BAD_TABLE_ERROR)
CREATE TABLE t1 (f1 BIGINT, f2 BIGINT, UNIQUE(f1), UNIQUE (f2)) ENGINE=MyISAM;
diff --git a/mysql-test/suite/stress/r/ddl_ndb.result b/mysql-test/suite/stress/r/ddl_ndb.result
index 39146e65fb0..05c29456f7c 100644
--- a/mysql-test/suite/stress/r/ddl_ndb.result
+++ b/mysql-test/suite/stress/r/ddl_ndb.result
@@ -53,26 +53,26 @@ ENGINE = NDB
# con2: SELECT COUNT(*) <> 1 FROM t1 WHERE f1 = 1 (expect to get ER_NO_SUCH_TABLE)
# Subtest 3A (one connection, no PREPARE/EXECUTE)
# connection action
-# default: CREATE TABLE t1 (f1 BIGINT) ENGINE=NDB
-# default: CREATE TABLE t1 (f1 BIGINT) ENGINE=NDB (expect to get ER_TABLE_EXISTS_ERROR)
+# default: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=NDB
+# default: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=NDB (expect to get ER_TABLE_EXISTS_ERROR)
# default: DROP TABLE t1
# default: DROP TABLE t1 (expect to get ER_BAD_TABLE_ERROR)
# Subtest 3B (one connection, use PREPARE/EXECUTE)
# connection action
-# default: CREATE TABLE t1 (f1 BIGINT) ENGINE=NDB
-# default: CREATE TABLE t1 (f1 BIGINT) ENGINE=NDB (expect to get ER_TABLE_EXISTS_ERROR)
+# default: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=NDB
+# default: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=NDB (expect to get ER_TABLE_EXISTS_ERROR)
# default: DROP TABLE t1
# default: DROP TABLE t1 (expect to get ER_BAD_TABLE_ERROR)
# Subtest 3C (two connections, no PREPARE/EXECUTE)
# connection action
-# default: CREATE TABLE t1 (f1 BIGINT) ENGINE=NDB
-# con2: CREATE TABLE t1 (f1 BIGINT) ENGINE=NDB (expect to get ER_TABLE_EXISTS_ERROR)
+# default: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=NDB
+# con2: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=NDB (expect to get ER_TABLE_EXISTS_ERROR)
# default: DROP TABLE t1
# con2: DROP TABLE t1 (expect to get ER_BAD_TABLE_ERROR)
# Subtest 3D (two connections, use PREPARE/EXECUTE)
# connection action
-# default: CREATE TABLE t1 (f1 BIGINT) ENGINE=NDB
-# con2: CREATE TABLE t1 (f1 BIGINT) ENGINE=NDB (expect to get ER_TABLE_EXISTS_ERROR)
+# default: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=NDB
+# con2: CREATE TABLE t1 (f1 BIGINT NOT NULL) ENGINE=NDB (expect to get ER_TABLE_EXISTS_ERROR)
# default: DROP TABLE t1
# con2: DROP TABLE t1 (expect to get ER_BAD_TABLE_ERROR)
CREATE TABLE t1 (f1 BIGINT, f2 BIGINT, UNIQUE(f1), UNIQUE (f2)) ENGINE=NDB;
diff --git a/mysql-test/t/almost_full.test b/mysql-test/t/almost_full.test
new file mode 100644
index 00000000000..5c67ab3c088
--- /dev/null
+++ b/mysql-test/t/almost_full.test
@@ -0,0 +1,41 @@
+#
+# Some special cases with empty tables
+#
+
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+
+set global myisam_data_pointer_size=2;
+CREATE TABLE t1 (a int auto_increment primary key not null, b longtext) ENGINE=MyISAM;
+
+--disable_query_log
+let $1= 303;
+while ($1)
+{
+ INSERT INTO t1 SET b=repeat('a',200);
+ dec $1;
+}
+--enable_query_log
+
+DELETE FROM t1 WHERE a=1 or a=5;
+
+--error 1114
+INSERT INTO t1 SET b=repeat('a',600);
+CHECK TABLE t1 EXTENDED;
+
+--error 1114
+UPDATE t1 SET b=repeat('a', 800) where a=10;
+CHECK TABLE t1 EXTENDED;
+
+INSERT INTO t1 SET b=repeat('a',400);
+CHECK TABLE t1 EXTENDED;
+
+DELETE FROM t1 WHERE a=2 or a=6;
+UPDATE t1 SET b=repeat('a', 600) where a=11;
+CHECK TABLE t1 EXTENDED;
+drop table t1;
+
+set global myisam_data_pointer_size=default;
+
+# End of 4.1 tests
diff --git a/mysql-test/t/analyze.test b/mysql-test/t/analyze.test
index 7c9830bb468..0903db1eca4 100644
--- a/mysql-test/t/analyze.test
+++ b/mysql-test/t/analyze.test
@@ -72,4 +72,16 @@ analyze table t1;
show index from t1;
drop table t1;
-# End of 4.1 tests
+--echo End of 4.1 tests
+
+#
+# Bug #30495: optimize table t1,t2,t3 extended errors
+#
+create table t1(a int);
+--error 1064
+analyze table t1 extended;
+--error 1064
+optimize table t1 extended;
+drop table t1;
+
+--echo End of 5.0 tests
diff --git a/mysql-test/t/archive.test b/mysql-test/t/archive.test
index e0a2e877af5..b42c8446a32 100644
--- a/mysql-test/t/archive.test
+++ b/mysql-test/t/archive.test
@@ -1320,7 +1320,7 @@ SELECT * FROM t2;
INSERT INTO t2 VALUES (2,011401,37,'breaking','dreaded','Steinberg','W');
INSERT INTO t2 VALUES (3,011402,37,'Romans','scholastics','jarring','');
INSERT INTO t2 VALUES (4,011403,37,'intercepted','audiology','tinily','');
-OPTIMIZE TABLE t2 EXTENDED;
+OPTIMIZE TABLE t2;
SELECT * FROM t2;
REPAIR TABLE t2;
SELECT * FROM t2;
@@ -1567,3 +1567,34 @@ insert into t1 set a='';
insert into t1 set a='a';
check table t1 extended;
drop table t1;
+
+#
+# BUG#31036 - Using order by with archive table crashes server
+#
+
+CREATE TABLE t1(a VARCHAR(510)) ENGINE = ARCHIVE;
+
+let $bug31036=41;
+--disable_query_log
+while($bug31036)
+{
+ INSERT INTO t1(a) VALUES (REPEAT('a', 510));
+ dec $bug31036;
+}
+--enable_query_log
+INSERT INTO t1(a) VALUES ('');
+
+--disable_result_log
+SELECT * FROM t1 ORDER BY a;
+--enable_result_log
+
+DROP TABLE t1;
+
+#
+# BUG#31833 - ORDER BY leads to wrong result when ARCHIVE, BLOB and table
+# cache is full
+#
+CREATE TABLE t1(a INT NOT NULL AUTO_INCREMENT, b BLOB, KEY(a)) ENGINE=archive;
+INSERT INTO t1 VALUES (NULL, NULL),(NULL, NULL);
+FLUSH TABLE t1;
+SELECT * FROM t1 ORDER BY a;
diff --git a/mysql-test/t/auto_increment.test b/mysql-test/t/auto_increment.test
index 99e9b783d55..ff92c743960 100644
--- a/mysql-test/t/auto_increment.test
+++ b/mysql-test/t/auto_increment.test
@@ -149,6 +149,7 @@ delete from t1 where a=0;
update t1 set a=0 where b=5;
select * from t1 order by b;
delete from t1 where a=0;
+--error 1048
update t1 set a=NULL where b=6;
update t1 set a=300 where b=7;
SET SQL_MODE='';
@@ -164,6 +165,7 @@ delete from t1 where a=0;
update t1 set a=0 where b=12;
select * from t1 order by b;
delete from t1 where a=0;
+--error 1048
update t1 set a=NULL where b=13;
update t1 set a=500 where b=14;
select * from t1 order by b;
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/bigint.test b/mysql-test/t/bigint.test
index da10f4efa61..5a589816dcd 100644
--- a/mysql-test/t/bigint.test
+++ b/mysql-test/t/bigint.test
@@ -113,6 +113,15 @@ t2.value64=t1.value64;
drop table t1, t2;
+# Test for BUG#30069, can't handle bigint -9223372036854775808 on
+# x86_64, with some GCC versions and optimizations.
+
+create table t1 (sint64 bigint not null);
+insert into t1 values (-9223372036854775808);
+select * from t1;
+
+drop table t1;
+
# End of 4.1 tests
#
diff --git a/mysql-test/t/case.test b/mysql-test/t/case.test
index 63baeebcf12..028c64d6de7 100644
--- a/mysql-test/t/case.test
+++ b/mysql-test/t/case.test
@@ -1,9 +1,9 @@
-#
+
# Testing of CASE
#
--disable_warnings
-drop table if exists t1,t2;
+drop table if exists t1, t2;
--enable_warnings
select CASE "b" when "a" then 1 when "b" then 2 END;
@@ -152,4 +152,21 @@ SELECT IFNULL(t2.EMPNUM,t1.EMPNUM) AS CEMPNUM,
FROM t1 LEFT JOIN t2 ON t1.EMPNUM=t2.EMPNUM;
DROP TABLE t1,t2;
-# End of 4.1 tests
+
+--echo End of 4.1 tests
+
+#
+# #30782: Truncated UNSIGNED BIGINT columns
+#
+create table t1 (a int, b bigint unsigned);
+create table t2 (c int);
+insert into t1 (a, b) values (1,4572794622775114594), (2,18196094287899841997),
+ (3,11120436154190595086);
+insert into t2 (c) values (1), (2), (3);
+select t1.a, (case t1.a when 0 then 0 else t1.b end) d from t1
+ join t2 on t1.a=t2.c order by d;
+select t1.a, (case t1.a when 0 then 0 else t1.b end) d from t1
+ join t2 on t1.a=t2.c where b=11120436154190595086 order by d;
+drop table t1, t2;
+
+--echo End of 5.0 tests
diff --git a/mysql-test/t/cast.test b/mysql-test/t/cast.test
index 5563e260a06..50865215944 100644
--- a/mysql-test/t/cast.test
+++ b/mysql-test/t/cast.test
@@ -246,4 +246,26 @@ INSERT INTO t1(d1) VALUES ('2007-07-19 08:30:00'), (NULL),
SELECT cast(date(d1) as signed) FROM t1;
drop table t1;
+#
+# Bug #31990: MINUTE() and SECOND() return bogus results when used on a DATE
+#
+
+# Show that HH:MM:SS of a DATE are 0, and that it's the same for columns
+# and typecasts (NULL in, NULL out).
+CREATE TABLE t1 (f1 DATE);
+INSERT INTO t1 VALUES ('2007-07-19'), (NULL);
+SELECT HOUR(f1),
+ MINUTE(f1),
+ SECOND(f1) FROM t1;
+SELECT HOUR(CAST('2007-07-19' AS DATE)),
+ MINUTE(CAST('2007-07-19' AS DATE)),
+ SECOND(CAST('2007-07-19' AS DATE));
+SELECT HOUR(CAST(NULL AS DATE)),
+ MINUTE(CAST(NULL AS DATE)),
+ SECOND(CAST(NULL AS DATE));
+SELECT HOUR(NULL),
+ MINUTE(NULL),
+ SECOND(NULL);
+DROP TABLE t1;
+
--echo End of 5.0 tests
diff --git a/mysql-test/t/create.test b/mysql-test/t/create.test
index 05ca9dca26d..dff6bf3fcff 100644
--- a/mysql-test/t/create.test
+++ b/mysql-test/t/create.test
@@ -483,7 +483,7 @@ drop table t1,t2;
create table t1 (a int);
--error 1093
create table t1 select * from t1;
---error 1093
+--error ER_WRONG_OBJECT
create table t2 union = (t1) select * from t1;
flush tables with read lock;
unlock tables;
@@ -658,82 +658,6 @@ drop table t1, t2;
--error 1367
create table t1(a set("a,b","c,d") not null);
-#
-# Bug #20901 - CREATE privilege is enough to insert into a table
-#
-
-create database mysqltest;
-use mysqltest;
-
-grant create on mysqltest.* to mysqltest@localhost;
-create table t1 (i INT);
-
-connect (user1,localhost,mysqltest,,mysqltest);
-connection user1;
-# show we don't have INSERT
---error 1142
-insert into t1 values (1);
-# show we have CREATE
-create table t2 (i INT);
-create table t4 (i INT);
-
-connection default;
-grant select, insert on mysqltest.t2 to mysqltest@localhost;
-grant insert on mysqltest.t4 to mysqltest@localhost;
-# to specify ACLs for non-existent objects, must explictly |CREATE
-grant create, insert on mysqltest.t5 to mysqltest@localhost;
-grant create, insert on mysqltest.t6 to mysqltest@localhost;
-flush privileges;
-
-connection user1;
-insert into t2 values (1);
-
-
-# CREATE IF NOT EXISTS...SELECT, t1 exists, no INSERT, must fail
---error 1142
-create table if not exists t1 select * from t2;
-
-# CREATE IF NOT EXISTS...SELECT, no t3 yet, no INSERT, must fail
---error 1142
-create table if not exists t3 select * from t2;
-
-# CREATE IF NOT EXISTS...SELECT, t4 exists, have INSERT, must succeed
-create table if not exists t4 select * from t2;
-
-# CREATE IF NOT EXISTS...SELECT, no t5 yet, have INSERT, must succeed
-create table if not exists t5 select * from t2;
-
-
-# CREATE...SELECT, no t6 yet, have INSERT, must succeed
-create table t6 select * from t2;
-
-# CREATE...SELECT, no t7 yet, no INSERT, must fail
---error 1142
-create table t7 select * from t2;
-
-# CREATE...SELECT, t4 exists, have INSERT, must still fail (exists)
---error 1050
-create table t4 select * from t2;
-
-# CREATE...SELECT, t1 exists, no INSERT, must fail
---error 1142
-create table t1 select * from t2;
-
-
-connection default;
-drop table t1,t2,t4,t5,t6;
-
-revoke create on mysqltest.* from mysqltest@localhost;
-revoke select, insert on mysqltest.t2 from mysqltest@localhost;
-revoke insert on mysqltest.t4 from mysqltest@localhost;
-revoke create, insert on mysqltest.t5 from mysqltest@localhost;
-revoke create, insert on mysqltest.t6 from mysqltest@localhost;
-flush privileges;
-
-disconnect user1;
-drop database mysqltest;
-use test;
-
# End of 4.1 tests
@@ -1404,4 +1328,17 @@ create table t2 as select f1() from t1;
drop table t1,t2;
drop function f1;
+#
+# Bug#25629 CREATE TABLE LIKE does not work with INFORMATION_SCHEMA
+#
+create table t1 like information_schema.processlist;
+show create table t1;
+drop table t1;
+create temporary table t1 like information_schema.processlist;
+show create table t1;
+drop table t1;
+create table t1 like information_schema.character_sets;
+show create table t1;
+drop table t1;
+
--echo End of 5.1 tests
diff --git a/mysql-test/t/csv.test b/mysql-test/t/csv.test
index 6c83fbfdc9c..7b4f95bbf8a 100644
--- a/mysql-test/t/csv.test
+++ b/mysql-test/t/csv.test
@@ -1755,9 +1755,9 @@ insert into t1 values();
select BIN(a) from t1;
drop table t1;
# We prevent creation of table with nullable ENUM
---error ER_CANT_CREATE_TABLE
+--error ER_CHECK_NOT_IMPLEMENTED
create table t1(a enum('foo','bar') default null) engine=csv;
---error ER_CANT_CREATE_TABLE
+--error ER_CHECK_NOT_IMPLEMENTED
create table t1(a enum('foo','bar') default 'foo') engine=csv;
# Enum columns must be specified as NOT NULL
create table t1(a enum('foo','bar') default 'foo' not null) engine=csv;
@@ -1765,5 +1765,12 @@ insert into t1 values();
select * from t1;
drop table t1;
+#
+# BUG#32817 - though CSV is marked as supported create table is rejected
+# with error 1005.
+#
+--error ER_CHECK_NOT_IMPLEMENTED
+CREATE TABLE t1(a INT) ENGINE=CSV;
+SHOW WARNINGS;
--echo End of 5.1 tests
diff --git a/mysql-test/t/csv_alter_table.test b/mysql-test/t/csv_alter_table.test
new file mode 100644
index 00000000000..0093a1d10a7
--- /dev/null
+++ b/mysql-test/t/csv_alter_table.test
@@ -0,0 +1,56 @@
+#-----------------------------------------------------------------------------
+# csv_alter_table.test - .test file for MySQL regression suite
+# Purpose: To test the behavior of the CSV engine
+# Bug#31473 resulted in strict enforcement of non-nullable
+# columns in CSV engine.
+# Tests code for Bug#33696 - CSV engine allows NULLable
+# Columns via ALTER TABLE statements
+#
+# Author pcrews
+# Last modified: 2008-01-06
+#-----------------------------------------------------------------------------
+
+--source include/have_csv.inc
+
+#############################################################################
+# Testcase csv_alter_table.1: Positive test for ALTER table
+#
+#############################################################################
+-- echo # ===== csv_alter_table.1 =====
+-- disable_warnings
+DROP TABLE IF EXISTS t1;
+-- enable_warnings
+
+CREATE TABLE t1 (a int NOT NULL) ENGINE = CSV;
+ALTER TABLE t1 ADD COLUMN b CHAR(5) NOT NULL;
+DESC t1;
+ALTER TABLE t1 DROP COLUMN b;
+DESC t1;
+ALTER TABLE t1 MODIFY a BIGINT NOT NULL;
+DESC t1;
+ALTER TABLE t1 CHANGE a a INT NOT NULL;
+DESC t1;
+
+DROP TABLE t1;
+
+#############################################################################
+# Testcase csv_alter_table.2: Negative test for ALTER table
+# These queries should not succeed / should throw errors
+#############################################################################
+-- echo # ===== csv_alter_table.2 =====
+-- disable_warnings
+DROP TABLE IF EXISTS t1;
+-- enable_warnings
+
+CREATE TABLE t1 (a int NOT NULL) ENGINE = CSV;
+--error ER_CHECK_NOT_IMPLEMENTED
+ALTER TABLE t1 ADD COLUMN b CHAR(5);
+DESC t1;
+--error ER_CHECK_NOT_IMPLEMENTED
+ALTER TABLE t1 MODIFY a BIGINT;
+DESC t1;
+--error ER_CHECK_NOT_IMPLEMENTED
+ALTER TABLE t1 CHANGE a a INT;
+DESC t1;
+
+DROP TABLE t1;
diff --git a/mysql-test/t/csv_not_null.test b/mysql-test/t/csv_not_null.test
new file mode 100644
index 00000000000..ae9742ea72d
--- /dev/null
+++ b/mysql-test/t/csv_not_null.test
@@ -0,0 +1,104 @@
+#-----------------------------------------------------------------------------
+# csv_not_null.test - .test file for MySQL regression suite
+# Purpose: To test the behavior of the CSV engine
+# Bug#31473 resulted in strict enforcement of non-nullable
+# columns in CSV engine.
+# NOTE: Main functionality tested - NOT NULL restrictions on CSV tables
+# CREATE, INSERT, and UPDATE statements
+# ALTER statements in separate file due to BUG#33696
+# Author pcrews
+# Last modified: 2008-01-04
+#-----------------------------------------------------------------------------
+
+--source include/have_csv.inc
+
+#############################################################################
+# Testcase csv_not_null.1: CREATE TABLE for CSV Engine requires explicit
+# NOT NULL for each column
+#############################################################################
+-- echo # ===== csv_not_null.1 =====
+-- disable_warnings
+DROP TABLE IF EXISTS t1, t2;
+-- enable_warnings
+
+
+--echo # === Will fail -- no NOT NULL ===
+--error ER_CHECK_NOT_IMPLEMENTED
+CREATE TABLE t1 (a int) ENGINE = CSV;
+
+--echo # === Good CREATE ===
+CREATE TABLE t1 (a int NOT NULL) ENGINE = CSV;
+
+--echo # === Will fail -- ALL columns need NOT NULL ==
+--error ER_CHECK_NOT_IMPLEMENTED
+CREATE TABLE t2 (a int NOT NULL, b char(20)) ENGINE = CSV;
+
+
+DROP TABLE t1;
+##############################################################################
+# Testcase csv_not_null.2: INSERT tests -- validating behavior of INSERT
+# statements for CSV
+##############################################################################
+-- echo # ===== csv_not_null.2 =====
+-- disable_warnings
+DROP TABLE IF EXISTS t1;
+--enable_warnings
+
+
+CREATE TABLE t1 (a int NOT NULL, b blob NOT NULL, c CHAR(20) NOT NULL,
+d VARCHAR(20) NOT NULL, e enum('foo','bar') NOT NULL,f DATE NOT NULL)
+ENGINE = CSV;
+-- echo # === should result in default for each datatype ===
+-- disable_warnings
+INSERT INTO t1 VALUES();
+-- enable_warnings
+SELECT * FROM t1;
+
+-- disable_warnings
+# NOTE - Test disabled due to enum crash for this INSERT
+# See Bug#33717 - INSERT...(default) fails for enum.
+# Crashes CSV tables, loads spaces for MyISAM
+#INSERT INTO t1 VALUES(default,default,default,default,default,default);
+-- enable_warnings
+
+SELECT * FROM t1;
+INSERT INTO t1 VALUES(0,'abc','def','ghi','bar','1999-12-31');
+SELECT * FROM t1;
+-- echo # === insert failures ===
+--error ER_BAD_NULL_ERROR
+INSERT INTO t1 VALUES(NULL,'ab','a','b','foo','2007-01-01');
+--error ER_NO_DEFAULT_FOR_FIELD
+INSERT INTO t1 VALUES(default(a),default(b), default(c), default(d),
+ default(e), default(f));
+
+
+DROP TABLE t1;
+
+##############################################################################
+# Testcase csv_not_null.3: UPDATE tests -- examining behavior of UPDATE
+# statements for CSV
+# NOTE: Should not allow UPDATE <table> set <NOT_NULL_COLUMN> = NULL
+# WHERE <condition>;
+# However, this is currently allowed -- <NOT_NULL_COLUMN> is
+# set to the default value for the given datatype
+# Might have to change this test depending on the action taken for
+# Bug#33699 (addressing this behavior)
+##############################################################################
+-- echo # ===== csv_not_null.3 =====
+-- disable_warnings
+DROP TABLE IF EXISTS t1;
+--enable_warnings
+
+
+CREATE TABLE t1 (a int NOT NULL, b char(10) NOT NULL) ENGINE = CSV;
+INSERT INTO t1 VALUES();
+SELECT * FROM t1;
+UPDATE t1 set b = 'new_value' where a = 0;
+SELECT * FROM t1;
+# Might need to change this depending on Bug#33699 -UPDATE allows NULL
+# as new value on NOT NULL columns (= default datatype value)
+# Currently sets to datatype default -- might throw error
+UPDATE t1 set b = NULL where b = 'new_value';
+SELECT * FROM t1;
+
+DROP TABLE t1;
diff --git a/mysql-test/t/ctype_euckr.test b/mysql-test/t/ctype_euckr.test
index 56939817b2f..05e4b04eded 100644
--- a/mysql-test/t/ctype_euckr.test
+++ b/mysql-test/t/ctype_euckr.test
@@ -31,3 +31,26 @@ SELECT hex(a) FROM t1 ORDER BY a;
DROP TABLE t1;
# End of 4.1 tests
+
+#
+#Bug #30315 Character sets: insertion of euckr code value 0xa141 fails
+#
+create table t1 (s1 varchar(5) character set euckr);
+# Insert some valid characters
+insert into t1 values (0xA141);
+insert into t1 values (0xA15A);
+insert into t1 values (0xA161);
+insert into t1 values (0xA17A);
+insert into t1 values (0xA181);
+insert into t1 values (0xA1FE);
+# Insert some invalid characters
+insert into t1 values (0xA140);
+insert into t1 values (0xA15B);
+insert into t1 values (0xA160);
+insert into t1 values (0xA17B);
+insert into t1 values (0xA180);
+insert into t1 values (0xA1FF);
+select hex(s1), hex(convert(s1 using utf8)) from t1 order by binary s1;
+drop table t1;
+
+--echo End of 5.0 tests
diff --git a/mysql-test/t/ctype_uca.test b/mysql-test/t/ctype_uca.test
index 695a21adbf5..0d917428efb 100644
--- a/mysql-test/t/ctype_uca.test
+++ b/mysql-test/t/ctype_uca.test
@@ -538,4 +538,8 @@ alter table t1 convert to character set ucs2 collate ucs2_czech_ci;
select * from t1 where a like 'c%';
drop table t1;
+set collation_connection=ucs2_unicode_ci;
+--source include/ctype_regex.inc
+set names utf8;
+
-- echo End for 5.0 tests
diff --git a/mysql-test/t/ctype_ucs.test b/mysql-test/t/ctype_ucs.test
index bca3a9c3a96..3af5bfa54f9 100644
--- a/mysql-test/t/ctype_ucs.test
+++ b/mysql-test/t/ctype_ucs.test
@@ -547,6 +547,26 @@ select quote(name) from bug20536;
drop table bug20536;
+#
+# Bug #31615: crash after set names ucs2 collate xxx
+#
+--error 1231
+set names ucs2;
+--error 1231
+set names ucs2 collate ucs2_bin;
+--error 1231
+set character_set_client= ucs2;
+--error 1231
+set character_set_client= concat('ucs', substr('2', 1));
+
+#
+# BUG#31159 - fulltext search on ucs2 column crashes server
+#
+CREATE TABLE t1(a TEXT CHARSET ucs2 COLLATE ucs2_unicode_ci);
+INSERT INTO t1 VALUES('abcd');
+SELECT * FROM t1 WHERE MATCH(a) AGAINST ('+abcd' IN BOOLEAN MODE);
+DROP TABLE t1;
+
--echo End of 4.1 tests
#
@@ -651,4 +671,12 @@ select * from t1 where a=if(b<10,_ucs2 0x00C0,_ucs2 0x0062);
select * from t1 where a=if(b<10,_ucs2 0x0062,_ucs2 0x00C0);
drop table t1;
+set collation_connection=ucs2_general_ci;
+--source include/ctype_regex.inc
+set names latin1;
+#
+# Bug#30981 CHAR(0x41 USING ucs2) doesn't add leading zero
+#
+select hex(char(0x41 using ucs2));
+
--echo End of 5.0 tests
diff --git a/mysql-test/t/ctype_utf8.test b/mysql-test/t/ctype_utf8.test
index b61bb1d53bf..d18a7d22a0e 100644
--- a/mysql-test/t/ctype_utf8.test
+++ b/mysql-test/t/ctype_utf8.test
@@ -186,6 +186,13 @@ select * from t1 where a = 'b' and a != 'b';
drop table t1;
#
+# Testing regexp
+#
+set collation_connection=utf8_general_ci;
+--source include/ctype_regex.inc
+set names utf8;
+
+#
# Bug #3928 regexp [[:>:]] and UTF-8
#
set names utf8;
@@ -1404,3 +1411,30 @@ SELECT b FROM t2 UNION SELECT c FROM t1;
SELECT i FROM t2 UNION SELECT c FROM t1;
DROP TABLE t1, t2;
+
+#
+# Bug#30982: CHAR(..USING..) can return a not-well-formed string
+# Bug #30986: Character set introducer followed by a HEX string can return bad result
+#
+set sql_mode=traditional;
+select hex(char(0xFF using utf8));
+select hex(convert(0xFF using utf8));
+--error ER_INVALID_CHARACTER_STRING
+select hex(_utf8 0x616263FF);
+--error ER_INVALID_CHARACTER_STRING
+select hex(_utf8 X'616263FF');
+--error ER_INVALID_CHARACTER_STRING
+select hex(_utf8 B'001111111111');
+--error ER_INVALID_CHARACTER_STRING
+select (_utf8 X'616263FF');
+set sql_mode=default;
+select hex(char(0xFF using utf8));
+select hex(convert(0xFF using utf8));
+--error ER_INVALID_CHARACTER_STRING
+select hex(_utf8 0x616263FF);
+--error ER_INVALID_CHARACTER_STRING
+select hex(_utf8 X'616263FF');
+--error ER_INVALID_CHARACTER_STRING
+select hex(_utf8 B'001111111111');
+--error ER_INVALID_CHARACTER_STRING
+select (_utf8 X'616263FF');
diff --git a/mysql-test/t/delayed.test b/mysql-test/t/delayed.test
index 03b4f8b3013..ce57645bd4b 100644
--- a/mysql-test/t/delayed.test
+++ b/mysql-test/t/delayed.test
@@ -103,13 +103,13 @@ DROP TABLE t1;
# Bug#20627 - INSERT DELAYED does not honour auto_increment_* variables
#
SET @bug20627_old_auto_increment_offset=
- @@auto_increment_offset= 2;
+ @@auto_increment_offset;
SET @bug20627_old_auto_increment_increment=
- @@auto_increment_increment= 3;
+ @@auto_increment_increment;
SET @bug20627_old_session_auto_increment_offset=
- @@session.auto_increment_offset= 4;
+ @@session.auto_increment_offset;
SET @bug20627_old_session_auto_increment_increment=
- @@session.auto_increment_increment= 5;
+ @@session.auto_increment_increment;
SET @@auto_increment_offset= 2;
SET @@auto_increment_increment= 3;
SET @@session.auto_increment_offset= 4;
@@ -151,13 +151,13 @@ SET @@session.auto_increment_increment=
# Bug#20830 - INSERT DELAYED does not honour SET INSERT_ID
#
SET @bug20830_old_auto_increment_offset=
- @@auto_increment_offset= 2;
+ @@auto_increment_offset;
SET @bug20830_old_auto_increment_increment=
- @@auto_increment_increment= 3;
+ @@auto_increment_increment;
SET @bug20830_old_session_auto_increment_offset=
- @@session.auto_increment_offset= 4;
+ @@session.auto_increment_offset;
SET @bug20830_old_session_auto_increment_increment=
- @@session.auto_increment_increment= 5;
+ @@session.auto_increment_increment;
SET @@auto_increment_offset= 2;
SET @@auto_increment_increment= 3;
SET @@session.auto_increment_offset= 4;
@@ -244,13 +244,15 @@ SELECT HEX(a) FROM t1;
DROP TABLE t1;
#
-# Bug#26464 - insert delayed + update + merge = corruption
+# Bug #32676: insert delayed crash with wrong column and function specified
#
-CREATE TABLE t1(c1 INT) ENGINE=MyISAM;
-CREATE TABLE t2(c1 INT) ENGINE=MERGE UNION=(t1);
---error 1031
-INSERT DELAYED INTO t2 VALUES(1);
-DROP TABLE t1, t2;
+CREATE TABLE t1 (a INT);
+--error ER_BAD_FIELD_ERROR
+INSERT DELAYED INTO t1 SET b= b();
+DROP TABLE t1;
+
+--echo End of 5.0 tests
+
#
# Bug#27358 INSERT DELAYED does not honour SQL_MODE of the client
#
@@ -283,3 +285,4 @@ INSERT DELAYED INTO t2 VALUES (0,'0000-00-00');
INSERT DELAYED INTO t2 VALUES (0,'2007-00-00');
DROP TABLE t1,t2;
+--echo End of 5.1 tests
diff --git a/mysql-test/t/delete.test b/mysql-test/t/delete.test
index 8a03cb6c715..602e30687c8 100644
--- a/mysql-test/t/delete.test
+++ b/mysql-test/t/delete.test
@@ -277,3 +277,18 @@ SELECT * FROM t1;
DROP TABLE t1, t2;
DROP DATABASE db1;
DROP DATABASE db2;
+
+#
+# Bug 31742: delete from ... order by function call that causes an error,
+# asserts server
+#
+
+CREATE FUNCTION f1() RETURNS INT RETURN 1;
+CREATE TABLE t1 (a INT);
+INSERT INTO t1 VALUES (0);
+--error 1318
+DELETE FROM t1 ORDER BY (f1(10)) LIMIT 1;
+DROP TABLE t1;
+DROP FUNCTION f1;
+
+--echo End of 5.0 tests
diff --git a/mysql-test/t/derived.test b/mysql-test/t/derived.test
index 4d8a8e3c3af..4e79fac584f 100644
--- a/mysql-test/t/derived.test
+++ b/mysql-test/t/derived.test
@@ -211,7 +211,8 @@ drop table t2;
# select list counter
#
CREATE TABLE `t1` ( `itemid` int(11) NOT NULL default '0', `grpid` varchar(15) NOT NULL default '', `vendor` int(11) NOT NULL default '0', `date_` date NOT NULL default '0000-00-00', `price` decimal(12,2) NOT NULL default '0.00', PRIMARY KEY (`itemid`,`grpid`,`vendor`,`date_`), KEY `itemid` (`itemid`,`vendor`), KEY `itemid_2` (`itemid`,`date_`));
-insert into t1 values (128, 'rozn', 2, now(), 10),(128, 'rozn', 1, now(), 10);
+insert into t1 values (128, 'rozn', 2, curdate(), 10),
+ (128, 'rozn', 1, curdate(), 10);
SELECT MIN(price) min, MAX(price) max, AVG(price) avg FROM (SELECT SUBSTRING( MAX(concat(date_,";",price)), 12) price FROM t1 WHERE itemid=128 AND grpid='rozn' GROUP BY itemid, grpid, vendor) lastprices;
DROP TABLE t1;
diff --git a/mysql-test/t/disabled.def b/mysql-test/t/disabled.def
index a39de913659..15d02ac674a 100644
--- a/mysql-test/t/disabled.def
+++ b/mysql-test/t/disabled.def
@@ -15,3 +15,12 @@ concurrent_innodb : BUG#21579 2006-08-11 mleich innodb_concurrent random
ctype_big5 : BUG#26711 2007-06-21 Lars Test has never worked on Double Whopper
federated_transactions : Bug#29523 Transactions do not work
+events : Bug#32664 events.test fails randomly
+lowercase_table3 : Bug#32667 lowercase_table3.test reports to error log
+kill : Bug#29149: Test "kill" fails on Windows
+innodb_mysql : Bug#32724: innodb_mysql.test fails randomly
+wait_timeout : Bug#32801 wait_timeout.test fails randomly
+ctype_create : Bug#32965 main.ctype_create fails
+status : Bug#32966 main.status fails
+ps_ddl : Bug#12093 2007-12-14 pending WL#4165 / WL#4166
+csv_alter_table : Bug#33696 2008-01-21 pcrews no .result file - bug allows NULL columns in CSV tables
diff --git a/mysql-test/t/drop.test b/mysql-test/t/drop.test
index a1451773e90..a79044436eb 100644
--- a/mysql-test/t/drop.test
+++ b/mysql-test/t/drop.test
@@ -122,3 +122,16 @@ disconnect addconroot2;
connection default;
--echo End of 5.0 tests
+
+#
+# Bug#30152 MySQLD crash duing alter table causes DROP DATABASE to FAIL due to temp file
+#
+create database mysql_test;
+create table mysql_test.t1(f1 int);
+create table mysql_test.`#sql-347f_7` (f1 int);
+create table mysql_test.`#sql-347f_8` (f1 int);
+drop table mysql_test.`#sql-347f_8`;
+copy_file $MYSQLTEST_VARDIR/master-data/mysql_test/t1.frm $MYSQLTEST_VARDIR/master-data/mysql_test/#sql-347f_6.frm;
+drop database mysql_test;
+
+--echo End of 5.1 tests
diff --git a/mysql-test/t/events.test b/mysql-test/t/events.test
index d1ca5f1b609..a4c7eaebc30 100644
--- a/mysql-test/t/events.test
+++ b/mysql-test/t/events.test
@@ -454,7 +454,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 ( (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 /*2*/ user, host, db, command, state, info
diff --git a/mysql-test/t/events_bugs-master.opt b/mysql-test/t/events_bugs-master.opt
new file mode 100644
index 00000000000..f93413a61e5
--- /dev/null
+++ b/mysql-test/t/events_bugs-master.opt
@@ -0,0 +1 @@
+--event-scheduler
diff --git a/mysql-test/t/events_bugs.test b/mysql-test/t/events_bugs.test
index 36052fdb9af..efdb67349ec 100644
--- a/mysql-test/t/events_bugs.test
+++ b/mysql-test/t/events_bugs.test
@@ -10,6 +10,21 @@ create database events_test;
use events_test;
#
+# START: Bug #31332 --event-scheduler option misbehaving
+#
+
+# NOTE!! this test must come first! It's testing that the --event-scheduler
+# option with no argument in events_bugs-master.opt turns the scheduler on.
+
+select * from information_schema.global_variables where variable_name like 'event_scheduler';
+
+SET GLOBAL event_scheduler = 'OFF';
+
+#
+# END: Bug #31332
+#
+
+#
# START - 16415: Events: event names are case sensitive
#
CREATE EVENT lower_case ON SCHEDULE EVERY 1 MINUTE DO SELECT 1;
@@ -712,18 +727,6 @@ DROP TABLE event_log;
#DROP DATABASE ev_db_1;
SET GLOBAL event_scheduler = OFF;
-#
-# End of tests
-#
-
-let $wait_condition=
- select count(*) = 0 from information_schema.processlist
- where db='events_test' and command = 'Connect' and user=current_user();
---source include/wait_condition.inc
-
-DROP DATABASE events_test;
-
-
#
# Bug#28641 CREATE EVENT with '2038.01.18 03:00:00' let server crash.
#
@@ -737,3 +740,215 @@ CREATE EVENT bug28641 ON SCHEDULE AT '2038.01.18 03:00:00'
DELIMITER ;|
SET GLOBAL event_scheduler= OFF;
DROP EVENT bug28641;
+
+###########################################################################
+
+--echo
+--echo #####################################################################
+--echo #
+--echo # BUG#31111: --read-only crashes MySQL (events fail to load).
+--echo #
+--echo #####################################################################
+--echo
+
+--error 0,ER_CANNOT_USER
+DROP USER mysqltest_u1@localhost;
+
+--disable_warnings
+DROP EVENT IF EXISTS e1;
+DROP EVENT IF EXISTS e2;
+--enable_warnings
+
+--echo
+
+# Check that an ordinary user can not create/update/drop events in the
+# read-only mode.
+
+GRANT EVENT ON *.* TO mysqltest_u1@localhost;
+
+--echo
+
+SET GLOBAL READ_ONLY = 1;
+
+--echo
+
+--echo #
+--echo # Connection: u1_con (mysqltest_u1@localhost/events_test).
+--echo #
+
+--connect(u1_con,localhost,mysqltest_u1,,events_test)
+
+--echo
+
+--error ER_OPTION_PREVENTS_STATEMENT
+CREATE EVENT e1 ON SCHEDULE AT '2020-01-01 00:00:00' DO SET @a = 1;
+
+--echo
+
+--error ER_OPTION_PREVENTS_STATEMENT
+ALTER EVENT e1 COMMENT 'comment';
+
+--echo
+
+--error ER_OPTION_PREVENTS_STATEMENT
+DROP EVENT e1;
+
+--echo
+
+# Check that the super user still can create/update/drop events.
+
+--echo #
+--echo # Connection: root_con (root@localhost/events_test).
+--echo #
+
+--connect(root_con,localhost,root,,events_test)
+
+--echo
+
+CREATE EVENT e1 ON SCHEDULE AT '2020-01-01 00:00:00' DO SET @a = 1;
+
+--echo
+
+ALTER EVENT e1 COMMENT 'comment';
+
+--echo
+
+DROP EVENT e1;
+
+--echo
+
+#
+# Switch to read-write mode; create test events under the user mysqltest_u1;
+# switch back to read-only mode.
+#
+
+SET GLOBAL READ_ONLY = 0;
+
+--echo
+
+--echo #
+--echo # Connection: u1_con (mysqltest_u1@localhost/test).
+--echo #
+
+--connection u1_con
+
+--echo
+
+CREATE EVENT e1 ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 SECOND DO SET @a = 1;
+CREATE EVENT e2 ON SCHEDULE EVERY 1 SECOND DO SET @a = 1;
+
+--echo
+
+SELECT
+ event_name,
+ last_executed IS NULL,
+ definer
+FROM INFORMATION_SCHEMA.EVENTS
+WHERE event_schema = 'events_test';
+
+--echo
+
+--echo #
+--echo # Connection: root_con (root@localhost/events_test).
+--echo #
+
+--connection root_con
+
+--echo
+
+SET GLOBAL READ_ONLY = 1;
+
+# Check that the event scheduler is able to update event.
+
+--echo
+
+SET GLOBAL EVENT_SCHEDULER = ON;
+
+--echo
+
+--echo # Waiting for the event scheduler to execute and drop event e1...
+
+let $wait_timeout = 2;
+let $wait_condition =
+ SELECT COUNT(*) = 0
+ FROM INFORMATION_SCHEMA.EVENTS
+ WHERE event_schema = 'events_test' AND event_name = 'e1';
+--source include/wait_condition.inc
+
+--echo
+
+--echo # Waiting for the event scheduler to execute and update event e2...
+
+let $wait_condition =
+ SELECT last_executed IS NOT NULL
+ FROM INFORMATION_SCHEMA.EVENTS
+ WHERE event_schema = 'events_test' AND event_name = 'e2';
+--source include/wait_condition.inc
+
+--echo
+
+SET GLOBAL EVENT_SCHEDULER = OFF;
+
+--echo
+
+SELECT
+ event_name,
+ last_executed IS NULL,
+ definer
+FROM INFORMATION_SCHEMA.EVENTS
+WHERE event_schema = 'events_test';
+
+--echo
+
+--error ER_EVENT_DOES_NOT_EXIST
+DROP EVENT e1;
+
+--echo
+--echo # Cleanup.
+--echo
+
+DROP EVENT e2;
+
+--echo
+
+SET GLOBAL READ_ONLY = 0;
+
+--echo
+
+--echo #
+--echo # Connection: default
+--echo #
+
+--disconnect u1_con
+--disconnect root_con
+--connection default
+
+--echo
+
+DROP USER mysqltest_u1@localhost;
+
+--echo
+--echo #####################################################################
+--echo #
+--echo # End of BUG#31111.
+--echo #
+--echo #####################################################################
+--echo
+
+
+###########################################################################
+#
+# End of tests
+#
+# !!! KEEP this section AT THE END of this file !!!
+#
+###########################################################################
+
+let $wait_condition=
+ select count(*) = 0 from information_schema.processlist
+ where db='events_test' and command = 'Connect' and user=current_user();
+--source include/wait_condition.inc
+
+DROP DATABASE events_test;
+
+# THIS MUST BE THE LAST LINE in this file.
diff --git a/mysql-test/t/events_scheduling.test b/mysql-test/t/events_scheduling.test
index b1eeae1e020..226cad0f3eb 100644
--- a/mysql-test/t/events_scheduling.test
+++ b/mysql-test/t/events_scheduling.test
@@ -87,7 +87,7 @@ SELECT IF(TIME_TO_SEC(TIMEDIFF(ENDS,STARTS))=6, 'OK', 'ERROR')
FROM INFORMATION_SCHEMA.EVENTS
WHERE EVENT_SCHEMA=DATABASE() AND EVENT_NAME='event_2';
-SELECT IF(LAST_EXECUTED-ENDS < 3, 'OK', 'ERROR')
+SELECT IF(LAST_EXECUTED-ENDS <= 0, 'OK', 'ERROR')
FROM INFORMATION_SCHEMA.EVENTS
WHERE EVENT_SCHEMA=DATABASE() AND EVENT_NAME='event_2';
diff --git a/mysql-test/t/explain.test b/mysql-test/t/explain.test
index 04cf37f457a..c9ae8aceaf6 100644
--- a/mysql-test/t/explain.test
+++ b/mysql-test/t/explain.test
@@ -66,4 +66,32 @@ explain extended select * from t1 having 1;
drop view v1;
drop table t1;
+#
+# Bug #32241: memory corruption due to large index map in 'Range checked for
+# each record'
+#
+
+CREATE TABLE t1(c INT);
+INSERT INTO t1 VALUES (),();
+
+CREATE TABLE t2 (b INT,
+KEY(b),KEY(b),KEY(b),KEY(b),KEY(b),
+KEY(b),KEY(b),KEY(b),KEY(b),KEY(b),
+KEY(b),KEY(b),KEY(b),KEY(b),KEY(b),
+KEY(b),KEY(b),KEY(b),KEY(b),KEY(b),
+KEY(b),KEY(b),KEY(b),KEY(b),KEY(b),
+KEY(b),KEY(b),KEY(b),KEY(b),KEY(b),
+KEY(b),KEY(b),KEY(b),KEY(b),KEY(b),
+KEY(b),KEY(b),KEY(b),KEY(b),KEY(b));
+
+INSERT INTO t2 VALUES (),(),();
+
+# We only need to make sure that there is no buffer overrun and the index map
+# is displayed correctly
+--replace_column 1 X 2 X 3 X 4 X 5 X 6 X 7 X 8 X 9 X
+EXPLAIN SELECT 1 FROM
+ (SELECT 1 FROM t2,t1 WHERE b < c GROUP BY 1 LIMIT 1) AS d2;
+DROP TABLE t2;
+DROP TABLE t1;
+
# End of 5.0 tests.
diff --git a/mysql-test/t/federated.test b/mysql-test/t/federated.test
index 90f1fa36bb4..76cb5fd4793 100644
--- a/mysql-test/t/federated.test
+++ b/mysql-test/t/federated.test
@@ -1764,6 +1764,35 @@ DROP TABLE federated.t1;
connection slave;
DROP TABLE federated.t1;
---echo End of 5.1 tests
+#
+# Bug #32374 crash with filesort when selecting from federated table and view
+#
+connection slave;
+create table t1 (a varchar(256));
+--disable_warnings
+drop view if exists v1;
+--enable_warnings
+create view v1 as select a from t1;
+--disable_query_log
+let $n= 100;
+while ($n)
+{
+ insert into t1 values (repeat('a',200));
+ dec $n;
+}
+--enable_query_log
+connection master;
+--replace_result $SLAVE_MYPORT SLAVE_PORT
+eval create table t1
+ (a varchar(256)) engine=federated
+ connection='mysql://root@127.0.0.1:$SLAVE_MYPORT/test/v1';
+
+select 1 from t1 order by a;
+drop table t1;
+connection slave;
+drop table t1;
+drop view v1;
+
+--echo End of 5.1 tests
source include/federated_cleanup.inc;
diff --git a/mysql-test/t/federated_server.test b/mysql-test/t/federated_server.test
index 87b67720104..444285ac045 100644
--- a/mysql-test/t/federated_server.test
+++ b/mysql-test/t/federated_server.test
@@ -2,7 +2,7 @@
# if federated can utilise the servers table
# should work with embedded server after mysqltest is fixed
-- source include/not_embedded.inc
--- source include/federated.inc;
+-- source include/federated.inc
-- source include/big_test.inc
connection slave;
@@ -282,6 +282,18 @@ drop user guest_select@localhost;
drop table federated.t1;
drop server 's1';
+#
+# Bug#30671 - ALTER SERVER causes the server to crash
+#
+create server 's1' foreign data wrapper 'mysql' options (port 3306);
+alter server 's1' options
+ (host 'localhost', database '', user '',
+ password '', socket '', owner '', port 3306);
+# The next statement would crash unpatched server
+alter server 's1' options
+ (host 'localhost', database 'database1', user '',
+ password '', socket '', owner '', port 3306);
+drop server 's1';
--echo # End of 5.1 tests
diff --git a/mysql-test/t/flush.test b/mysql-test/t/flush.test
index d58d038c3ea..794423ca211 100644
--- a/mysql-test/t/flush.test
+++ b/mysql-test/t/flush.test
@@ -133,6 +133,37 @@ disconnect con3;
connection default;
drop table t1, t2;
+#
+# Bug#32528 Global read lock with a low priority write lock causes a server crash
+#
+
+--disable_warnings
+drop table if exists t1, t2;
+--enable_warnings
+
+set session low_priority_updates=1;
+
+create table t1 (a int);
+create table t2 (b int);
+
+lock tables t1 write;
+--error ER_LOCK_OR_ACTIVE_TRANSACTION
+flush tables with read lock;
+unlock tables;
+
+lock tables t1 read, t2 write;
+--error ER_LOCK_OR_ACTIVE_TRANSACTION
+flush tables with read lock;
+unlock tables;
+
+lock tables t1 read;
+flush tables with read lock;
+unlock tables;
+
+drop table t1, t2;
+
+set session low_priority_updates=default;
+
--echo End of 5.0 tests
#
diff --git a/mysql-test/t/fulltext.test b/mysql-test/t/fulltext.test
index 1f8a3b82cfd..64f77b4f0b7 100644
--- a/mysql-test/t/fulltext.test
+++ b/mysql-test/t/fulltext.test
@@ -400,6 +400,14 @@ SELECT * FROM t1 WHERE MATCH(a) AGAINST('test');
DROP TABLE t1;
#
+# BUG#11392 - fulltext search bug
+#
+CREATE TABLE t1(a TEXT);
+INSERT INTO t1 VALUES(' aaaaa aaaa');
+SELECT * FROM t1 WHERE MATCH(a) AGAINST ('"aaaa"' IN BOOLEAN MODE);
+DROP TABLE t1;
+
+#
# BUG#29445 - match ... against () never returns
#
CREATE TABLE t1(a VARCHAR(20), FULLTEXT(a));
diff --git a/mysql-test/t/func_gconcat.test b/mysql-test/t/func_gconcat.test
index 4c5dd6467bd..826e00bf74f 100644
--- a/mysql-test/t/func_gconcat.test
+++ b/mysql-test/t/func_gconcat.test
@@ -590,4 +590,54 @@ select group_concat(distinct a, c order by a desc, c desc) from t1;
drop table t1;
+#
+# Bug#30897 GROUP_CONCAT returns extra comma on empty fields
+#
+create table t1 (f1 char(20));
+insert into t1 values (''),('');
+select group_concat(distinct f1) from t1;
+select group_concat(f1) from t1;
+drop table t1;
+# Bug#32798: DISTINCT in GROUP_CONCAT clause fails when ordering by a column
+# with null values
+#'
+CREATE TABLE t1 (a INT, b INT);
+
+INSERT INTO t1 VALUES (1, 1), (2, 2), (2, 3);
+
+SELECT GROUP_CONCAT(DISTINCT a ORDER BY b) FROM t1;
+SELECT GROUP_CONCAT(DISTINCT a ORDER BY b DESC) FROM t1;
+SELECT GROUP_CONCAT(DISTINCT a) FROM t1;
+
+SELECT GROUP_CONCAT(DISTINCT a + 1 ORDER BY 3 - b) FROM t1;
+SELECT GROUP_CONCAT(DISTINCT a + 1 ORDER BY b) FROM t1;
+SELECT GROUP_CONCAT(a ORDER BY 3 - b) FROM t1;
+
+CREATE TABLE t2 (a INT, b INT, c INT, d INT);
+
+# There is one duplicate in the expression list: 1,10
+# There is one duplicate in ORDER BY list, but that shouldnt matter: 1,10
+INSERT INTO t2 VALUES (1,1, 1,1), (1,1, 2,2), (1,2, 2,1), (2,1, 1,2);
+
+SELECT GROUP_CONCAT(DISTINCT a, b ORDER BY c, d) FROM t2;
+SELECT GROUP_CONCAT(DISTINCT a, b ORDER BY d, c) FROM t2;
+
+CREATE TABLE t3 (a INT, b INT, c INT);
+
+INSERT INTO t3 VALUES (1, 1, 1), (2, 1, 2), (3, 2, 1);
+
+SELECT GROUP_CONCAT(DISTINCT a, b ORDER BY b, c) FROM t3;
+SELECT GROUP_CONCAT(DISTINCT a, b ORDER BY c, b) FROM t3;
+
+SELECT GROUP_CONCAT(DISTINCT a, b ORDER BY a, b) FROM t1;
+SELECT GROUP_CONCAT(DISTINCT b, a ORDER BY a, b) FROM t1;
+SELECT GROUP_CONCAT(DISTINCT a, b ORDER BY b, a) FROM t1;
+SELECT GROUP_CONCAT(DISTINCT b, a ORDER BY a, b) FROM t1;
+SELECT GROUP_CONCAT(DISTINCT a ORDER BY a, b) FROM t1;
+SELECT GROUP_CONCAT(DISTINCT b ORDER BY b, a) FROM t1;
+SELECT GROUP_CONCAT(DISTINCT a, b ORDER BY a) FROM t1;
+SELECT GROUP_CONCAT(DISTINCT b, a ORDER BY b) FROM t1;
+
+DROP TABLE t1, t2, t3;
+
--echo End of 5.0 tests
diff --git a/mysql-test/t/func_group.test b/mysql-test/t/func_group.test
index d1b4919c83e..36d360780cf 100644
--- a/mysql-test/t/func_group.test
+++ b/mysql-test/t/func_group.test
@@ -867,5 +867,61 @@ SELECT MIN(a), MIN(b) FROM t5 WHERE a = 1 and b > 1;
DROP TABLE t1, t2, t3, t4, t5;
+#
+# Bug #31156: mysqld: item_sum.cc:918:
+# virtual bool Item_sum_distinct::setup(THD*): Assertion
+#
+
+CREATE TABLE t1 (a INT);
+INSERT INTO t1 values (),(),();
+SELECT (SELECT SLEEP(0) FROM t1 ORDER BY AVG(DISTINCT a) ) as x FROM t1
+ GROUP BY x;
+SELECT 1 FROM t1 GROUP BY (SELECT SLEEP(0) FROM t1 ORDER BY AVG(DISTINCT a) );
+
+DROP TABLE t1;
+
+#
+# Bug #30715: Assertion failed: item_field->field->real_maybe_null(), file
+# .\opt_sum.cc, line
+#
+
+CREATE TABLE t1 (a int, b date NOT NULL, KEY k1 (a,b));
+SELECT MIN(b) FROM t1 WHERE a=1 AND b>'2007-08-01';
+DROP TABLE t1;
+
+#
+# Bug #31794: no syntax error on SELECT id FROM t HAVING count(*)>2;
+#
+
+CREATE TABLE t1 (a INT);
+INSERT INTO t1 VALUES (1),(2),(3),(4);
+
+SET SQL_MODE=ONLY_FULL_GROUP_BY;
+--error ER_MIX_OF_GROUP_FUNC_AND_FIELDS
+SELECT a FROM t1 HAVING COUNT(*)>2;
+--error ER_MIX_OF_GROUP_FUNC_AND_FIELDS
+SELECT COUNT(*), a FROM t1;
+
+SET SQL_MODE=DEFAULT;
+SELECT a FROM t1 HAVING COUNT(*)>2;
+SELECT COUNT(*), a FROM t1;
+
+DROP TABLE t1;
+
+#
+# Bug #33133: Views are not transparent
+#
+
+set SQL_MODE=ONLY_FULL_GROUP_BY;
+
+CREATE TABLE t1 (a INT);
+INSERT INTO t1 VALUES (1),(2),(3),(4);
+CREATE VIEW v1 AS SELECT a,(a + 1) AS y FROM t1;
+EXPLAIN EXTENDED SELECT y FROM v1 GROUP BY v1.y;
+
+DROP VIEW v1;
+DROP TABLE t1;
+SET SQL_MODE=DEFAULT;
+
###
--echo End of 5.0 tests
diff --git a/mysql-test/t/func_in.test b/mysql-test/t/func_in.test
index 2c5ed6a22d3..d8b0c89532e 100644
--- a/mysql-test/t/func_in.test
+++ b/mysql-test/t/func_in.test
@@ -408,5 +408,13 @@ select f2 from t2 where f2 in (1,'b');
explain select f2 from t2 where f2 in (1,'b');
drop table t1, t2;
+#
+# Bug #31075: crash in get_func_mm_tree
+#
+
+create table t1 (a time, key(a));
+insert into t1 values (),(),(),(),(),(),(),(),(),();
+select a from t1 where a not in (a,a,a) group by a;
+drop table t1;
--echo End of 5.1 tests
diff --git a/mysql-test/t/func_math.test b/mysql-test/t/func_math.test
index 668528b2e9b..274a953a314 100644
--- a/mysql-test/t/func_math.test
+++ b/mysql-test/t/func_math.test
@@ -224,4 +224,29 @@ select mod(cast(-2 as unsigned), 3), mod(18446744073709551614, 3), mod(-2, 3);
select mod(5, cast(-2 as unsigned)), mod(5, 18446744073709551614), mod(5, -2);
select pow(cast(-2 as unsigned), 5), pow(18446744073709551614, 5), pow(-2, 5);
+#
+# Bug #30587: mysql crashes when trying to group by TIME div NUMBER
+#
+
+CREATE TABLE t1 (a timestamp, b varchar(20), c bit(1));
+INSERT INTO t1 VALUES('1998-09-23', 'str1', 1), ('2003-03-25', 'str2', 0);
+SELECT a DIV 900 y FROM t1 GROUP BY y;
+SELECT DISTINCT a DIV 900 y FROM t1;
+SELECT b DIV 900 y FROM t1 GROUP BY y;
+SELECT c DIV 900 y FROM t1 GROUP BY y;
+DROP TABLE t1;
+
+CREATE TABLE t1(a LONGBLOB);
+INSERT INTO t1 VALUES('1'),('2'),('3');
+SELECT DISTINCT (a DIV 254576881) FROM t1;
+SELECT (a DIV 254576881) FROM t1 UNION ALL
+ SELECT (a DIV 254576881) FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1(a SET('a','b','c'));
+INSERT INTO t1 VALUES ('a');
+SELECT a DIV 2 FROM t1 UNION SELECT a DIV 2 FROM t1;
+DROP TABLE t1;
+
+
--echo End of 5.0 tests
diff --git a/mysql-test/t/func_misc.test b/mysql-test/t/func_misc.test
index db4df9ef244..7a579088d23 100644
--- a/mysql-test/t/func_misc.test
+++ b/mysql-test/t/func_misc.test
@@ -3,7 +3,7 @@
#
--disable_warnings
-DROP TABLE IF EXISTS t1;
+DROP TABLE IF EXISTS t1, t2;
--enable_warnings
select format(1.5555,0),format(123.5555,1),format(1234.5555,2),format(12345.55555,3),format(123456.5555,4),format(1234567.5555,5),format("12345.2399",2);
@@ -199,6 +199,46 @@ drop function func_26093_a;
drop function func_26093_b;
#
+# Bug #30832: Assertion + crash with select name_const('test',now());
+#
+--error ER_WRONG_ARGUMENTS
+SELECT NAME_CONST('test', NOW());
+--error ER_WRONG_ARGUMENTS
+SELECT NAME_CONST('test', UPPER('test'));
+
+SELECT NAME_CONST('test', NULL);
+SELECT NAME_CONST('test', 1);
+SELECT NAME_CONST('test', -1);
+SELECT NAME_CONST('test', 1.0);
+SELECT NAME_CONST('test', -1.0);
+SELECT NAME_CONST('test', 'test');
+
+#
+# Bug #27545: erroneous usage of NAME_CONST with a name as the first parameter
+# resolved against a column name of a derived table hangs the client
+#
+
+CREATE TABLE t1 (a int);
+INSERT INTO t1 VALUES (5), (2);
+
+--error ER_WRONG_ARGUMENTS
+SELECT NAME_CONST(x,2) FROM (SELECT a x FROM t1) t;
+
+DROP TABLE t1;
+
+
+#
+# Bug #32559: connection hangs on query with name_const
+#
+CREATE TABLE t1(a INT);
+INSERT INTO t1 VALUES (), (), ();
+--error ER_WRONG_ARGUMENTS
+SELECT NAME_CONST(a, '1') FROM t1;
+--error ER_WRONG_ARGUMENTS
+SET INSERT_ID= NAME_CONST(a, a);
+DROP TABLE t1;
+
+#
# Bug #31349: ERROR 1062 (23000): Duplicate entry '' for key 'group_key'
#
create table t1 (a int not null);
diff --git a/mysql-test/t/func_regexp.test b/mysql-test/t/func_regexp.test
index 23070c71fe9..1b35fab9d54 100644
--- a/mysql-test/t/func_regexp.test
+++ b/mysql-test/t/func_regexp.test
@@ -6,28 +6,9 @@
drop table if exists t1;
--enable_warnings
-create table t1 (s1 char(64),s2 char(64));
+set names latin1;
+--source include/ctype_regex.inc
-insert into t1 values('aaa','aaa');
-insert into t1 values('aaa|qqq','qqq');
-insert into t1 values('gheis','^[^a-dXYZ]+$');
-insert into t1 values('aab','^aa?b');
-insert into t1 values('Baaan','^Ba*n');
-insert into t1 values('aaa','qqq|aaa');
-insert into t1 values('qqq','qqq|aaa');
-
-insert into t1 values('bbb','qqq|aaa');
-insert into t1 values('bbb','qqq');
-insert into t1 values('aaa','aba');
-
-insert into t1 values(null,'abc');
-insert into t1 values('def',null);
-insert into t1 values(null,null);
-insert into t1 values('ghi','ghi[');
-
-select HIGH_PRIORITY s1 regexp s2 from t1;
-
-drop table t1;
#
# This test a bug in regexp on Alpha
@@ -74,4 +55,13 @@ execute stmt1 using @a;
deallocate prepare stmt1;
drop table t1;
-# End of 4.1 tests
+--echo End of 4.1 tests
+
+
+#
+# Bug #31440: 'select 1 regex null' asserts debug server
+#
+
+SELECT 1 REGEXP NULL;
+
+--echo End of 5.0 tests
diff --git a/mysql-test/t/func_set.test b/mysql-test/t/func_set.test
index 710b9b90a05..e4fde6e0e0e 100644
--- a/mysql-test/t/func_set.test
+++ b/mysql-test/t/func_set.test
@@ -54,4 +54,21 @@ select find_in_set(binary 'a', 'A,B,C');
#
select find_in_set('1','3,1,');
-# End of 4.1 tests
+--echo End of 4.1 tests
+
+#
+# Bug #32560: crash with interval function and count(*)
+#
+SELECT INTERVAL(0.0, NULL);
+SELECT INTERVAL(0.0, CAST(NULL AS DECIMAL));
+SELECT INTERVAL(0.0, CAST(DATE(NULL) AS DECIMAL));
+SELECT INTERVAL(0.0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+SELECT INTERVAL(0.0, CAST(NULL AS DECIMAL), CAST(NULL AS DECIMAL),
+ CAST(NULL AS DECIMAL), CAST(NULL AS DECIMAL), CAST(NULL AS DECIMAL),
+ CAST(NULL AS DECIMAL), CAST(NULL AS DECIMAL), CAST(NULL AS DECIMAL));
+SELECT INTERVAL(0.0, CAST(DATE(NULL) AS DECIMAL), CAST(DATE(NULL) AS DECIMAL),
+ CAST(DATE(NULL) AS DECIMAL), CAST(DATE(NULL) AS DECIMAL),
+ CAST(DATE(NULL) AS DECIMAL), CAST(DATE(NULL) AS DECIMAL),
+ CAST(DATE(NULL) AS DECIMAL), CAST(DATE(NULL) AS DECIMAL));
+
+--echo End of 5.0 tests
diff --git a/mysql-test/t/func_str.test b/mysql-test/t/func_str.test
index 945f5a050f4..b6da14211ae 100644
--- a/mysql-test/t/func_str.test
+++ b/mysql-test/t/func_str.test
@@ -782,6 +782,19 @@ explain extended select encode(f1,'zxcv') as 'enc' from t1;
explain extended select decode(f1,'zxcv') as 'enc' from t1;
drop table t1;
+#
+# Bug #31758 inet_ntoa, oct, crashes server with null + filesort
+#
+create table t1 (a bigint not null)engine=myisam;
+insert into t1 set a = 1024*1024*1024*4;
+delete from t1 order by (inet_ntoa(a)) desc limit 10;
+drop table t1;
+create table t1 (a char(36) not null)engine=myisam;
+insert ignore into t1 set a = ' ';
+insert ignore into t1 set a = ' ';
+select * from t1 order by (oct(a));
+drop table t1;
+
--echo End of 4.1 tests
#
@@ -1231,4 +1244,16 @@ SELECT SUBSTR(a,1,len) FROM t1;
DROP TABLE t1;
+#
+# Bug #28850: Potential bugs related to the return type of the CHAR function
+#
+
+CREATE TABLE t1 AS SELECT CHAR(0x414243) as c1;
+SELECT HEX(c1) from t1;
+DROP TABLE t1;
+
+CREATE VIEW v1 AS SELECT CHAR(0x414243) as c1;
+SELECT HEX(c1) from v1;
+DROP VIEW v1;
+
--echo End of 5.0 tests
diff --git a/mysql-test/t/func_time.test b/mysql-test/t/func_time.test
index d3346bbb880..13c5da1285a 100644
--- a/mysql-test/t/func_time.test
+++ b/mysql-test/t/func_time.test
@@ -548,6 +548,16 @@ DROP TABLE testBug8868;
SET NAMES DEFAULT;
#
+# Bug #31160: MAKETIME() crashes server when returning NULL in ORDER BY using
+# filesort
+#
+CREATE TABLE t1 (
+ a TIMESTAMP
+);
+INSERT INTO t1 VALUES (now()), (now());
+SELECT 1 FROM t1 ORDER BY MAKETIME(1, 1, a);
+DROP TABLE t1;
+#
# Bug #19844 time_format in Union truncates values
#
@@ -756,6 +766,23 @@ select concat(a,ifnull(min(date_format(now(), '%Y-%m-%d')),' ull')) from t1;
set lc_time_names=en_US;
drop table t1;
+#
+# Bug#32180: DATE_ADD treats datetime numeric argument as DATE
+# instead of DATETIME
+#
+
+select DATE_ADD('20071108181000', INTERVAL 1 DAY);
+select DATE_ADD(20071108181000, INTERVAL 1 DAY);
+select DATE_ADD('20071108', INTERVAL 1 DAY);
+select DATE_ADD(20071108, INTERVAL 1 DAY);
+
+#
+# Bug#32770: LAST_DAY() returns a DATE, but somehow internally keeps
+# track of the TIME.
+#
+
+select LAST_DAY('2007-12-06 08:59:19.05') - INTERVAL 1 SECOND;
+
--echo End of 5.0 tests
#
diff --git a/mysql-test/t/gis-rtree.test b/mysql-test/t/gis-rtree.test
index 88f31143d93..dad22f42571 100644
--- a/mysql-test/t/gis-rtree.test
+++ b/mysql-test/t/gis-rtree.test
@@ -797,6 +797,42 @@ UPDATE t1 set spatial_point=GeomFromText('POINT(41 46)') where c1 like 'f%';
CHECK TABLE t1 EXTENDED;
DROP TABLE t1;
+#
+# Bug #30286 spatial index cause corruption and server crash!
+#
+
+create table t1 (a geometry not null, spatial index(a));
+insert into t1 values (PointFromWKB(POINT(1.1517219314031e+164, 131072)));
+insert into t1 values (PointFromWKB(POINT(9.1248812352444e+192, 2.9740338169556e+284)));
+insert into t1 values (PointFromWKB(POINT(4.7783097267365e-299, -0)));
+insert into t1 values (PointFromWKB(POINT(1.49166814624e-154, 2.0880974297595e-53)));
+insert into t1 values (PointFromWKB(POINT(4.0917382598702e+149, 1.2024538023802e+111)));
+insert into t1 values (PointFromWKB(POINT(2.0349165139404e+236, 2.9993936277913e-241)));
+insert into t1 values (PointFromWKB(POINT(2.5243548967072e-29, 1.2024538023802e+111)));
+insert into t1 values (PointFromWKB(POINT(0, 6.9835074892995e-251)));
+insert into t1 values (PointFromWKB(POINT(2.0880974297595e-53, 3.1050361846014e+231)));
+insert into t1 values (PointFromWKB(POINT(2.8728483499323e-188, 2.4600631144627e+260)));
+insert into t1 values (PointFromWKB(POINT(3.0517578125e-05, 2.0349165139404e+236)));
+insert into t1 values (PointFromWKB(POINT(1.1517219314031e+164, 1.1818212630766e-125)));
+insert into t1 values (PointFromWKB(POINT(2.481040258324e-265, 5.7766220027675e-275)));
+insert into t1 values (PointFromWKB(POINT(2.0880974297595e-53, 2.5243548967072e-29)));
+insert into t1 values (PointFromWKB(POINT(5.7766220027675e-275, 9.9464647281957e+86)));
+insert into t1 values (PointFromWKB(POINT(2.2181357552967e+130, 3.7857669957337e-270)));
+insert into t1 values (PointFromWKB(POINT(4.5767114681874e-246, 3.6893488147419e+19)));
+insert into t1 values (PointFromWKB(POINT(4.5767114681874e-246, 3.7537584144024e+255)));
+insert into t1 values (PointFromWKB(POINT(3.7857669957337e-270, 1.8033161362863e-130)));
+insert into t1 values (PointFromWKB(POINT(0, 5.8774717541114e-39)));
+insert into t1 values (PointFromWKB(POINT(1.1517219314031e+164, 2.2761049594727e-159)));
+insert into t1 values (PointFromWKB(POINT(6.243497100632e+144, 3.7857669957337e-270)));
+insert into t1 values (PointFromWKB(POINT(3.7857669957337e-270, 2.6355494858076e-82)));
+insert into t1 values (PointFromWKB(POINT(2.0349165139404e+236, 3.8518598887745e-34)));
+insert into t1 values (PointFromWKB(POINT(4.6566128730774e-10, 2.0880974297595e-53)));
+insert into t1 values (PointFromWKB(POINT(2.0880974297595e-53, 1.8827498946116e-183)));
+insert into t1 values (PointFromWKB(POINT(1.8033161362863e-130, 9.1248812352444e+192)));
+insert into t1 values (PointFromWKB(POINT(4.7783097267365e-299, 2.2761049594727e-159)));
+insert into t1 values (PointFromWKB(POINT(1.94906280228e+289, 1.2338789709327e-178)));
+drop table t1;
+
# End of 4.1 tests
#
diff --git a/mysql-test/t/gis.test b/mysql-test/t/gis.test
index d7182e36e3a..e6b8b91783c 100644
--- a/mysql-test/t/gis.test
+++ b/mysql-test/t/gis.test
@@ -432,6 +432,56 @@ INSERT INTO t1 VALUES (NULL);
SELECT * FROM t1;
DROP TABLE t1;
+#
+# Bug #30955 geomfromtext() crasher
+#
+CREATE TABLE `t1` ( `col9` set('a'), `col89` date);
+INSERT INTO `t1` VALUES ('','0000-00-00');
+select geomfromtext(col9,col89) as a from t1;
+DROP TABLE t1;
+
+#
+# Bug #31158 Spatial, Union, LONGBLOB vs BLOB bug (crops data)
+#
+
+CREATE TABLE t1 (
+ geomdata polygon NOT NULL,
+ SPATIAL KEY index_geom (geomdata)
+) ENGINE=MyISAM DEFAULT CHARSET=latin2 DELAY_KEY_WRITE=1 ROW_FORMAT=FIXED;
+
+CREATE TABLE t2 (
+ geomdata polygon NOT NULL,
+ SPATIAL KEY index_geom (geomdata)
+) ENGINE=MyISAM DEFAULT CHARSET=latin2 DELAY_KEY_WRITE=1 ROW_FORMAT=FIXED;
+
+CREATE TABLE t3
+select
+ aswkb(ws.geomdata) AS geomdatawkb
+ from
+ t1 ws
+union
+ select
+ aswkb(ws.geomdata) AS geomdatawkb
+ from
+ t2 ws;
+
+describe t3;
+
+drop table t1;
+drop table t2;
+drop table t3;
+
+#
+# Bug #30284 spatial key corruption
+#
+
+create table t1(col1 geometry default null,col15 geometrycollection not
+null,spatial index(col15),index(col1(15)))engine=myisam;
+insert into t1 set col15 = GeomFromText('POINT(6 5)');
+insert into t1 set col15 = GeomFromText('POINT(6 5)');
+check table t1 extended;
+drop table t1;
+
--echo End of 4.1 tests
#
@@ -591,6 +641,17 @@ SELECT AsText(GeometryFromText(CONCAT(
--enable_query_log
SELECT 1;
+-- source include/gis_keys.inc
+
+#
+# Bug #31155 gis types in union'd select cause crash
+#
+
+create table `t1` (`col002` point)engine=myisam;
+insert into t1 values (),(),();
+select min(`col002`) from t1 union select `col002` from t1;
+drop table t1;
+
--echo End of 5.0 tests
diff --git a/mysql-test/t/grant.test b/mysql-test/t/grant.test
index 8d909d63f51..16cccd1a1f4 100644
--- a/mysql-test/t/grant.test
+++ b/mysql-test/t/grant.test
@@ -1235,6 +1235,7 @@ DROP DATABASE mysqltest1;
DROP DATABASE mysqltest2;
DROP USER mysqltest_1@localhost;
+DROP USER mysqltest_2@localhost;
#
# Bug#27878: Unchecked privileges on a view referring to a table from another
@@ -1260,6 +1261,7 @@ connection default;
REVOKE UPDATE (f1) ON `test`.`t1` FROM 'mysqltest_1'@'localhost';
REVOKE SELECT ON `test`.* FROM 'mysqltest_1'@'localhost';
REVOKE ALL ON db27878.* FROM 'mysqltest_1'@'localhost';
+DROP USER mysqltest_1@localhost;
DROP DATABASE db27878;
use test;
DROP TABLE t1;
@@ -1277,3 +1279,102 @@ drop user юзер_юзер@localhost;
--error ER_WRONG_STRING_LENGTH
grant select on test.* to очень_длинный_юзер@localhost;
set names default;
+
+#
+# Bug #20901 - CREATE privilege is enough to insert into a table
+#
+
+create database mysqltest;
+use mysqltest;
+
+grant create on mysqltest.* to mysqltest@localhost;
+create table t1 (i INT);
+
+connect (user1,localhost,mysqltest,,mysqltest);
+connection user1;
+# show we don't have INSERT
+--error 1142
+insert into t1 values (1);
+# show we have CREATE
+create table t2 (i INT);
+create table t4 (i INT);
+
+connection default;
+grant select, insert on mysqltest.t2 to mysqltest@localhost;
+grant insert on mysqltest.t4 to mysqltest@localhost;
+# to specify ACLs for non-existent objects, must explictly |CREATE
+grant create, insert on mysqltest.t5 to mysqltest@localhost;
+grant create, insert on mysqltest.t6 to mysqltest@localhost;
+flush privileges;
+
+connection user1;
+insert into t2 values (1);
+
+
+# CREATE IF NOT EXISTS...SELECT, t1 exists, no INSERT, must fail
+--error 1142
+create table if not exists t1 select * from t2;
+
+# CREATE IF NOT EXISTS...SELECT, no t3 yet, no INSERT, must fail
+--error 1142
+create table if not exists t3 select * from t2;
+
+# CREATE IF NOT EXISTS...SELECT, t4 exists, have INSERT, must succeed
+create table if not exists t4 select * from t2;
+
+# CREATE IF NOT EXISTS...SELECT, no t5 yet, have INSERT, must succeed
+create table if not exists t5 select * from t2;
+
+
+# CREATE...SELECT, no t6 yet, have INSERT, must succeed
+create table t6 select * from t2;
+
+# CREATE...SELECT, no t7 yet, no INSERT, must fail
+--error 1142
+create table t7 select * from t2;
+
+# CREATE...SELECT, t4 exists, have INSERT, must still fail (exists)
+--error 1050
+create table t4 select * from t2;
+
+# CREATE...SELECT, t1 exists, no INSERT, must fail
+--error 1142
+create table t1 select * from t2;
+
+
+connection default;
+drop table t1,t2,t4,t5,t6;
+
+revoke create on mysqltest.* from mysqltest@localhost;
+revoke select, insert on mysqltest.t2 from mysqltest@localhost;
+revoke insert on mysqltest.t4 from mysqltest@localhost;
+revoke create, insert on mysqltest.t5 from mysqltest@localhost;
+revoke create, insert on mysqltest.t6 from mysqltest@localhost;
+drop user mysqltest@localhost;
+
+disconnect user1;
+drop database mysqltest;
+use test;
+
+
+#
+# Bug #16470 crash on grant if old grant tables
+#
+--echo FLUSH PRIVILEGES without procs_priv table.
+RENAME TABLE mysql.procs_priv TO mysql.procs_gone;
+--error ER_NO_SUCH_TABLE
+FLUSH PRIVILEGES;
+--echo Assigning privileges without procs_priv table.
+CREATE DATABASE mysqltest1;
+CREATE PROCEDURE mysqltest1.test() SQL SECURITY DEFINER
+ SELECT 1;
+--error ER_NO_SUCH_TABLE
+GRANT EXECUTE ON FUNCTION mysqltest1.test TO mysqltest_1@localhost;
+GRANT ALL PRIVILEGES ON test.* TO mysqltest_1@localhost;
+CALL mysqltest1.test();
+DROP DATABASE mysqltest1;
+RENAME TABLE mysql.procs_gone TO mysql.procs_priv;
+FLUSH PRIVILEGES;
+
+
+--echo End of 5.1 tests
diff --git a/mysql-test/t/grant2.test b/mysql-test/t/grant2.test
index f6075ba2ee4..0f0c92e82eb 100644
--- a/mysql-test/t/grant2.test
+++ b/mysql-test/t/grant2.test
@@ -585,5 +585,37 @@ drop user mysqltest_1@localhost;
drop user mysqltest_2@localhost;
+#
+# Bug #30468: column level privileges not respected when joining tables
+#
+CREATE DATABASE db1;
+
+USE db1;
+CREATE TABLE t1 (a INT, b INT);
+INSERT INTO t1 VALUES (1,1),(2,2);
+
+CREATE TABLE t2 (b INT, c INT);
+INSERT INTO t2 VALUES (1,100),(2,200);
+
+GRANT SELECT ON t1 TO mysqltest1@localhost;
+GRANT SELECT (b) ON t2 TO mysqltest1@localhost;
+
+connect (conn1,localhost,mysqltest1,,);
+connection conn1;
+USE db1;
+--error ER_COLUMNACCESS_DENIED_ERROR
+SELECT c FROM t2;
+--error ER_COLUMNACCESS_DENIED_ERROR
+SELECT * FROM t2;
+--error ER_COLUMNACCESS_DENIED_ERROR
+SELECT * FROM t1 JOIN t2 USING (b);
+
+connection default;
+disconnect conn1;
+DROP TABLE db1.t1, db1.t2;
+DROP USER mysqltest1@localhost;
+DROP DATABASE db1;
+
+
--echo End of 5.0 tests
diff --git a/mysql-test/t/group_by.test b/mysql-test/t/group_by.test
index ae616df0dfd..3211db5d6ed 100644
--- a/mysql-test/t/group_by.test
+++ b/mysql-test/t/group_by.test
@@ -790,6 +790,40 @@ drop table t1;
SET SQL_MODE = '';
#
+# Bug #32202: ORDER BY not working with GROUP BY
+#
+
+CREATE TABLE t1(
+ id INT AUTO_INCREMENT PRIMARY KEY,
+ c1 INT NOT NULL,
+ c2 INT NOT NULL,
+ UNIQUE KEY (c2,c1));
+
+INSERT INTO t1(c1,c2) VALUES (5,1), (4,1), (3,5), (2,3), (1,3);
+
+# Show that the test cases from the bug report pass
+SELECT * FROM t1 ORDER BY c1;
+SELECT * FROM t1 GROUP BY id ORDER BY c1;
+
+# Show that DESC is handled correctly
+SELECT * FROM t1 GROUP BY id ORDER BY id DESC;
+
+# Show that results are correctly ordered when ORDER BY fields
+# are a subset of GROUP BY ones
+SELECT * FROM t1 GROUP BY c2 ,c1, id ORDER BY c2, c1;
+SELECT * FROM t1 GROUP BY c2, c1, id ORDER BY c2 DESC, c1;
+SELECT * FROM t1 GROUP BY c2, c1, id ORDER BY c2 DESC, c1 DESC;
+
+# Show that results are correctly ordered when GROUP BY fields
+# are a subset of ORDER BY ones
+SELECT * FROM t1 GROUP BY c2 ORDER BY c2, c1;
+SELECT * FROM t1 GROUP BY c2 ORDER BY c2 DESC, c1;
+SELECT * FROM t1 GROUP BY c2 ORDER BY c2 DESC, c1 DESC;
+
+DROP TABLE t1;
+
+
+--echo End of 5.0 tests
# Bug #21174: Index degrades sort performance and
# optimizer does not honor IGNORE INDEX.
# a.k.a WL3527.
@@ -811,6 +845,7 @@ EXPLAIN SELECT a FROM t1 IGNORE INDEX (PRIMARY,i2);
EXPLAIN SELECT a FROM t1 IGNORE INDEX FOR JOIN (PRIMARY,i2);
EXPLAIN SELECT a FROM t1 IGNORE INDEX FOR GROUP BY (PRIMARY,i2) GROUP BY a;
EXPLAIN SELECT a FROM t1 IGNORE INDEX FOR ORDER BY (PRIMARY,i2) ORDER BY a;
+SELECT a FROM t1 IGNORE INDEX FOR ORDER BY (PRIMARY,i2) ORDER BY a;
EXPLAIN SELECT a FROM t1 IGNORE INDEX FOR ORDER BY (PRIMARY)
IGNORE INDEX FOR GROUP BY (i2) GROUP BY a;
EXPLAIN SELECT a FROM t1 IGNORE INDEX (PRIMARY) IGNORE INDEX FOR ORDER BY (i2);
@@ -910,3 +945,51 @@ EXPLAIN SELECT b from t2 GROUP BY b;
SELECT b from t2 GROUP BY b;
DROP TABLE t1;
+
+#
+# Bug #31797: error while parsing subqueries -- WHERE is parsed as HAVING
+#
+CREATE TABLE t1 ( a INT, b INT );
+
+SELECT b c, (SELECT a FROM t1 WHERE b = c)
+FROM t1;
+
+SELECT b c, (SELECT a FROM t1 WHERE b = c)
+FROM t1
+HAVING b = 10;
+
+--error ER_ILLEGAL_REFERENCE
+SELECT MAX(b) c, (SELECT a FROM t1 WHERE b = c)
+FROM t1
+HAVING b = 10;
+
+SET @old_sql_mode = @@sql_mode;
+SET @@sql_mode='ONLY_FULL_GROUP_BY';
+
+SELECT b c, (SELECT a FROM t1 WHERE b = c)
+FROM t1;
+
+--error ER_NON_GROUPING_FIELD_USED
+SELECT b c, (SELECT a FROM t1 WHERE b = c)
+FROM t1
+HAVING b = 10;
+
+--error ER_ILLEGAL_REFERENCE
+SELECT MAX(b) c, (SELECT a FROM t1 WHERE b = c)
+FROM t1
+HAVING b = 10;
+
+INSERT INTO t1 VALUES (1, 1);
+SELECT b c, (SELECT a FROM t1 WHERE b = c)
+FROM t1;
+
+INSERT INTO t1 VALUES (2, 1);
+--error ER_SUBQUERY_NO_1_ROW
+SELECT b c, (SELECT a FROM t1 WHERE b = c)
+FROM t1;
+
+DROP TABLE t1;
+SET @@sql_mode = @old_sql_mode;
+
+
+
diff --git a/mysql-test/t/group_min_max.test b/mysql-test/t/group_min_max.test
index cf25b4c61be..7ec7e58ee19 100644
--- a/mysql-test/t/group_min_max.test
+++ b/mysql-test/t/group_min_max.test
@@ -890,6 +890,7 @@ FLUSH STATUS;
DELETE FROM t3 WHERE (SELECT MAX(b) FROM t1 GROUP BY a HAVING a < 2) > 10000;
SHOW STATUS LIKE 'handler_read__e%';
FLUSH STATUS;
+--error ER_SUBQUERY_NO_1_ROW
DELETE FROM t3 WHERE (SELECT (SELECT MAX(b) FROM t1 GROUP BY a HAVING a < 2) x
FROM t1) > 10000;
SHOW STATUS LIKE 'handler_read__e%';
@@ -913,7 +914,31 @@ SELECT SQL_BIG_RESULT DISTINCT(a) FROM t1;
DROP TABLE t1;
+#
+# Bug #32268: Indexed queries give bogus MIN and MAX results
+#
+
+CREATE TABLE t1 (a INT, b INT);
+INSERT INTO t1 (a, b) VALUES (1,1), (1,2), (1,3);
+INSERT INTO t1 SELECT a + 1, b FROM t1;
+INSERT INTO t1 SELECT a + 2, b FROM t1;
+EXPLAIN
+SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a DESC;
+SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a DESC;
+CREATE INDEX break_it ON t1 (a, b);
+EXPLAIN
+SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a;
+SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a;
+EXPLAIN
+SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a DESC;
+SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a DESC;
+
+EXPLAIN
+SELECT a, MIN(b), MAX(b), AVG(b) FROM t1 GROUP BY a ORDER BY a DESC;
+SELECT a, MIN(b), MAX(b), AVG(b) FROM t1 GROUP BY a ORDER BY a DESC;
+
+DROP TABLE t1;
diff --git a/mysql-test/t/information_schema.test b/mysql-test/t/information_schema.test
index 9ad658645bd..2a9319fe010 100644
--- a/mysql-test/t/information_schema.test
+++ b/mysql-test/t/information_schema.test
@@ -807,7 +807,8 @@ DROP FUNCTION func2;
select column_type, group_concat(table_schema, '.', table_name), count(*) as num
from information_schema.columns where
table_schema='information_schema' and
-(column_type = 'varchar(7)' or column_type = 'varchar(20)')
+(column_type = 'varchar(7)' or column_type = 'varchar(20)'
+ or column_type = 'varchar(27)')
group by column_type order by num;
#
@@ -1090,6 +1091,14 @@ show columns from t1;
drop table t1;
--echo End of 5.0 tests.
+
+#
+# Bug#30079 A check for "hidden" I_S tables is flawed
+#
+--error 1109
+show fields from information_schema.table_names;
+--error 1109
+show keys from information_schema.table_names;
#
# Show engines
#
@@ -1134,6 +1143,7 @@ END$$
DELIMITER ;$$
+let $wait_timeout= 300;
let $wait_condition=select count(*) = 0 from information_schema.events where event_name='event_status';
--source include/wait_condition.inc
@@ -1178,4 +1188,64 @@ select count(*) from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='mysql' AND TA
select count(*) from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='mysql' AND TABLE_NAME='';
select count(*) from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='' AND TABLE_NAME='';
select count(*) from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='' AND TABLE_NAME='nonexisting';
+
+#
+# Bug#30689 Wrong content in I_S.VIEWS.VIEW_DEFINITION if VIEW is based on I_S
+#
+CREATE VIEW v1
+AS SELECT *
+FROM INFORMATION_SCHEMA.TABLES;
+SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS where TABLE_NAME = 'v1';
+DROP VIEW v1;
+
+#
+# Bug#30795 Query on INFORMATION_SCHEMA.SCHEMATA, wrong result
+#
+SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA
+WHERE SCHEMA_NAME ='information_schema';
+
+#
+# Bug#31381 Error in retrieving Data from INFORMATION_SCHEMA
+#
+SELECT TABLE_COLLATION FROM INFORMATION_SCHEMA.TABLES
+WHERE TABLE_SCHEMA='mysql' and TABLE_NAME= 'db';
+
+#
+# Bug#31633 Information schema = NULL queries crash the server
+#
+select * from information_schema.columns where table_schema = NULL;
+select * from `information_schema`.`COLUMNS` where `TABLE_NAME` = NULL;
+select * from `information_schema`.`KEY_COLUMN_USAGE` where `TABLE_SCHEMA` = NULL;
+select * from `information_schema`.`KEY_COLUMN_USAGE` where `TABLE_NAME` = NULL;
+select * from `information_schema`.`PARTITIONS` where `TABLE_SCHEMA` = NULL;
+select * from `information_schema`.`PARTITIONS` where `TABLE_NAME` = NULL;
+select * from `information_schema`.`REFERENTIAL_CONSTRAINTS` where `CONSTRAINT_SCHEMA` = NULL;
+select * from `information_schema`.`REFERENTIAL_CONSTRAINTS` where `TABLE_NAME` = NULL;
+select * from information_schema.schemata where schema_name = NULL;
+select * from `information_schema`.`STATISTICS` where `TABLE_SCHEMA` = NULL;
+select * from `information_schema`.`STATISTICS` where `TABLE_NAME` = NULL;
+select * from information_schema.tables where table_schema = NULL;
+select * from information_schema.tables where table_catalog = NULL;
+select * from information_schema.tables where table_name = NULL;
+select * from `information_schema`.`TABLE_CONSTRAINTS` where `TABLE_SCHEMA` = NULL;
+select * from `information_schema`.`TABLE_CONSTRAINTS` where `TABLE_NAME` = NULL;
+select * from `information_schema`.`TRIGGERS` where `EVENT_OBJECT_SCHEMA` = NULL;
+select * from `information_schema`.`TRIGGERS` where `EVENT_OBJECT_TABLE` = NULL;
+select * from `information_schema`.`VIEWS` where `TABLE_SCHEMA` = NULL;
+select * from `information_schema`.`VIEWS` where `TABLE_NAME` = NULL;
+
+#
+# Bug#31630 debug assert with explain extended select ... from i_s
+#
+explain extended select 1 from information_schema.tables;
+
+#
+# Bug#32775 problems with SHOW EVENTS and Information_Schema
+#
+use information_schema;
+show events;
+show events from information_schema;
+show events where Db= 'information_schema';
+use test;
+
--echo End of 5.1 tests.
diff --git a/mysql-test/t/innodb-semi-consistent-master.opt b/mysql-test/t/innodb-semi-consistent-master.opt
new file mode 100644
index 00000000000..2746e4e184e
--- /dev/null
+++ b/mysql-test/t/innodb-semi-consistent-master.opt
@@ -0,0 +1 @@
+--innodb_locks_unsafe_for_binlog=true --innodb_lock_wait_timeout=2
diff --git a/mysql-test/t/innodb-semi-consistent.test b/mysql-test/t/innodb-semi-consistent.test
new file mode 100644
index 00000000000..c33126b93ff
--- /dev/null
+++ b/mysql-test/t/innodb-semi-consistent.test
@@ -0,0 +1,50 @@
+-- source include/not_embedded.inc
+-- source include/have_innodb.inc
+
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+
+# basic tests of semi-consistent reads
+
+connect (a,localhost,root,,);
+connect (b,localhost,root,,);
+connection a;
+set session transaction isolation level read committed;
+create table t1(a int not null) engine=innodb DEFAULT CHARSET=latin1;
+insert into t1 values (1),(2),(3),(4),(5),(6),(7);
+set autocommit=0;
+# this should lock the entire table
+select * from t1 where a=3 lock in share mode;
+connection b;
+set session transaction isolation level read committed;
+set autocommit=0;
+-- error ER_LOCK_WAIT_TIMEOUT
+update t1 set a=10 where a=5;
+connection a;
+commit;
+connection b;
+update t1 set a=10 where a=5;
+connection a;
+-- error ER_LOCK_WAIT_TIMEOUT
+select * from t1 where a=2 for update;
+# this should lock the records (1),(2)
+select * from t1 where a=2 limit 1 for update;
+connection b;
+update t1 set a=11 where a=6;
+-- error ER_LOCK_WAIT_TIMEOUT
+update t1 set a=12 where a=2;
+-- error ER_LOCK_WAIT_TIMEOUT
+update t1 set a=13 where a=1;
+connection a;
+commit;
+connection b;
+update t1 set a=14 where a=1;
+commit;
+connection a;
+select * from t1;
+drop table t1;
+
+connection default;
+disconnect a;
+disconnect b;
diff --git a/mysql-test/t/innodb-ucs2.test b/mysql-test/t/innodb-ucs2.test
index 6647a9d0845..7b91ef37d3f 100644
--- a/mysql-test/t/innodb-ucs2.test
+++ b/mysql-test/t/innodb-ucs2.test
@@ -1,6 +1,10 @@
-- source include/have_innodb.inc
-- source include/have_ucs2.inc
+--disable_warnings
+drop table if exists t1, t2;
+--enable_warnings
+
#
# BUG 14056 Column prefix index on UTF-8 primary key column causes: Can't find record..
#
diff --git a/mysql-test/t/innodb.test b/mysql-test/t/innodb.test
index cc1ef6f9730..bfe7d4ea9b4 100644
--- a/mysql-test/t/innodb.test
+++ b/mysql-test/t/innodb.test
@@ -327,39 +327,6 @@ select * from t2;
drop table t1,t2;
#
-# Search on unique key
-#
-
-CREATE TABLE t1 (
- id int(11) NOT NULL auto_increment,
- ggid varchar(32) binary DEFAULT '' NOT NULL,
- email varchar(64) DEFAULT '' NOT NULL,
- passwd varchar(32) binary DEFAULT '' NOT NULL,
- PRIMARY KEY (id),
- UNIQUE ggid (ggid)
-) ENGINE=innodb;
-
-insert into t1 (ggid,passwd) values ('test1','xxx');
-insert into t1 (ggid,passwd) values ('test2','yyy');
--- error ER_DUP_ENTRY
-insert into t1 (ggid,passwd) values ('test2','this will fail');
--- error ER_DUP_ENTRY
-insert into t1 (ggid,id) values ('this will fail',1);
-
-select * from t1 where ggid='test1';
-select * from t1 where passwd='xxx';
-select * from t1 where id=2;
-
-replace into t1 (ggid,id) values ('this will work',1);
-replace into t1 (ggid,passwd) values ('test2','this will work');
--- error ER_DUP_ENTRY
-update t1 set id=100,ggid='test2' where id=1;
-select * from t1;
-select * from t1 where id=1;
-select * from t1 where id=999;
-drop table t1;
-
-#
# ORDER BY on not primary key
#
@@ -754,6 +721,38 @@ select * from t2;
drop table t1,t2;
#
+# Bug #29136 erred multi-delete on trans table does not rollback
+#
+
+# prepare
+--disable_warnings
+drop table if exists t1, t2;
+--enable_warnings
+CREATE TABLE t1 (a int, PRIMARY KEY (a));
+CREATE TABLE t2 (a int, PRIMARY KEY (a)) ENGINE=InnoDB;
+create trigger trg_del_t2 after delete on t2 for each row
+ insert into t1 values (1);
+insert into t1 values (1);
+insert into t2 values (1),(2);
+
+
+# exec cases A, B - see multi_update.test
+
+# A. send_error() w/o send_eof() branch
+
+--error ER_DUP_ENTRY
+delete t2 from t2;
+
+# check
+
+select count(*) from t2 /* must be 2 as restored after rollback caused by the error */;
+
+# cleanup bug#29136
+
+drop table t1, t2;
+
+
+#
# Testing of IFNULL
#
create table t1 (a int, b int) engine=innodb;
@@ -2323,6 +2322,88 @@ CREATE TABLE t1 (
c29 CHAR(255), c30 CHAR(255), c31 CHAR(255), c32 CHAR(255)
) ENGINE = InnoDB;
+#
+# Bug #31860 InnoDB assumes AUTOINC values can only be positive.
+#
+DROP TABLE IF EXISTS t1;
+CREATE TABLE t1(
+ id BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY
+ ) ENGINE=InnoDB;
+INSERT INTO t1 VALUES(-10);
+SELECT * FROM t1;
+#
+# NOTE: The server really needs to be restarted at this point
+# for the test to be useful.
+#
+# Without the fix InnoDB would trip over an assertion here.
+INSERT INTO t1 VALUES(NULL);
+# The next value should be 1 and not -9 or a -ve number
+SELECT * FROM t1;
+DROP TABLE t1;
+
+#
+# Bug #21409 Incorrect result returned when in READ-COMMITTED with
+# query_cache ON
+#
+CONNECT (c1,localhost,root,,);
+CONNECT (c2,localhost,root,,);
+CONNECTION c1;
+SET TX_ISOLATION='read-committed';
+SET AUTOCOMMIT=0;
+DROP TABLE IF EXISTS t1, t2;
+CREATE TABLE t1 ( a int ) ENGINE=InnoDB;
+CREATE TABLE t2 LIKE t1;
+SELECT * FROM t2;
+CONNECTION c2;
+SET TX_ISOLATION='read-committed';
+SET AUTOCOMMIT=0;
+INSERT INTO t1 VALUES (1);
+COMMIT;
+CONNECTION c1;
+SELECT * FROM t1 WHERE a=1;
+DISCONNECT c1;
+DISCONNECT c2;
+CONNECT (c1,localhost,root,,);
+CONNECT (c2,localhost,root,,);
+CONNECTION c1;
+SET TX_ISOLATION='read-committed';
+SET AUTOCOMMIT=0;
+SELECT * FROM t2;
+CONNECTION c2;
+SET TX_ISOLATION='read-committed';
+SET AUTOCOMMIT=0;
+INSERT INTO t1 VALUES (2);
+COMMIT;
+CONNECTION c1;
+# The result set below should be the same for both selects
+SELECT * FROM t1 WHERE a=2;
+SELECT * FROM t1 WHERE a=2;
+DROP TABLE t1;
+DROP TABLE t2;
+DISCONNECT c1;
+DISCONNECT c2;
+CONNECTION default;
+
+#
+# Bug #29157 UPDATE, changed rows incorrect
+#
+create table t1 (i int, j int) engine=innodb;
+insert into t1 (i, j) values (1, 1), (2, 2);
+--enable_info
+update t1 set j = 2;
+--disable_info
+drop table t1;
+
+#
+# Bug #32440 InnoDB free space info does not appear in SHOW TABLE STATUS or
+# I_S
+#
+create table t1 (id int) comment='this is a comment' engine=innodb;
+select table_comment, data_free > 0 as data_free_is_set
+ from information_schema.tables
+ where table_schema='test' and table_name = 't1';
+drop table t1;
+
#######################################################################
# #
# Please, DO NOT TOUCH this file as well as the innodb.result file. #
diff --git a/mysql-test/t/innodb_autoinc_lock_mode_zero-master.opt b/mysql-test/t/innodb_autoinc_lock_mode_zero-master.opt
new file mode 100644
index 00000000000..fad0da2ac2e
--- /dev/null
+++ b/mysql-test/t/innodb_autoinc_lock_mode_zero-master.opt
@@ -0,0 +1 @@
+--innodb-autoinc-lock-mode=0
diff --git a/mysql-test/t/innodb_autoinc_lock_mode_zero.test b/mysql-test/t/innodb_autoinc_lock_mode_zero.test
new file mode 100644
index 00000000000..96f748673c0
--- /dev/null
+++ b/mysql-test/t/innodb_autoinc_lock_mode_zero.test
@@ -0,0 +1,44 @@
+# This test runs with old-style locking, as:
+# --innodb-autoinc-lock-mode=0
+
+-- source include/have_innodb.inc
+
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+
+
+#
+# Search on unique key
+#
+
+CREATE TABLE t1 (
+ id int(11) NOT NULL auto_increment,
+ ggid varchar(32) binary DEFAULT '' NOT NULL,
+ email varchar(64) DEFAULT '' NOT NULL,
+ passwd varchar(32) binary DEFAULT '' NOT NULL,
+ PRIMARY KEY (id),
+ UNIQUE ggid (ggid)
+) ENGINE=innodb;
+
+insert into t1 (ggid,passwd) values ('test1','xxx');
+insert into t1 (ggid,passwd) values ('test2','yyy');
+-- error ER_DUP_ENTRY
+insert into t1 (ggid,passwd) values ('test2','this will fail');
+-- error ER_DUP_ENTRY
+insert into t1 (ggid,id) values ('this will fail',1);
+
+select * from t1 where ggid='test1';
+select * from t1 where passwd='xxx';
+select * from t1 where id=2;
+
+replace into t1 (ggid,id) values ('this will work',1);
+replace into t1 (ggid,passwd) values ('test2','this will work');
+-- error ER_DUP_ENTRY
+update t1 set id=100,ggid='test2' where id=1;
+select * from t1;
+select * from t1 where id=1;
+select * from t1 where id=999;
+drop table t1;
+
+--echo End of tests
diff --git a/mysql-test/t/innodb_gis.test b/mysql-test/t/innodb_gis.test
index 9675b6b69dc..1adb14ea482 100644
--- a/mysql-test/t/innodb_gis.test
+++ b/mysql-test/t/innodb_gis.test
@@ -1,6 +1,7 @@
--source include/have_innodb.inc
SET storage_engine=innodb;
--source include/gis_generic.inc
+--source include/gis_keys.inc
#
# Bug #15680 (SPATIAL key in innodb)
diff --git a/mysql-test/t/innodb_mysql.test b/mysql-test/t/innodb_mysql.test
index 93495538141..a907866f726 100644
--- a/mysql-test/t/innodb_mysql.test
+++ b/mysql-test/t/innodb_mysql.test
@@ -10,5 +10,6 @@ let $engine_type= InnoDB;
let $other_engine_type= MEMORY;
# InnoDB does support FOREIGN KEYFOREIGN KEYs
let $test_foreign_keys= 1;
-
+set global innodb_support_xa=default;
+set session innodb_support_xa=default;
--source include/mix1.inc
diff --git a/mysql-test/t/insert.test b/mysql-test/t/insert.test
index 59da875bb24..c58fb61ad30 100644
--- a/mysql-test/t/insert.test
+++ b/mysql-test/t/insert.test
@@ -388,6 +388,92 @@ SELECT * FROM t2;
DROP TABLE t1, t2;
#
+# Bug #26788: mysqld (debug) aborts when inserting specific numbers into char
+# fields
+#
+
+CREATE TABLE t1 (
+ a char(20) NOT NULL,
+ b char(7) DEFAULT NULL,
+ c char(4) DEFAULT NULL
+);
+
+INSERT INTO t1(a,b,c) VALUES (9.999999e+0, 9.999999e+0, 9.999e+0);
+INSERT INTO t1(a,b,c) VALUES (1.225e-05, 1.225e-05, 1.225e-05);
+INSERT INTO t1(a,b) VALUES (1.225e-04, 1.225e-04);
+INSERT INTO t1(a,b) VALUES (1.225e-01, 1.225e-01);
+INSERT INTO t1(a,b) VALUES (1.225877e-01, 1.225877e-01);
+INSERT INTO t1(a,b) VALUES (1.225e+01, 1.225e+01);
+INSERT INTO t1(a,b,c) VALUES (1.225e+01, 1.225e+01, 1.225e+01);
+INSERT INTO t1(a,b) VALUES (1.225e+05, 1.225e+05);
+INSERT INTO t1(a,b) VALUES (1.225e+10, 1.225e+10);
+INSERT INTO t1(a,b) VALUES (1.225e+15, 1.225e+15);
+INSERT INTO t1(a,b) VALUES (5000000e+0, 5000000e+0);
+INSERT INTO t1(a,b) VALUES (1.25e+78, 1.25e+78);
+INSERT INTO t1(a,b) VALUES (1.25e-94, 1.25e-94);
+INSERT INTO t1(a,b) VALUES (1.25e+203, 1.25e+203);
+INSERT INTO t1(a,b) VALUES (1.25e-175, 1.25e-175);
+INSERT INTO t1(a,c) VALUES (1.225e+0, 1.225e+0);
+INSERT INTO t1(a,c) VALUES (1.37e+0, 1.37e+0);
+INSERT INTO t1(a,c) VALUES (-1.37e+0, -1.37e+0);
+INSERT INTO t1(a,c) VALUES (1.87e-3, 1.87e-3);
+INSERT INTO t1(a,c) VALUES (-1.87e-2, -1.87e-2);
+INSERT INTO t1(a,c) VALUES (5000e+0, 5000e+0);
+INSERT INTO t1(a,c) VALUES (-5000e+0, -5000e+0);
+# Expected results are "12.2" and "1.2e+78", but Windows returns "12.3" and
+# "1.3e+78" due to different rounding rules
+--replace_result 12.3 12.2 1.3e+78 1.2e+78
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+CREATE TABLE t1 (
+ a char(20) NOT NULL,
+ b char(7) DEFAULT NULL,
+ c char(5)
+);
+
+
+INSERT INTO t1(a,b,c) VALUES (9.999999e+0, 9.999999e+0, 9.999e+0);
+INSERT INTO t1(a,b,c) VALUES (1.225e-05, 1.225e-05, 1.225e-05);
+INSERT INTO t1(a,b) VALUES (1.225e-04, 1.225e-04);
+INSERT INTO t1(a,b) VALUES (1.225e-01, 1.225e-01);
+INSERT INTO t1(a,b) VALUES (1.225877e-01, 1.225877e-01);
+INSERT INTO t1(a,b) VALUES (1.225e+01, 1.225e+01);
+INSERT INTO t1(a,b,c) VALUES (1.225e+01, 1.225e+01, 1.225e+01);
+INSERT INTO t1(a,b) VALUES (1.225e+05, 1.225e+05);
+INSERT INTO t1(a,b) VALUES (1.225e+10, 1.225e+10);
+INSERT INTO t1(a,b) VALUES (1.225e+15, 1.225e+15);
+INSERT INTO t1(a,b) VALUES (5000000e+0, 5000000e+0);
+INSERT INTO t1(a,b) VALUES (1.25e+78, 1.25e+78);
+INSERT INTO t1(a,b) VALUES (1.25e-94, 1.25e-94);
+INSERT INTO t1(a,b) VALUES (1.25e+203, 1.25e+203);
+INSERT INTO t1(a,b) VALUES (1.25e-175, 1.25e-175);
+INSERT INTO t1(a,c) VALUES (1.225e+0, 1.225e+0);
+INSERT INTO t1(a,c) VALUES (1.37e+0, 1.37e+0);
+INSERT INTO t1(a,c) VALUES (-1.37e+0, -1.37e+0);
+INSERT INTO t1(a,c) VALUES (1.87e-3, 1.87e-3);
+INSERT INTO t1(a,c) VALUES (-1.87e-2, -1.87e-2);
+INSERT INTO t1(a,c) VALUES (5000e+0, 5000e+0);
+INSERT INTO t1(a,c) VALUES (-5000e+0, -5000e+0);
+
+# Expected results are "12.2" and "1.2e+78", but Windows returns "12.3" and
+# "1.3e+78" due to different rounding rules
+--replace_result 12.3 12.2 1.3e+78 1.2e+78
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+#
+# Bug #31152: assertion in Field_str::store(double)
+#
+
+CREATE TABLE t (a CHAR(10),b INT);
+INSERT INTO t VALUES (),(),();
+INSERT INTO t(a) SELECT rand() FROM t;
+DROP TABLE t;
+
+#
# Bug #30453: String not cast to int correctly
#
diff --git a/mysql-test/t/insert_select.test b/mysql-test/t/insert_select.test
index ace51ef61c7..499db086877 100644
--- a/mysql-test/t/insert_select.test
+++ b/mysql-test/t/insert_select.test
@@ -372,3 +372,15 @@ INSERT INTO t1 (prev_id) SELECT id
SELECT * FROM t1;
DROP TABLE t1,t2;
+
+--echo #
+--echo # Bug#30384: Having SQL_BUFFER_RESULT option in the
+--echo # CREATE .. KEY(..) .. SELECT led to creating corrupted index.
+--echo #
+create table t1(f1 int);
+insert into t1 values(1),(2),(3);
+create table t2 (key(f1)) engine=myisam select sql_buffer_result f1 from t1;
+check table t2 extended;
+drop table t1,t2;
+--echo ##################################################################
+
diff --git a/mysql-test/t/join.test b/mysql-test/t/join.test
index 14c98431970..ed1b84bb5ec 100644
--- a/mysql-test/t/join.test
+++ b/mysql-test/t/join.test
@@ -698,4 +698,33 @@ select '^^: The above should be ~= 20 + cost(select * from t1). Value less than
drop table t1, t2;
+#
+# Bug #31094: Forcing index-based sort doesn't work anymore if joins are
+# done
+#
+
+CREATE TABLE t1 (a INT PRIMARY KEY, b INT);
+CREATE TABLE t2 (c INT PRIMARY KEY, d INT);
+
+INSERT INTO t1 VALUES(1,NULL),(2,NULL),(3,NULL),(4,NULL);
+INSERT INTO t1 SELECT a + 4, b FROM t1;
+INSERT INTO t1 SELECT a + 8, b FROM t1;
+INSERT INTO t1 SELECT a + 16, b FROM t1;
+INSERT INTO t1 SELECT a + 32, b FROM t1;
+INSERT INTO t1 SELECT a + 64, b FROM t1;
+INSERT INTO t2 SELECT a, b FROM t1;
+
+#expect indexed ORDER BY
+EXPLAIN SELECT * FROM t1 JOIN t2 ON b=c ORDER BY a LIMIT 2;
+EXPLAIN SELECT * FROM t1 JOIN t2 ON a=c ORDER BY a LIMIT 2;
+SELECT * FROM t1 JOIN t2 ON b=c ORDER BY a LIMIT 2;
+SELECT * FROM t1 JOIN t2 ON a=c ORDER BY a LIMIT 2;
+
+#expect filesort
+EXPLAIN SELECT * FROM t1 JOIN t2 ON b=c ORDER BY a;
+EXPLAIN SELECT * FROM t1 JOIN t2 ON a=c ORDER BY a;
+SELECT * FROM t1 JOIN t2 ON b=c ORDER BY a;
+SELECT * FROM t1 JOIN t2 ON a=c ORDER BY a;
+
+DROP TABLE IF EXISTS t1,t2;
--echo End of 5.0 tests.
diff --git a/mysql-test/t/key.test b/mysql-test/t/key.test
index f1eb8e68b49..9a4158d8e13 100644
--- a/mysql-test/t/key.test
+++ b/mysql-test/t/key.test
@@ -501,3 +501,63 @@ ORDER BY c.b, c.d
;
DROP TABLE t1, t2;
+
+#
+# Bug #31137: Assertion failed: primary_key_no == -1 || primary_key_no == 0
+#
+create table t1(a int not null, key aa(a),
+ b char(10) not null, unique key bb(b(1)),
+ c char(4) not null, unique key cc(c));
+desc t1;
+show create table t1;
+drop table t1;
+create table t1(a int not null, key aa(a),
+ b char(10) not null, unique key bb(b(1)),
+ c char(4) not null);
+desc t1;
+alter table t1 add unique key cc(c);
+desc t1;
+show create table t1;
+drop table t1;
+
+--echo End of 5.0 tests
+
+#
+# Bug #31148: bool close_thread_table(THD*, TABLE**): Assertion
+# `table->key_read == 0' failed.
+#
+
+--disable_warnings
+DROP TABLE IF EXISTS t1;
+--enable_warnings
+
+CREATE TABLE t1 (a INT PRIMARY KEY AUTO_INCREMENT);
+
+INSERT INTO t1 VALUES (), (), ();
+
+SELECT 1 AS c1
+FROM t1
+ORDER BY (
+ SELECT 1 AS c2
+ FROM t1
+ GROUP BY GREATEST(LAST_INSERT_ID(), t1.a) ASC
+ LIMIT 1);
+
+DROP TABLE t1;
+
+
+#
+# Bug #31974: Wrong EXPLAIN output
+#
+
+CREATE TABLE t1 (a INT, b INT, INDEX (a,b));
+INSERT INTO t1 (a, b)
+ VALUES
+ (1,1), (1,2), (1,3), (1,4), (1,5),
+ (2,2), (2,3), (2,1), (3,1), (4,1), (4,2), (4,3), (4,4), (4,5), (4,6);
+EXPLAIN SELECT 1 FROM t1 AS t1_outer WHERE
+ (SELECT max(b) FROM t1 GROUP BY a HAVING a < 2) > 12;
+SELECT 1 as RES FROM t1 AS t1_outer WHERE
+ (SELECT max(b) FROM t1 GROUP BY a HAVING a < 2) > 12;
+
+DROP TABLE t1;
diff --git a/mysql-test/t/kill.test b/mysql-test/t/kill.test
index 5d5095f7d61..3da4232502d 100644
--- a/mysql-test/t/kill.test
+++ b/mysql-test/t/kill.test
@@ -304,3 +304,21 @@ while ($i)
dec $i ;
}
--enable_query_log
+
+###########################################################################
+
+--echo #
+--echo # Bug#19723: kill of active connection yields different error code
+--echo # depending on platform.
+--echo #
+
+--echo
+--echo # Connection: con2.
+--connection con2
+
+KILL CONNECTION_ID();
+
+--echo # CR_SERVER_LOST, CR_SERVER_GONE_ERROR, depending on the timing
+--echo # of close of the connection socket
+--error 2013, 2006
+SELECT 1;
diff --git a/mysql-test/t/lock_multi.test b/mysql-test/t/lock_multi.test
index b2266c9bff1..0d36b79df78 100644
--- a/mysql-test/t/lock_multi.test
+++ b/mysql-test/t/lock_multi.test
@@ -150,7 +150,7 @@ send SELECT user.Select_priv FROM user, db WHERE user.user = db.user LIMIT 1;
connection locker;
let $wait_condition=
select count(*) = 1 from information_schema.processlist
- where state = "Locked" and info =
+ where state = "Waiting for table" and info =
"SELECT user.Select_priv FROM user, db WHERE user.user = db.user LIMIT 1";
--source include/wait_condition.inc
# Make test case independent from earlier grants.
@@ -343,4 +343,100 @@ handler t1 open;
connection default;
drop table t1;
+#
+# Bug#32395 Alter table under a impending global read lock causes a server crash
+#
+
+#
+# Test ALTER TABLE under LOCK TABLES and FLUSH TABLES WITH READ LOCK
+#
+
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+create table t1 (i int);
+connect (flush,localhost,root,,test,,);
+connection default;
+--echo connection: default
+lock tables t1 write;
+connection flush;
+--echo connection: flush
+--send flush tables with read lock;
+connection default;
+--echo connection: default
+let $wait_condition=
+ select count(*) = 1 from information_schema.processlist
+ where state = "Flushing tables";
+--source include/wait_condition.inc
+alter table t1 add column j int;
+connect (insert,localhost,root,,test,,);
+connection insert;
+--echo connection: insert
+let $wait_condition=
+ select count(*) = 1 from information_schema.processlist
+ where state = "Flushing tables";
+--source include/wait_condition.inc
+--send insert into t1 values (1,2);
+--echo connection: default
+connection default;
+let $wait_condition=
+ select count(*) = 1 from information_schema.processlist
+ where state = "Waiting for release of readlock";
+--source include/wait_condition.inc
+unlock tables;
+connection flush;
+--echo connection: flush
+--reap
+let $wait_condition=
+ select count(*) = 1 from information_schema.processlist
+ where state = "Waiting for release of readlock";
+--source include/wait_condition.inc
+select * from t1;
+unlock tables;
+connection insert;
+--reap
+connection default;
+select * from t1;
+drop table t1;
+disconnect flush;
+disconnect insert;
+
+#
+# Test that FLUSH TABLES under LOCK TABLES protects write locked tables
+# from a impending FLUSH TABLES WITH READ LOCK
+#
+
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+create table t1 (i int);
+connect (flush,localhost,root,,test,,);
+connection default;
+--echo connection: default
+lock tables t1 write;
+connection flush;
+--echo connection: flush
+--send flush tables with read lock;
+connection default;
+--echo connection: default
+let $wait_condition=
+ select count(*) = 1 from information_schema.processlist
+ where state = "Flushing tables";
+--source include/wait_condition.inc
+flush tables;
+let $wait_condition=
+ select count(*) = 1 from information_schema.processlist
+ where state = "Flushing tables";
+--source include/wait_condition.inc
+unlock tables;
+let $wait_condition=
+ select count(*) = 0 from information_schema.processlist
+ where state = "Flushing tables";
+--source include/wait_condition.inc
+connection flush;
+--reap
+connection default;
+disconnect flush;
+drop table t1;
+
--echo End of 5.1 tests
diff --git a/mysql-test/t/log_state.test b/mysql-test/t/log_state.test
index ec3644cbff1..a340238b724 100644
--- a/mysql-test/t/log_state.test
+++ b/mysql-test/t/log_state.test
@@ -179,16 +179,39 @@ SET GLOBAL READ_ONLY = OFF;
SET GLOBAL general_log = @old_general_log_state;
SET GLOBAL slow_query_log = @old_slow_log_state;
---enable_ps_protocol
-
#
-# Cleanup (must be done last to avoid delayed 'Quit' message in general log)
+# Bug #29131: SHOW VARIABLES reports variable 'log' but SET doesn't recognize it
#
-disconnect con1;
-# Remove the log files that was created in the "default location"
-# i.e var/run
---remove_file $MYSQLTEST_VARDIR/run/master.log
+SET @old_general_log_state = @@global.general_log;
+SET @old_slow_log_state = @@global.slow_query_log;
+
+SHOW VARIABLES LIKE 'general_log';
+SHOW VARIABLES LIKE 'log';
+SELECT @@general_log, @@log;
+SET GLOBAL log = 0;
+SHOW VARIABLES LIKE 'general_log';
+SHOW VARIABLES LIKE 'log';
+SELECT @@general_log, @@log;
+SET GLOBAL general_log = 1;
+SHOW VARIABLES LIKE 'general_log';
+SHOW VARIABLES LIKE 'log';
+SELECT @@general_log, @@log;
+
+SHOW VARIABLES LIKE 'slow_query_log';
+SHOW VARIABLES LIKE 'log_slow_queries';
+SELECT @@slow_query_log, @@log_slow_queries;
+SET GLOBAL log_slow_queries = 0;
+SHOW VARIABLES LIKE 'slow_query_log';
+SHOW VARIABLES LIKE 'log_slow_queries';
+SELECT @@slow_query_log, @@log_slow_queries;
+SET GLOBAL slow_query_log = 1;
+SHOW VARIABLES LIKE 'slow_query_log';
+SHOW VARIABLES LIKE 'log_slow_queries';
+SELECT @@slow_query_log, @@log_slow_queries;
+
+SET GLOBAL general_log = @old_general_log_state;
+SET GLOBAL slow_query_log = @old_slow_log_state;
#
# Bug #31604: server crash when setting slow_query_log_file/general_log_file
@@ -209,3 +232,14 @@ set global general_log_file= @old_general_log_file;
set global slow_query_log_file= @old_slow_query_log_file;
--echo End of 5.1 tests
+
+--enable_ps_protocol
+
+#
+# Cleanup (must be done last to avoid delayed 'Quit' message in general log)
+#
+disconnect con1;
+
+# Remove the log files that was created in the "default location"
+# i.e var/run
+--remove_file $MYSQLTEST_VARDIR/run/master.log
diff --git a/mysql-test/t/log_tables.test b/mysql-test/t/log_tables.test
index 12098b4543b..0c986c6d63a 100644
--- a/mysql-test/t/log_tables.test
+++ b/mysql-test/t/log_tables.test
@@ -811,6 +811,7 @@ SET GLOBAL slow_query_log = @old_slow_log_state;
# Bug#21557 entries in the general query log truncated at 1000 characters.
#
+select CONNECTION_ID() into @thread_id;
truncate table mysql.general_log;
set @old_general_log_state = @@global.general_log;
set global general_log = on;
@@ -921,6 +922,37 @@ prepare long_query from "select ? as long_query";
execute long_query using @lparam;
--enable_result_log
set global general_log = off;
-select command_type, argument from mysql.general_log;
+select command_type, argument from mysql.general_log where thread_id = @thread_id;
deallocate prepare long_query;
set global general_log = @old_general_log_state;
+
+#
+# Bug #31700: thd->examined_row_count not incremented for 'const' type queries
+#
+SET @old_slow_log_state = @@global.slow_query_log;
+
+SET SESSION long_query_time = 0;
+SET GLOBAL slow_query_log = ON;
+FLUSH LOGS;
+TRUNCATE TABLE mysql.slow_log;
+
+# Let there be three columns, unique, non-unique, and non-indexed:
+CREATE TABLE t1 (f1 SERIAL,f2 INT, f3 INT, PRIMARY KEY(f1), KEY(f2));
+INSERT INTO t1 VALUES (1,1,1);
+INSERT INTO t1 VALUES (2,2,2);
+INSERT INTO t1 VALUES (3,3,3);
+INSERT INTO t1 VALUES (4,4,4);
+
+SELECT SQL_NO_CACHE 'Bug#31700 - SCAN',f1,f2,f3,SLEEP(1.1) FROM t1 WHERE f3=4;
+SELECT SQL_NO_CACHE 'Bug#31700 - KEY', f1,f2,f3,SLEEP(1.1) FROM t1 WHERE f2=3;
+SELECT SQL_NO_CACHE 'Bug#31700 - PK', f1,f2,f3,SLEEP(1.1) FROM t1 WHERE f1=2;
+
+--replace_column 1 TIMESTAMP
+SELECT start_time, rows_examined, rows_sent, sql_text FROM mysql.slow_log WHERE sql_text LIKE '%Bug#31700%' ORDER BY start_time;
+
+DROP TABLE t1;
+
+TRUNCATE TABLE mysql.slow_log;
+
+SET GLOBAL slow_query_log = @old_slow_log_state;
+SET SESSION long_query_time =@old_long_query_time;
diff --git a/mysql-test/t/lowercase_view.test b/mysql-test/t/lowercase_view.test
index e9cc26bec18..d6612b3e6b9 100644
--- a/mysql-test/t/lowercase_view.test
+++ b/mysql-test/t/lowercase_view.test
@@ -138,3 +138,26 @@ create view v1Aa as select AaA.col1 from t1Aa as AaA;
show create view v1AA;
drop view v1AA;
drop table t1Aa;
+
+
+#
+# Bug #31562: HAVING and lower case
+#
+
+CREATE TABLE t1 (a int, b int);
+
+select X.a from t1 AS X group by X.b having (X.a = 1);
+select X.a from t1 AS X group by X.b having (x.a = 1);
+select X.a from t1 AS X group by X.b having (x.b = 1);
+
+CREATE OR REPLACE VIEW v1 AS
+select X.a from t1 AS X group by X.b having (X.a = 1);
+
+SHOW CREATE VIEW v1;
+
+SELECT * FROM v1;
+
+DROP VIEW v1;
+DROP TABLE t1;
+
+--echo End of 5.0 tests.
diff --git a/mysql-test/t/merge-big.test b/mysql-test/t/merge-big.test
new file mode 100644
index 00000000000..eddcbb59ed4
--- /dev/null
+++ b/mysql-test/t/merge-big.test
@@ -0,0 +1,150 @@
+#
+# Test of MERGE tables with multisession and many waits.
+#
+# This test takes rather long time so let us run it only in --big-test mode
+--source include/big_test.inc
+# We are using some debug-only features in this test
+--source include/have_debug.inc
+
+--disable_warnings
+drop table if exists t1,t2,t3,t4,t5,t6;
+--enable_warnings
+
+--echo #
+--echo # Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
+--echo # corrupts a MERGE table
+--echo # Problem #3
+--echo #
+# Two FLUSH TABLES within a LOCK TABLES segment could invalidate the lock.
+# This did *not* require a MERGE table.
+#
+# To increase reproducibility it was necessary to enter a sleep of 2
+# seconds at the end of wait_for_tables() after unlock of LOCK_open. In
+# 5.0 and 5.1 the sleep must be inserted in open_and_lock_tables() after
+# open_tables() instead. wait_for_tables() is not used in this case. The
+# problem was that FLUSH TABLES releases LOCK_open while having unlocked
+# and closed all tables. When this happened while a thread was in the
+# loop in mysql_lock_tables() right after wait_for_tables()
+# (open_tables()) and before retrying to lock, the thread got the lock.
+# And it did not notice that the table needed a refresh after the
+# [re-]open. So it executed its statement on the table.
+#
+# The first FLUSH TABLES kicked the INSERT out of thr_multi_lock() and
+# let it wait in wait_for_tables() (open_table()). The second FLUSH
+# TABLES must happen while the INSERT was on its way from
+# wait_for_tables() (open_table()) to the next call of thr_multi_lock().
+# This needed to be supported by a sleep to make it repeatable.
+#
+CREATE TABLE t1 (c1 INT) ENGINE= MyISAM;
+LOCK TABLE t1 WRITE;
+#SELECT NOW();
+ --echo # connection con1
+ connect (con1,localhost,root,,);
+ let $con1_id= `SELECT CONNECTION_ID()`;
+ SET SESSION debug="+d,sleep_open_and_lock_after_open";
+ send INSERT INTO t1 VALUES (1);
+--echo # connection default
+connection default;
+--echo # Let INSERT go into thr_multi_lock().
+let $wait_condition= SELECT 1 FROM INFORMATION_SCHEMA.PROCESSLIST
+ WHERE ID = $con1_id AND STATE = 'Locked';
+--source include/wait_condition.inc
+#SELECT NOW();
+--echo # Kick INSERT out of thr_multi_lock().
+FLUSH TABLES;
+#SELECT NOW();
+--echo # Let INSERT go through open_tables() where it sleeps.
+let $wait_condition= SELECT 1 FROM INFORMATION_SCHEMA.PROCESSLIST
+ WHERE ID = $con1_id AND STATE = 'DBUG sleep';
+--source include/wait_condition.inc
+#SELECT NOW();
+--echo # Unlock and close table and wait for con1 to close too.
+FLUSH TABLES;
+#SELECT NOW();
+--echo # This should give no result.
+SELECT * FROM t1;
+#SELECT NOW();
+UNLOCK TABLES;
+ --echo # connection con1
+ connection con1;
+ reap;
+ SET SESSION debug="-d,sleep_open_and_lock_after_open";
+ disconnect con1;
+--echo # connection default
+connection default;
+DROP TABLE t1;
+
+--echo #
+--echo # Extra tests for Bug#26379 - Combination of FLUSH TABLE and
+--echo # REPAIR TABLE corrupts a MERGE table
+--echo #
+CREATE TABLE t1 (c1 INT);
+CREATE TABLE t2 (c1 INT);
+CREATE TABLE t3 (c1 INT);
+INSERT INTO t1 VALUES (1);
+INSERT INTO t2 VALUES (2);
+INSERT INTO t3 VALUES (3);
+--echo #
+--echo # CREATE ... SELECT
+--echo # try to access parent from another thread.
+--echo #
+#SELECT NOW();
+ --echo # connection con1
+ connect (con1,localhost,root,,);
+ let $con1_id= `SELECT CONNECTION_ID()`;
+ SET SESSION debug="+d,sleep_create_select_before_lock";
+ send CREATE TABLE t4 (c1 INT) ENGINE=MRG_MYISAM UNION=(t1,t2)
+ INSERT_METHOD=FIRST SELECT * FROM t3;
+--echo # connection default
+connection default;
+# wait for the other query to start executing
+let $wait_condition= SELECT 1 FROM INFORMATION_SCHEMA.PROCESSLIST
+ WHERE ID = $con1_id AND STATE = 'DBUG sleep';
+--source include/wait_condition.inc
+#SELECT NOW();
+--echo # Now try to access the parent.
+--echo # If 3 is in table, SELECT had to wait.
+SELECT * FROM t4 ORDER BY c1;
+#SELECT NOW();
+ --echo # connection con1
+ connection con1;
+ reap;
+ #SELECT NOW();
+ SET SESSION debug="-d,sleep_create_select_before_lock";
+ disconnect con1;
+--echo # connection default
+connection default;
+--echo # Cleanup for next test.
+DROP TABLE t4;
+DELETE FROM t1 WHERE c1 != 1;
+--echo #
+--echo # CREATE ... SELECT
+--echo # try to access child from another thread.
+--echo #
+#SELECT NOW();
+ --echo # connection con1
+ connect (con1,localhost,root,,);
+ let $con1_id= `SELECT CONNECTION_ID()`;
+ SET SESSION debug="+d,sleep_create_select_before_lock";
+ send CREATE TABLE t4 (c1 INT) ENGINE=MRG_MYISAM UNION=(t1,t2)
+ INSERT_METHOD=FIRST SELECT * FROM t3;
+--echo # connection default
+connection default;
+# wait for the other query to start executing
+let $wait_condition= SELECT 1 FROM INFORMATION_SCHEMA.PROCESSLIST
+ WHERE ID = $con1_id AND STATE = 'DBUG sleep';
+--source include/wait_condition.inc
+#SELECT NOW();
+--echo # Now try to access a child.
+--echo # If 3 is in table, SELECT had to wait.
+SELECT * FROM t1 ORDER BY c1;
+#SELECT NOW();
+ --echo # connection con1
+ connection con1;
+ reap;
+ #SELECT NOW();
+ SET SESSION debug="-d,sleep_create_select_before_lock";
+ disconnect con1;
+--echo # connection default
+connection default;
+DROP TABLE t1, t2, t3, t4;
diff --git a/mysql-test/t/merge.test b/mysql-test/t/merge.test
index a50588b1e78..e49297dd06c 100644
--- a/mysql-test/t/merge.test
+++ b/mysql-test/t/merge.test
@@ -1,5 +1,5 @@
#
-# test of MERGE TABLES
+# Test of MERGE TABLES
#
--disable_warnings
@@ -221,6 +221,7 @@ create table t2 (a int not null);
insert into t1 values (1);
insert into t2 values (2);
create temporary table t3 (a int not null) ENGINE=MERGE UNION=(t1,t2);
+--error ER_WRONG_MRG_TABLE
select * from t3;
create temporary table t4 (a int not null);
create temporary table t5 (a int not null);
@@ -229,6 +230,58 @@ insert into t5 values (2);
create temporary table t6 (a int not null) ENGINE=MERGE UNION=(t4,t5);
select * from t6;
drop table t6, t3, t1, t2, t4, t5;
+#
+# Bug#19627 - temporary merge table locking
+# MERGE table and its children must match in temporary type.
+# Forbid temporary merge on non-temporary children: shown above.
+# Forbid non-temporary merge on temporary children:
+create temporary table t1 (a int not null);
+create temporary table t2 (a int not null);
+insert into t1 values (1);
+insert into t2 values (2);
+create table t3 (a int not null) ENGINE=MERGE UNION=(t1,t2);
+--error ER_WRONG_MRG_TABLE
+select * from t3;
+drop table t3, t2, t1;
+# Forbid children mismatch in temporary:
+create table t1 (a int not null);
+create temporary table t2 (a int not null);
+insert into t1 values (1);
+insert into t2 values (2);
+create table t3 (a int not null) ENGINE=MERGE UNION=(t1,t2);
+--error ER_WRONG_MRG_TABLE
+select * from t3;
+drop table t3;
+create temporary table t3 (a int not null) ENGINE=MERGE UNION=(t1,t2);
+--error ER_WRONG_MRG_TABLE
+select * from t3;
+drop table t3, t2, t1;
+--echo # CREATE...SELECT is not implemented for MERGE tables.
+CREATE TEMPORARY TABLE t1 (c1 INT NOT NULL);
+CREATE TEMPORARY TABLE t2 (c1 INT NOT NULL);
+CREATE TABLE t3 (c1 INT NOT NULL);
+INSERT INTO t3 VALUES (3), (33);
+LOCK TABLES t3 READ;
+--error ER_WRONG_OBJECT
+CREATE TEMPORARY TABLE t4 (c1 INT NOT NULL) ENGINE=MERGE UNION=(t1,t2)
+ INSERT_METHOD=LAST SELECT * FROM t3;
+--error ER_TABLE_NOT_LOCKED
+SELECT * FROM t4;
+UNLOCK TABLES;
+CREATE TEMPORARY TABLE t4 (c1 INT NOT NULL) ENGINE=MERGE UNION=(t1,t2)
+ INSERT_METHOD=LAST;
+INSERT INTO t4 SELECT * FROM t3;
+--echo # Alter temporary MERGE table.
+ALTER TABLE t4 UNION=(t1);
+LOCK TABLES t4 WRITE;
+--echo # Alter temporary MERGE table under LOCk tables.
+ALTER TABLE t4 UNION=(t1,t2);
+UNLOCK TABLES;
+--echo # MERGE table and function.
+CREATE FUNCTION f1 () RETURNS INT RETURN (SELECT max(c1) FROM t3);
+SELECT * FROM t4 WHERE c1 < f1();
+DROP FUNCTION f1;
+DROP TABLE t4, t3, t2, t1;
#
# testing merge::records_in_range and optimizer
@@ -284,11 +337,11 @@ create table t1 (a int);
create table t2 (a int);
insert into t1 values (0);
insert into t2 values (1);
---error 1093
+--error ER_WRONG_OBJECT
create table t3 engine=merge union=(t1, t2) select * from t1;
---error 1093
+--error ER_WRONG_OBJECT
create table t3 engine=merge union=(t1, t2) select * from t2;
---error 1093
+--error ER_WRONG_OBJECT
create table t3 engine=merge union=(t1, t2) select (select max(a) from t2);
drop table t1, t2;
@@ -403,7 +456,7 @@ CREATE TABLE t2(a INT) ENGINE=MERGE UNION=(t1);
SELECT * FROM t2;
DROP TABLE t1, t2;
CREATE TABLE t2(a INT) ENGINE=MERGE UNION=(t3);
---error 1168
+--error ER_NO_SUCH_TABLE
SELECT * FROM t2;
DROP TABLE t2;
@@ -495,11 +548,11 @@ drop table t1;
# CREATE TABLE fails
#
CREATE TABLE tm1(a INT) ENGINE=MERGE UNION=(t1, t2);
---error 1168
+--error ER_NO_SUCH_TABLE
SELECT * FROM tm1;
CHECK TABLE tm1;
CREATE TABLE t1(a INT);
---error 1168
+--error ER_NO_SUCH_TABLE
SELECT * FROM tm1;
CHECK TABLE tm1;
CREATE TABLE t2(a BLOB);
@@ -525,4 +578,806 @@ CREATE TABLE t2 (c1 INT) ENGINE=MERGE UNION=(t1) INSERT_METHOD=FIRST;
CREATE TABLE IF NOT EXISTS t1 SELECT * FROM t2;
DROP TABLE t1, t2;
+#
+# Bug #28837: MyISAM storage engine error (134) doing delete with self-join
+#
+
+CREATE TABLE t1 (id INT NOT NULL, ref INT NOT NULL, INDEX (id)) ENGINE=MyISAM;
+CREATE TABLE t2 LIKE t1;
+
+INSERT INTO t2 (id, ref) VALUES (1,3), (2,1), (3,2), (4,5), (4,4);
+INSERT INTO t1 SELECT * FROM t2;
+INSERT INTO t1 SELECT * FROM t2;
+
+CREATE TABLE t3 (id INT NOT NULL, ref INT NOT NULL, INDEX (id)) ENGINE=MERGE
+ UNION(t1);
+
+SELECT * FROM t3 AS a INNER JOIN t3 AS b USING (id) WHERE a.ref < b.ref;
+SELECT * FROM t3;
+DELETE FROM a USING t3 AS a INNER JOIN t3 AS b USING (id) WHERE a.ref < b.ref;
+SELECT * FROM t3;
+
+DROP TABLE t1, t2, t3;
+
+
--echo End of 5.0 tests
+
+#
+# Bug #8306: TRUNCATE leads to index corruption
+#
+create table t1 (c1 int, index(c1));
+create table t2 (c1 int, index(c1)) engine=merge union=(t1);
+insert into t1 values (1);
+# Close all tables.
+flush tables;
+# Open t2 and (implicitly) t1.
+select * from t2;
+# Truncate after flush works (unless another threads reopens t2 in between).
+flush tables;
+truncate table t1;
+insert into t1 values (1);
+# Close all tables.
+flush tables;
+# Open t2 and (implicitly) t1.
+select * from t2;
+# Truncate t1, wich was not recognized as open without the bugfix.
+# After fix for Bug#8306 and before fix for Bug#26379,
+# it should fail with a table-in-use error message, otherwise succeed.
+truncate table t1;
+# The insert used to fail on the crashed table.
+insert into t1 values (1);
+drop table t1,t2;
+--echo #
+--echo # Extra tests for TRUNCATE.
+--echo #
+--echo # Truncate MERGE table.
+CREATE TABLE t1 (c1 INT, INDEX(c1));
+CREATE TABLE t2 (c1 INT, INDEX(c1));
+CREATE TABLE t3 (c1 INT, INDEX(c1)) ENGINE=MRG_MYISAM UNION=(t1,t2);
+INSERT INTO t1 VALUES (1);
+INSERT INTO t2 VALUES (2);
+SELECT * FROM t3;
+TRUNCATE TABLE t3;
+SELECT * FROM t3;
+--echo #
+--echo # Truncate child table.
+INSERT INTO t1 VALUES (1);
+INSERT INTO t2 VALUES (2);
+TRUNCATE TABLE t1;
+SELECT * FROM t3;
+--echo #
+--echo # Truncate MERGE table under locked tables.
+LOCK TABLE t1 WRITE, t2 WRITE, t3 WRITE;
+INSERT INTO t1 VALUES (1);
+--error ER_LOCK_OR_ACTIVE_TRANSACTION
+TRUNCATE TABLE t3;
+SELECT * FROM t3;
+--echo #
+--echo # Truncate child table under locked tables.
+--error ER_LOCK_OR_ACTIVE_TRANSACTION
+TRUNCATE TABLE t1;
+SELECT * FROM t3;
+UNLOCK TABLES;
+DROP TABLE t1, t2, t3;
+--echo #
+--echo # Truncate temporary MERGE table.
+CREATE TEMPORARY TABLE t1 (c1 INT, INDEX(c1));
+CREATE TEMPORARY TABLE t2 (c1 INT, INDEX(c1));
+CREATE TEMPORARY TABLE t3 (c1 INT, INDEX(c1)) ENGINE=MRG_MYISAM UNION=(t1,t2);
+INSERT INTO t1 VALUES (1);
+INSERT INTO t2 VALUES (2);
+SELECT * FROM t3;
+TRUNCATE TABLE t3;
+SELECT * FROM t3;
+--echo #
+--echo # Truncate temporary child table.
+INSERT INTO t1 VALUES (1);
+INSERT INTO t2 VALUES (2);
+TRUNCATE TABLE t1;
+SELECT * FROM t3;
+--echo #
+--echo # Truncate temporary MERGE table under locked tables.
+INSERT INTO t1 VALUES (1);
+CREATE TABLE t4 (c1 INT, INDEX(c1));
+LOCK TABLE t4 WRITE;
+--error ER_LOCK_OR_ACTIVE_TRANSACTION
+TRUNCATE TABLE t3;
+SELECT * FROM t3;
+--echo #
+--echo # Truncate temporary child table under locked tables.
+--error ER_LOCK_OR_ACTIVE_TRANSACTION
+TRUNCATE TABLE t1;
+SELECT * FROM t3;
+UNLOCK TABLES;
+DROP TABLE t1, t2, t3, t4;
+
+#
+# Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE corrupts a MERGE table
+# Preparation
+connect (con1,localhost,root,,);
+connect (con2,localhost,root,,);
+connection default;
+#
+# Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE corrupts a MERGE table
+# Problem #1
+# A thread trying to lock a MERGE table performed busy waiting while
+# REPAIR TABLE or a similar table administration task was ongoing on one or
+# more of its MyISAM tables.
+# To allow for observability it was necessary to enter a multi-second sleep
+# in mysql_admin_table() after remove_table_from_cache(), which comes after
+# mysql_abort_lock(). The sleep faked a long running operation. One could
+# watch a high CPU load during the sleep time.
+# The problem was that mysql_abort_lock() upgrades the write lock to
+# TL_WRITE_ONLY. This lock type persisted until the final unlock at the end
+# of the administration task. The effect of TL_WRITE_ONLY is to reject any
+# attempt to lock the table. The trying thread must close the table and wait
+# until it is no longer used. Unfortunately there is no way to detect that
+# one of the MyISAM tables of a MERGE table is in use. When trying to lock
+# the MERGE table, all MyISAM tables are locked. If one fails on
+# TL_WRITE_ONLY, all locks are aborted and wait_for_tables() is entered.
+# But this doesn't see the MERGE table as used, so it seems appropriate to
+# retry a lock...
+#
+CREATE TABLE t1 (c1 INT) ENGINE= MyISAM;
+CREATE TABLE t2 (c1 INT) ENGINE= MRG_MYISAM UNION= (t1) INSERT_METHOD= LAST;
+send REPAIR TABLE t1;
+ connection con1;
+ sleep 1; # let repair run into its sleep
+ INSERT INTO t2 VALUES (1);
+connection default;
+reap;
+DROP TABLE t1, t2;
+#
+# Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE corrupts a MERGE table
+# Problem #2
+# A thread trying to lock a MERGE table performed busy waiting until all
+# threads that did REPAIR TABLE or similar table administration tasks on
+# one or more of its MyISAM tables in LOCK TABLES segments did
+# UNLOCK TABLES.
+# The difference against problem #1 is that the busy waiting took place
+# *after* the administration task. It was terminated by UNLOCK TABLES only.
+#
+# This is the same test case as for
+# Bug#26867 - LOCK TABLES + REPAIR + merge table result in memory/cpu hogging
+#
+#
+CREATE TABLE t1 (c1 INT) ENGINE= MyISAM;
+CREATE TABLE t2 (c1 INT) ENGINE= MRG_MYISAM UNION= (t1) INSERT_METHOD= LAST;
+LOCK TABLE t1 WRITE;
+ connection con1;
+ send INSERT INTO t2 VALUES (1);
+connection default;
+sleep 1; # Let INSERT go into thr_multi_lock().
+REPAIR TABLE t1;
+sleep 2; # con1 performs busy waiting during this sleep.
+UNLOCK TABLES;
+ connection con1;
+ reap;
+connection default;
+DROP TABLE t1, t2;
+#
+# Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE corrupts a MERGE table
+# Problem #3
+# Two FLUSH TABLES within a LOCK TABLES segment could invalidate the lock.
+# This did *not* require a MERGE table.
+# To increase reproducibility it was necessary to enter a sleep of 2 seconds
+# at the end of wait_for_tables() after unlock of LOCK_open. In 5.0 and 5.1
+# the sleep must be inserted in open_and_lock_tables() after open_tables()
+# instead. wait_for_tables() is not used in this case.
+# The problem was that FLUSH TABLES releases LOCK_open while having unlocked
+# and closed all tables. When this happened while a thread was in the loop in
+# mysql_lock_tables() right after wait_for_tables() and before retrying to
+# lock, the thread got the lock. (Translate to similar code places in 5.0
+# and 5.1). And it did not notice that the table needed a refresh. So it
+# executed its statement on the table.
+# The first FLUSH TABLES kicked the INSERT out of thr_multi_lock() and let
+# it wait in wait_for_tables(). (open_table() in 5.0 and 5.1). The second
+# FLUSH TABLES must happen while the INSERT was on its way from
+# wait_for_tables() to the next call of thr_multi_lock(). This needed to be
+# supported by a sleep to make it repeatable.
+#
+CREATE TABLE t1 (c1 INT) ENGINE= MyISAM;
+LOCK TABLE t1 WRITE;
+ connection con1;
+ send INSERT INTO t1 VALUES (1);
+connection default;
+sleep 1; # Let INSERT go into thr_multi_lock().
+FLUSH TABLES;
+sleep 1; # Let INSERT go through wait_for_tables() where it sleeps.
+FLUSH TABLES;
+# This should give no result. But it will with sleep(2) at the right place.
+SELECT * FROM t1;
+UNLOCK TABLES;
+ connection con1;
+ reap;
+connection default;
+DROP TABLE t1;
+#
+# Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE corrupts a MERGE table
+# Cleanup
+disconnect con1;
+disconnect con2;
+#
+--echo #
+--echo # Extra tests for Bug#26379 - Combination of FLUSH TABLE and
+--echo # REPAIR TABLE corrupts a MERGE table
+#
+--echo #
+--echo # CREATE ... SELECT is disabled for MERGE tables.
+--echo #
+CREATE TABLE t1(c1 INT);
+INSERT INTO t1 VALUES (1);
+CREATE TABLE t2 (c1 INT) ENGINE=MRG_MYISAM UNION=(t1) INSERT_METHOD=LAST;
+--error ER_OPEN_AS_READONLY
+CREATE TABLE t3 ENGINE=MRG_MYISAM INSERT_METHOD=LAST SELECT * FROM t2;
+--error ER_NO_SUCH_TABLE
+SHOW CREATE TABLE t3;
+--error ER_WRONG_OBJECT
+CREATE TABLE t3 ENGINE=MRG_MYISAM UNION=(t1) INSERT_METHOD=LAST
+ SELECT * FROM t2;
+--error ER_NO_SUCH_TABLE
+SHOW CREATE TABLE t3;
+DROP TABLE t1, t2;
+#
+--echo #
+--echo # CREATE ... LIKE
+--echo #
+--echo # 1. Create like.
+CREATE TABLE t1 (c1 INT);
+CREATE TABLE t2 (c1 INT);
+CREATE TABLE t3 (c1 INT) ENGINE=MRG_MYISAM UNION=(t1,t2)
+ INSERT_METHOD=LAST;
+INSERT INTO t1 VALUES (1);
+INSERT INTO t2 VALUES (2);
+INSERT INTO t3 VALUES (3);
+CREATE TABLE t4 LIKE t3;
+SHOW CREATE TABLE t4;
+--error ER_OPEN_AS_READONLY
+INSERT INTO t4 VALUES (4);
+DROP TABLE t4;
+--echo #
+--echo # 1. Create like with locked tables.
+LOCK TABLES t3 WRITE, t2 WRITE, t1 WRITE;
+CREATE TABLE t4 LIKE t3;
+--error ER_TABLE_NOT_LOCKED
+SHOW CREATE TABLE t4;
+--error ER_TABLE_NOT_LOCKED
+INSERT INTO t4 VALUES (4);
+UNLOCK TABLES;
+SHOW CREATE TABLE t4;
+--error ER_OPEN_AS_READONLY
+INSERT INTO t4 VALUES (4);
+DROP TABLE t4;
+#
+--echo #
+--echo # Rename child.
+--echo #
+--echo # 1. Normal rename of non-MERGE table.
+CREATE TABLE t4 (c1 INT);
+INSERT INTO t4 VALUES (4);
+SELECT * FROM t4 ORDER BY c1;
+RENAME TABLE t4 TO t5;
+SELECT * FROM t5 ORDER BY c1;
+RENAME TABLE t5 TO t4;
+SELECT * FROM t4 ORDER BY c1;
+DROP TABLE t4;
+--echo #
+--echo # 2. Normal rename.
+SELECT * FROM t3 ORDER BY c1;
+RENAME TABLE t2 TO t5;
+--error ER_NO_SUCH_TABLE
+SELECT * FROM t3 ORDER BY c1;
+RENAME TABLE t5 TO t2;
+SELECT * FROM t3 ORDER BY c1;
+--echo #
+--echo # 3. Normal rename with locked tables.
+LOCK TABLES t1 WRITE, t2 WRITE, t3 WRITE;
+SELECT * FROM t3 ORDER BY c1;
+--error ER_LOCK_OR_ACTIVE_TRANSACTION
+RENAME TABLE t2 TO t5;
+SELECT * FROM t3 ORDER BY c1;
+--error ER_LOCK_OR_ACTIVE_TRANSACTION
+RENAME TABLE t5 TO t2;
+SELECT * FROM t3 ORDER BY c1;
+UNLOCK TABLES;
+--echo #
+--echo # 4. Alter table rename.
+ALTER TABLE t2 RENAME TO t5;
+--error ER_NO_SUCH_TABLE
+SELECT * FROM t3 ORDER BY c1;
+ALTER TABLE t5 RENAME TO t2;
+SELECT * FROM t3 ORDER BY c1;
+--echo #
+--echo # 5. Alter table rename with locked tables.
+LOCK TABLES t1 WRITE, t2 WRITE, t3 WRITE;
+ALTER TABLE t2 RENAME TO t5;
+--error ER_TABLE_NOT_LOCKED
+SELECT * FROM t3 ORDER BY c1;
+--error ER_TABLE_NOT_LOCKED
+ALTER TABLE t5 RENAME TO t2;
+UNLOCK TABLES;
+ALTER TABLE t5 RENAME TO t2;
+SELECT * FROM t3 ORDER BY c1;
+#
+--echo #
+--echo # Rename parent.
+--echo #
+--echo # 1. Normal rename with locked tables.
+LOCK TABLES t1 WRITE, t2 WRITE, t3 WRITE;
+SELECT * FROM t3 ORDER BY c1;
+--error ER_LOCK_OR_ACTIVE_TRANSACTION
+RENAME TABLE t3 TO t5;
+SELECT * FROM t3 ORDER BY c1;
+--error ER_LOCK_OR_ACTIVE_TRANSACTION
+RENAME TABLE t5 TO t3;
+SELECT * FROM t3 ORDER BY c1;
+--echo #
+--echo # 5. Alter table rename with locked tables.
+ALTER TABLE t3 RENAME TO t5;
+--error ER_TABLE_NOT_LOCKED
+SELECT * FROM t5 ORDER BY c1;
+--error ER_TABLE_NOT_LOCKED
+ALTER TABLE t5 RENAME TO t3;
+UNLOCK TABLES;
+ALTER TABLE t5 RENAME TO t3;
+SELECT * FROM t3 ORDER BY c1;
+DROP TABLE t1, t2, t3;
+#
+--echo #
+--echo # Drop locked tables.
+--echo #
+--echo # 1. Drop parent.
+CREATE TABLE t1 (c1 INT, INDEX(c1));
+CREATE TABLE t2 (c1 INT, INDEX(c1)) ENGINE=MRG_MYISAM UNION=(t1)
+ INSERT_METHOD=LAST;
+LOCK TABLES t1 WRITE, t2 WRITE;
+INSERT INTO t1 VALUES (1);
+DROP TABLE t2;
+--error ER_TABLE_NOT_LOCKED
+SELECT * FROM t2;
+SELECT * FROM t1;
+UNLOCK TABLES;
+--echo # 2. Drop child.
+CREATE TABLE t2 (c1 INT, INDEX(c1)) ENGINE=MRG_MYISAM UNION=(t1)
+ INSERT_METHOD=LAST;
+LOCK TABLES t1 WRITE, t2 WRITE;
+INSERT INTO t1 VALUES (1);
+DROP TABLE t1;
+--error ER_NO_SUCH_TABLE
+SELECT * FROM t2;
+--error ER_NO_SUCH_TABLE
+SELECT * FROM t1;
+UNLOCK TABLES;
+DROP TABLE t2;
+#
+--echo #
+--echo # ALTER TABLE. Change child list.
+--echo #
+CREATE TABLE t1 (c1 INT, INDEX(c1));
+CREATE TABLE t2 (c1 INT, INDEX(c1));
+CREATE TABLE t3 (c1 INT, INDEX(c1));
+INSERT INTO t1 VALUES (1);
+INSERT INTO t2 VALUES (2);
+INSERT INTO t3 VALUES (3);
+CREATE TABLE t4 (c1 INT, INDEX(c1)) ENGINE=MRG_MYISAM UNION=(t3,t2)
+ INSERT_METHOD=LAST;
+--echo # Shrink child list.
+ALTER TABLE t4 UNION=(t3);
+SHOW CREATE TABLE t4;
+SELECT * FROM t4 ORDER BY c1;
+--echo # Extend child list.
+ALTER TABLE t4 UNION=(t3,t2);
+SHOW CREATE TABLE t4;
+SELECT * FROM t4 ORDER BY c1;
+#
+--echo #
+--echo # ALTER TABLE under LOCK TABLES. Change child list.
+--echo #
+LOCK TABLES t4 WRITE, t3 WRITE, t2 WRITE;
+--echo # Shrink child list.
+--error ER_LOCK_OR_ACTIVE_TRANSACTION
+ALTER TABLE t4 UNION=(t3);
+--echo # Extend child list within locked tables.
+--error ER_LOCK_OR_ACTIVE_TRANSACTION
+ALTER TABLE t4 UNION=(t3,t2);
+--echo # Extend child list beyond locked tables.
+--error ER_LOCK_OR_ACTIVE_TRANSACTION
+ALTER TABLE t4 UNION=(t3,t2,t1);
+SHOW CREATE TABLE t4;
+SELECT * FROM t4 ORDER BY c1;
+UNLOCK TABLES;
+DROP TABLE t4;
+#
+--echo #
+--echo # ALTER TABLE under LOCK TABLES. Grave change, table re-creation.
+--echo #
+CREATE TABLE t4 (c1 INT, INDEX(c1)) ENGINE=MRG_MYISAM UNION=(t1,t2,t3)
+ INSERT_METHOD=LAST;
+--echo # Lock parent first and then children.
+LOCK TABLES t4 WRITE, t3 WRITE, t2 WRITE, t1 WRITE;
+ALTER TABLE t4 DROP INDEX c1, ADD UNIQUE INDEX (c1);
+SELECT * FROM t4 ORDER BY c1;
+ALTER TABLE t2 DROP INDEX c1, ADD UNIQUE INDEX (c1);
+SELECT * FROM t4 ORDER BY c1;
+UNLOCK TABLES;
+--echo # Lock children first and then parent.
+LOCK TABLES t1 WRITE, t2 WRITE, t3 WRITE, t4 WRITE;
+ALTER TABLE t4 DROP INDEX c1, ADD UNIQUE INDEX (c1);
+SELECT * FROM t4 ORDER BY c1;
+ALTER TABLE t2 DROP INDEX c1, ADD UNIQUE INDEX (c1);
+SELECT * FROM t4 ORDER BY c1;
+UNLOCK TABLES;
+--echo # Lock parent between children.
+LOCK TABLES t3 WRITE, t2 WRITE, t4 WRITE, t1 WRITE;
+ALTER TABLE t4 DROP INDEX c1, ADD UNIQUE INDEX (c1);
+SELECT * FROM t4 ORDER BY c1;
+ALTER TABLE t2 DROP INDEX c1, ADD UNIQUE INDEX (c1);
+SELECT * FROM t4 ORDER BY c1;
+UNLOCK TABLES;
+DROP TABLE t1, t2, t3, t4;
+#
+--echo #
+--echo # ALTER TABLE under LOCK TABLES. Simple change, no re-creation.
+--echo #
+CREATE TABLE t1 (c1 INT);
+CREATE TABLE t2 (c1 INT);
+CREATE TABLE t3 (c1 INT);
+CREATE TABLE t4 (c1 INT) ENGINE=MRG_MYISAM UNION=(t1,t2,t3)
+ INSERT_METHOD=LAST;
+INSERT INTO t1 VALUES (1);
+INSERT INTO t2 VALUES (2);
+INSERT INTO t3 VALUES (3);
+--echo # Lock parent first and then children.
+LOCK TABLES t4 WRITE, t3 WRITE, t2 WRITE, t1 WRITE;
+ALTER TABLE t4 ALTER COLUMN c1 SET DEFAULT 44;
+SELECT * FROM t4 ORDER BY c1;
+ALTER TABLE t2 ALTER COLUMN c1 SET DEFAULT 22;
+SELECT * FROM t4 ORDER BY c1;
+UNLOCK TABLES;
+--echo # Lock children first and then parent.
+LOCK TABLES t1 WRITE, t2 WRITE, t3 WRITE, t4 WRITE;
+ALTER TABLE t4 ALTER COLUMN c1 SET DEFAULT 44;
+SELECT * FROM t4 ORDER BY c1;
+ALTER TABLE t2 ALTER COLUMN c1 SET DEFAULT 22;
+SELECT * FROM t4 ORDER BY c1;
+UNLOCK TABLES;
+--echo # Lock parent between children.
+LOCK TABLES t3 WRITE, t2 WRITE, t4 WRITE, t1 WRITE;
+ALTER TABLE t4 ALTER COLUMN c1 SET DEFAULT 44;
+SELECT * FROM t4 ORDER BY c1;
+ALTER TABLE t2 ALTER COLUMN c1 SET DEFAULT 22;
+SELECT * FROM t4 ORDER BY c1;
+UNLOCK TABLES;
+#
+--echo #
+--echo # FLUSH TABLE under LOCK TABLES.
+--echo #
+--echo # Lock parent first and then children.
+LOCK TABLES t4 WRITE, t3 WRITE, t2 WRITE, t1 WRITE;
+FLUSH TABLE t4;
+SELECT * FROM t4 ORDER BY c1;
+FLUSH TABLE t2;
+SELECT * FROM t4 ORDER BY c1;
+FLUSH TABLES;
+SELECT * FROM t4 ORDER BY c1;
+UNLOCK TABLES;
+--echo # Lock children first and then parent.
+LOCK TABLES t1 WRITE, t2 WRITE, t3 WRITE, t4 WRITE;
+FLUSH TABLE t4;
+SELECT * FROM t4 ORDER BY c1;
+FLUSH TABLE t2;
+SELECT * FROM t4 ORDER BY c1;
+FLUSH TABLES;
+SELECT * FROM t4 ORDER BY c1;
+UNLOCK TABLES;
+--echo # Lock parent between children.
+LOCK TABLES t3 WRITE, t2 WRITE, t4 WRITE, t1 WRITE;
+FLUSH TABLE t4;
+SELECT * FROM t4 ORDER BY c1;
+FLUSH TABLE t2;
+SELECT * FROM t4 ORDER BY c1;
+FLUSH TABLES;
+SELECT * FROM t4 ORDER BY c1;
+UNLOCK TABLES;
+#
+--echo #
+--echo # Triggers
+--echo #
+--echo # Trigger on parent
+DELETE FROM t4 WHERE c1 = 4;
+CREATE TRIGGER t4_ai AFTER INSERT ON t4 FOR EACH ROW SET @a=1;
+SET @a=0;
+INSERT INTO t4 VALUES (4);
+SELECT @a;
+SELECT * FROM t4 ORDER BY c1;
+DROP TRIGGER t4_ai;
+--echo # Trigger on parent under LOCK TABLES
+LOCK TABLES t3 WRITE, t2 WRITE, t4 WRITE, t1 WRITE;
+CREATE TRIGGER t4_ai AFTER INSERT ON t4 FOR EACH ROW SET @a=1;
+SET @a=0;
+INSERT INTO t4 VALUES (4);
+SELECT @a;
+SELECT * FROM t4 ORDER BY c1;
+DROP TRIGGER t4_ai;
+UNLOCK TABLES;
+--echo #
+--echo # Trigger on child
+DELETE FROM t4 WHERE c1 = 4;
+CREATE TRIGGER t3_ai AFTER INSERT ON t3 FOR EACH ROW SET @a=1;
+SET @a=0;
+INSERT INTO t4 VALUES (4);
+SELECT @a;
+INSERT INTO t3 VALUES (33);
+SELECT @a;
+SELECT * FROM t4 ORDER BY c1;
+DROP TRIGGER t3_ai;
+--echo # Trigger on child under LOCK TABLES
+LOCK TABLES t3 WRITE, t2 WRITE, t4 WRITE, t1 WRITE;
+CREATE TRIGGER t3_ai AFTER INSERT ON t3 FOR EACH ROW SET @a=1;
+SET @a=0;
+INSERT INTO t4 VALUES (4);
+SELECT @a;
+INSERT INTO t3 VALUES (33);
+SELECT @a;
+SELECT * FROM t4 ORDER BY c1;
+DELETE FROM t4 WHERE c1 = 33;
+DROP TRIGGER t3_ai;
+--echo #
+--echo # Trigger with table use on child
+DELETE FROM t4 WHERE c1 = 4;
+CREATE TRIGGER t3_ai AFTER INSERT ON t3 FOR EACH ROW INSERT INTO t2 VALUES(22);
+INSERT INTO t4 VALUES (4);
+SELECT * FROM t4 ORDER BY c1;
+INSERT INTO t3 VALUES (33);
+SELECT * FROM t4 ORDER BY c1;
+DELETE FROM t4 WHERE c1 = 22;
+DELETE FROM t4 WHERE c1 = 33;
+DROP TRIGGER t3_ai;
+--echo # Trigger with table use on child under LOCK TABLES
+LOCK TABLES t3 WRITE, t2 WRITE, t4 WRITE, t1 WRITE;
+CREATE TRIGGER t3_ai AFTER INSERT ON t3 FOR EACH ROW INSERT INTO t2 VALUES(22);
+INSERT INTO t4 VALUES (4);
+SELECT * FROM t4 ORDER BY c1;
+INSERT INTO t3 VALUES (33);
+SELECT * FROM t4 ORDER BY c1;
+DROP TRIGGER t3_ai;
+DELETE FROM t4 WHERE c1 = 22;
+DELETE FROM t4 WHERE c1 = 33;
+UNLOCK TABLES;
+#
+--echo #
+--echo # Repair
+--echo #
+REPAIR TABLE t4;
+REPAIR TABLE t2;
+SELECT * FROM t4 ORDER BY c1;
+LOCK TABLES t3 WRITE, t2 WRITE, t4 WRITE, t1 WRITE;
+REPAIR TABLE t4;
+REPAIR TABLE t2;
+SELECT * FROM t4 ORDER BY c1;
+UNLOCK TABLES;
+#
+--echo #
+--echo # Optimize
+--echo #
+OPTIMIZE TABLE t4;
+OPTIMIZE TABLE t2;
+SELECT * FROM t4 ORDER BY c1;
+LOCK TABLES t3 WRITE, t2 WRITE, t4 WRITE, t1 WRITE;
+OPTIMIZE TABLE t4;
+OPTIMIZE TABLE t2;
+SELECT * FROM t4 ORDER BY c1;
+UNLOCK TABLES;
+#
+--echo #
+--echo # Checksum
+--echo #
+CHECKSUM TABLE t4;
+CHECKSUM TABLE t2;
+SELECT * FROM t4 ORDER BY c1;
+LOCK TABLES t3 WRITE, t2 WRITE, t4 WRITE, t1 WRITE;
+CHECKSUM TABLE t4;
+CHECKSUM TABLE t2;
+SELECT * FROM t4 ORDER BY c1;
+UNLOCK TABLES;
+#
+--echo #
+--echo # Insert delayed
+--echo #
+# See also Bug#26464 - insert delayed + update + merge = corruption
+# Succeeds in embedded server - is converted to normal insert
+# Fails in normal server, ps-protocol - not supported by engine
+# Fails in normal server, normal protocol - not a base table
+--error 0, ER_ILLEGAL_HA, ER_WRONG_OBJECT
+INSERT DELAYED INTO t4 VALUES(44);
+# Get rid of row in embedded server
+DELETE FROM t4 WHERE c1 = 44;
+INSERT DELAYED INTO t3 VALUES(33);
+ let $wait_cmd= SHOW STATUS LIKE 'Not_flushed_delayed_rows';
+ let $run= query_get_value($wait_cmd, Value, 1);
+ while ($run)
+ {
+ let $run= query_get_value($wait_cmd, Value, 1);
+ }
+SELECT * FROM t4 ORDER BY c1;
+LOCK TABLES t3 WRITE, t2 WRITE, t4 WRITE, t1 WRITE;
+--error ER_DELAYED_INSERT_TABLE_LOCKED, ER_ILLEGAL_HA
+INSERT DELAYED INTO t4 VALUES(444);
+--error ER_DELAYED_INSERT_TABLE_LOCKED, ER_ILLEGAL_HA
+INSERT DELAYED INTO t3 VALUES(333);
+SELECT * FROM t4 ORDER BY c1;
+UNLOCK TABLES;
+DROP TABLE t1, t2, t3, t4;
+#
+--echo #
+--echo # Recursive inclusion of merge tables in their union clauses.
+--echo #
+CREATE TABLE t1 (c1 INT, INDEX(c1));
+CREATE TABLE t2 (c1 INT, INDEX(c1)) ENGINE=MRG_MYISAM UNION=(t1)
+ INSERT_METHOD=LAST;
+CREATE TABLE t3 (c1 INT, INDEX(c1)) ENGINE=MRG_MYISAM UNION=(t2,t1)
+ INSERT_METHOD=LAST;
+ALTER TABLE t2 UNION=(t3,t1);
+--error ER_ADMIN_WRONG_MRG_TABLE
+SELECT * FROM t2;
+DROP TABLE t1, t2, t3;
+
+
+#
+# Bug#25038 - Waiting TRUNCATE
+#
+# Show that truncate of child table after use of parent table works.
+CREATE TABLE t1 (c1 INT) ENGINE= MyISAM;
+CREATE TABLE t2 (c1 INT) ENGINE= MyISAM;
+CREATE TABLE t3 (c1 INT) ENGINE= MRG_MYISAM UNION= (t1, t2);
+INSERT INTO t1 VALUES (1);
+INSERT INTO t2 VALUES (2);
+SELECT * FROM t3;
+TRUNCATE TABLE t1;
+SELECT * FROM t3;
+DROP TABLE t1, t2, t3;
+#
+# Show that truncate of child table waits while parent table is used.
+# (test partly borrowed from count_distinct3.)
+CREATE TABLE t1 (id INTEGER, grp TINYINT, id_rev INTEGER);
+SET @rnd_max= 2147483647;
+let $1 = 10;
+while ($1)
+{
+ SET @rnd= RAND();
+ SET @id = CAST(@rnd * @rnd_max AS UNSIGNED);
+ SET @id_rev= @rnd_max - @id;
+ SET @grp= CAST(127.0 * @rnd AS UNSIGNED);
+ INSERT INTO t1 (id, grp, id_rev) VALUES (@id, @grp, @id_rev);
+ dec $1;
+}
+set @@read_buffer_size=2*1024*1024;
+CREATE TABLE t2 SELECT * FROM t1;
+INSERT INTO t1 (id, grp, id_rev) SELECT id, grp, id_rev FROM t2;
+INSERT INTO t2 (id, grp, id_rev) SELECT id, grp, id_rev FROM t1;
+INSERT INTO t1 (id, grp, id_rev) SELECT id, grp, id_rev FROM t2;
+INSERT INTO t2 (id, grp, id_rev) SELECT id, grp, id_rev FROM t1;
+INSERT INTO t1 (id, grp, id_rev) SELECT id, grp, id_rev FROM t2;
+CREATE TABLE t3 (id INTEGER, grp TINYINT, id_rev INTEGER)
+ ENGINE= MRG_MYISAM UNION= (t1, t2);
+SELECT COUNT(*) FROM t1;
+SELECT COUNT(*) FROM t2;
+SELECT COUNT(*) FROM t3;
+connect (con1,localhost,root,,);
+ # As t3 contains random numbers, results are different from test to test.
+ # That's okay, because we test only that select doesn't yield an
+ # error. Note, that --disable_result_log doesn't suppress error output.
+ --disable_result_log
+ send SELECT COUNT(DISTINCT a1.id) FROM t3 AS a1, t3 AS a2
+ WHERE a1.id = a2.id GROUP BY a2.grp;
+connection default;
+sleep 1;
+TRUNCATE TABLE t1;
+ connection con1;
+ reap;
+ --enable_result_log
+ disconnect con1;
+connection default;
+SELECT COUNT(*) FROM t1;
+SELECT COUNT(*) FROM t2;
+SELECT COUNT(*) FROM t3;
+DROP TABLE t1, t2, t3;
+
+#
+# Bug#25700 - merge base tables get corrupted by optimize/analyze/repair table
+#
+# Using FLUSH TABLES before REPAIR.
+CREATE TABLE t1 (c1 INT) ENGINE=MyISAM;
+CREATE TABLE t2 (c1 INT) ENGINE=MRG_MYISAM UNION=(t1) INSERT_METHOD=LAST;
+INSERT INTO t2 VALUES (1);
+SELECT * FROM t2;
+LOCK TABLES t2 WRITE, t1 WRITE;
+FLUSH TABLES;
+REPAIR TABLE t1;
+CHECK TABLE t1;
+REPAIR TABLE t1;
+UNLOCK TABLES;
+CHECK TABLE t1 EXTENDED;
+#
+# Not using FLUSH TABLES before REPAIR.
+LOCK TABLES t2 WRITE, t1 WRITE;
+REPAIR TABLE t1;
+CHECK TABLE t1;
+REPAIR TABLE t1;
+UNLOCK TABLES;
+CHECK TABLE t1 EXTENDED;
+DROP TABLE t1, t2;
+
+#
+# Bug#26377 - Deadlock with MERGE and FLUSH TABLE
+#
+CREATE TABLE t1 ( a INT ) ENGINE=MyISAM;
+CREATE TABLE m1 ( a INT ) ENGINE=MRG_MYISAM UNION=(t1);
+# Lock t1 first. This did always work.
+LOCK TABLES t1 WRITE, m1 WRITE;
+FLUSH TABLE t1;
+UNLOCK TABLES;
+DROP TABLE m1, t1;
+#
+CREATE TABLE t1 ( a INT ) ENGINE=MyISAM;
+CREATE TABLE m1 ( a INT ) ENGINE=MRG_MYISAM UNION=(t1);
+# Lock m1 first. This did deadlock.
+LOCK TABLES m1 WRITE, t1 WRITE;
+FLUSH TABLE t1;
+UNLOCK TABLES;
+DROP TABLE m1, t1;
+
+#
+# Bug#27660 - Falcon: merge table possible
+#
+# Normal MyISAM MERGE operation.
+CREATE TABLE t1 (c1 INT, c2 INT) ENGINE= MyISAM;
+CREATE TABLE t2 (c1 INT, c2 INT) ENGINE= MyISAM;
+CREATE TABLE t3 (c1 INT, c2 INT) ENGINE= MRG_MYISAM UNION(t1, t2);
+INSERT INTO t1 VALUES (1, 1);
+INSERT INTO t2 VALUES (2, 2);
+SELECT * FROM t3;
+# Try an unsupported engine.
+ALTER TABLE t1 ENGINE= MEMORY;
+INSERT INTO t1 VALUES (0, 0);
+# Before fixing, this succeeded, but (0, 0) was missing.
+--error 1168
+SELECT * FROM t3;
+DROP TABLE t1, t2, t3;
+
+#
+# Bug#30275 - Merge tables: flush tables or unlock tables causes server to crash
+#
+CREATE TABLE t1 (c1 INT, KEY(c1));
+CREATE TABLE t2 (c1 INT, KEY(c1)) ENGINE=MRG_MYISAM UNION=(t1)
+ INSERT_METHOD=FIRST;
+LOCK TABLE t1 WRITE, t2 WRITE;
+FLUSH TABLES t2, t1;
+OPTIMIZE TABLE t1;
+FLUSH TABLES t1;
+UNLOCK TABLES;
+#
+FLUSH TABLES;
+INSERT INTO t1 VALUES (1);
+LOCK TABLE t1 WRITE, t2 WRITE;
+FLUSH TABLES t2, t1;
+OPTIMIZE TABLE t1;
+FLUSH TABLES t1;
+UNLOCK TABLES;
+DROP TABLE t1, t2;
+
+#
+# Test derived from test program for
+# Bug#30273 - merge tables: Can't lock file (errno: 155)
+#
+CREATE TABLE t1 (ID INT) ENGINE=MYISAM;
+CREATE TABLE m1 (ID INT) ENGINE=MRG_MYISAM UNION=(t1) INSERT_METHOD=FIRST;
+INSERT INTO t1 VALUES ();
+INSERT INTO m1 VALUES ();
+LOCK TABLE t1 WRITE, m1 WRITE;
+FLUSH TABLES m1, t1;
+OPTIMIZE TABLE t1;
+FLUSH TABLES m1, t1;
+UNLOCK TABLES;
+DROP TABLE t1, m1;
+
diff --git a/mysql-test/t/merge_innodb.test b/mysql-test/t/merge_innodb.test
new file mode 100644
index 00000000000..7f0b1a0c36e
--- /dev/null
+++ b/mysql-test/t/merge_innodb.test
@@ -0,0 +1,41 @@
+# t/merge_innodb.test
+#
+# Tests with MERGE tables over InnoDB tables
+#
+
+--source include/have_innodb.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS t1, t2, t3, t4, t5;
+--enable_warnings
+
+#
+# Bug#30491 - MERGE doesn't report error when one table is Innodb
+#
+CREATE TABLE t1 (c1 varchar(100)) ENGINE=MyISAM;
+CREATE TABLE t2 (c1 varchar(100)) ENGINE=MyISAM;
+CREATE TABLE t3 (c1 varchar(100)) ENGINE=InnoDB;
+INSERT INTO t1 VALUES ('Ann'), ('Alice');
+INSERT INTO t2 VALUES ('Bob'), ('Brian');
+INSERT INTO t3 VALUES ('Chris'), ('Charlie');
+CREATE TABLE t4 (c1 varchar(100)) ENGINE=MRG_MYISAM UNION=(t1,t2)
+ INSERT_METHOD=LAST;
+CREATE TABLE t5 (c1 varchar(100)) ENGINE=MRG_MYISAM UNION=(t1,t3)
+ INSERT_METHOD=LAST;
+--error ER_WRONG_MRG_TABLE
+SELECT * FROM t5;
+SELECT * FROM t4;
+ALTER TABLE t2 ENGINE=InnoDB;
+--error ER_WRONG_MRG_TABLE
+SELECT * FROM t4;
+DELETE FROM t2 LIMIT 1;
+--error ER_WRONG_MRG_TABLE
+SELECT * FROM t4;
+--error ER_WRONG_MRG_TABLE
+INSERT INTO t4 VALUES ('Beware');
+--error ER_WRONG_MRG_TABLE
+SELECT * FROM t4;
+SELECT * FROM t2;
+SELECT * FROM t1;
+DROP TABLE t1, t2, t3, t4, t5;
+
diff --git a/mysql-test/t/multi_update.test b/mysql-test/t/multi_update.test
index 6f5ac70a34b..331663dceb5 100644
--- a/mysql-test/t/multi_update.test
+++ b/mysql-test/t/multi_update.test
@@ -588,6 +588,7 @@ CREATE TABLE `t2` (
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ;
# as the test is about to see erroed queries in binlog
+set @sav_binlog_format= @@session.binlog_format;
set @@session.binlog_format= mixed;
@@ -614,5 +615,42 @@ show master status /* there must be the UPDATE query event */;
# cleanup bug#27716
drop table t1, t2;
+set @@session.binlog_format= @sav_binlog_format;
+
+#
+# Bug #29136 erred multi-delete on trans table does not rollback
+#
+
+# prepare
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+CREATE TABLE t1 (a int, PRIMARY KEY (a));
+CREATE TABLE t2 (a int, PRIMARY KEY (a));
+CREATE TABLE t3 (a int, PRIMARY KEY (a)) ENGINE=MyISAM;
+create trigger trg_del_t3 before delete on t3 for each row insert into t1 values (1);
+
+insert into t2 values (1),(2);
+insert into t3 values (1),(2);
+reset master;
+
+# exec cases B, A - see innodb.test
+
+# B. send_eof() and send_error() afterward
+
+--error ER_DUP_ENTRY
+delete t3.* from t2,t3 where t2.a=t3.a;
+
+# check
+select count(*) from t1 /* must be 1 */;
+select count(*) from t3 /* must be 1 */;
+
+# cleanup bug#29136
+drop table t1, t2, t3;
+
+#
+# Add further tests from here
+#
+
--echo end of tests
diff --git a/mysql-test/t/myisam.test b/mysql-test/t/myisam.test
index b06fd536f45..fbd0a5ac4e7 100644
--- a/mysql-test/t/myisam.test
+++ b/mysql-test/t/myisam.test
@@ -576,32 +576,6 @@ select count(*) from t1 where a is null;
drop table t1;
#
-# Bug #8306: TRUNCATE leads to index corruption
-#
-create table t1 (c1 int, index(c1));
-create table t2 (c1 int, index(c1)) engine=merge union=(t1);
-insert into t1 values (1);
-# Close all tables.
-flush tables;
-# Open t2 and (implicitly) t1.
-select * from t2;
-# Truncate after flush works (unless another threads reopens t2 in between).
-flush tables;
-truncate table t1;
-insert into t1 values (1);
-# Close all tables.
-flush tables;
-# Open t2 and (implicitly) t1.
-select * from t2;
-# Truncate t1, wich was not recognized as open without the bugfix.
-# Now, it should fail with a table-in-use error message.
---error 1105
-truncate table t1;
-# The insert used to fail on the crashed table.
-insert into t1 values (1);
-drop table t1,t2;
-
-#
# bug9188 - Corruption Can't open file: 'table.MYI' (errno: 145)
#
create table t1 (c1 int, c2 varchar(4) not null default '',
@@ -1146,6 +1120,55 @@ ALTER TABLE t1 ENABLE KEYS;
SELECT a FROM t1 FORCE INDEX (inx) WHERE a=1;
DROP TABLE t1;
+#
+# Bug#4692 - DISABLE/ENABLE KEYS waste a space
+#
+CREATE TABLE t1 (c1 INT, c2 INT, UNIQUE INDEX (c1), INDEX (c2)) ENGINE=MYISAM;
+--replace_column 6 # 7 # 8 # 10 # 11 # 12 # 13 # 14 # 15 # 16 #
+SHOW TABLE STATUS LIKE 't1';
+INSERT INTO t1 VALUES (1,1);
+--replace_column 6 # 7 # 8 # 10 # 11 # 12 # 13 # 14 # 15 # 16 #
+SHOW TABLE STATUS LIKE 't1';
+ALTER TABLE t1 DISABLE KEYS;
+--replace_column 6 # 7 # 8 # 10 # 11 # 12 # 13 # 14 # 15 # 16 #
+SHOW TABLE STATUS LIKE 't1';
+ALTER TABLE t1 ENABLE KEYS;
+--replace_column 6 # 7 # 8 # 10 # 11 # 12 # 13 # 14 # 15 # 16 #
+SHOW TABLE STATUS LIKE 't1';
+ALTER TABLE t1 DISABLE KEYS;
+--replace_column 6 # 7 # 8 # 10 # 11 # 12 # 13 # 14 # 15 # 16 #
+SHOW TABLE STATUS LIKE 't1';
+ALTER TABLE t1 ENABLE KEYS;
+--replace_column 6 # 7 # 8 # 10 # 11 # 12 # 13 # 14 # 15 # 16 #
+SHOW TABLE STATUS LIKE 't1';
+#--exec ls -log var/master-data/test/t1.MYI
+#--exec myisamchk -dvv var/master-data/test/t1.MYI
+#--exec myisamchk -iev var/master-data/test/t1.MYI
+--echo # Enable keys with parallel repair
+SET @@myisam_repair_threads=2;
+ALTER TABLE t1 DISABLE KEYS;
+ALTER TABLE t1 ENABLE KEYS;
+SET @@myisam_repair_threads=1;
+CHECK TABLE t1 EXTENDED;
+DROP TABLE t1;
+
+#
+# Bug#28837: MyISAM storage engine error (134) doing delete with self-join
+#
+
+CREATE TABLE t1 (id int NOT NULL, ref int NOT NULL, INDEX (id)) ENGINE=MyISAM;
+CREATE TABLE t2 LIKE t1;
+
+INSERT INTO t2 (id, ref) VALUES (1,3), (2,1), (3,2), (4,5), (4,4);
+INSERT INTO t1 SELECT * FROM t2;
+
+SELECT * FROM t1 AS a INNER JOIN t1 AS b USING (id) WHERE a.ref < b.ref;
+SELECT * FROM t1;
+DELETE FROM a USING t1 AS a INNER JOIN t1 AS b USING (id) WHERE a.ref < b.ref;
+SELECT * FROM t1;
+
+DROP TABLE t1, t2;
+
--echo End of 5.0 tests
@@ -1256,3 +1279,4 @@ CHECK TABLE t1;
DROP TABLE t1;
--echo End of 5.1 tests
+
diff --git a/mysql-test/t/myisampack.test b/mysql-test/t/myisampack.test
new file mode 100644
index 00000000000..6598af6318a
--- /dev/null
+++ b/mysql-test/t/myisampack.test
@@ -0,0 +1,33 @@
+#
+# BUG#31277 - myisamchk --unpack corrupts a table
+#
+CREATE TABLE t1(c1 DOUBLE, c2 DOUBLE, c3 DOUBLE, c4 DOUBLE, c5 DOUBLE,
+ c6 DOUBLE, c7 DOUBLE, c8 DOUBLE, c9 DOUBLE, a INT PRIMARY KEY);
+INSERT INTO t1 VALUES
+(-3.31168791059336e-06,-3.19054655887874e-06,-1.06528081684847e-05,-1.227278240089e-06,-1.66718069164799e-06,-2.59038972510885e-06,-2.83145227805303e-06,-4.09678491270648e-07,-2.22610091291797e-06,6),
+(0.0030743000272545,2.53222044316438e-05,2.78674650061845e-05,1.95914465544536e-05,1.7347572525984e-05,1.87513810069614e-05,1.69882826885005e-05,2.44449336987598e-05,1.89914629921774e-05,9),
+(2.85229319423495e-05,3.05970988282259e-05,3.77161100113133e-05,2.3055238978766e-05,2.08241267364615e-05,2.28009504270553e-05,2.12070165658947e-05,2.84350091565409e-05,2.3366822910704e-05,3),
+(0,0,0,0,0,0,0,0,0,12),
+(3.24544577570754e-05,3.44619021870993e-05,4.37561613201124e-05,2.57556808726748e-05,2.3195354640561e-05,2.58532400758869e-05,2.34934241667179e-05,3.1621640063232e-05,2.58229982746189e-05,19),
+(2.53222044316438e-05,0.00445071933455582,2.97447268116016e-05,2.12379514059868e-05,1.86777776502663e-05,2.0170058676712e-05,1.8946030385445e-05,2.66040037173511e-05,2.09161899668946e-05,20),
+(3.03462382611645e-05,3.26517930083994e-05,3.5242025468662e-05,2.53219745106391e-05,2.24384532945004e-05,2.4052346047657e-05,2.23865572957053e-05,3.1634313969082e-05,2.48285463481801e-05,21),
+(1.95914465544536e-05,2.12379514059868e-05,2.27808649037128e-05,0.000341724375366877,1.4512761275113e-05,1.56475828693953e-05,1.44372366441415e-05,2.07952121981765e-05,1.61488256935919e-05,28),
+(1.7347572525984e-05,1.86777776502663e-05,2.04116907052727e-05,1.4512761275113e-05,0.000432162526082388,1.38116514014465e-05,1.2712914948904e-05,1.82503165178506e-05,1.43043075345922e-05,30),
+(1.68339762136661e-05,1.77836497166611e-05,2.36328309295222e-05,1.30183423732016e-05,1.18674654241553e-05,1.32467273128652e-05,1.24581739117775e-05,1.55624190959406e-05,1.33010638508213e-05,31),
+(1.89643062824415e-05,2.06997140070717e-05,2.29045490159364e-05,1.57918175731019e-05,1.39864987449492e-05,1.50580274578455e-05,1.45908734129609e-05,1.95329296993327e-05,1.5814709481221e-05,32),
+(1.69882826885005e-05,1.8946030385445e-05,2.00820439721439e-05,1.44372366441415e-05,1.2712914948904e-05,1.35209686474184e-05,0.00261563314789896,1.78285095864627e-05,1.46699314500019e-05,34),
+(2.0278186540684e-05,2.18923409729654e-05,2.39981539939738e-05,1.71774589459438e-05,1.54654355357383e-05,1.62731485707636e-05,1.49253140625051e-05,2.18229800160297e-05,1.71923561673718e-05,35),
+(2.44449336987598e-05,2.66040037173511e-05,2.84860148925308e-05,2.07952121981765e-05,1.82503165178506e-05,1.97667730441441e-05,1.78285095864627e-05,0.00166478601822712,2.0299952103232e-05,36),
+(1.89914629921774e-05,2.09161899668946e-05,2.26026841007872e-05,1.61488256935919e-05,1.43043075345922e-05,1.52609063290127e-05,1.46699314500019e-05,2.0299952103232e-05,0.00306670170971682,39),
+(0,0,0,0,0,0,0,0,0,41),
+(0,0,0,0,0,0,0,0,0,17),
+(0,0,0,0,0,0,0,0,0,18),
+(2.51880677333017e-05,2.63051795435778e-05,2.79874748974906e-05,2.02888886670845e-05,1.8178636318197e-05,1.91308527003585e-05,1.83260023644133e-05,2.4422300558171e-05,1.96411467520551e-05,44),
+(2.22402118719591e-05,2.37546284320705e-05,2.58463051055541e-05,1.83391609130854e-05,1.6300720519646e-05,1.74559091886791e-05,1.63733785575587e-05,2.26616253279828e-05,1.79541237435621e-05,45),
+(3.01092775359837e-05,3.23865212934412e-05,4.09444584045994e-05,0,2.15470966302776e-05,2.39082636344032e-05,2.28296706429177e-05,2.9007671511595e-05,2.44201138973326e-05,46);
+FLUSH TABLES;
+--exec $MYISAMPACK -s $MYSQLTEST_VARDIR/master-data/test/t1
+--exec $MYISAMCHK -srq $MYSQLTEST_VARDIR/master-data/test/t1
+--exec $MYISAMCHK -s --unpack $MYSQLTEST_VARDIR/master-data/test/t1
+CHECK TABLE t1 EXTENDED;
+DROP TABLE t1;
diff --git a/mysql-test/t/mysql.test b/mysql-test/t/mysql.test
index 3ee04f32640..528337da77b 100644
--- a/mysql-test/t/mysql.test
+++ b/mysql-test/t/mysql.test
@@ -282,6 +282,15 @@ remove_file $MYSQLTEST_VARDIR/tmp/bug21412.sql;
#
--exec $MYSQL test -e "/*! \C latin1 */ select 1;"
+#
+# Bug#29323 mysql client only accetps ANSI encoded files
+#
+--write_file $MYSQLTEST_VARDIR/tmp/bug29323.sql
+select "This is a file starting with UTF8 BOM 0xEFBBBF";
+EOF
+--exec $MYSQL < $MYSQLTEST_VARDIR/tmp/bug29323.sql 2>&1
+remove_file $MYSQLTEST_VARDIR/tmp/bug29323.sql;
+
--echo End of 5.0 tests
#
@@ -290,3 +299,21 @@ remove_file $MYSQLTEST_VARDIR/tmp/bug21412.sql;
--disable_query_log
--exec $MYSQL --server-arg=no-defaults test -e "quit"
--enable_query_log
+
+#
+# Bug #25146: Some warnings/errors not shown when using --show-warnings
+#
+
+# This one should succeed with no warnings
+--exec $MYSQL --show-warnings test -e "create table t1 (id int)"
+
+# This should succeed, with warnings about conversion from nonexistent engine
+--exec $MYSQL --show-warnings test -e "create table t2 (id int) engine=nonexistent"
+
+# This should fail, with warnings as well
+--error 1
+--exec $MYSQL --show-warnings test -e "create table t2 (id int) engine=nonexistent2"
+
+drop tables t1, t2;
+
+--echo End of tests
diff --git a/mysql-test/t/mysql_comments.sql b/mysql-test/t/mysql_comments.sql
new file mode 100644
index 00000000000..2497c35e465
--- /dev/null
+++ b/mysql-test/t/mysql_comments.sql
@@ -0,0 +1,218 @@
+##============================================================================
+## Notes
+##============================================================================
+
+# Test case for Bug#11230
+
+# The point of this test is to make sure that '#', '-- ' and '/* ... */'
+# comments, as well as empty lines, are sent from the client to the server.
+# This is to ensure better error reporting, and to keep comments in the code
+# for stored procedures / functions / triggers (Bug#11230).
+# As a result, be careful when editing comments in this script, they do
+# matter.
+#
+# Also, note that this is a script for **mysql**, not mysqltest.
+# This is critical, as the mysqltest client interprets comments differently.
+
+##============================================================================
+## Setup
+##============================================================================
+
+## See mysql_comments.test for initial cleanup
+
+# Test tables
+#
+# t1 is reused throughout the file, and dropped at the end.
+#
+drop table if exists t1;
+create table t1 (
+ id char(16) not null default '',
+ data int not null
+);
+
+##============================================================================
+## Comments outside statements
+##============================================================================
+
+# Ignored 1a
+-- Ignored 1b
+/*
+ Ignored 1c
+*/
+
+select 1;
+
+##============================================================================
+## Comments inside statements
+##============================================================================
+
+select # comment 1a
+# comment 2a
+-- comment 2b
+/*
+ comment 2c
+*/
+2
+; # not strictly inside, but on same line
+# ignored
+
+##============================================================================
+## Comments inside functions
+##============================================================================
+
+drop function if exists foofct ;
+
+create function foofct (x char(20))
+returns char(20)
+/* not inside the body yet */
+return
+-- comment 1a
+# comment 1b
+/* comment 1c */
+x; # after body, on same line
+
+select foofct("call 1");
+
+show create function foofct;
+drop function foofct;
+
+delimiter |
+
+create function foofct(x char(20))
+returns char(20)
+begin
+ -- comment 1a
+ # comment 1b
+ /*
+ comment 1c
+ */
+
+ -- empty line below
+
+ -- empty line above
+ return x;
+end|
+
+delimiter ;
+
+select foofct("call 2");
+
+show create function foofct;
+drop function foofct;
+
+##============================================================================
+## Comments inside stored procedures
+##============================================================================
+
+# Empty statement
+drop procedure if exists empty;
+create procedure empty()
+begin
+end;
+
+call empty();
+show create procedure empty;
+drop procedure empty;
+
+drop procedure if exists foosp;
+
+## These comments are before the create, and will be lost
+# Comment 1a
+-- Comment 1b
+/*
+ Comment 1c
+ */
+create procedure foosp()
+/* Comment not quiet in the body yet */
+ insert into test.t1
+## These comments are part of the procedure body, and should be kept.
+# Comment 2a
+-- Comment 2b
+/* Comment 2c */
+ -- empty line below
+
+ -- empty line above
+ values ("foo", 42); # comment 3, still part of the body
+## After the ';', therefore not part of the body
+# comment 4a
+-- Comment 4b
+/*
+ Comment 4c
+ */
+
+call foosp();
+select * from t1;
+delete from t1;
+show create procedure foosp;
+drop procedure foosp;
+
+drop procedure if exists nicesp;
+
+delimiter |
+
+create procedure nicesp(a int)
+begin
+ -- declare some variables here
+ declare b int;
+ declare c float;
+
+ -- do more stuff here
+ -- commented nicely and so on
+
+ -- famous last words ...
+end|
+
+delimiter ;
+
+show create procedure nicesp;
+drop procedure nicesp;
+
+##============================================================================
+## Comments inside triggers
+##============================================================================
+
+drop trigger if exists t1_empty;
+
+create trigger t1_empty after delete on t1
+for each row
+begin
+end;
+
+show create trigger t1_empty;
+
+drop trigger if exists t1_bi;
+
+delimiter |
+
+create trigger t1_bi before insert on t1
+for each row
+begin
+# comment 1a
+-- comment 1b
+/*
+ comment 1c
+*/
+ -- declare some variables here
+ declare b int;
+ declare c float;
+
+ -- do more stuff here
+ -- commented nicely and so on
+
+ -- famous last words ...
+ set NEW.data := 12;
+end|
+
+delimiter ;
+
+show create trigger t1_bi;
+
+# also make sure the trigger still works
+insert into t1(id) value ("trig");
+select * from t1;
+
+##============================================================================
+## Cleanup
+##============================================================================
+
+drop table t1;
diff --git a/mysql-test/t/mysql_comments.test b/mysql-test/t/mysql_comments.test
new file mode 100644
index 00000000000..1f997aeb1ab
--- /dev/null
+++ b/mysql-test/t/mysql_comments.test
@@ -0,0 +1,37 @@
+# This test should work in embedded server after we fix mysqltest
+-- source include/not_embedded.inc
+###################### mysql_comments.test #############################
+# #
+# Testing of comments handling by the command line client (mysql) #
+# #
+# Creation: #
+# 2007-10-29 akopytov Implemented this test as a part of fixes for #
+# bug #26215 and bug #11230 #
+# #
+########################################################################
+
+#
+# Bug #11230: Keeping comments when storing stored procedures
+#
+
+# See the content of mysql_comments.sql
+# Set the test database to a known state before running the tests.
+--disable_warnings
+drop table if exists t1;
+drop function if exists foofct;
+drop procedure if exists empty;
+drop procedure if exists foosp;
+drop procedure if exists nicesp;
+drop trigger if exists t1_empty;
+drop trigger if exists t1_bi;
+--enable_warnings
+
+# Test without comments
+--echo "Pass 1 : --disable-comments"
+--exec $MYSQL --disable-comments test 2>&1 < "./t/mysql_comments.sql"
+
+# Test with comments
+--echo "Pass 2 : --enable-comments"
+--exec $MYSQL --enable-comments test 2>&1 < "./t/mysql_comments.sql"
+
+--echo End of 5.0 tests
diff --git a/mysql-test/t/mysqlbinlog.test b/mysql-test/t/mysqlbinlog.test
index 25bd9a402ae..eb364c60e71 100644
--- a/mysql-test/t/mysqlbinlog.test
+++ b/mysql-test/t/mysqlbinlog.test
@@ -43,6 +43,7 @@ select "--- Local --" as "";
#
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/
--exec $MYSQL_BINLOG --short-form --local-load=$MYSQLTEST_VARDIR/tmp/ $MYSQLTEST_VARDIR/log/master-bin.000001
# this should not fail but shouldn't produce any working statements
@@ -50,6 +51,7 @@ select "--- Local --" as "";
select "--- Broken LOAD DATA --" as "";
--enable_query_log
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/
--exec $MYSQL_BINLOG --short-form --local-load=$MYSQLTEST_VARDIR/tmp/ $MYSQLTEST_VARDIR/log/master-bin.000002 2> /dev/null
# this should show almost nothing
@@ -57,6 +59,7 @@ select "--- Broken LOAD DATA --" as "";
select "--- --database --" as "";
--enable_query_log
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/
--exec $MYSQL_BINLOG --short-form --local-load=$MYSQLTEST_VARDIR/tmp/ --database=nottest $MYSQLTEST_VARDIR/log/master-bin.000001 2> /dev/null
# this test for position option
@@ -64,6 +67,7 @@ select "--- --database --" as "";
select "--- --position --" as "";
--enable_query_log
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/
--exec $MYSQL_BINLOG --short-form --local-load=$MYSQLTEST_VARDIR/tmp/ --position=239 $MYSQLTEST_VARDIR/log/master-bin.000002
# These are tests for remote binlog.
@@ -75,6 +79,7 @@ select "--- Remote --" as "";
# This is broken now
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/
--exec $MYSQL_BINLOG --short-form --local-load=$MYSQLTEST_VARDIR/tmp/ --read-from-remote-server --user=root --host=127.0.0.1 --port=$MASTER_MYPORT master-bin.000001
# This is broken too
@@ -82,6 +87,7 @@ select "--- Remote --" as "";
select "--- Broken LOAD DATA --" as "";
--enable_query_log
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/
--exec $MYSQL_BINLOG --short-form --local-load=$MYSQLTEST_VARDIR/tmp/ --read-from-remote-server --user=root --host=127.0.0.1 --port=$MASTER_MYPORT master-bin.000002 2> /dev/null
# And this too ! (altough it is documented)
@@ -89,6 +95,7 @@ select "--- Broken LOAD DATA --" as "";
select "--- --database --" as "";
--enable_query_log
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/
--exec $MYSQL_BINLOG --short-form --local-load=$MYSQLTEST_VARDIR/tmp/ --read-from-remote-server --user=root --host=127.0.0.1 --port=$MASTER_MYPORT --database=nottest master-bin.000001 2> /dev/null
# Strangely but this works
@@ -96,6 +103,7 @@ select "--- --database --" as "";
select "--- --position --" as "";
--enable_query_log
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/
--exec $MYSQL_BINLOG --short-form --local-load=$MYSQLTEST_VARDIR/tmp/ --read-from-remote-server --position=239 --user=root --host=127.0.0.1 --port=$MASTER_MYPORT master-bin.000002
# Bug#7853 (mysqlbinlog does not accept input from stdin)
@@ -103,9 +111,11 @@ select "--- --position --" as "";
select "--- reading stdin --" as "";
--enable_query_log
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
+--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/
--exec $MYSQL_BINLOG --short-form - < $MYSQL_TEST_DIR/std_data/trunc_binlog.000001
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
+--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/
--exec $MYSQL_BINLOG --short-form --position=79 - < $MYSQL_TEST_DIR/std_data/trunc_binlog.000001
drop table t1,t2;
@@ -169,6 +179,7 @@ call p1();
drop procedure p1;
--error 1305
call p1();
+--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/
--exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000008
--exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000008 | $MYSQL
call p1();
@@ -204,6 +215,7 @@ select hex(a) from t1;
drop table t1;
flush logs;
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/
--exec $MYSQL_BINLOG --short-form --local-load=$MYSQLTEST_VARDIR/tmp/ $MYSQLTEST_VARDIR/log/master-bin.000010
#
@@ -240,6 +252,10 @@ let $c= `select $a=$b`;
--echo $c
drop table t1;
+echo shell> mysqlbinlog std_data/corrupt-relay-bin.000624 > var/tmp/bug31793.sql;
+error 1;
+exec $MYSQL_BINLOG $MYSQL_TEST_DIR/std_data/corrupt-relay-bin.000624 > $MYSQLTEST_VARDIR/tmp/bug31793.sql;
+
--echo End of 5.0 tests
#
@@ -250,4 +266,59 @@ flush logs;
--exec $MYSQL_BINLOG $MYSQLTEST_VARDIR/log/master-bin.000016 >/dev/null 2>/dev/null
--exec $MYSQL_BINLOG --force-if-open $MYSQLTEST_VARDIR/log/master-bin.000016 >/dev/null 2>/dev/null
+--echo BUG#31611: Security risk with BINLOG statement
+
+SET BINLOG_FORMAT=ROW;
+CREATE DATABASE mysqltest1;
+CREATE USER untrusted@localhost;
+GRANT SELECT ON mysqltest1.* TO untrusted@localhost;
+
+SHOW GRANTS FOR untrusted@localhost;
+USE mysqltest1;
+CREATE TABLE t1 (a INT, b CHAR(64));
+flush logs;
+INSERT INTO t1 VALUES (1,USER());
+flush logs;
+echo mysqlbinlog var/log/master-bin.000017 > var/tmp/bug31611.sql;
+exec $MYSQL_BINLOG $MYSQLTEST_VARDIR/log/master-bin.000017 > $MYSQLTEST_VARDIR/tmp/bug31611.sql;
+connect (unsecure,localhost,untrusted,,mysqltest1);
+echo mysql mysqltest1 -uuntrusted < var/tmp/bug31611.sql;
+error 1;
+exec $MYSQL mysqltest1 -uuntrusted < $MYSQLTEST_VARDIR/tmp/bug31611.sql;
+connection unsecure;
+error ER_TABLEACCESS_DENIED_ERROR;
+INSERT INTO t1 VALUES (1,USER());
+
+SELECT * FROM t1;
+connection default;
+DROP DATABASE mysqltest1;
+DROP USER untrusted@localhost;
+
+--echo BUG#32580: mysqlbinlog cannot read binlog event with user variables
+
+# Testing that various kinds of events can be read and restored properly.
+
+connection default;
+USE test;
+SET BINLOG_FORMAT = STATEMENT;
+FLUSH LOGS;
+CREATE TABLE t1 (a_real FLOAT, an_int INT, a_decimal DECIMAL(5,2), a_string CHAR(32));
+SET @a_real = rand(20) * 1000;
+SET @an_int = 1000;
+SET @a_decimal = CAST(rand(19) * 999 AS DECIMAL(5,2));
+SET @a_string = 'Just a test';
+INSERT INTO t1 VALUES (@a_real, @an_int, @a_decimal, @a_string);
+FLUSH LOGS;
+query_vertical SELECT * FROM t1;
+DROP TABLE t1;
+
+echo >> mysqlbinlog var/log/master-bin.000019 > var/tmp/bug32580.sql;
+exec $MYSQL_BINLOG $MYSQLTEST_VARDIR/log/master-bin.000019 > $MYSQLTEST_VARDIR/tmp/bug32580.sql;
+echo >> mysql test < var/tmp/bug32580.sql;
+exec $MYSQL test < $MYSQLTEST_VARDIR/tmp/bug32580.sql;
+remove_file $MYSQLTEST_VARDIR/tmp/bug32580.sql;
+
+query_vertical SELECT * FROM t1;
+DROP TABLE t1;
+
--echo End of 5.1 tests
diff --git a/mysql-test/t/mysqlbinlog2.test b/mysql-test/t/mysqlbinlog2.test
index be9397aafee..2ac16f4c590 100644
--- a/mysql-test/t/mysqlbinlog2.test
+++ b/mysql-test/t/mysqlbinlog2.test
@@ -42,7 +42,7 @@ select "--- Local --" as "";
#
--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
+--exec $MYSQL_BINLOG --base64-output=never $MYSQLTEST_VARDIR/log/master-bin.000001
--disable_query_log
select "--- offset --" as "";
diff --git a/mysql-test/t/mysqlcheck.test b/mysql-test/t/mysqlcheck.test
index d233546f9e3..ba13a315cb8 100644
--- a/mysql-test/t/mysqlcheck.test
+++ b/mysql-test/t/mysqlcheck.test
@@ -11,7 +11,7 @@
#
--disable_warnings
-DROP TABLE IF EXISTS t1;
+DROP TABLE IF EXISTS t1, `t``1`, `t 1`;
drop view if exists v1;
drop database if exists client_test_db;
--enable_warnings
@@ -37,4 +37,51 @@ create view v1 as select * from t1;
drop view v1;
drop table t1;
+#
+# Bug #30654: mysqlcheck fails during upgrade of tables whose names include backticks
+#
+create table `t``1`(a int);
+create table `t 1`(a int);
+--replace_result 'Table is already up to date' OK
+--exec $MYSQL_CHECK --databases test
+drop table `t``1`, `t 1`;
+
+#
+# Bug#25347: mysqlcheck -A -r doesn't repair table marked as crashed
+#
+create database d_bug25347;
+use d_bug25347;
+create table t_bug25347 (a int);
+create view v_bug25347 as select * from t_bug25347;
+insert into t_bug25347 values (1),(2),(3);
+flush tables;
+--echo removing and creating
+--remove_file $MYSQLTEST_VARDIR/master-data/d_bug25347/t_bug25347.MYI
+--write_file $MYSQLTEST_VARDIR/master-data/d_bug25347/t_bug25347.MYI
+EOF
+--exec $MYSQL_CHECK --repair --databases d_bug25347
+--error 130
+insert into t_bug25347 values (4),(5),(6);
+--exec $MYSQL_CHECK --repair --use-frm --databases d_bug25347
+insert into t_bug25347 values (7),(8),(9);
+select * from t_bug25347;
+select * from v_bug25347;
+drop view v_bug25347;
+drop table t_bug25347;
+drop database d_bug25347;
+use test;
+
--echo End of 5.0 tests
+
+#
+# Bug #30679: 5.1 name encoding not performed for views during upgrade
+#
+create table t1(a int);
+create view v1 as select * from t1;
+show tables;
+--copy_file $MYSQLTEST_VARDIR/master-data/test/v1.frm $MYSQLTEST_VARDIR/master-data/test/v-1.frm
+show tables;
+--exec $MYSQL_CHECK --check-upgrade --fix-table-names --databases test
+show tables;
+drop view v1, `v-1`;
+drop table t1;
diff --git a/mysql-test/t/mysqldump.test b/mysql-test/t/mysqldump.test
index 0440b0fb63a..0e4e9989ffa 100644
--- a/mysql-test/t/mysqldump.test
+++ b/mysql-test/t/mysqldump.test
@@ -1577,6 +1577,23 @@ SELECT * FROM t2;
DROP TABLE t1,t2;
--echo #
+--echo # Bug#29815: new option for suppressing last line of mysqldump:
+--echo # "Dump completed on"
+--echo #
+
+--echo # --skip-dump-date:
+--replace_regex /-- [^D][^u][^m][^p].*// /\/\*!.*//
+--exec $MYSQL_DUMP --skip-dump-date test
+
+--echo # --dump-date:
+--replace_regex /-- [^D][^u][^m][^p].*// /\/\*!.*// / on [0-9 :-]+/ on DATE/
+--exec $MYSQL_DUMP --dump-date test
+
+--echo # --dump-date (default):
+--replace_regex /-- [^D][^u][^m][^p].*// /\/\*!.*// / on [0-9 :-]+/ on DATE/
+--exec $MYSQL_DUMP test
+
+--echo #
--echo # End of 5.0 tests
--echo #
@@ -1771,6 +1788,18 @@ TRUNCATE mysql.event;
--exec $MYSQL < $MYSQLTEST_VARDIR/tmp/bug29938.sql
SHOW EVENTS;
+
+--echo #
+--echo # Bug#31113 mysqldump 5.1 can't handle a dash ("-") in database names
+--echo #
+create database `test-database`;
+use `test-database`;
+create table test (a int);
+--exec $MYSQL_DUMP --compact --opt --quote-names test-database
+drop database `test-database`;
+use test;
+
+
--echo #
--echo # End of 5.1 tests
--echo #
diff --git a/mysql-test/t/mysqlslap.test b/mysql-test/t/mysqlslap.test
index dffa226d101..28042f62fe6 100644
--- a/mysql-test/t/mysqlslap.test
+++ b/mysql-test/t/mysqlslap.test
@@ -40,3 +40,16 @@
--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
+
+--echo #
+--echo # Bug #29985: mysqlslap -- improper handling of resultsets in SPROCs
+--echo #
+
+--disable_warnings
+DROP PROCEDURE IF EXISTS p1;
+--enable_warnings
+CREATE PROCEDURE p1() SELECT 1;
+
+--exec $MYSQL_SLAP --create-schema=test --delimiter=";" --query="CALL p1; SELECT 1;" --silent 2>&1
+
+DROP PROCEDURE p1;
diff --git a/mysql-test/t/no-threads.test b/mysql-test/t/no-threads.test
index 806cf24e961..fd8365e5678 100644
--- a/mysql-test/t/no-threads.test
+++ b/mysql-test/t/no-threads.test
@@ -3,3 +3,14 @@
#
select 1+1;
select 1+2;
+SHOW GLOBAL VARIABLES LIKE 'thread_handling';
+
+#
+# Bug #30651 Problems with thread_handling system variable
+#
+
+--error ER_INCORRECT_GLOBAL_LOCAL_VAR
+select @@session.thread_handling;
+
+--error ER_INCORRECT_GLOBAL_LOCAL_VAR
+set GLOBAL thread_handling='one-thread';
diff --git a/mysql-test/t/null.test b/mysql-test/t/null.test
index 65e09b006ec..ddf6b8870fa 100644
--- a/mysql-test/t/null.test
+++ b/mysql-test/t/null.test
@@ -1,6 +1,6 @@
# Initialise
--disable_warnings
-drop table if exists t1;
+drop table if exists t1, t2;
--enable_warnings
#
@@ -61,7 +61,9 @@ drop table t1;
#
CREATE TABLE t1 (a varchar(16) NOT NULL default '', b smallint(6) NOT NULL default 0, c datetime NOT NULL default '0000-00-00 00:00:00', d smallint(6) NOT NULL default 0);
INSERT INTO t1 SET a = "", d= "2003-01-14 03:54:55";
+--error 1048
UPDATE t1 SET d=1/NULL;
+--error 1048
UPDATE t1 SET d=NULL;
--error 1048
INSERT INTO t1 (a) values (null);
@@ -231,4 +233,27 @@ drop table bug19145a;
drop table bug19145b;
drop table bug19145c;
-# End of 4.1 tests
+--echo # End of 4.1 tests
+
+--echo #
+--echo # Bug #31471: decimal_bin_size: Assertion `scale >= 0 &&
+--echo # precision > 0 && scale <= precision'
+--echo #
+
+CREATE TABLE t1 (a DECIMAL (1, 0) ZEROFILL, b DECIMAL (1, 0) ZEROFILL);
+INSERT INTO t1 (a, b) VALUES (0, 0);
+
+CREATE TABLE t2 SELECT IFNULL(a, b) FROM t1;
+DESCRIBE t2;
+DROP TABLE t2;
+
+CREATE TABLE t2 SELECT IFNULL(a, NULL) FROM t1;
+DESCRIBE t2;
+DROP TABLE t2;
+
+CREATE TABLE t2 SELECT IFNULL(NULL, b) FROM t1;
+DESCRIBE t2;
+
+DROP TABLE t1, t2;
+
+--echo # End of 5.0 tests
diff --git a/mysql-test/t/olap.test b/mysql-test/t/olap.test
index 05934bff492..d1e40024733 100644
--- a/mysql-test/t/olap.test
+++ b/mysql-test/t/olap.test
@@ -358,3 +358,21 @@ SELECT * FROM (SELECT a, SUM(a) FROM t1 GROUP BY a WITH ROLLUP) as t;
DROP TABLE t1;
+--echo #
+--echo # Bug#31095: Unexpected NULL constant caused server crash.
+--echo #
+create table t1(a int);
+insert into t1 values (1),(2),(3);
+select count(a) from t1 group by null with rollup;
+drop table t1;
+--echo ##############################################################
+
+#
+# Bug #32558: group by null-returning expression with rollup causes crash
+#
+CREATE TABLE t1(a INT);
+INSERT INTO t1 VALUES(0);
+SELECT 1 FROM t1 GROUP BY (DATE(NULL)) WITH ROLLUP;
+DROP TABLE t1;
+
+--echo End of 5.0 tests
diff --git a/mysql-test/t/order_by.test b/mysql-test/t/order_by.test
index 37398616299..71238504d36 100644
--- a/mysql-test/t/order_by.test
+++ b/mysql-test/t/order_by.test
@@ -779,3 +779,60 @@ EXPLAIN SELECT id,c3 FROM t2 WHERE c2 BETWEEN 20 AND 30 ORDER BY c3 LIMIT 4000;
SELECT id,c3 FROM t2 WHERE c2=11 ORDER BY c3 LIMIT 20;
DROP TABLE t1,t2;
+
+#
+# Bug #30665: Inconsistent optimization of IGNORE INDEX FOR {ORDER BY|GROUP BY}
+#
+CREATE TABLE t1 (
+ a INT,
+ b INT,
+ PRIMARY KEY (a),
+ KEY ab(a, b)
+);
+INSERT INTO t1 VALUES (1,1),(2,2),(3,3),(4,4);
+INSERT INTO t1 SELECT a + 4, b + 4 FROM t1;
+INSERT INTO t1 SELECT a + 8, b + 8 FROM t1;
+INSERT INTO t1 SELECT a +16, b +16 FROM t1;
+INSERT INTO t1 SELECT a +32, b +32 FROM t1;
+INSERT INTO t1 SELECT a +64, b +64 FROM t1;
+
+EXPLAIN SELECT a FROM t1 IGNORE INDEX FOR GROUP BY (a, ab) GROUP BY a;
+
+--disable_query_log
+--let $q = `show status like 'Created_tmp_tables';`
+eval set @tmp_tables_before =
+ CAST(REPLACE('$q', 'Created_tmp_tables', '') AS UNSIGNED);
+--enable_query_log
+
+SELECT a FROM t1 IGNORE INDEX FOR GROUP BY (a, ab) GROUP BY a;
+
+# this query creates one temporary table in itself, which we are not
+# interested in.
+
+--disable_query_log
+--let $q = `show status like 'Created_tmp_tables';`
+eval set @tmp_tables_after =
+ CAST(REPLACE('$q', 'Created_tmp_tables', '') AS UNSIGNED);
+--enable_query_log
+
+SELECT @tmp_tables_after = @tmp_tables_before ;
+
+EXPLAIN SELECT a FROM t1 IGNORE INDEX FOR ORDER BY (a, ab) ORDER BY a;
+
+--disable_query_log
+--let $q = `show status like 'Created_tmp_tables';`
+eval set @tmp_tables_before =
+ CAST(REPLACE('$q', 'Created_tmp_tables', '') AS UNSIGNED);
+--enable_query_log
+
+SELECT a FROM t1 IGNORE INDEX FOR ORDER BY (a, ab) ORDER BY a;
+
+--disable_query_log
+--let $q = `show status like 'Created_tmp_tables';`
+eval set @tmp_tables_after =
+ CAST(REPLACE('$q', 'Created_tmp_tables', '') AS UNSIGNED);
+--enable_query_log
+
+SELECT @tmp_tables_after = @tmp_tables_before;
+
+DROP TABLE t1;
diff --git a/mysql-test/t/order_fill_sortbuf-master.opt b/mysql-test/t/order_fill_sortbuf-master.opt
index 116494d4588..9aa3cc76221 100644
--- a/mysql-test/t/order_fill_sortbuf-master.opt
+++ b/mysql-test/t/order_fill_sortbuf-master.opt
@@ -1 +1 @@
---set-variable=sort_buffer=0
+--set-variable=sort_buffer=32804
diff --git a/mysql-test/t/outfile_loaddata.test b/mysql-test/t/outfile_loaddata.test
new file mode 100644
index 00000000000..2a120871e7d
--- /dev/null
+++ b/mysql-test/t/outfile_loaddata.test
@@ -0,0 +1,113 @@
+--disable_warnings
+DROP TABLE IF EXISTS t1, t2;
+--enable_warnings
+
+--echo #
+--echo # Bug#31663 FIELDS TERMINATED BY special character
+--echo #
+
+CREATE TABLE t1 (i1 int, i2 int, c1 VARCHAR(256), c2 VARCHAR(256));
+INSERT INTO t1 VALUES (101, 202, '-r-', '=raker=');
+
+--let $fields=*
+--let $clauses=FIELDS TERMINATED BY 'raker'
+--echo # $clauses, warning:
+
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--eval SELECT $fields INTO OUTFILE '$MYSQLTEST_VARDIR/tmp/bug31663.txt' $clauses FROM t1
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--eval SELECT LOAD_FILE('$MYSQLTEST_VARDIR/tmp/bug31663.txt')
+--eval CREATE TABLE t2 SELECT $fields FROM t1
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--eval LOAD DATA INFILE '$MYSQLTEST_VARDIR/tmp/bug31663.txt' INTO TABLE t2 $clauses
+--eval SELECT $fields FROM t2
+--remove_file $MYSQLTEST_VARDIR/tmp/bug31663.txt
+DROP TABLE t2;
+
+--let $fields=i1, i2
+--let $clauses=FIELDS TERMINATED BY 'r'
+--echo # Only numeric fields, $clauses, no warnings:
+
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--eval SELECT $fields INTO OUTFILE '$MYSQLTEST_VARDIR/tmp/bug31663.txt' $clauses FROM t1
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--eval SELECT LOAD_FILE('$MYSQLTEST_VARDIR/tmp/bug31663.txt')
+--eval CREATE TABLE t2 SELECT $fields FROM t1
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--eval LOAD DATA INFILE '$MYSQLTEST_VARDIR/tmp/bug31663.txt' INTO TABLE t2 $clauses
+--eval SELECT $fields FROM t2
+--remove_file $MYSQLTEST_VARDIR/tmp/bug31663.txt
+DROP TABLE t2;
+
+--let $fields=*
+--let $clauses=FIELDS TERMINATED BY '0'
+--echo # $clauses, warning:
+
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--eval SELECT $fields INTO OUTFILE '$MYSQLTEST_VARDIR/tmp/bug31663.txt' $clauses FROM t1
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--eval SELECT LOAD_FILE('$MYSQLTEST_VARDIR/tmp/bug31663.txt')
+--eval CREATE TABLE t2 SELECT $fields FROM t1
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--eval LOAD DATA INFILE '$MYSQLTEST_VARDIR/tmp/bug31663.txt' INTO TABLE t2 $clauses
+--eval SELECT $fields FROM t2
+--remove_file $MYSQLTEST_VARDIR/tmp/bug31663.txt
+DROP TABLE t2;
+
+--let $fields=*
+--let $clauses=FIELDS OPTIONALLY ENCLOSED BY '"' TERMINATED BY '0'
+--echo # $clauses, warning:
+
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--eval SELECT $fields INTO OUTFILE '$MYSQLTEST_VARDIR/tmp/bug31663.txt' $clauses FROM t1
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--eval SELECT LOAD_FILE('$MYSQLTEST_VARDIR/tmp/bug31663.txt')
+--eval CREATE TABLE t2 SELECT $fields FROM t1
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--eval LOAD DATA INFILE '$MYSQLTEST_VARDIR/tmp/bug31663.txt' INTO TABLE t2 $clauses
+--eval SELECT $fields FROM t2
+--remove_file $MYSQLTEST_VARDIR/tmp/bug31663.txt
+DROP TABLE t2;
+
+--let $fields=c1, c2
+--let $clauses=FIELDS OPTIONALLY ENCLOSED BY '"' TERMINATED BY '0'
+--echo # Only string fields, $clauses, no warnings:
+
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--eval SELECT $fields INTO OUTFILE '$MYSQLTEST_VARDIR/tmp/bug31663.txt' $clauses FROM t1
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--eval SELECT LOAD_FILE('$MYSQLTEST_VARDIR/tmp/bug31663.txt')
+--eval CREATE TABLE t2 SELECT $fields FROM t1
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--eval LOAD DATA INFILE '$MYSQLTEST_VARDIR/tmp/bug31663.txt' INTO TABLE t2 $clauses
+--eval SELECT $fields FROM t2
+--remove_file $MYSQLTEST_VARDIR/tmp/bug31663.txt
+DROP TABLE t2;
+
+DROP TABLE t1;
+
+--echo #
+--echo # Bug#32533: SELECT INTO OUTFILE never escapes multibyte character
+--echo #
+
+CREATE TABLE t1 (c1 VARCHAR(256));
+INSERT INTO t1 VALUES (0xC3);
+SELECT HEX(c1) FROM t1;
+
+--let $file=$MYSQLTEST_VARDIR/tmp/bug32533.txt
+
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--eval SELECT * INTO OUTFILE '$file' FIELDS ENCLOSED BY 0xC3 FROM t1
+TRUNCATE t1;
+
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--eval SELECT HEX(LOAD_FILE('$file'))
+
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--eval LOAD DATA INFILE '$file' INTO TABLE t1 FIELDS ENCLOSED BY 0xC3
+SELECT HEX(c1) FROM t1;
+
+--remove_file $file
+DROP TABLE t1;
+
+--echo # End of 5.0 tests.
diff --git a/mysql-test/t/parser.test b/mysql-test/t/parser.test
index 79c9129bb74..800d717cf6b 100644
--- a/mysql-test/t/parser.test
+++ b/mysql-test/t/parser.test
@@ -629,3 +629,51 @@ select atan(10, 20 "p2");
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
select atan(10 AS p1, 20 AS p2);
+#
+# Bug#22312 Syntax error in expression with INTERVAL()
+#
+
+--disable_warnings
+DROP TABLE IF EXISTS t1;
+--enable_warnings
+
+SELECT STR_TO_DATE('10:00 PM', '%h:%i %p') + INTERVAL 10 MINUTE;
+SELECT STR_TO_DATE('10:00 PM', '%h:%i %p') + INTERVAL (INTERVAL(1,2,3) + 1) MINUTE;
+SELECT "1997-12-31 23:59:59" + INTERVAL 1 SECOND;
+SELECT 1 + INTERVAL(1,0,1,2) + 1;
+SELECT INTERVAL(1^1,0,1,2) + 1;
+SELECT INTERVAL(1,0+1,2,3) * 5.5;
+SELECT INTERVAL(3,3,1+3,4+4) / 0.5;
+SELECT (INTERVAL(1,0,1,2) + 5) * 7 + INTERVAL(1,0,1,2) / 2;
+SELECT INTERVAL(1,0,1,2) + 1, 5 * INTERVAL(1,0,1,2);
+SELECT INTERVAL(0,(1*5)/2) + INTERVAL(5,4,3);
+
+--disable_warnings
+SELECT 1^1 + INTERVAL 1+1 SECOND & 1 + INTERVAL 1+1 SECOND;
+SELECT 1%2 - INTERVAL 1^1 SECOND | 1%2 - INTERVAL 1^1 SECOND;
+--enable_warnings
+
+CREATE TABLE t1 (a INT, b DATETIME);
+INSERT INTO t1 VALUES (INTERVAL(3,2,1) + 1, "1997-12-31 23:59:59" + INTERVAL 1 SECOND);
+SELECT * FROM t1 WHERE a = INTERVAL(3,2,1) + 1;
+DROP TABLE t1;
+
+#
+# Bug#28317 Left Outer Join with {oj outer-join}
+#
+
+--disable_warnings
+DROP TABLE IF EXISTS t1,t2,t3;
+--enable_warnings
+CREATE TABLE t1 (a1 INT, a2 INT, a3 INT, a4 DATETIME);
+CREATE TABLE t2 LIKE t1;
+CREATE TABLE t3 LIKE t1;
+SELECT t1.* FROM t1 AS t0, { OJ t2 INNER JOIN t1 ON (t1.a1=t2.a1) } WHERE t0.a3=2;
+SELECT t1.*,t2.* FROM { OJ ((t1 INNER JOIN t2 ON (t1.a1=t2.a2)) LEFT OUTER JOIN t3 ON t3.a3=t2.a1)};
+SELECT t1.*,t2.* FROM { OJ ((t1 LEFT OUTER JOIN t2 ON t1.a3=t2.a2) INNER JOIN t3 ON (t3.a1=t2.a2))};
+SELECT t1.*,t2.* FROM { OJ (t1 LEFT OUTER JOIN t2 ON t1.a1=t2.a2) CROSS JOIN t3 ON (t3.a2=t2.a3)};
+SELECT * FROM {oj t1 LEFT OUTER JOIN t2 ON t1.a1=t2.a3} WHERE t1.a2 > 10;
+SELECT {fn CONCAT(a1,a2)} FROM t1;
+UPDATE t3 SET a4={d '1789-07-14'} WHERE a1=0;
+SELECT a1, a4 FROM t2 WHERE a4 LIKE {fn UCASE('1789-07-14')};
+DROP TABLE t1, t2, t3;
diff --git a/mysql-test/t/partition.test b/mysql-test/t/partition.test
index 2906b4640cd..23d6c5f8865 100644
--- a/mysql-test/t/partition.test
+++ b/mysql-test/t/partition.test
@@ -1,30 +1,79 @@
#--disable_abort_on_error
#
# Simple test for the partition storage engine
-# Taken fromm the select test
+# taken from the select test.
#
--- source include/have_partition.inc
+# Last update:
+# 2007-10-22 mleich - Move ARCHIVE, BLACKHOLE and CSV related sub tests to
+# new tests. Reason: All these might be not available.
+# - Minor cleanup
+#
+--source include/have_partition.inc
--disable_warnings
drop table if exists t1;
--enable_warnings
#
+# Bug #30695: An apostrophe ' in the comment of the ADD PARTITION causes the Server to crash.
+#
+# To verify the fix for crashing (on unix-type OS)
+# uncomment the exec and error rows!
+
+CREATE TABLE t1 (
+ d DATE NOT NULL
+)
+PARTITION BY RANGE( YEAR(d) ) (
+ PARTITION p0 VALUES LESS THAN (1960),
+ PARTITION p1 VALUES LESS THAN (1970),
+ PARTITION p2 VALUES LESS THAN (1980),
+ PARTITION p3 VALUES LESS THAN (1990)
+);
+
+ALTER TABLE t1 ADD PARTITION (
+PARTITION `p5` VALUES LESS THAN (2010)
+COMMENT 'APSTART \' APEND'
+);
+#--exec sed 's/APSTART \\/APSTART /' var/master-data/test/t1.frm > tmpt1.frm && mv tmpt1.frm var/master-data/test/t1.frm
+#--error 1064
+SELECT * FROM t1 LIMIT 1;
+
+DROP TABLE t1;
+
+#
+# Bug 30878: crashing when alter an auto_increment non partitioned
+# table to partitioned
+
+create table t1 (id int auto_increment, s1 int, primary key (id));
+
+insert into t1 values (null,1);
+insert into t1 values (null,6);
+
+select * from t1;
+
+alter table t1 partition by range (id) (
+ partition p0 values less than (3),
+ partition p1 values less than maxvalue
+);
+
+drop table t1;
+
+#
# Bug 15890: Strange number of partitions accepted
#
--- error 1064
+-- error ER_PARSE_ERROR
create table t1 (a int)
partition by key(a)
partitions 0.2+e1;
--- error 1064
+-- error ER_PARSE_ERROR
create table t1 (a int)
partition by key(a)
partitions -1;
--- error 1064
+-- error ER_PARSE_ERROR
create table t1 (a int)
partition by key(a)
partitions 1.5;
--- error 1064
+-- error ER_PARSE_ERROR
create table t1 (a int)
partition by key(a)
partitions 1e+300;
@@ -32,7 +81,7 @@ partitions 1e+300;
#
# Bug 21350: Data Directory problems
#
--- error 1103
+-- error ER_WRONG_TABLE_NAME
create table t1 (a int)
partition by key (a)
(partition p0 DATA DIRECTORY 'part-data' INDEX DIRECTORY 'part-data');
@@ -41,7 +90,7 @@ partition by key (a)
# Insert a test that manages to create the first partition and fails with
# the second, ensure that we clean up afterwards in a proper manner.
#
---error 1103
+--error ER_WRONG_TABLE_NAME
create table t1 (a int)
partition by key (a)
(partition p0,
@@ -63,23 +112,14 @@ drop procedure pz;
drop table t1;
#
-# Bug 19307: CSV engine crashes
-#
---error ER_PARTITION_MERGE_ERROR
-create table t1 (a int)
-engine = csv
-partition by list (a)
-(partition p0 values in (null));
-
-#
# BUG 16002: Handle unsigned integer functions properly
#
---error 1064
+--error ER_PARSE_ERROR
create table t1 (a bigint)
partition by range (a)
(partition p0 values less than (0xFFFFFFFFFFFFFFFF),
partition p1 values less than (10));
---error 1064
+--error ER_PARSE_ERROR
create table t1 (a bigint)
partition by list (a)
(partition p0 values in (0xFFFFFFFFFFFFFFFF),
@@ -101,15 +141,6 @@ select * from t1 where (a + 1) > 10;
drop table t1;
#
-# Bug 19307: CSV engine crashes
-#
---error ER_PARTITION_MERGE_ERROR
-create table t1 (a int)
-engine = csv
-partition by list (a)
-(partition p0 values in (null));
-
-#
# Added test case
#
create table t1 (a int)
@@ -342,6 +373,16 @@ select * from t1 where a = 4;
drop table t1;
#
+# Bug#22351 - handler::index_next_same() call to key_cmp_if_same()
+# uses the wrong buffer
+#
+CREATE TABLE t1 (c1 INT, c2 INT, PRIMARY KEY USING BTREE (c1,c2)) ENGINE=MEMORY
+ PARTITION BY KEY(c2,c1) PARTITIONS 4;
+INSERT INTO t1 VALUES (0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6);
+SELECT * FROM t1 WHERE c1 = 4;
+DROP TABLE t1;
+
+#
# Bug #13438: Engine clause in PARTITION clause causes crash
#
CREATE TABLE t1 (a int)
@@ -413,34 +454,6 @@ analyze table t1;
drop table t1;
#
-# BUG 14524
-#
-# Disable warnings to allow this test case to work without
-# the Blackhole engine.
---disable_warnings
-CREATE TABLE `t1` (
- `id` int(11) default NULL
-) ENGINE=BLACKHOLE DEFAULT CHARSET=latin1 PARTITION BY HASH (id) ;
---enable_warnings
-SELECT * FROM t1;
-
-drop table t1;
-
-#
-# BUG 14524
-#
-# Disable warnings to allow this test case to work without
-# the Blackhole engine.
---disable_warnings
-CREATE TABLE `t1` (
- `id` int(11) default NULL
-) ENGINE=BLACKHOLE DEFAULT CHARSET=latin1 PARTITION BY HASH (id) ;
---enable_warnings
-SELECT * FROM t1;
-
-drop table t1;
-
-#
# BUG 15221 (Cannot reorganize with the same name)
#
create table t1
@@ -766,7 +779,7 @@ create table t1 (a int)
partition by list (a)
(partition p0 values in (1));
---error 1064
+--error ER_PARSE_ERROR
alter table t1 rebuild partition;
drop table t1;
@@ -810,14 +823,14 @@ drop table t1;
#
# BUG 15407 Crash with subpartition
#
---error 1064
+--error ER_PARSE_ERROR
create table t1 (a int, b int)
partition by range (a)
subpartition by hash(a)
(partition p0 values less than (0) (subpartition sp0),
partition p1 values less than (1));
---error 1064
+--error ER_PARSE_ERROR
create table t1 (a int, b int)
partition by range (a)
subpartition by hash(a)
@@ -875,7 +888,7 @@ create table t1 (a int)
partition by list (a)
(partition p0 values in (1));
---error 1064
+--error ER_PARSE_ERROR
alter table t1 rebuild partition;
drop table t1;
@@ -937,7 +950,7 @@ drop table t1;
#
prepare stmt1 from 'create table t1 (s1 int) partition by hash (s1)';
execute stmt1;
---error 1050
+--error ER_TABLE_EXISTS_ERROR
execute stmt1;
drop table t1;
@@ -1126,7 +1139,7 @@ PARTITION BY LIST (a)
SHOW CREATE TABLE t1;
DROP TABLE t1;
---error 1064
+--error ER_PARSE_ERROR
CREATE TABLE t1 (a int)
PARTITION BY RANGE(a)
(PARTITION p0 VALUES LESS THAN (NULL));
@@ -1222,23 +1235,6 @@ OPTIMIZE TABLE t1;
drop table t1;
#
-# Bug 17310 Partitions: Bugs with archived partitioned tables
-#
-create database db99;
-use db99;
-create table t1 (a int not null)
-engine=archive
-partition by list (a)
-(partition p0 values in (1), partition p1 values in (2));
-insert into t1 values (1), (2);
---error 0, 1005
-create index inx on t1 (a);
-alter table t1 add partition (partition p2 values in (3));
-alter table t1 drop partition p2;
-use test;
-drop database db99;
-
-#
#BUG 17138 Problem with stored procedure and analyze partition
#
--disable_warnings
@@ -1509,12 +1505,8 @@ use test;
# BUG #18198: Case no longer supported, test case removed
#
-#
-# Bug #29444: crash with partition refering to table in create-select
-#
-
create table t2 (b int);
---error 1054
+--error ER_BAD_FIELD_ERROR
create table t1 (b int)
PARTITION BY RANGE (t2.b) (
PARTITION p1 VALUES LESS THAN (10),
@@ -1528,4 +1520,143 @@ PARTITION BY RANGE (b) (
show create table t1;
drop table t1, t2;
+#
+# Bug #32067 Partitions: crash with timestamp column
+# this bug occurs randomly on some UPDATE statement
+# with the '1032: Can't find record in 't1'' error
+
+create table t1
+ (s1 timestamp on update current_timestamp, s2 int)
+ partition by key(s1) partitions 3;
+
+insert into t1 values (null,null);
+--disable_query_log
+let $cnt= 1000;
+while ($cnt)
+{
+ update t1 set s2 = 1;
+ update t1 set s2 = 2;
+ dec $cnt;
+}
+--enable_query_log
+
+drop table t1;
+
+#
+# BUG#32272: partition crash 1: enum column
+#
+create table t1 (
+ c0 int,
+ c1 bigint,
+ c2 set('sweet'),
+ key (c2,c1,c0),
+ key(c0)
+) engine=myisam partition by hash (month(c0)) partitions 5;
+
+--disable_warnings
+insert ignore into t1 set c0 = -6502262, c1 = 3992917, c2 = 35019;
+insert ignore into t1 set c0 = 241221, c1 = -6862346, c2 = 56644;
+--enable_warnings
+# This must not fail assert:
+select c1 from t1 group by (select c0 from t1 limit 1);
+drop table t1;
+
+# Bug #30495: optimize table t1,t2,t3 extended errors
+#
+CREATE TABLE t1(a int)
+PARTITION BY RANGE (a) (
+ PARTITION p1 VALUES LESS THAN (10),
+ PARTITION p2 VALUES LESS THAN (20)
+);
+--error 1064
+ALTER TABLE t1 OPTIMIZE PARTITION p1 EXTENDED;
+--error 1064
+ALTER TABLE t1 ANALYZE PARTITION p1 EXTENDED;
+DROP TABLE t1;
+
+#
+# Bug #29258: Partitions: search fails for maximum unsigned bigint
+#
+CREATE TABLE t1 (s1 BIGINT UNSIGNED)
+ PARTITION BY RANGE (s1) (
+ PARTITION p0 VALUES LESS THAN (0),
+ PARTITION p1 VALUES LESS THAN (1),
+ PARTITION p2 VALUES LESS THAN (18446744073709551615)
+);
+INSERT INTO t1 VALUES (0), (18446744073709551614);
+--error ER_NO_PARTITION_FOR_GIVEN_VALUE
+INSERT INTO t1 VALUES (18446744073709551615);
+DROP TABLE t1;
+
+CREATE TABLE t1 (s1 BIGINT UNSIGNED)
+ PARTITION BY RANGE (s1) (
+ PARTITION p0 VALUES LESS THAN (0),
+ PARTITION p1 VALUES LESS THAN (1),
+ PARTITION p2 VALUES LESS THAN (18446744073709551614),
+ PARTITION p3 VALUES LESS THAN MAXVALUE
+);
+INSERT INTO t1 VALUES (-1), (0), (18446744073709551613),
+ (18446744073709551614), (18446744073709551615);
+SELECT * FROM t1;
+SELECT * FROM t1 WHERE s1 = 0;
+SELECT * FROM t1 WHERE s1 = 18446744073709551614;
+SELECT * FROM t1 WHERE s1 = 18446744073709551615;
+DROP TABLE t1;
+
+CREATE TABLE t1 (s1 BIGINT UNSIGNED)
+ PARTITION BY RANGE (s1) (
+ PARTITION p0 VALUES LESS THAN (0),
+ PARTITION p1 VALUES LESS THAN (1),
+ PARTITION p2 VALUES LESS THAN (18446744073709551615),
+ PARTITION p3 VALUES LESS THAN MAXVALUE
+);
+DROP TABLE t1;
+
+#
+# Bug #31890 Partitions: ORDER BY DESC in InnoDB not working
+#
+
+CREATE TABLE t1
+(int_column INT, char_column CHAR(5),
+PRIMARY KEY(char_column,int_column))
+PARTITION BY KEY(char_column,int_column)
+PARTITIONS 101;
+INSERT INTO t1 (int_column, char_column) VALUES
+( 39868 ,'zZZRW'),
+( 545592 ,'zZzSD'),
+( 4936 ,'zzzsT'),
+( 9274 ,'ZzZSX'),
+( 970185 ,'ZZzTN'),
+( 786036 ,'zZzTO'),
+( 37240 ,'zZzTv'),
+( 313801 ,'zzzUM'),
+( 782427 ,'ZZZva'),
+( 907955 ,'zZZvP'),
+( 453491 ,'zzZWV'),
+( 756594 ,'ZZZXU'),
+( 718061 ,'ZZzZH');
+SELECT * FROM t1 ORDER BY char_column DESC;
+DROP TABLE t1;
+
+#
+# Bug #32247 Test reports wrong value of "AUTO_INCREMENT" (on a partitioned InnoDB table)
+#
+
+CREATE TABLE t1(id MEDIUMINT NOT NULL AUTO_INCREMENT,
+ user CHAR(25), PRIMARY KEY(id))
+ PARTITION BY RANGE(id)
+ SUBPARTITION BY hash(id) subpartitions 2
+ (PARTITION pa1 values less than (10),
+ PARTITION pa2 values less than (20),
+ PARTITION pa11 values less than MAXVALUE);
+--disable_query_log
+let $n= 15;
+while ($n)
+{
+ insert into t1 (user) values ('mysql');
+ dec $n;
+}
+--enable_query_log
+show create table t1;
+drop table t1;
--echo End of 5.1 tests
diff --git a/mysql-test/t/partition_02myisam.test b/mysql-test/t/partition_02myisam.test
deleted file mode 100644
index 107d0b89cea..00000000000
--- a/mysql-test/t/partition_02myisam.test
+++ /dev/null
@@ -1,25 +0,0 @@
-###############################################
-# #
-# Partition tests MyISAM tables #
-# #
-###############################################
-
-#
-# NOTE: PLEASE DO NOT ADD NOT MYISAM SPECIFIC TESTCASES HERE !
-# NON STORAGE SPECIFIC TESTCASES SHOULD BE ADDED IN
-# THE SOURCED FIELS ONLY.
-#
-
-# Storage engine to be tested
-let $engine= 'MYISAM';
-eval SET SESSION storage_engine=$engine;
-
-
-# Other storage engine <> storage engine to be tested
-let $engine_other= 'MEMORY';
-# number of rows for the INSERT/UPDATE/DELETE/SELECT experiments
-# on partioned tables
-# Attention: In the moment the result files fit to @max_row = 200 only
-SET @max_row = 200;
-
--- source include/partition_1.inc
diff --git a/mysql-test/t/partition_archive.test b/mysql-test/t/partition_archive.test
new file mode 100644
index 00000000000..fad57107b7d
--- /dev/null
+++ b/mysql-test/t/partition_archive.test
@@ -0,0 +1,107 @@
+# Tests for the partition storage engine in connection with the
+# storage engine ARCHIVE.
+#
+# Creation:
+# 2007-10-18 mleich - Move ARCHIVE related sub tests of partition.test to
+# this test. Reason: ARCHIVE is not everytime available.
+# - Minor cleanup
+#
+
+--source include/have_partition.inc
+--source include/have_archive.inc
+
+
+#
+# Bug 17310 Partitions: Bugs with archived partitioned tables
+#
+--disable_warnings
+drop database if exists db99;
+drop table if exists t1;
+--enable_warnings
+
+create database db99;
+use db99;
+create table t1 (a int not null)
+engine=archive
+partition by list (a)
+(partition p0 values in (1), partition p1 values in (2));
+insert into t1 values (1), (2);
+--error 0, ER_CANT_CREATE_TABLE
+create index inx on t1 (a);
+alter table t1 add partition (partition p2 values in (3));
+alter table t1 drop partition p2;
+use test;
+drop database db99;
+
+create table t1 (f1 integer) engine= ARCHIVE partition by list(f1)
+(
+ partition p1 values in (1),
+ partition p2 values in (NULL),
+ partition p3 values in (2),
+ partition p4 values in (3),
+ partition p5 values in (4)
+);
+
+insert into t1 values (1),(2),(3),(4),(null);
+select * from t1;
+select * from t1 where f1 < 3;
+drop table t1;
+
+CREATE TABLE t1 (
+a int not null,
+b int not null,
+c int not null) engine=ARCHIVE
+partition by hash (a + 2)
+partitions 3
+(partition x1 tablespace ts1,
+ partition x2 tablespace ts2,
+ partition x3 tablespace ts3);
+
+insert into t1 values (1,1,1);
+insert into t1 values (2,1,1);
+insert into t1 values (3,1,1);
+insert into t1 values (4,1,1);
+insert into t1 values (5,1,1);
+
+select * from t1;
+
+drop table t1;
+
+#
+# Bug #32247 Test reports wrong value of "AUTO_INCREMENT" (on a partitioned InnoDB table)
+# (though reported as InnoDB bug, requires some ARCHIVE tests
+
+create table t1 (a int) engine=archive partition by hash(a);
+show create table t1;
+drop table t1;
+
+CREATE TABLE t1(id MEDIUMINT NOT NULL AUTO_INCREMENT,
+ f1 VARCHAR(25),
+ PRIMARY KEY(id)) ENGINE=ARCHIVE
+ PARTITION BY RANGE(id)
+ SUBPARTITION BY hash(id) subpartitions 2
+ (PARTITION pa1 values less than (10),
+ PARTITION pa2 values less than (20),
+ PARTITION pa3 values less than (30),
+ PARTITION pa4 values less than (40),
+ PARTITION pa5 values less than (50),
+ PARTITION pa6 values less than (60),
+ PARTITION pa7 values less than (70),
+ PARTITION pa8 values less than (80),
+ PARTITION pa9 values less than (90),
+ PARTITION pa10 values less than (100),
+ PARTITION pa11 values less than MAXVALUE);
+
+--disable_query_log
+let $n= 100;
+while ($n)
+{
+ insert into t1 (f1) values (repeat('a',25));
+ dec $n;
+}
+--enable_query_log
+
+show create table t1;
+select count(*) from t1;
+drop table t1;
+
diff --git a/mysql-test/t/partition_blackhole.test b/mysql-test/t/partition_blackhole.test
new file mode 100644
index 00000000000..9344ecb3b62
--- /dev/null
+++ b/mysql-test/t/partition_blackhole.test
@@ -0,0 +1,24 @@
+# Tests for the partition storage engine in connection with the
+# storage engine BLACKHOLE.
+#
+# Creation:
+# 2007-10-18 mleich - Move BLACKHOLE related sub tests of partition.test to
+# this test. Reason: BLACKHOLE is not everytime available.
+# - Minor cleanup
+#
+
+--source include/have_partition.inc
+--source include/have_blackhole.inc
+
+#
+# Bug#14524 Partitions: crash if blackhole
+#
+--disable_warnings
+DROP TABLE IF EXISTS t1;
+--enable_warnings
+CREATE TABLE `t1` (
+ `id` int(11) default NULL
+) ENGINE=BLACKHOLE DEFAULT CHARSET=latin1 PARTITION BY HASH (id) ;
+SELECT * FROM t1;
+
+DROP TABLE t1;
diff --git a/mysql-test/t/partition_csv.test b/mysql-test/t/partition_csv.test
new file mode 100644
index 00000000000..aa3d9d67c26
--- /dev/null
+++ b/mysql-test/t/partition_csv.test
@@ -0,0 +1,38 @@
+# Tests for the partition storage engine in connection with the
+# storage engine CSV.
+#
+# Creation:
+# 2007-10-18 mleich - Move CSV related sub tests of partition.test to
+# this test. Reason: CSV is not everytime available.
+# - Minor cleanup
+#
+
+--source include/have_partition.inc
+--source include/have_csv.inc
+
+#
+# Bug#19307: Partitions: csv delete failure
+# = CSV engine crashes
+#
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+--error ER_PARTITION_MERGE_ERROR
+create table t1 (a int)
+engine = csv
+partition by list (a)
+(partition p0 values in (null));
+
+#
+# Bug#27816: Log tables ran with partitions crashes the server when logging
+# is enabled.
+#
+USE mysql;
+SET GLOBAL general_log = 0;
+ALTER TABLE general_log ENGINE = MyISAM;
+--error ER_WRONG_USAGE
+ALTER TABLE general_log PARTITION BY RANGE (TO_DAYS(event_time))
+ (PARTITION p0 VALUES LESS THAN (733144),
+ PARTITION p1 VALUES LESS THAN (3000000));
+ALTER TABLE general_log ENGINE = CSV;
+SET GLOBAL general_log = 1;
diff --git a/mysql-test/t/partition_datatype.test b/mysql-test/t/partition_datatype.test
new file mode 100644
index 00000000000..61d3cb42c7b
--- /dev/null
+++ b/mysql-test/t/partition_datatype.test
@@ -0,0 +1,213 @@
+#
+# Simple test for the partition storage engine
+# with most datatypes and null / not null
+# as partition by key
+# Created to verify the fix for Bug#31705
+# Partitions: crash if varchar length > 65530
+#
+-- source include/have_partition.inc
+
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+
+# FIXME: disabled this test because of valgrind error
+#create table t1 (a bit not null) partition by key (a);
+#insert into t1 values (b'1');
+#select * from t1 where a = b'1';
+#drop table t1;
+create table t1 (a tinyint not null) partition by key (a);
+insert into t1 values (2);
+select * from t1 where a = 2;
+drop table t1;
+create table t1 (a smallint not null) partition by key (a);
+insert into t1 values (2);
+select * from t1 where a = 2;
+drop table t1;
+create table t1 (a mediumint not null) partition by key (a);
+insert into t1 values (2);
+select * from t1 where a = 2;
+drop table t1;
+create table t1 (a int not null) partition by key (a);
+insert into t1 values (2);
+select * from t1 where a = 2;
+drop table t1;
+create table t1 (a bigint not null) partition by key (a);
+insert into t1 values (2);
+select * from t1 where a = 2;
+drop table t1;
+create table t1 (a float not null) partition by key (a);
+insert into t1 values (2.1);
+select * from t1 where a = 2.1;
+drop table t1;
+create table t1 (a double not null) partition by key (a);
+insert into t1 values (2.1);
+select * from t1 where a = 2.1;
+drop table t1;
+create table t1 (a decimal not null) partition by key (a);
+insert into t1 values (2.1);
+select * from t1 where a = 2.1;
+drop table t1;
+create table t1 (a date not null) partition by key (a);
+insert into t1 values ('2001-01-01');
+select * from t1 where a = '2001-01-01';
+drop table t1;
+create table t1 (a datetime not null) partition by key (a);
+insert into t1 values ('2001-01-01 01:02:03');
+select * from t1 where a = '2001-01-01 01:02:03';
+drop table t1;
+create table t1 (a timestamp not null) partition by key (a);
+insert into t1 values ('2001-01-01 01:02:03');
+select * from t1 where a = '2001-01-01 01:02:03';
+drop table t1;
+create table t1 (a time not null) partition by key (a);
+insert into t1 values ('01:02:03');
+select * from t1 where a = '01:02:03';
+drop table t1;
+create table t1 (a year not null) partition by key (a);
+insert into t1 values ('2001');
+select * from t1 where a = '2001';
+drop table t1;
+create table t1 (a varchar(10) character set utf8 not null) partition by key (a);
+insert into t1 values ('abc');
+select * from t1 where a = 'abc';
+drop table t1;
+create table t1 (a varchar(300) character set utf8 not null) partition by key (a);
+insert into t1 values ('abc');
+select * from t1 where a = 'abc';
+drop table t1;
+create table t1 (a varchar(10) character set latin1 not null) partition by key (a);
+insert into t1 values ('abc');
+select * from t1 where a = 'abc';
+drop table t1;
+create table t1 (a varchar(300) character set latin1 not null) partition by key (a);
+insert into t1 values ('abc');
+select * from t1 where a = 'abc';
+drop table t1;
+create table t1 (a char(10) character set utf8 not null) partition by key (a);
+insert into t1 values ('abc');
+select * from t1 where a = 'abc';
+drop table t1;
+create table t1 (a char(10) character set latin1 not null) partition by key (a);
+insert into t1 values ('abc');
+select * from t1 where a = 'abc';
+drop table t1;
+create table t1 (a enum('y','n') not null) partition by key (a);
+insert into t1 values ('y');
+select * from t1 where a = 'y';
+drop table t1;
+create table t1 (a set('y','n') not null) partition by key (a);
+insert into t1 values ('y');
+select * from t1 where a = 'y';
+drop table t1;
+# FIXME: disabled this test because of valgrind error
+#create table t1 (a bit) partition by key (a);
+#insert into t1 values (b'1');
+#select * from t1 where a = b'1';
+#drop table t1;
+create table t1 (a tinyint) partition by key (a);
+insert into t1 values (2);
+select * from t1 where a = 2;
+drop table t1;
+create table t1 (a smallint) partition by key (a);
+insert into t1 values (2);
+select * from t1 where a = 2;
+drop table t1;
+create table t1 (a mediumint) partition by key (a);
+insert into t1 values (2);
+select * from t1 where a = 2;
+drop table t1;
+create table t1 (a int) partition by key (a);
+insert into t1 values (2);
+select * from t1 where a = 2;
+drop table t1;
+create table t1 (a bigint) partition by key (a);
+insert into t1 values (2);
+select * from t1 where a = 2;
+drop table t1;
+create table t1 (a float) partition by key (a);
+insert into t1 values (2.1);
+select * from t1 where a = 2.1;
+drop table t1;
+create table t1 (a double) partition by key (a);
+insert into t1 values (2.1);
+select * from t1 where a = 2.1;
+drop table t1;
+create table t1 (a decimal) partition by key (a);
+insert into t1 values (2.1);
+select * from t1 where a = 2.1;
+drop table t1;
+create table t1 (a date) partition by key (a);
+insert into t1 values ('2001-01-01');
+select * from t1 where a = '2001-01-01';
+drop table t1;
+create table t1 (a datetime) partition by key (a);
+insert into t1 values ('2001-01-01 01:02:03');
+select * from t1 where a = '2001-01-01 01:02:03';
+drop table t1;
+create table t1 (a timestamp null) partition by key (a);
+insert into t1 values ('2001-01-01 01:02:03');
+select * from t1 where a = '2001-01-01 01:02:03';
+drop table t1;
+create table t1 (a time) partition by key (a);
+insert into t1 values ('01:02:03');
+select * from t1 where a = '01:02:03';
+drop table t1;
+create table t1 (a year) partition by key (a);
+insert into t1 values ('2001');
+select * from t1 where a = '2001';
+drop table t1;
+create table t1 (a varchar(10) character set utf8) partition by key (a);
+insert into t1 values ('abc');
+select * from t1 where a = 'abc';
+drop table t1;
+create table t1 (a varchar(300) character set utf8) partition by key (a);
+insert into t1 values ('abc');
+select * from t1 where a = 'abc';
+drop table t1;
+create table t1 (a varchar(10) character set latin1) partition by key (a);
+insert into t1 values ('abc');
+select * from t1 where a = 'abc';
+drop table t1;
+create table t1 (a varchar(300) character set latin1) partition by key (a);
+insert into t1 values ('abc');
+select * from t1 where a = 'abc';
+drop table t1;
+create table t1 (a char(10) character set utf8) partition by key (a);
+insert into t1 values ('abc');
+select * from t1 where a = 'abc';
+drop table t1;
+create table t1 (a char(10) character set latin1) partition by key (a);
+insert into t1 values ('abc');
+select * from t1 where a = 'abc';
+drop table t1;
+create table t1 (a enum('y','n')) partition by key (a);
+insert into t1 values ('y');
+select * from t1 where a = 'y';
+drop table t1;
+create table t1 (a set('y','n')) partition by key (a);
+insert into t1 values ('y');
+select * from t1 where a = 'y';
+drop table t1;
+create table t1 (a varchar(65531)) partition by key (a);
+insert into t1 values ('bbbb');
+insert into t1 values ('aaaa');
+select * from t1 where a = 'aaa%';
+select * from t1 where a like 'aaa%';
+drop table t1;
+create table t1 (a varchar(65532)) partition by key (a);
+insert into t1 values ('bbbb');
+insert into t1 values ('aaaa');
+select * from t1 where a = 'aaa%';
+select * from t1 where a like 'aaa%';
+drop table t1;
+create table t1 (a varchar(65533) not null) partition by key (a);
+insert into t1 values ('aaaa');
+select * from t1 where a = 'aaa%';
+drop table t1;
+-- error ER_TOO_BIG_ROWSIZE
+create table t1 (a varchar(65533)) partition by key (a);
+-- error ER_TOO_BIG_ROWSIZE
+create table t1 (a varchar(65534) not null) partition by key (a);
+-- error ER_TOO_BIG_ROWSIZE
+create table t1 (a varchar(65535)) partition by key (a);
diff --git a/mysql-test/t/partition_error.test b/mysql-test/t/partition_error.test
index 5fc2097cc52..c9b95fc1664 100644
--- a/mysql-test/t/partition_error.test
+++ b/mysql-test/t/partition_error.test
@@ -9,6 +9,19 @@ drop table if exists t1;
--enable_warnings
#
+# Bug 29368:
+# Incorrect error, 1467, for syntax error when creating partition
+--error ER_PARTITION_REQUIRES_VALUES_ERROR
+CREATE TABLE t1 (
+ a int
+)
+PARTITION BY RANGE (a)
+(
+ PARTITION p0 VALUES LESS THAN (1),
+ PARTITION p1 VALU ES LESS THAN (2)
+);
+
+#
# Partition by key stand-alone error
#
--error 1064
diff --git a/mysql-test/t/partition_hash.test b/mysql-test/t/partition_hash.test
index 98add060a76..362d5f747e9 100644
--- a/mysql-test/t/partition_hash.test
+++ b/mysql-test/t/partition_hash.test
@@ -10,6 +10,22 @@ drop table if exists t1;
--enable_warnings
#
+# Bug#30822: crash when COALESCE
+#
+CREATE TABLE t1 (c1 INT)
+ PARTITION BY HASH (c1)
+ PARTITIONS 15;
+INSERT INTO t1 VALUES (1), (2), (3), (4), (5);
+ALTER TABLE t1 COALESCE PARTITION 13;
+DROP TABLE t1;
+CREATE TABLE t1 (c1 INT)
+ PARTITION BY LINEAR HASH (c1)
+ PARTITIONS 5;
+INSERT INTO t1 VALUES (1), (2), (3), (4), (5);
+ALTER TABLE t1 COALESCE PARTITION 3;
+DROP TABLE t1;
+
+#
# More partition pruning tests, especially on interval walking
#
create table t1 (a int unsigned)
@@ -144,3 +160,13 @@ select * from t1 where c3 between '2002-01-01' and '2002-12-31';
drop table t1;
+#
+# Bug#31210 - INSERT DELAYED crashes server when used on partitioned table
+#
+CREATE TABLE t1 (c1 INT) ENGINE=MyISAM PARTITION BY HASH(c1) PARTITIONS 1;
+# The test succeeds in an embedded server because normal insert is done.
+# The test fails in a normal server with "engine doesn't have this option".
+--error 0, ER_ILLEGAL_HA
+INSERT DELAYED INTO t1 VALUES (1);
+DROP TABLE t1;
+
diff --git a/mysql-test/t/partition_innodb.test b/mysql-test/t/partition_innodb.test
index 4a50332b3df..76a54b36942 100644
--- a/mysql-test/t/partition_innodb.test
+++ b/mysql-test/t/partition_innodb.test
@@ -1,10 +1,28 @@
--source include/have_partition.inc
--source include/have_innodb.inc
+# Bug#32948 - FKs allowed to reference partitioned table
+#
+-- echo # Bug#32948
+CREATE TABLE t1 (c1 INT, PRIMARY KEY (c1)) ENGINE=INNODB;
+CREATE TABLE t2 (c1 INT, PRIMARY KEY (c1),
+ FOREIGN KEY (c1) REFERENCES t1 (c1)
+ ON DELETE CASCADE)
+ENGINE=INNODB;
+--error ER_ROW_IS_REFERENCED
+ALTER TABLE t1 PARTITION BY HASH(c1) PARTITIONS 5;
+--error ER_ROW_IS_REFERENCED
+ALTER TABLE t1 ENGINE=MyISAM;
+DROP TABLE t2;
+DROP TABLE t1;
+
#
# Bug #14673: Wrong InnoDB default row format
#
create table t1 (a int) engine=innodb partition by hash(a) ;
+# Data_free for InnoDB tablespace varies depending on which
+# tests have been run before this one
+--replace_column 10 #
show table status like 't1';
drop table t1;
@@ -14,18 +32,33 @@ drop table t1;
create table t1 (a int)
engine = innodb
partition by key (a);
+# Data_free for InnoDB tablespace varies depending on which
+# tests have been run before this one
+--replace_column 10 #
show table status;
insert into t1 values (0), (1), (2), (3);
+# Data_free for InnoDB tablespace varies depending on which
+# tests have been run before this one
+--replace_column 10 #
show table status;
drop table t1;
create table t1 (a int auto_increment primary key)
engine = innodb
partition by key (a);
+# Data_free for InnoDB tablespace varies depending on which
+# tests have been run before this one
+--replace_column 10 #
show table status;
insert into t1 values (NULL), (NULL), (NULL), (NULL);
+# Data_free for InnoDB tablespace varies depending on which
+# tests have been run before this one
+--replace_column 10 #
show table status;
insert into t1 values (NULL), (NULL), (NULL), (NULL);
+# Data_free for InnoDB tablespace varies depending on which
+# tests have been run before this one
+--replace_column 10 #
show table status;
drop table t1;
@@ -142,3 +175,15 @@ PARTITION BY KEY(a) PARTITIONS 10;
INSERT INTO t1 VALUES(1),(2);
SELECT COUNT(*) FROM t1;
DROP TABLE t1;
+
+#
+# Bug #31893 Partitions: crash if subpartitions and engine change
+#
+create table t1 (int_column int, char_column char(5))
+ PARTITION BY RANGE (int_column) subpartition by key (char_column) subpartitions 2
+ (PARTITION p1 VALUES LESS THAN (5) ENGINE = InnoDB);
+alter table t1 PARTITION BY RANGE (int_column)
+ subpartition by key (char_column) subpartitions 2
+ (PARTITION p1 VALUES LESS THAN (5) ENGINE = myisam);
+show create table t1;
+drop table t1;
diff --git a/mysql-test/t/partition_mgm.test b/mysql-test/t/partition_mgm.test
index a06f8d1aee5..68da4a5b390 100644
--- a/mysql-test/t/partition_mgm.test
+++ b/mysql-test/t/partition_mgm.test
@@ -22,17 +22,18 @@ drop table t1;
CREATE TABLE t1 (f_date DATE, f_varchar VARCHAR(30))
PARTITION BY HASH(YEAR(f_date)) PARTITIONS 2;
SHOW CREATE TABLE t1;
-
---replace_result $MYSQLTEST_VARDIR "hello"
---exec ls $MYSQLTEST_VARDIR/master-data/test/t1#*
---replace_result $MYSQLTEST_VARDIR "hello"
---exec ls $MYSQLTEST_VARDIR/master-data/test/t1.*
+-- file_exists $MYSQLTEST_VARDIR/master-data/test/t1#P#p0.MYD
+-- file_exists $MYSQLTEST_VARDIR/master-data/test/t1#P#p0.MYI
+-- file_exists $MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYD
+-- file_exists $MYSQLTEST_VARDIR/master-data/test/t1#P#p1.MYI
+-- file_exists $MYSQLTEST_VARDIR/master-data/test/t1.frm
+-- file_exists $MYSQLTEST_VARDIR/master-data/test/t1.par
ALTER TABLE t1 COALESCE PARTITION 1;
SHOW CREATE TABLE t1;
---replace_result $MYSQLTEST_VARDIR "hello"
---exec ls $MYSQLTEST_VARDIR/master-data/test/t1#*
---replace_result $MYSQLTEST_VARDIR "hello"
---exec ls $MYSQLTEST_VARDIR/master-data/test/t1.*
+-- file_exists $MYSQLTEST_VARDIR/master-data/test/t1#P#p0.MYD
+-- file_exists $MYSQLTEST_VARDIR/master-data/test/t1#P#p0.MYI
+-- file_exists $MYSQLTEST_VARDIR/master-data/test/t1.frm
+-- file_exists $MYSQLTEST_VARDIR/master-data/test/t1.par
drop table t1;
#
# Bug 20767: REORGANIZE partition crashes
diff --git a/mysql-test/t/partition_range.test b/mysql-test/t/partition_range.test
index 50d850913bc..6ed3abab46a 100644
--- a/mysql-test/t/partition_range.test
+++ b/mysql-test/t/partition_range.test
@@ -6,7 +6,7 @@
-- source include/have_partition.inc
--disable_warnings
-drop table if exists t1;
+drop table if exists t1, t2;
--enable_warnings
#
@@ -757,3 +757,29 @@ DROP TABLE t1;
# a = "C2345678901234567890";
#select * from t1 where a = "12345678901234567890";
#drop table t1;
+
+
+#
+# BUG#30573: get wrong result with "group by" on PARTITIONed table
+#
+#create table t1 (a int);
+#insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
+#CREATE TABLE t2 (
+# defid int(10) unsigned NOT NULL,
+# day int(10) unsigned NOT NULL,
+# count int(10) unsigned NOT NULL,
+# filler char(200),
+# KEY (defid,day)
+#)
+#PARTITION BY RANGE (day) (
+# PARTITION p7 VALUES LESS THAN (20070401) ,
+# PARTITION p8 VALUES LESS THAN (20070501));
+
+#insert into t2 select 20, 20070311, 1, 'filler' from t1 A, t1 B;
+#insert into t2 select 20, 20070411, 1, 'filler' from t1 A, t1 B;
+#insert into t2 values(52, 20070321, 123, 'filler') ;
+#insert into t2 values(52, 20070322, 456, 'filler') ;
+
+#select sum(count) from t2 ch where ch.defid in (50,52) and ch.day between 20070320 and 20070401 group by defid;
+#drop table t1, t2;
+
diff --git a/mysql-test/t/partition_symlink.test b/mysql-test/t/partition_symlink.test
new file mode 100644
index 00000000000..ab779ec2b68
--- /dev/null
+++ b/mysql-test/t/partition_symlink.test
@@ -0,0 +1,121 @@
+# Test that must have symlink. eg. using DATA/INDEX DIR
+# (DATA/INDEX DIR requires symlinks)
+-- source include/have_partition.inc
+-- source include/have_symlink.inc
+# remove the not_windows line after fixing bug#30459
+-- source include/not_windows.inc
+-- disable_warnings
+DROP TABLE IF EXISTS t1;
+DROP DATABASE IF EXISTS mysqltest2;
+-- enable_warnings
+
+#
+# Bug 32091: Security breach via directory changes
+#
+# The below test shows that a pre-existing table mysqltest2.t1 cannot be
+# replaced by a user with no rights in 'mysqltest2'. The altered table
+# test.t1 will be altered (remove partitioning) into the test directory
+# and having its partitions removed from the mysqltest2 directory.
+# (the partitions data files are named <tablename>#P#<partname>.MYD
+# and will not collide with a non partitioned table's data files.)
+# NOTE: the privileges on files and directories are the same for all
+# database users in mysqld, though mysqld enforces privileges on
+# the database and table levels which in turn maps to directories and
+# files, but not the other way around (any db-user can use any
+# directory or file that the mysqld-process can use, via DATA/INDEX DIR)
+# this is the security flaw that was used in bug#32091 and bug#32111
+-- echo # Creating two non colliding tables mysqltest2.t1 and test.t1
+-- echo # test.t1 have partitions in mysqltest2-directory!
+-- echo # user root:
+ CREATE USER mysqltest_1@localhost;
+ CREATE DATABASE mysqltest2;
+ USE mysqltest2;
+ CREATE TABLE t1 (a INT);
+ INSERT INTO t1 VALUES (0);
+connect(con1,localhost,mysqltest_1,,);
+-- echo # user mysqltest_1:
+ USE test;
+ -- replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+ eval CREATE TABLE t1 (a INT)
+ PARTITION BY LIST (a) (
+ PARTITION p0 VALUES IN (0)
+ DATA DIRECTORY '$MYSQLTEST_VARDIR/master-data/mysqltest2'
+ INDEX DIRECTORY '$MYSQLTEST_VARDIR/master-data/mysqltest2',
+ PARTITION p1 VALUES IN (1)
+ DATA DIRECTORY '$MYSQLTEST_VARDIR/master-data/test'
+ INDEX DIRECTORY '$MYSQLTEST_VARDIR/master-data/test',
+ PARTITION p2 VALUES IN (2)
+ );
+ -- echo # without the patch for bug#32091 this would create
+ -- echo # files mysqltest2/t1.MYD + .MYI and possible overwrite
+ -- echo # the mysqltest2.t1 table (depending on bug#32111)
+ -- replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+ ALTER TABLE t1 REMOVE PARTITIONING;
+ INSERT INTO t1 VALUES (1);
+ SELECT * FROM t1;
+connection default;
+-- echo # user root:
+ USE mysqltest2;
+ FLUSH TABLES;
+ -- echo # if the patch works, this should be different
+ -- echo # and before the patch they were the same!
+ SELECT * FROM t1;
+ USE test;
+ SELECT * FROM t1;
+ DROP TABLE t1;
+ DROP DATABASE mysqltest2;
+# The below test shows that a pre-existing partition can not be
+# destroyed by a new partition from another table.
+# (Remember that a table or partition that uses the DATA/INDEX DIR
+# is symlinked and thus has
+# 1. the real file in the DATA/INDEX DIR and
+# 2. a symlink in its default database directory pointing to
+# the real file.
+# So it is using/blocking 2 files in (in 2 different directories
+-- echo # test that symlinks can not overwrite files when CREATE TABLE
+-- echo # user root:
+ CREATE DATABASE mysqltest2;
+ USE mysqltest2;
+ -- replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+ eval CREATE TABLE t1 (a INT)
+ PARTITION BY LIST (a) (
+ PARTITION p0 VALUES IN (0)
+ DATA DIRECTORY '$MYSQLTEST_VARDIR/master-data/mysqltest2'
+ INDEX DIRECTORY '$MYSQLTEST_VARDIR/master-data/mysqltest2',
+ PARTITION p1 VALUES IN (1)
+ DATA DIRECTORY '$MYSQLTEST_VARDIR/master-data/test'
+ INDEX DIRECTORY '$MYSQLTEST_VARDIR/master-data/test'
+ );
+connection con1;
+-- echo # user mysqltest_1:
+ USE test;
+ -- replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+ -- error 1,1
+ eval CREATE TABLE t1 (a INT)
+ PARTITION BY LIST (a) (
+ PARTITION p0 VALUES IN (0)
+ DATA DIRECTORY '$MYSQLTEST_VARDIR/master-data/mysqltest2'
+ INDEX DIRECTORY '$MYSQLTEST_VARDIR/master-data/mysqltest2',
+ PARTITION p1 VALUES IN (1)
+ DATA DIRECTORY '$MYSQLTEST_VARDIR/master-data/test'
+ INDEX DIRECTORY '$MYSQLTEST_VARDIR/master-data/test'
+ );
+ -- replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+ -- error 1,1
+ eval CREATE TABLE t1 (a INT)
+ PARTITION BY LIST (a) (
+ PARTITION p0 VALUES IN (0)
+ DATA DIRECTORY '$MYSQLTEST_VARDIR/master-data/test'
+ INDEX DIRECTORY '$MYSQLTEST_VARDIR/master-data/test',
+ PARTITION p1 VALUES IN (1)
+ DATA DIRECTORY '$MYSQLTEST_VARDIR/master-data/mysqltest2'
+ INDEX DIRECTORY '$MYSQLTEST_VARDIR/master-data/mysqltest2'
+ );
+connection default;
+-- echo # user root (cleanup):
+ DROP DATABASE mysqltest2;
+ USE test;
+ DROP USER mysqltest_1@localhost;
+ disconnect con1;
+
+
diff --git a/mysql-test/t/plugin.test b/mysql-test/t/plugin.test
index fb6d5febe45..d8d6d069676 100644
--- a/mysql-test/t/plugin.test
+++ b/mysql-test/t/plugin.test
@@ -24,3 +24,18 @@ UNINSTALL PLUGIN EXAMPLE;
--error 1305
UNINSTALL PLUGIN non_exist;
+
+
+--echo #
+--echo # Bug#32034: check_func_enum() does not check correct values but set it
+--echo # to impossible int val
+--echo #
+
+INSTALL PLUGIN example SONAME 'ha_example.so';
+
+SET GLOBAL example_enum_var= e1;
+SET GLOBAL example_enum_var= e2;
+--error 1231
+SET GLOBAL example_enum_var= impossible;
+
+UNINSTALL PLUGIN example;
diff --git a/mysql-test/t/profiling.test b/mysql-test/t/profiling.test
new file mode 100644
index 00000000000..5cb3f66aa2b
--- /dev/null
+++ b/mysql-test/t/profiling.test
@@ -0,0 +1,266 @@
+--source include/have_community_features.inc
+
+# Verify that the protocol isn't violated if we ask for profiling info
+# before profiling has recorded anything.
+show profiles;
+show profile all;
+
+# default is OFF
+show session variables like 'profil%';
+select @@profiling;
+
+# setting global variable is an error
+--error ER_LOCAL_VARIABLE
+set global profiling = ON;
+
+# But size is okay
+set global profiling_history_size=100;
+show global variables like 'profil%';
+
+# turn on for testing
+set session profiling = ON;
+set session profiling_history_size=30; # small enough to overflow
+
+# verify it is active
+show session variables like 'profil%';
+select @@profiling;
+
+# Profiling is a descriptive look into the way the server operated
+# in retrospect. Chad doesn't think it's wise to include the result
+# log, as this creates a proscriptive specification about how the
+# server should work in the future -- or it forces everyone who
+# changes the server significantly to record the test results again,
+# and that violates the spirit of our tests. Please don't include
+# execution-specific data here, as in all of the "show profile" and
+# information_schema.profiling results.
+
+create table t1 (
+ a int,
+ b int
+);
+insert into t1 values (1,1), (2,null), (3, 4);
+insert into t1 values (5,1), (6,null), (7, 4);
+insert into t1 values (1,1), (2,null), (3, 4);
+insert into t1 values (5,1), (6,null), (7, 4);
+select max(x) from (select sum(a) as x from t1 group by b) as teeone;
+insert into t1 select * from t1;
+select count(*) from t1;
+insert into t1 select * from t1;
+insert into t1 select * from t1;
+insert into t1 select * from t1;
+select count(*) from t1;
+insert into t1 select * from t1;
+insert into t1 select * from t1;
+insert into t1 select * from t1;
+select count(*) from t1;
+select sum(a) from t1;
+select sum(a) from t1 group by b;
+select sum(a) + sum(b) from t1 group by b;
+select max(x) from (select sum(a) as x from t1 group by b) as teeone;
+select '012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890' as big_string;
+
+--enable_result_log
+--replace_column 2 #
+show profiles;
+
+--disable_result_log
+###--replace_column 2 # 3 # 4 #
+show profile for query 15;
+###--replace_column 2 # 3 # 4 #
+show profile cpu for query 15;
+###--replace_column 2 # 3 # 4 # 5 # 6 #
+show profile cpu, block io for query 15;
+###--replace_column 2 # 3 # 4 #
+show profile cpu for query 9 limit 2 offset 2;
+show profile cpu for query 10 limit 0;
+--error 0,ER_WRONG_ARGUMENTS
+show profile cpu for query 65534;
+###--replace_column 2 #
+show profile memory;
+###--replace_column 2 # 3 # 4 #
+show profile block io;
+###--replace_column 2 # 3 # 4 #
+show profile context switches;
+###--replace_column 2 # 3 # 4 #
+show profile page faults;
+###--replace_column 2 # 3 # 4 #
+show profile ipc;
+###--replace_column 2 #
+show profile swaps limit 1 offset 2;
+###--replace_column 2 # 5 #
+show profile source;
+show profile all for query 0 limit 0;
+###--replace_column 2 # 3 # 4 # 5 # 6 # 7 # 8 # 9 # 10 # 11 # 12 # 13 # 16 #
+show profile all for query 15;
+###--replace_column 2 # 3 # 4 # 5 # 6 # 7 # 8 # 9 # 10 # 11 # 12 # 13 # 16 #
+
+select * from information_schema.profiling;
+select query_id, state, duration from information_schema.profiling;
+select query_id, sum(duration) from information_schema.profiling group by query_id;
+select query_id, count(*) from information_schema.profiling group by query_id;
+select sum(duration) from information_schema.profiling;
+
+# Broken down into number of stages and duration of each query.
+select query_id, count(*), sum(duration) from information_schema.profiling group by query_id;
+select CPU_user, CPU_system, Context_voluntary, Context_involuntary, Block_ops_in, Block_ops_out, Messages_sent, Messages_received, Page_faults_major, Page_faults_minor, Swaps, Source_function, Source_file, Source_line from information_schema.profiling;
+
+
+--enable_result_log
+drop table if exists t1, t2, t3;
+create table t1 (id int );
+create table t2 (id int not null);
+create table t3 (id int not null primary key);
+insert into t1 values (1), (2), (3);
+insert into t2 values (1), (2), (3);
+insert into t3 values (1), (2), (3);
+
+--replace_column 2 #
+show profiles;
+
+select * from t1;
+--replace_column 2 #
+show profiles;
+--echo This ^^ should end in "select * from t1;"
+
+delete from t1;
+insert into t1 values (1), (2), (3);
+insert into t1 values (1), (2), (3);
+
+select * from t1;
+--replace_column 2 #
+show profiles;
+
+# Turning profiling off does freeze it
+set session profiling = OFF;
+select sum(id) from t1;
+--replace_column 2 #
+show profiles;
+
+## Verify that the various juggling of THD contexts doesn't affect profiling.
+
+## Functions and procedures
+set session profiling = ON;
+select @@profiling;
+create function f1() returns varchar(50) return 'hello';
+select @@profiling;
+select * from t1 where id <> f1();
+select @@profiling;
+
+set session profiling = OFF;
+drop table if exists profile_log;
+create table profile_log (how_many int);
+
+--disable_warnings
+drop procedure if exists p1;
+drop procedure if exists p2;
+drop procedure if exists p3;
+--enable_warnings
+
+delimiter //;
+create procedure p1 ()
+ modifies sql data
+begin
+ set profiling = ON;
+ select 'This p1 should show up in profiling';
+ insert into profile_log select count(*) from information_schema.profiling;
+end//
+create procedure p2()
+ deterministic
+begin
+ set profiling = ON;
+ call p1();
+ select 'This p2 should show up in profiling';
+end//
+create procedure p3 ()
+ reads sql data
+begin
+ set profiling = ON;
+ select 'This p3 should show up in profiling';
+ show profile;
+end//
+delimiter ;//
+
+--disable_result_log
+--echo first call to p1
+call p1;
+select * from profile_log;
+--echo second call to p1
+call p1;
+select * from profile_log;
+--echo third call to p1
+call p1;
+select * from profile_log;
+set session profiling = OFF;
+call p2;
+set session profiling = OFF;
+call p3;
+
+--replace_column 1 # 2 #
+show profiles;
+--enable_result_log
+
+drop procedure if exists p1;
+drop procedure if exists p2;
+drop procedure if exists p3;
+drop table if exists profile_log;
+
+## Triggers
+set session profiling = ON;
+drop table if exists t2;
+create table t2 (id int not null);
+create trigger t2_bi before insert on t2 for each row set @x=0;
+select @@profiling;
+insert into t2 values (1), (2), (3);
+select @@profiling;
+
+## ALTER TABLE
+set session profiling = ON;
+drop table if exists t1, t2;
+create table t1 (id int not null primary key);
+create table t2 (id int not null primary key, id1 int not null);
+select @@profiling;
+alter table t2 add foreign key (id1) references t1 (id) on delete cascade;
+select @@profiling;
+
+## Table LOCKing
+lock table t1 write;
+select @@profiling;
+unlock table;
+select @@profiling;
+
+## Transactions
+set autocommit=0;
+select @@profiling, @@autocommit;
+begin;
+select @@profiling;
+insert into t1 values (1);
+insert into t2 values (1,1);
+--echo testing referential integrity cascade
+delete from t1 where id = 1;
+select @@profiling;
+--echo testing rollback
+--disable_warnings
+rollback;
+--enable_warnings
+select @@profiling;
+--echo testing commit
+begin;
+select @@profiling;
+commit;
+select @@profiling;
+
+drop table if exists t1, t2, t3;
+drop view if exists v1;
+drop function if exists f1;
+
+## Multiple queries in one packet. Combo statements don't work with ps-proto.
+#--eval select 1; select 2; select 3;
+## two continuations, one starting
+#select state from information_schema.profiling where seq=1 order by query_id desc limit 3;
+
+
+## last thing in the file
+set session profiling = OFF;
+
+##
+--echo End of 5.0 tests
diff --git a/mysql-test/t/ps.test b/mysql-test/t/ps.test
index dea86bdd2fa..b45d67d8485 100644
--- a/mysql-test/t/ps.test
+++ b/mysql-test/t/ps.test
@@ -1223,6 +1223,16 @@ EXECUTE st1;
DEALLOCATE PREPARE st1;
DROP TABLE t1;
+
+#
+# Bug #32137: prepared statement crash with str_to_date in update clause
+#
+create table t1 (a int, b tinyint);
+prepare st1 from 'update t1 set b= (str_to_date(a, a))';
+execute st1;
+deallocate prepare st1;
+drop table t1;
+
--echo End of 4.1 tests.
############################# 5.0 tests start ################################
@@ -2778,4 +2788,38 @@ execute stmt;
show create table t1;
drop table t1;
+#
+# Bug #32030 DELETE does not return an error and deletes rows if error
+# evaluating WHERE
+#
+# Test that there is an error for prepared delete just like for the normal
+# one.
+#
+--disable_warnings
+drop table if exists t1, t2;
+--enable_warnings
+create table t1 (a int, b int);
+create table t2 like t1;
+
+insert into t1 (a, b) values (1,1), (1,2), (1,3), (1,4), (1,5),
+ (2,2), (2,3), (2,1), (3,1), (4,1), (4,2), (4,3), (4,4), (4,5), (4,6);
+
+insert into t2 select a, max(b) from t1 group by a;
+
+prepare stmt from "delete from t2 where (select (select max(b) from t1 group
+by a having a < 2) x from t1) > 10000";
+
+--error ER_SUBQUERY_NO_1_ROW
+delete from t2 where (select (select max(b) from t1 group
+by a having a < 2) x from t1) > 10000;
+--error ER_SUBQUERY_NO_1_ROW
+execute stmt;
+--error ER_SUBQUERY_NO_1_ROW
+execute stmt;
+
+deallocate prepare stmt;
+drop table t1, t2;
+
+
+
--echo End of 5.1 tests.
diff --git a/mysql-test/t/ps_ddl.test b/mysql-test/t/ps_ddl.test
new file mode 100644
index 00000000000..abb6563f052
--- /dev/null
+++ b/mysql-test/t/ps_ddl.test
@@ -0,0 +1,1851 @@
+#
+# Testing the behavior of 'PREPARE', 'DDL', 'EXECUTE' scenarios
+#
+# Background:
+# In a statement like "select * from t1", t1 can be:
+# - nothing (the table does not exist)
+# - a real table
+# - a temporary table
+# - a view
+#
+# Changing the nature of "t1" between a PREPARE and an EXECUTE
+# can invalidate the internal state of a prepared statement, so that,
+# during the execute, the server should:
+# - detect state changes and fail to execute a statement,
+# instead of crashing the server or returning wrong results
+# - "RE-PREPARE" the statement to restore a valid internal state.
+#
+# Also, changing the physical structure of "t1", by:
+# - changing the definition of t1 itself (DDL on tables, views)
+# - changing TRIGGERs associated with a table
+# - changing PROCEDURE, FUNCTION referenced by a TRIGGER body,
+# - changing PROCEDURE, FUNCTION referenced by a VIEW body,
+# impacts the internal structure of a prepared statement, and should
+# cause the same verifications at execute time to be performed.
+#
+# This test provided in this file cover the different state transitions
+# between a PREPARE and an EXECUTE, and are organized as follows:
+# - Part 1: NOTHING -> TABLE
+# - Part 2: NOTHING -> TEMPORARY TABLE
+# - Part 3: NOTHING -> VIEW
+# - Part 4: TABLE -> NOTHING
+# - Part 5: TABLE -> TABLE (DDL)
+# - Part 6: TABLE -> TABLE (TRIGGER)
+# - Part 7: TABLE -> TABLE (TRIGGER dependencies)
+# - Part 8: TABLE -> TEMPORARY TABLE
+# - Part 9: TABLE -> VIEW
+# - Part 10: TEMPORARY TABLE -> NOTHING
+# - Part 11: TEMPORARY TABLE -> TABLE
+# - Part 12: TEMPORARY TABLE -> TEMPORARY TABLE (DDL)
+# - Part 13: TEMPORARY TABLE -> VIEW
+# - Part 14: VIEW -> NOTHING
+# - Part 15: VIEW -> TABLE
+# - Part 16: VIEW -> TEMPORARY TABLE
+# - Part 17: VIEW -> VIEW (DDL)
+# - Part 18: VIEW -> VIEW (VIEW dependencies)
+# - Part 19: Special tables (INFORMATION_SCHEMA)
+# - Part 20: Special tables (log tables)
+# - Part 21: Special tables (system tables)
+# - Part 22: Special tables (views temp tables)
+# - Part 23: Special tables (internal join tables)
+# - Part 24: Special statements
+# - Part 25: Testing the strength of TABLE_SHARE version
+
+let $base_count = SELECT VARIABLE_VALUE from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE'
+into @base_count ;
+
+let $reprepared = SELECT VARIABLE_VALUE - @base_count AS REPREPARED from
+INFORMATION_SCHEMA.SESSION_STATUS where variable_name='COM_STMT_REPREPARE' ;
+
+--echo =====================================================================
+--echo Testing 1: NOTHING -> TABLE transitions
+--echo =====================================================================
+
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+
+eval $base_count;
+
+# can not be tested since prepare failed
+--error ER_NO_SUCH_TABLE
+prepare stmt from 'select * from t1';
+
+--echo =====================================================================
+--echo Testing 2: NOTHING -> TEMPORARY TABLE transitions
+--echo =====================================================================
+
+# can not be tested
+
+--echo =====================================================================
+--echo Testing 3: NOTHING -> VIEW transitions
+--echo =====================================================================
+
+# can not be tested
+
+--echo =====================================================================
+--echo Testing 4: TABLE -> NOTHING transitions
+--echo =====================================================================
+
+--disable_warnings
+drop table if exists t4;
+--enable_warnings
+
+eval $base_count;
+
+create table t4(a int);
+
+prepare stmt from 'select * from t4';
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+drop table t4;
+--error ER_NO_SUCH_TABLE
+execute stmt;
+eval $reprepared;
+--error ER_NO_SUCH_TABLE
+execute stmt;
+eval $reprepared;
+
+--echo =====================================================================
+--echo Testing 5: TABLE -> TABLE (DDL) transitions
+--echo =====================================================================
+
+--disable_warnings
+drop table if exists t5;
+--enable_warnings
+
+eval $base_count;
+
+create table t5(a int);
+
+prepare stmt from 'select * from t5';
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+alter table t5 add column (b int);
+
+# REPREPARED +1
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+drop table t5;
+
+--echo =====================================================================
+--echo Testing 6: TABLE -> TABLE (TRIGGER) transitions
+--echo =====================================================================
+
+#
+# Test 6-a: adding a relevant trigger
+# Test 6-b: adding an irrelevant trigger
+# Test 6-c: changing a relevant trigger
+# Test 6-d: changing an irrelevant trigger
+# Test 6-e: removing a relevant trigger
+# Test 6-f: removing an irrelevant trigger
+#
+
+--disable_warnings
+drop table if exists t6;
+--enable_warnings
+
+eval $base_count;
+
+create table t6(a int);
+
+prepare stmt from 'insert into t6(a) value (?)';
+set @val=1;
+execute stmt using @val;
+eval $reprepared;
+set @val=2;
+execute stmt using @val;
+eval $reprepared;
+
+# Relevant trigger: execute should reprepare
+delimiter $$;
+create trigger t6_bi before insert on t6 for each row
+ begin
+ set @message= "t6_bi";
+ end
+$$
+delimiter ;$$
+
+set @message="none";
+set @val=3;
+# REPREPARED +1
+execute stmt using @val;
+eval $reprepared;
+select @message;
+set @val=4;
+execute stmt using @val;
+eval $reprepared;
+select @message;
+
+prepare stmt from 'insert into t6(a) value (?)';
+set @message="none";
+set @val=5;
+execute stmt using @val;
+eval $reprepared;
+select @message;
+set @message="none";
+set @val=6;
+execute stmt using @val;
+eval $reprepared;
+select @message;
+
+# Unrelated trigger: execute can pass of fail, implementation dependent
+delimiter $$;
+create trigger t6_bd before delete on t6 for each row
+ begin
+ set @message= "t6_bd";
+ end
+$$
+delimiter ;$$
+
+set @message="none";
+set @val=7;
+execute stmt using @val;
+eval $reprepared;
+select @message;
+set @message="none";
+set @val=8;
+execute stmt using @val;
+eval $reprepared;
+select @message;
+
+prepare stmt from 'insert into t6(a) value (?)';
+set @message="none";
+set @val=9;
+execute stmt using @val;
+eval $reprepared;
+select @message;
+set @message="none";
+set @val=10;
+execute stmt using @val;
+eval $reprepared;
+select @message;
+
+# Relevant trigger: execute should reprepare
+drop trigger t6_bi;
+delimiter $$;
+create trigger t6_bi before insert on t6 for each row
+ begin
+ set @message= "t6_bi (2)";
+ end
+$$
+delimiter ;$$
+
+set @message="none";
+set @val=11;
+# REPREPARED +1
+execute stmt using @val;
+eval $reprepared;
+select @message;
+set @val=12;
+execute stmt using @val;
+eval $reprepared;
+select @message;
+
+prepare stmt from 'insert into t6(a) value (?)';
+set @message="none";
+set @val=13;
+execute stmt using @val;
+eval $reprepared;
+select @message;
+set @message="none";
+set @val=14;
+execute stmt using @val;
+eval $reprepared;
+select @message;
+
+# Unrelated trigger: execute can pass of fail, implementation dependent
+drop trigger t6_bd;
+delimiter $$;
+create trigger t6_bd before delete on t6 for each row
+ begin
+ set @message= "t6_bd (2)";
+ end
+$$
+delimiter ;$$
+
+set @message="none";
+set @val=15;
+execute stmt using @val;
+eval $reprepared;
+select @message;
+set @message="none";
+set @val=16;
+execute stmt using @val;
+eval $reprepared;
+select @message;
+
+prepare stmt from 'insert into t6(a) value (?)';
+set @message="none";
+set @val=17;
+execute stmt using @val;
+eval $reprepared;
+select @message;
+set @message="none";
+set @val=18;
+execute stmt using @val;
+eval $reprepared;
+select @message;
+
+drop trigger t6_bi;
+
+set @message="none";
+set @val=19;
+# safe to re-execute
+execute stmt using @val;
+eval $reprepared;
+select @message;
+set @val=20;
+# safe to re-execute
+execute stmt using @val;
+eval $reprepared;
+select @message;
+
+prepare stmt from 'insert into t6(a) value (?)';
+set @message="none";
+set @val=21;
+execute stmt using @val;
+eval $reprepared;
+select @message;
+set @val=22;
+execute stmt using @val;
+eval $reprepared;
+select @message;
+
+drop trigger t6_bd;
+
+set @val=23;
+# safe to re-execute
+execute stmt using @val;
+eval $reprepared;
+select @message;
+set @val=24;
+# safe to re-execute
+execute stmt using @val;
+eval $reprepared;
+select @message;
+
+select * from t6 order by a;
+drop table t6;
+
+--echo =====================================================================
+--echo Testing 7: TABLE -> TABLE (TRIGGER dependencies) transitions
+--echo =====================================================================
+
+#
+# Test 7-a: dependent PROCEDURE has changed
+# Test 7-b: dependent FUNCTION has changed
+# Test 7-c: dependent VIEW has changed
+# Test 7-d: dependent TABLE has changed
+# Test 7-e: dependent TABLE TRIGGER has changed
+#
+
+--disable_warnings
+drop table if exists t7_proc;
+drop table if exists t7_func;
+drop table if exists t7_view;
+drop table if exists t7_table;
+drop table if exists t7_dependent_table;
+drop table if exists t7_table_trigger;
+drop table if exists t7_audit;
+drop procedure if exists audit_proc;
+drop function if exists audit_func;
+drop view if exists audit_view;
+--enable_warnings
+
+eval $base_count;
+
+create table t7_proc(a int);
+create table t7_func(a int);
+create table t7_view(a int);
+create table t7_table(a int);
+create table t7_table_trigger(a int);
+
+create table t7_audit(old_a int, new_a int, reason varchar(50));
+create table t7_dependent_table(old_a int, new_a int, reason varchar(50));
+
+create procedure audit_proc(a int)
+ insert into t7_audit values (NULL, a, "proc v1");
+
+create function audit_func() returns varchar(50)
+ return "func v1";
+
+create view audit_view as select "view v1" as reason from dual;
+
+create trigger t7_proc_bi before insert on t7_proc for each row
+ call audit_proc(NEW.a);
+
+create trigger t7_func_bi before insert on t7_func for each row
+ insert into t7_audit values (NULL, NEW.a, audit_func());
+
+create trigger t7_view_bi before insert on t7_view for each row
+ insert into t7_audit values (NULL, NEW.a, (select reason from audit_view));
+
+create trigger t7_table_bi before insert on t7_table for each row
+ insert into t7_dependent_table values (NULL, NEW.a, "dependent table");
+
+create trigger t7_table_trigger_bi before insert on t7_dependent_table
+ for each row set NEW.reason="trigger v1";
+
+prepare stmt_proc from 'insert into t7_proc(a) value (?)';
+set @val=101;
+execute stmt_proc using @val;
+eval $reprepared;
+set @val=102;
+execute stmt_proc using @val;
+eval $reprepared;
+
+drop procedure audit_proc;
+
+create procedure audit_proc(a int)
+ insert into t7_audit values (NULL, a, "proc v2");
+
+set @val=103;
+execute stmt_proc using @val;
+eval $reprepared;
+set @val=104;
+execute stmt_proc using @val;
+eval $reprepared;
+
+
+prepare stmt_func from 'insert into t7_func(a) value (?)';
+set @val=201;
+execute stmt_func using @val;
+eval $reprepared;
+set @val=202;
+execute stmt_func using @val;
+eval $reprepared;
+
+drop function audit_func;
+
+create function audit_func() returns varchar(50)
+ return "func v2";
+
+set @val=203;
+execute stmt_func using @val;
+eval $reprepared;
+set @val=204;
+execute stmt_func using @val;
+eval $reprepared;
+
+prepare stmt_view from 'insert into t7_view(a) value (?)';
+set @val=301;
+execute stmt_view using @val;
+eval $reprepared;
+set @val=302;
+execute stmt_view using @val;
+eval $reprepared;
+
+drop view audit_view;
+
+create view audit_view as select "view v2" as reason from dual;
+
+# Because of Bug#33255, the wrong result is still produced for cases
+# 303 and 304, even after re-preparing the statement.
+# This is because the table trigger is cached and is not invalidated.
+
+set @val=303;
+# REPREPARED +1
+execute stmt_view using @val;
+eval $reprepared;
+set @val=304;
+execute stmt_view using @val;
+eval $reprepared;
+
+
+prepare stmt_table from 'insert into t7_table(a) value (?)';
+set @val=401;
+execute stmt_table using @val;
+eval $reprepared;
+set @val=402;
+execute stmt_table using @val;
+eval $reprepared;
+
+alter table t7_dependent_table add column comments varchar(100) default NULL;
+
+set @val=403;
+# REPREPARED +1
+--error ER_WRONG_VALUE_COUNT_ON_ROW
+execute stmt_table using @val;
+eval $reprepared;
+set @val=404;
+--error ER_WRONG_VALUE_COUNT_ON_ROW
+execute stmt_table using @val;
+eval $reprepared;
+
+alter table t7_dependent_table drop column comments;
+
+set @val=405;
+# REPREPARED +1
+execute stmt_table using @val;
+eval $reprepared;
+set @val=406;
+execute stmt_table using @val;
+eval $reprepared;
+
+
+prepare stmt_table_trigger from 'insert into t7_table(a) value (?)';
+set @val=501;
+execute stmt_table_trigger using @val;
+eval $reprepared;
+set @val=502;
+execute stmt_table_trigger using @val;
+eval $reprepared;
+
+drop trigger t7_table_trigger_bi;
+
+create trigger t7_table_trigger_bi before insert on t7_dependent_table
+ for each row set NEW.reason="trigger v2";
+
+set @val=503;
+# REPREPARED +1
+execute stmt_table_trigger using @val;
+eval $reprepared;
+set @val=504;
+execute stmt_table_trigger using @val;
+eval $reprepared;
+
+select * from t7_audit order by new_a;
+
+select * from t7_dependent_table order by new_a;
+
+drop table t7_proc;
+drop table t7_func;
+drop table t7_view;
+drop table t7_table;
+drop table t7_dependent_table;
+drop table t7_table_trigger;
+drop table t7_audit;
+drop procedure audit_proc;
+drop function audit_func;
+drop view audit_view;
+
+--echo =====================================================================
+--echo Testing 8: TABLE -> TEMPORARY TABLE transitions
+--echo =====================================================================
+
+--disable_warnings
+drop table if exists t8;
+--enable_warnings
+
+eval $base_count;
+
+create table t8(a int);
+
+prepare stmt from 'select * from t8';
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+drop table t8;
+create temporary table t8(a int);
+
+# REPREPARED +1
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+drop table t8;
+
+--echo =====================================================================
+--echo Testing 9: TABLE -> VIEW transitions
+--echo =====================================================================
+
+--disable_warnings
+drop table if exists t9;
+drop table if exists t9_b;
+--enable_warnings
+
+eval $base_count;
+
+create table t9(a int);
+create table t9_b(a int);
+
+prepare stmt from 'select * from t9';
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+drop table t9;
+create view t9 as select * from t9_b;
+
+# REPREPARED +1
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+drop view t9;
+drop table t9_b;
+
+--echo =====================================================================
+--echo Testing 10: TEMPORARY TABLE -> NOTHING transitions
+--echo =====================================================================
+
+--disable_warnings
+drop temporary table if exists t10;
+--enable_warnings
+
+eval $base_count;
+
+create temporary table t10(a int);
+
+prepare stmt from 'select * from t10';
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+drop temporary table t10;
+--error ER_NO_SUCH_TABLE
+execute stmt;
+eval $reprepared;
+--error ER_NO_SUCH_TABLE
+execute stmt;
+eval $reprepared;
+
+--echo =====================================================================
+--echo Testing 11: TEMPORARY TABLE -> TABLE transitions
+--echo =====================================================================
+
+--disable_warnings
+drop table if exists t11;
+drop temporary table if exists t11;
+--enable_warnings
+
+eval $base_count;
+
+create table t11(a int);
+insert into t11(a) value (1);
+create temporary table t11(a int);
+
+prepare stmt from 'select * from t11';
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+drop temporary table t11;
+
+# REPREPARED +1
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+select * from t11;
+drop table t11;
+
+--echo =====================================================================
+--echo Testing 12: TEMPORARY TABLE -> TEMPORARY TABLE (DDL) transitions
+--echo =====================================================================
+
+--disable_warnings
+drop temporary table if exists t12;
+--enable_warnings
+
+eval $base_count;
+
+create temporary table t12(a int);
+
+prepare stmt from 'select * from t12';
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+drop temporary table t12;
+create temporary table t12(a int, b int);
+
+# REPREPARED +1
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+select * from t12;
+drop table t12;
+
+--echo =====================================================================
+--echo Testing 13: TEMPORARY TABLE -> VIEW transitions
+--echo =====================================================================
+
+--disable_warnings
+drop temporary table if exists t13;
+drop table if exists t13_b;
+--enable_warnings
+
+eval $base_count;
+
+create temporary table t13(a int);
+create table t13_b(a int);
+
+prepare stmt from 'select * from t13';
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+drop temporary table t13;
+create view t13 as select * from t13_b;
+
+# REPREPARED +1
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+drop view t13;
+drop table t13_b;
+
+--echo =====================================================================
+--echo Testing 14: VIEW -> NOTHING transitions
+--echo =====================================================================
+
+--disable_warnings
+drop view if exists t14;
+drop table if exists t14_b;
+--enable_warnings
+
+eval $base_count;
+
+create table t14_b(a int);
+create view t14 as select * from t14_b;
+
+prepare stmt from 'select * from t14';
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+drop view t14;
+
+# REPREPARED +1
+--error ER_NO_SUCH_TABLE
+execute stmt;
+eval $reprepared;
+--error ER_NO_SUCH_TABLE
+execute stmt;
+eval $reprepared;
+
+drop table t14_b;
+
+--echo =====================================================================
+--echo Testing 15: VIEW -> TABLE transitions
+--echo =====================================================================
+
+--disable_warnings
+drop view if exists t15;
+drop table if exists t15_b;
+--enable_warnings
+
+eval $base_count;
+
+create table t15_b(a int);
+create view t15 as select * from t15_b;
+
+prepare stmt from 'select * from t15';
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+drop view t15;
+create table t15(a int);
+
+# REPREPARED +1
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+drop table t15_b;
+drop table t15;
+
+--echo =====================================================================
+--echo Testing 16: VIEW -> TEMPORARY TABLE transitions
+--echo =====================================================================
+
+--disable_warnings
+drop view if exists t16;
+drop table if exists t16_b;
+--enable_warnings
+
+eval $base_count;
+
+create table t16_b(a int);
+create view t16 as select * from t16_b;
+
+prepare stmt from 'select * from t16';
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+drop view t16;
+create temporary table t16(a int);
+
+# REPREPARED +1
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+drop table t16_b;
+drop temporary table t16;
+
+--echo =====================================================================
+--echo Testing 17: VIEW -> VIEW (DDL) transitions
+--echo =====================================================================
+
+--disable_warnings
+drop view if exists t17;
+drop table if exists t17_b;
+--enable_warnings
+
+eval $base_count;
+
+create table t17_b(a int);
+insert into t17_b values (10), (20), (30);
+
+create view t17 as select a, 2*a as b, 3*a as c from t17_b;
+select * from t17;
+
+prepare stmt from 'select * from t17';
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+drop view t17;
+create view t17 as select a, 2*a as b, 10*a as c from t17_b;
+select * from t17;
+
+# REPREPARED +1
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+drop table t17_b;
+drop view t17;
+
+--echo =====================================================================
+--echo Testing 18: VIEW -> VIEW (VIEW dependencies) transitions
+--echo =====================================================================
+
+#
+# Test 18-a: dependent PROCEDURE has changed (via a trigger)
+# Test 18-b: dependent FUNCTION has changed
+# Test 18-c: dependent VIEW has changed
+# Test 18-d: dependent TABLE has changed
+# Test 18-e: dependent TABLE TRIGGER has changed
+#
+
+--disable_warnings
+drop table if exists t18;
+drop table if exists t18_dependent_table;
+drop view if exists t18_func;
+drop view if exists t18_view;
+drop view if exists t18_table;
+drop function if exists view_func;
+drop view if exists view_view;
+--enable_warnings
+
+eval $base_count;
+
+# TODO: insertable view -> trigger
+# TODO: insertable view -> trigger -> proc ?
+
+create table t18(a int);
+insert into t18 values (1), (2), (3);
+
+create function view_func(x int) returns int
+ return x+1;
+
+create view view_view as select "view v1" as reason from dual;
+
+create table t18_dependent_table(a int);
+
+create view t18_func as select a, view_func(a) as b from t18;
+create view t18_view as select a, reason as b from t18, view_view;
+create view t18_table as select * from t18;
+
+prepare stmt_func from 'select * from t18_func';
+execute stmt_func;
+eval $reprepared;
+execute stmt_func;
+eval $reprepared;
+
+drop function view_func;
+create function view_func(x int) returns int
+ return x*x;
+
+execute stmt_func;
+eval $reprepared;
+execute stmt_func;
+eval $reprepared;
+
+prepare stmt_view from 'select * from t18_view';
+execute stmt_view;
+eval $reprepared;
+execute stmt_view;
+eval $reprepared;
+
+drop view view_view;
+create view view_view as select "view v2" as reason from dual;
+
+# REPREPARED +1
+execute stmt_view;
+eval $reprepared;
+execute stmt_view;
+eval $reprepared;
+
+prepare stmt_table from 'select * from t18_table';
+execute stmt_table;
+eval $reprepared;
+execute stmt_table;
+eval $reprepared;
+
+alter table t18 add column comments varchar(50) default NULL;
+
+# REPREPARED +1
+execute stmt_table;
+eval $reprepared;
+execute stmt_table;
+eval $reprepared;
+
+drop table t18;
+drop table t18_dependent_table;
+drop view t18_func;
+drop view t18_view;
+drop view t18_table;
+drop function view_func;
+drop view view_view;
+
+--echo =====================================================================
+--echo Testing 19: Special tables (INFORMATION_SCHEMA)
+--echo =====================================================================
+
+--disable_warnings
+drop procedure if exists proc_19;
+--enable_warnings
+
+eval $base_count;
+
+# Using a temporary table internally should not confuse the prepared
+# statement code, and should not raise ER_PS_INVALIDATED errors
+prepare stmt from
+ 'select ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_TYPE
+ from INFORMATION_SCHEMA.ROUTINES where
+ routine_name=\'proc_19\'';
+
+create procedure proc_19() select "hi there";
+
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+drop procedure proc_19;
+create procedure proc_19() select "hi there, again";
+
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+drop procedure proc_19;
+
+--echo =====================================================================
+--echo Testing 20: Special tables (log tables)
+--echo =====================================================================
+
+eval $base_count;
+
+prepare stmt from
+ 'select * from mysql.general_log where argument=\'IMPOSSIBLE QUERY STRING\'';
+
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+--echo =====================================================================
+--echo Testing 21: Special tables (system tables)
+--echo =====================================================================
+
+--disable_warnings
+drop procedure if exists proc_21;
+--enable_warnings
+
+eval $base_count;
+
+prepare stmt from
+ 'select type, db, name from mysql.proc where name=\'proc_21\'';
+
+create procedure proc_21() select "hi there";
+
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+drop procedure proc_21;
+create procedure proc_21() select "hi there, again";
+
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+drop procedure proc_21;
+
+--echo =====================================================================
+--echo Testing 22: Special tables (views temp tables)
+--echo =====================================================================
+
+--disable_warnings
+drop table if exists t22_b;
+drop view if exists t22;
+--enable_warnings
+
+eval $base_count;
+
+create table t22_b(a int);
+
+create algorithm=temptable view t22 as select a*a as a2 from t22_b;
+
+# Using a temporary table internally should not confuse the prepared
+# statement code, and should not raise ER_PS_INVALIDATED errors
+show create view t22;
+
+prepare stmt from 'select * from t22';
+
+insert into t22_b values (1), (2), (3);
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+insert into t22_b values (4), (5), (6);
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+drop table t22_b;
+drop view t22;
+
+--echo =====================================================================
+--echo Testing 23: Special tables (internal join tables)
+--echo =====================================================================
+
+--disable_warnings
+drop table if exists t23_a;
+drop table if exists t23_b;
+--enable_warnings
+
+eval $base_count;
+
+create table t23_a(a int);
+create table t23_b(b int);
+
+# Using a temporary table internally should not confuse the prepared
+# statement code, and should not raise ER_PS_INVALIDATED errors
+prepare stmt from 'select * from t23_a join t23_b';
+
+insert into t23_a values (1), (2), (3);
+insert into t23_b values (10), (20), (30);
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+insert into t23_a values (4);
+insert into t23_b values (40);
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+drop table t23_a;
+drop table t23_b;
+
+--echo =====================================================================
+--echo Testing 24: Special statements
+--echo =====================================================================
+
+# SQLCOM_ALTER_TABLE:
+
+--disable_warnings
+drop table if exists t24_alter;
+--enable_warnings
+
+eval $base_count;
+
+create table t24_alter(a int);
+
+prepare stmt from 'alter table t24_alter add column b int';
+execute stmt;
+eval $reprepared;
+
+drop table t24_alter;
+create table t24_alter(a1 int, a2 int);
+
+# t24_alter has changed, and it's not a problem
+execute stmt;
+eval $reprepared;
+
+alter table t24_alter drop column b;
+execute stmt;
+eval $reprepared;
+
+alter table t24_alter drop column b;
+execute stmt;
+eval $reprepared;
+
+drop table t24_alter;
+
+# SQLCOM_REPAIR:
+
+--disable_warnings
+drop table if exists t24_repair;
+--enable_warnings
+
+create table t24_repair(a int);
+insert into t24_repair values (1), (2), (3);
+
+prepare stmt from 'repair table t24_repair';
+execute stmt;
+eval $reprepared;
+
+drop table t24_repair;
+create table t24_repair(a1 int, a2 int);
+insert into t24_repair values (1, 10), (2, 20), (3, 30);
+
+# t24_repair has changed, and it's not a problem
+execute stmt;
+eval $reprepared;
+
+alter table t24_repair add column b varchar(50) default NULL;
+execute stmt;
+eval $reprepared;
+
+alter table t24_repair drop column b;
+execute stmt;
+eval $reprepared;
+
+drop table t24_repair;
+
+# SQLCOM_ANALYZE:
+
+--disable_warnings
+drop table if exists t24_analyze;
+--enable_warnings
+
+create table t24_analyze(a int);
+insert into t24_analyze values (1), (2), (3);
+
+prepare stmt from 'analyze table t24_analyze';
+execute stmt;
+eval $reprepared;
+
+drop table t24_analyze;
+create table t24_analyze(a1 int, a2 int);
+insert into t24_analyze values (1, 10), (2, 20), (3, 30);
+
+# t24_analyze has changed, and it's not a problem
+execute stmt;
+eval $reprepared;
+
+alter table t24_analyze add column b varchar(50) default NULL;
+execute stmt;
+eval $reprepared;
+
+alter table t24_analyze drop column b;
+execute stmt;
+eval $reprepared;
+
+drop table t24_analyze;
+
+# SQLCOM_OPTIMIZE:
+
+--disable_warnings
+drop table if exists t24_optimize;
+--enable_warnings
+
+create table t24_optimize(a int);
+insert into t24_optimize values (1), (2), (3);
+
+prepare stmt from 'optimize table t24_optimize';
+execute stmt;
+eval $reprepared;
+
+drop table t24_optimize;
+create table t24_optimize(a1 int, a2 int);
+insert into t24_optimize values (1, 10), (2, 20), (3, 30);
+
+# t24_optimize has changed, and it's not a problem
+execute stmt;
+eval $reprepared;
+
+alter table t24_optimize add column b varchar(50) default NULL;
+execute stmt;
+eval $reprepared;
+
+alter table t24_optimize drop column b;
+execute stmt;
+eval $reprepared;
+
+drop table t24_optimize;
+
+# SQLCOM_SHOW_CREATE_PROC:
+
+--disable_warnings
+drop procedure if exists changing_proc;
+--enable_warnings
+
+prepare stmt from 'show create procedure changing_proc';
+--error ER_SP_DOES_NOT_EXIST
+execute stmt;
+eval $reprepared;
+--error ER_SP_DOES_NOT_EXIST
+execute stmt;
+eval $reprepared;
+
+create procedure changing_proc() begin end;
+
+# changing_proc has changed, and it's not a problem
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+drop procedure changing_proc;
+create procedure changing_proc(x int, y int) begin end;
+
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+drop procedure changing_proc;
+
+--error ER_SP_DOES_NOT_EXIST
+execute stmt;
+eval $reprepared;
+--error ER_SP_DOES_NOT_EXIST
+execute stmt;
+eval $reprepared;
+
+# SQLCOM_SHOW_CREATE_FUNC:
+
+--disable_warnings
+drop function if exists changing_func;
+--enable_warnings
+
+prepare stmt from 'show create function changing_func';
+--error ER_SP_DOES_NOT_EXIST
+execute stmt;
+eval $reprepared;
+--error ER_SP_DOES_NOT_EXIST
+execute stmt;
+eval $reprepared;
+
+create function changing_func() returns int return 0;
+
+# changing_proc has changed, and it's not a problem
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+drop function changing_func;
+create function changing_func(x int, y int) returns int return x+y;
+
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+drop function changing_func;
+
+--error ER_SP_DOES_NOT_EXIST
+execute stmt;
+eval $reprepared;
+--error ER_SP_DOES_NOT_EXIST
+execute stmt;
+eval $reprepared;
+
+# SQLCOM_SHOW_CREATE_TRIGGER:
+
+--disable_warnings
+drop table if exists t24_trigger;
+--enable_warnings
+
+create table t24_trigger(a int);
+
+prepare stmt from 'show create trigger t24_bi;';
+--error ER_TRG_DOES_NOT_EXIST
+execute stmt;
+eval $reprepared;
+--error ER_TRG_DOES_NOT_EXIST
+execute stmt;
+eval $reprepared;
+
+delimiter $$;
+create trigger t24_bi before insert on t24_trigger for each row
+ begin
+ set @message= "t24_bi";
+ end
+$$
+delimiter ;$$
+
+# t24_bi has changed, and it's not a problem
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+drop trigger t24_bi;
+delimiter $$;
+create trigger t24_bi before insert on t24_trigger for each row
+ begin
+ set @message= "t24_bi (2)";
+ end
+$$
+delimiter ;$$
+
+# t24_bi has changed, and it's not a problem
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+drop trigger t24_bi;
+
+--error ER_TRG_DOES_NOT_EXIST
+execute stmt;
+eval $reprepared;
+--error ER_TRG_DOES_NOT_EXIST
+execute stmt;
+eval $reprepared;
+
+drop table t24_trigger;
+
+--echo =====================================================================
+--echo Testing 25: Testing the strength of TABLE_SHARE version
+--echo =====================================================================
+
+# Test 25-a: number of columns
+
+--disable_warnings
+drop table if exists t25_num_col;
+--enable_warnings
+
+eval $base_count;
+
+create table t25_num_col(a int);
+
+prepare stmt from 'select * from t25_num_col';
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+alter table t25_num_col add column b varchar(50) default NULL;
+
+# REPREPARED +1
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+drop table t25_num_col;
+
+# Test 25-b: column name
+
+--disable_warnings
+drop table if exists t25_col_name;
+--enable_warnings
+
+create table t25_col_name(a int);
+
+prepare stmt from 'select * from t25_col_name';
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+alter table t25_col_name change a b int;
+
+# REPREPARED +1
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+drop table t25_col_name;
+
+# Test 25-c: column type
+
+--disable_warnings
+drop table if exists t25_col_type;
+--enable_warnings
+
+create table t25_col_type(a int);
+
+prepare stmt from 'select * from t25_col_type';
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+alter table t25_col_type change a a varchar(10);
+
+# REPREPARED +1
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+drop table t25_col_type;
+
+# Test 25-d: column type length
+
+--disable_warnings
+drop table if exists t25_col_type_length;
+--enable_warnings
+
+create table t25_col_type_length(a varchar(10));
+
+prepare stmt from 'select * from t25_col_type_length';
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+alter table t25_col_type_length change a a varchar(20);
+
+# REPREPARED +1
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+drop table t25_col_type_length;
+
+# Test 25-e: column NULL property
+
+--disable_warnings
+drop table if exists t25_col_null;
+--enable_warnings
+
+create table t25_col_null(a varchar(10));
+
+prepare stmt from 'select * from t25_col_null';
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+alter table t25_col_null change a a varchar(10) NOT NULL;
+
+# REPREPARED +1
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+drop table t25_col_null;
+
+# Test 25-f: column DEFAULT
+
+--disable_warnings
+drop table if exists t25_col_default;
+--enable_warnings
+
+create table t25_col_default(a int, b int DEFAULT 10);
+
+prepare stmt from 'insert into t25_col_default(a) values (?)';
+set @val=1;
+execute stmt using @val;
+eval $reprepared;
+set @val=2;
+execute stmt using @val;
+eval $reprepared;
+
+alter table t25_col_default change b b int DEFAULT 20;
+
+set @val=3;
+# Must insert the correct default value for b
+execute stmt using @val;
+eval $reprepared;
+
+set @val=4;
+# Must insert the correct default value for b
+execute stmt using @val;
+eval $reprepared;
+
+select * from t25_col_default;
+
+drop table t25_col_default;
+
+# Test 25-g: number of keys
+
+--disable_warnings
+drop table if exists t25_index;
+--enable_warnings
+
+create table t25_index(a varchar(10));
+
+prepare stmt from 'select * from t25_index';
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+create index i1 on t25_index(a);
+
+# REPREPARED +1
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+drop table t25_index;
+
+# Test 25-h: changing index uniqueness
+
+--disable_warnings
+drop table if exists t25_index_unique;
+--enable_warnings
+
+create table t25_index_unique(a varchar(10), b varchar(10));
+create index i1 on t25_index_unique(a, b);
+
+show create table t25_index_unique;
+
+prepare stmt from 'select * from t25_index_unique';
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+alter table t25_index_unique drop index i1;
+create unique index i1 on t25_index_unique(a, b);
+
+show create table t25_index_unique;
+
+# REPREPARED +1
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+drop table t25_index_unique;
+
+--echo =====================================================================
+--echo Testing reported bugs
+--echo =====================================================================
+
+#
+# Bug#12093 (SP not found on second PS execution if another thread drops
+# other SP in between)
+#
+
+--disable_warnings
+drop table if exists table_12093;
+drop function if exists func_12093;
+drop function if exists func_12093_unrelated;
+drop procedure if exists proc_12093;
+--enable_warnings
+
+eval $base_count;
+
+connect (con1,localhost,root,,);
+
+connection default;
+
+create table table_12093(a int);
+
+delimiter //;
+
+create function func_12093()
+returns int
+begin
+ return (select count(*) from table_12093);
+end//
+
+create procedure proc_12093(a int)
+begin
+ select * from table_12093;
+end//
+
+delimiter ;//
+
+create function func_12093_unrelated() returns int return 2;
+create procedure proc_12093_unrelated() begin end;
+
+prepare stmt_sf from 'select func_12093();';
+prepare stmt_sp from 'call proc_12093(func_12093())';
+
+execute stmt_sf;
+eval $reprepared;
+execute stmt_sp;
+eval $reprepared;
+
+connection con1;
+
+drop function func_12093_unrelated;
+drop procedure proc_12093_unrelated;
+
+connection default;
+
+# previously, failed with --error 1305
+execute stmt_sf;
+eval $reprepared;
+# previously, failed with --error 1305
+execute stmt_sp;
+eval $reprepared;
+
+# previously, failed with --error 1305
+execute stmt_sf;
+eval $reprepared;
+# previously, failed with --error 1305
+execute stmt_sp;
+eval $reprepared;
+
+deallocate prepare stmt_sf;
+deallocate prepare stmt_sp;
+
+disconnect con1;
+
+drop table table_12093;
+drop function func_12093;
+drop procedure proc_12093;
+
+#
+# Bug#21294 (executing a prepared statement that executes a stored function
+# which was recreat)
+#
+
+--disable_warnings
+drop function if exists func_21294;
+--enable_warnings
+
+eval $base_count;
+
+create function func_21294() returns int return 10;
+
+prepare stmt from "select func_21294()";
+execute stmt;
+eval $reprepared;
+
+drop function func_21294;
+create function func_21294() returns int return 10;
+
+# might pass or fail, implementation dependent
+execute stmt;
+eval $reprepared;
+
+drop function func_21294;
+create function func_21294() returns int return 20;
+
+execute stmt;
+eval $reprepared;
+
+deallocate prepare stmt;
+drop function func_21294;
+
+#
+# Bug#27420 (A combination of PS and view operations cause error + assertion
+# on shutdown)
+#
+
+--disable_warnings
+drop table if exists t_27420_100;
+drop table if exists t_27420_101;
+drop view if exists v_27420;
+--enable_warnings
+
+eval $base_count;
+
+connect (con1,localhost,root,,);
+
+connection default;
+
+create table t_27420_100(a int);
+insert into t_27420_100 values (1), (2);
+
+create table t_27420_101(a int);
+insert into t_27420_101 values (1), (2);
+
+create view v_27420 as select t_27420_100.a X, t_27420_101.a Y
+ from t_27420_100, t_27420_101
+ where t_27420_100.a=t_27420_101.a;
+
+prepare stmt from 'select * from v_27420';
+
+execute stmt;
+eval $reprepared;
+
+connection con1;
+
+drop view v_27420;
+create table v_27420(X int, Y int);
+
+connection default;
+
+# REPREPARED +1
+execute stmt;
+eval $reprepared;
+
+connection con1;
+
+drop table v_27420;
+# passes in 5.0, fails in 5.1, should pass
+create table v_27420 (a int, b int, filler char(200));
+
+connection default;
+
+# REPREPARED +1
+execute stmt;
+eval $reprepared;
+
+disconnect con1;
+
+deallocate prepare stmt;
+drop table t_27420_100;
+drop table t_27420_101;
+drop table v_27420;
+
+#
+# Bug#27430 (Crash in subquery code when in PS and table DDL changed after
+# PREPARE)
+#
+
+--disable_warnings
+drop table if exists t_27430_1;
+drop table if exists t_27430_2;
+--enable_warnings
+
+eval $base_count;
+
+create table t_27430_1 (a int not null, oref int not null, key(a));
+insert into t_27430_1 values
+ (1, 1),
+ (1, 1234),
+ (2, 3),
+ (2, 1234),
+ (3, 1234);
+
+create table t_27430_2 (a int not null, oref int not null);
+insert into t_27430_2 values
+ (1, 1),
+ (2, 2),
+ (1234, 3),
+ (1234, 4);
+
+prepare stmt from
+ 'select oref, a, a in (select a from t_27430_1 where oref=t_27430_2.oref) Z from t_27430_2';
+
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+drop table t_27430_1, t_27430_2;
+
+create table t_27430_1 (a int, oref int, key(a));
+insert into t_27430_1 values
+ (1, 1),
+ (1, NULL),
+ (2, 3),
+ (2, NULL),
+ (3, NULL);
+
+create table t_27430_2 (a int, oref int);
+insert into t_27430_2 values
+ (1, 1),
+ (2,2),
+ (NULL, 3),
+ (NULL, 4);
+
+# REPREPARED +1
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+deallocate prepare stmt;
+drop table t_27430_1;
+drop table t_27430_2;
+
+#
+# Bug#27690 (Re-execution of prepared statement after table was replaced
+# with a view crashes)
+#
+
+--disable_warnings
+drop table if exists t_27690_1;
+drop view if exists v_27690_1;
+drop table if exists v_27690_2;
+--enable_warnings
+
+eval $base_count;
+
+create table t_27690_1 (a int, b int);
+insert into t_27690_1 values (1,1),(2,2);
+
+create table v_27690_1 as select * from t_27690_1;
+create table v_27690_2 as select * from t_27690_1;
+
+prepare stmt from 'select * from v_27690_1, v_27690_2';
+
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+drop table v_27690_1;
+
+--error ER_NO_SUCH_TABLE
+execute stmt;
+eval $reprepared;
+
+--error ER_NO_SUCH_TABLE
+execute stmt;
+eval $reprepared;
+
+create view v_27690_1 as select A.a, A.b from t_27690_1 A, t_27690_1 B;
+
+# REPREPARED +1
+execute stmt;
+eval $reprepared;
+execute stmt;
+eval $reprepared;
+
+deallocate prepare stmt;
+drop table t_27690_1;
+drop view v_27690_1;
+drop table v_27690_2;
+
diff --git a/mysql-test/t/query_cache.test b/mysql-test/t/query_cache.test
index 7571e60859f..771a32e8cd7 100644
--- a/mysql-test/t/query_cache.test
+++ b/mysql-test/t/query_cache.test
@@ -1250,10 +1250,9 @@ disconnect user1;
disconnect user2;
disconnect user3;
---echo End of 5.0 tests
-
#
# Bug #28211 RENAME DATABASE and query cache don't play nicely together
+#
# TODO: enable these tests when RENAME DATABASE is implemented.
# --disable_warnings
# drop database if exists db1;
@@ -1299,3 +1298,23 @@ set GLOBAL query_cache_limit=default;
set GLOBAL query_cache_min_res_unit=default;
set GLOBAL query_cache_size=default;
+--echo End of 5.0 tests
+
+#
+# Bug #31157: Crash when select+order by the avg of some field within the
+# group by
+#
+
+CREATE TABLE t1 (a ENUM('rainbow'));
+INSERT INTO t1 VALUES (),(),(),(),();
+SELECT 1 FROM t1 GROUP BY (SELECT 1 FROM t1 ORDER BY AVG(LAST_INSERT_ID()));
+DROP TABLE t1;
+CREATE TABLE t1 (a LONGBLOB);
+INSERT INTO t1 SET a = 'aaaa';
+INSERT INTO t1 SET a = 'aaaa';
+SELECT 1 FROM t1 GROUP BY
+ (SELECT LAST_INSERT_ID() FROM t1 ORDER BY MIN(a) ASC LIMIT 1);
+DROP TABLE t1;
+
+--echo End of 5.1 tests
+
diff --git a/mysql-test/t/query_cache_debug.test b/mysql-test/t/query_cache_debug.test
new file mode 100644
index 00000000000..b741eea0b29
--- /dev/null
+++ b/mysql-test/t/query_cache_debug.test
@@ -0,0 +1,46 @@
+--source include/not_embedded.inc
+--source include/have_query_cache.inc
+--source include/have_debug.inc
+
+#
+# Bug #30887 Server crashes on SET GLOBAL query_cache_size=0
+#
+flush status;
+set query_cache_type=DEMAND;
+set global query_cache_size= 1024*1024*512;
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+create table t1 (a varchar(100));
+insert into t1 values ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'),('bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb');
+connect (bug30887con1, localhost, root, ,test);
+connect (bug30887con2, localhost, root, ,test);
+
+connection bug30887con1;
+--echo Activate debug hook and attempt to retrieve the statement from the cache.
+set session debug='+d,wait_in_query_cache_insert';
+--send select SQL_CACHE * from t1;
+
+connection default;
+let $wait_condition= select count(*)= 1 from information_schema.processlist where state= 'wait_in_query_cache_insert';
+--source include/wait_condition.inc
+
+connection bug30887con2;
+--echo On a second connection; clear the query cache.
+show status like 'Qcache_queries_in_cache';
+set global query_cache_size= 0;
+
+connection default;
+--echo Signal the debug hook to release the lock.
+select id from information_schema.processlist where state='wait_in_query_cache_insert' into @thread_id;
+kill query @thread_id;
+
+--echo Show query cache status.
+show status like 'Qcache_queries_in_cache';
+
+disconnect bug30887con1;
+disconnect bug30887con2;
+set global query_cache_size= 0;
+use test;
+drop table t1;
+
diff --git a/mysql-test/t/range.test b/mysql-test/t/range.test
index 06c2ef248c4..e20f0370e2c 100644
--- a/mysql-test/t/range.test
+++ b/mysql-test/t/range.test
@@ -935,6 +935,26 @@ SELECT * FROM t1 WHERE item='A1' AND started<='2005-12-02 00:00:00';
DROP TABLE t1;
+--echo
+--echo BUG#32198 "Comparison of DATE with DATETIME still not using indexes correctly"
+--echo
+CREATE TABLE t1 (
+ id int(11) NOT NULL auto_increment,
+ dateval date default NULL,
+ PRIMARY KEY (id),
+ KEY dateval (dateval)
+) AUTO_INCREMENT=173;
+
+INSERT INTO t1 VALUES
+(1,'2007-01-01'),(2,'2007-01-02'),(3,'2007-01-03'),(4,'2007-01-04'),
+(5,'2007-01-05'),(6,'2007-01-06'),(7,'2007-01-07'),(8,'2007-01-08'),
+(9,'2007-01-09'),(10,'2007-01-10'),(11,'2007-01-11');
+
+--echo This must use range access:
+explain select * from t1 where dateval >= '2007-01-01 00:00:00' and dateval <= '2007-01-02 23:59:59';
+
+drop table t1;
+
# End of 5.0 tests
# BUG#22393 fix: Adjust 'ref' estimate if we have 'range' estimate for
diff --git a/mysql-test/t/read_only.test b/mysql-test/t/read_only.test
index 709238c3d76..fd41a3225a6 100644
--- a/mysql-test/t/read_only.test
+++ b/mysql-test/t/read_only.test
@@ -225,3 +225,38 @@ connection default;
set global read_only=0;
drop table t1,t2;
drop user test@localhost;
+--echo #
+--echo # Bug #27440 read_only allows create and drop database
+--echo #
+set global read_only= 1;
+--disable_warnings
+drop database if exists mysqltest_db1;
+drop database if exists mysqltest_db2;
+--enable_warnings
+
+delete from mysql.user where User like 'mysqltest_%';
+delete from mysql.db where User like 'mysqltest_%';
+delete from mysql.tables_priv where User like 'mysqltest_%';
+delete from mysql.columns_priv where User like 'mysqltest_%';
+flush privileges;
+
+grant all on mysqltest_db2.* to `mysqltest_u1`@`%`;
+create database mysqltest_db1;
+grant all on mysqltest_db1.* to `mysqltest_u1`@`%`;
+flush privileges;
+connect (con_bug27440,127.0.0.1,mysqltest_u1,,test,$MASTER_MYPORT,);
+connection con_bug27440;
+--error ER_OPTION_PREVENTS_STATEMENT
+create database mysqltest_db2;
+show databases like '%mysqltest_db2%';
+--error ER_OPTION_PREVENTS_STATEMENT
+drop database mysqltest_db1;
+disconnect con_bug27440;
+connection default;
+delete from mysql.user where User like 'mysqltest_%';
+delete from mysql.db where User like 'mysqltest_%';
+delete from mysql.tables_priv where User like 'mysqltest_%';
+delete from mysql.columns_priv where User like 'mysqltest_%';
+flush privileges;
+drop database mysqltest_db1;
+set global read_only=0;
diff --git a/mysql-test/t/select.test b/mysql-test/t/select.test
index 76a66cc4783..bc0e4ae307f 100644
--- a/mysql-test/t/select.test
+++ b/mysql-test/t/select.test
@@ -2361,6 +2361,27 @@ insert into t1 values (0xfffffffffffffffff, 0xfffffffffffffffff),
select hex(a), hex(b) from t1;
drop table t1;
+#
+# Bug #32103: optimizer crash when join on int and mediumint with variable in
+# where clause
+#
+
+CREATE TABLE t1 (c0 int);
+CREATE TABLE t2 (c0 int);
+
+# We need any variable that:
+# 1. has integer type,
+# 2. can be used with the "@@name" syntax
+# 3. available in every server build
+INSERT INTO t1 VALUES(@@connect_timeout);
+INSERT INTO t2 VALUES(@@connect_timeout);
+
+# We only need to ensure 1 row is returned to validate the results
+--replace_column 1 X 2 X
+SELECT * FROM t1 JOIN t2 ON t1.c0 = t2.c0 WHERE (t1.c0 <=> @@connect_timeout);
+
+DROP TABLE t1, t2;
+
--echo End of 4.1 tests
#
@@ -2743,14 +2764,14 @@ create table t1(f1 int, f2 date);
insert into t1 values(1,'2005-01-01'),(2,'2005-09-01'),(3,'2005-09-30'),
(4,'2005-10-01'),(5,'2005-12-30');
# should return all records
-select * from t1 where f2 >= 0;
-select * from t1 where f2 >= '0000-00-00';
+select * from t1 where f2 >= 0 order by f2;
+select * from t1 where f2 >= '0000-00-00' order by f2;
# should return 4,5
-select * from t1 where f2 >= '2005-09-31';
-select * from t1 where f2 >= '2005-09-3a';
+select * from t1 where f2 >= '2005-09-31' order by f2;
+select * from t1 where f2 >= '2005-09-3a' order by f2;
# should return 1,2,3
-select * from t1 where f2 <= '2005-09-31';
-select * from t1 where f2 <= '2005-09-3a';
+select * from t1 where f2 <= '2005-09-31' order by f2;
+select * from t1 where f2 <= '2005-09-3a' order by f2;
drop table t1;
#
@@ -3455,23 +3476,190 @@ DROP TABLE t1;
#
--disable_ps_protocol
-
SELECT 1 AS ` `;
SELECT 1 AS ` `;
SELECT 1 AS ` x`;
+--enable_ps_protocol
+
+--error 1166
+CREATE VIEW v1 AS SELECT 1 AS ``;
+--error 1166
CREATE VIEW v1 AS SELECT 1 AS ` `;
-SELECT `` FROM v1;
-CREATE VIEW v2 AS SELECT 1 AS ` `;
-SELECT `` FROM v2;
+--error 1166
+CREATE VIEW v1 AS SELECT 1 AS ` `;
+
+--error 1166
+CREATE VIEW v1 AS SELECT (SELECT 1 AS ` `);
+
+CREATE VIEW v1 AS SELECT 1 AS ` x`;
+SELECT `x` FROM v1;
+
+--error 1166
+ALTER VIEW v1 AS SELECT 1 AS ` `;
+
+DROP VIEW v1;
+
+#
+# Bug#31800: Date comparison fails with timezone and slashes for greater
+# than comparison
+#
+
+# On DATETIME-like literals with trailing garbage, BETWEEN fudged in a
+# DATETIME comparator, while greater/less-than used bin-string comparisons.
+# Should correctly be compared as DATE or DATETIME, but throw a warning:
+
+select str_to_date('2007-10-09','%Y-%m-%d') between '2007/10/01 00:00:00 GMT'
+ and '2007/10/20 00:00:00 GMT';
+select str_to_date('2007-10-09','%Y-%m-%d') > '2007/10/01 00:00:00 GMT-6';
+select str_to_date('2007-10-09','%Y-%m-%d') <= '2007/10/2000:00:00 GMT-6';
+
+# We have all we need -- and trailing garbage:
+# (leaving out a leading zero in first example to prove it's a
+# value-comparison, not a string-comparison!)
+select str_to_date('2007-10-01','%Y-%m-%d') = '2007-10-1 00:00:00 GMT-6';
+select str_to_date('2007-10-01','%Y-%m-%d') = '2007-10-01 x00:00:00 GMT-6';
+select str_to_date('2007-10-01','%Y-%m-%d %H:%i:%s') = '2007-10-01 00:00:00 GMT-6';
+select str_to_date('2007-10-01','%Y-%m-%d %H:%i:%s') = '2007-10-01 00:x00:00 GMT-6';
+# no time at all:
+select str_to_date('2007-10-01','%Y-%m-%d %H:%i:%s') = '2007-10-01 x12:34:56 GMT-6';
+# partial time:
+select str_to_date('2007-10-01 12:34:00','%Y-%m-%d %H:%i:%s') = '2007-10-01 12:34x:56 GMT-6';
+# fail, different second part:
+select str_to_date('2007-10-01 12:34:56','%Y-%m-%d %H:%i:%s') = '2007-10-01 12:34x:56 GMT-6';
+# correct syntax, no trailing nonsense -- this one must throw no warning:
+select str_to_date('2007-10-01 12:34:56','%Y-%m-%d %H:%i:%s') = '2007-10-01 12:34:56';
+# no warning, but failure (different hour parts):
+select str_to_date('2007-10-01','%Y-%m-%d') = '2007-10-01 12:00:00';
+# succeed:
+select str_to_date('2007-10-01 12','%Y-%m-%d %H') = '2007-10-01 12:00:00';
+# succeed, but warn for "trailing garbage" (":34"):
+select str_to_date('2007-10-01 12:34','%Y-%m-%d %H') = '2007-10-01 12:00:00';
+# invalid date (Feb 30) succeeds
+select str_to_date('2007-02-30 12:34','%Y-%m-%d %H:%i') = '2007-02-30 12:34';
+# 0-day for both, just works in default SQL mode.
+select str_to_date('2007-10-00 12:34','%Y-%m-%d %H:%i') = '2007-10-00 12:34';
+# 0-day, succeed
+select str_to_date('2007-10-00','%Y-%m-%d') between '2007/09/01 00:00:00'
+ and '2007/10/20 00:00:00';
+set SQL_MODE=TRADITIONAL;
+# 0-day throws warning in traditional mode, and fails
+select str_to_date('2007-10-00 12:34','%Y-%m-%d %H:%i') = '2007-10-00 12:34';
+select str_to_date('2007-10-01 12:34','%Y-%m-%d %H:%i') = '2007-10-00 12:34';
+# different code-path: get_datetime_value() with 0-day
+select str_to_date('2007-10-00 12:34','%Y-%m-%d %H:%i') = '2007-10-01 12:34';
+select str_to_date('2007-10-00','%Y-%m-%d') between '2007/09/01'
+ and '2007/10/20';
+set SQL_MODE=DEFAULT;
+select str_to_date('2007-10-00','%Y-%m-%d') between '' and '2007/10/20';
+select str_to_date('','%Y-%m-%d') between '2007/10/01' and '2007/10/20';
+select str_to_date('','%Y-%m-%d %H:%i') = '2007-10-01 12:34';
+select str_to_date(NULL,'%Y-%m-%d %H:%i') = '2007-10-01 12:34';
+select str_to_date('2007-10-00 12:34','%Y-%m-%d %H:%i') = '';
+
+select str_to_date('1','%Y-%m-%d') = '1';
+select str_to_date('1','%Y-%m-%d') = '1';
+select str_to_date('','%Y-%m-%d') = '';
+
+# these three should work!
+select str_to_date('1000-01-01','%Y-%m-%d') between '0000-00-00' and NULL;
+select str_to_date('1000-01-01','%Y-%m-%d') between NULL and '2000-00-00';
+select str_to_date('1000-01-01','%Y-%m-%d') between NULL and NULL;
+
+#
+# Bug #30666: Incorrect order when using range conditions on 2 tables or more
+#
+
+CREATE TABLE t1 (c11 INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY);
+CREATE TABLE t2 (c21 INT UNSIGNED NOT NULL,
+ c22 INT DEFAULT NULL,
+ KEY(c21, c22));
+CREATE TABLE t3 (c31 INT UNSIGNED NOT NULL DEFAULT 0,
+ c32 INT DEFAULT NULL,
+ c33 INT NOT NULL,
+ c34 INT UNSIGNED DEFAULT 0,
+ KEY (c33, c34, c32));
+
+INSERT INTO t1 values (),(),(),(),();
+INSERT INTO t2 SELECT a.c11, b.c11 FROM t1 a, t1 b;
+INSERT INTO t3 VALUES (1, 1, 1, 0),
+ (2, 2, 0, 0),
+ (3, 3, 1, 0),
+ (4, 4, 0, 0),
+ (5, 5, 1, 0);
+
+# Show that ORDER BY produces the correct results order
+SELECT c32 FROM t1, t2, t3 WHERE t1.c11 IN (1, 3, 5) AND
+ t3.c31 = t1.c11 AND t2.c21 = t1.c11 AND
+ t3.c33 = 1 AND t2.c22 in (1, 3)
+ ORDER BY c32;
+
+# Show that ORDER BY DESC produces the correct results order
+SELECT c32 FROM t1, t2, t3 WHERE t1.c11 IN (1, 3, 5) AND
+ t3.c31 = t1.c11 AND t2.c21 = t1.c11 AND
+ t3.c33 = 1 AND t2.c22 in (1, 3)
+ ORDER BY c32 DESC;
+
+DROP TABLE t1, t2, t3;
+###########################################################################
+
+--echo
+--echo #
+--echo # Bug#30736: Row Size Too Large Error Creating a Table and
+--echo # Inserting Data.
+--echo #
-CREATE VIEW v3 AS SELECT 1 AS ` x`;
-SELECT `x` FROM v3;
+--disable_warnings
+DROP TABLE IF EXISTS t1;
+DROP TABLE IF EXISTS t2;
+--enable_warnings
-DROP VIEW v1, v2, v3;
+--echo
---enable_ps_protocol
+CREATE TABLE t1(
+ c1 DECIMAL(10, 2),
+ c2 FLOAT);
+
+--echo
+
+INSERT INTO t1 VALUES (0, 1), (2, 3), (4, 5);
+
+--echo
+
+CREATE TABLE t2(
+ c3 DECIMAL(10, 2))
+ SELECT
+ c1 * c2 AS c3
+ FROM t1;
+
+--echo
+
+SELECT * FROM t1;
+
+--echo
+
+SELECT * FROM t2;
+
+--echo
+
+DROP TABLE t1;
+DROP TABLE t2;
+
+--echo
+
+###########################################################################
+
+#
+# Bug #32335: Error on BIGINT > NULL + 1
+#
+
+CREATE TABLE t1 (c1 BIGINT NOT NULL);
+INSERT INTO t1 (c1) VALUES (1);
+SELECT * FROM t1 WHERE c1 > NULL + 1;
+DROP TABLE t1;
+
+--echo
--echo End of 5.0 tests
diff --git a/mysql-test/t/skip_grants.test b/mysql-test/t/skip_grants.test
index 5e0fc65bc34..6f4d23e1e14 100644
--- a/mysql-test/t/skip_grants.test
+++ b/mysql-test/t/skip_grants.test
@@ -122,3 +122,13 @@ select count(*) from information_schema.COLUMN_PRIVILEGES;
select count(*) from information_schema.SCHEMA_PRIVILEGES;
select count(*) from information_schema.TABLE_PRIVILEGES;
select count(*) from information_schema.USER_PRIVILEGES;
+--echo End of 5.0 tests
+
+--echo #
+--echo # Bug#29817 Queries with UDF fail with non-descriptive error
+--echo # if mysql.proc is missing
+--echo #
+--error ER_SP_DOES_NOT_EXIST
+select no_such_function(1);
+
+--echo End of 5.1 tests
diff --git a/mysql-test/t/sp-code.test b/mysql-test/t/sp-code.test
index 66d5323d2e2..84f0201c808 100644
--- a/mysql-test/t/sp-code.test
+++ b/mysql-test/t/sp-code.test
@@ -520,6 +520,83 @@ drop table t1;
drop procedure proc_26977_broken;
drop procedure proc_26977_works;
+#
+# Bug#33618 Crash in sp_rcontext
+#
+
+--disable_warnings
+drop procedure if exists proc_33618_h;
+drop procedure if exists proc_33618_c;
+--enable_warnings
+
+delimiter //;
+
+create procedure proc_33618_h(num int)
+begin
+ declare count1 int default '0';
+ declare vb varchar(30);
+ declare last_row int;
+
+ while(num>=1) do
+ set num=num-1;
+ begin
+ declare cur1 cursor for select `a` from t_33618;
+ declare continue handler for not found set last_row = 1;
+ set last_row:=0;
+ open cur1;
+ rep1:
+ repeat
+ begin
+ declare exit handler for 1062 begin end;
+ fetch cur1 into vb;
+ if (last_row = 1) then
+ ## should generate a hpop instruction here
+ leave rep1;
+ end if;
+ end;
+ until last_row=1
+ end repeat;
+ close cur1;
+ end;
+ end while;
+end//
+
+create procedure proc_33618_c(num int)
+begin
+ declare count1 int default '0';
+ declare vb varchar(30);
+ declare last_row int;
+
+ while(num>=1) do
+ set num=num-1;
+ begin
+ declare cur1 cursor for select `a` from t_33618;
+ declare continue handler for not found set last_row = 1;
+ set last_row:=0;
+ open cur1;
+ rep1:
+ repeat
+ begin
+ declare cur2 cursor for select `b` from t_33618;
+ fetch cur1 into vb;
+ if (last_row = 1) then
+ ## should generate a cpop instruction here
+ leave rep1;
+ end if;
+ end;
+ until last_row=1
+ end repeat;
+ close cur1;
+ end;
+ end while;
+end//
+delimiter ;//
+
+show procedure code proc_33618_h;
+show procedure code proc_33618_c;
+
+drop procedure proc_33618_h;
+drop procedure proc_33618_c;
--echo End of 5.0 tests.
diff --git a/mysql-test/t/sp-error.test b/mysql-test/t/sp-error.test
index a956a246770..286722df65c 100644
--- a/mysql-test/t/sp-error.test
+++ b/mysql-test/t/sp-error.test
@@ -2078,10 +2078,6 @@ create function bug20701() returns varchar(25) binary return "test";
create function bug20701() returns varchar(25) return "test";
drop function bug20701;
-
---echo End of 5.1 tests
-
-
#
# Bug#26503 (Illegal SQL exception handler code causes the server to crash)
#
@@ -2223,6 +2219,156 @@ SELECT ..inexistent();
USE test;
#
+# Bug#30904 SET PASSWORD statement is non-transactional
+#
+
+delimiter |;
+
+--error ER_SP_CANT_SET_AUTOCOMMIT
+create function f1() returns int
+begin
+ set @test = 1, password = password('foo');
+ return 1;
+end|
+
+--error ER_SP_CANT_SET_AUTOCOMMIT
+create trigger t1
+ before insert on t2 for each row set password = password('foo');|
+
+delimiter ;|
+
+#
+# Bug#30882 Dropping a temporary table inside a stored function may cause a server crash
+#
+
+--disable_warnings
+drop function if exists f1;
+drop function if exists f2;
+drop table if exists t1, t2;
+--enable_warnings
+
+delimiter |;
+create function f1() returns int
+begin
+ drop temporary table t1;
+ return 1;
+end|
+delimiter ;|
+--error ER_CANT_REOPEN_TABLE
+create temporary table t1 as select f1();
+
+delimiter |;
+create function f2() returns int
+begin
+ create temporary table t2 as select f1();
+ return 1;
+end|
+delimiter ;|
+--error ER_CANT_REOPEN_TABLE
+create temporary table t1 as select f2();
+
+drop function f1;
+drop function f2;
+
+delimiter |;
+create function f1() returns int
+begin
+ drop temporary table t2,t1;
+ return 1;
+end|
+create function f2() returns int
+begin
+ create temporary table t2 as select f1();
+ return 1;
+end|
+delimiter ;|
+--error ER_CANT_REOPEN_TABLE
+create temporary table t1 as select f2();
+
+drop function f1;
+drop function f2;
+
+create temporary table t2(a int);
+select * from t2;
+delimiter |;
+create function f2() returns int
+begin
+ drop temporary table t2;
+ return 1;
+end|
+delimiter ;|
+select f2();
+
+drop function f2;
+--error ER_BAD_TABLE_ERROR
+drop table t2;
+
+--echo End of 5.1 tests
+
+#
+# Bug#33983 (Stored Procedures: wrong end <label> syntax is accepted)
+#
+
+--disable_warnings
+drop procedure if exists proc_33983_a;
+drop procedure if exists proc_33983_b;
+drop procedure if exists proc_33983_c;
+drop procedure if exists proc_33983_d;
+--enable_warnings
+
+delimiter |;
+
+--error ER_SP_LABEL_MISMATCH
+create procedure proc_33983_a()
+begin
+ label1:
+ begin
+ label2:
+ begin
+ select 1;
+ end label1;
+ end;
+end|
+
+--error ER_SP_LABEL_MISMATCH
+create procedure proc_33983_b()
+begin
+ label1:
+ repeat
+ label2:
+ repeat
+ select 1;
+ until FALSE end repeat label1;
+ until FALSE end repeat;
+end|
+
+--error ER_SP_LABEL_MISMATCH
+create procedure proc_33983_c()
+begin
+ label1:
+ while TRUE do
+ label2:
+ while TRUE do
+ select 1;
+ end while label1;
+ end while;
+end|
+
+--error ER_SP_LABEL_MISMATCH
+create procedure proc_33983_d()
+begin
+ label1:
+ loop
+ label2:
+ loop
+ select 1;
+ end loop label1;
+ end loop;
+end|
+
+delimiter ;|
+
+#
# BUG#NNNN: New bug synopsis
#
#--disable_warnings
diff --git a/mysql-test/t/sp.test b/mysql-test/t/sp.test
index 004e1c4ddd2..6dc2f906d45 100644
--- a/mysql-test/t/sp.test
+++ b/mysql-test/t/sp.test
@@ -7902,7 +7902,86 @@ use test;
###########################################################################
---echo End of 5.0 tests
+#
+# Bug#29770 Two handlers are allowed to catch an error in an stored procedure.
+#
+
+--disable_warnings
+DROP TABLE IF EXISTS t1;
+DROP PROCEDURE IF EXISTS bug29770;
+--enable_warnings
+
+CREATE TABLE t1(a int);
+delimiter |;
+CREATE PROCEDURE bug29770()
+BEGIN
+ DECLARE CONTINUE HANDLER FOR SQLSTATE '42S22' SET @state:= 'run';
+ DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET @exception:= 'run';
+ SELECT x FROM t1;
+END|
+delimiter ;|
+CALL bug29770();
+SELECT @state, @exception;
+DROP TABLE t1;
+DROP PROCEDURE bug29770;
+
+#
+# Bug#33618 Crash in sp_rcontext
+#
+
+use test;
+
+--disable_warnings
+drop table if exists t_33618;
+drop procedure if exists proc_33618;
+--enable_warnings
+
+create table t_33618 (`a` int, unique(`a`), `b` varchar(30)) engine=myisam;
+insert into t_33618 (`a`,`b`) values (1,'1'),(2,'2');
+
+delimiter //;
+
+create procedure proc_33618(num int)
+begin
+ declare count1 int default '0';
+ declare vb varchar(30);
+ declare last_row int;
+
+ while(num>=1) do
+ set num=num-1;
+ begin
+ declare cur1 cursor for select `a` from t_33618;
+ declare continue handler for not found set last_row = 1;
+ set last_row:=0;
+ open cur1;
+ rep1:
+ repeat
+ begin
+ declare exit handler for 1062 begin end;
+ fetch cur1 into vb;
+ if (last_row = 1) then
+ leave rep1;
+ end if;
+ end;
+ until last_row=1
+ end repeat;
+ close cur1;
+ end;
+ end while;
+end//
+
+delimiter ;//
+
+call proc_33618(20);
+
+drop table t_33618;
+drop procedure proc_33618;
+
+###########################################################################
+
+--echo # ------------------------------------------------------------------
+--echo # -- End of 5.0 tests
+--echo # ------------------------------------------------------------------
###########################################################################
@@ -8056,4 +8135,6 @@ DROP FUNCTION f1;
###########################################################################
---echo End of 5.1 tests
+--echo # ------------------------------------------------------------------
+--echo # -- End of 5.1 tests
+--echo # ------------------------------------------------------------------
diff --git a/mysql-test/t/sp_notembedded.test b/mysql-test/t/sp_notembedded.test
index b5037b469ae..4a747b9c614 100644
--- a/mysql-test/t/sp_notembedded.test
+++ b/mysql-test/t/sp_notembedded.test
@@ -45,27 +45,9 @@ call bug4902_2()|
call bug4902_2()|
drop procedure bug4902_2|
-
-# Disable until bug#17244 is fixed
---disable_parsing
#
-# BUG#5278: Stored procedure packets out of order if SET PASSWORD.
+# BUG#3583: query cache doesn't work for stored procedures
#
---disable_warnings
-drop function if exists bug5278|
---enable_warnings
-create function bug5278 () returns char
-begin
- SET PASSWORD FOR 'bob'@'%.loc.gov' = PASSWORD('newpass');
- return 'okay';
-end|
-
---error 1133
-select bug5278()|
---error 1133
-select bug5278()|
-drop function bug5278|
---enable_parsing
--disable_warnings
drop table if exists t1|
@@ -74,9 +56,6 @@ create table t1 (
id char(16) not null default '',
data int not null
)|
-#
-# BUG#3583: query cache doesn't work for stored procedures
-#
--disable_warnings
drop procedure if exists bug3583|
--enable_warnings
diff --git a/mysql-test/t/status.test b/mysql-test/t/status.test
index 6a11791924a..25bf2a6ee61 100644
--- a/mysql-test/t/status.test
+++ b/mysql-test/t/status.test
@@ -242,4 +242,23 @@ let $tmp_table2 = `show global status like 'Created_tmp_tables'`;
eval select substring_index('$rnd_next2',0x9,-1)-substring_index('$rnd_next',0x9,-1) as rnd_diff, substring_index('$tmp_table2',0x9,-1)-substring_index('$tmp_table',0x9,-1) as tmp_table_diff;
--enable_query_log
+#
+# Bug#30252 Com_create_function is not incremented.
+#
+show global status like 'Com%function%';
+
+DELIMITER //;
+create function f1 (x INTEGER) returns integer
+ begin
+ declare ret integer;
+ set ret = x * 10;
+ return ret;
+ end //
+DELIMITER ;//
+
+drop function f1;
+
+show global status like 'Com%function%';
+
+
# End of 5.1 tests
diff --git a/mysql-test/t/subselect.test b/mysql-test/t/subselect.test
index 95514fd773e..c86b0fefbdc 100644
--- a/mysql-test/t/subselect.test
+++ b/mysql-test/t/subselect.test
@@ -32,7 +32,9 @@ SELECT 1 FROM (SELECT 1 as a) b WHERE 1 IN (SELECT (SELECT a));
select (SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE(1));
-- error 1108
SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE((SELECT 1));
+-- error ER_BAD_FIELD_ERROR
SELECT (SELECT 1) as a FROM (SELECT 1) b WHERE (SELECT a) IS NULL;
+-- error ER_BAD_FIELD_ERROR
SELECT (SELECT 1) as a FROM (SELECT 1) b WHERE (SELECT a) IS NOT NULL;
SELECT (SELECT 1,2,3) = ROW(1,2,3);
SELECT (SELECT 1,2,3) = ROW(1,2,1);
@@ -1346,17 +1348,20 @@ drop table t1,t2;
CREATE TABLE t1 ( a int, b int );
CREATE TABLE t2 ( c int, d int );
INSERT INTO t1 VALUES (1,2), (2,3), (3,4);
-SELECT a AS abc, b FROM t1 WHERE b = (SELECT MIN(b) FROM t1 WHERE a=abc);
-INSERT INTO t2 SELECT a AS abc, b FROM t1 WHERE b = (SELECT MIN(b) FROM t1 WHERE a=abc);
+SELECT a AS abc, b FROM t1 outr WHERE b =
+ (SELECT MIN(b) FROM t1 WHERE a=outr.a);
+INSERT INTO t2 SELECT a AS abc, b FROM t1 outr WHERE b =
+ (SELECT MIN(b) FROM t1 WHERE a=outr.a);
select * from t2;
-CREATE TABLE t3 SELECT a AS abc, b FROM t1 WHERE b = (SELECT MIN(b) FROM t1 WHERE a=abc);
+CREATE TABLE t3 SELECT a AS abc, b FROM t1 outr WHERE b =
+ (SELECT MIN(b) FROM t1 WHERE a=outr.a);
select * from t3;
-prepare stmt1 from "INSERT INTO t2 SELECT a AS abc, b FROM t1 WHERE b = (SELECT MIN(b) FROM t1 WHERE a=abc);";
+prepare stmt1 from "INSERT INTO t2 SELECT a AS abc, b FROM t1 outr WHERE b = (SELECT MIN(b) FROM t1 WHERE a=outr.a);";
execute stmt1;
deallocate prepare stmt1;
select * from t2;
drop table t3;
-prepare stmt1 from "CREATE TABLE t3 SELECT a AS abc, b FROM t1 WHERE b = (SELECT MIN(b) FROM t1 WHERE a=abc);";
+prepare stmt1 from "CREATE TABLE t3 SELECT a AS abc, b FROM t1 outr WHERE b = (SELECT MIN(b) FROM t1 WHERE a=outr.a);";
execute stmt1;
select * from t3;
deallocate prepare stmt1;
@@ -1529,7 +1534,9 @@ INSERT INTO t1 VALUES ('ASM','American Samoa','Oceania','Polynesia',199.00,0,680
INSERT INTO t1 VALUES ('ATF','French Southern territories','Antarctica','Antarctica',7780.00,0,0,NULL,0.00,NULL,'Terres australes françaises','Nonmetropolitan Territory of France','Jacques Chirac',NULL,'TF');
INSERT INTO t1 VALUES ('UMI','United States Minor Outlying Islands','Oceania','Micronesia/Caribbean',16.00,0,0,NULL,0.00,NULL,'United States Minor Outlying Islands','Dependent Territory of the US','George W. Bush',NULL,'UM');
/*!40000 ALTER TABLE t1 ENABLE KEYS */;
-SELECT DISTINCT Continent AS c FROM t1 WHERE Code <> SOME ( SELECT Code FROM t1 WHERE Continent = c AND Population < 200);
+SELECT DISTINCT Continent AS c FROM t1 outr WHERE
+ Code <> SOME ( SELECT Code FROM t1 WHERE Continent = outr.Continent AND
+ Population < 200);
drop table t1;
#
@@ -2448,12 +2455,16 @@ DROP TABLE t1, t2;
CREATE TABLE t1 (i INT);
(SELECT i FROM t1) UNION (SELECT i FROM t1);
+#TODO:not supported
+--error ER_PARSE_ERROR
SELECT sql_no_cache * FROM t1 WHERE NOT EXISTS
(
(SELECT i FROM t1) UNION
(SELECT i FROM t1)
);
+#TODO:not supported
+--error ER_PARSE_ERROR
SELECT * FROM t1
WHERE NOT EXISTS (((SELECT i FROM t1) UNION (SELECT i FROM t1)));
@@ -2461,7 +2472,9 @@ WHERE NOT EXISTS (((SELECT i FROM t1) UNION (SELECT i FROM t1)));
--error 1064
explain select ((select t11.i from t1 t11) union (select t12.i from t1 t12))
from t1;
-#supported
+
+#TODO:not supported
+--error ER_PARSE_ERROR
explain select * from t1 where not exists
((select t11.i from t1 t11) union (select t12.i from t1 t12));
@@ -2987,6 +3000,219 @@ SELECT (SELECT SUM(t1.a) FROM t2 WHERE a!=0) FROM t1;
SELECT (SELECT SUM(t1.a) FROM t2 WHERE a=1) FROM t1;
DROP TABLE t1,t2;
+#
+# Bug #31884: Assertion + crash in subquery in the SELECT clause.
+#
+
+CREATE TABLE t1 (a1 INT, a2 INT);
+CREATE TABLE t2 (b1 INT, b2 INT);
+
+INSERT INTO t1 VALUES (100, 200);
+INSERT INTO t1 VALUES (101, 201);
+INSERT INTO t2 VALUES (101, 201);
+INSERT INTO t2 VALUES (103, 203);
+
+SELECT ((a1,a2) IN (SELECT * FROM t2 WHERE b2 > 0)) IS NULL FROM t1;
+DROP TABLE t1, t2;
+
+#
+# Bug #28076: inconsistent binary/varbinary comparison
+#
+
+CREATE TABLE t1 (s1 BINARY(5), s2 VARBINARY(5));
+INSERT INTO t1 VALUES (0x41,0x41), (0x42,0x42), (0x43,0x43);
+
+SELECT s1, s2 FROM t1 WHERE s2 IN (SELECT s1 FROM t1);
+SELECT s1, s2 FROM t1 WHERE (s2, 10) IN (SELECT s1, 10 FROM t1);
+
+CREATE INDEX I1 ON t1 (s1);
+CREATE INDEX I2 ON t1 (s2);
+
+SELECT s1, s2 FROM t1 WHERE s2 IN (SELECT s1 FROM t1);
+SELECT s1, s2 FROM t1 WHERE (s2, 10) IN (SELECT s1, 10 FROM t1);
+
+TRUNCATE t1;
+INSERT INTO t1 VALUES (0x41,0x41);
+SELECT * FROM t1 WHERE s1 = (SELECT s2 FROM t1);
+
+DROP TABLE t1;
+
+CREATE TABLE t1 (a1 VARBINARY(2) NOT NULL DEFAULT '0', PRIMARY KEY (a1));
+CREATE TABLE t2 (a2 BINARY(2) default '0', INDEX (a2));
+CREATE TABLE t3 (a3 BINARY(2) default '0');
+INSERT INTO t1 VALUES (1),(2),(3),(4);
+INSERT INTO t2 VALUES (1),(2),(3);
+INSERT INTO t3 VALUES (1),(2),(3);
+SELECT LEFT(t2.a2, 1) FROM t2,t3 WHERE t3.a3=t2.a2;
+SELECT t1.a1, t1.a1 in (SELECT t2.a2 FROM t2,t3 WHERE t3.a3=t2.a2) FROM t1;
+DROP TABLE t1,t2,t3;
+
+CREATE TABLE t1 (a1 BINARY(3) PRIMARY KEY, b1 VARBINARY(3));
+CREATE TABLE t2 (a2 VARBINARY(3) PRIMARY KEY);
+CREATE TABLE t3 (a3 VARBINARY(3) PRIMARY KEY);
+INSERT INTO t1 VALUES (1,10), (2,20), (3,30), (4,40);
+INSERT INTO t2 VALUES (2), (3), (4), (5);
+INSERT INTO t3 VALUES (10), (20), (30);
+SELECT LEFT(t1.a1,1) FROM t1,t3 WHERE t1.b1=t3.a3;
+SELECT a2 FROM t2 WHERE t2.a2 IN (SELECT t1.a1 FROM t1,t3 WHERE t1.b1=t3.a3);
+DROP TABLE t1, t2, t3;
+
+#
+# Bug #30788: Inconsistent retrieval of char/varchar
+#
+
+CREATE TABLE t1 (a CHAR(1), b VARCHAR(10));
+INSERT INTO t1 VALUES ('a', 'aa');
+INSERT INTO t1 VALUES ('a', 'aaa');
+SELECT a,b FROM t1 WHERE b IN (SELECT a FROM t1);
+CREATE INDEX I1 ON t1 (a);
+CREATE INDEX I2 ON t1 (b);
+EXPLAIN SELECT a,b FROM t1 WHERE b IN (SELECT a FROM t1);
+SELECT a,b FROM t1 WHERE b IN (SELECT a FROM t1);
+
+CREATE TABLE t2 (a VARCHAR(1), b VARCHAR(10));
+INSERT INTO t2 SELECT * FROM t1;
+CREATE INDEX I1 ON t2 (a);
+CREATE INDEX I2 ON t2 (b);
+EXPLAIN SELECT a,b FROM t2 WHERE b IN (SELECT a FROM t2);
+SELECT a,b FROM t2 WHERE b IN (SELECT a FROM t2);
+EXPLAIN
+SELECT a,b FROM t1 WHERE b IN (SELECT a FROM t1 WHERE LENGTH(a)<500);
+SELECT a,b FROM t1 WHERE b IN (SELECT a FROM t1 WHERE LENGTH(a)<500);
+
+DROP TABLE t1,t2;
+
+#
+# Bug #32400: Complex SELECT query returns correct result only on some
+# occasions
+#
+
+CREATE TABLE t1(a INT, b INT);
+INSERT INTO t1 VALUES (1,1), (1,2), (2,3), (2,4);
+
+--error ER_BAD_FIELD_ERROR
+EXPLAIN
+SELECT a AS out_a, MIN(b) FROM t1
+WHERE b > (SELECT MIN(b) FROM t1 WHERE a = out_a)
+GROUP BY a;
+
+--error ER_BAD_FIELD_ERROR
+SELECT a AS out_a, MIN(b) FROM t1
+WHERE b > (SELECT MIN(b) FROM t1 WHERE a = out_a)
+GROUP BY a;
+
+EXPLAIN
+SELECT a AS out_a, MIN(b) FROM t1 t1_outer
+WHERE b > (SELECT MIN(b) FROM t1 WHERE a = t1_outer.a)
+GROUP BY a;
+
+SELECT a AS out_a, MIN(b) FROM t1 t1_outer
+WHERE b > (SELECT MIN(b) FROM t1 WHERE a = t1_outer.a)
+GROUP BY a;
+
+DROP TABLE t1;
+
+
+#
+# Bug #32036: EXISTS within a WHERE clause with a UNION crashes MySQL 5.122
+#
+
+CREATE TABLE t1 (a INT);
+CREATE TABLE t2 (a INT);
+
+INSERT INTO t1 VALUES (1),(2);
+INSERT INTO t2 VALUES (1),(2);
+
+SELECT 2 FROM t1 WHERE EXISTS ((SELECT 1 FROM t2 WHERE t1.a=t2.a));
+EXPLAIN EXTENDED
+SELECT 2 FROM t1 WHERE EXISTS ((SELECT 1 FROM t2 WHERE t1.a=t2.a));
+
+
+#TODO:not supported
+--error ER_PARSE_ERROR
+EXPLAIN EXTENDED
+SELECT 2 FROM t1 WHERE EXISTS ((SELECT 1 FROM t2 WHERE t1.a=t2.a) UNION
+ (SELECT 1 FROM t2 WHERE t1.a = t2.a));
+
+DROP TABLE t1,t2;
+
+#
+# Bug#33675: Usage of an uninitialized memory by filesort in a subquery
+# caused server crash.
+#
+create table t1(f11 int, f12 int);
+create table t2(f21 int unsigned not null, f22 int, f23 varchar(10));
+insert into t1 values(1,1),(2,2), (3, 3);
+let $i=10000;
+--disable_query_log
+--disable_warnings
+while ($i)
+{
+ eval insert into t2 values (-1 , $i/5000 + 1, '$i');
+ dec $i;
+}
+--enable_warnings
+--enable_query_log
+set session sort_buffer_size= 33*1024;
+select count(*) from t1 where f12 =
+(select f22 from t2 where f22 = f12 order by f21 desc, f22, f23 limit 1);
+
+drop table t1,t2;
+
+#
+# BUG#33794 "MySQL crashes executing specific query on specific dump"
+#
+CREATE TABLE t4 (
+ f7 varchar(32) collate utf8_bin NOT NULL default '',
+ f10 varchar(32) collate utf8_bin default NULL,
+ PRIMARY KEY (f7)
+);
+INSERT INTO t4 VALUES(1,1), (2,null);
+
+CREATE TABLE t2 (
+ f4 varchar(32) collate utf8_bin NOT NULL default '',
+ f2 varchar(50) collate utf8_bin default NULL,
+ f3 varchar(10) collate utf8_bin default NULL,
+ PRIMARY KEY (f4),
+ UNIQUE KEY uk1 (f2)
+);
+INSERT INTO t2 VALUES(1,1,null), (2,2,null);
+
+CREATE TABLE t1 (
+ f8 varchar(32) collate utf8_bin NOT NULL default '',
+ f1 varchar(10) collate utf8_bin default NULL,
+ f9 varchar(32) collate utf8_bin default NULL,
+ PRIMARY KEY (f8)
+);
+INSERT INTO t1 VALUES (1,'P',1), (2,'P',1), (3,'R',2);
+
+CREATE TABLE t3 (
+ f6 varchar(32) collate utf8_bin NOT NULL default '',
+ f5 varchar(50) collate utf8_bin default NULL,
+ PRIMARY KEY (f6)
+);
+INSERT INTO t3 VALUES (1,null), (2,null);
+
+SELECT
+ IF(t1.f1 = 'R', a1.f2, t2.f2) AS a4,
+ IF(t1.f1 = 'R', a1.f3, t2.f3) AS f3,
+ SUM(
+ IF(
+ (SELECT VPC.f2
+ FROM t2 VPC, t4 a2, t2 a3
+ WHERE
+ VPC.f4 = a2.f10 AND a3.f2 = a4
+ LIMIT 1) IS NULL,
+ 0,
+ t3.f5
+ )
+ ) AS a6
+FROM
+ t2, t3, t1 JOIN t2 a1 ON t1.f9 = a1.f4
+GROUP BY a4;
+
+DROP TABLE t1, t2, t3, t4;
+
--echo End of 5.0 tests.
#
@@ -3015,9 +3241,11 @@ SELECT a FROM t1 t0
SET @@sql_mode=default;
DROP TABLE t1;
+#
# Bug#20835 (literal string with =any values)
#
CREATE TABLE t1 (s1 char(1));
INSERT INTO t1 VALUES ('a');
SELECT * FROM t1 WHERE _utf8'a' = ANY (SELECT s1 FROM t1);
DROP TABLE t1;
+
diff --git a/mysql-test/t/subselect_notembedded.test b/mysql-test/t/subselect_notembedded.test
index c112272e8ad..040c90452b9 100644
--- a/mysql-test/t/subselect_notembedded.test
+++ b/mysql-test/t/subselect_notembedded.test
@@ -7,3 +7,99 @@
--error 1064
purge master logs before (select adddate(current_timestamp(), interval -4 day));
purge master logs before adddate(current_timestamp(), interval -4 day);
+
+#
+# Bug31048: Many nested subqueries may cause server crash.
+#
+create table t1(a int,b int,key(a),key(b));
+insert into t1(a,b) values (1,2),(2,1),(2,3),(3,4),(5,4),(5,5),
+ (6,7),(7,4),(5,3);
+# test for the stack overflow bug
+select sum(a),a from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1
+ )group by b limit 1)group by b limit 1
+ )group by b limit 1)group by b limit 1)group by b limit 1
+ )group by b limit 1)group by b limit 1)group by b limit 1
+ )group by b limit 1)group by b limit 1)group by b limit 1)
+group by a;
+--replace_regex /overrun.*$/overrun detected/
+--error 1436
+select sum(a),a from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+ select sum(a) from t1
+ )group by b limit 1)group by b limit 1)group by b limit 1
+ )group by b limit 1)group by b limit 1)group by b limit 1
+ )group by b limit 1)group by b limit 1)group by b limit 1
+ )group by b limit 1)group by b limit 1)group by b limit 1
+ )group by b limit 1)group by b limit 1)group by b limit 1
+ )group by b limit 1)group by b limit 1)group by b limit 1
+ )group by b limit 1)group by b limit 1)group by b limit 1
+ )group by b limit 1)group by b limit 1)group by b limit 1
+ )group by b limit 1)group by b limit 1)group by b limit 1
+ )group by b limit 1)group by b limit 1)group by b limit 1)
+group by a;
+# test for the memory consumption & subquery slowness bug
+explain select sum(a),a from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1
+ )group by b limit 1)group by b limit 1
+ )group by b limit 1)group by b limit 1)group by b limit 1
+ )group by b limit 1)group by b limit 1)group by b limit 1
+ )group by b limit 1)group by b limit 1)group by b limit 1)
+group by a;
+--replace_regex /overrun.*$/overrun detected/
+--error 1436
+explain select sum(a),a from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+ select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
+ select sum(a) from t1
+ )group by b limit 1)group by b limit 1)group by b limit 1
+ )group by b limit 1)group by b limit 1)group by b limit 1
+ )group by b limit 1)group by b limit 1)group by b limit 1
+ )group by b limit 1)group by b limit 1)group by b limit 1
+ )group by b limit 1)group by b limit 1)group by b limit 1
+ )group by b limit 1)group by b limit 1)group by b limit 1
+ )group by b limit 1)group by b limit 1)group by b limit 1
+ )group by b limit 1)group by b limit 1)group by b limit 1
+ )group by b limit 1)group by b limit 1)group by b limit 1
+ )group by b limit 1)group by b limit 1)group by b limit 1)
+group by a;
+drop table t1;
+
+
diff --git a/mysql-test/t/symlink.test b/mysql-test/t/symlink.test
index 15f50b11e73..f339b29c83a 100644
--- a/mysql-test/t/symlink.test
+++ b/mysql-test/t/symlink.test
@@ -121,6 +121,18 @@ show create table t1;
drop table t1;
#
+# BUG#32111 - Security Breach via DATA/INDEX DIRECORY and RENAME TABLE
+#
+--replace_result $MYSQLTEST_VARDIR TEST_DIR
+eval CREATE TABLE t1(a INT)
+DATA DIRECTORY='$MYSQLTEST_VARDIR/master-data/mysql'
+INDEX DIRECTORY='$MYSQLTEST_VARDIR/master-data/mysql';
+--replace_result $MYSQLTEST_VARDIR TEST_DIR
+--error 1
+RENAME TABLE t1 TO user;
+DROP TABLE t1;
+
+#
# Test specifying DATA DIRECTORY that is the same as what would normally
# have been chosen. (Bug #8707)
#
diff --git a/mysql-test/t/trigger.test b/mysql-test/t/trigger.test
index 9f4634e1e17..1aeac91e5ad 100644
--- a/mysql-test/t/trigger.test
+++ b/mysql-test/t/trigger.test
@@ -2246,3 +2246,62 @@ select * from table_25411_a;
drop table table_25411_a;
drop table table_25411_b;
+#
+# Bug #31866: MySQL Server crashes on SHOW CREATE TRIGGER statement
+#
+
+--disable_warnings
+DROP TRIGGER IF EXISTS trg;
+--enable_warnings
+
+--error ER_TRG_DOES_NOT_EXIST
+SHOW CREATE TRIGGER trg;
+
+#
+# Bug#23713 LOCK TABLES + CREATE TRIGGER + FLUSH TABLES WITH READ LOCK = deadlock
+#
+# Test of trigger creation and removal under LOCK TABLES
+#
+
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+
+create table t1 (i int, j int);
+
+create trigger t1_bi before insert on t1 for each row begin end;
+--error ER_NOT_SUPPORTED_YET
+create trigger t1_bi before insert on t1 for each row begin end;
+drop trigger t1_bi;
+--error ER_TRG_DOES_NOT_EXIST
+drop trigger t1_bi;
+
+lock tables t1 read;
+--error ER_TABLE_NOT_LOCKED_FOR_WRITE
+create trigger t1_bi before insert on t1 for each row begin end;
+--error ER_TABLE_NOT_LOCKED_FOR_WRITE
+create trigger t1_bi before insert on t1 for each row begin end;
+--error ER_TRG_DOES_NOT_EXIST
+drop trigger t1_bi;
+unlock tables;
+
+create trigger t1_bi before insert on t1 for each row begin end;
+lock tables t1 read;
+--error ER_TABLE_NOT_LOCKED_FOR_WRITE
+create trigger t1_bi before insert on t1 for each row begin end;
+--error ER_TABLE_NOT_LOCKED_FOR_WRITE
+drop trigger t1_bi;
+unlock tables;
+drop trigger t1_bi;
+
+lock tables t1 write;
+create trigger b1_bi before insert on t1 for each row set new.i = new.i + 10;
+insert into t1 values (10, 10);
+drop trigger b1_bi;
+insert into t1 values (10, 10);
+select * from t1;
+unlock tables;
+
+drop table t1;
+
+--echo End of 5.1 tests.
diff --git a/mysql-test/t/trigger-grant.test b/mysql-test/t/trigger_notembedded.test
index 8145212ed5b..5d2ab84adaf 100644
--- a/mysql-test/t/trigger-grant.test
+++ b/mysql-test/t/trigger_notembedded.test
@@ -875,3 +875,37 @@ DROP DATABASE mysqltest_db1;
USE test;
--echo End of 5.0 tests.
+
+#
+# Bug#23713 LOCK TABLES + CREATE TRIGGER + FLUSH TABLES WITH READ LOCK = deadlock
+#
+
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+create table t1 (i int);
+connect (flush,localhost,root,,test,,);
+connection default;
+--echo connection: default
+lock tables t1 write;
+connection flush;
+--echo connection: flush
+--send flush tables with read lock;
+connection default;
+--echo connection: default
+let $wait_condition=
+ select count(*) = 1 from information_schema.processlist
+ where state = "Flushing tables";
+--source include/wait_condition.inc
+create trigger t1_bi before insert on t1 for each row begin end;
+unlock tables;
+connection flush;
+--echo connection: flush
+--reap
+unlock tables;
+connection default;
+select * from t1;
+drop table t1;
+disconnect flush;
+
+--echo End of 5.1 tests.
diff --git a/mysql-test/t/type_bit.test b/mysql-test/t/type_bit.test
index b9d93c28115..44780fb9d01 100644
--- a/mysql-test/t/type_bit.test
+++ b/mysql-test/t/type_bit.test
@@ -318,6 +318,21 @@ INSERT INTO t2 VALUES (3, 2, 'two'), (2, 3, 'three'), (2, 0, 'zero'),
SELECT COUNT(DISTINCT b,c) FROM t2 GROUP BY a;
DROP TABLE t2;
+#
+# BUG#32556 assert in "using index for group-by" : is_last_prefix <= 0,
+# file .\opt_range.cc
+
+CREATE TABLE t1(a BIT(13), KEY(a));
+--disable_warnings
+INSERT INTO t1(a) VALUES
+(65535),(65525),(65535),(65535),(65535),(65535),(65535),(65535),(65535),(65535);
+--enable_warnings
+
+EXPLAIN SELECT 1 FROM t1 GROUP BY a;
+SELECT 1 FROM t1 GROUP BY a;
+
+DROP TABLE t1;
+
--echo End of 5.0 tests
#
diff --git a/mysql-test/t/type_blob.test b/mysql-test/t/type_blob.test
index b6febf8e76d..afb70b0bd0c 100644
--- a/mysql-test/t/type_blob.test
+++ b/mysql-test/t/type_blob.test
@@ -436,4 +436,15 @@ set @@sql_mode='TRADITIONAL';
create table t1 (a text default '');
set @@sql_mode='';
+#
+# Bug #32282: TEXT silently truncates when value is exactly 65536 bytes
+#
+
+CREATE TABLE t (c TEXT CHARSET ASCII);
+INSERT INTO t (c) VALUES (REPEAT('1',65537));
+INSERT INTO t (c) VALUES (REPEAT('2',65536));
+INSERT INTO t (c) VALUES (REPEAT('3',65535));
+SELECT LENGTH(c), CHAR_LENGTH(c) FROM t;
+DROP TABLE t;
+
--echo End of 5.0 tests
diff --git a/mysql-test/t/type_date.test b/mysql-test/t/type_date.test
index dcee4fd2ffc..9bc428c3715 100644
--- a/mysql-test/t/type_date.test
+++ b/mysql-test/t/type_date.test
@@ -139,3 +139,96 @@ insert into t1 values (9912101,9912101,9912101);
insert into t1 values (11111,11111,11111);
select * from t1;
drop table t1;
+
+#
+# Bug #30942: select str_to_date from derived table returns varying results
+#
+CREATE TABLE t1 (
+ a INT
+);
+
+INSERT INTO t1 VALUES (1);
+INSERT INTO t1 VALUES (NULL);
+
+SELECT str_to_date( '', a ) FROM t1;
+DROP TABLE t1;
+
+
+#
+# Bug #31221: Optimizer incorrectly identifies impossible WHERE clause
+#
+
+CREATE TABLE t1 (a DATE, b int, PRIMARY KEY (a,b));
+INSERT INTO t1 VALUES (DATE(NOW()), 1);
+SELECT COUNT(*) FROM t1 WHERE a = NOW();
+EXPLAIN SELECT COUNT(*) FROM t1 WHERE a = NOW();
+INSERT INTO t1 VALUES (DATE(NOW()), 2);
+SELECT COUNT(*) FROM t1 WHERE a = NOW();
+EXPLAIN SELECT COUNT(*) FROM t1 WHERE a = NOW();
+SELECT COUNT(*) FROM t1 WHERE a = NOW() AND b = 1;
+EXPLAIN SELECT COUNT(*) FROM t1 WHERE a = NOW() AND b = 1;
+ALTER TABLE t1 DROP PRIMARY KEY;
+SELECT COUNT(*) FROM t1 WHERE a = NOW();
+EXPLAIN SELECT COUNT(*) FROM t1 WHERE a = NOW();
+
+DROP TABLE t1;
+
+#
+# Bug #28687: Search fails on '0000-00-00' date after sql_mode change
+#
+
+CREATE TABLE t1 (a DATE);
+CREATE TABLE t2 (a DATE);
+CREATE INDEX i ON t1 (a);
+INSERT INTO t1 VALUES ('0000-00-00'),('0000-00-00');
+INSERT INTO t2 VALUES ('0000-00-00'),('0000-00-00');
+SELECT * FROM t1 WHERE a = '0000-00-00';
+SELECT * FROM t2 WHERE a = '0000-00-00';
+SET SQL_MODE=TRADITIONAL;
+EXPLAIN SELECT * FROM t1 WHERE a = '0000-00-00';
+SELECT * FROM t1 WHERE a = '0000-00-00';
+SELECT * FROM t2 WHERE a = '0000-00-00';
+--error ER_TRUNCATED_WRONG_VALUE
+INSERT INTO t1 VALUES ('0000-00-00');
+SET SQL_MODE=DEFAULT;
+DROP TABLE t1,t2;
+
+#
+# Bug #31928: Search fails on '1000-00-00' date after sql_mode change
+#
+
+CREATE TABLE t1 (a DATE);
+CREATE TABLE t2 (a DATE);
+CREATE INDEX i ON t1 (a);
+INSERT INTO t1 VALUES ('1000-00-00'),('1000-00-00');
+INSERT INTO t2 VALUES ('1000-00-00'),('1000-00-00');
+SELECT * FROM t1 WHERE a = '1000-00-00';
+SELECT * FROM t2 WHERE a = '1000-00-00';
+SET SQL_MODE=TRADITIONAL;
+EXPLAIN SELECT * FROM t1 WHERE a = '1000-00-00';
+SELECT * FROM t1 WHERE a = '1000-00-00';
+SELECT * FROM t2 WHERE a = '1000-00-00';
+--error ER_TRUNCATED_WRONG_VALUE
+INSERT INTO t1 VALUES ('1000-00-00');
+SET SQL_MODE=DEFAULT;
+DROP TABLE t1,t2;
+
+#
+# Bug #31990: MINUTE() and SECOND() return bogus results when used on a DATE
+#
+
+CREATE TABLE t1 SELECT curdate() AS f1;
+SELECT hour(f1), minute(f1), second(f1) FROM t1;
+DROP TABLE t1;
+
+--echo End of 5.0 tests
+
+#
+# Bug#32021: Using Date 000-00-01 in WHERE causes wrong result
+#
+create table t1 (a date, primary key (a))engine=memory;
+insert into t1 values ('0000-01-01'), ('0000-00-01'), ('0001-01-01');
+select * from t1 where a between '0000-00-01' and '0000-00-02';
+drop table t1;
+
+--echo End of 5.1 tests
diff --git a/mysql-test/t/type_datetime.test b/mysql-test/t/type_datetime.test
index 6aa6edd128e..4fdd96b8729 100644
--- a/mysql-test/t/type_datetime.test
+++ b/mysql-test/t/type_datetime.test
@@ -155,13 +155,13 @@ set @@sql_mode='ansi,traditional';
insert into t1 values ('2007-03-23 13:49:38','2007-03-23 13:49:38');
insert into t1 set dt='2007-03-23 13:49:38',da=dt;
# Test error handling
---error 1292
+--error ER_TRUNCATED_WRONG_VALUE
insert into t1 values ('2007-03-32','2007-03-23 13:49:38');
select * from t1;
drop table t1;
---error 1067
+--error ER_INVALID_DEFAULT
create table t1 (da date default '1962-03-32 23:33:34', dt datetime default '1962-03-03');
---error 1067
+--error ER_INVALID_DEFAULT
create table t1 (t time default '916:00:00 a');
set @@sql_mode= @org_mode;
@@ -169,6 +169,19 @@ set @@sql_mode= @org_mode;
#
# Bug#27590: Wrong DATE/DATETIME comparison.
#
+## The following sub test will fail (difference to expected result) if the
+## select curdate() < now(), f1 < now(), cast(f1 as date) < now() from t1;
+## runs exact at midnight ('00:00:00').
+## ( Bug#29290 type_datetime.test failure in 5.1 )
+## Therefore we sleep a bit if we are too close to midnight.
+## The complete test itself needs around 1 second.
+## Therefore a time_distance to midnight of 5 seconds should be sufficient.
+if (`SELECT CURTIME() > SEC_TO_TIME(24 * 3600 - 5)`)
+{
+ # We are here when CURTIME() is between '23:59:56' and '23:59:59'.
+ # So a sleep time of 5 seconds brings us between '00:00:01' and '00:00:04'.
+ --real_sleep 5
+}
create table t1 (f1 date, f2 datetime, f3 timestamp);
insert into t1(f1) values(curdate());
select curdate() < now(), f1 < now(), cast(f1 as date) < now() from t1;
@@ -283,6 +296,43 @@ select * from t1 where f1 between 2002010 and 20070101000000;
select * from t1 where f1 between 20020101 and 2007010100000;
drop table t1;
+--echo #
+--echo # Bug#27216: functions with parameters of different date types may
+--echo # return wrong type of the result.
+--echo #
+create table t1 (f1 date, f2 datetime, f3 varchar(20));
+create table t2 as select coalesce(f1,f1) as f4 from t1;
+desc t2;
+create table t3 as select coalesce(f1,f2) as f4 from t1;
+desc t3;
+create table t4 as select coalesce(f2,f2) as f4 from t1;
+desc t4;
+create table t5 as select coalesce(f1,f3) as f4 from t1;
+desc t5;
+create table t6 as select coalesce(f2,f3) as f4 from t1;
+desc t6;
+create table t7 as select coalesce(makedate(1997,1),f2) as f4 from t1;
+desc t7;
+create table t8 as select coalesce(cast('01-01-01' as datetime),f2) as f4
+ from t1;
+desc t8;
+create table t9 as select case when 1 then cast('01-01-01' as date)
+ when 0 then cast('01-01-01' as date) end as f4 from t1;
+desc t9;
+create table t10 as select case when 1 then cast('01-01-01' as datetime)
+ when 0 then cast('01-01-01' as datetime) end as f4 from t1;
+desc t10;
+create table t11 as select if(1, cast('01-01-01' as datetime),
+ cast('01-01-01' as date)) as f4 from t1;
+desc t11;
+create table t12 as select least(cast('01-01-01' as datetime),
+ cast('01-01-01' as date)) as f4 from t1;
+desc t12;
+create table t13 as select ifnull(cast('01-01-01' as datetime),
+ cast('01-01-01' as date)) as f4 from t1;
+desc t13;
+drop tables t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13;
+--echo ###################################################################
#
# Bug #31253: crash comparing datetime to double
# Should return 1st row only. Crashes if NULL propagation fails.
@@ -301,8 +351,44 @@ insert into t1 values (), (), ();
select sum(a) from t1 group by convert(a, datetime);
drop table t1;
---echo End of 5.0 tests
+#
+# Bug #32694: NOT NULL table field in a subquery produces invalid results
+#
+create table t1 (id int(10) not null, cur_date datetime not null);
+create table t2 (id int(10) not null, cur_date date not null);
+insert into t1 (id, cur_date) values (1, '2007-04-25 18:30:22');
+insert into t2 (id, cur_date) values (1, '2007-04-25');
+
+explain extended
+select * from t1
+where id in (select id from t1 as x1 where (t1.cur_date is null));
+select * from t1
+where id in (select id from t1 as x1 where (t1.cur_date is null));
+explain extended
+select * from t2
+where id in (select id from t2 as x1 where (t2.cur_date is null));
+select * from t2
+where id in (select id from t2 as x1 where (t2.cur_date is null));
+
+insert into t1 (id, cur_date) values (2, '2007-04-26 18:30:22');
+insert into t2 (id, cur_date) values (2, '2007-04-26');
+
+explain extended
+select * from t1
+where id in (select id from t1 as x1 where (t1.cur_date is null));
+select * from t1
+where id in (select id from t1 as x1 where (t1.cur_date is null));
+
+explain extended
+select * from t2
+where id in (select id from t2 as x1 where (t2.cur_date is null));
+select * from t2
+where id in (select id from t2 as x1 where (t2.cur_date is null));
+
+drop table t1,t2;
+
+--echo End of 5.0 tests
#
# Test of storing datetime into date fields
#
diff --git a/mysql-test/t/type_decimal.test b/mysql-test/t/type_decimal.test
index 458583fca81..6841b3cdd68 100644
--- a/mysql-test/t/type_decimal.test
+++ b/mysql-test/t/type_decimal.test
@@ -410,6 +410,13 @@ SELECT ROUND(qty,3), dps, ROUND(qty,dps) FROM t1;
DROP TABLE t1;
#
+# Bug#31019: MOD() function and operator crashes MySQL when
+# divisor is very long and < 1
+#
+
+SELECT 1 % .123456789123456789123456789123456789123456789123456789123456789123456789123456789 AS '%';
+SELECT MOD(1, .123456789123456789123456789123456789123456789123456789123456789123456789123456789) AS 'MOD()';
+
# Bug #31227: memory overrun with decimal (6,6) and zerofill and group_concat
# valgrind will complain about this (the group_concat(f2)) on unpatched mysqld.
#
@@ -418,4 +425,100 @@ insert into t1 values (-0.123456,0.123456);
select group_concat(f1),group_concat(f2) from t1;
drop table t1;
+#
+# BUG#31450 "Query causes error 1048"
+#
+create table t1 (
+ ua_id decimal(22,0) not null,
+ ua_invited_by_id decimal(22,0) default NULL,
+ primary key(ua_id)
+);
+insert into t1 values (123, NULL), (456, NULL);
+
+--echo this must not produce error 1048:
+select * from t1 where ua_invited_by_id not in (select ua_id from t1);
+
+drop table t1;
+
+#
+# Bug #30889: filesort and order by with float/numeric crashes server
+#
+--disable_warnings
+DROP TABLE IF EXISTS t3;
+DROP TABLE IF EXISTS t4;
+--enable_warnings
+CREATE TABLE t1( a NUMERIC, b INT );
+INSERT INTO t1 VALUES (123456, 40), (123456, 40);
+SELECT TRUNCATE( a, b ) AS c FROM t1 ORDER BY c;
+SELECT ROUND( a, b ) AS c FROM t1 ORDER BY c;
+SELECT ROUND( a, 100 ) AS c FROM t1 ORDER BY c;
+
+CREATE TABLE t2( a NUMERIC, b INT );
+INSERT INTO t2 VALUES (123456, 100);
+SELECT TRUNCATE( a, b ) AS c FROM t2 ORDER BY c;
+SELECT ROUND( a, b ) AS c FROM t2 ORDER BY c;
+
+CREATE TABLE t3( a DECIMAL, b INT );
+INSERT INTO t3 VALUES (123456, 40), (123456, 40);
+SELECT TRUNCATE( a, b ) AS c FROM t3 ORDER BY c;
+SELECT ROUND( a, b ) AS c FROM t3 ORDER BY c;
+SELECT ROUND( a, 100 ) AS c FROM t3 ORDER BY c;
+
+CREATE TABLE t4( a DECIMAL, b INT );
+INSERT INTO t4 VALUES (123456, 40), (123456, 40);
+SELECT TRUNCATE( a, b ) AS c FROM t4 ORDER BY c;
+SELECT ROUND( a, b ) AS c FROM t4 ORDER BY c;
+SELECT ROUND( a, 100 ) AS c FROM t4 ORDER BY c;
+
+delete from t1;
+INSERT INTO t1 VALUES (1234567890, 20), (999.99, 5);
+show create table t1;
+
+select round(a,b) as c from t1 order by c;
+
+DROP TABLE t1, t2, t3, t4;
+
+#
+# Bug #33143: Incorrect ORDER BY for ROUND()/TRUNCATE() result
+#
+
+CREATE TABLE t1( a DECIMAL(4, 3), b INT );
+INSERT INTO t1 VALUES ( 1, 5 ), ( 2, 4 ), ( 3, 3 ), ( 4, 2 ), ( 5, 1 );
+SELECT a, b, ROUND( a, b ) AS c FROM t1 ORDER BY c;
+SELECT a, b, ROUND( a, b ) AS c FROM t1 ORDER BY c DESC;
+
+CREATE TABLE t2 ( a INT, b INT, c DECIMAL(5, 4) );
+
+INSERT INTO t2 VALUES ( 0, 1, 1.2345 ), ( 1, 2, 1.2345 ),
+ ( 3, 3, 1.2345 ), ( 2, 4, 1.2345 );
+
+SELECT a, b, MAX(ROUND(c, a))
+FROM t2
+GROUP BY a, b
+ORDER BY b;
+
+SELECT a, b, ROUND(c, a)
+FROM t2;
+
+CREATE TABLE t3( a INT, b DECIMAL(6, 3) );
+INSERT INTO t3 VALUES( 0, 1.5 );
+SELECT ROUND( b, a ) FROM t3;
+
+CREATE TABLE t4( a INT, b DECIMAL( 12, 0) );
+INSERT INTO t4 VALUES( -9, 1.5e9 );
+SELECT ROUND( b, a ) FROM t4;
+
+CREATE TABLE t5( a INT, b DECIMAL( 13, 12 ) );
+INSERT INTO t5 VALUES( 0, 1.5 );
+INSERT INTO t5 VALUES( 9, 1.5e-9 );
+SELECT ROUND( b, a ) FROM t5;
+
+CREATE TABLE t6( a INT );
+INSERT INTO t6 VALUES( 6 / 8 );
+SELECT * FROM t6;
+
+SELECT ROUND(20061108085411.000002);
+
+DROP TABLE t1, t2, t3, t4, t5, t6;
+
--echo End of 5.0 tests
diff --git a/mysql-test/t/type_float.test b/mysql-test/t/type_float.test
index ed3abb12140..9aa8c00d24a 100644
--- a/mysql-test/t/type_float.test
+++ b/mysql-test/t/type_float.test
@@ -116,15 +116,10 @@ drop table if exists t1;
# Check conversion of floats to character field (Bug #7774)
create table t1 (c char(20));
insert into t1 values (5e-28);
-# Expected result is "5e-28", but windows returns "5e-028"
---replace_result 5e-028 5e-28
select * from t1;
drop table t1;
create table t1 (c char(6));
insert into t1 values (2e5),(2e6),(2e-4),(2e-5);
-# Expected result is "2e+06", but windows returns "2e+006"
-# Expected result is "2e-05", but windows returns "2e-005"
---replace_result 2e+006 2e+06 2e-005 2e-05
select * from t1;
drop table t1;
diff --git a/mysql-test/t/type_newdecimal.test b/mysql-test/t/type_newdecimal.test
index b1776d09744..4b052a3d1fb 100644
--- a/mysql-test/t/type_newdecimal.test
+++ b/mysql-test/t/type_newdecimal.test
@@ -1205,6 +1205,27 @@ SELECT 1 FROM t1 GROUP BY @b := @a, @b;
DROP TABLE t1;
+#
+# Bug #24907: unpredictable (display) precission, if input precission
+# increases
+#
+
+# As per 10.1.1. Overview of Numeric Types, type (new) DECIMAL has a
+# maxmimum precision of 30 places after the decimal point. Show that
+# temp field creation beyond that works and throws a truncation warning.
+# DECIMAL(37,36) should be adjusted to DECIMAL(31,30).
+CREATE TABLE t1 SELECT 0.123456789012345678901234567890123456 AS f1;
+DESC t1;
+SELECT f1 FROM t1;
+DROP TABLE t1;
+
+# too many decimal places, AND too many digits altogether (90 = 45+45).
+# should preserve integers (65 = 45+20)
+CREATE TABLE t1 SELECT 123451234512345123451234512345123451234512345.678906789067890678906789067890678906789067890 AS f1;
+DESC t1;
+SELECT f1 FROM t1;
+DROP TABLE t1;
+
--echo End of 5.0 tests
#
diff --git a/mysql-test/t/udf.test b/mysql-test/t/udf.test
index 663dc08d72e..e9ae1a31079 100644
--- a/mysql-test/t/udf.test
+++ b/mysql-test/t/udf.test
@@ -35,20 +35,20 @@ eval CREATE FUNCTION reverse_lookup
eval CREATE AGGREGATE FUNCTION avgcost
RETURNS REAL SONAME "$UDF_EXAMPLE_LIB";
---error 0
+--error ER_CANT_INITIALIZE_UDF
select myfunc_double();
select myfunc_double(1);
select myfunc_double(78654);
--error 1305
select myfunc_nonexist();
select myfunc_int();
---error 0
+--error ER_CANT_INITIALIZE_UDF
select lookup();
select lookup("127.0.0.1");
---error 0
+--error ER_CANT_INITIALIZE_UDF
select lookup(127,0,0,1);
select lookup("localhost");
---error 0
+--error ER_CANT_INITIALIZE_UDF
select reverse_lookup();
# These two functions should return "localhost", but it's
@@ -59,9 +59,9 @@ select reverse_lookup(127,0,0,1);
--enable_result_log
select reverse_lookup("localhost");
---error 0
+--error ER_CANT_INITIALIZE_UDF
select avgcost();
---error 0
+--error ER_CANT_INITIALIZE_UDF
select avgcost(100,23.76);
create table t1(sum int, price float(24));
insert into t1 values(100, 50.00), (100, 100.00);
@@ -415,4 +415,25 @@ DROP PROCEDURE check_const_len_sp;
DROP TRIGGER check_const_len_trigger;
DROP TABLE const_len_bug;
+
+#
+# Bug #30355: Incorrect ordering of UDF results
+#
+
+--replace_result $UDF_EXAMPLE_LIB UDF_EXAMPLE_LIB
+eval CREATE FUNCTION sequence RETURNS INTEGER SONAME "$UDF_EXAMPLE_LIB";
+CREATE TABLE t1 (a INT);
+CREATE TABLE t2 (a INT PRIMARY KEY);
+INSERT INTO t1 VALUES (4),(3),(2),(1);
+INSERT INTO t2 SELECT * FROM t1;
+
+SELECT sequence() AS seq, a FROM t1 ORDER BY seq ASC;
+SELECT sequence() AS seq, a FROM t1 ORDER BY seq DESC;
+
+SELECT * FROM t1 WHERE a = sequence();
+SELECT * FROM t2 WHERE a = sequence();
+
+DROP FUNCTION sequence;
+DROP TABLE t1,t2;
+
--echo End of 5.0 tests.
diff --git a/mysql-test/t/udf_skip_grants-master.opt b/mysql-test/t/udf_skip_grants-master.opt
new file mode 100644
index 00000000000..5699a3387b8
--- /dev/null
+++ b/mysql-test/t/udf_skip_grants-master.opt
@@ -0,0 +1 @@
+--skip-grant-tables
diff --git a/mysql-test/t/udf_skip_grants.test b/mysql-test/t/udf_skip_grants.test
new file mode 100644
index 00000000000..bd9402e0d8a
--- /dev/null
+++ b/mysql-test/t/udf_skip_grants.test
@@ -0,0 +1,28 @@
+####################### udf_skip_grants.test ###########################
+# #
+# Test for bug #32020 "loading udfs while --skip-grant-tables is #
+# enabled causes out of memory errors" #
+# #
+# Creation: #
+# 2007-12-24 akopytov Moved the test case for bug #32020 from #
+# skip_grants.test to a separate test to ensure #
+# that it is only run when the server is built #
+# with support for dynamically loaded libraries #
+# (see bug #33305). #
+# #
+########################################################################
+
+-- source include/not_embedded.inc
+-- source include/have_udf.inc
+
+#
+# Bug #32020: loading udfs while --skip-grant-tables is enabled causes out of
+# memory errors
+#
+
+--error ER_CANT_INITIALIZE_UDF
+CREATE FUNCTION a RETURNS STRING SONAME '';
+--error ER_SP_DOES_NOT_EXIST
+DROP FUNCTION a;
+
+--echo End of 5.0 tests
diff --git a/mysql-test/t/union.test b/mysql-test/t/union.test
index a57ab469ac2..70789404d6e 100644
--- a/mysql-test/t/union.test
+++ b/mysql-test/t/union.test
@@ -922,4 +922,70 @@ DROP TABLE t1;
select @var;
--error 1172
(select 2) union (select 1 into @var);
+
+#
+# Bug#27848: order-by of union clashes with rollup of select part
+#
+
+CREATE TABLE t1 (a int);
+INSERT INTO t1 VALUES (10), (20);
+CREATE TABLE t2 (b int);
+INSERT INTO t2 VALUES (10), (50), (50);
+
+SELECT a,1 FROM t1
+UNION
+SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP
+ORDER BY a;
+
+SELECT a,1 FROM t1
+UNION
+SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP
+ORDER BY a DESC;
+
+SELECT a,1 FROM t1
+UNION
+SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP
+ORDER BY a ASC LIMIT 3;
+
+SELECT a,1 FROM t1
+UNION ALL
+SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP
+ORDER BY a DESC;
+
+--error ER_WRONG_USAGE
+SELECT a,1 FROM t1
+UNION
+(SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP ORDER BY a);
+
+--error ER_WRONG_USAGE
+SELECT a,1 FROM t1
+UNION ALL
+SELECT b, COUNT(*) FROM t2 GROUP BY b WITH ROLLUP ORDER BY a
+UNION
+SELECT 1,1;
+
+DROP TABLE t1,t2;
+
+# Bug#32848: Data type conversion bug in union subselects in MySQL 5.0.38
+#
+CREATE TABLE t1 (a INT);
+INSERT INTO t1 VALUES (1), (2), (3);
+
+CREATE TABLE t2 SELECT * FROM (SELECT NULL) a UNION SELECT a FROM t1;
+DESC t2;
+
+CREATE TABLE t3 SELECT a FROM t1 UNION SELECT * FROM (SELECT NULL) a;
+DESC t3;
+
+CREATE TABLE t4 SELECT NULL;
+DESC t4;
+
+CREATE TABLE t5 SELECT NULL UNION SELECT NULL;
+DESC t5;
+
+CREATE TABLE t6
+SELECT * FROM (SELECT * FROM (SELECT NULL)a) b UNION SELECT a FROM t1;
+DESC t6;
+
+DROP TABLE t1, t2, t3, t4, t5, t6;
--echo End of 5.0 tests
diff --git a/mysql-test/t/user_var.test b/mysql-test/t/user_var.test
index 3a3e8f88f83..f2699ab03d3 100644
--- a/mysql-test/t/user_var.test
+++ b/mysql-test/t/user_var.test
@@ -237,3 +237,30 @@ select @a:=f2, count(f2) from t1 group by 1 desc;
select @a:=f3, count(f3) from t1 group by 1 desc;
select @a:=f4, count(f4) from t1 group by 1 desc;
drop table t1;
+
+#
+# Bug#32482: Crash for a query with ORDER BY a user variable.
+#
+create table t1 (f1 int);
+insert into t1 values (2), (1);
+select @i := f1 as j from t1 order by 1;
+drop table t1;
+# Bug #32260: User variables in query cause server crash
+#
+create table t1(a int);
+insert into t1 values(5),(4),(4),(3),(2),(2),(2),(1);
+set @rownum := 0;
+set @rank := 0;
+set @prev_score := NULL;
+# Disable the result log as we assign a value to a user variable in one part
+# of a statement and use the same variable in other part of the same statement,
+# so we can get unexpected results.
+--disable_result_log
+select @rownum := @rownum + 1 as row,
+ @rank := IF(@prev_score!=a, @rownum, @rank) as rank,
+ @prev_score := a as score
+from t1 order by score desc;
+--enable_result_log
+drop table t1;
+
+--echo End of 5.1 tests
diff --git a/mysql-test/t/variables+c.test b/mysql-test/t/variables+c.test
new file mode 100644
index 00000000000..0092d34133d
--- /dev/null
+++ b/mysql-test/t/variables+c.test
@@ -0,0 +1,11 @@
+--source include/have_community_features.inc
+
+#
+# Bug#24822: Patch: uptime_since_flush_status
+#
+--replace_column 2 #
+show global status like "Uptime_%";
+flush status;
+--replace_column 2 #
+show global status like "Uptime_%"; # Almost certainly zero
+
diff --git a/mysql-test/t/variables.test b/mysql-test/t/variables.test
index f474d166fae..51f8d6db1db 100644
--- a/mysql-test/t/variables.test
+++ b/mysql-test/t/variables.test
@@ -141,10 +141,10 @@ set GLOBAL myisam_max_sort_file_size=2000000;
show global variables like 'myisam_max_sort_file_size';
select * from information_schema.global_variables where variable_name like 'myisam_max_sort_file_size';
set GLOBAL myisam_max_sort_file_size=default;
---replace_result 2147483647 FILE_SIZE 9223372036854775807 FILE_SIZE
-show variables like 'myisam_max_sort_file_size';
---replace_result 2147483647 FILE_SIZE 9223372036854775807 FILE_SIZE
-select * from information_schema.session_variables where variable_name like 'myisam_max_sort_file_size';
+--replace_result 9223372036853727232 FILE_SIZE 2146435072 FILE_SIZE
+show global variables like 'myisam_max_sort_file_size';
+--replace_result 9223372036853727232 FILE_SIZE 2146435072 FILE_SIZE
+select * from information_schema.global_variables where variable_name like 'myisam_max_sort_file_size';
set global net_retry_count=10, session net_retry_count=10;
set global net_buffer_length=1024, net_write_timeout=200, net_read_timeout=300;
@@ -161,7 +161,7 @@ select * from information_schema.session_variables where variable_name like 'net
set net_buffer_length=1;
show variables like 'net_buffer_length';
select * from information_schema.session_variables where variable_name like 'net_buffer_length';
---warning 1292
+#warning 1292
set net_buffer_length=2000000000;
show variables like 'net_buffer_length';
select * from information_schema.session_variables where variable_name like 'net_buffer_length';
@@ -575,7 +575,14 @@ set @test = @@query_prealloc_size;
set @@query_prealloc_size = @test;
select @@query_prealloc_size = @test;
-# End of 4.1 tests
+#
+# Bug#31588 buffer overrun when setting variables
+#
+# Buffer-size Off By One. Should throw valgrind-warning without fix #31588.
+--error 1231
+set global sql_mode=repeat('a',80);
+
+--echo End of 4.1 tests
#
# Bug#6282 Packet error with SELECT INTO
diff --git a/mysql-test/t/view.test b/mysql-test/t/view.test
index 67354c14cff..58ef9c1eff1 100644
--- a/mysql-test/t/view.test
+++ b/mysql-test/t/view.test
@@ -510,7 +510,7 @@ drop table t1;
#
create table t1 (a int, b int);
create view v1 as select a, sum(b) from t1 group by a;
--- error 1176
+--error ER_WRONG_USAGE
select b from v1 use index (some_index) where b=1;
drop view v1;
drop table t1;
@@ -2549,21 +2549,20 @@ CREATE TABLE t1(
fName varchar(25) NOT NULL,
lName varchar(25) NOT NULL,
DOB date NOT NULL,
+ test_date date NOT NULL,
uID int unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY);
-INSERT INTO t1(fName, lName, DOB) VALUES
- ('Hank', 'Hill', '1964-09-29'),
- ('Tom', 'Adams', '1908-02-14'),
- ('Homer', 'Simpson', '1968-03-05');
+INSERT INTO t1(fName, lName, DOB, test_date) VALUES
+ ('Hank', 'Hill', '1964-09-29', '2007-01-01'),
+ ('Tom', 'Adams', '1908-02-14', '2007-01-01'),
+ ('Homer', 'Simpson', '1968-03-05', '2007-01-01');
CREATE VIEW v1 AS
- SELECT (year(now())-year(DOB)) AS Age
+ SELECT (year(test_date)-year(DOB)) AS Age
FROM t1 HAVING Age < 75;
SHOW CREATE VIEW v1;
-set timestamp=1136066400;
-SELECT (year(now())-year(DOB)) AS Age FROM t1 HAVING Age < 75;
-set timestamp=1136066400;
+SELECT (year(test_date)-year(DOB)) AS Age FROM t1 HAVING Age < 75;
SELECT * FROM v1;
DROP VIEW v1;
@@ -3415,6 +3414,60 @@ select table_name, is_updatable from information_schema.views
drop view v1;
drop table t1;
+#
+# Bug #28701: SELECTs from VIEWs completely ignore USE/FORCE KEY, allowing
+# invalid statements
+#
+
+CREATE TABLE t1 (a INT);
+INSERT INTO t1 VALUES (1),(2);
+CREATE VIEW v1 AS SELECT * FROM t1;
+--error ER_WRONG_USAGE
+SELECT * FROM v1 USE KEY(non_existant);
+--error ER_WRONG_USAGE
+SELECT * FROM v1 FORCE KEY(non_existant);
+--error ER_WRONG_USAGE
+SELECT * FROM v1 IGNORE KEY(non_existant);
+
+DROP VIEW v1;
+DROP TABLE t1;
+
+#
+# Bug #28702: VIEWs defined with USE/FORCE KEY ignore that request
+#
+CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT, b INT NOT NULL DEFAULT 0,
+ PRIMARY KEY(a), KEY (b));
+INSERT INTO t1 VALUES (),(),(),(),(),(),(),(),(),(),(),(),(),(),();
+CREATE VIEW v1 AS SELECT * FROM t1 FORCE KEY (PRIMARY,b) ORDER BY a;
+SHOW CREATE VIEW v1;
+EXPLAIN SELECT * FROM v1;
+CREATE VIEW v2 AS SELECT * FROM t1 USE KEY () ORDER BY a;
+SHOW CREATE VIEW v2;
+EXPLAIN SELECT * FROM v2;
+CREATE VIEW v3 AS SELECT * FROM t1 IGNORE KEY (b) ORDER BY a;
+SHOW CREATE VIEW v3;
+EXPLAIN SELECT * FROM v3;
+
+DROP VIEW v1;
+DROP VIEW v2;
+DROP VIEW v3;
+DROP TABLE t1;
+
+--echo #
+--echo # Bug#29477: Not all fields of the target table were checked to have
+--echo # a default value when inserting into a view.
+--echo #
+create table t1(f1 int, f2 int not null);
+create view v1 as select f1 from t1;
+insert into v1 values(1);
+set @old_mode=@@sql_mode;
+set @@sql_mode=traditional;
+--error ER_NO_DEFAULT_FOR_VIEW_FIELD
+insert into v1 values(1);
+set @@sql_mode=@old_mode;
+drop view v1;
+drop table t1;
+
--echo End of 5.0 tests.
#
@@ -3436,4 +3489,55 @@ DROP VIEW `v-2`;
DROP DATABASE `d-1`;
USE test;
+--echo
+--echo #
+--echo # Bug#26676: VIEW using old table schema in a session.
+--echo #
+--echo
+
+--disable_warnings
+DROP VIEW IF EXISTS v1;
+DROP TABLE IF EXISTS t1;
+--enable_warnings
+
+CREATE TABLE t1(c1 INT, c2 INT);
+INSERT INTO t1 VALUES (1, 2), (3, 4);
+
+--echo
+
+SELECT * FROM t1;
+
+--echo
+
+CREATE VIEW v1 AS SELECT * FROM t1;
+
+--echo
+
+SELECT * FROM v1;
+
+--echo
+
+ALTER TABLE t1 ADD COLUMN c3 INT AFTER c2;
+
+--echo
+
+SELECT * FROM t1;
+
+--echo
+
+SELECT * FROM v1;
+
+--echo
+
+SHOW CREATE VIEW v1;
+
+--echo
+
+DROP VIEW v1;
+DROP TABLE t1;
+
+--echo
+--echo # End of test case for Bug#26676.
+--echo
+
--echo End of 5.1 tests.
diff --git a/mysql-test/t/view_grant.test b/mysql-test/t/view_grant.test
index b3bfd1cf544..3be0148f765 100644
--- a/mysql-test/t/view_grant.test
+++ b/mysql-test/t/view_grant.test
@@ -1040,10 +1040,11 @@ GRANT SELECT ON db26813.t1 TO u26813@localhost;
connect (u1,localhost,u26813,,db26813);
connection u1;
---error 1142
+--error ER_SPECIFIC_ACCESS_DENIED_ERROR
ALTER VIEW v1 AS SELECT f2 FROM t1;
---error 1142
+--error ER_SPECIFIC_ACCESS_DENIED_ERROR
ALTER VIEW v2 AS SELECT f2 FROM t1;
+--error ER_SPECIFIC_ACCESS_DENIED_ERROR
ALTER VIEW v3 AS SELECT f2 FROM t1;
connection root;
@@ -1053,6 +1054,51 @@ DROP USER u26813@localhost;
DROP DATABASE db26813;
disconnect u1;
+--echo #
+--echo # Bug#29908: A user can gain additional access through the ALTER VIEW.
+--echo #
+connection root;
+CREATE DATABASE mysqltest_29908;
+USE mysqltest_29908;
+CREATE TABLE t1(f1 INT, f2 INT);
+CREATE USER u29908_1@localhost;
+CREATE DEFINER = u29908_1@localhost VIEW v1 AS SELECT f1 FROM t1;
+CREATE DEFINER = u29908_1@localhost SQL SECURITY INVOKER VIEW v2 AS
+ SELECT f1 FROM t1;
+GRANT DROP, CREATE VIEW, SHOW VIEW ON mysqltest_29908.v1 TO u29908_1@localhost;
+GRANT DROP, CREATE VIEW, SHOW VIEW ON mysqltest_29908.v2 TO u29908_1@localhost;
+GRANT SELECT ON mysqltest_29908.t1 TO u29908_1@localhost;
+CREATE USER u29908_2@localhost;
+GRANT DROP, CREATE VIEW ON mysqltest_29908.v1 TO u29908_2@localhost;
+GRANT DROP, CREATE VIEW, SHOW VIEW ON mysqltest_29908.v2 TO u29908_2@localhost;
+GRANT SELECT ON mysqltest_29908.t1 TO u29908_2@localhost;
+
+connect (u2,localhost,u29908_2,,mysqltest_29908);
+--error ER_SPECIFIC_ACCESS_DENIED_ERROR
+ALTER VIEW v1 AS SELECT f2 FROM t1;
+--error ER_SPECIFIC_ACCESS_DENIED_ERROR
+ALTER VIEW v2 AS SELECT f2 FROM t1;
+SHOW CREATE VIEW v2;
+
+connect (u1,localhost,u29908_1,,mysqltest_29908);
+ALTER VIEW v1 AS SELECT f2 FROM t1;
+SHOW CREATE VIEW v1;
+ALTER VIEW v2 AS SELECT f2 FROM t1;
+SHOW CREATE VIEW v2;
+
+connection root;
+ALTER VIEW v1 AS SELECT f1 FROM t1;
+SHOW CREATE VIEW v1;
+ALTER VIEW v2 AS SELECT f1 FROM t1;
+SHOW CREATE VIEW v2;
+
+DROP USER u29908_1@localhost;
+DROP USER u29908_2@localhost;
+DROP DATABASE mysqltest_29908;
+disconnect u1;
+disconnect u2;
+--echo #######################################################################
+
#
# BUG#24040: Create View don't succed with "all privileges" on a database.
#
diff --git a/mysql-test/t/warnings.test b/mysql-test/t/warnings.test
index b5bae109f5f..d0eaaf1a764 100644
--- a/mysql-test/t/warnings.test
+++ b/mysql-test/t/warnings.test
@@ -65,6 +65,7 @@ create table t1(a tinyint NOT NULL, b tinyint unsigned, c char(5));
insert into t1 values(NULL,100,'mysql'),(10,-1,'mysql ab'),(500,256,'open source'),(20,NULL,'test');
alter table t1 modify c char(4);
alter table t1 add d char(2);
+--error 1048
update t1 set a=NULL where a=10;
update t1 set c='mysql ab' where c='test';
update t1 set d=c;
diff --git a/mysql-test/t/windows.test b/mysql-test/t/windows.test
index 0be81a95b9a..92ca0c3a3ec 100644
--- a/mysql-test/t/windows.test
+++ b/mysql-test/t/windows.test
@@ -36,6 +36,9 @@ EXPLAIN SELECT * FROM t1 WHERE b = (SELECT max(2));
--echo End of 5.0 tests.
+--disable_warnings
+drop procedure if exists proc_1;
+--enable_warnings
#
# Bug #20665: All commands supported in Stored Procedures should work in
# Prepared Statements
diff --git a/mysql-test/t/xml.test b/mysql-test/t/xml.test
index 6c7d9af1b63..5ca9c7afd76 100644
--- a/mysql-test/t/xml.test
+++ b/mysql-test/t/xml.test
@@ -543,4 +543,12 @@ select updatexml(NULL, NULL, 1), updatexml(1, NULL, NULL),
updatexml(NULL, 1, NULL);
select updatexml(NULL, NULL, NULL);
+#
+# Bug #32557: order by updatexml causes assertion in filesort
+#
+CREATE TABLE t1(a INT NOT NULL);
+INSERT INTO t1 VALUES (0), (0);
+SELECT 1 FROM t1 ORDER BY(UPDATEXML(a, '1', '1'));
+DROP TABLE t1;
+
--echo End of 5.1 tests
diff --git a/mysys/CMakeLists.txt b/mysys/CMakeLists.txt
index 6b24165686a..60e75c96b75 100755
--- a/mysys/CMakeLists.txt
+++ b/mysys/CMakeLists.txt
@@ -29,7 +29,7 @@ SET(MYSYS_SOURCES array.c charset-def.c charset.c checksum.c default.c default_
errors.c hash.c list.c md5.c mf_brkhant.c mf_cache.c mf_dirname.c mf_fn_ext.c
mf_format.c mf_getdate.c mf_iocache.c mf_iocache2.c mf_keycache.c
mf_keycaches.c mf_loadpath.c mf_pack.c mf_path.c mf_qsort.c mf_qsort2.c
- mf_radix.c mf_same.c mf_sort.c mf_soundex.c mf_strip.c mf_tempdir.c
+ mf_radix.c mf_same.c mf_sort.c mf_soundex.c mf_strip.c mf_arr_appstr.c mf_tempdir.c
mf_tempfile.c mf_unixpath.c mf_wcomp.c mf_wfile.c mulalloc.c my_access.c
my_aes.c my_alarm.c my_alloc.c my_append.c my_bit.c my_bitmap.c my_chsize.c
my_clock.c my_compress.c my_conio.c my_copy.c my_crc32.c my_create.c my_delete.c
diff --git a/mysys/Makefile.am b/mysys/Makefile.am
index fca13ab52b8..f06d81da849 100644
--- a/mysys/Makefile.am
+++ b/mysys/Makefile.am
@@ -35,7 +35,7 @@ libmysys_a_SOURCES = my_init.c my_getwd.c mf_getdate.c my_mmap.c \
my_error.c errors.c my_div.c my_messnc.c \
mf_format.c mf_same.c mf_dirname.c mf_fn_ext.c \
my_symlink.c my_symlink2.c \
- mf_pack.c mf_unixpath.c mf_strip.c \
+ mf_pack.c mf_unixpath.c mf_strip.c mf_arr_appstr.c \
mf_wcomp.c mf_wfile.c my_gethwaddr.c \
mf_qsort.c mf_qsort2.c mf_sort.c \
ptr_cmp.c mf_radix.c queues.c my_getncpus.c \
diff --git a/mysys/default.c b/mysys/default.c
index 3cc5b08e77c..2758029ec12 100644
--- a/mysys/default.c
+++ b/mysys/default.c
@@ -47,7 +47,7 @@ char *my_defaults_extra_file=0;
/* Which directories are searched for options (and in which order) */
-#define MAX_DEFAULT_DIRS 7
+#define MAX_DEFAULT_DIRS 6
const char *default_directories[MAX_DEFAULT_DIRS + 1];
#ifdef __WIN__
@@ -83,7 +83,22 @@ static int search_default_file_with_ext(Process_option_func func,
void *func_ctx,
const char *dir, const char *ext,
const char *config_file, int recursion_level);
-static void init_default_directories();
+
+
+
+/**
+ Create the list of default directories.
+
+ @details
+ On all systems, if a directory is already in the list, it will be moved
+ to the end of the list. This avoids reading defaults files multiple times,
+ while ensuring the correct precedence.
+
+ @return void
+*/
+
+static void (*init_default_directories)();
+
static char *remove_end_comment(char *ptr);
@@ -922,6 +937,34 @@ void print_defaults(const char *conf_file, const char **groups)
#include <help_end.h>
+/*
+ This extra complexity is to avoid declaring 'rc' if it won't be
+ used.
+*/
+#define ADD_DIRECTORY_INTERNAL(DIR) \
+ array_append_string_unique((DIR), default_directories, \
+ array_elements(default_directories))
+#ifdef DBUG_OFF
+# define ADD_DIRECTORY(DIR) (void) ADD_DIRECTORY_INTERNAL(DIR)
+#else
+#define ADD_DIRECTORY(DIR) \
+ do { \
+ my_bool rc= ADD_DIRECTORY_INTERNAL(DIR); \
+ DBUG_ASSERT(rc == FALSE); /* Success */ \
+ } while (0)
+#endif
+
+
+#define ADD_COMMON_DIRECTORIES() \
+ do { \
+ char *env; \
+ if ((env= getenv(STRINGIFY_ARG(DEFAULT_HOME_ENV)))) \
+ ADD_DIRECTORY(env); \
+ /* Placeholder for --defaults-extra-file=<path> */ \
+ ADD_DIRECTORY(""); \
+ } while (0)
+
+
#ifdef __WIN__
/*
This wrapper for GetSystemWindowsDirectory() will dynamically bind to the
@@ -956,71 +999,33 @@ static size_t my_get_system_windows_directory(char *buffer, size_t size)
}
return count;
}
-#endif
-/*
- Create the list of default directories.
+/**
+ Initialize default directories for Microsoft Windows
- On Microsoft Windows, this is:
- 1. C:/
+ @details
+ 1. GetSystemWindowsDirectory()
2. GetWindowsDirectory()
- 3. GetSystemWindowsDirectory()
- 4. getenv(DEFAULT_HOME_ENV)
- 5. Directory above where the executable is located
- 6. ""
- 7. --sysconfdir=<path>
-
- On Novell NetWare, this is:
- 1. sys:/etc/
- 2. getenv(DEFAULT_HOME_ENV)
- 3. ""
- 4. --sysconfdir=<path>
-
- On OS/2, this is:
- 1. getenv(ETC)
- 2. /etc/
- 3. getenv(DEFAULT_HOME_ENV)
- 4. ""
- 5. "~/"
- 6. --sysconfdir=<path>
-
- Everywhere else, this is:
- 1. /etc/
- 2. /etc/mysql/
- 3. getenv(DEFAULT_HOME_ENV)
- 4. ""
- 5. "~/"
- 6. --sysconfdir=<path>
-
- */
+ 3. C:/
+ 4. Directory above where the executable is located
+ 5. getenv(DEFAULT_HOME_ENV)
+ 6. --defaults-extra-file=<path> (run-time option)
+*/
-static void init_default_directories()
+static void init_default_directories_win()
{
- const char *env, **ptr= default_directories;
+ bzero((char *) default_directories, sizeof(default_directories));
-#ifdef __WIN__
- *ptr++= "C:/";
+ if (my_get_system_windows_directory(shared_system_dir,
+ sizeof(shared_system_dir)))
+ ADD_DIRECTORY(shared_system_dir);
if (GetWindowsDirectory(system_dir,sizeof(system_dir)))
- *ptr++= (char*)&system_dir;
- if (my_get_system_windows_directory(shared_system_dir,
- sizeof(shared_system_dir)) &&
- strcmp(system_dir, shared_system_dir))
- *ptr++= (char *)&shared_system_dir;
+ ADD_DIRECTORY(system_dir);
+
+ ADD_DIRECTORY("C:/");
-#elif defined(__NETWARE__)
- *ptr++= "sys:/etc/";
-#else
- *ptr++= "/etc/";
- *ptr++= "/etc/mysql/";
-#endif
- if ((env= getenv(STRINGIFY_ARG(DEFAULT_HOME_ENV))))
- *ptr++= env;
- *ptr++= ""; /* Place for defaults_extra_file */
-#if !defined(__WIN__) && !defined(__NETWARE__)
- *ptr++= "~/";;
-#elif defined(__WIN__)
if (GetModuleFileName(NULL, config_dir, sizeof(config_dir)))
{
char *last= NULL, *end= strend(config_dir);
@@ -1050,12 +1055,61 @@ static void init_default_directories()
last= end;
}
}
- *ptr++= (char *)&config_dir;
+ ADD_DIRECTORY(config_dir);
}
-#endif
+
+ ADD_COMMON_DIRECTORIES();
+}
+
+static void (*init_default_directories)()= init_default_directories_win;
+
+#elif defined(__NETWARE__)
+
+/**
+ Initialize default directories for Novell Netware
+
+ @details
+ 1. sys:/etc/
+ 2. getenv(DEFAULT_HOME_ENV)
+ 3. --defaults-extra-file=<path> (run-time option)
+*/
+
+static void init_default_directories_netware()
+{
+ bzero((char *) default_directories, sizeof(default_directories));
+ ADD_DIRECTORY("sys:/etc/");
+ ADD_COMMON_DIRECTORIES();
+}
+
+static void (*init_default_directories)()= init_default_directories_netware;
+
+#else
+
+/**
+ Initialize default directories for Unix
+
+ @details
+ 1. /etc/
+ 2. /etc/mysql/
+ 3. --sysconfdir=<path> (compile-time option)
+ 4. getenv(DEFAULT_HOME_ENV)
+ 5. --defaults-extra-file=<path> (run-time option)
+ 6. "~/"
+*/
+
+static void init_default_directories_unix()
+{
+ bzero((char *) default_directories, sizeof(default_directories));
+ ADD_DIRECTORY("/etc/");
+ ADD_DIRECTORY("/etc/mysql/");
#ifdef DEFAULT_SYSCONFDIR
if (DEFAULT_SYSCONFDIR != "")
- *ptr++= DEFAULT_SYSCONFDIR;
+ ADD_DIRECTORY(DEFAULT_SYSCONFDIR);
#endif
- *ptr= 0; /* end marker */
+ ADD_COMMON_DIRECTORIES();
+ ADD_DIRECTORY("~/");
}
+
+static void (*init_default_directories)()= init_default_directories_unix;
+
+#endif
diff --git a/mysys/mf_arr_appstr.c b/mysys/mf_arr_appstr.c
new file mode 100644
index 00000000000..1edbea9df4a
--- /dev/null
+++ b/mysys/mf_arr_appstr.c
@@ -0,0 +1,61 @@
+/* Copyright (C) 2007 MySQL AB
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; version 2 of the License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+#include "mysys_priv.h"
+#include <m_string.h> /* strcmp() */
+
+
+/**
+ Append str to array, or move to the end if it already exists
+
+ @param str String to be appended
+ @param array The array, terminated by a NULL element, all unused elements
+ pre-initialized to NULL
+ @param size Size of the array; array must be terminated by a NULL
+ pointer, so can hold size - 1 elements
+
+ @retval FALSE Success
+ @retval TRUE Failure, array is full
+*/
+
+my_bool array_append_string_unique(const char *str,
+ const char **array, size_t size)
+{
+ const char **p;
+ /* end points at the terminating NULL element */
+ const char **end= array + size - 1;
+ DBUG_ASSERT(*end == NULL);
+
+ for (p= array; *p; ++p)
+ {
+ if (strcmp(*p, str) == 0)
+ break;
+ }
+ if (p >= end)
+ return TRUE; /* Array is full */
+
+ DBUG_ASSERT(*p == NULL || strcmp(*p, str) == 0);
+
+ while (*(p + 1))
+ {
+ *p= *(p + 1);
+ ++p;
+ }
+
+ DBUG_ASSERT(p < end);
+ *p= str;
+
+ return FALSE; /* Success */
+}
diff --git a/mysys/mf_pack.c b/mysys/mf_pack.c
index a31b9595c85..63525e4d927 100644
--- a/mysys/mf_pack.c
+++ b/mysys/mf_pack.c
@@ -282,7 +282,7 @@ void symdirget(char *dir)
SYNOPSIS
unpack_dirname()
- to Store result here. May be = from
+ to result-buffer, FN_REFLEN characters. may be == from
from 'Packed' directory name (may contain ~)
IMPLEMENTATION
@@ -408,7 +408,7 @@ size_t unpack_filename(char * to, const char *from)
/* Convert filename (unix standard) to system standard */
/* Used before system command's like open(), create() .. */
- /* Returns length of to */
+ /* Returns used length of to; total length should be FN_REFLEN */
size_t system_filename(char * to, const char *from)
{
diff --git a/mysys/my_delete.c b/mysys/my_delete.c
index bac3e2513e1..cff00bf7e08 100644
--- a/mysys/my_delete.c
+++ b/mysys/my_delete.c
@@ -56,16 +56,20 @@ int nt_share_delete(const char *name, myf MyFlags)
ulong cnt;
DBUG_ENTER("nt_share_delete");
DBUG_PRINT("my",("name %s MyFlags %d", name, MyFlags));
-
+
for (cnt= GetTickCount(); cnt; cnt--)
{
sprintf(buf, "%s.%08X.deleted", name, cnt);
if (MoveFile(name, buf))
break;
-
+
if ((errno= GetLastError()) == ERROR_ALREADY_EXISTS)
continue;
-
+
+ /* This happened during tests with MERGE tables. */
+ if (errno == ERROR_ACCESS_DENIED)
+ continue;
+
DBUG_PRINT("warning", ("Failed to rename %s to %s, errno: %d",
name, buf, errno));
break;
diff --git a/mysys/my_getopt.c b/mysys/my_getopt.c
index 3aad6152dfd..5132ac820b8 100644
--- a/mysys/my_getopt.c
+++ b/mysys/my_getopt.c
@@ -86,6 +86,7 @@ static void default_reporter(enum loglevel level,
fprintf(stderr, "%s", "Info: ");
vfprintf(stderr, format, args);
va_end(args);
+ fputc('\n', stderr);
fflush(stderr);
}
@@ -153,7 +154,7 @@ int handle_options(int *argc, char ***argv,
{
if (my_getopt_print_errors)
my_getopt_error_reporter(ERROR_LEVEL,
- "%s: Option '-O' requires an argument\n",
+ "%s: Option '-O' requires an argument",
my_progname);
return EXIT_ARGUMENT_REQUIRED;
}
@@ -171,7 +172,7 @@ int handle_options(int *argc, char ***argv,
{
if (my_getopt_print_errors)
my_getopt_error_reporter(ERROR_LEVEL,
- "%s: Option '--set-variable' requires an argument\n",
+ "%s: Option '--set-variable' requires an argument",
my_progname);
return EXIT_ARGUMENT_REQUIRED;
}
@@ -185,7 +186,7 @@ int handle_options(int *argc, char ***argv,
{
if (my_getopt_print_errors)
my_getopt_error_reporter(ERROR_LEVEL,
- "%s: Option '--set-variable' requires an argument\n",
+ "%s: Option '--set-variable' requires an argument",
my_progname);
return EXIT_ARGUMENT_REQUIRED;
}
@@ -247,7 +248,7 @@ int handle_options(int *argc, char ***argv,
{
if (my_getopt_print_errors)
my_getopt_error_reporter(ERROR_LEVEL,
- "%s: ambiguous option '--%s-%s' (--%s-%s)\n",
+ "%s: ambiguous option '--%s-%s' (--%s-%s)",
my_progname, special_opt_prefix[i],
cur_arg, special_opt_prefix[i],
prev_found);
@@ -298,7 +299,7 @@ int handle_options(int *argc, char ***argv,
if (my_getopt_print_errors)
my_getopt_error_reporter(option_is_loose ?
WARNING_LEVEL : ERROR_LEVEL,
- "%s: unknown variable '%s'\n",
+ "%s: unknown variable '%s'",
my_progname, cur_arg);
if (!option_is_loose)
return EXIT_UNKNOWN_VARIABLE;
@@ -308,7 +309,7 @@ int handle_options(int *argc, char ***argv,
if (my_getopt_print_errors)
my_getopt_error_reporter(option_is_loose ?
WARNING_LEVEL : ERROR_LEVEL,
- "%s: unknown option '--%s'\n",
+ "%s: unknown option '--%s'",
my_progname, cur_arg);
if (!option_is_loose)
return EXIT_UNKNOWN_OPTION;
@@ -326,7 +327,7 @@ int handle_options(int *argc, char ***argv,
{
if (my_getopt_print_errors)
my_getopt_error_reporter(ERROR_LEVEL,
- "%s: variable prefix '%s' is not unique\n",
+ "%s: variable prefix '%s' is not unique",
my_progname, opt_str);
return EXIT_VAR_PREFIX_NOT_UNIQUE;
}
@@ -334,7 +335,7 @@ int handle_options(int *argc, char ***argv,
{
if (my_getopt_print_errors)
my_getopt_error_reporter(ERROR_LEVEL,
- "%s: ambiguous option '--%s' (%s, %s)\n",
+ "%s: ambiguous option '--%s' (%s, %s)",
my_progname, opt_str, prev_found,
optp->name);
return EXIT_AMBIGUOUS_OPTION;
@@ -357,7 +358,7 @@ int handle_options(int *argc, char ***argv,
{
if (my_getopt_print_errors)
my_getopt_error_reporter(ERROR_LEVEL,
- "%s: option '%s' cannot take an argument\n",
+ "%s: option '%s' cannot take an argument",
my_progname, optp->name);
return EXIT_NO_ARGUMENT_ALLOWED;
}
@@ -370,7 +371,7 @@ int handle_options(int *argc, char ***argv,
{
if (my_getopt_print_errors)
my_getopt_error_reporter(ERROR_LEVEL,
- "%s: option '--%s' cannot take an argument\n",
+ "%s: option '--%s' cannot take an argument",
my_progname, optp->name);
return EXIT_NO_ARGUMENT_ALLOWED;
}
@@ -392,7 +393,7 @@ int handle_options(int *argc, char ***argv,
{
my_getopt_error_reporter(WARNING_LEVEL,
"%s: ignoring option '--%s' due to \
-invalid value '%s'\n",
+invalid value '%s'",
my_progname, optp->name, optend);
continue;
}
@@ -423,7 +424,7 @@ invalid value '%s'\n",
{
if (my_getopt_print_errors)
my_getopt_error_reporter(ERROR_LEVEL,
- "%s: option '--%s' requires an argument\n",
+ "%s: option '--%s' requires an argument",
my_progname, optp->name);
return EXIT_ARGUMENT_REQUIRED;
}
@@ -483,7 +484,7 @@ invalid value '%s'\n",
{
if (my_getopt_print_errors)
my_getopt_error_reporter(ERROR_LEVEL,
- "%s: option '-%c' requires an argument\n",
+ "%s: option '-%c' requires an argument",
my_progname, optp->id);
return EXIT_ARGUMENT_REQUIRED;
}
@@ -496,7 +497,7 @@ invalid value '%s'\n",
set_maximum_value)))
{
my_getopt_error_reporter(ERROR_LEVEL,
- "%s: Error while setting value '%s' to '%s'\n",
+ "%s: Error while setting value '%s' to '%s'",
my_progname, argument, optp->name);
return error;
}
@@ -508,7 +509,7 @@ invalid value '%s'\n",
{
if (my_getopt_print_errors)
my_getopt_error_reporter(ERROR_LEVEL,
- "%s: unknown option '-%c'\n",
+ "%s: unknown option '-%c'",
my_progname, *optend);
return EXIT_UNKNOWN_OPTION;
}
@@ -519,7 +520,7 @@ invalid value '%s'\n",
if ((error= setval(optp, value, argument, set_maximum_value)))
{
my_getopt_error_reporter(ERROR_LEVEL,
- "%s: Error while setting value '%s' to '%s'\n",
+ "%s: Error while setting value '%s' to '%s'",
my_progname, argument, optp->name);
return error;
}
@@ -608,13 +609,17 @@ static int setval(const struct my_option *opts, uchar* *value, char *argument,
*((my_bool*) result_pos)= (my_bool) atoi(argument) != 0;
break;
case GET_INT:
- case GET_UINT: /* fall through */
*((int*) result_pos)= (int) getopt_ll(argument, opts, &err);
break;
+ case GET_UINT:
+ *((uint*) result_pos)= (uint) getopt_ull(argument, opts, &err);
+ break;
case GET_LONG:
- case GET_ULONG: /* fall through */
*((long*) result_pos)= (long) getopt_ll(argument, opts, &err);
break;
+ case GET_ULONG:
+ *((long*) result_pos)= (long) getopt_ull(argument, opts, &err);
+ break;
case GET_LL:
*((longlong*) result_pos)= getopt_ll(argument, opts, &err);
break;
@@ -778,23 +783,70 @@ static longlong eval_num_suffix(char *argument, int *error, char *option_name)
static longlong getopt_ll(char *arg, const struct my_option *optp, int *err)
{
- longlong num;
+ longlong num=eval_num_suffix(arg, err, (char*) optp->name);
+ return getopt_ll_limit_value(num, optp, NULL);
+}
+
+/*
+ function: getopt_ll_limit_value
+
+ Applies min/max/block_size to a numeric value of an option.
+ Returns "fixed" value.
+*/
+
+longlong getopt_ll_limit_value(longlong num, const struct my_option *optp,
+ bool *fix)
+{
+ longlong old= num;
+ bool adjusted= FALSE;
+ char buf1[255], buf2[255];
ulonglong block_size= (optp->block_size ? (ulonglong) optp->block_size : 1L);
-
- num= eval_num_suffix(arg, err, (char*) optp->name);
- if (num > 0 && (ulonglong) num > (ulonglong) optp->max_value &&
+
+ if (num > 0 && ((ulonglong) num > (ulonglong) optp->max_value) &&
optp->max_value) /* if max value is not set -> no upper limit */
{
- char buf[22];
- my_getopt_error_reporter(WARNING_LEVEL,
- "Truncated incorrect %s value: '%s'",
- optp->name, llstr(num, buf));
-
num= (ulonglong) optp->max_value;
+ adjusted= TRUE;
}
+
+ switch ((optp->var_type & GET_TYPE_MASK)) {
+ case GET_INT:
+ if (num > (longlong) INT_MAX)
+ {
+ num= ((longlong) INT_MAX);
+ adjusted= TRUE;
+ }
+ break;
+ case GET_LONG:
+#if SIZEOF_LONG < SIZEOF_LONG_LONG
+ if (num > (longlong) LONG_MAX)
+ {
+ num= ((longlong) LONG_MAX);
+ adjusted= TRUE;
+ }
+#endif
+ break;
+ default:
+ DBUG_ASSERT((optp->var_type & GET_TYPE_MASK) == GET_LL);
+ break;
+ }
+
num= ((num - optp->sub_size) / block_size);
num= (longlong) (num * block_size);
- return max(num, optp->min_value);
+
+ if (num < optp->min_value)
+ {
+ num= optp->min_value;
+ adjusted= TRUE;
+ }
+
+ if (fix)
+ *fix= adjusted;
+ else if (adjusted)
+ my_getopt_error_reporter(WARNING_LEVEL,
+ "option '%s': signed value %s adjusted to %s",
+ optp->name, llstr(old, buf1), llstr(num, buf2));
+ return num;
}
/*
@@ -806,25 +858,66 @@ static longlong getopt_ll(char *arg, const struct my_option *optp, int *err)
static ulonglong getopt_ull(char *arg, const struct my_option *optp, int *err)
{
- ulonglong num;
-
- num= eval_num_suffix(arg, err, (char*) optp->name);
- return getopt_ull_limit_value(num, optp);
+ ulonglong num= eval_num_suffix(arg, err, (char*) optp->name);
+ return getopt_ull_limit_value(num, optp, NULL);
}
-ulonglong getopt_ull_limit_value(ulonglong num, const struct my_option *optp)
+ulonglong getopt_ull_limit_value(ulonglong num, const struct my_option *optp,
+ bool *fix)
{
+ bool adjusted= FALSE;
+ ulonglong old= num;
+ char buf1[255], buf2[255];
+
if ((ulonglong) num > (ulonglong) optp->max_value &&
optp->max_value) /* if max value is not set -> no upper limit */
+ {
num= (ulonglong) optp->max_value;
+ adjusted= TRUE;
+ }
+
+ switch ((optp->var_type & GET_TYPE_MASK)) {
+ case GET_UINT:
+ if (num > (ulonglong) UINT_MAX)
+ {
+ num= ((ulonglong) UINT_MAX);
+ adjusted= TRUE;
+ }
+ break;
+ case GET_ULONG:
+#if SIZEOF_LONG < SIZEOF_LONG_LONG
+ if (num > (ulonglong) ULONG_MAX)
+ {
+ num= ((ulonglong) ULONG_MAX);
+ adjusted= TRUE;
+ }
+#endif
+ break;
+ default:
+ DBUG_ASSERT((optp->var_type & GET_TYPE_MASK) == GET_ULL);
+ break;
+ }
+
if (optp->block_size > 1)
{
num/= (ulonglong) optp->block_size;
num*= (ulonglong) optp->block_size;
}
+
if (num < (ulonglong) optp->min_value)
+ {
num= (ulonglong) optp->min_value;
+ adjusted= TRUE;
+ }
+
+ if (fix)
+ *fix= adjusted;
+ else if (adjusted)
+ my_getopt_error_reporter(WARNING_LEVEL,
+ "option '%s': unsigned value %s adjusted to %s",
+ optp->name, ullstr(old, buf1), ullstr(num, buf2));
+
return num;
}
diff --git a/mysys/my_symlink2.c b/mysys/my_symlink2.c
index 2a46fb3abea..7c3ddbb911c 100644
--- a/mysys/my_symlink2.c
+++ b/mysys/my_symlink2.c
@@ -130,6 +130,7 @@ int my_rename_with_symlink(const char *from, const char *to, myf MyFlags)
int was_symlink= (!my_disable_symlinks &&
!my_readlink(link_name, from, MYF(0)));
int result=0;
+ int name_is_different;
DBUG_ENTER("my_rename_with_symlink");
if (!was_symlink)
@@ -138,6 +139,14 @@ int my_rename_with_symlink(const char *from, const char *to, myf MyFlags)
/* Change filename that symlink pointed to */
strmov(tmp_name, to);
fn_same(tmp_name,link_name,1); /* Copy dir */
+ name_is_different= strcmp(link_name, tmp_name);
+ if (name_is_different && !access(tmp_name, F_OK))
+ {
+ my_errno= EEXIST;
+ if (MyFlags & MY_WME)
+ my_error(EE_CANTCREATEFILE, MYF(0), tmp_name, EEXIST);
+ DBUG_RETURN(1);
+ }
/* Create new symlink */
if (my_symlink(tmp_name, to, MyFlags))
@@ -149,7 +158,7 @@ int my_rename_with_symlink(const char *from, const char *to, myf MyFlags)
the same basename and different directories.
*/
- if (strcmp(link_name, tmp_name) && my_rename(link_name, tmp_name, MyFlags))
+ if (name_is_different && my_rename(link_name, tmp_name, MyFlags))
{
int save_errno=my_errno;
my_delete(to, MyFlags); /* Remove created symlink */
diff --git a/mysys/my_write.c b/mysys/my_write.c
index 056a84f1794..c67b1d8f3f2 100644
--- a/mysys/my_write.c
+++ b/mysys/my_write.c
@@ -29,6 +29,10 @@ size_t my_write(int Filedes, const uchar *Buffer, size_t Count, myf MyFlags)
Filedes, (long) Buffer, (ulong) Count, MyFlags));
errors=0; written=0;
+ /* The behavior of write(fd, buf, 0) is not portable */
+ if (unlikely(!Count))
+ DBUG_RETURN(0);
+
for (;;)
{
if ((writenbytes= write(Filedes, Buffer, Count)) == Count)
diff --git a/mysys/queues.c b/mysys/queues.c
index bc7f0b74b4f..94f49ab8f9c 100644
--- a/mysys/queues.c
+++ b/mysys/queues.c
@@ -61,7 +61,7 @@ int init_queue(QUEUE *queue, uint max_elements, uint offset_to_key,
queue->first_cmp_arg=first_cmp_arg;
queue->max_elements=max_elements;
queue->offset_to_key=offset_to_key;
- queue->max_at_top= max_at_top ? (-1 ^ 1) : 0;
+ queue_set_max_at_top(queue, max_at_top);
DBUG_RETURN(0);
}
@@ -137,7 +137,7 @@ int reinit_queue(QUEUE *queue, uint max_elements, uint offset_to_key,
queue->compare=compare;
queue->first_cmp_arg=first_cmp_arg;
queue->offset_to_key=offset_to_key;
- queue->max_at_top= max_at_top ? (-1 ^ 1) : 0;
+ queue_set_max_at_top(queue, max_at_top);
resize_queue(queue, max_elements);
DBUG_RETURN(0);
}
@@ -208,16 +208,14 @@ void delete_queue(QUEUE *queue)
void queue_insert(register QUEUE *queue, uchar *element)
{
reg2 uint idx, next;
- int cmp;
DBUG_ASSERT(queue->elements < queue->max_elements);
queue->root[0]= element;
idx= ++queue->elements;
/* max_at_top swaps the comparison if we want to order by desc */
- while ((cmp= queue->compare(queue->first_cmp_arg,
- element + queue->offset_to_key,
- queue->root[(next= idx >> 1)] +
- queue->offset_to_key)) &&
- (cmp ^ queue->max_at_top) < 0)
+ while ((queue->compare(queue->first_cmp_arg,
+ element + queue->offset_to_key,
+ queue->root[(next= idx >> 1)] +
+ queue->offset_to_key) * queue->max_at_top) < 0)
{
queue->root[idx]= queue->root[next];
idx= next;
@@ -287,19 +285,17 @@ void _downheap(register QUEUE *queue, uint idx)
while (idx <= half_queue)
{
- int cmp;
next_index=idx+idx;
if (next_index < elements &&
(queue->compare(queue->first_cmp_arg,
queue->root[next_index]+offset_to_key,
- queue->root[next_index+1]+offset_to_key) ^
+ queue->root[next_index+1]+offset_to_key) *
queue->max_at_top) > 0)
next_index++;
if (first &&
- (((cmp=queue->compare(queue->first_cmp_arg,
- queue->root[next_index]+offset_to_key,
- element+offset_to_key)) == 0) ||
- ((cmp ^ queue->max_at_top) > 0)))
+ (((queue->compare(queue->first_cmp_arg,
+ queue->root[next_index]+offset_to_key,
+ element+offset_to_key) * queue->max_at_top) >= 0)))
{
queue->root[idx]= element;
return;
@@ -314,7 +310,7 @@ void _downheap(register QUEUE *queue, uint idx)
{
if ((queue->compare(queue->first_cmp_arg,
queue->root[next_index]+offset_to_key,
- element+offset_to_key) ^
+ element+offset_to_key) *
queue->max_at_top) < 0)
break;
queue->root[idx]=queue->root[next_index];
@@ -334,7 +330,6 @@ void _downheap(register QUEUE *queue, uint idx)
{
uchar *element;
uint elements,half_queue,next_index,offset_to_key;
- int cmp;
offset_to_key=queue->offset_to_key;
element=queue->root[idx];
@@ -346,13 +341,12 @@ void _downheap(register QUEUE *queue, uint idx)
if (next_index < elements &&
(queue->compare(queue->first_cmp_arg,
queue->root[next_index]+offset_to_key,
- queue->root[next_index+1]+offset_to_key) ^
+ queue->root[next_index+1]+offset_to_key) *
queue->max_at_top) > 0)
next_index++;
- if ((cmp=queue->compare(queue->first_cmp_arg,
- queue->root[next_index]+offset_to_key,
- element+offset_to_key)) == 0 ||
- (cmp ^ queue->max_at_top) > 0)
+ if ((queue->compare(queue->first_cmp_arg,
+ queue->root[next_index]+offset_to_key,
+ element+offset_to_key) * queue->max_at_top) >= 0)
break;
queue->root[idx]=queue->root[next_index];
idx=next_index;
diff --git a/mysys/thr_lock.c b/mysys/thr_lock.c
index a81ed925562..7f7be4835a5 100644
--- a/mysys/thr_lock.c
+++ b/mysys/thr_lock.c
@@ -396,6 +396,7 @@ wait_for_lock(struct st_lock_list *wait, THR_LOCK_DATA *data,
struct timespec wait_timeout;
enum enum_thr_lock_result result= THR_LOCK_ABORTED;
my_bool can_deadlock= test(data->owner->info->n_cursors);
+ DBUG_ENTER("wait_for_lock");
if (!in_wait_list)
{
@@ -431,13 +432,21 @@ wait_for_lock(struct st_lock_list *wait, THR_LOCK_DATA *data,
if the predicate is true.
*/
if (data->cond == 0)
+ {
+ DBUG_PRINT("thr_lock", ("lock granted/aborted"));
break;
+ }
if (rc == ETIMEDOUT || rc == ETIME)
{
+ /* purecov: begin inspected */
+ DBUG_PRINT("thr_lock", ("lock timed out"));
result= THR_LOCK_WAIT_TIMEOUT;
break;
+ /* purecov: end */
}
}
+ DBUG_PRINT("thr_lock", ("aborted: %d in_wait_list: %d",
+ thread_var->abort, in_wait_list));
if (data->cond || data->type == TL_UNLOCK)
{
@@ -453,6 +462,7 @@ wait_for_lock(struct st_lock_list *wait, THR_LOCK_DATA *data,
}
else
{
+ DBUG_PRINT("thr_lock", ("lock aborted"));
check_locks(data->lock, "aborted wait_for_lock", 0);
}
}
@@ -471,7 +481,7 @@ wait_for_lock(struct st_lock_list *wait, THR_LOCK_DATA *data,
thread_var->current_mutex= 0;
thread_var->current_cond= 0;
pthread_mutex_unlock(&thread_var->mutex);
- return result;
+ DBUG_RETURN(result);
}
@@ -509,7 +519,7 @@ thr_lock(THR_LOCK_DATA *data, THR_LOCK_OWNER *owner,
and the read lock is not TL_READ_NO_INSERT
*/
- DBUG_PRINT("lock",("write locked by thread: 0x%lx",
+ DBUG_PRINT("lock",("write locked 1 by thread: 0x%lx",
lock->write.data->owner->info->thread_id));
if (thr_lock_owner_equal(data->owner, lock->write.data->owner) ||
(lock->write.data->type <= TL_WRITE_DELAYED &&
@@ -598,10 +608,14 @@ thr_lock(THR_LOCK_DATA *data, THR_LOCK_OWNER *owner,
{
if (lock->write.data->type == TL_WRITE_ONLY)
{
- /* We are not allowed to get a lock in this case */
- data->type=TL_UNLOCK;
- result= THR_LOCK_ABORTED; /* Can't wait for this one */
- goto end;
+ /* Allow lock owner to bypass TL_WRITE_ONLY. */
+ if (!thr_lock_owner_equal(data->owner, lock->write.data->owner))
+ {
+ /* We are not allowed to get a lock in this case */
+ data->type=TL_UNLOCK;
+ result= THR_LOCK_ABORTED; /* Can't wait for this one */
+ goto end;
+ }
}
/*
@@ -631,10 +645,8 @@ thr_lock(THR_LOCK_DATA *data, THR_LOCK_OWNER *owner,
statistic_increment(locks_immediate,&THR_LOCK_lock);
goto end;
}
- /* purecov: begin inspected */
- DBUG_PRINT("lock",("write locked by thread: 0x%lx",
+ DBUG_PRINT("lock",("write locked 2 by thread: 0x%lx",
lock->write.data->owner->info->thread_id));
- /* purecov: end */
}
else
{
@@ -669,7 +681,7 @@ thr_lock(THR_LOCK_DATA *data, THR_LOCK_OWNER *owner,
goto end;
}
}
- DBUG_PRINT("lock",("write locked by thread: 0x%lx type: %d",
+ DBUG_PRINT("lock",("write locked 3 by thread: 0x%lx type: %d",
lock->read.data->owner->info->thread_id, data->type));
}
wait_queue= &lock->write_wait;
@@ -683,6 +695,7 @@ thr_lock(THR_LOCK_DATA *data, THR_LOCK_OWNER *owner,
lock_owner= lock->read.data ? lock->read.data : lock->write.data;
if (lock_owner && lock_owner->owner->info == owner->info)
{
+ DBUG_PRINT("lock",("deadlock"));
result= THR_LOCK_DEADLOCK;
goto end;
}
diff --git a/netware/Makefile.am b/netware/Makefile.am
index 64467a41777..80da180273b 100644
--- a/netware/Makefile.am
+++ b/netware/Makefile.am
@@ -56,9 +56,6 @@ link_sources:
done
echo timestamp > link_sources
-BUILT_SOURCES = link_sources
-CLEANFILES = $(BUILT_SOURCES)
-
else
BUILT_SOURCES = libmysql.imp init_db.sql test_db.sql
diff --git a/netware/mysql_test_run.c b/netware/mysql_test_run.c
index c32abce20d3..010c4380fdd 100644
--- a/netware/mysql_test_run.c
+++ b/netware/mysql_test_run.c
@@ -25,6 +25,7 @@
#include <sys/stat.h>
#include <sys/mode.h>
#include "my_manage.h"
+#include "mysql_version.h"
#ifdef __NETWARE__
#define strindex(a,b) ((char*)strindex(a,b))
#define strstr(a,b) ((char*)strstr(a,b))
diff --git a/netware/mysqld_safe.c b/netware/mysqld_safe.c
index 00e7d1bcd51..6ed04c9ff0d 100644
--- a/netware/mysqld_safe.c
+++ b/netware/mysqld_safe.c
@@ -28,6 +28,7 @@
#include "my_config.h"
#include "my_manage.h"
+#include "mysql_version.h"
/******************************************************************************
diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt
index 6fbfcab72d4..f0db25be79a 100755
--- a/scripts/CMakeLists.txt
+++ b/scripts/CMakeLists.txt
@@ -40,3 +40,38 @@ ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_SOURCE_DIR}/scripts/mysql_fix_privilege_tabl
ADD_CUSTOM_TARGET(GenFixPrivs
ALL
DEPENDS ${PROJECT_SOURCE_DIR}/scripts/mysql_fix_privilege_tables_sql.c)
+
+# ----------------------------------------------------------------------
+# Replace some variables @foo@ in the .in/.sh file, and write the new script
+# ----------------------------------------------------------------------
+
+SET(CFLAGS "-D_WINDOWS ${CMAKE_C_FLAGS_RELWITHDEBINFO}")
+SET(prefix "${CMAKE_INSTALL_PREFIX}/MySQL Server ${MYSQL_BASE_VERSION}")
+SET(sysconfdir ${prefix})
+SET(bindir ${prefix}/bin)
+SET(libexecdir ${prefix}/bin)
+SET(scriptdir ${prefix}/bin)
+SET(datadir ${prefix}/share)
+SET(pkgdatadir ${prefix}/share)
+SET(localstatedir ${prefix}/data)
+
+CONFIGURE_FILE(mysql_config.pl.in
+ scripts/mysql_config.pl ESCAPE_QUOTES @ONLY)
+
+CONFIGURE_FILE(mysql_convert_table_format.sh
+ scripts/mysql_convert_table_format.pl ESCAPE_QUOTES @ONLY)
+
+CONFIGURE_FILE(mysql_install_db.pl.in
+ scripts/mysql_install_db.pl ESCAPE_QUOTES @ONLY)
+
+CONFIGURE_FILE(mysql_secure_installation.pl.in
+ scripts/mysql_secure_installation.pl ESCAPE_QUOTES @ONLY)
+
+CONFIGURE_FILE(mysqld_multi.sh
+ scripts/mysqld_multi.pl ESCAPE_QUOTES @ONLY)
+
+CONFIGURE_FILE(mysqldumpslow.sh
+ scripts/mysqldumpslow.pl ESCAPE_QUOTES @ONLY)
+
+CONFIGURE_FILE(mysqlhotcopy.sh
+ scripts/mysqlhotcopy.pl ESCAPE_QUOTES @ONLY)
diff --git a/scripts/Makefile.am b/scripts/Makefile.am
index 6143c3532d9..cf061cc08e5 100644
--- a/scripts/Makefile.am
+++ b/scripts/Makefile.am
@@ -43,11 +43,14 @@ EXTRA_SCRIPTS = make_binary_distribution.sh \
make_sharedlib_distribution.sh \
msql2mysql.sh \
mysql_config.sh \
+ mysql_config.pl.in \
mysql_fix_privilege_tables.sh \
mysql_fix_extensions.sh \
mysql_install_db.sh \
+ mysql_install_db.pl.in \
mysql_setpermission.sh \
mysql_secure_installation.sh \
+ mysql_secure_installation.pl.in \
mysql_zap.sh \
mysqlaccess.sh \
mysqlbug.sh \
@@ -87,7 +90,6 @@ CLEANFILES = @server_scripts@ \
mysql_find_rows \
mysqlhotcopy \
mysqldumpslow \
- mysql_tableinfo \
mysqld_multi
# Default same as 'pkgdatadir', but we can override it
@@ -144,13 +146,19 @@ SUFFIXES = .sh
-e 's!@''CC''@!@CC@!'\
-e 's!@''CXX''@!@CXX@!'\
-e 's!@''GXX''@!@GXX@!'\
+ -e 's!@''SAVE_CC''@!@SAVE_CC@!'\
+ -e 's!@''SAVE_CXX''@!@SAVE_CXX@!'\
-e 's!@''CC_VERSION''@!@CC_VERSION@!'\
-e 's!@''CXX_VERSION''@!@CXX_VERSION@!'\
-e 's!@''PERL''@!@PERL@!' \
- -e 's!@''ASFLAGS''@!@SAVE_ASFLAGS@!'\
- -e 's!@''CFLAGS''@!@SAVE_CFLAGS@!'\
- -e 's!@''CXXFLAGS''@!@SAVE_CXXFLAGS@!'\
- -e 's!@''LDFLAGS''@!@SAVE_LDFLAGS@!'\
+ -e 's!@''SAVE_ASFLAGS''@!@SAVE_ASFLAGS@!'\
+ -e 's!@''SAVE_CFLAGS''@!@SAVE_CFLAGS@!'\
+ -e 's!@''SAVE_CXXFLAGS''@!@SAVE_CXXFLAGS@!'\
+ -e 's!@''SAVE_LDFLAGS''@!@SAVE_LDFLAGS@!'\
+ -e 's!@''ASFLAGS''@!@ASFLAGS@!'\
+ -e 's!@''CFLAGS''@!@CFLAGS@!'\
+ -e 's!@''CXXFLAGS''@!@CXXFLAGS@!'\
+ -e 's!@''LDFLAGS''@!@LDFLAGS@!'\
-e 's!@''CLIENT_LIBS''@!@CLIENT_LIBS@!' \
-e 's!@''ZLIB_LIBS''@!@ZLIB_LIBS@!' \
-e 's!@''LIBS''@!@LIBS@!' \
diff --git a/scripts/make_binary_distribution.sh b/scripts/make_binary_distribution.sh
index 8d3e2133a45..17d5c6ebbaf 100644
--- a/scripts/make_binary_distribution.sh
+++ b/scripts/make_binary_distribution.sh
@@ -23,7 +23,8 @@
# Note that the structure created by this script is slightly different from
# what a normal "make install" would produce. No extra "mysql" sub directory
# will be created, i.e. no "$prefix/include/mysql", "$prefix/lib/mysql" or
-# "$prefix/share/mysql".
+# "$prefix/share/mysql". This is because the build system explicitly calls
+# make with pkgdatadir=<datadir>, etc.
#
# In GNU make/automake terms
#
@@ -218,11 +219,13 @@ if [ x"$BASE_SYSTEM" != x"netware" ] ; then
# If we compiled with gcc, copy libgcc.a to the dist as libmygcc.a
# ----------------------------------------------------------------------
if [ x"@GXX@" = x"yes" ] ; then
- gcclib=`@CC@ @CFLAGS@ --print-libgcc-file`
- if [ $? -ne 0 ] ; then
- echo "Warning: Couldn't find libgcc.a!"
- else
+ gcclib=`@CC@ @CFLAGS@ --print-libgcc-file 2>/dev/null` || true
+ if [ -z "$gcclib" ] ; then
+ echo "Warning: Compiler doesn't tell libgcc.a!"
+ elif [ -f "$gcclib" ] ; then
$CP $gcclib $DEST/lib/libmygcc.a
+ else
+ echo "Warning: Compiler result '$gcclib' not found / no file!"
fi
fi
@@ -396,6 +399,7 @@ copyfileto $BASE/mysql-test \
$CP mysql-test/lib/*.pl $BASE/mysql-test/lib
$CP mysql-test/t/*.def $BASE/mysql-test/t
$CP mysql-test/include/*.inc $BASE/mysql-test/include
+$CP mysql-test/include/*.sql $BASE/mysql-test/include
$CP mysql-test/include/*.test $BASE/mysql-test/include
$CP mysql-test/t/*.def $BASE/mysql-test/t
$CP mysql-test/std_data/*.dat mysql-test/std_data/*.frm \
diff --git a/scripts/make_win_bin_dist b/scripts/make_win_bin_dist
index 957a5a6768d..f0dc3eff72b 100755
--- a/scripts/make_win_bin_dist
+++ b/scripts/make_win_bin_dist
@@ -152,7 +152,6 @@ if [ x"$TARGET" != x"release" ] ; then
cp server-tools/instance-manager/$TARGET/*.pdb $DESTDIR/bin/
fi
cp tests/$TARGET/*.exe $DESTDIR/bin/
-cp libmysql/$TARGET/*.exe $DESTDIR/bin/
cp libmysql/$TARGET/libmysql.dll $DESTDIR/bin/
# FIXME really needed?!
@@ -317,35 +316,32 @@ if [ -d mysql-test/extra ] ; then
fi
# ----------------------------------------------------------------------
-# Copy what could be usable in the "scripts" directory. Currently
-# only SQL files, others are Bourne shell scripts or Perl scripts
-# not really usable on Windows.
-#
-# But to be nice to the few Cygwin users we might have in 5.0 we
-# continue to copy the stuff, but don't include it in the WiX install.
+# Copy what could be usable in the "scripts" directory
# ----------------------------------------------------------------------
+mysql_scripts="\
+mysql_config.pl \
+mysql_convert_table_format.pl \
+mysql_install_db.pl \
+mysql_secure_installation.pl \
+mysqld_multi.pl \
+mysqldumpslow.pl \
+mysqlhotcopy.pl \
+"
+
mkdir -p $DESTDIR/scripts
-# Uncomment and remove the for loop in 5.1
-#cp scripts/*.sql $DESTDIR/scripts/
-
-for i in `cd scripts && ls`; do \
- if echo $i | grep -q '\.sh'; then \
- cp scripts/$i $DESTDIR/scripts/`echo $i | sed -e 's/\.sh$//'`; \
- elif [ -d scripts/$i -o $i = Makefile.am -o $i = Makefile.in -o -e scripts/$i.sh ] ; then \
- : ; \
- else \
- cp scripts/$i $DESTDIR/scripts/$i; \
- fi; \
+for i in $mysql_scripts
+do
+ cp scripts/$i $DESTDIR/scripts/$i
done
cp -pR sql/share $DESTDIR/
cp -pR sql-bench $DESTDIR/
rm -f $DESTDIR/sql-bench/*.sh $DESTDIR/sql-bench/Makefile*
-# The SQL initialisation code is really expected to be in "share"
-mv $DESTDIR/scripts/*.sql $DESTDIR/share/ || true
+# The SQL initialisation code is to be in "share"
+cp scripts/*.sql $DESTDIR/share/
# ----------------------------------------------------------------------
# Clean up from possibly copied SCCS directories
diff --git a/scripts/mysql_config.pl.in b/scripts/mysql_config.pl.in
new file mode 100644
index 00000000000..3ae8baf7db0
--- /dev/null
+++ b/scripts/mysql_config.pl.in
@@ -0,0 +1,285 @@
+#!/usr/bin/perl
+# -*- cperl -*-
+#
+# Copyright (C) 2007 MySQL AB
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+##############################################################################
+#
+# This script reports various configuration settings that may be needed
+# when using the MySQL client library.
+#
+# This script try to match the shell script version as close as possible,
+# but in addition being compatible with ActiveState Perl on Windows.
+#
+# All unrecognized arguments to this script are passed to mysqld.
+#
+# NOTE: This script will only be used on Windows until solved how to
+# handle @LIBS@ and other strings inserted that might contain
+# several arguments, possibly with spaces in them.
+#
+# NOTE: This script was deliberately written to be as close to the shell
+# script as possible, to make the maintenance of both in parallel
+# easier.
+#
+##############################################################################
+
+use File::Basename;
+use Getopt::Long;
+use Cwd;
+use strict;
+
+my @exclude_cflags =
+ qw/DDBUG_OFF DSAFEMALLOC USAFEMALLOC DSAFE_MUTEX
+ DPEDANTIC_SAFEMALLOC DUNIV_MUST_NOT_INLINE DFORCE_INIT_OF_VARS
+ DEXTRA_DEBUG DHAVE_purify O O[0-9] xO[0-9] W[-A-Za-z]*
+ Xa xstrconst xc99=none
+ unroll2 ip mp restrict/;
+
+my @exclude_libs = qw/lmtmalloc static-libcxa i-static static-intel/;
+
+my $cwd = cwd();
+my $basedir;
+
+my $socket = '@MYSQL_UNIX_ADDR@';
+my $version = '@VERSION@';
+
+sub which
+{
+ my $file = shift;
+
+ my $IFS = $^O eq "MSWin32" ? ";" : ":";
+
+ foreach my $dir ( split($IFS, $ENV{PATH}) )
+ {
+ if ( -f "$dir/$file" or -f "$dir/$file.exe" )
+ {
+ return "$dir/$file";
+ }
+ }
+ print STDERR "which: no $file in ($ENV{PATH})\n";
+ exit 1;
+}
+
+# ----------------------------------------------------------------------
+# If we can find the given directory relatively to where mysql_config is
+# we should use this instead of the incompiled one.
+# This is to ensure that this script also works with the binary MySQL
+# version
+# ----------------------------------------------------------------------
+
+sub fix_path
+{
+ my $default = shift;
+ my @dirs = @_;
+
+ foreach my $dirname ( @dirs )
+ {
+ my $path = "$basedir/$dirname";
+ if ( -d $path )
+ {
+ return $path;
+ }
+ }
+ return $default;
+}
+
+sub get_full_path
+{
+ my $file = shift;
+
+ # if the file is a symlink, try to resolve it
+ if ( $^O ne "MSWin32" and -l $file )
+ {
+ $file = readlink($file);
+ }
+
+ if ( $file =~ m,^/, )
+ {
+ # Do nothing, absolute path
+ }
+ elsif ( $file =~ m,/, )
+ {
+ # Make absolute, and remove "/./" in path
+ $file = "$cwd/$file";
+ $file =~ s,/\./,/,g;
+ }
+ else
+ {
+ # Find in PATH
+ $file = which($file);
+ }
+
+ return $file;
+}
+
+##############################################################################
+#
+# Form a command line that can handle spaces in paths and arguments
+#
+##############################################################################
+
+sub quote_options {
+ my @cmd;
+ foreach my $opt ( @_ )
+ {
+ next unless $opt; # If undefined or empty, just skip
+ push(@cmd, "\"$opt\""); # Quote argument
+ }
+ return join(" ", @cmd);
+}
+
+##############################################################################
+#
+# Main program
+#
+##############################################################################
+
+my $me = get_full_path($0);
+$basedir = dirname(dirname($me)); # Remove "/bin/mysql_config" part
+
+my $ldata = '@localstatedir@';
+my $execdir = '@libexecdir@';
+my $bindir = '@bindir@';
+
+# ----------------------------------------------------------------------
+# If installed, search for the compiled in directory first (might be "lib64")
+# ----------------------------------------------------------------------
+
+my $pkglibdir = fix_path('@pkglibdir@',"libmysql/relwithdebinfo",
+ "libmysql/release","libmysql/debug","lib/mysql","lib");
+
+my $pkgincludedir = fix_path('@pkgincludedir@', "include/mysql", "include");
+
+# Assume no argument with space in it
+my @ldflags = split(" ",'@LDFLAGS@');
+
+my $port;
+if ( '@MYSQL_TCP_PORT_DEFAULT@' == 0 ) {
+ $port = 0;
+} else {
+ $port = '@MYSQL_TCP_PORT@';
+}
+
+# ----------------------------------------------------------------------
+# Create options
+# We intentionally add a space to the beginning and end of lib strings, simplifies replace later
+# ----------------------------------------------------------------------
+
+my (@lib_opts,@lib_r_opts,@lib_e_opts);
+if ( $^O eq "MSWin32" )
+{
+ my $linkpath = "$pkglibdir";
+ # user32 is only needed for debug or embedded
+ my @winlibs = ("wsock32.lib","advapi32.lib","user32.lib");
+ @lib_opts = ("$linkpath/mysqlclient.lib",@winlibs);
+ @lib_r_opts = @lib_opts;
+ @lib_e_opts = ("$linkpath/mysqlserver.lib",@winlibs);
+}
+else
+{
+ my $linkpath = "-L$pkglibdir";
+ @lib_opts = ($linkpath,"-lmysqlclient");
+ @lib_r_opts = ($linkpath,"-lmysqlclient_r");
+ @lib_e_opts = ($linkpath,"-lmysqld");
+}
+
+my $flags;
+$flags->{libs} =
+ [@ldflags,@lib_opts,'@ZLIB_DEPS@','@NON_THREADED_LIBS@','@openssl_libs@','@STATIC_NSS_FLAGS@'];
+$flags->{libs_r} =
+ [@ldflags,@lib_r_opts,'@ZLIB_DEPS@','@LIBS@','@openssl_libs@'];
+$flags->{embedded_libs} =
+ [@ldflags,@lib_e_opts,'@ZLIB_DEPS@','@LIBS@','@WRAPLIBS@','@innodb_system_libs@','@openssl_libs@'];
+
+$flags->{include} = ["-I$pkgincludedir"];
+$flags->{cflags} = [@{$flags->{include}},split(" ",'@CFLAGS@')];
+
+# ----------------------------------------------------------------------
+# Remove some options that a client doesn't have to care about
+# FIXME until we have a --cxxflags, we need to remove -Xa
+# and -xstrconst to make --cflags usable for Sun Forte C++
+# ----------------------------------------------------------------------
+
+my $filter = join("|", @exclude_cflags);
+my @tmp = @{$flags->{cflags}}; # Copy the flag list
+$flags->{cflags} = []; # Clear it
+foreach my $cflag ( @tmp )
+{
+ push(@{$flags->{cflags}}, $cflag) unless $cflag =~ m/^($filter)$/o;
+}
+
+# Same for --libs(_r)
+$filter = join("|", @exclude_libs);
+foreach my $lib_type ( "libs","libs_r","embedded_libs" )
+{
+ my @tmp = @{$flags->{$lib_type}}; # Copy the flag list
+ $flags->{$lib_type} = []; # Clear it
+ foreach my $lib ( @tmp )
+ {
+ push(@{$flags->{$lib_type}}, $lib) unless $lib =~ m/^($filter)$/o;
+ }
+}
+
+my $include = quote_options(@{$flags->{include}});
+my $cflags = quote_options(@{$flags->{cflags}});
+my $libs = quote_options(@{$flags->{libs}});
+my $libs_r = quote_options(@{$flags->{libs_r}});
+my $embedded_libs = quote_options(@{$flags->{embedded_libs}});
+
+##############################################################################
+#
+# Usage information, output if no option is given
+#
+##############################################################################
+
+sub usage
+{
+ print <<EOF;
+Usage: $0 [OPTIONS]
+Options:
+ --cflags [$cflags]
+ --include [$include]
+ --libs [$libs]
+ --libs_r [$libs_r]
+ --socket [$socket]
+ --port [$port]
+ --version [$version]
+ --libmysqld-libs [$embedded_libs]
+EOF
+ exit 1;
+}
+
+@ARGV or usage();
+
+##############################################################################
+#
+# Get options and output the values
+#
+##############################################################################
+
+GetOptions(
+ "cflags" => sub { print "$cflags\n" },
+ "include" => sub { print "$include\n" },
+ "libs" => sub { print "$libs\n" },
+ "libs_r" => sub { print "$libs_r\n" },
+ "socket" => sub { print "$socket\n" },
+ "port" => sub { print "$port\n" },
+ "version" => sub { print "$version\n" },
+ "embedded-libs|embedded|libmysqld-libs" =>
+ sub { print "$embedded_libs\n" },
+ ) or usage();
+
+exit 0
diff --git a/scripts/mysql_convert_table_format.sh b/scripts/mysql_convert_table_format.sh
index 4df3e293303..d15c7b28410 100644
--- a/scripts/mysql_convert_table_format.sh
+++ b/scripts/mysql_convert_table_format.sh
@@ -1,4 +1,4 @@
-#!@PERL@
+#!/usr/bin/perl
# Copyright (C) 2000-2002 MySQL AB
#
# This program is free software; you can redistribute it and/or modify
diff --git a/scripts/mysql_install_db.pl.in b/scripts/mysql_install_db.pl.in
new file mode 100644
index 00000000000..18bd713c041
--- /dev/null
+++ b/scripts/mysql_install_db.pl.in
@@ -0,0 +1,612 @@
+#!/usr/bin/perl
+# -*- cperl -*-
+#
+# Copyright (C) 2007 MySQL AB
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+##############################################################################
+#
+# This scripts creates the MySQL Server system tables.
+#
+# This script try to match the shell script version as close as possible,
+# but in addition being compatible with ActiveState Perl on Windows.
+#
+# All unrecognized arguments to this script are passed to mysqld.
+#
+# NOTE: This script in 5.0 doesn't really match the shell script
+# version 100%, it is more close to the 5.1 version.
+#
+# NOTE: This script was deliberately written to be as close to the shell
+# script as possible, to make the maintenance of both in parallel
+# easier.
+#
+##############################################################################
+
+use File::Basename;
+use Getopt::Long;
+use Sys::Hostname;
+use Data::Dumper;
+use strict;
+
+Getopt::Long::Configure("pass_through");
+
+my @args; # Argument list filled in
+
+##############################################################################
+#
+# Usage information
+#
+##############################################################################
+
+sub usage
+{
+ print <<EOF;
+Usage: $0 [OPTIONS]
+ --basedir=path The path to the MySQL installation directory.
+ --builddir=path If using --srcdir with out-of-directory builds, you
+ will need to set this to the location of the build
+ directory where built files reside.
+ --cross-bootstrap For internal use. Used when building the MySQL system
+ tables on a different host than the target.
+ --datadir=path The path to the MySQL data directory.
+ --force Causes mysql_install_db to run even if DNS does not
+ work. In that case, grant table entries that normally
+ use hostnames will use IP addresses.
+ --ldata=path The path to the MySQL data directory. Same as --datadir.
+ --rpm For internal use. This option is used by RPM files
+ during the MySQL installation process.
+ --skip-name-resolve Use IP addresses rather than hostnames when creating
+ grant table entries. This option can be useful if
+ your DNS does not work.
+ --srcdir=path The path to the MySQL source directory. This option
+ uses the compiled binaries and support files within the
+ source tree, useful for if you don't want to install
+ MySQL yet and just want to create the system tables.
+ --user=user_name The login username to use for running mysqld. Files
+ and directories created by mysqld will be owned by this
+ user. You must be root to use this option. By default
+ mysqld runs using your current login name and files and
+ directories that it creates will be owned by you.
+
+All other options are passed to the mysqld program
+
+EOF
+ exit 1;
+}
+
+##############################################################################
+#
+# Parse an argument list
+#
+# We only need to pass arguments through to the server if we don't
+# handle them here. So, we collect unrecognized options (passed on
+# the command line) into the args variable.
+#
+##############################################################################
+
+sub parse_arguments
+{
+ my $opt = shift;
+
+ my @saved_ARGV = @ARGV;
+ @ARGV = @_; # Set ARGV so GetOptions works
+
+ my $pick_args;
+ if (@ARGV and $ARGV[0] eq 'PICK-ARGS-FROM-ARGV')
+ {
+ $pick_args = 1;
+ shift @ARGV;
+ }
+
+ GetOptions(
+ $opt,
+ "force",
+ "basedir=s",
+ "builddir=s", # FIXME not documented
+ "srcdir=s",
+ "ldata|datadir=s",
+
+ # Note that the user will be passed to mysqld so that it runs
+ # as 'user' (crucial e.g. if log-bin=/some_other_path/
+ # where a chown of datadir won't help)
+ "user=s",
+
+ "skip-name-resolve",
+ "verbose",
+ "rpm",
+ "help",
+ "defaults-file|defaults-extra-file|no-defaults:s",
+
+ # Used when building the MySQL system tables on a different host than
+ # the target. The platform-independent files that are created in
+ # --datadir on the host can be copied to the target system.
+ #
+ # The most common use for this feature is in the Windows installer
+ # which will take the files from datadir and include them as part of
+ # the install package. See top-level 'dist-hook' make target.
+ #
+ # --windows is a deprecated alias
+ "cross-bootstrap|windows", # FIXME undocumented, even needed?
+ ) or usage();
+
+ usage() if $opt->{help};
+
+ @args = @ARGV if $pick_args;
+
+ @ARGV = @saved_ARGV; # Set back ARGV
+}
+
+##############################################################################
+#
+# Try to find a specific file within --basedir which can either be a binary
+# release or installed source directory and return the path.
+#
+##############################################################################
+
+sub find_in_basedir
+{
+ my $opt = shift;
+ my $mode = shift; # "dir" or "file"
+ my $files = shift;
+
+ foreach my $file ( @{ref($files) ? $files : [$files]} )
+ {
+ foreach my $dir ( @_ )
+ {
+ foreach my $part ( "$file","$file.exe","release/$file.exe",
+ "debug/$file.exe","relwithdebinfo/$file.exe" )
+ {
+ my $path = "$opt->{basedir}/$dir/$part";
+ if ( -f $path )
+ {
+ return $mode eq "dir" ? dirname($path) : $path;
+ }
+ }
+ }
+ }
+}
+
+##############################################################################
+#
+# Just a function to write out an error report
+#
+##############################################################################
+
+sub cannot_find_file
+{
+ my $file = shift;
+
+ print "FATAL ERROR: Could not find $file\n";
+ print "\n";
+ print "If you compiled from source, you need to run 'make install' to\n";
+ print "copy the software into the correct location ready for operation.\n";
+ print "\n";
+ print "If you are using a binary release, you must either be at the top\n";
+ print "level of the extracted archive, or pass the --basedir option\n";
+ print "pointing to that location.\n";
+ print "\n";
+
+ exit 1;
+}
+
+##############################################################################
+#
+# Form a command line that can handle spaces in paths and arguments
+#
+##############################################################################
+
+# FIXME this backslash escaping needed if using '"..."' ?
+# This regexp makes sure that any special chars are quoted,
+# so the arg gets passed exactly to the server.
+# XXX: This is broken; true fix requires using eval and proper
+# quoting of every single arg ($opt->{basedir}, $opt->{ldata}, etc.)
+# join(" ", map {s/([^\w\_\.\-])/\\$1/g}
+
+sub quote_options {
+ my @cmd;
+ foreach my $opt ( @_ )
+ {
+ next unless $opt; # If undefined or empty, just skip
+ push(@cmd, "\"$opt\""); # Quote argument
+ }
+ return join(" ", @cmd);
+}
+
+##############################################################################
+#
+# Ok, let's go. We first need to parse arguments which are required by
+# my_print_defaults so that we can execute it first, then later re-parse
+# the command line to add any extra bits that we need.
+#
+##############################################################################
+
+my $opt = {};
+parse_arguments($opt, 'PICK-ARGS-FROM-ARGV', @ARGV);
+
+# ----------------------------------------------------------------------
+# We can now find my_print_defaults. This script supports:
+#
+# --srcdir=path pointing to compiled source tree
+# --basedir=path pointing to installed binary location
+#
+# or default to compiled-in locations.
+# ----------------------------------------------------------------------
+
+my $print_defaults;
+
+if ( $opt->{srcdir} and $opt->{basedir} )
+{
+ error("Specify either --basedir or --srcdir, not both");
+}
+if ( $opt->{srcdir} )
+{
+ $opt->{builddir} = $opt->{srcdir} unless $opt->{builddir};
+ $print_defaults = "$opt->{builddir}/extra/my_print_defaults";
+}
+elsif ( $opt->{basedir} )
+{
+ $print_defaults = find_in_basedir($opt,"file","my_print_defaults","bin","extra");
+}
+else
+{
+ $print_defaults='@bindir@/my_print_defaults';
+}
+
+-x $print_defaults or -f "$print_defaults.exe"
+ or cannot_find_file($print_defaults);
+
+# ----------------------------------------------------------------------
+# Now we can get arguments from the groups [mysqld] and [mysql_install_db]
+# in the my.cfg file, then re-run to merge with command line arguments.
+# ----------------------------------------------------------------------
+
+my @default_options;
+my $cmd = quote_options($print_defaults,$opt->{'defaults-file'},
+ "mysqld","mysql_install_db");
+open(PIPE, "$cmd |") or error($opt,"can't run $cmd: $!");
+while ( <PIPE> )
+{
+ chomp;
+ next unless /\S/;
+ push(@default_options, $_);
+}
+close PIPE;
+$opt = {}; # Reset the arguments FIXME ?
+parse_arguments($opt, @default_options);
+parse_arguments($opt, 'PICK-ARGS-FROM-ARGV', @ARGV);
+
+# ----------------------------------------------------------------------
+# Configure paths to support files
+# ----------------------------------------------------------------------
+
+# FIXME $extra_bindir is not used
+my ($bindir,$extra_bindir,$mysqld,$pkgdatadir,$mysqld_opt,$scriptdir);
+
+if ( $opt->{srcdir} )
+{
+ $opt->{basedir} = $opt->{builddir};
+ $bindir = "$opt->{basedir}/client";
+ $extra_bindir = "$opt->{basedir}/extra";
+ $mysqld = "$opt->{basedir}/sql/mysqld";
+ $mysqld_opt = "--language=$opt->{srcdir}/sql/share/english";
+ $pkgdatadir = "$opt->{srcdir}/scripts";
+ $scriptdir = "$opt->{srcdir}/scripts";
+}
+elsif ( $opt->{basedir} )
+{
+ $bindir = "$opt->{basedir}/bin";
+ $extra_bindir = $bindir;
+ $mysqld = find_in_basedir($opt,"file",["mysqld-nt","mysqld"],
+ "libexec","sbin","bin") || # ,"sql"
+ find_in_basedir($opt,"file","mysqld-nt",
+ "bin"); # ,"sql"
+ $pkgdatadir = find_in_basedir($opt,"dir","fill_help_tables.sql",
+ "share","share/mysql"); # ,"scripts"
+ $scriptdir = "$opt->{basedir}/scripts";
+}
+else
+{
+ $opt->{basedir} = '@prefix@';
+ $bindir = '@bindir@';
+ $extra_bindir = $bindir;
+ $mysqld = '@libexecdir@/mysqld';
+ $pkgdatadir = '@pkgdatadir@';
+ $scriptdir = '@scriptdir@';
+}
+
+unless ( $opt->{ldata} )
+{
+ $opt->{ldata} = '@localstatedir@';
+}
+
+if ( $opt->{srcdir} )
+{
+ $pkgdatadir = "$opt->{srcdir}/scripts";
+}
+
+# ----------------------------------------------------------------------
+# Set up paths to SQL scripts required for bootstrap
+# ----------------------------------------------------------------------
+
+my $fill_help_tables = "$pkgdatadir/fill_help_tables.sql";
+my $create_system_tables = "$pkgdatadir/mysql_system_tables.sql";
+my $fill_system_tables = "$pkgdatadir/mysql_system_tables_data.sql";
+
+foreach my $f ( $fill_help_tables,$create_system_tables,$fill_system_tables )
+{
+ -f $f or cannot_find_file($f);
+}
+
+-x $mysqld or -f "$mysqld.exe" or cannot_find_file($mysqld);
+# Try to determine the hostname
+my $hostname = hostname();
+
+# ----------------------------------------------------------------------
+# Check if hostname is valid
+# ----------------------------------------------------------------------
+
+my $resolved;
+if ( !$opt->{'cross-bootstrap'} and !$opt->{rpm} and !$opt->{force} )
+{
+ my $resolveip;
+
+ $resolved = `$resolveip $hostname 2>&1`;
+ if ( $? != 0 )
+ {
+ $resolved=`$resolveip localhost 2>&1`;
+ if ( $? != 0 )
+ {
+ error($opt,
+ "Neither host '$hostname' nor 'localhost' could be looked up with",
+ "$bindir/resolveip",
+ "Please configure the 'hostname' command to return a correct",
+ "hostname.",
+ "If you want to solve this at a later stage, restart this script",
+ "with the --force option");
+ }
+ warning($opt,
+ "The host '$hostname' could not be looked up with resolveip.",
+ "This probably means that your libc libraries are not 100 % compatible",
+ "with this binary MySQL version. The MySQL daemon, mysqld, should work",
+ "normally with the exception that host name resolving will not work.",
+ "This means that you should use IP addresses instead of hostnames",
+ "when specifying MySQL privileges !");
+ }
+}
+
+# FIXME what does this really mean....
+if ( $opt->{'skip-name-resolve'} and $resolved and $resolved =~ /\s/ )
+{
+ $hostname = (split(' ', $resolved))[5];
+}
+
+# ----------------------------------------------------------------------
+# Create database directories mysql & test
+# ----------------------------------------------------------------------
+
+foreach my $dir ( $opt->{ldata}, "$opt->{ldata}/mysql", "$opt->{ldata}/test" )
+{
+ # FIXME not really the same as original "mkdir -p", but ok?
+ mkdir($dir, 0700) unless -d $dir;
+ chown($opt->{user}, $dir) if -w "/" and !$opt->{user};
+}
+
+push(@args, "--user=$opt->{user}") if $opt->{user};
+
+# ----------------------------------------------------------------------
+# Configure mysqld command line
+# ----------------------------------------------------------------------
+
+# FIXME use --init-file instead of --bootstrap ?!
+
+my $mysqld_bootstrap = $ENV{MYSQLD_BOOTSTRAP} || $mysqld;
+my $mysqld_install_cmd_line = quote_options($mysqld_bootstrap,
+ $opt->{'defaults-file'},
+ $mysqld_opt,
+ "--bootstrap",
+ "--basedir=$opt->{basedir}",
+ "--datadir=$opt->{ldata}",
+ "--skip-innodb",
+ "--skip-bdb",
+ "--skip-ndbcluster",
+ "--max_allowed_packet=8M",
+ "--net_buffer_length=16K",
+ @args,
+ );
+
+# ----------------------------------------------------------------------
+# Create the system and help tables by passing them to "mysqld --bootstrap"
+# ----------------------------------------------------------------------
+
+report_verbose_wait($opt,"Installing MySQL system tables...");
+
+open(SQL, $create_system_tables)
+ or error($opt,"can't open $create_system_tables for reading: $!");
+# FIXME > /dev/null ?
+if ( open(PIPE, "| $mysqld_install_cmd_line") )
+{
+ print PIPE "use mysql;\n";
+ while ( <SQL> )
+ {
+ # When doing a "cross bootstrap" install, no reference to the current
+ # host should be added to the system tables. So we filter out any
+ # lines which contain the current host name.
+ next if $opt->{'cross-bootstrap'} and /\@current_hostname/;
+
+ print PIPE $_;
+ }
+ close PIPE;
+ close SQL;
+
+ report_verbose($opt,"OK");
+
+ # ----------------------------------------------------------------------
+ # Pipe fill_help_tables.sql to "mysqld --bootstrap"
+ # ----------------------------------------------------------------------
+
+ report_verbose_wait($opt,"Filling help tables...");
+ open(SQL, $fill_help_tables)
+ or error($opt,"can't open $fill_help_tables for reading: $!");
+ # FIXME > /dev/null ?
+ if ( open(PIPE, "| $mysqld_install_cmd_line") )
+ {
+ print PIPE "use mysql;\n";
+ while ( <SQL> )
+ {
+ print PIPE $_;
+ }
+ close PIPE;
+ close SQL;
+
+ report_verbose($opt,"OK");
+ }
+ else
+ {
+ warning($opt,"HELP FILES ARE NOT COMPLETELY INSTALLED!",
+ "The \"HELP\" command might not work properly");
+ }
+
+ report_verbose($opt,"To start mysqld at boot time you have to copy",
+ "support-files/mysql.server to the right place " .
+ "for your system");
+
+ if ( !$opt->{'cross-bootstrap'} )
+ {
+ # This is not a true installation on a running system. The end user must
+ # set a password after installing the data files on the real host system.
+ # At this point, there is no end user, so it does not make sense to print
+ # this reminder.
+ report($opt,
+ "PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !",
+ "To do so, start the server, then issue the following commands:",
+ "",
+ " $bindir/mysqladmin -u root password 'new-password'",
+ " $bindir/mysqladmin -u root -h $hostname password 'new-password'",
+ "",
+ "Alternatively you can run:",
+ "",
+ " $bindir/mysql_secure_installation",
+ "",
+ "which will also give you the option of removing the test",
+ "databases and anonymous user created by default. This is",
+ "strongly recommended for production servers.",
+ "",
+ "See the manual for more instructions.");
+
+ if ( !$opt->{rpm} )
+ {
+ report($opt,
+ "You can start the MySQL daemon with:",
+ "",
+ " cd " . '@prefix@' . " ; $bindir/mysqld_safe &",
+ "",
+ "You can test the MySQL daemon with mysql-test-run.pl",
+ "",
+ " cd mysql-test ; perl mysql-test-run.pl");
+ }
+ report($opt,
+ "Please report any problems with the " . '@scriptdir@' . "/mysqlbug script!",
+ "",
+ "The latest information about MySQL is available on the web at",
+ "",
+ " http://www.mysql.com",
+ "",
+ "Support MySQL by buying support/licenses at http://shop.mysql.com");
+ }
+ exit 0
+}
+else
+{
+ error($opt,
+ "Installation of system tables failed!",
+ "",
+ "Examine the logs in $opt->{ldata} for more information.",
+ "You can try to start the mysqld daemon with:",
+ "$mysqld --skip-grant &",
+ "and use the command line tool",
+ "$bindir/mysql to connect to the mysql",
+ "database and look at the grant tables:",
+ "",
+ "shell> $bindir/mysql -u root mysql",
+ "mysql> show tables",
+ "",
+ "Try 'mysqld --help' if you have problems with paths. Using --log",
+ "gives you a log in $opt->{ldata} that may be helpful.",
+ "",
+ "The latest information about MySQL is available on the web at",
+ "http://www.mysql.com",
+ "Please consult the MySQL manual section: 'Problems running mysql_install_db',",
+ "and the manual section that describes problems on your OS.",
+ "Another information source is the MySQL email archive.",
+ "Please check all of the above before mailing us!",
+ "And if you do mail us, you MUST use the " . '@scriptdir@' . "/mysqlbug script!")
+}
+
+##############################################################################
+#
+# Misc
+#
+##############################################################################
+
+sub report_verbose
+{
+ my $opt = shift;
+ my $text = shift;
+
+ report_verbose_wait($opt, $text, @_);
+ print "\n\n";
+}
+
+sub report_verbose_wait
+{
+ my $opt = shift;
+ my $text = shift;
+
+ if ( $opt->{verbose} or (!$opt->{rpm} and !$opt->{'cross-bootstrap'}) )
+ {
+ print "$text";
+ map {print "\n$_"} @_;
+ }
+}
+
+sub report
+{
+ my $opt = shift;
+ my $text = shift;
+
+ print "$text\n";
+ map {print "$_\n"} @_;
+ print "\n";
+}
+
+sub error
+{
+ my $opt = shift;
+ my $text = shift;
+
+ print "FATAL ERROR: $text\n";
+ map {print "$_\n"} @_;
+ exit 1;
+}
+
+sub warning
+{
+ my $opt = shift;
+ my $text = shift;
+
+ print "WARNING: $text\n";
+ map {print "$_\n"} @_;
+ print "\n";
+}
diff --git a/scripts/mysql_install_db.sh b/scripts/mysql_install_db.sh
index 6f147c45f3b..4e5ca7305f8 100644
--- a/scripts/mysql_install_db.sh
+++ b/scripts/mysql_install_db.sh
@@ -19,7 +19,8 @@
# All unrecognized arguments to this script are passed to mysqld.
basedir=""
-ldata=""
+builddir=""
+ldata="@localstatedir@"
srcdir=""
args=""
@@ -30,14 +31,18 @@ user=""
force=0
in_rpm=0
ip_only=0
-windows=0
-source_install=0
+cross_bootstrap=0
usage()
{
cat <<EOF
Usage: $0 [OPTIONS]
--basedir=path The path to the MySQL installation directory.
+ --builddir=path If using --srcdir with out-of-directory builds, you
+ will need to set this to the location of the build
+ directory where built files reside.
+ --cross-bootstrap For internal use. Used when building the MySQL system
+ tables on a different host than the target.
--datadir=path The path to the MySQL data directory.
--force Causes mysql_install_db to run even if DNS does not
work. In that case, grant table entries that normally
@@ -48,17 +53,15 @@ Usage: $0 [OPTIONS]
--skip-name-resolve Use IP addresses rather than hostnames when creating
grant table entries. This option can be useful if
your DNS does not work.
- --srcdir=path For internal use. The directory under which
- mysql_install_db looks for support files such as the
- error message file and the file for popoulating the
- help tables.
+ --srcdir=path The path to the MySQL source directory. This option
+ uses the compiled binaries and support files within the
+ source tree, useful for if you don't want to install
+ MySQL yet and just want to create the system tables.
--user=user_name The login username to use for running mysqld. Files
and directories created by mysqld will be owned by this
user. You must be root to use this option. By default
mysqld runs using your current login name and files and
directories that it creates will be owned by you.
- --windows For internal use. This option is used for creating
- Windows distributions.
All other options are passed to the mysqld program
@@ -68,7 +71,7 @@ EOF
s_echo()
{
- if test "$in_rpm" -eq 0 -a "$windows" -eq 0
+ if test "$in_rpm" -eq 0 -a "$cross_bootstrap" -eq 0
then
echo "$1"
fi
@@ -96,6 +99,7 @@ parse_arguments()
case "$arg" in
--force) force=1 ;;
--basedir=*) basedir=`parse_arg "$arg"` ;;
+ --builddir=*) builddir=`parse_arg "$arg"` ;;
--srcdir=*) srcdir=`parse_arg "$arg"` ;;
--ldata=*|--datadir=*) ldata=`parse_arg "$arg"` ;;
--user=*)
@@ -110,23 +114,17 @@ parse_arguments()
--no-defaults|--defaults-file=*|--defaults-extra-file=*)
defaults="$arg" ;;
- --windows)
- # This is actually a "cross bootstrap" argument used when
- # building the MySQL system tables on a different host
- # than the target. The platform independent
- # files that are created in --datadir on the host can
- # be copied to the target system, the most common use for
- # this feature is in the windows installer which will take
- # the files from datadir and include them as part of the install
- # package.
- windows=1 ;;
-
- --source-install)
- # This is used when you want to run mysqld directly from the
- # source tree (for example when you are developing MySQL and
- # only want to create the default tables but don't want to
- # install mysqld yet.
- source_install=1 ;;
+ --cross-bootstrap|--windows)
+ # Used when building the MySQL system tables on a different host than
+ # the target. The platform-independent files that are created in
+ # --datadir on the host can be copied to the target system.
+ #
+ # The most common use for this feature is in the Windows installer
+ # which will take the files from datadir and include them as part of
+ # the install package. See top-level 'dist-hook' make target.
+ #
+ # --windows is a deprecated alias
+ cross_bootstrap=1 ;;
*)
if test -n "$pick_args"
@@ -155,41 +153,33 @@ find_in_basedir()
file=$1; shift
- base="$basedir"
- if test -z "$base"
- then
- # Assume source installation if basedir is not given
- base="."
- fi
-
for dir in "$@"
do
- if test -f "$base/$dir/$file"
+ if test -f "$basedir/$dir/$file"
then
if test -n "$return_dir"
then
- echo "$base/$dir"
+ echo "$basedir/$dir"
else
- echo "$base/$dir/$file"
+ echo "$basedir/$dir/$file"
fi
break
fi
done
}
-missing_in_basedir()
+cannot_find_file()
{
- if test -z "$basedir"
- then
- echo "FATAL ERROR: Could not find $* inside --basedir"
- echo
- echo "When using --basedir you must point either into a MySQL binary"
- echo "distribution directory or a compiled tree previously populated"
- echo "by 'make install'"
- else
- echo "FATAL ERROR: Can't find $*. Please specify your installation"
- echo "directory with the '--basedir=' option."
- fi
+ echo
+ echo "FATAL ERROR: Could not find $*"
+ echo
+ echo "If you compiled from source, you need to run 'make install' to"
+ echo "copy the software into the correct location ready for operation."
+ echo
+ echo "If you are using a binary release, you must either be at the top"
+ echo "level of the extracted archive, or pass the --basedir option"
+ echo "pointing to that location."
+ echo
}
# Ok, let's go. We first need to parse arguments which are required by
@@ -197,23 +187,37 @@ missing_in_basedir()
# the command line to add any extra bits that we need.
parse_arguments PICK-ARGS-FROM-ARGV "$@"
-# We can now find my_print_defaults, either in the supplied --basedir
-# location or in the installed area.
-
-print_defaults=`find_in_basedir my_print_defaults bin extra`
-if test -z "$print_defaults"
+#
+# We can now find my_print_defaults. This script supports:
+#
+# --srcdir=path pointing to compiled source tree
+# --basedir=path pointing to installed binary location
+#
+# or default to compiled-in locations.
+#
+if test -n "$srcdir" && test -n "$basedir"
then
- print_defaults="@bindir@/my_print_defaults"
- if ! test -x "$print_defaults"
+ echo "ERROR: Specify either --basedir or --srcdir, not both."
+ exit 1
+fi
+if test -n "$srcdir"
+then
+ if test -z "$builddir"
then
- echo "FATAL ERROR: Could not find $print_defaults"
- echo
- echo "If you are using a binary release, you must run this script from"
- echo "within the directory the archive extracted into. If you compiled"
- echo "MySQL yourself you must run 'make install' first or use"
- echo "use --source-install --install-dir=xxx from the top source directory"
- exit 1
+ builddir="$srcdir"
fi
+ print_defaults="$builddir/extra/my_print_defaults"
+elif test -n "$basedir"
+then
+ print_defaults=`find_in_basedir my_print_defaults bin extra`
+else
+ print_defaults="@bindir@/my_print_defaults"
+fi
+
+if test ! -x "$print_defaults"
+then
+ cannot_find_file "$print_defaults"
+ exit 1
fi
# Now we can get arguments from the groups [mysqld] and [mysql_install_db]
@@ -221,63 +225,33 @@ fi
parse_arguments `$print_defaults $defaults mysqld mysql_install_db`
parse_arguments PICK-ARGS-FROM-ARGV "$@"
-# Path to MySQL installation directory
-if test -z "$basedir" -a "$source_install" = 0
+# Configure paths to support files
+if test -n "$srcdir"
+then
+ basedir="$builddir"
+ bindir="$basedir/client"
+ extra_bindir="$basedir/extra"
+ mysqld="$basedir/sql/mysqld"
+ mysqld_opt="--language=$srcdir/sql/share/english"
+ pkgdatadir="$srcdir/scripts"
+ scriptdir="$srcdir/scripts"
+elif test -n "$basedir"
then
+ bindir="$basedir/bin"
+ extra_bindir="$bindir"
+ mysqld=`find_in_basedir mysqld libexec sbin bin`
+ pkgdatadir=`find_in_basedir --dir fill_help_tables.sql share share/mysql`
+ scriptdir="$basedir/scripts"
+else
basedir="@prefix@"
bindir="@bindir@"
extra_bindir="$bindir"
mysqld="@libexecdir@/mysqld"
pkgdatadir="@pkgdatadir@"
-else
- bindir="$basedir/bin"
- extra_bindir="$bindir"
- # We set up bootstrap-specific paths later, so skip this for --windows
- if test "$windows" -eq 0
- then
- mysqld=`find_in_basedir mysqld libexec sbin bin`
- if test -z "$basedir"
- then
- # We come here when source-install is given
- bindir="$basedir/bin"
- extra_bindir="$bindir"
- fi
- if test -x "$mysqld"
- then
- pkgdatadir=`find_in_basedir --dir fill_help_tables.sql share share/mysql scripts`
- if test -z "$pkgdatadir"
- then
- missing_in_basedir fill_help_tables.sql
- exit 1
- fi
- else
- if test -x "./sql/mysqld"
- then
- # Source installation
- mysqld="./sql/mysqld"
- bindir="./client"
- extra_bindir="./extra"
- pkgdatadir="./scripts"
- mysqld_opt="--language=./sql/share/english"
- else
- missing_in_basedir mysqld
- fi
- fi
- fi
-fi
-
-# Path to data directory
-if test -z "$ldata"
-then
- ldata="@localstatedir@"
-fi
-
-# Set up paths to SQL scripts required for bootstrap and ensure they exist.
-if test -n "$srcdir"
-then
- pkgdatadir="$srcdir/scripts"
+ scriptdir="@scriptdir@"
fi
+# Set up paths to SQL scripts required for bootstrap
fill_help_tables="$pkgdatadir/fill_help_tables.sql"
create_system_tables="$pkgdatadir/mysql_system_tables.sql"
fill_system_tables="$pkgdatadir/mysql_system_tables_data.sql"
@@ -286,28 +260,14 @@ for f in $fill_help_tables $create_system_tables $fill_system_tables
do
if test ! -f "$f"
then
- echo "FATAL ERROR: Could not find SQL file '$f'"
+ cannot_find_file "$f"
exit 1
fi
done
-# Set up Windows-specific paths
-if test "$windows" -eq 1
-then
- mysqld="./sql/mysqld"
- if test -n "$srcdir" -a -f "$srcdir/sql/share/english/errmsg.sys"
- then
- mysqld_opt="--language=$srcdir/sql/share/english"
- else
- mysqld_opt="--language=./sql/share/english"
- fi
-fi
-
-# Make sure mysqld is available in default location (--basedir option is
-# already tested above).
if test ! -x "$mysqld"
then
- echo "FATAL ERROR: 'mysqld' executable not found!"
+ cannot_find_file "$mysqld"
exit 1
fi
@@ -315,13 +275,13 @@ fi
hostname=`@HOSTNAME@`
# Check if hostname is valid
-if test "$windows" -eq 0 -a "$in_rpm" -eq 0 -a "$force" -eq 0
+if test "$cross_bootstrap" -eq 0 -a "$in_rpm" -eq 0 -a "$force" -eq 0
then
resolved=`$extra_bindir/resolveip $hostname 2>&1`
- if [ $? -ne 0 ]
+ if test $? -ne 0
then
resolved=`$extra_bindir/resolveip localhost 2>&1`
- if [ $? -ne 0 ]
+ if test $? -ne 0
then
echo "Neither host '$hostname' nor 'localhost' could be looked up with"
echo "$extra_bindir/resolveip"
@@ -345,7 +305,7 @@ then
hostname=`echo "$resolved" | awk '/ /{print $6}'`
fi
-# Create database directories mysql & test
+# Create database directories
for dir in $ldata $ldata/mysql $ldata/test
do
if test ! -d $dir
@@ -364,98 +324,109 @@ then
args="$args --user=$user"
fi
-# Peform the install of system tables
+# When doing a "cross bootstrap" install, no reference to the current
+# host should be added to the system tables. So we filter out any
+# lines which contain the current host name.
+if test $cross_bootstrap -eq 1
+then
+ filter_cmd_line="sed -e '/@current_hostname/d'"
+else
+ filter_cmd_line="cat"
+fi
+
+# Configure mysqld command line
mysqld_bootstrap="${MYSQLD_BOOTSTRAP-$mysqld}"
mysqld_install_cmd_line="$mysqld_bootstrap $defaults $mysqld_opt --bootstrap \
--basedir=$basedir --datadir=$ldata --log-warnings=0 --loose-skip-innodb \
--loose-skip-ndbcluster $args --max_allowed_packet=8M \
--net_buffer_length=16K"
-# Pipe mysql_system_tables.sql to "mysqld --bootstrap"
+# Create the system and help tables by passing them to "mysqld --bootstrap"
s_echo "Installing MySQL system tables..."
-if `(echo "use mysql;"; cat $create_system_tables $fill_system_tables) | $mysqld_install_cmd_line`
+if { echo "use mysql;"; cat $create_system_tables $fill_system_tables; } | eval "$filter_cmd_line" | $mysqld_install_cmd_line > /dev/null
then
s_echo "OK"
+else
+ echo
+ echo "Installation of system tables failed! Examine the logs in"
+ echo "$ldata for more information."
+ echo
+ echo "You can try to start the mysqld daemon with:"
+ echo
+ echo " shell> $mysqld --skip-grant &"
+ echo
+ echo "and use the command line tool $bindir/mysql"
+ echo "to connect to the mysql database and look at the grant tables:"
+ echo
+ echo " shell> $bindir/mysql -u root mysql"
+ echo " mysql> show tables"
+ echo
+ echo "Try 'mysqld --help' if you have problems with paths. Using --log"
+ echo "gives you a log in $ldata that may be helpful."
+ echo
+ echo "The latest information about MySQL is available on the web at"
+ echo "http://www.mysql.com/. Please consult the MySQL manual section"
+ echo "'Problems running mysql_install_db', and the manual section that"
+ echo "describes problems on your OS. Another information source are the"
+ echo "MySQL email archives available at http://lists.mysql.com/."
+ echo
+ echo "Please check all of the above before mailing us! And remember, if"
+ echo "you do mail us, you MUST use the $scriptdir/mysqlbug script!"
+ echo
+ exit 1
+fi
- s_echo "Filling help tables..."
- # Pipe fill_help_tables.sql to "mysqld --bootstrap"
- if `(echo "use mysql;"; cat $fill_help_tables) | $mysqld_install_cmd_line`
- then
- # Fill suceeded
- s_echo "OK"
- else
- echo
- echo "WARNING: HELP FILES ARE NOT COMPLETELY INSTALLED!"
- echo "The \"HELP\" command might not work properly"
- echo
- fi
+s_echo "Filling help tables..."
+if { echo "use mysql;"; cat $fill_help_tables; } | $mysqld_install_cmd_line > /dev/null
+then
+ s_echo "OK"
+else
+ echo
+ echo "WARNING: HELP FILES ARE NOT COMPLETELY INSTALLED!"
+ echo "The \"HELP\" command might not work properly."
+fi
+# Don't output verbose information if running inside bootstrap or using
+# --srcdir for testing. In such cases, there's no end user looking at
+# the screen.
+if test "$cross_bootstrap" -eq 0 && test -z "$srcdir"
+then
s_echo
s_echo "To start mysqld at boot time you have to copy"
s_echo "support-files/mysql.server to the right place for your system"
- s_echo
- if test "$windows" -eq 0
+ echo
+ echo "PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !"
+ echo "To do so, start the server, then issue the following commands:"
+ echo
+ echo "$bindir/mysqladmin -u root password 'new-password'"
+ echo "$bindir/mysqladmin -u root -h $hostname password 'new-password'"
+ echo
+ echo "Alternatively you can run:"
+ echo "$bindir/mysql_secure_installation"
+ echo
+ echo "which will also give you the option of removing the test"
+ echo "databases and anonymous user created by default. This is"
+ echo "strongly recommended for production servers."
+ echo
+ echo "See the manual for more instructions."
+
+ if test "$in_rpm" -eq 0
then
- # A root password should of course also be set on Windows!
- # The reason for not displaying these prompts here is that when
- # executing this script with the --windows argument the script
- # is used to generate system tables mainly used by the
- # windows installer. And thus the password should not be set until
- # those files has been copied to the target system
- echo "PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !"
- echo "To do so, start the server, then issue the following commands:"
- echo "$bindir/mysqladmin -u root password 'new-password'"
- echo "$bindir/mysqladmin -u root -h $hostname password 'new-password'"
echo
- echo "Alternatively you can run:"
- echo "$bindir/mysql_secure_installation"
+ echo "You can start the MySQL daemon with:"
+ echo "cd $basedir ; $bindir/mysqld_safe &"
echo
- echo "which will also give you the option of removing the test"
- echo "databases and anonymous user created by default. This is"
- echo "strongly recommended for production servers."
- echo
- echo "See the manual for more instructions."
- echo
-
- if test "$in_rpm" -eq 0 -a "$source_install" -eq 0
- then
- echo "You can start the MySQL daemon with:"
- echo "cd @prefix@ ; $bindir/mysqld_safe &"
- echo
- echo "You can test the MySQL daemon with mysql-test-run.pl"
- echo "cd mysql-test ; perl mysql-test-run.pl"
- echo
- fi
- echo "Please report any problems with the @scriptdir@/mysqlbug script!"
- echo
- echo "The latest information about MySQL is available on the web at"
- echo "http://www.mysql.com"
- echo "Support MySQL by buying support/licenses at http://shop.mysql.com"
+ echo "You can test the MySQL daemon with mysql-test-run.pl"
+ echo "cd $basedir/mysql-test ; perl mysql-test-run.pl"
fi
- exit 0
-else
- echo "Installation of system tables failed!"
- echo
- echo "Examine the logs in $ldata for more information."
- echo "You can try to start the mysqld daemon with:"
- echo "$mysqld --skip-grant &"
- echo "and use the command line tool"
- echo "$bindir/mysql to connect to the mysql"
- echo "database and look at the grant tables:"
+
echo
- echo "shell> $bindir/mysql -u root mysql"
- echo "mysql> show tables"
+ echo "Please report any problems with the $scriptdir/mysqlbug script!"
echo
- echo "Try 'mysqld --help' if you have problems with paths. Using --log"
- echo "gives you a log in $ldata that may be helpful."
+ echo "The latest information about MySQL is available at http://www.mysql.com/"
+ echo "Support MySQL by buying support/licenses from http://shop.mysql.com/"
echo
- echo "The latest information about MySQL is available on the web at"
- echo "http://www.mysql.com"
- echo "Please consult the MySQL manual section: 'Problems running mysql_install_db',"
- echo "and the manual section that describes problems on your OS."
- echo "Another information source is the MySQL email archive."
- echo "Please check all of the above before mailing us!"
- echo "And if you do mail us, you MUST use the @scriptdir@/mysqlbug script!"
- exit 1
fi
+
+exit 0
diff --git a/scripts/mysql_secure_installation.pl.in b/scripts/mysql_secure_installation.pl.in
new file mode 100755
index 00000000000..4eeb50e6d2f
--- /dev/null
+++ b/scripts/mysql_secure_installation.pl.in
@@ -0,0 +1,352 @@
+#!/usr/bin/perl
+# -*- cperl -*-
+#
+# Copyright (C) 2002 MySQL AB and Jeremy Cole
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+use Fcntl;
+use strict;
+
+my $config = ".my.cnf.$$";
+my $command = ".mysql.$$";
+my $hadpass = 0;
+
+# FIXME
+# trap "interrupt" 2
+
+my $rootpass = "";
+
+sub echo_on {
+ if ($^O eq 'MSWin32') {
+ ReadMode('normal');
+ } else {
+ system("stty echo");
+ }
+}
+
+sub echo_off {
+ if ($^O eq 'MSWin32') {
+ ReadMode('noecho');
+ } else {
+ system("stty -echo");
+ }
+}
+
+sub write_file {
+ my $file = shift;
+ -f $file or die "ERROR: file is missing \"$file\": $!";
+ open(FILE, ">$file") or die "ERROR: can't write to file \"$file\": $!";
+ foreach my $line ( @_ ) {
+ print FILE $line, "\n"; # Add EOL char
+ }
+ close FILE;
+}
+
+sub prepare {
+ foreach my $file ( $config, $command ) {
+ next if -f $file; # Already exists
+ local *FILE;
+ sysopen(FILE, $file, O_CREAT, 0600)
+ or die "ERROR: can't create $file: $!";
+ close FILE;
+ }
+}
+
+sub do_query {
+ my $query = shift;
+ write_file($command, $query);
+ system("mysql --defaults-file=$config < $command");
+ return $?;
+}
+
+sub make_config {
+ my $password = shift;
+
+ write_file($config,
+ "# mysql_secure_installation config file",
+ "[mysql]",
+ "user=root",
+ "password=$rootpass");
+}
+
+sub get_root_password {
+ my $status = 1;
+ while ( $status == 1 ) {
+ echo_off();
+ print "Enter current password for root (enter for none): ";
+ my $password = <STDIN>;
+ echo_on();
+ if ( $password ) {
+ $hadpass = 1;
+ } else {
+ $hadpass = 0;
+ }
+ $rootpass = $password;
+ make_config($rootpass);
+ do_query("");
+ $status = $?;
+ }
+ print "OK, successfully used password, moving on...\n\n";
+}
+
+sub set_root_password {
+ echo_off();
+ print "New password: ";
+ my $password1 = <STDIN>;
+ print "\nRe-enter new password: ";
+ my $password2 = <STDIN>;
+ print "\n";
+ echo_on();
+
+ if ( $password1 eq $password2 ) {
+ print "Sorry, passwords do not match.\n\n";
+ return 1;
+ }
+
+ if ( !$password1 ) {
+ print "Sorry, you can't use an empty password here.\n\n";
+ return 1;
+ }
+
+ do_query("UPDATE mysql.user SET Password=PASSWORD('$password1') WHERE User='root';");
+ if ( $? == 0 ) {
+ print "Password updated successfully!\n";
+ print "Reloading privilege tables..\n";
+ if ( !reload_privilege_tables() ) {
+ exit 1;
+ }
+ print "\n";
+ $rootpass = $password1;
+ make_config($rootpass);
+ } else {
+ print "Password update failed!\n";
+ exit 1;
+ }
+
+ return 0;
+}
+
+sub remove_anonymous_users {
+ do_query("DELETE FROM mysql.user WHERE User='';");
+ if ( $? == 0 ) {
+ print " ... Success!\n";
+ } else {
+ print " ... Failed!\n";
+ exit 1;
+ }
+
+ return 0;
+}
+
+sub remove_remote_root {
+ do_query("DELETE FROM mysql.user WHERE User='root' AND Host!='localhost';");
+ if ( $? == 0 ) {
+ print " ... Success!\n";
+ } else {
+ print " ... Failed!\n";
+ }
+}
+
+sub remove_test_database {
+ print " - Dropping test database...\n";
+ do_query("DROP DATABASE test;");
+ if ( $? == 0 ) {
+ print " ... Success!\n";
+ } else {
+ print " ... Failed! Not critical, keep moving...\n";
+ }
+
+ print " - Removing privileges on test database...\n";
+ do_query("DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%'");
+ if ( $? == 0 ) {
+ print " ... Success!\n";
+ } else {
+ print " ... Failed! Not critical, keep moving...\n";
+ }
+
+ return 0;
+}
+
+sub reload_privilege_tables {
+ do_query("FLUSH PRIVILEGES;");
+ if ( $? == 0 ) {
+ print " ... Success!\n";
+ return 0;
+ } else {
+ print " ... Failed!\n";
+ return 1;
+ }
+}
+
+sub interrupt {
+ print "\nAborting!\n\n";
+ cleanup();
+ echo_on();
+ exit 1;
+}
+
+sub cleanup {
+ print "Cleaning up...\n";
+ unlink($config,$command);
+}
+
+
+# The actual script starts here
+
+prepare();
+
+print <<HERE;
+
+
+
+NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
+ SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
+
+In order to log into MySQL to secure it, we'll need the current
+password for the root user. If you've just installed MySQL, and
+you haven't set the root password yet, the password will be blank,
+so you should just press enter here.
+
+HERE
+
+get_root_password();
+
+
+#
+# Set the root password
+#
+
+print "Setting the root password ensures that nobody can log into the MySQL\n";
+print "root user without the proper authorisation.\n\n";
+
+if ( $hadpass == 0 ) {
+ print "Set root password? [Y/n] ";
+} else {
+ print "You already have a root password set, so you can safely answer 'n'.\n\n";
+ print "Change the root password? [Y/n] ";
+}
+
+my $reply = <STDIN>;
+if ( $reply =~ /n/i ) {
+ print " ... skipping.\n";
+} else {
+ my $status = 1;
+ while ( $status == 1 ) {
+ set_root_password();
+ $status = $?;
+ }
+}
+print "\n";
+
+
+#
+# Remove anonymous users
+#
+
+print <<HERE;
+By default, a MySQL installation has an anonymous user, allowing anyone
+to log into MySQL without having to have a user account created for
+them. This is intended only for testing, and to make the installation
+go a bit smoother. You should remove them before moving into a
+production environment.
+
+HERE
+
+print "Remove anonymous users? [Y/n] ";
+$reply = <STDIN>;
+if ( $reply =~ /n/i ) {
+ print " ... skipping.\n";
+} else {
+ remove_anonymous_users();
+}
+print "\n";
+
+
+#
+# Disallow remote root login
+#
+
+print <<HERE;
+Normally, root should only be allowed to connect from 'localhost'. This
+ensures that someone cannot guess at the root password from the network.
+
+HERE
+
+print "Disallow root login remotely? [Y/n] ";
+$reply = <STDIN>;
+if ( $reply =~ /n/i ) {
+ print " ... skipping.\n";
+} else {
+ remove_remote_root();
+}
+print "\n";
+
+
+#
+# Remove test database
+#
+
+print <<HERE;
+By default, MySQL comes with a database named 'test' that anyone can
+access. This is also intended only for testing, and should be removed
+before moving into a production environment.
+
+HERE
+
+print "Remove test database and access to it? [Y/n] ";
+$reply = <STDIN>;
+if ( $reply =~ /n/i ) {
+ print " ... skipping.\n";
+} else {
+ remove_test_database();
+}
+print "\n";
+
+
+#
+# Reload privilege tables
+#
+
+print <<HERE;
+Reloading the privilege tables will ensure that all changes made so far
+will take effect immediately.
+
+HERE
+
+print "Reload privilege tables now? [Y/n] ";
+$reply = <STDIN>;
+if ( $reply =~ /n/i ) {
+ print " ... skipping.\n";
+} else {
+ reload_privilege_tables();
+}
+print "\n";
+
+cleanup();
+
+print <<HERE;
+
+
+
+All done! If you've completed all of the above steps, your MySQL
+installation should now be secure.
+
+Thanks for using MySQL!
+
+
+HERE
+
+
+
diff --git a/scripts/mysql_system_tables_data.sql b/scripts/mysql_system_tables_data.sql
index 89558f99603..6db9430b972 100644
--- a/scripts/mysql_system_tables_data.sql
+++ b/scripts/mysql_system_tables_data.sql
@@ -2,6 +2,12 @@
-- The inital data for system tables of MySQL Server
--
+-- When setting up a "cross bootstrap" database (e.g., creating data on a Unix
+-- host which will later be included in a Windows zip file), any lines
+-- containing "@current_hostname" are filtered out by mysql_install_db.
+set @current_hostname= @@hostname;
+
+
-- Fill "db" table with default grants for anyone to
-- access database 'test' and 'test_%' if "db" table didn't exist
CREATE TEMPORARY TABLE tmp_db LIKE db;
@@ -14,11 +20,11 @@ DROP TABLE tmp_db;
-- Fill "users" table with default users allowing root access
-- from local machine if "users" table didn't exist before
CREATE TEMPORARY TABLE tmp_user LIKE user;
-set @hostname= @@hostname;
+set @current_hostname= @@hostname;
INSERT INTO tmp_user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
-REPLACE INTO tmp_user VALUES (@hostname,'root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
+REPLACE INTO tmp_user VALUES (@current_hostname,'root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
REPLACE INTO tmp_user VALUES ('127.0.0.1','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
INSERT INTO tmp_user (host,user) VALUES ('localhost','');
-INSERT INTO tmp_user (host,user) VALUES (@@hostname,'');
+INSERT INTO tmp_user (host,user) VALUES (@current_hostname,'');
INSERT INTO user SELECT * FROM tmp_user WHERE @had_user_table=0;
DROP TABLE tmp_user;
diff --git a/scripts/mysqlbug.sh b/scripts/mysqlbug.sh
index 69ea82e8794..64804b5de19 100644
--- a/scripts/mysqlbug.sh
+++ b/scripts/mysqlbug.sh
@@ -23,7 +23,8 @@ VERSION="@VERSION@@MYSQL_SERVER_SUFFIX@"
COMPILATION_COMMENT="@COMPILATION_COMMENT@"
BUGmysql="mysql@lists.mysql.com"
# This is set by configure
-COMP_ENV_INFO="CC='@CC@' CFLAGS='@CFLAGS@' CXX='@CXX@' CXXFLAGS='@CXXFLAGS@' LDFLAGS='@LDFLAGS@' ASFLAGS='@ASFLAGS@'"
+COMP_CALL_INFO="CC='@SAVE_CC@' CFLAGS='@SAVE_CFLAGS@' CXX='@SAVE_CXX@' CXXFLAGS='@SAVE_CXXFLAGS@' LDFLAGS='@SAVE_LDFLAGS@' ASFLAGS='@SAVE_ASFLAGS@'"
+COMP_RUN_INFO="CC='@CC@' CFLAGS='@CFLAGS@' CXX='@CXX@' CXXFLAGS='@CXXFLAGS@' LDFLAGS='@LDFLAGS@' ASFLAGS='@ASFLAGS@'"
CONFIGURE_LINE="@CONF_COMMAND@"
LIBC_INFO=""
@@ -261,7 +262,8 @@ ${ORGANIZATION- $ORGANIZATION_C}
`test -n "$MACHINE" && echo "Machine: $MACHINE"`
`test -n "$FILE_PATHS" && echo "Some paths: $FILE_PATHS"`
`test -n "$GCC_INFO" && echo "GCC: $GCC_INFO"`
-`test -n "$COMP_ENV_INFO" && echo "Compilation info: $COMP_ENV_INFO"`
+`test -n "$COMP_CALL_INFO" && echo "Compilation info (call): $COMP_CALL_INFO"`
+`test -n "$COMP_RUN_INFO" && echo "Compilation info (used): $COMP_RUN_INFO"`
`test -n "$LIBC_INFO" && echo "LIBC: $LIBC_INFO"`
`test -n "$CONFIGURE_LINE" && echo "Configure command: $CONFIGURE_LINE"`
`test -n "$PERL_INFO" && echo "Perl: $PERL_INFO"`
diff --git a/scripts/mysqld_multi.sh b/scripts/mysqld_multi.sh
index 92cfbe3ef22..3cb4665eb1c 100644
--- a/scripts/mysqld_multi.sh
+++ b/scripts/mysqld_multi.sh
@@ -1,4 +1,4 @@
-#!@PERL@
+#!/usr/bin/perl
use Getopt::Long;
use POSIX qw(strftime);
diff --git a/scripts/mysqld_safe.sh b/scripts/mysqld_safe.sh
index 99dcafbbf71..5e7a177a546 100644
--- a/scripts/mysqld_safe.sh
+++ b/scripts/mysqld_safe.sh
@@ -200,16 +200,24 @@ parse_arguments() {
#
# First, try to find BASEDIR and ledir (where mysqld is)
-#
+#
+
+if echo '@pkgdatadir@' | grep '^@prefix@' > /dev/null
+then
+ relpkgdata=`echo '@pkgdatadir@' | sed -e 's,^@prefix@,,' -e 's,^/,,' -e 's,^,./,'`
+else
+ # pkgdatadir is not relative to prefix
+ relpkgdata='@pkgdatadir@'
+fi
MY_PWD=`pwd`
# Check for the directories we would expect from a binary release install
-if test -f ./share/mysql/english/errmsg.sys -a -x ./bin/mysqld
+if test -f "$relpkgdata"/english/errmsg.sys -a -x ./bin/mysqld
then
MY_BASEDIR_VERSION=$MY_PWD # Where bin, share and data are
ledir=$MY_BASEDIR_VERSION/bin # Where mysqld is
# Check for the directories we would expect from a source install
-elif test -f ./share/mysql/english/errmsg.sys -a -x ./libexec/mysqld
+elif test -f "$relpkgdata"/english/errmsg.sys -a -x ./libexec/mysqld
then
MY_BASEDIR_VERSION=$MY_PWD # Where libexec, share and var are
ledir=$MY_BASEDIR_VERSION/libexec # Where mysqld is
@@ -219,6 +227,7 @@ else
ledir=@libexecdir@
fi
+
#
# Second, try to find the data directory
#
diff --git a/scripts/mysqldumpslow.sh b/scripts/mysqldumpslow.sh
index ff82a35ec3f..f05761bb837 100644
--- a/scripts/mysqldumpslow.sh
+++ b/scripts/mysqldumpslow.sh
@@ -1,4 +1,4 @@
-#!@PERL@
+#!/usr/bin/perl
# mysqldumpslow - parse and summarize the MySQL slow query log
# Original version by Tim Bunce, sometime in 2000.
diff --git a/scripts/mysqlhotcopy.sh b/scripts/mysqlhotcopy.sh
index 6ad5c77b954..bad0761cd80 100644
--- a/scripts/mysqlhotcopy.sh
+++ b/scripts/mysqlhotcopy.sh
@@ -1,4 +1,4 @@
-#!@PERL@ -w
+#!/usr/bin/perl
use strict;
use Getopt::Long;
diff --git a/server-tools/instance-manager/mysql_connection.cc b/server-tools/instance-manager/mysql_connection.cc
index bf08f963aa3..3233b7513a1 100644
--- a/server-tools/instance-manager/mysql_connection.cc
+++ b/server-tools/instance-manager/mysql_connection.cc
@@ -257,7 +257,7 @@ int Mysql_connection::do_command()
return 1;
if (thread_registry->is_shutdown())
return 1;
- net_send_error(&net, net.last_errno);
+ net_send_error(&net, net.client_last_errno);
net.error= 0;
return 0;
}
diff --git a/server-tools/instance-manager/mysqlmanager.cc b/server-tools/instance-manager/mysqlmanager.cc
index 6d6ebbee57d..276d1ca3b49 100644
--- a/server-tools/instance-manager/mysqlmanager.cc
+++ b/server-tools/instance-manager/mysqlmanager.cc
@@ -79,6 +79,9 @@ int main(int argc, char *argv[])
{
int return_value;
+ puts("\n"
+ "WARNING: This program is deprecated and will be removed in 6.0.\n");
+
/* Initialize. */
MY_INIT(argv[0]);
diff --git a/sql-common/client.c b/sql-common/client.c
index baf154dcc43..a26207038cf 100644
--- a/sql-common/client.c
+++ b/sql-common/client.c
@@ -272,6 +272,76 @@ static int wait_for_data(my_socket fd, uint timeout)
}
#endif /* defined(__WIN__) || defined(__NETWARE__) */
+/**
+ Set the internal error message to mysql handler
+
+ @param mysql connection handle (client side)
+ @param errcode CR_ error code, passed to ER macro to get
+ error text
+ @parma sqlstate SQL standard sqlstate
+*/
+
+void set_mysql_error(MYSQL *mysql, int errcode, const char *sqlstate)
+{
+ NET *net;
+ DBUG_ENTER("set_mysql_error");
+ DBUG_PRINT("enter", ("error :%d '%s'", errcode, ER(errcode)));
+ DBUG_ASSERT(mysql != 0);
+
+ net= &mysql->net;
+ net->client_last_errno= errcode;
+ strmov(net->client_last_error, ER(errcode));
+ strmov(net->sqlstate, sqlstate);
+
+ DBUG_VOID_RETURN;
+}
+
+/**
+ Clear possible error state of struct NET
+
+ @param net clear the state of the argument
+*/
+
+void net_clear_error(NET *net)
+{
+ net->client_last_errno= 0;
+ net->client_last_error[0]= '\0';
+ strmov(net->sqlstate, not_error_sqlstate);
+}
+
+/**
+ Set an error message on the client.
+
+ @param mysql connection handle
+ @param errcode CR_* errcode, for client errors
+ @param sqlstate SQL standard sql state, unknown_sqlstate for the
+ majority of client errors.
+ @param format error message template, in sprintf format
+ @param ... variable number of arguments
+*/
+
+static void set_mysql_extended_error(MYSQL *mysql, int errcode,
+ const char *sqlstate,
+ const char *format, ...)
+{
+ NET *net;
+ va_list args;
+ DBUG_ENTER("set_mysql_extended_error");
+ DBUG_PRINT("enter", ("error :%d '%s'", errcode, format));
+ DBUG_ASSERT(mysql != 0);
+
+ net= &mysql->net;
+ net->client_last_errno= errcode;
+ va_start(args, format);
+ my_vsnprintf(net->client_last_error, sizeof(net->client_last_error)-1,
+ format, args);
+ va_end(args);
+ strmov(net->sqlstate, sqlstate);
+
+ DBUG_VOID_RETURN;
+}
+
+
/*
Create a named pipe connection
@@ -279,7 +349,7 @@ static int wait_for_data(my_socket fd, uint timeout)
#ifdef __WIN__
-HANDLE create_named_pipe(NET *net, uint connect_timeout, char **arg_host,
+HANDLE create_named_pipe(MYSQL *mysql, uint connect_timeout, char **arg_host,
char **arg_unix_socket)
{
HANDLE hPipe=INVALID_HANDLE_VALUE;
@@ -312,42 +382,34 @@ HANDLE create_named_pipe(NET *net, uint connect_timeout, char **arg_host,
break;
if (GetLastError() != ERROR_PIPE_BUSY)
{
- net->last_errno=CR_NAMEDPIPEOPEN_ERROR;
- strmov(net->sqlstate, unknown_sqlstate);
- my_snprintf(net->last_error, sizeof(net->last_error)-1,
- ER(net->last_errno), host, unix_socket,
- (ulong) GetLastError());
+ set_mysql_extended_error(mysql, CR_NAMEDPIPEOPEN_ERROR,
+ unknown_sqlstate, ER(CR_NAMEDPIPEOPEN_ERROR),
+ host, unix_socket, (ulong) GetLastError());
return INVALID_HANDLE_VALUE;
}
/* wait for for an other instance */
if (! WaitNamedPipe(pipe_name, connect_timeout*1000) )
{
- net->last_errno=CR_NAMEDPIPEWAIT_ERROR;
- strmov(net->sqlstate, unknown_sqlstate);
- my_snprintf(net->last_error, sizeof(net->last_error)-1,
- ER(net->last_errno), host, unix_socket,
- (ulong) GetLastError());
+ set_mysql_extended_error(mysql, CR_NAMEDPIPEWAIT_ERROR, unknown_sqlstate,
+ ER(CR_NAMEDPIPEWAIT_ERROR),
+ host, unix_socket, (ulong) GetLastError());
return INVALID_HANDLE_VALUE;
}
}
if (hPipe == INVALID_HANDLE_VALUE)
{
- net->last_errno=CR_NAMEDPIPEOPEN_ERROR;
- strmov(net->sqlstate, unknown_sqlstate);
- my_snprintf(net->last_error, sizeof(net->last_error)-1,
- ER(net->last_errno), host, unix_socket,
- (ulong) GetLastError());
+ set_mysql_extended_error(mysql, CR_NAMEDPIPEOPEN_ERROR, unknown_sqlstate,
+ ER(CR_NAMEDPIPEOPEN_ERROR), host, unix_socket,
+ (ulong) GetLastError());
return INVALID_HANDLE_VALUE;
}
dwMode = PIPE_READMODE_BYTE | PIPE_WAIT;
if ( !SetNamedPipeHandleState(hPipe, &dwMode, NULL, NULL) )
{
CloseHandle( hPipe );
- net->last_errno=CR_NAMEDPIPESETSTATE_ERROR;
- strmov(net->sqlstate, unknown_sqlstate);
- my_snprintf(net->last_error, sizeof(net->last_error)-1,
- ER(net->last_errno),host, unix_socket,
- (ulong) GetLastError());
+ set_mysql_extended_error(mysql, CR_NAMEDPIPESETSTATE_ERROR,
+ unknown_sqlstate, ER(CR_NAMEDPIPESETSTATE_ERROR),
+ host, unix_socket, (ulong) GetLastError());
return INVALID_HANDLE_VALUE;
}
*arg_host=host ; *arg_unix_socket=unix_socket; /* connect arg */
@@ -566,14 +628,12 @@ err:
CloseHandle(handle_connect_file_map);
if (error_allow)
{
- net->last_errno=error_allow;
- strmov(net->sqlstate, unknown_sqlstate);
if (error_allow == CR_SHARED_MEMORY_EVENT_ERROR)
- my_snprintf(net->last_error,sizeof(net->last_error)-1,
- ER(net->last_errno),suffix_pos,error_code);
+ set_mysql_extended_error(mysql, error_allow, unknown_sqlstate,
+ ER(error_allow), suffix_pos, error_code);
else
- my_snprintf(net->last_error,sizeof(net->last_error)-1,
- ER(net->last_errno),error_code);
+ set_mysql_extended_error(mysql, error_allow, unknown_sqlstate,
+ ER(error_allow), error_code);
return(INVALID_HANDLE_VALUE);
}
return(handle_map);
@@ -607,7 +667,7 @@ cli_safe_read(MYSQL *mysql)
return (packet_error);
#endif /*MYSQL_SERVER*/
end_server(mysql);
- set_mysql_error(mysql, net->last_errno == ER_NET_PACKET_TOO_LARGE ?
+ set_mysql_error(mysql, net->client_last_errno == ER_NET_PACKET_TOO_LARGE ?
CR_NET_PACKET_TOO_LARGE: CR_SERVER_LOST, unknown_sqlstate);
return (packet_error);
}
@@ -616,7 +676,7 @@ cli_safe_read(MYSQL *mysql)
if (len > 3)
{
char *pos=(char*) net->read_pos+1;
- net->last_errno=uint2korr(pos);
+ net->client_last_errno=uint2korr(pos);
pos+=2;
len-=2;
if (protocol_41(mysql) && pos[0] == '#')
@@ -624,8 +684,8 @@ cli_safe_read(MYSQL *mysql)
strmake(net->sqlstate, pos+1, SQLSTATE_LENGTH);
pos+= SQLSTATE_LENGTH+1;
}
- (void) strmake(net->last_error,(char*) pos,
- min((uint) len,(uint) sizeof(net->last_error)-1));
+ (void) strmake(net->client_last_error,(char*) pos,
+ min((uint) len,(uint) sizeof(net->client_last_error)-1));
}
else
set_mysql_error(mysql, CR_UNKNOWN_ERROR, unknown_sqlstate);
@@ -641,7 +701,9 @@ cli_safe_read(MYSQL *mysql)
mysql->server_status&= ~SERVER_MORE_RESULTS_EXISTS;
DBUG_PRINT("error",("Got error: %d/%s (%s)",
- net->last_errno, net->sqlstate, net->last_error));
+ net->client_last_errno,
+ net->sqlstate,
+ net->client_last_error));
return(packet_error);
}
return len;
@@ -683,10 +745,7 @@ cli_advanced_command(MYSQL *mysql, enum enum_server_command command,
DBUG_RETURN(1);
}
- net->last_error[0]=0;
- net->last_errno= 0;
- strmov(net->sqlstate, not_error_sqlstate);
- mysql->net.report_error=0;
+ net_clear_error(net);
mysql->info=0;
mysql->affected_rows= ~(my_ulonglong) 0;
/*
@@ -701,10 +760,9 @@ cli_advanced_command(MYSQL *mysql, enum enum_server_command command,
{
DBUG_PRINT("error",("Can't send command to server. Error: %d",
socket_errno));
- if (net->last_errno == ER_NET_PACKET_TOO_LARGE)
+ if (net->client_last_errno == ER_NET_PACKET_TOO_LARGE)
{
- net->last_errno=CR_NET_PACKET_TOO_LARGE;
- strmov(net->last_error,ER(net->last_errno));
+ set_mysql_error(mysql, CR_NET_PACKET_TOO_LARGE, unknown_sqlstate);
goto end;
}
end_server(mysql);
@@ -713,8 +771,7 @@ cli_advanced_command(MYSQL *mysql, enum enum_server_command command,
if (net_write_command(net,(uchar) command, header, header_length,
arg, arg_length))
{
- net->last_errno=CR_SERVER_GONE_ERROR;
- strmov(net->last_error,ER(net->last_errno));
+ set_mysql_error(mysql, CR_SERVER_GONE_ERROR, unknown_sqlstate);
goto end;
}
}
@@ -742,48 +799,6 @@ void free_old_query(MYSQL *mysql)
}
/*
- Set the internal error message to mysql handler
-*/
-
-void set_mysql_error(MYSQL *mysql, int errcode, const char *sqlstate)
-{
- NET *net;
- DBUG_ENTER("set_mysql_error");
- DBUG_PRINT("enter", ("error :%d '%s'", errcode, ER(errcode)));
- DBUG_ASSERT(mysql != 0);
-
- net= &mysql->net;
- net->last_errno= errcode;
- strmov(net->last_error, ER(errcode));
- strmov(net->sqlstate, sqlstate);
-
- DBUG_VOID_RETURN;
-}
-
-
-static void set_mysql_extended_error(MYSQL *mysql, int errcode,
- const char *sqlstate,
- const char *format, ...)
-{
- NET *net;
- va_list args;
- DBUG_ENTER("set_mysql_extended_error");
- DBUG_PRINT("enter", ("error :%d '%s'", errcode, format));
- DBUG_ASSERT(mysql != 0);
-
- net= &mysql->net;
- net->last_errno= errcode;
- va_start(args, format);
- my_vsnprintf(net->last_error, sizeof(net->last_error)-1,
- format, args);
- va_end(args);
- strmov(net->sqlstate, sqlstate);
-
- DBUG_VOID_RETURN;
-}
-
-
-/*
Flush result set sent from server
*/
@@ -822,16 +837,15 @@ static my_bool is_NT(void)
#ifdef CHECK_LICENSE
-/*
+/**
Check server side variable 'license'.
- If the variable does not exist or does not contain 'Commercial',
+
+ If the variable does not exist or does not contain 'Commercial',
we're talking to non-commercial server from commercial client.
- SYNOPSIS
- check_license()
- RETURN VALUE
- 0 success
- !0 network error or the server is not commercial.
- Error code is saved in mysql->net.last_errno.
+
+ @retval 0 success
+ @retval !0 network error or the server is not commercial.
+ Error code is saved in mysql->net.client_last_errno.
*/
static int check_license(MYSQL *mysql)
@@ -844,11 +858,10 @@ static int check_license(MYSQL *mysql)
if (mysql_real_query(mysql, query, sizeof(query)-1))
{
- if (net->last_errno == ER_UNKNOWN_SYSTEM_VARIABLE)
+ if (net->client_last_errno == ER_UNKNOWN_SYSTEM_VARIABLE)
{
- net->last_errno= CR_WRONG_LICENSE;
- my_snprintf(net->last_error, sizeof(net->last_error)-1,
- ER(net->last_errno), required_license);
+ set_mysql_extended_error(mysql, CR_WRONG_LICENSE, unknown_sqlstate,
+ ER(CR_WRONG_LICENSE), required_license);
}
return 1;
}
@@ -860,16 +873,15 @@ static int check_license(MYSQL *mysql)
two is ever true for server variables now), or column value
mismatch, set wrong license error.
*/
- if (!net->last_errno &&
+ if (!net->client_last_errno &&
(!row || !row[0] ||
strncmp(row[0], required_license, sizeof(required_license))))
{
- net->last_errno= CR_WRONG_LICENSE;
- my_snprintf(net->last_error, sizeof(net->last_error)-1,
- ER(net->last_errno), required_license);
+ set_mysql_extended_error(mysql, CR_WRONG_LICENSE, unknown_sqlstate,
+ ER(CR_WRONG_LICENSE), required_license);
}
mysql_free_result(res);
- return net->last_errno;
+ return net->client_last_errno;
}
#endif /* CHECK_LICENSE */
@@ -1085,11 +1097,16 @@ void mysql_read_default_options(struct st_mysql_options *options,
my_free(options->ssl_capath, MYF(MY_ALLOW_ZERO_PTR));
options->ssl_capath = my_strdup(opt_arg, MYF(MY_WME));
break;
+ case 26: /* ssl_cipher */
+ my_free(options->ssl_cipher, MYF(MY_ALLOW_ZERO_PTR));
+ options->ssl_cipher= my_strdup(opt_arg, MYF(MY_WME));
+ break;
#else
case 13: /* Ignore SSL options */
case 14:
case 15:
case 16:
+ case 26:
break;
#endif /* HAVE_OPENSSL */
case 17: /* charset-lib */
@@ -1717,7 +1734,6 @@ static MYSQL_METHODS client_methods=
C_MODE_START
int mysql_init_character_set(MYSQL *mysql)
{
- NET *net= &mysql->net;
const char *default_collation_name;
/* Set character set */
@@ -1761,24 +1777,22 @@ int mysql_init_character_set(MYSQL *mysql)
}
charsets_dir= save;
}
-
+
if (!mysql->charset)
{
- net->last_errno=CR_CANT_READ_CHARSET;
- strmov(net->sqlstate, unknown_sqlstate);
if (mysql->options.charset_dir)
- my_snprintf(net->last_error, sizeof(net->last_error)-1,
- ER(net->last_errno),
- mysql->options.charset_name,
- mysql->options.charset_dir);
+ set_mysql_extended_error(mysql, CR_CANT_READ_CHARSET, unknown_sqlstate,
+ ER(CR_CANT_READ_CHARSET),
+ mysql->options.charset_name,
+ mysql->options.charset_dir);
else
{
char cs_dir_name[FN_REFLEN];
get_charsets_dir(cs_dir_name);
- my_snprintf(net->last_error, sizeof(net->last_error)-1,
- ER(net->last_errno),
- mysql->options.charset_name,
- cs_dir_name);
+ set_mysql_extended_error(mysql, CR_CANT_READ_CHARSET, unknown_sqlstate,
+ ER(CR_CANT_READ_CHARSET),
+ mysql->options.charset_name,
+ cs_dir_name);
}
return 1;
}
@@ -1910,10 +1924,10 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
DBUG_PRINT("info",("Using UNIX sock '%s'",unix_socket));
if ((sock = socket(AF_UNIX,SOCK_STREAM,0)) == SOCKET_ERROR)
{
- net->last_errno=CR_SOCKET_CREATE_ERROR;
- strmov(net->sqlstate, unknown_sqlstate);
- my_snprintf(net->last_error,sizeof(net->last_error)-1,
- ER(net->last_errno),socket_errno);
+ set_mysql_extended_error(mysql, CR_SOCKET_CREATE_ERROR,
+ unknown_sqlstate,
+ ER(CR_SOCKET_CREATE_ERROR),
+ socket_errno);
goto error;
}
net->vio= vio_new(sock, VIO_TYPE_SOCKET,
@@ -1926,10 +1940,10 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
{
DBUG_PRINT("error",("Got error %d on connect to local server",
socket_errno));
- net->last_errno=CR_CONNECTION_ERROR;
- strmov(net->sqlstate, unknown_sqlstate);
- my_snprintf(net->last_error,sizeof(net->last_error)-1,
- ER(net->last_errno),unix_socket,socket_errno);
+ set_mysql_extended_error(mysql, CR_CONNECTION_ERROR,
+ unknown_sqlstate,
+ ER(CR_CONNECTION_ERROR),
+ unix_socket, socket_errno);
goto error;
}
mysql->options.protocol=MYSQL_PROTOCOL_SOCKET;
@@ -1941,8 +1955,8 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
(! have_tcpip && (unix_socket || !host && is_NT()))))
{
sock=0;
- if ((hPipe=create_named_pipe(net, mysql->options.connect_timeout,
- (char**) &host, (char**) &unix_socket)) ==
+ if ((hPipe= create_named_pipe(mysql, mysql->options.connect_timeout,
+ (char**) &host, (char**) &unix_socket)) ==
INVALID_HANDLE_VALUE)
{
DBUG_PRINT("error",
@@ -1986,10 +2000,8 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
#endif
if (sock == SOCKET_ERROR)
{
- net->last_errno=CR_IPSOCK_ERROR;
- strmov(net->sqlstate, unknown_sqlstate);
- my_snprintf(net->last_error,sizeof(net->last_error)-1,
- ER(net->last_errno),socket_errno);
+ set_mysql_extended_error(mysql, CR_IPSOCK_ERROR, unknown_sqlstate,
+ ER(CR_IPSOCK_ERROR), socket_errno);
goto error;
}
net->vio= vio_new(sock, VIO_TYPE_TCPIP, VIO_BUFFERED_READ);
@@ -2014,10 +2026,8 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
if (!hp)
{
my_gethostbyname_r_free();
- net->last_errno=CR_UNKNOWN_HOST;
- strmov(net->sqlstate, unknown_sqlstate);
- my_snprintf(net->last_error, sizeof(net->last_error)-1,
- ER(CR_UNKNOWN_HOST), host, tmp_errno);
+ set_mysql_extended_error(mysql, CR_UNKNOWN_HOST, unknown_sqlstate,
+ ER(CR_UNKNOWN_HOST), host, tmp_errno);
goto error;
}
memcpy(&sock_addr.sin_addr, hp->h_addr,
@@ -2030,10 +2040,8 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
{
DBUG_PRINT("error",("Got error %d on connect to '%s'",socket_errno,
host));
- net->last_errno= CR_CONN_HOST_ERROR;
- strmov(net->sqlstate, unknown_sqlstate);
- my_snprintf(net->last_error, sizeof(net->last_error)-1,
- ER(CR_CONN_HOST_ERROR), host, socket_errno);
+ set_mysql_extended_error(mysql, CR_CONN_HOST_ERROR, unknown_sqlstate,
+ ER(CR_CONN_HOST_ERROR), host, socket_errno);
goto error;
}
}
@@ -2082,7 +2090,7 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
if ((pkt_length=cli_safe_read(mysql)) == packet_error)
{
- if (mysql->net.last_errno == CR_SERVER_LOST)
+ if (mysql->net.client_last_errno == CR_SERVER_LOST)
set_mysql_extended_error(mysql, CR_SERVER_LOST, unknown_sqlstate,
ER(CR_SERVER_LOST_EXTENDED),
"reading initial communication packet",
@@ -2092,16 +2100,14 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
/* Check if version of protocol matches current one */
mysql->protocol_version= net->read_pos[0];
- DBUG_DUMP("packet",(char*) net->read_pos,10);
+ DBUG_DUMP("packet",(uchar*) net->read_pos,10);
DBUG_PRINT("info",("mysql protocol version %d, server=%d",
PROTOCOL_VERSION, mysql->protocol_version));
if (mysql->protocol_version != PROTOCOL_VERSION)
{
- strmov(net->sqlstate, unknown_sqlstate);
- net->last_errno= CR_VERSION_ERROR;
- my_snprintf(net->last_error, sizeof(net->last_error)-1,
- ER(CR_VERSION_ERROR), mysql->protocol_version,
- PROTOCOL_VERSION);
+ set_mysql_extended_error(mysql, CR_VERSION_ERROR, unknown_sqlstate,
+ ER(CR_VERSION_ERROR), mysql->protocol_version,
+ PROTOCOL_VERSION);
goto error;
}
end=strend((char*) net->read_pos+1);
@@ -2220,7 +2226,7 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
Send client_flag, max_packet_size - unencrypted otherwise
the server does not know we want to do SSL
*/
- if (my_net_write(net,buff,(uint) (end-buff)) || net_flush(net))
+ if (my_net_write(net, (uchar*) buff, (uint) (end-buff)) || net_flush(net))
{
set_mysql_extended_error(mysql, CR_SERVER_LOST, unknown_sqlstate,
ER(CR_SERVER_LOST_EXTENDED),
@@ -2318,7 +2324,7 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
if ((pkt_length=cli_safe_read(mysql)) == packet_error)
{
- if (mysql->net.last_errno == CR_SERVER_LOST)
+ if (mysql->net.client_last_errno == CR_SERVER_LOST)
set_mysql_extended_error(mysql, CR_SERVER_LOST, unknown_sqlstate,
ER(CR_SERVER_LOST_EXTENDED),
"reading authorization packet",
@@ -2346,7 +2352,7 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
/* Read what server thinks about out new auth message report */
if (cli_safe_read(mysql) == packet_error)
{
- if (mysql->net.last_errno == CR_SERVER_LOST)
+ if (mysql->net.client_last_errno == CR_SERVER_LOST)
set_mysql_extended_error(mysql, CR_SERVER_LOST, unknown_sqlstate,
ER(CR_SERVER_LOST_EXTENDED),
"reading final connect information",
@@ -2365,7 +2371,7 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
if (db && mysql_select_db(mysql, db))
{
- if (mysql->net.last_errno == CR_SERVER_LOST)
+ if (mysql->net.client_last_errno == CR_SERVER_LOST)
set_mysql_extended_error(mysql, CR_SERVER_LOST, unknown_sqlstate,
ER(CR_SERVER_LOST_EXTENDED),
"Setting intital database",
@@ -2409,7 +2415,9 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
error:
reset_sigpipe(mysql);
DBUG_PRINT("error",("message: %u/%s (%s)",
- net->last_errno, net->sqlstate, net->last_error));
+ net->client_last_errno,
+ net->sqlstate,
+ net->client_last_error));
{
/* Free alloced memory */
end_server(mysql);
@@ -2467,8 +2475,8 @@ my_bool mysql_reconnect(MYSQL *mysql)
mysql->db, mysql->port, mysql->unix_socket,
mysql->client_flag | CLIENT_REMEMBER_OPTIONS))
{
- mysql->net.last_errno= tmp_mysql.net.last_errno;
- strmov(mysql->net.last_error, tmp_mysql.net.last_error);
+ mysql->net.client_last_errno= tmp_mysql.net.client_last_errno;
+ strmov(mysql->net.client_last_error, tmp_mysql.net.client_last_error);
strmov(mysql->net.sqlstate, tmp_mysql.net.sqlstate);
DBUG_RETURN(1);
}
@@ -2477,8 +2485,8 @@ my_bool mysql_reconnect(MYSQL *mysql)
DBUG_PRINT("error", ("mysql_set_character_set() failed"));
bzero((char*) &tmp_mysql.options,sizeof(tmp_mysql.options));
mysql_close(&tmp_mysql);
- mysql->net.last_errno= tmp_mysql.net.last_errno;
- strmov(mysql->net.last_error, tmp_mysql.net.last_error);
+ mysql->net.client_last_errno= tmp_mysql.net.client_last_errno;
+ strmov(mysql->net.client_last_error, tmp_mysql.net.client_last_error);
strmov(mysql->net.sqlstate, tmp_mysql.net.sqlstate);
DBUG_RETURN(1);
}
@@ -2625,7 +2633,7 @@ void mysql_detach_stmt_list(LIST **stmt_list __attribute__((unused)),
for (; element; element= element->next)
{
MYSQL_STMT *stmt= (MYSQL_STMT *) element->data;
- set_stmt_errmsg(stmt, buff, CR_STMT_CLOSED, unknown_sqlstate);
+ set_stmt_error(stmt, CR_STMT_CLOSED, unknown_sqlstate, buff);
stmt->mysql= 0;
/* No need to call list_delete for statement here */
}
@@ -3071,13 +3079,13 @@ unsigned int STDCALL mysql_num_fields(MYSQL_RES *res)
uint STDCALL mysql_errno(MYSQL *mysql)
{
- return mysql->net.last_errno;
+ return mysql->net.client_last_errno;
}
const char * STDCALL mysql_error(MYSQL *mysql)
{
- return mysql->net.last_error;
+ return mysql->net.client_last_error;
}
@@ -3142,14 +3150,11 @@ int STDCALL mysql_set_character_set(MYSQL *mysql, const char *cs_name)
{
char cs_dir_name[FN_REFLEN];
get_charsets_dir(cs_dir_name);
- mysql->net.last_errno= CR_CANT_READ_CHARSET;
- strmov(mysql->net.sqlstate, unknown_sqlstate);
- my_snprintf(mysql->net.last_error, sizeof(mysql->net.last_error) - 1,
- ER(mysql->net.last_errno), cs_name, cs_dir_name);
-
+ set_mysql_extended_error(mysql, CR_CANT_READ_CHARSET, unknown_sqlstate,
+ ER(CR_CANT_READ_CHARSET), cs_name, cs_dir_name);
}
charsets_dir= save_csdir;
- return mysql->net.last_errno;
+ return mysql->net.client_last_errno;
}
diff --git a/sql-common/my_time.c b/sql-common/my_time.c
index a1a3e0b6c77..543a925681b 100644
--- a/sql-common/my_time.c
+++ b/sql-common/my_time.c
@@ -54,24 +54,24 @@ uint calc_days_in_year(uint year)
366 : 365);
}
-/*
- Check datetime value for validity according to flags.
-
- SYNOPSIS
- check_date()
- ltime Date to check.
- not_zero_date ltime is not the zero date
- flags flags to check
- was_cut set to 2 if value was truncated.
- NOTE: This is not touched if value was not truncated
- NOTES
- Here we assume that year and month is ok !
+/**
+ @brief Check datetime value for validity according to flags.
+
+ @param[in] ltime Date to check.
+ @param[in] not_zero_date ltime is not the zero date
+ @param[in] flags flags to check
+ (see str_to_datetime() flags in my_time.h)
+ @param[out] was_cut set to 2 if value was invalid according to flags.
+ (Feb 29 in non-leap etc.) This remains unchanged
+ if value is not invalid.
+
+ @details Here we assume that year and month is ok!
If month is 0 we allow any date. (This only happens if we allow zero
date parts in str_to_datetime())
Disallow dates with zero year and non-zero month and/or day.
- RETURN
- 0 ok
+ @return
+ 0 OK
1 error
*/
@@ -117,9 +117,9 @@ my_bool check_date(const MYSQL_TIME *ltime, my_bool not_zero_date,
TIME_NO_ZERO_IN_DATE Don't allow partial dates
TIME_NO_ZERO_DATE Don't allow 0000-00-00 date
TIME_INVALID_DATES Allow 2000-02-31
- was_cut 0 Value ok
+ was_cut 0 Value OK
1 If value was cut during conversion
- 2 Date part was within ranges but date was wrong
+ 2 check_date(date,flags) considers date invalid
DESCRIPTION
At least the following formats are recogniced (based on number of digits)
@@ -1084,7 +1084,7 @@ int my_TIME_to_str(const MYSQL_TIME *l_time, char *to)
flags - flags to use in validating date, as in str_to_datetime()
was_cut 0 Value ok
1 If value was cut during conversion
- 2 Date part was within ranges but date was wrong
+ 2 check_date(date,flags) considers date invalid
DESCRIPTION
Convert a datetime value of formats YYMMDD, YYYYMMDD, YYMMDDHHMSS,
@@ -1105,9 +1105,14 @@ longlong number_to_datetime(longlong nr, MYSQL_TIME *time_res,
long part1,part2;
*was_cut= 0;
+ bzero((char*) time_res, sizeof(*time_res));
+ time_res->time_type=MYSQL_TIMESTAMP_DATE;
if (nr == LL(0) || nr >= LL(10000101000000))
+ {
+ time_res->time_type=MYSQL_TIMESTAMP_DATETIME;
goto ok;
+ }
if (nr < 101)
goto err;
if (nr <= (YY_PART_YEAR-1)*10000L+1231L)
@@ -1131,6 +1136,9 @@ longlong number_to_datetime(longlong nr, MYSQL_TIME *time_res,
}
if (nr < 101000000L)
goto err;
+
+ time_res->time_type=MYSQL_TIMESTAMP_DATETIME;
+
if (nr <= (YY_PART_YEAR-1)*LL(10000000000)+LL(1231235959))
{
nr= nr+LL(20000000000000); /* YYMMDDHHMMSS, 2000-2069 */
@@ -1144,7 +1152,6 @@ longlong number_to_datetime(longlong nr, MYSQL_TIME *time_res,
ok:
part1=(long) (nr/LL(1000000));
part2=(long) (nr - (longlong) part1*LL(1000000));
- bzero((char*) time_res, sizeof(*time_res));
time_res->year= (int) (part1/10000L); part1%=10000L;
time_res->month= (int) part1 / 100;
time_res->day= (int) part1 % 100;
diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt
index 299f4ae4285..1dffb6ffb58 100755
--- a/sql/CMakeLists.txt
+++ b/sql/CMakeLists.txt
@@ -75,6 +75,7 @@ ADD_EXECUTABLE(mysqld
partition_info.cc rpl_utility.cc rpl_injector.cc sql_locale.cc
rpl_rli.cc rpl_mi.cc sql_servers.cc
sql_connect.cc scheduler.cc
+ sql_profile.cc
${PROJECT_SOURCE_DIR}/sql/sql_yacc.cc
${PROJECT_SOURCE_DIR}/sql/sql_yacc.h
${PROJECT_SOURCE_DIR}/include/mysqld_error.h
@@ -90,12 +91,14 @@ TARGET_LINK_LIBRARIES(mysqld
SET_TARGET_PROPERTIES(mysqld PROPERTIES OUTPUT_NAME mysqld${MYSQLD_EXE_SUFFIX})
+IF(cmake_version EQUAL 20406)
# Work around for 2.4.6 bug, OUTPUT_NAME will not set the right .PDB
# file name. Note that COMPILE_FLAGS set some temporary pdb during build,
# LINK_FLAGS sets the real one.
SET_TARGET_PROPERTIES(mysqld PROPERTIES
COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/mysqld${MYSQLD_EXE_SUFFIX}.pdb"
LINK_FLAGS "/PDB:${CMAKE_CFG_INTDIR}/mysqld${MYSQLD_EXE_SUFFIX}.pdb")
+ENDIF(cmake_version EQUAL 20406)
IF(EMBED_MANIFESTS)
MYSQL_EMBED_MANIFEST("mysqld" "asInvoker")
diff --git a/sql/Makefile.am b/sql/Makefile.am
index f3e2484f9ab..194b6ab29ef 100644
--- a/sql/Makefile.am
+++ b/sql/Makefile.am
@@ -53,6 +53,7 @@ noinst_HEADERS = item.h item_func.h item_sum.h item_cmpfunc.h \
procedure.h sql_class.h sql_lex.h sql_list.h \
sql_map.h sql_string.h unireg.h \
sql_error.h field.h handler.h mysqld_suffix.h \
+ sql_profile.h \
ha_ndbcluster.h ha_ndbcluster_cond.h \
ha_ndbcluster_binlog.h ha_ndbcluster_tables.h \
ha_partition.h rpl_constants.h \
@@ -89,6 +90,7 @@ mysqld_SOURCES = sql_lex.cc sql_handler.cc sql_partition.cc \
sql_connect.cc scheduler.cc sql_parse.cc \
set_var.cc sql_yacc.yy \
sql_base.cc table.cc sql_select.cc sql_insert.cc \
+ sql_profile.cc \
sql_prepare.cc sql_error.cc sql_locale.cc \
sql_update.cc sql_delete.cc uniques.cc sql_do.cc \
procedure.cc sql_test.cc \
@@ -161,6 +163,7 @@ link_sources:
@LN_CP_F@ $(top_srcdir)/sql-common/my_time.c my_time.c
rm -f my_user.c
@LN_CP_F@ $(top_srcdir)/sql-common/my_user.c my_user.c
+ echo timestamp > link_sources
# This generates lex_hash.h
# NOTE Built sources should depend on their sources not the tool
diff --git a/sql/derror.cc b/sql/derror.cc
index 3b67e0f5bf0..a8cfa00ad1d 100644
--- a/sql/derror.cc
+++ b/sql/derror.cc
@@ -14,7 +14,12 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-/* Read language depeneded messagefile */
+/**
+ @file
+
+ @brief
+ Read language depeneded messagefile
+*/
#include "mysql_priv.h"
#include "mysys_err.h"
@@ -23,20 +28,17 @@ static bool read_texts(const char *file_name,const char ***point,
uint error_messages);
static void init_myfunc_errs(void);
-/*
+/**
Read messages from errorfile.
- SYNOPSIS
- init_errmessage()
+ This function can be called multiple times to reload the messages.
+ If it fails to load the messages, it will fail softly by initializing
+ the errmesg pointer to an array of empty strings or by keeping the
+ old array if it exists.
- DESCRIPTION
- This function can be called multiple times to reload the messages.
- If it fails to load the messages, it will fail softly by initializing
- the errmesg pointer to an array of empty strings or by keeping the
- old array if it exists.
-
- RETURN
+ @retval
FALSE OK
+ @retval
TRUE Error
*/
@@ -75,7 +77,14 @@ bool init_errmessage(void)
}
- /* Read text from packed textfile in language-directory */
+/**
+ Read text from packed textfile in language-directory.
+
+ If we can't read messagefile then it's panic- we can't continue.
+
+ @todo
+ Convert the character set to server system character set
+*/
static bool read_texts(const char *file_name,const char ***point,
uint error_messages)
@@ -178,7 +187,9 @@ err1:
} /* read_texts */
- /* Initiates error-messages used by my_func-library */
+/**
+ Initiates error-messages used by my_func-library.
+*/
static void init_myfunc_errs()
{
diff --git a/sql/des_key_file.cc b/sql/des_key_file.cc
index d99d712b45a..317cb237360 100644
--- a/sql/des_key_file.cc
+++ b/sql/des_key_file.cc
@@ -21,17 +21,18 @@
struct st_des_keyschedule des_keyschedule[10];
uint des_default_key;
-/*
- Function which loads DES keys from plaintext file into memory on MySQL
- server startup and on command FLUSH DES_KEY_FILE.
- Blame tonu@spam.ee on bugs ;)
-
- RETURN
- 0 ok
- 1 Error
+#define des_cs &my_charset_latin1
+
+/**
+ Load DES keys from plaintext file into
+ memory on MySQL server startup and on command FLUSH DES_KEY_FILE.
+
+ @retval
+ 0 ok
+ @retval
+ 1 Error
*/
-#define des_cs &my_charset_latin1
bool
load_des_key_file(const char *file_name)
diff --git a/sql/discover.cc b/sql/discover.cc
index a7af90c440f..56dc00cc5c4 100644
--- a/sql/discover.cc
+++ b/sql/discover.cc
@@ -14,29 +14,33 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-/* Functions for discover of frm file from handler */
+/**
+ @file
+
+ @brief
+ Functions for discover of frm file from handler
+*/
#include "mysql_priv.h"
#include <my_dir.h>
-/*
- Read the contents of a .frm file
+/**
+ Read the contents of a .frm file.
- SYNOPSIS
- readfrm()
+ frmdata and len are set to 0 on error.
- name path to table-file "db/name"
- frmdata frm data
- len length of the read frmdata
+ @param name path to table-file "db/name"
+ @param frmdata frm data
+ @param len length of the read frmdata
- RETURN VALUES
- 0 ok
- 1 Could not open file
- 2 Could not stat file
- 3 Could not allocate data for read
- Could not read file
-
- frmdata and len are set to 0 on error
+ @retval
+ 0 ok
+ @retval
+ 1 Could not open file
+ @retval
+ 2 Could not stat file
+ @retval
+ 3 Could not allocate data for read. Could not read file
*/
int readfrm(const char *name, uchar **frmdata, size_t *len)
@@ -87,18 +91,16 @@ int readfrm(const char *name, uchar **frmdata, size_t *len)
/*
Write the content of a frm data pointer
- to a frm file
-
- SYNOPSIS
- writefrm()
+ to a frm file.
- name path to table-file "db/name"
- frmdata frm data
- len length of the frmdata
+ @param name path to table-file "db/name"
+ @param frmdata frm data
+ @param len length of the frmdata
- RETURN VALUES
- 0 ok
- 2 Could not write file
+ @retval
+ 0 ok
+ @retval
+ 2 Could not write file
*/
int writefrm(const char *name, const uchar *frmdata, size_t len)
diff --git a/sql/event_data_objects.cc b/sql/event_data_objects.cc
index 787b04c12c6..f4b64ab3012 100644
--- a/sql/event_data_objects.cc
+++ b/sql/event_data_objects.cc
@@ -1649,8 +1649,6 @@ err:
void
Event_queue_element::mark_last_executed(THD *thd)
{
- thd->set_current_time();
-
last_executed= (my_time_t) thd->query_start();
last_executed_changed= TRUE;
@@ -2017,6 +2015,7 @@ end_no_lex_start:
ret= 1;
else
{
+ ulong saved_master_access;
/*
Peculiar initialization order is a crutch to avoid races in SHOW
PROCESSLIST which reads thd->{query/query_length} without a mutex.
@@ -2024,8 +2023,19 @@ end_no_lex_start:
thd->query_length= 0;
thd->query= sp_sql.c_ptr_safe();
thd->query_length= sp_sql.length();
- if (Events::drop_event(thd, dbname, name, FALSE))
- ret= 1;
+
+ /*
+ NOTE: even if we run in read-only mode, we should be able to lock
+ the mysql.event table for writing. In order to achieve this, we
+ should call mysql_lock_tables() under the super-user.
+ */
+
+ saved_master_access= thd->security_ctx->master_access;
+ thd->security_ctx->master_access |= SUPER_ACL;
+
+ ret= Events::drop_event(thd, dbname, name, FALSE);
+
+ thd->security_ctx->master_access= saved_master_access;
}
}
#ifndef NO_EMBEDDED_ACCESS_CHECKS
diff --git a/sql/event_db_repository.cc b/sql/event_db_repository.cc
index 705bd8b2704..9a33b33d8c9 100644
--- a/sql/event_db_repository.cc
+++ b/sql/event_db_repository.cc
@@ -525,6 +525,10 @@ Event_db_repository::fill_schema_events(THD *thd, TABLE_LIST *tables,
- whether this open mode would work under LOCK TABLES, or inside a
stored function or trigger.
+ Note that if the table can't be locked successfully this operation will
+ close it. Therefore it provides guarantee that it either opens and locks
+ table or fails without leaving any tables open.
+
@param[in] thd Thread context
@param[in] lock_type How to lock the table
@param[out] table We will store the open table here
@@ -544,7 +548,10 @@ Event_db_repository::open_event_table(THD *thd, enum thr_lock_type lock_type,
tables.init_one_table("mysql", "event", lock_type);
if (simple_open_n_lock_tables(thd, &tables))
+ {
+ close_thread_tables(thd);
DBUG_RETURN(TRUE);
+ }
*table= tables.table;
tables.table->use_all_columns();
@@ -995,6 +1002,8 @@ update_timing_fields_for_event(THD *thd,
if (thd->current_stmt_binlog_row_based)
thd->clear_current_stmt_binlog_row_based();
+ DBUG_ASSERT(thd->security_ctx->master_access & SUPER_ACL);
+
if (open_event_table(thd, TL_WRITE, &table))
goto end;
diff --git a/sql/event_scheduler.cc b/sql/event_scheduler.cc
index b03b51f1134..5655a8acc99 100644
--- a/sql/event_scheduler.cc
+++ b/sql/event_scheduler.cc
@@ -127,6 +127,7 @@ post_init_event_thread(THD *thd)
thd->cleanup();
return TRUE;
}
+ lex_start(thd);
pthread_mutex_lock(&LOCK_thread_count);
threads.append(thd);
@@ -399,6 +400,13 @@ Event_scheduler::start()
new_thd->system_thread= SYSTEM_THREAD_EVENT_SCHEDULER;
new_thd->command= COM_DAEMON;
+ /*
+ We should run the event scheduler thread under the super-user privileges.
+ In particular, this is needed to be able to lock the mysql.event table
+ for writing when the server is running in the read-only mode.
+ */
+ new_thd->security_ctx->master_access |= SUPER_ACL;
+
scheduler_param_value=
(struct scheduler_param *)my_malloc(sizeof(struct scheduler_param), MYF(0));
scheduler_param_value->thd= new_thd;
diff --git a/sql/events.cc b/sql/events.cc
index 5246bccc388..87385082a82 100644
--- a/sql/events.cc
+++ b/sql/events.cc
@@ -146,7 +146,7 @@ bool
Events::set_opt_event_scheduler(char *argument)
{
if (argument == NULL)
- opt_event_scheduler= Events::EVENTS_DISABLED;
+ opt_event_scheduler= Events::EVENTS_ON;
else
{
int type;
@@ -825,8 +825,8 @@ Events::fill_schema_events(THD *thd, TABLE_LIST *tables, COND * /* cond */)
if (thd->lex->sql_command == SQLCOM_SHOW_EVENTS)
{
DBUG_ASSERT(thd->lex->select_lex.db);
- if (check_access(thd, EVENT_ACL, thd->lex->select_lex.db, 0, 0, 0,
- is_schema_db(thd->lex->select_lex.db)))
+ if (!is_schema_db(thd->lex->select_lex.db) && // There is no events in I_S
+ check_access(thd, EVENT_ACL, thd->lex->select_lex.db, 0, 0, 0, 0))
DBUG_RETURN(1);
db= thd->lex->select_lex.db;
}
@@ -884,6 +884,7 @@ Events::init(my_bool opt_noacl)
*/
thd->thread_stack= (char*) &thd;
thd->store_globals();
+ lex_start(thd);
/*
We will need Event_db_repository anyway, even if the scheduler is
@@ -1124,11 +1125,25 @@ Events::load_events_from_db(THD *thd)
READ_RECORD read_record_info;
bool ret= TRUE;
uint count= 0;
+ ulong saved_master_access;
DBUG_ENTER("Events::load_events_from_db");
DBUG_PRINT("enter", ("thd: 0x%lx", (long) thd));
- if (db_repository->open_event_table(thd, TL_WRITE, &table))
+ /*
+ NOTE: even if we run in read-only mode, we should be able to lock the
+ mysql.event table for writing. In order to achieve this, we should call
+ mysql_lock_tables() under the super user.
+ */
+
+ saved_master_access= thd->security_ctx->master_access;
+ thd->security_ctx->master_access |= SUPER_ACL;
+
+ ret= db_repository->open_event_table(thd, TL_WRITE, &table);
+
+ thd->security_ctx->master_access= saved_master_access;
+
+ if (ret)
{
sql_print_error("Event Scheduler: Failed to open table mysql.event");
DBUG_RETURN(TRUE);
diff --git a/sql/field.cc b/sql/field.cc
index fa93454c757..7c4f6c9ff5f 100644
--- a/sql/field.cc
+++ b/sql/field.cc
@@ -14,9 +14,12 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-/*****************************************************************************
-** This file implements classes defined in field.h
-*****************************************************************************/
+/**
+ @file
+
+ @brief
+ This file implements classes defined in field.h
+*/
#ifdef USE_PRAGMA_IMPLEMENTATION
#pragma implementation // gcc: Class implementation
@@ -913,14 +916,13 @@ static enum_field_types field_types_merge_rules [FIELDTYPE_NUM][FIELDTYPE_NUM]=
}
};
-/*
- Return type of which can carry value of both given types in UNION result
+/**
+ Return type of which can carry value of both given types in UNION result.
- SYNOPSIS
- Field::field_type_merge()
- a, b types for merging
+ @param a type for merging
+ @param b type for merging
- RETURN
+ @return
type of field
*/
@@ -992,14 +994,12 @@ test_if_important_data(CHARSET_INFO *cs, const char *str, const char *strend)
}
-/*
- Detect Item_result by given field type of UNION merge result
+/**
+ Detect Item_result by given field type of UNION merge result.
- SYNOPSIS
- Field::result_merge_type()
- field_type given field type
+ @param field_type given field type
- RETURN
+ @return
Item_result (type of internal MySQL expression result)
*/
@@ -1015,18 +1015,17 @@ Item_result Field::result_merge_type(enum_field_types field_type)
*****************************************************************************/
-/*
- Check whether a field type can be partially indexed by a key
+/**
+ Check whether a field type can be partially indexed by a key.
This is a static method, rather than a virtual function, because we need
to check the type of a non-Field in mysql_alter_table().
- SYNOPSIS
- type_can_have_key_part()
- type field type
+ @param type field type
- RETURN
+ @retval
TRUE Type can have a prefixed key
+ @retval
FALSE Type can not have a prefixed key
*/
@@ -1048,8 +1047,8 @@ bool Field::type_can_have_key_part(enum enum_field_types type)
}
-/*
- Numeric fields base class constructor
+/**
+ Numeric fields base class constructor.
*/
Field_num::Field_num(uchar *ptr_arg,uint32 len_arg, uchar *null_ptr_arg,
uchar null_bit_arg, utype unireg_check_arg,
@@ -1080,23 +1079,25 @@ void Field_num::prepend_zeros(String *value)
}
}
-/*
+/**
Test if given number is a int.
- SYNOPSIS
- Field_num::check_int
- cs Character set
- str String to test
- end Pointer to char after last used digit
- length String length
- error Error returned by strntoull10rnd()
+ @todo
+ Make this multi-byte-character safe
+
+ @param str String to test
+ @param length Length of 'str'
+ @param int_end Pointer to char after last used digit
+ @param cs Character set
- NOTE
+ @note
This is called after one has called strntoull10rnd() function.
- RETURN
- 0 ok
+ @retval
+ 0 OK
+ @retval
1 error: empty string or wrong integer.
+ @retval
2 error: garbage at the end of string.
*/
@@ -1191,16 +1192,15 @@ out_of_range:
return 1;
}
-/*
+/**
Process decimal library return codes and issue warnings for overflow and
truncation.
- SYNOPSIS
- Field::warn_if_overflow()
- op_result decimal library return code (E_DEC_* see include/decimal.h)
+ @param op_result decimal library return code (E_DEC_* see include/decimal.h)
- RETURN
+ @retval
1 there was overflow
+ @retval
0 no error or some other errors except overflow
*/
@@ -1275,10 +1275,10 @@ static bool test_if_real(const char *str,int length, CHARSET_INFO *cs)
#endif
-/*
+/**
Interpret field value as an integer but return the result as a string.
- This is used for printing bit_fields as numbers while debugging
+ This is used for printing bit_fields as numbers while debugging.
*/
String *Field::val_int_as_str(String *val_buffer, my_bool unsigned_val)
@@ -1299,6 +1299,7 @@ String *Field::val_int_as_str(String *val_buffer, my_bool unsigned_val)
}
+/// This is used as a table name when the table structure is not set up
Field::Field(uchar *ptr_arg,uint32 length_arg,uchar *null_ptr_arg,
uchar null_bit_arg,
utype unireg_check_arg, const char *field_name_arg)
@@ -1307,7 +1308,8 @@ Field::Field(uchar *ptr_arg,uint32 length_arg,uchar *null_ptr_arg,
field_name(field_name_arg),
key_start(0), part_of_key(0), part_of_key_not_clustered(0),
part_of_sortkey(0), unireg_check(unireg_check_arg),
- field_length(length_arg), null_bit(null_bit_arg)
+ field_length(length_arg), null_bit(null_bit_arg),
+ is_created_from_null_item(FALSE)
{
flags=null_ptr ? 0: NOT_NULL_FLAG;
comment.str= (char*) "";
@@ -1394,20 +1396,85 @@ int Field::store(const char *to, uint length, CHARSET_INFO *cs,
/**
+ Pack the field into a format suitable for storage and transfer.
+
+ To implement packing functionality, only the virtual function
+ should be overridden. The other functions are just convenience
+ functions and hence should not be overridden.
+
+ The value of <code>low_byte_first</code> is dependent on how the
+ packed data is going to be used: for local use, e.g., temporary
+ store on disk or in memory, use the native format since that is
+ faster. For data that is going to be transfered to other machines
+ (e.g., when writing data to the binary log), data should always be
+ stored in little-endian format.
+
+ @note The default method for packing fields just copy the raw bytes
+ of the record into the destination, but never more than
+ <code>max_length</code> characters.
+
+ @param to
+ Pointer to memory area where representation of field should be put.
+
+ @param from
+ Pointer to memory area where record representation of field is
+ stored.
+
+ @param max_length
+ Maximum length of the field, as given in the column definition. For
+ example, for <code>CHAR(1000)</code>, the <code>max_length</code>
+ is 1000. This information is sometimes needed to decide how to pack
+ the data.
+
+ @param low_byte_first
+ @c TRUE if integers should be stored little-endian, @c FALSE if
+ native format should be used. Note that for little-endian machines,
+ the value of this flag is a moot point since the native format is
+ little-endian.
+*/
+uchar *
+Field::pack(uchar *to, const uchar *from, uint max_length,
+ bool low_byte_first __attribute__((unused)))
+{
+ uint32 length= pack_length();
+ set_if_smaller(length, max_length);
+ memcpy(to, from, length);
+ return to+length;
+}
+
+/**
Unpack a field from row data.
- This method is used to unpack a field from a master whose size
- of the field is less than that of the slave.
-
+ This method is used to unpack a field from a master whose size of
+ the field is less than that of the slave.
+
+ The <code>param_data</code> parameter is a two-byte integer (stored
+ in the least significant 16 bits of the unsigned integer) usually
+ consisting of two parts: the real type in the most significant byte
+ and a original pack length in the least significant byte.
+
+ The exact layout of the <code>param_data</code> field is given by
+ the <code>Table_map_log_event::save_field_metadata()</code>.
+
+ This is the default method for unpacking a field. It just copies
+ the memory block in byte order (of original pack length bytes or
+ length of field, whichever is smaller).
+
@param to Destination of the data
@param from Source of the data
- @param param_data Pack length of the field data
+ @param param_data Real type and original pack length of the field
+ data
+
+ @param low_byte_first
+ If this flag is @c true, all composite entities (e.g., lengths)
+ should be unpacked in little-endian format; otherwise, the entities
+ are unpacked in native order.
@return New pointer into memory based on from + length of the data
*/
-const uchar *Field::unpack(uchar* to,
- const uchar *from,
- uint param_data)
+const uchar *
+Field::unpack(uchar* to, const uchar *from, uint param_data,
+ bool low_byte_first __attribute__((unused)))
{
uint length=pack_length();
int from_type= 0;
@@ -1420,19 +1487,18 @@ const uchar *Field::unpack(uchar* to,
from_type= (param_data & 0xff00) >> 8U; // real_type.
param_data= param_data & 0x00ff; // length.
}
+
+ if ((param_data == 0) ||
+ (length == param_data) ||
+ (from_type != real_type()))
+ {
+ memcpy(to, from, length);
+ return from+length;
+ }
+
uint len= (param_data && (param_data < length)) ?
param_data : length;
- /*
- If the length is the same, use old unpack method.
- If the param_data is 0, use the old unpack method.
- This is possible if the table map was generated from a down-level
- master or if the data was not available on the master.
- If the real_types are not the same, use the old unpack method.
- */
- if ((length == param_data) ||
- (param_data == 0) ||
- (from_type != real_type()))
- return(unpack(to, from));
+
memcpy(to, from, param_data > length ? length : len);
return from+len;
}
@@ -1457,15 +1523,24 @@ void Field_num::add_zerofill_and_unsigned(String &res) const
void Field::make_field(Send_field *field)
{
- if (orig_table->s->db.str && *orig_table->s->db.str)
+ if (orig_table && orig_table->s->db.str && *orig_table->s->db.str)
{
field->db_name= orig_table->s->db.str;
field->org_table_name= orig_table->s->table_name.str;
}
else
field->org_table_name= field->db_name= "";
- field->table_name= orig_table->alias;
- field->col_name= field->org_col_name= field_name;
+ if (orig_table)
+ {
+ field->table_name= orig_table->alias;
+ field->org_col_name= field_name;
+ }
+ else
+ {
+ field->table_name= "";
+ field->org_col_name= "";
+ }
+ field->col_name= field_name;
field->charsetnr= charset()->number;
field->length=field_length;
field->type=type();
@@ -1474,17 +1549,15 @@ void Field::make_field(Send_field *field)
}
-/*
+/**
Conversion from decimal to longlong with checking overflow and
- setting correct value (min/max) in case of overflow
+ setting correct value (min/max) in case of overflow.
- SYNOPSIS
- Field::convert_decimal2longlong()
- val value which have to be converted
- unsigned_flag type of integer in which we convert val
- err variable to pass error code
+ @param val value which have to be converted
+ @param unsigned_flag type of integer in which we convert val
+ @param err variable to pass error code
- RETURN
+ @return
value converted from val
*/
longlong Field::convert_decimal2longlong(const my_decimal *val,
@@ -1518,19 +1591,18 @@ longlong Field::convert_decimal2longlong(const my_decimal *val,
}
-/*
+/**
Storing decimal in integer fields.
- SYNOPSIS
- Field_num::store_decimal()
- val value for storing
+ @param val value for storing
- NOTE
+ @note
This method is used by all integer fields, real/decimal redefine it
- RETURN
+ @retval
0 OK
- != 0 error
+ @retval
+ !=0 error
*/
int Field_num::store_decimal(const my_decimal *val)
@@ -1542,19 +1614,17 @@ int Field_num::store_decimal(const my_decimal *val)
}
-/*
- Return decimal value of integer field
+/**
+ Return decimal value of integer field.
- SYNOPSIS
- Field_num::val_decimal()
- decimal_value buffer for storing decimal value
+ @param decimal_value buffer for storing decimal value
- NOTE
- This method is used by all integer fields, real/decimal redefine it
+ @note
+ This method is used by all integer fields, real/decimal redefine it.
All longlong values fit in our decimal buffer which cal store 8*9=72
digits of integer number
- RETURN
+ @return
pointer to decimal buffer with value of field
*/
@@ -1587,22 +1657,24 @@ void Field_num::make_field(Send_field *field)
field->decimals= dec;
}
-/*
- Decimal representation of Field_str
+/**
+ Decimal representation of Field_str.
- SYNOPSIS
- Field_str::store_decimal()
- d value for storing
+ @param d value for storing
- NOTE
- Field_str is the base class for fields like Field_enum, Field_date and some
- similar. Some dates use fraction and also string value should be
- converted to floating point value according our rules, so we use double
- to store value of decimal in string
+ @note
+ Field_str is the base class for fields like Field_enum,
+ Field_date and some similar. Some dates use fraction and also
+ string value should be converted to floating point value according
+ our rules, so we use double to store value of decimal in string.
- RETURN
+ @todo
+ use decimal2string?
+
+ @retval
0 OK
- != 0 error
+ @retval
+ !=0 error
*/
int Field_str::store_decimal(const my_decimal *d)
@@ -1675,11 +1747,11 @@ bool Field::get_time(MYSQL_TIME *ltime)
return 0;
}
-/*
- This is called when storing a date in a string
+/**
+ This is called when storing a date in a string.
- NOTES
- Needs to be changed if/when we want to support different time formats
+ @note
+ Needs to be changed if/when we want to support different time formats.
*/
int Field::store_time(MYSQL_TIME *ltime, timestamp_type type_arg)
@@ -2301,9 +2373,9 @@ String *Field_decimal::val_str(String *val_buffer __attribute__((unused)),
return val_ptr;
}
-/*
-** Should be able to handle at least the following fixed decimal formats:
-** 5.00 , -1.0, 05, -05, +5 with optional pre/end space
+/**
+ Should be able to handle at least the following fixed decimal formats:
+ 5.00 , -1.0, 05, -05, +5 with optional pre/end space
*/
int Field_decimal::cmp(const uchar *a_ptr,const uchar *b_ptr)
@@ -2425,13 +2497,11 @@ int Field_new_decimal::reset(void)
}
-/*
+/**
Generate max/min decimal value in case of overflow.
- SYNOPSIS
- Field_new_decimal::set_value_on_overflow();
- decimal_value buffer for value
- sign sign of value which caused overflow
+ @param decimal_value buffer for value
+ @param sign sign of value which caused overflow
*/
void Field_new_decimal::set_value_on_overflow(my_decimal *decimal_value,
@@ -2450,21 +2520,19 @@ void Field_new_decimal::set_value_on_overflow(my_decimal *decimal_value,
}
-/*
- Store decimal value in the binary buffer
+/**
+ Store decimal value in the binary buffer.
- SYNOPSIS
- store_value(const my_decimal *decimal_value)
- decimal_value my_decimal
+ Checks if decimal_value fits into field size.
+ If it does, stores the decimal in the buffer using binary format.
+ Otherwise sets maximal number that can be stored in the field.
- DESCRIPTION
- checks if decimal_value fits into field size.
- if it does, stores the decimal in the buffer using binary format.
- Otherwise sets maximal number that can be stored in the field.
+ @param decimal_value my_decimal
- RETURN
- 0 ok
- 1 error
+ @retval
+ 0 ok
+ @retval
+ 1 error
*/
bool Field_new_decimal::store_value(const my_decimal *decimal_value)
@@ -2573,6 +2641,12 @@ int Field_new_decimal::store(const char *from, uint length,
}
+/**
+ @todo
+ Fix following when double2my_decimal when double2decimal
+ will return E_DEC_TRUNCATED always correctly
+*/
+
int Field_new_decimal::store(double nr)
{
ASSERT_COLUMN_MARKED_FOR_WRITE;
@@ -2805,10 +2879,15 @@ uint Field_new_decimal::is_equal(Create_field *new_field)
@return New pointer into memory based on from + length of the data
*/
-const uchar *Field_new_decimal::unpack(uchar* to,
- const uchar *from,
- uint param_data)
+const uchar *
+Field_new_decimal::unpack(uchar* to,
+ const uchar *from,
+ uint param_data,
+ bool low_byte_first)
{
+ if (param_data == 0)
+ return Field::unpack(to, from, param_data, low_byte_first);
+
uint from_precision= (param_data & 0xff00) >> 8U;
uint from_decimal= param_data & 0x00ff;
uint length=pack_length();
@@ -3950,6 +4029,49 @@ void Field_longlong::sql_type(String &res) const
}
+/*
+ Floating-point numbers
+ */
+
+uchar *
+Field_real::pack(uchar *to, const uchar *from,
+ uint max_length, bool low_byte_first)
+{
+ DBUG_ENTER("Field_real::pack");
+ DBUG_ASSERT(max_length >= pack_length());
+ DBUG_PRINT("debug", ("pack_length(): %u", pack_length()));
+#ifdef WORDS_BIGENDIAN
+ if (low_byte_first != table->s->db_low_byte_first)
+ {
+ const uchar *dptr= from + pack_length();
+ while (dptr-- > from)
+ *to++ = *dptr;
+ DBUG_RETURN(to);
+ }
+ else
+#endif
+ DBUG_RETURN(Field::pack(to, from, max_length, low_byte_first));
+}
+
+const uchar *
+Field_real::unpack(uchar *to, const uchar *from,
+ uint param_data, bool low_byte_first)
+{
+ DBUG_ENTER("Field_real::unpack");
+ DBUG_PRINT("debug", ("pack_length(): %u", pack_length()));
+#ifdef WORDS_BIGENDIAN
+ if (low_byte_first != table->s->db_low_byte_first)
+ {
+ const uchar *dptr= from + pack_length();
+ while (dptr-- > from)
+ *to++ = *dptr;
+ DBUG_RETURN(from + pack_length());
+ }
+ else
+#endif
+ DBUG_RETURN(Field::unpack(to, from, param_data, low_byte_first));
+}
+
/****************************************************************************
single precision float
****************************************************************************/
@@ -4546,9 +4668,8 @@ void Field_double::sql_type(String &res) const
}
-/*
- TIMESTAMP type.
- Holds datetime values in range from 1970-01-01 00:00:01 UTC to
+/**
+ TIMESTAMP type holds datetime values in range from 1970-01-01 00:00:01 UTC to
2038-01-01 00:00:00 UTC stored as number of seconds since Unix
Epoch in UTC.
@@ -4581,7 +4702,7 @@ void Field_double::sql_type(String &res) const
NONE - field which is not auto-set on update with some other than NOW()
default value (TIMESTAMP DEFAULT 0).
- Note that TIMESTAMP_OLD_FIELD's are never created explicitly now, they are
+ Note that TIMESTAMP_OLD_FIELDs are never created explicitly now, they are
left only for preserving ability to read old tables. Such fields replaced
with their newer analogs in CREATE TABLE and in SHOW CREATE TABLE. This is
because we want to prefer NONE unireg_check before TIMESTAMP_OLD_FIELD for
@@ -4607,6 +4728,8 @@ Field_timestamp::Field_timestamp(uchar *ptr_arg, uint32 len_arg,
/* This timestamp has auto-update */
share->timestamp_field= this;
flags|= TIMESTAMP_FLAG;
+ if (unireg_check != TIMESTAMP_DN_FIELD)
+ flags|= ON_UPDATE_NOW_FLAG;
}
}
@@ -4620,18 +4743,16 @@ Field_timestamp::Field_timestamp(bool maybe_null_arg,
{
/* For 4.0 MYD and 4.0 InnoDB compatibility */
flags|= ZEROFILL_FLAG | UNSIGNED_FLAG;
+ if (unireg_check != TIMESTAMP_DN_FIELD)
+ flags|= ON_UPDATE_NOW_FLAG;
}
-/*
+/**
Get auto-set type for TIMESTAMP field.
- SYNOPSIS
- get_auto_set_type()
-
- DESCRIPTION
- Returns value indicating during which operations this TIMESTAMP field
- should be auto-set to current timestamp.
+ Returns value indicating during which operations this TIMESTAMP field
+ should be auto-set to current timestamp.
*/
timestamp_auto_set_type Field_timestamp::get_auto_set_type() const
{
@@ -5114,7 +5235,8 @@ longlong Field_time::val_int(void)
}
-/*
+/**
+ @note
This function is multi-byte safe as the result string is always of type
my_charset_bin
*/
@@ -5141,7 +5263,8 @@ String *Field_time::val_str(String *val_buffer,
}
-/*
+/**
+ @note
Normally we would not consider 'time' as a valid date, but we allow
get_date() here to be able to do things like
DATE_FORMAT(time, "%l.%i %p")
@@ -5511,6 +5634,13 @@ String *Field_date::val_str(String *val_buffer,
}
+bool Field_date::get_time(MYSQL_TIME *ltime)
+{
+ bzero((char *)ltime, sizeof(MYSQL_TIME));
+ return 0;
+}
+
+
int Field_date::cmp(const uchar *a_ptr, const uchar *b_ptr)
{
int32 a,b;
@@ -5576,6 +5706,9 @@ void Field_date::sql_type(String &res) const
1 Value was cut during conversion
2 Wrong date string
3 Datetime value that was cut (warning level NOTE)
+ This is used by opt_range.cc:get_mm_leaf(). Note that there is a
+ nearly-identical class Field_date doesn't ever return 3 from its
+ store function.
*/
int Field_newdate::store(const char *from,uint len,CHARSET_INFO *cs)
@@ -5600,7 +5733,7 @@ int Field_newdate::store(const char *from,uint len,CHARSET_INFO *cs)
{
tmp= l_time.day + l_time.month*32 + l_time.year*16*32;
if (!error && (ret != MYSQL_TIMESTAMP_DATE) &&
- thd->count_cuted_fields != CHECK_FIELD_IGNORE)
+ (l_time.hour || l_time.minute || l_time.second || l_time.second_part))
error= 3; // Datetime was cut (note)
}
@@ -5648,10 +5781,16 @@ int Field_newdate::store(longlong nr, bool unsigned_val)
else
tmp= l_time.day + l_time.month*32 + l_time.year*16*32;
+ if (!error && l_time.time_type != MYSQL_TIMESTAMP_DATE &&
+ (l_time.hour || l_time.minute || l_time.second || l_time.second_part))
+ error= 3;
+
if (error)
- set_datetime_warning(MYSQL_ERROR::WARN_LEVEL_WARN,
- error == 2 ? ER_WARN_DATA_OUT_OF_RANGE :
- WARN_DATA_TRUNCATED,nr,MYSQL_TIMESTAMP_DATE, 1);
+ set_datetime_warning(error == 3 ? MYSQL_ERROR::WARN_LEVEL_NOTE :
+ MYSQL_ERROR::WARN_LEVEL_WARN,
+ error == 2 ?
+ ER_WARN_DATA_OUT_OF_RANGE : WARN_DATA_TRUNCATED,
+ nr,MYSQL_TIMESTAMP_DATE, 1);
int3store(ptr,tmp);
return error;
@@ -5679,6 +5818,17 @@ int Field_newdate::store_time(MYSQL_TIME *ltime,timestamp_type time_type)
set_datetime_warning(MYSQL_ERROR::WARN_LEVEL_WARN, WARN_DATA_TRUNCATED,
str.ptr(), str.length(), MYSQL_TIMESTAMP_DATE, 1);
}
+ if (!error && ltime->time_type != MYSQL_TIMESTAMP_DATE &&
+ (ltime->hour || ltime->minute || ltime->second || ltime->second_part))
+ {
+ char buff[MAX_DATE_STRING_REP_LENGTH];
+ String str(buff, sizeof(buff), &my_charset_latin1);
+ make_datetime((DATE_TIME_FORMAT *) 0, ltime, &str);
+ set_datetime_warning(MYSQL_ERROR::WARN_LEVEL_NOTE,
+ WARN_DATA_TRUNCATED,
+ str.ptr(), str.length(), MYSQL_TIMESTAMP_DATE, 1);
+ error= 3;
+ }
}
else
{
@@ -6243,15 +6393,12 @@ int Field_string::store(const char *from,uint length,CHARSET_INFO *cs)
}
-/*
+/**
Store double value in Field_string or Field_varstring.
- SYNOPSIS
- store(double nr)
- nr number
+ Pretty prints double number into field_length characters buffer.
- DESCRIPTION
- Pretty prints double number into field_length characters buffer.
+ @param nr number
*/
int Field_str::store(double nr)
@@ -6259,24 +6406,74 @@ int Field_str::store(double nr)
ASSERT_COLUMN_MARKED_FOR_WRITE;
char buff[DOUBLE_TO_STRING_CONVERSION_BUFFER_SIZE];
uint length;
- bool use_scientific_notation= TRUE;
uint local_char_length= field_length / charset()->mbmaxlen;
- /*
- Check fabs(nr) against longest value that can be stored in field,
- which depends on whether the value is < 1 or not, and negative or not
- */
double anr= fabs(nr);
+ bool fractional= (anr != floor(anr));
int neg= (nr < 0.0) ? 1 : 0;
- if (local_char_length > 4 && local_char_length < 32 &&
- (anr < 1.0 ? anr > 1/(log_10[max(0,(int) local_char_length-neg-2)]) /* -2 for "0." */
- : anr < log_10[local_char_length-neg]-1))
- use_scientific_notation= FALSE;
-
- length= (uint) my_sprintf(buff, (buff, "%-.*g",
- (use_scientific_notation ?
- max(0, (int)local_char_length-neg-5) :
- local_char_length),
- nr));
+ uint max_length;
+ int exp;
+ uint digits;
+ uint i;
+
+ /* Calculate the exponent from the 'e'-format conversion */
+ if (anr < 1.0 && anr > 0)
+ {
+ for (exp= 0; anr < 1e-100; exp-= 100, anr*= 1e100);
+ for (; anr < 1e-10; exp-= 10, anr*= 1e10);
+ for (i= 1; anr < 1 / log_10[i]; exp--, i++);
+ exp--;
+ }
+ else
+ {
+ for (exp= 0; anr > 1e100; exp+= 100, anr/= 1e100);
+ for (; anr > 1e10; exp+= 10, anr/= 1e10);
+ for (i= 1; anr > log_10[i]; exp++, i++);
+ }
+
+ max_length= local_char_length - neg;
+
+ /*
+ Since in sprintf("%g") precision means the number of significant digits,
+ calculate the maximum number of significant digits if the 'f'-format
+ would be used (+1 for decimal point if the number has a fractional part).
+ */
+ digits= max(0, (int) max_length - fractional);
+ /*
+ If the exponent is negative, decrease digits by the number of leading zeros
+ after the decimal point that do not count as significant digits.
+ */
+ if (exp < 0)
+ digits= max(0, (int) digits + exp);
+ /*
+ 'e'-format is used only if the exponent is less than -4 or greater than or
+ equal to the precision. In this case we need to adjust the number of
+ significant digits to take "e+NN" + decimal point into account (hence -5).
+ We also have to reserve one additional character if abs(exp) >= 100.
+ */
+ if (exp >= (int) digits || exp < -4)
+ digits= max(0, (int) (max_length - 5 - (exp >= 100 || exp <= -100)));
+
+ /* Limit precision to DBL_DIG to avoid garbage past significant digits */
+ set_if_smaller(digits, DBL_DIG);
+
+ length= (uint) my_sprintf(buff, (buff, "%-.*g", digits, nr));
+
+#ifdef __WIN__
+ /*
+ Windows always zero-pads the exponent to 3 digits, we want to remove the
+ leading 0 to match the sprintf() output on other platforms.
+ */
+ if ((exp >= (int) digits || exp < -4) && exp > -100 && exp < 100)
+ {
+ DBUG_ASSERT(length >= 6); /* 1e+NNN */
+ uint tmp= length - 3;
+ buff[tmp]= buff[tmp + 1];
+ tmp++;
+ buff[tmp]= buff[tmp + 1];
+ length--;
+ }
+#endif
+
/*
+1 below is because "precision" in %g above means the
max. number of significant digits, not the output width.
@@ -6337,6 +6534,11 @@ int Field_longstr::store_decimal(const my_decimal *d)
return store(str.ptr(), str.length(), str.charset());
}
+uint32 Field_longstr::max_data_length() const
+{
+ return field_length + (field_length > 255 ? 2 : 1);
+}
+
double Field_string::val_real(void)
{
@@ -6481,7 +6683,9 @@ void Field_string::sql_type(String &res) const
}
-uchar *Field_string::pack(uchar *to, const uchar *from, uint max_length)
+uchar *Field_string::pack(uchar *to, const uchar *from,
+ uint max_length,
+ bool low_byte_first __attribute__((unused)))
{
uint length= min(field_length,max_length);
uint local_char_length= max_length/field_charset->mbmaxlen;
@@ -6489,11 +6693,15 @@ uchar *Field_string::pack(uchar *to, const uchar *from, uint max_length)
local_char_length= my_charpos(field_charset, from, from+length,
local_char_length);
set_if_smaller(length, local_char_length);
- while (length && from[length-1] == ' ')
+ while (length && from[length-1] == field_charset->pad_char)
length--;
+
+ // Length always stored little-endian
*to++= (uchar) length;
if (field_length > 255)
*to++= (uchar) (length >> 8);
+
+ // Store the actual bytes of the string
memcpy(to, from, length);
return to+length;
}
@@ -6515,34 +6723,27 @@ uchar *Field_string::pack(uchar *to, const uchar *from, uint max_length)
@return New pointer into memory based on from + length of the data
*/
-const uchar *Field_string::unpack(uchar *to,
- const uchar *from,
- uint param_data)
-{
- uint from_len= param_data & 0x00ff; // length.
- uint length= 0;
- uint f_length;
- f_length= (from_len < field_length) ? from_len : field_length;
- DBUG_ASSERT(f_length <= 255);
- length= (uint) *from++;
- bitmap_set_bit(table->write_set,field_index);
- store((const char *)from, length, system_charset_info);
- return from+length;
-}
-
-
-const uchar *Field_string::unpack(uchar *to, const uchar *from)
-{
+const uchar *
+Field_string::unpack(uchar *to,
+ const uchar *from,
+ uint param_data,
+ bool low_byte_first __attribute__((unused)))
+{
+ uint from_length=
+ param_data ? min(param_data & 0x00ff, field_length) : field_length;
uint length;
- if (field_length > 255)
+
+ if (from_length > 255)
{
length= uint2korr(from);
from+= 2;
}
else
length= (uint) *from++;
- memcpy(to, from, (int) length);
- bfill(to+length, field_length - length, ' ');
+
+ memcpy(to, from, length);
+ // Pad the string with the pad character of the fields charset
+ bfill(to + length, field_length - length, field_charset->pad_char);
return from+length;
}
@@ -6605,18 +6806,18 @@ int Field_string::pack_cmp(const uchar *a, const uchar *b, uint length,
}
-/*
- Compare a packed key against row
+/**
+ Compare a packed key against row.
- SYNOPSIS
- pack_cmp()
- key Original key
- length Key length. (May be less than field length)
- insert_or_update 1 if this is an insert or update
+ @param key Original key
+ @param length Key length. (May be less than field length)
+ @param insert_or_update 1 if this is an insert or update
- RETURN
+ @return
< 0 row < key
+ @return
0 row = key
+ @return
> 0 row > key
*/
@@ -6732,6 +6933,7 @@ const uint Field_varstring::MAX_SIZE= UINT_MAX16;
int Field_varstring::do_save_field_metadata(uchar *metadata_ptr)
{
char *ptr= (char *)metadata_ptr;
+ DBUG_ASSERT(field_length <= 65535);
int2store(ptr, field_length);
return 2;
}
@@ -6859,8 +7061,9 @@ int Field_varstring::cmp_max(const uchar *a_ptr, const uchar *b_ptr,
}
-/*
- NOTE: varstring and blob keys are ALWAYS stored with a 2 byte length prefix
+/**
+ @note
+ varstring and blob keys are ALWAYS stored with a 2 byte length prefix
*/
int Field_varstring::key_cmp(const uchar *key_ptr, uint max_key_length)
@@ -6880,10 +7083,10 @@ int Field_varstring::key_cmp(const uchar *key_ptr, uint max_key_length)
}
-/*
- Compare to key segments (always 2 byte length prefix)
+/**
+ Compare to key segments (always 2 byte length prefix).
- NOTE
+ @note
This is used only to compare key segments created for index_read().
(keys are created and compared in key.cc)
*/
@@ -6959,22 +7162,30 @@ uint32 Field_varstring::data_length()
Here the number of length bytes are depending on the given max_length
*/
-uchar *Field_varstring::pack(uchar *to, const uchar *from, uint max_length)
+uchar *Field_varstring::pack(uchar *to, const uchar *from,
+ uint max_length,
+ bool low_byte_first __attribute__((unused)))
{
uint length= length_bytes == 1 ? (uint) *from : uint2korr(from);
set_if_smaller(max_length, field_length);
if (length > max_length)
length=max_length;
- *to++= (char) (length & 255);
+
+ /* Length always stored little-endian */
+ *to++= length & 0xFF;
if (max_length > 255)
- *to++= (char) (length >> 8);
- if (length)
+ *to++= (length >> 8) & 0xFF;
+
+ /* Store bytes of string */
+ if (length > 0)
memcpy(to, from+length_bytes, length);
return to+length;
}
-uchar *Field_varstring::pack_key(uchar *to, const uchar *key, uint max_length)
+uchar *
+Field_varstring::pack_key(uchar *to, const uchar *key, uint max_length,
+ bool low_byte_first __attribute__((unused)))
{
uint length= length_bytes == 1 ? (uint) *key : uint2korr(key);
uint local_char_length= ((field_charset->mbmaxlen > 1) ?
@@ -6995,26 +7206,24 @@ uchar *Field_varstring::pack_key(uchar *to, const uchar *key, uint max_length)
}
-/*
+/**
Unpack a key into a record buffer.
- SYNOPSIS
- unpack_key()
- to Pointer into the record buffer.
- key Pointer to the packed key.
- max_length Key length limit from key description.
+ A VARCHAR key has a maximum size of 64K-1.
+ In its packed form, the length field is one or two bytes long,
+ depending on 'max_length'.
- DESCRIPTION
- A VARCHAR key has a maximum size of 64K-1.
- In its packed form, the length field is one or two bytes long,
- depending on 'max_length'.
+ @param to Pointer into the record buffer.
+ @param key Pointer to the packed key.
+ @param max_length Key length limit from key description.
- RETURN
+ @return
Pointer to end of 'key' (To the next key part if multi-segment key)
*/
-const uchar *Field_varstring::unpack_key(uchar *to, const uchar *key,
- uint max_length)
+const uchar *
+Field_varstring::unpack_key(uchar *to, const uchar *key, uint max_length,
+ bool low_byte_first __attribute__((unused)))
{
/* get length of the blob key */
uint32 length= *key++;
@@ -7030,21 +7239,20 @@ const uchar *Field_varstring::unpack_key(uchar *to, const uchar *key,
return key + length;
}
-/*
- Create a packed key that will be used for storage in the index tree
+/**
+ Create a packed key that will be used for storage in the index tree.
- SYNOPSIS
- pack_key_from_key_image()
- to Store packed key segment here
- from Key segment (as given to index_read())
- max_length Max length of key
+ @param to Store packed key segment here
+ @param from Key segment (as given to index_read())
+ @param max_length Max length of key
- RETURN
+ @return
end of key storage
*/
-uchar *Field_varstring::pack_key_from_key_image(uchar *to, const uchar *from,
- uint max_length)
+uchar *
+Field_varstring::pack_key_from_key_image(uchar *to, const uchar *from, uint max_length,
+ bool low_byte_first __attribute__((unused)))
{
/* Key length is always stored as 2 bytes */
uint length= uint2korr(from);
@@ -7064,6 +7272,9 @@ uchar *Field_varstring::pack_key_from_key_image(uchar *to, const uchar *from,
This method is used to unpack a varstring field from a master
whose size of the field is less than that of the slave.
+
+ @note
+ The string length is always packed little-endian.
@param to Destination of the data
@param from Source of the data
@@ -7071,9 +7282,10 @@ uchar *Field_varstring::pack_key_from_key_image(uchar *to, const uchar *from,
@return New pointer into memory based on from + length of the data
*/
-const uchar *Field_varstring::unpack(uchar *to,
- const uchar *from,
- uint param_data)
+const uchar *
+Field_varstring::unpack(uchar *to, const uchar *from,
+ uint param_data,
+ bool low_byte_first __attribute__((unused)))
{
uint length;
uint l_bytes= (param_data && (param_data < field_length)) ?
@@ -7085,28 +7297,7 @@ const uchar *Field_varstring::unpack(uchar *to,
if (length_bytes == 2)
to[1]= 0;
}
- else
- {
- length= uint2korr(from);
- to[0]= *from++;
- to[1]= *from++;
- }
- if (length)
- memcpy(to+ length_bytes, from, length);
- return from+length;
-}
-
-
-/*
- unpack field packed with Field_varstring::pack()
-*/
-
-const uchar *Field_varstring::unpack(uchar *to, const uchar *from)
-{
- uint length;
- if (length_bytes == 1)
- length= (uint) (*to= *from++);
- else
+ else /* l_bytes == 2 */
{
length= uint2korr(from);
to[0]= *from++;
@@ -7355,9 +7546,9 @@ void Field_blob::store_length(uchar *i_ptr,
}
-uint32 Field_blob::get_length(const uchar *pos, bool low_byte_first)
+uint32 Field_blob::get_length(const uchar *pos, uint packlength_arg, bool low_byte_first)
{
- switch (packlength) {
+ switch (packlength_arg) {
case 1:
return (uint32) pos[0];
case 2:
@@ -7389,21 +7580,15 @@ uint32 Field_blob::get_length(const uchar *pos, bool low_byte_first)
}
-/*
+/**
Put a blob length field into a record buffer.
- SYNOPSIS
- Field_blob::put_length()
- pos Pointer into the record buffer.
- length The length value to put.
+ Depending on the maximum length of a blob, its length field is
+ put into 1 to 4 bytes. This is a property of the blob object,
+ described by 'packlength'.
- DESCRIPTION
- Depending on the maximum length of a blob, its length field is
- put into 1 to 4 bytes. This is a property of the blob object,
- described by 'packlength'.
-
- RETURN
- nothing
+ @param pos Pointer into the record buffer.
+ @param length The length value to put.
*/
void Field_blob::put_length(uchar *pos, uint32 length)
@@ -7788,26 +7973,37 @@ void Field_blob::sql_type(String &res) const
}
}
-
-uchar *Field_blob::pack(uchar *to, const uchar *from, uint max_length)
+uchar *Field_blob::pack(uchar *to, const uchar *from,
+ uint max_length, bool low_byte_first)
{
+ DBUG_ENTER("Field_blob::pack");
+ DBUG_PRINT("enter", ("to: 0x%lx; from: 0x%lx;"
+ " max_length: %u; low_byte_first: %d",
+ (ulong) to, (ulong) from,
+ max_length, low_byte_first));
+ DBUG_DUMP("record", from, table->s->reclength);
uchar *save= ptr;
ptr= (uchar*) from;
uint32 length=get_length(); // Length of from string
- if (length > max_length)
- {
- length=max_length;
- store_length(to,packlength,length,TRUE);
- }
- else
- memcpy(to,from,packlength); // Copy length
- if (length)
+
+ /*
+ Store max length, which will occupy packlength bytes. If the max
+ length given is smaller than the actual length of the blob, we
+ just store the initial bytes of the blob.
+ */
+ store_length(to, packlength, min(length, max_length), low_byte_first);
+
+ /*
+ Store the actual blob data, which will occupy 'length' bytes.
+ */
+ if (length > 0)
{
get_ptr((uchar**) &from);
memcpy(to+packlength, from,length);
}
ptr=save; // Restore org row pointer
- return to+packlength+length;
+ DBUG_DUMP("packed", to, packlength + length);
+ DBUG_RETURN(to+packlength+length);
}
@@ -7822,28 +8018,30 @@ uchar *Field_blob::pack(uchar *to, const uchar *from, uint max_length)
@param to Destination of the data
@param from Source of the data
- @param param_data not used
+ @param param_data @c TRUE if base types should be stored in little-
+ endian format, @c FALSE if native format should
+ be used.
@return New pointer into memory based on from + length of the data
*/
const uchar *Field_blob::unpack(uchar *to,
const uchar *from,
- uint param_data)
-{
- return unpack(to, from);
-}
-
-
-const uchar *Field_blob::unpack(uchar *to, const uchar *from)
-{
- uint32 length=get_length(from);
- memcpy(to,from,packlength);
- from+=packlength;
- if (length)
- memcpy_fixed(to+packlength, &from, sizeof(from));
- else
- bzero(to+packlength,sizeof(from));
- return from+length;
+ uint param_data,
+ bool low_byte_first)
+{
+ DBUG_ENTER("Field_blob::unpack");
+ DBUG_PRINT("enter", ("to: 0x%lx; from: 0x%lx;"
+ " param_data: %u; low_byte_first: %d",
+ (ulong) to, (ulong) from, param_data, low_byte_first));
+ uint const master_packlength=
+ param_data > 0 ? param_data & 0xFF : packlength;
+ uint32 const length= get_length(from, master_packlength, low_byte_first);
+ DBUG_DUMP("packed", from, length + master_packlength);
+ bitmap_set_bit(table->write_set, field_index);
+ store(reinterpret_cast<const char*>(from) + master_packlength,
+ length, field_charset);
+ DBUG_DUMP("record", to, table->s->reclength);
+ DBUG_RETURN(from + master_packlength + length);
}
/* Keys for blobs are like keys on varchars */
@@ -7891,9 +8089,11 @@ int Field_blob::pack_cmp(const uchar *b, uint key_length_arg,
insert_or_update);
}
-/* Create a packed key that will be used for storage from a MySQL row */
+/** Create a packed key that will be used for storage from a MySQL row. */
-uchar *Field_blob::pack_key(uchar *to, const uchar *from, uint max_length)
+uchar *
+Field_blob::pack_key(uchar *to, const uchar *from, uint max_length,
+ bool low_byte_first __attribute__((unused)))
{
uchar *save= ptr;
ptr= (uchar*) from;
@@ -7915,31 +8115,30 @@ uchar *Field_blob::pack_key(uchar *to, const uchar *from, uint max_length)
}
-/*
+/**
Unpack a blob key into a record buffer.
- SYNOPSIS
- Field_blob::unpack_key()
- to Pointer into the record buffer.
- from Pointer to the packed key.
- max_length Key length limit from key description.
+ A blob key has a maximum size of 64K-1.
+ In its packed form, the length field is one or two bytes long,
+ depending on 'max_length'.
+ Depending on the maximum length of a blob, its length field is
+ put into 1 to 4 bytes. This is a property of the blob object,
+ described by 'packlength'.
+ Blobs are internally stored apart from the record buffer, which
+ contains a pointer to the blob buffer.
- DESCRIPTION
- A blob key has a maximum size of 64K-1.
- In its packed form, the length field is one or two bytes long,
- depending on 'max_length'.
- Depending on the maximum length of a blob, its length field is
- put into 1 to 4 bytes. This is a property of the blob object,
- described by 'packlength'.
- Blobs are internally stored apart from the record buffer, which
- contains a pointer to the blob buffer.
- RETURN
+ @param to Pointer into the record buffer.
+ @param from Pointer to the packed key.
+ @param max_length Key length limit from key description.
+
+ @return
Pointer into 'from' past the last byte copied from packed key.
*/
-const uchar *Field_blob::unpack_key(uchar *to, const uchar *from,
- uint max_length)
+const uchar *
+Field_blob::unpack_key(uchar *to, const uchar *from, uint max_length,
+ bool low_byte_first __attribute__((unused)))
{
/* get length of the blob key */
uint32 length= *from++;
@@ -7960,10 +8159,11 @@ const uchar *Field_blob::unpack_key(uchar *to, const uchar *from,
}
-/* Create a packed key that will be used for storage from a MySQL key */
+/** Create a packed key that will be used for storage from a MySQL key. */
-uchar *Field_blob::pack_key_from_key_image(uchar *to, const uchar *from,
- uint max_length)
+uchar *
+Field_blob::pack_key_from_key_image(uchar *to, const uchar *from, uint max_length,
+ bool low_byte_first __attribute__((unused)))
{
uint length=uint2korr(from);
if (length > max_length)
@@ -8005,36 +8205,6 @@ uint Field_blob::is_equal(Create_field *new_field)
#ifdef HAVE_SPATIAL
-uint Field_geom::get_key_image(uchar *buff, uint length, imagetype type)
-{
- uchar *blob;
- const char *dummy;
- MBR mbr;
- ulong blob_length= get_length(ptr);
- Geometry_buffer buffer;
- Geometry *gobj;
- const uint image_length= SIZEOF_STORED_DOUBLE*4;
-
- if (blob_length < SRID_SIZE)
- {
- bzero(buff, image_length);
- return image_length;
- }
- get_ptr(&blob);
- gobj= Geometry::construct(&buffer, (char*) blob, blob_length);
- if (!gobj || gobj->get_mbr(&mbr, &dummy))
- bzero(buff, image_length);
- else
- {
- float8store(buff, mbr.xmin);
- float8store(buff + 8, mbr.xmax);
- float8store(buff + 16, mbr.ymin);
- float8store(buff + 24, mbr.ymax);
- }
- return image_length;
-}
-
-
void Field_geom::sql_type(String &res) const
{
CHARSET_INFO *cs= &my_charset_latin1;
@@ -8181,9 +8351,10 @@ void Field_enum::store_type(ulonglong value)
}
-/*
-** Note. Storing a empty string in a enum field gives a warning
-** (if there isn't a empty value in the enum)
+/**
+ @note
+ Storing a empty string in a enum field gives a warning
+ (if there isn't a empty value in the enum)
*/
int Field_enum::store(const char *from,uint length,CHARSET_INFO *cs)
@@ -8509,7 +8680,12 @@ void Field_set::sql_type(String &res) const
res.append(')');
}
-/* returns 1 if the fields are equally defined */
+/**
+ @retval
+ 1 if the fields are equally defined
+ @retval
+ 0 if the fields are unequally defined
+*/
bool Field::eq_def(Field *field)
{
@@ -8519,6 +8695,10 @@ bool Field::eq_def(Field *field)
return 1;
}
+/**
+ @return
+ returns 1 if the fields are equally defined
+*/
bool Field_enum::eq_def(Field *field)
{
if (!Field::eq_def(field))
@@ -8537,6 +8717,10 @@ bool Field_enum::eq_def(Field *field)
return 1;
}
+/**
+ @return
+ returns 1 if the fields are equally defined
+*/
bool Field_num::eq_def(Field *field)
{
if (!Field::eq_def(field))
@@ -8940,9 +9124,11 @@ void Field_bit::sql_type(String &res) const
}
-uchar *Field_bit::pack(uchar *to, const uchar *from, uint max_length)
+uchar *
+Field_bit::pack(uchar *to, const uchar *from, uint max_length,
+ bool low_byte_first __attribute__((unused)))
{
- DBUG_ASSERT(max_length);
+ DBUG_ASSERT(max_length > 0);
uint length;
if (bit_len > 0)
{
@@ -8977,28 +9163,44 @@ uchar *Field_bit::pack(uchar *to, const uchar *from, uint max_length)
/**
Unpack a bit field from row data.
- This method is used to unpack a bit field from a master whose size
+ This method is used to unpack a bit field from a master whose size
of the field is less than that of the slave.
-
+
@param to Destination of the data
@param from Source of the data
@param param_data Bit length (upper) and length (lower) values
@return New pointer into memory based on from + length of the data
*/
-const uchar *Field_bit::unpack(uchar *to,
- const uchar *from,
- uint param_data)
+const uchar *
+Field_bit::unpack(uchar *to, const uchar *from, uint param_data,
+ bool low_byte_first __attribute__((unused)))
{
uint const from_len= (param_data >> 8U) & 0x00ff;
uint const from_bit_len= param_data & 0x00ff;
/*
- If the master and slave have the same sizes, then use the old
- unpack() method.
+ If the parameter data is zero (i.e., undefined), or if the master
+ and slave have the same sizes, then use the old unpack() method.
*/
- if ((from_bit_len == bit_len) &&
- (from_len == bytes_in_rec))
- return(unpack(to, from));
+ if (param_data == 0 ||
+ (from_bit_len == bit_len) && (from_len == bytes_in_rec))
+ {
+ if (bit_len > 0)
+ {
+ /*
+ set_rec_bits is a macro, don't put the post-increment in the
+ argument since that might cause strange side-effects.
+
+ For the choice of the second argument, see the explanation for
+ Field_bit::pack().
+ */
+ set_rec_bits(*from, bit_ptr + (to - ptr), bit_ofs, bit_len);
+ from++;
+ }
+ memcpy(to, from, bytes_in_rec);
+ return from + bytes_in_rec;
+ }
+
/*
We are converting a smaller bit field to a larger one here.
To do that, we first need to construct a raw value for the original
@@ -9026,25 +9228,6 @@ const uchar *Field_bit::unpack(uchar *to,
}
-const uchar *Field_bit::unpack(uchar *to, const uchar *from)
-{
- if (bit_len > 0)
- {
- /*
- set_rec_bits is a macro, don't put the post-increment in the
- argument since that might cause strange side-effects.
-
- For the choice of the second argument, see the explanation for
- Field_bit::pack().
- */
- set_rec_bits(*from, bit_ptr + (to - ptr), bit_ofs, bit_len);
- from++;
- }
- memcpy(to, from, bytes_in_rec);
- return from + bytes_in_rec;
-}
-
-
void Field_bit::set_default()
{
if (bit_len > 0)
@@ -9113,14 +9296,8 @@ void Field_bit_as_char::sql_type(String &res) const
Handling of field and Create_field
*****************************************************************************/
-/*
- Convert Create_field::length from number of characters to number of bytes
-
- SYNOPSIS
- Create_field::create_length_to_internal_length()
-
- DESCRIPTION
- Convert Create_field::length from number of characters to number of bytes.
+/**
+ Convert create_field::length from number of characters to number of bytes.
*/
void Create_field::create_length_to_internal_length(void)
@@ -9170,6 +9347,9 @@ void Create_field::create_length_to_internal_length(void)
}
+/**
+ Init for a tmp table field. To be extended if need be.
+*/
void Create_field::init_for_tmp_table(enum_field_types sql_type_arg,
uint32 length_arg, uint32 decimals_arg,
bool maybe_null, bool is_unsigned)
@@ -9188,26 +9368,26 @@ void Create_field::init_for_tmp_table(enum_field_types sql_type_arg,
}
-/*
- Initialize field definition for create
-
- SYNOPSIS
- thd Thread handle
- fld_name Field name
- fld_type Field type
- fld_length Field length
- fld_decimals Decimal (if any)
- fld_type_modifier Additional type information
- fld_default_value Field default value (if any)
- fld_on_update_value The value of ON UPDATE clause
- fld_comment Field comment
- fld_change Field change
- fld_interval_list Interval list (if any)
- fld_charset Field charset
- fld_geom_type Field geometry type (if any)
-
- RETURN
+/**
+ Initialize field definition for create.
+
+ @param thd Thread handle
+ @param fld_name Field name
+ @param fld_type Field type
+ @param fld_length Field length
+ @param fld_decimals Decimal (if any)
+ @param fld_type_modifier Additional type information
+ @param fld_default_value Field default value (if any)
+ @param fld_on_update_value The value of ON UPDATE clause
+ @param fld_comment Field comment
+ @param fld_change Field change
+ @param fld_interval_list Interval list (if any)
+ @param fld_charset Field charset
+ @param fld_geom_type Field geometry type (if any)
+
+ @retval
FALSE on success
+ @retval
TRUE on error
*/
@@ -9795,7 +9975,7 @@ Field *make_field(TABLE_SHARE *share, uchar *ptr, uint32 field_length,
}
-/* Create a field suitable for create of table */
+/** Create a field suitable for create of table. */
Create_field::Create_field(Field *old_field,Field *orig_field)
{
@@ -9883,13 +10063,10 @@ Create_field::Create_field(Field *old_field,Field *orig_field)
}
-/*
- maximum possible display length for blob
-
- SYNOPSIS
- Field_blob::max_display_length()
+/**
+ maximum possible display length for blob.
- RETURN
+ @return
length
*/
@@ -9916,24 +10093,23 @@ uint32 Field_blob::max_display_length()
Warning handling
*****************************************************************************/
-/*
- Produce warning or note about data saved into field
+/**
+ Produce warning or note about data saved into field.
- SYNOPSIS
- set_warning()
- level - level of message (Note/Warning/Error)
- code - error code of message to be produced
- cuted_increment - whenever we should increase cut fields count or not
+ @param level - level of message (Note/Warning/Error)
+ @param code - error code of message to be produced
+ @param cuted_increment - whenever we should increase cut fields count or not
- NOTE
+ @note
This function won't produce warning and increase cut fields counter
if count_cuted_fields == CHECK_FIELD_IGNORE for current thread.
if count_cuted_fields == CHECK_FIELD_IGNORE then we ignore notes.
This allows us to avoid notes in optimisation, like convert_constant_item().
- RETURN VALUE
+ @retval
1 if count_cuted_fields == CHECK_FIELD_IGNORE and error level is not NOTE
+ @retval
0 otherwise
*/
@@ -9957,21 +10133,19 @@ Field::set_warning(MYSQL_ERROR::enum_warning_level level, uint code,
}
-/*
- Produce warning or note about datetime string data saved into field
-
- SYNOPSIS
- set_datime_warning()
- level - level of message (Note/Warning/Error)
- code - error code of message to be produced
- str - string value which we tried to save
- str_len - length of string which we tried to save
- ts_type - type of datetime value (datetime/date/time)
- cuted_increment - whenever we should increase cut fields count or not
-
- NOTE
- This function will always produce some warning but won't increase cut
- fields counter if count_cuted_fields == FIELD_CHECK_IGNORE for current
+/**
+ Produce warning or note about datetime string data saved into field.
+
+ @param level level of message (Note/Warning/Error)
+ @param code error code of message to be produced
+ @param str string value which we tried to save
+ @param str_length length of string which we tried to save
+ @param ts_type type of datetime value (datetime/date/time)
+ @param cuted_increment whenever we should increase cut fields count or not
+
+ @note
+ This function will always produce some warning but won't increase cut
+ fields counter if count_cuted_fields ==FIELD_CHECK_IGNORE for current
thread.
*/
@@ -9989,20 +10163,18 @@ Field::set_datetime_warning(MYSQL_ERROR::enum_warning_level level, uint code,
}
-/*
- Produce warning or note about integer datetime value saved into field
+/**
+ Produce warning or note about integer datetime value saved into field.
- SYNOPSIS
- set_warning()
- level - level of message (Note/Warning/Error)
- code - error code of message to be produced
- nr - numeric value which we tried to save
- ts_type - type of datetime value (datetime/date/time)
- cuted_increment - whenever we should increase cut fields count or not
-
- NOTE
- This function will always produce some warning but won't increase cut
- fields counter if count_cuted_fields == FIELD_CHECK_IGNORE for current
+ @param level level of message (Note/Warning/Error)
+ @param code error code of message to be produced
+ @param nr numeric value which we tried to save
+ @param ts_type type of datetime value (datetime/date/time)
+ @param cuted_increment whenever we should increase cut fields count or not
+
+ @note
+ This function will always produce some warning but won't increase cut
+ fields counter if count_cuted_fields == FIELD_CHECK_IGNORE for current
thread.
*/
@@ -10023,19 +10195,17 @@ Field::set_datetime_warning(MYSQL_ERROR::enum_warning_level level, uint code,
}
-/*
- Produce warning or note about double datetime data saved into field
+/**
+ Produce warning or note about double datetime data saved into field.
- SYNOPSIS
- set_warning()
- level - level of message (Note/Warning/Error)
- code - error code of message to be produced
- nr - double value which we tried to save
- ts_type - type of datetime value (datetime/date/time)
-
- NOTE
- This function will always produce some warning but won't increase cut
- fields counter if count_cuted_fields == FIELD_CHECK_IGNORE for current
+ @param level level of message (Note/Warning/Error)
+ @param code error code of message to be produced
+ @param nr double value which we tried to save
+ @param ts_type type of datetime value (datetime/date/time)
+
+ @note
+ This function will always produce some warning but won't increase cut
+ fields counter if count_cuted_fields == FIELD_CHECK_IGNORE for current
thread.
*/
diff --git a/sql/field.h b/sql/field.h
index 8aad6783291..a6a1d8bfabc 100644
--- a/sql/field.h
+++ b/sql/field.h
@@ -25,6 +25,7 @@
#define NOT_FIXED_DEC 31
#define DATETIME_DEC 6
+const uint32 max_field_size= (uint32) 4294967295U;
class Send_field;
class Protocol;
@@ -89,6 +90,16 @@ public:
uint32 flags;
uint16 field_index; // field number in fields array
uchar null_bit; // Bit used to test null bit
+ /**
+ If true, this field was created in create_tmp_field_from_item from a NULL
+ value. This means that the type of the field is just a guess, and the type
+ may be freely coerced to another type.
+
+ @see create_tmp_field_from_item
+ @see Item_type_holder::get_real_type
+
+ */
+ bool is_created_from_null_item;
Field(uchar *ptr_arg,uint32 length_arg,uchar *null_ptr_arg,
uchar null_bit_arg, utype unireg_check_arg,
@@ -175,6 +186,17 @@ public:
*/
virtual uint32 data_length() { return pack_length(); }
virtual uint32 sort_length() const { return pack_length(); }
+
+ /**
+ Get the maximum size of the data in packed format.
+
+ @return Maximum data length of the field when packed using the
+ Field::pack() function.
+ */
+ virtual uint32 max_data_length() const {
+ return pack_length();
+ };
+
virtual int reset(void) { bzero(ptr,pack_length()); return 0; }
virtual void reset_fields() {}
virtual void set_default()
@@ -357,32 +379,45 @@ public:
return str;
}
virtual bool send_binary(Protocol *protocol);
- virtual uchar *pack(uchar *to, const uchar *from, uint max_length=~(uint) 0)
+
+ virtual uchar *pack(uchar *to, const uchar *from,
+ uint max_length, bool low_byte_first);
+ /**
+ @overload Field::pack(uchar*, const uchar*, uint, bool)
+ */
+ uchar *pack(uchar *to, const uchar *from)
{
- uint32 length=pack_length();
- memcpy(to,from,length);
- return to+length;
+ DBUG_ENTER("Field::pack");
+ uchar *result= this->pack(to, from, UINT_MAX, table->s->db_low_byte_first);
+ DBUG_RETURN(result);
}
- virtual const uchar *unpack(uchar* to, const uchar *from, uint param_data);
- virtual const uchar *unpack(uchar* to, const uchar *from)
+
+ virtual const uchar *unpack(uchar* to, const uchar *from,
+ uint param_data, bool low_byte_first);
+ /**
+ @overload Field::unpack(uchar*, const uchar*, uint, bool)
+ */
+ const uchar *unpack(uchar* to, const uchar *from)
{
- uint length=pack_length();
- memcpy(to,from,length);
- return from+length;
+ DBUG_ENTER("Field::unpack");
+ const uchar *result= unpack(to, from, 0U, table->s->db_low_byte_first);
+ DBUG_RETURN(result);
}
- virtual uchar *pack_key(uchar* to, const uchar *from, uint max_length)
+
+ virtual uchar *pack_key(uchar* to, const uchar *from,
+ uint max_length, bool low_byte_first)
{
- return pack(to,from,max_length);
+ return pack(to, from, max_length, low_byte_first);
}
virtual uchar *pack_key_from_key_image(uchar* to, const uchar *from,
- uint max_length)
+ uint max_length, bool low_byte_first)
{
- return pack(to,from,max_length);
+ return pack(to, from, max_length, low_byte_first);
}
virtual const uchar *unpack_key(uchar* to, const uchar *from,
- uint max_length)
+ uint max_length, bool low_byte_first)
{
- return unpack(to,from);
+ return unpack(to, from, max_length, low_byte_first);
}
virtual uint packed_col_length(const uchar *to, uint length)
{ return length;}
@@ -567,6 +602,7 @@ public:
{}
int store_decimal(const my_decimal *d);
+ uint32 max_data_length() const;
};
/* base class for float and double and decimal (old one) */
@@ -587,6 +623,10 @@ public:
int truncate(double *nr, double max_length);
uint32 max_display_length() { return field_length; }
uint size_of() const { return sizeof(*this); }
+ virtual const uchar *unpack(uchar* to, const uchar *from,
+ uint param_data, bool low_byte_first);
+ virtual uchar *pack(uchar* to, const uchar *from,
+ uint max_length, bool low_byte_first);
};
@@ -615,6 +655,16 @@ public:
void overflow(bool negative);
bool zero_pack() const { return 0; }
void sql_type(String &str) const;
+ virtual const uchar *unpack(uchar* to, const uchar *from,
+ uint param_data, bool low_byte_first)
+ {
+ return Field::unpack(to, from, param_data, low_byte_first);
+ }
+ virtual uchar *pack(uchar* to, const uchar *from,
+ uint max_length, bool low_byte_first)
+ {
+ return Field::pack(to, from, max_length, low_byte_first);
+ }
};
@@ -665,7 +715,8 @@ public:
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);
+ virtual const uchar *unpack(uchar* to, const uchar *from,
+ uint param_data, bool low_byte_first);
};
@@ -696,6 +747,20 @@ public:
uint32 pack_length() const { return 1; }
void sql_type(String &str) const;
uint32 max_display_length() { return 4; }
+
+ virtual uchar *pack(uchar* to, const uchar *from,
+ uint max_length, bool low_byte_first)
+ {
+ *to= *from;
+ return to + 1;
+ }
+
+ virtual const uchar *unpack(uchar* to, const uchar *from,
+ uint param_data, bool low_byte_first)
+ {
+ *to= *from;
+ return from + 1;
+ }
};
@@ -731,8 +796,47 @@ public:
uint32 pack_length() const { return 2; }
void sql_type(String &str) const;
uint32 max_display_length() { return 6; }
-};
+ virtual uchar *pack(uchar* to, const uchar *from,
+ uint max_length, bool low_byte_first)
+ {
+ int16 val;
+#ifdef WORDS_BIGENDIAN
+ if (table->s->db_low_byte_first)
+ val = sint2korr(from);
+ else
+#endif
+ shortget(val, from);
+
+#ifdef WORDS_BIGENDIAN
+ if (low_byte_first)
+ int2store(to, val);
+ else
+#endif
+ shortstore(to, val);
+ return to + sizeof(val);
+ }
+
+ virtual const uchar *unpack(uchar* to, const uchar *from,
+ uint param_data, bool low_byte_first)
+ {
+ int16 val;
+#ifdef WORDS_BIGENDIAN
+ if (low_byte_first)
+ val = sint2korr(from);
+ else
+#endif
+ shortget(val, from);
+
+#ifdef WORDS_BIGENDIAN
+ if (table->s->db_low_byte_first)
+ int2store(to, val);
+ else
+#endif
+ shortstore(to, val);
+ return from + sizeof(val);
+ }
+};
class Field_medium :public Field_num {
public:
@@ -761,6 +865,18 @@ public:
uint32 pack_length() const { return 3; }
void sql_type(String &str) const;
uint32 max_display_length() { return 8; }
+
+ virtual uchar *pack(uchar* to, const uchar *from,
+ uint max_length, bool low_byte_first)
+ {
+ return Field::pack(to, from, max_length, low_byte_first);
+ }
+
+ virtual const uchar *unpack(uchar* to, const uchar *from,
+ uint param_data, bool low_byte_first)
+ {
+ return Field::unpack(to, from, param_data, low_byte_first);
+ }
};
@@ -796,6 +912,45 @@ public:
uint32 pack_length() const { return 4; }
void sql_type(String &str) const;
uint32 max_display_length() { return MY_INT32_NUM_DECIMAL_DIGITS; }
+ virtual uchar *pack(uchar* to, const uchar *from,
+ uint max_length, bool low_byte_first)
+ {
+ int32 val;
+#ifdef WORDS_BIGENDIAN
+ if (table->s->db_low_byte_first)
+ val = sint4korr(from);
+ else
+#endif
+ longget(val, from);
+
+#ifdef WORDS_BIGENDIAN
+ if (low_byte_first)
+ int4store(to, val);
+ else
+#endif
+ longstore(to, val);
+ return to + sizeof(val);
+ }
+
+ virtual const uchar *unpack(uchar* to, const uchar *from,
+ uint param_data, bool low_byte_first)
+ {
+ int32 val;
+#ifdef WORDS_BIGENDIAN
+ if (low_byte_first)
+ val = sint4korr(from);
+ else
+#endif
+ longget(val, from);
+
+#ifdef WORDS_BIGENDIAN
+ if (table->s->db_low_byte_first)
+ int4store(to, val);
+ else
+#endif
+ longstore(to, val);
+ return from + sizeof(val);
+ }
};
@@ -838,6 +993,45 @@ public:
void sql_type(String &str) const;
bool can_be_compared_as_longlong() const { return TRUE; }
uint32 max_display_length() { return 20; }
+ virtual uchar *pack(uchar* to, const uchar *from,
+ uint max_length, bool low_byte_first)
+ {
+ int64 val;
+#ifdef WORDS_BIGENDIAN
+ if (table->s->db_low_byte_first)
+ val = sint8korr(from);
+ else
+#endif
+ longlongget(val, from);
+
+#ifdef WORDS_BIGENDIAN
+ if (low_byte_first)
+ int8store(to, val);
+ else
+#endif
+ longlongstore(to, val);
+ return to + sizeof(val);
+ }
+
+ virtual const uchar *unpack(uchar* to, const uchar *from,
+ uint param_data, bool low_byte_first)
+ {
+ int64 val;
+#ifdef WORDS_BIGENDIAN
+ if (low_byte_first)
+ val = sint8korr(from);
+ else
+#endif
+ longlongget(val, from);
+
+#ifdef WORDS_BIGENDIAN
+ if (table->s->db_low_byte_first)
+ int8store(to, val);
+ else
+#endif
+ longlongstore(to, val);
+ return from + sizeof(val);
+ }
};
#endif
@@ -1056,6 +1250,7 @@ public:
double val_real(void);
longlong val_int(void);
String *val_str(String*,String *);
+ bool get_time(MYSQL_TIME *ltime);
bool send_binary(Protocol *protocol);
int cmp(const uchar *,const uchar *);
void sort_string(uchar *buff,uint length);
@@ -1074,6 +1269,10 @@ public:
:Field_str(ptr_arg, 10, null_ptr_arg, null_bit_arg,
unireg_check_arg, field_name_arg, cs)
{}
+ Field_newdate(bool maybe_null_arg, const char *field_name_arg,
+ CHARSET_INFO *cs)
+ :Field_str((uchar*) 0,10, maybe_null_arg ? (uchar*) "": 0,0,
+ NONE, field_name_arg, cs) {}
enum_field_types type() const { return MYSQL_TYPE_DATE;}
enum_field_types real_type() const { return MYSQL_TYPE_NEWDATE; }
enum ha_base_keytype key_type() const { return HA_KEYTYPE_UINT24; }
@@ -1218,9 +1417,10 @@ public:
int cmp(const uchar *,const uchar *);
void sort_string(uchar *buff,uint length);
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);
- const uchar *unpack(uchar* to, const uchar *from);
+ virtual uchar *pack(uchar *to, const uchar *from,
+ uint max_length, bool low_byte_first);
+ virtual const uchar *unpack(uchar* to, const uchar *from,
+ uint param_data, bool low_byte_first);
uint pack_length_from_metadata(uint field_metadata)
{ return (field_metadata & 0x00ff); }
uint row_pack_length() { return (field_length + 1); }
@@ -1298,13 +1498,15 @@ public:
uint get_key_image(uchar *buff,uint length, imagetype type);
void set_key_image(const uchar *buff,uint length);
void sql_type(String &str) const;
- uchar *pack(uchar *to, const uchar *from, uint max_length=~(uint) 0);
- uchar *pack_key(uchar *to, const uchar *from, uint max_length);
+ virtual uchar *pack(uchar *to, const uchar *from,
+ uint max_length, bool low_byte_first);
+ uchar *pack_key(uchar *to, const uchar *from, uint max_length, bool low_byte_first);
uchar *pack_key_from_key_image(uchar* to, const uchar *from,
- uint max_length);
- virtual const uchar *unpack(uchar* to, const uchar *from, uint param_data);
- const uchar *unpack(uchar* to, const uchar *from);
- const uchar *unpack_key(uchar* to, const uchar *from, uint max_length);
+ uint max_length, bool low_byte_first);
+ virtual const uchar *unpack(uchar* to, const uchar *from,
+ uint param_data, bool low_byte_first);
+ const uchar *unpack_key(uchar* to, const uchar *from,
+ uint max_length, bool low_byte_first);
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);
@@ -1397,7 +1599,7 @@ public:
{ return (uint32) (packlength); }
uint row_pack_length() { return pack_length_no_ptr(); }
uint32 sort_length() const;
- inline uint32 max_data_length() const
+ virtual uint32 max_data_length() const
{
return (uint32) (((ulonglong) 1 << (packlength*8)) -1);
}
@@ -1425,13 +1627,13 @@ public:
@returns The length in the row plus the size of the data.
*/
uint32 get_packed_size(const uchar *ptr_arg, bool low_byte_first)
- {return packlength + get_length(ptr_arg, low_byte_first);}
+ {return packlength + get_length(ptr_arg, packlength, low_byte_first);}
inline uint32 get_length(uint row_offset= 0)
- { return get_length(ptr+row_offset, table->s->db_low_byte_first); }
- uint32 get_length(const uchar *ptr, bool low_byte_first);
+ { return get_length(ptr+row_offset, this->packlength, table->s->db_low_byte_first); }
+ uint32 get_length(const uchar *ptr, uint packlength, bool low_byte_first);
uint32 get_length(const uchar *ptr_arg)
- { return get_length(ptr_arg, table->s->db_low_byte_first); }
+ { return get_length(ptr_arg, this->packlength, table->s->db_low_byte_first); }
void put_length(uchar *pos, uint32 length);
inline void get_ptr(uchar **str)
{
@@ -1472,13 +1674,16 @@ public:
memcpy_fixed(ptr+packlength,&tmp,sizeof(char*));
return 0;
}
- uchar *pack(uchar *to, const uchar *from, uint max_length= ~(uint) 0);
- uchar *pack_key(uchar *to, const uchar *from, uint max_length);
+ virtual uchar *pack(uchar *to, const uchar *from,
+ uint max_length, bool low_byte_first);
+ uchar *pack_key(uchar *to, const uchar *from,
+ uint max_length, bool low_byte_first);
uchar *pack_key_from_key_image(uchar* to, const uchar *from,
- uint max_length);
- virtual const uchar *unpack(uchar *to, const uchar *from, uint param_data);
- const uchar *unpack(uchar *to, const uchar *from);
- const uchar *unpack_key(uchar* to, const uchar *from, uint max_length);
+ uint max_length, bool low_byte_first);
+ virtual const uchar *unpack(uchar *to, const uchar *from,
+ uint param_data, bool low_byte_first);
+ const uchar *unpack_key(uchar* to, const uchar *from,
+ uint max_length, bool low_byte_first);
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);
@@ -1522,7 +1727,6 @@ public:
int store(double nr);
int store(longlong nr, bool unsigned_val);
int store_decimal(const my_decimal *);
- uint get_key_image(uchar *buff,uint length,imagetype type);
uint size_of() const { return sizeof(*this); }
int reset(void) { return !maybe_null() || Field_blob::reset(); }
geometry_type get_geometry_type() { return geom_type; };
@@ -1631,6 +1835,7 @@ public:
enum_field_types type() const { return MYSQL_TYPE_BIT; }
enum ha_base_keytype key_type() const { return HA_KEYTYPE_BIT; }
uint32 key_length() const { return (uint32) (field_length + 7) / 8; }
+ uint32 max_data_length() const { return (field_length + 7) / 8; }
uint32 max_display_length() { return field_length; }
uint size_of() const { return sizeof(*this); }
Item_result result_type () const { return INT_RESULT; }
@@ -1672,9 +1877,10 @@ public:
{ 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);
- const uchar *unpack(uchar* to, const uchar *from);
+ virtual uchar *pack(uchar *to, const uchar *from,
+ uint max_length, bool low_byte_first);
+ virtual const uchar *unpack(uchar *to, const uchar *from,
+ uint param_data, bool low_byte_first);
virtual void set_default();
Field *new_key_field(MEM_ROOT *root, struct st_table *new_table,
diff --git a/sql/field_conv.cc b/sql/field_conv.cc
index 16e27bb6cab..11d0bb9cc82 100644
--- a/sql/field_conv.cc
+++ b/sql/field_conv.cc
@@ -14,11 +14,15 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-/*
- Functions to copy data to or from fields
- This could be done with a single short function but opencoding this
- gives much more speed.
- */
+/**
+ @file
+
+ @brief
+ Functions to copy data to or from fields
+
+ This could be done with a single short function but opencoding this
+ gives much more speed.
+*/
#include "mysql_priv.h"
#include <m_ctype.h>
@@ -129,22 +133,21 @@ set_field_to_null(Field *field)
}
-/*
- Set field to NULL or TIMESTAMP or to next auto_increment number
-
- SYNOPSIS
- set_field_to_null_with_conversions()
- field Field to update
- no_conversion Set to 1 if we should return 1 if field can't
- take null values.
- If set to 0 we will do store the 'default value'
- if the field is a special field. If not we will
- give an error.
-
- RETURN VALUES
- 0 Field could take 0 or an automatic conversion was used
- -1 Field could not take NULL and no conversion was used.
- If no_conversion was not set, an error message is printed
+/**
+ Set field to NULL or TIMESTAMP or to next auto_increment number.
+
+ @param field Field to update
+ @param no_conversions Set to 1 if we should return 1 if field can't
+ take null values.
+ If set to 0 we will do store the 'default value'
+ if the field is a special field. If not we will
+ give an error.
+
+ @retval
+ 0 Field could take 0 or an automatic conversion was used
+ @retval
+ -1 Field could not take NULL and no conversion was used.
+ If no_conversion was not set, an error message is printed
*/
int
@@ -283,7 +286,7 @@ static void do_conv_blob(Copy_field *copy)
copy->tmp.charset());
}
-/* Save blob in copy->tmp for GROUP BY */
+/** Save blob in copy->tmp for GROUP BY. */
static void do_save_blob(Copy_field *copy)
{
@@ -352,9 +355,9 @@ static void do_field_decimal(Copy_field *copy)
}
-/*
+/**
string copy for single byte characters set when to string is shorter than
- from string
+ from string.
*/
static void do_cut_string(Copy_field *copy)
@@ -374,9 +377,9 @@ static void do_cut_string(Copy_field *copy)
}
-/*
+/**
string copy for multi byte characters set when to string is shorter than
- from string
+ from string.
*/
static void do_cut_string_complex(Copy_field *copy)
@@ -507,7 +510,7 @@ static void do_varstring2_mb(Copy_field *copy)
** The different functions that fills in a Copy_field class
***************************************************************************/
-/*
+/**
copy of field to maybe null string.
If field is null then the all bytes are set to 0.
if field is not null then the first byte is set to 1 and the rest of the
@@ -748,7 +751,7 @@ Copy_field::get_copy_func(Field *to,Field *from)
}
-/* Simple quick field convert that is called on insert */
+/** Simple quick field convert that is called on insert. */
int field_conv(Field *to,Field *from)
{
diff --git a/sql/filesort.cc b/sql/filesort.cc
index b6a5d844eac..ac731616218 100644
--- a/sql/filesort.cc
+++ b/sql/filesort.cc
@@ -14,7 +14,12 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-/* Sorts a database */
+/**
+ @file
+
+ @brief
+ Sorts a database
+*/
#include "mysql_priv.h"
#ifdef HAVE_STDDEF_H
@@ -27,8 +32,7 @@
#define SKIP_DBUG_IN_FILESORT
#endif
- /* How to write record_ref. */
-
+/// How to write record_ref.
#define WRITE_REF(file,from) \
if (my_b_write((file),(uchar*) (from),param->ref_length)) \
DBUG_RETURN(1);
@@ -37,7 +41,8 @@ if (my_b_write((file),(uchar*) (from),param->ref_length)) \
static char **make_char_array(char **old_pos, register uint fields,
uint length, myf my_flag);
-static BUFFPEK *read_buffpek_from_file(IO_CACHE *buffer_file, uint count);
+static uchar *read_buffpek_from_file(IO_CACHE *buffer_file, uint count,
+ uchar *buf);
static ha_rows find_all_keys(SORTPARAM *param,SQL_SELECT *select,
uchar * *sort_keys, IO_CACHE *buffer_file,
IO_CACHE *tempfile,IO_CACHE *indexfile);
@@ -58,42 +63,40 @@ static SORT_ADDON_FIELD *get_addon_fields(THD *thd, Field **ptabfield,
uint sortlength, uint *plength);
static void unpack_addon_fields(struct st_sort_addon_field *addon_field,
uchar *buff);
-
-/*
- Sort a table
-
- SYNOPSIS
- filesort()
- table Table to sort
- sortorder How to sort the table
- s_length Number of elements in sortorder
- select Condition to apply to the rows
- ha_maxrows Return only this many rows
- sort_positions Set to 1 if we want to force sorting by position
+/**
+ Sort a table.
+ Creates a set of pointers that can be used to read the rows
+ in sorted order. This should be done with the functions
+ in records.cc.
+
+ Before calling filesort, one must have done
+ table->file->info(HA_STATUS_VARIABLE)
+
+ The result set is stored in table->io_cache or
+ table->record_pointers.
+
+ @param thd Current thread
+ @param table Table to sort
+ @param sortorder How to sort the table
+ @param s_length Number of elements in sortorder
+ @param select condition to apply to the rows
+ @param max_rows Return only this many rows
+ @param sort_positions Set to 1 if we want to force sorting by position
(Needed by UPDATE/INSERT or ALTER TABLE)
- examined_rows Store number of examined rows here
+ @param examined_rows Store number of examined rows here
- IMPLEMENTATION
- Creates a set of pointers that can be used to read the rows
- in sorted order. This should be done with the functions
- in records.cc
-
- REQUIREMENTS
- Before calling filesort, one must have done
- table->file->info(HA_STATUS_VARIABLE)
-
- NOTES
+ @todo
+ check why we do this (param.keys--)
+ @note
If we sort by position (like if sort_positions is 1) filesort() will
call table->prepare_for_position().
- RETURN
+ @retval
HA_POS_ERROR Error
- # Number of rows
-
+ @retval
+ \# Number of rows
+ @retval
examined_rows will be set to number of examined rows
-
- The result set is stored in table->io_cache or
- table->record_pointers
*/
ha_rows filesort(THD *thd, TABLE *table, SORT_FIELD *sortorder, uint s_length,
@@ -117,6 +120,13 @@ ha_rows filesort(THD *thd, TABLE *table, SORT_FIELD *sortorder, uint s_length,
FILESORT_INFO table_sort;
TABLE_LIST *tab= table->pos_in_table_list;
Item_subselect *subselect= tab ? tab->containing_subselect() : 0;
+
+ /*
+ Release InnoDB's adaptive hash index latch (if holding) before
+ running a sort.
+ */
+ ha_release_temporary_latches(thd);
+
/*
Don't use table->sort in filesort as it is also used by
QUICK_INDEX_MERGE_SELECT. Work with a copy and put it back at the end
@@ -244,9 +254,14 @@ ha_rows filesort(THD *thd, TABLE *table, SORT_FIELD *sortorder, uint s_length,
}
else
{
- if (!table_sort.buffpek && table_sort.buffpek_len < maxbuffer &&
- !(table_sort.buffpek=
- (uchar *) read_buffpek_from_file(&buffpek_pointers, maxbuffer)))
+ if (table_sort.buffpek && table_sort.buffpek_len < maxbuffer)
+ {
+ x_free(table_sort.buffpek);
+ table_sort.buffpek= 0;
+ }
+ if (!(table_sort.buffpek=
+ (uchar *) read_buffpek_from_file(&buffpek_pointers, maxbuffer,
+ table_sort.buffpek)))
goto err;
buffpek= (BUFFPEK *) table_sort.buffpek;
table_sort.buffpek_len= maxbuffer;
@@ -351,7 +366,7 @@ void filesort_free_buffers(TABLE *table, bool full)
}
}
- /* Make a array of string pointers */
+/** Make a array of string pointers. */
static char **make_char_array(char **old_pos, register uint fields,
uint length, myf my_flag)
@@ -372,16 +387,18 @@ static char **make_char_array(char **old_pos, register uint fields,
} /* make_char_array */
-/* Read 'count' number of buffer pointers into memory */
+/** Read 'count' number of buffer pointers into memory. */
-static BUFFPEK *read_buffpek_from_file(IO_CACHE *buffpek_pointers, uint count)
+static uchar *read_buffpek_from_file(IO_CACHE *buffpek_pointers, uint count,
+ uchar *buf)
{
- ulong length;
- BUFFPEK *tmp;
+ ulong length= sizeof(BUFFPEK)*count;
+ uchar *tmp= buf;
DBUG_ENTER("read_buffpek_from_file");
if (count > UINT_MAX/sizeof(BUFFPEK))
return 0; /* sizeof(BUFFPEK)*count will overflow */
- tmp=(BUFFPEK*) my_malloc(length=sizeof(BUFFPEK)*count, MYF(MY_WME));
+ if (!tmp)
+ tmp= (uchar *)my_malloc(length, MYF(MY_WME));
if (tmp)
{
if (reinit_io_cache(buffpek_pointers,READ_CACHE,0L,0,0) ||
@@ -395,38 +412,40 @@ static BUFFPEK *read_buffpek_from_file(IO_CACHE *buffpek_pointers, uint count)
}
-/*
+/**
Search after sort_keys and write them into tempfile.
- SYNOPSIS
- find_all_keys()
- param Sorting parameter
- select Use this to get source data
- sort_keys Array of pointers to sort key + addon buffers.
- buffpek_pointers File to write BUFFPEKs describing sorted segments
- in tempfile.
- tempfile File to write sorted sequences of sortkeys to.
- indexfile If !NULL, use it for source data (contains rowids)
-
- NOTE
+ All produced sequences are guaranteed to be non-empty.
+
+ @param param Sorting parameter
+ @param select Use this to get source data
+ @param sort_keys Array of pointers to sort key + addon buffers.
+ @param buffpek_pointers File to write BUFFPEKs describing sorted segments
+ in tempfile.
+ @param tempfile File to write sorted sequences of sortkeys to.
+ @param indexfile If !NULL, use it for source data (contains rowids)
+
+ @note
Basic idea:
- while (get_next_sortkey())
- {
- if (no free space in sort_keys buffers)
- {
- sort sort_keys buffer;
- dump sorted sequence to 'tempfile';
- dump BUFFPEK describing sequence location into 'buffpek_pointers';
- }
- put sort key into 'sort_keys';
- }
- if (sort_keys has some elements && dumped at least once)
- sort-dump-dump as above;
- else
- don't sort, leave sort_keys array to be sorted by caller.
-
- All produced sequences are guaranteed to be non-empty.
- RETURN
+ @verbatim
+ while (get_next_sortkey())
+ {
+ if (no free space in sort_keys buffers)
+ {
+ sort sort_keys buffer;
+ dump sorted sequence to 'tempfile';
+ dump BUFFPEK describing sequence location into 'buffpek_pointers';
+ }
+ put sort key into 'sort_keys';
+ }
+ if (sort_keys has some elements && dumped at least once)
+ sort-dump-dump as above;
+ else
+ don't sort, leave sort_keys array to be sorted by caller.
+ @endverbatim
+
+ @retval
Number of records written on success.
+ @retval
HA_POS_ERROR on error.
*/
@@ -555,8 +574,8 @@ static ha_rows find_all_keys(SORTPARAM *param, SQL_SELECT *select,
else
file->unlock_row();
/* It does not make sense to read more keys in case of a fatal error */
- if (thd->net.report_error)
- DBUG_RETURN(HA_POS_ERROR);
+ if (thd->is_error())
+ break;
}
if (quick_select)
{
@@ -573,6 +592,9 @@ static ha_rows find_all_keys(SORTPARAM *param, SQL_SELECT *select,
file->ha_rnd_end();
}
+ if (thd->is_error())
+ DBUG_RETURN(HA_POS_ERROR);
+
/* Signal we should use orignal column read and write maps */
sort_form->column_bitmaps_set(save_read_set, save_write_set);
@@ -591,23 +613,25 @@ static ha_rows find_all_keys(SORTPARAM *param, SQL_SELECT *select,
} /* find_all_keys */
-/*
+/**
+ @details
Sort the buffer and write:
- 1) the sorted sequence to tempfile
- 2) a BUFFPEK describing the sorted sequence position to buffpek_pointers
- (was: Skriver en buffert med nycklar till filen)
- SYNOPSIS
- write_keys()
- param Sort parameters
- sort_keys Array of pointers to keys to sort
- count Number of elements in sort_keys array
- buffpek_pointers One 'BUFFPEK' struct will be written into this file.
- The BUFFPEK::{file_pos, count} will indicate where
- the sorted data was stored.
- tempfile The sorted sequence will be written into this file.
-
- RETURN
+ -# the sorted sequence to tempfile
+ -# a BUFFPEK describing the sorted sequence position to buffpek_pointers
+
+ (was: Skriver en buffert med nycklar till filen)
+
+ @param param Sort parameters
+ @param sort_keys Array of pointers to keys to sort
+ @param count Number of elements in sort_keys array
+ @param buffpek_pointers One 'BUFFPEK' struct will be written into this file.
+ The BUFFPEK::{file_pos, count} will indicate where
+ the sorted data was stored.
+ @param tempfile The sorted sequence will be written into this file.
+
+ @retval
0 OK
+ @retval
1 Error
*/
@@ -650,8 +674,8 @@ err:
} /* write_keys */
-/*
- Store length as suffix in high-byte-first order
+/**
+ Store length as suffix in high-byte-first order.
*/
static inline void store_length(uchar *to, uint length, uint pack_length)
@@ -673,7 +697,7 @@ static inline void store_length(uchar *to, uint length, uint pack_length)
}
- /* makes a sort-key from record */
+/** Make a sort-key from record. */
static void make_sortkey(register SORTPARAM *param,
register uchar *to, uchar *ref_pos)
@@ -987,7 +1011,7 @@ static bool save_index(SORTPARAM *param, uchar **sort_keys, uint count,
}
- /* Merge buffers to make < MERGEBUFF2 buffers */
+/** Merge buffers to make < MERGEBUFF2 buffers. */
int merge_many_buff(SORTPARAM *param, uchar *sort_buffer,
BUFFPEK *buffpek, uint *maxbuffer, IO_CACHE *t_file)
@@ -1040,8 +1064,12 @@ cleanup:
} /* merge_many_buff */
- /* Read data to buffer */
- /* This returns (uint) -1 if something goes wrong */
+/**
+ Read data to buffer.
+
+ @retval
+ (uint)-1 if something goes wrong
+*/
uint read_to_buffer(IO_CACHE *fromfile, BUFFPEK *buffpek,
uint rec_length)
@@ -1063,15 +1091,15 @@ uint read_to_buffer(IO_CACHE *fromfile, BUFFPEK *buffpek,
} /* read_to_buffer */
-/*
- Put all room used by freed buffer to use in adjacent buffer. Note, that
- we can't simply distribute memory evenly between all buffers, because
- new areas must not overlap with old ones.
- SYNOPSIS
- reuse_freed_buff()
- queue IN list of non-empty buffers, without freed buffer
- reuse IN empty buffer
- key_length IN key length
+/**
+ Put all room used by freed buffer to use in adjacent buffer.
+
+ Note, that we can't simply distribute memory evenly between all buffers,
+ because new areas must not overlap with old ones.
+
+ @param[in] queue list of non-empty buffers, without freed buffer
+ @param[in] reuse empty buffer
+ @param[in] key_length key length
*/
void reuse_freed_buff(QUEUE *queue, BUFFPEK *reuse, uint key_length)
@@ -1096,22 +1124,22 @@ void reuse_freed_buff(QUEUE *queue, BUFFPEK *reuse, uint key_length)
}
-/*
- Merge buffers to one buffer
- SYNOPSIS
- merge_buffers()
- param Sort parameter
- from_file File with source data (BUFFPEKs point to this file)
- to_file File to write the sorted result data.
- sort_buffer Buffer for data to store up to MERGEBUFF2 sort keys.
- lastbuff OUT Store here BUFFPEK describing data written to to_file
- Fb First element in source BUFFPEKs array
- Tb Last element in source BUFFPEKs array
- flag
-
- RETURN
- 0 - OK
- other - error
+/**
+ Merge buffers to one buffer.
+
+ @param param Sort parameter
+ @param from_file File with source data (BUFFPEKs point to this file)
+ @param to_file File to write the sorted result data.
+ @param sort_buffer Buffer for data to store up to MERGEBUFF2 sort keys.
+ @param lastbuff OUT Store here BUFFPEK describing data written to to_file
+ @param Fb First element in source BUFFPEKs array
+ @param Tb Last element in source BUFFPEKs array
+ @param flag
+
+ @retval
+ 0 OK
+ @retval
+ other error
*/
int merge_buffers(SORTPARAM *param, IO_CACHE *from_file,
@@ -1347,23 +1375,21 @@ static uint suffix_length(ulong string_length)
-/*
- Calculate length of sort key
-
- SYNOPSIS
- sortlength()
- thd Thread handler
- sortorder Order of items to sort
- uint s_length Number of items to sort
- multi_byte_charset (out)
- Set to 1 if we are using multi-byte charset
- (In which case we have to use strxnfrm())
-
- NOTES
- sortorder->length is updated for each sort item
+/**
+ Calculate length of sort key.
+
+ @param thd Thread handler
+ @param sortorder Order of items to sort
+ @param s_length Number of items to sort
+ @param[out] multi_byte_charset Set to 1 if we are using multi-byte charset
+ (In which case we have to use strxnfrm())
+
+ @note
+ sortorder->length is updated for each sort item.
+ @n
sortorder->need_strxnfrm is set 1 if we have to use strxnfrm
- RETURN
+ @return
Total length of sort buffer in bytes
*/
@@ -1450,33 +1476,31 @@ sortlength(THD *thd, SORT_FIELD *sortorder, uint s_length,
}
-/*
+/**
Get descriptors of fields appended to sorted fields and
- calculate its total length
-
- SYNOPSIS
- get_addon_fields()
- thd Current thread
- ptabfields Array of references to the table fields
- sortlength Total length of sorted fields
- plength out: Total length of appended fields
-
- DESCRIPTION
- The function first finds out what fields are used in the result set.
- Then it calculates the length of the buffer to store the values of
- these fields together with the value of sort values.
- If the calculated length is not greater than max_length_for_sort_data
- the function allocates memory for an array of descriptors containing
- layouts for the values of the non-sorted fields in the buffer and
- fills them.
-
- NOTES
+ calculate its total length.
+
+ The function first finds out what fields are used in the result set.
+ Then it calculates the length of the buffer to store the values of
+ these fields together with the value of sort values.
+ If the calculated length is not greater than max_length_for_sort_data
+ the function allocates memory for an array of descriptors containing
+ layouts for the values of the non-sorted fields in the buffer and
+ fills them.
+
+ @param thd Current thread
+ @param ptabfield Array of references to the table fields
+ @param sortlength Total length of sorted fields
+ @param[out] plength Total length of appended fields
+
+ @note
The null bits for the appended values are supposed to be put together
and stored the buffer just ahead of the value of the first field.
- RETURN
+ @return
Pointer to the layout descriptors for the appended fields, if any
- NULL - if we do not store field values with sort data.
+ @retval
+ NULL if we do not store field values with sort data.
*/
static SORT_ADDON_FIELD *
@@ -1552,20 +1576,18 @@ get_addon_fields(THD *thd, Field **ptabfield, uint sortlength, uint *plength)
}
-/*
- Copy (unpack) values appended to sorted fields from a buffer back to
+/**
+ Copy (unpack) values appended to sorted fields from a buffer back to
their regular positions specified by the Field::ptr pointers.
- SYNOPSIS
- unpack_addon_fields()
- addon_field Array of descriptors for appended fields
- buff Buffer which to unpack the value from
+ @param addon_field Array of descriptors for appended fields
+ @param buff Buffer which to unpack the value from
- NOTES
+ @note
The function is supposed to be used only as a callback function
when getting field values for the sorted result set.
- RETURN
+ @return
void.
*/
diff --git a/sql/gen_lex_hash.cc b/sql/gen_lex_hash.cc
index 36b7f30dc64..c9c1813a429 100644
--- a/sql/gen_lex_hash.cc
+++ b/sql/gen_lex_hash.cc
@@ -13,8 +13,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
+ @details
+@verbatim
The idea of presented algorithm see in
"The Art of Computer Programming" by Donald E. Knuth
Volume 3 "Sorting and searching"
@@ -63,12 +66,14 @@ for optimization, link is the 16-bit index in 'symbols' or 'sql_functions'
or search-array..
So, we can read full search-structure as 32-bit word
+@endverbatim
+
+@todo
+ use instead to_upper_lex, special array
+ (substitute chars) without skip codes..
+@todo
+ try use reverse order of comparing..
-TODO:
-1. use instead to_upper_lex, special array
- (substitute chars) without skip codes..
-2. try use reverse order of comparing..
-
*/
#define NO_YACC_SYMBOLS
diff --git a/sql/gstream.cc b/sql/gstream.cc
index 46e12b6ef3b..0c8011549f3 100644
--- a/sql/gstream.cc
+++ b/sql/gstream.cc
@@ -44,7 +44,7 @@ bool Gis_read_stream::get_next_word(LEX_STRING *res)
skip_space();
res->str= (char*) m_cur;
/* The following will also test for \0 */
- if (!my_isvar_start(&my_charset_bin, *m_cur))
+ if ((m_cur >= m_limit) || !my_isvar_start(&my_charset_bin, *m_cur))
return 1;
/*
diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc
index b2152fbb906..441da21bf1c 100644
--- a/sql/ha_ndbcluster.cc
+++ b/sql/ha_ndbcluster.cc
@@ -14,9 +14,12 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-/*
- This file defines the NDB Cluster handler: the interface between MySQL and
- NDB Cluster
+/**
+ @file
+
+ @brief
+ This file defines the NDB Cluster handler: the interface between
+ MySQL and NDB Cluster
*/
#ifdef USE_PRAGMA_IMPLEMENTATION
@@ -140,10 +143,10 @@ static Ndb* g_ndb= NULL;
Ndb_cluster_connection* g_ndb_cluster_connection= NULL;
uchar g_node_id_map[max_ndb_nodes];
-// Handler synchronization
+/// Handler synchronization
pthread_mutex_t ndbcluster_mutex;
-// Table lock handling
+/// Table lock handling
HASH ndbcluster_open_tables;
static uchar *ndbcluster_get_key(NDB_SHARE *share, size_t *length,
@@ -164,14 +167,14 @@ pthread_cond_t COND_ndb_util_ready;
pthread_handler_t ndb_util_thread_func(void *arg);
ulong ndb_cache_check_time;
-/*
+/**
Dummy buffer to read zero pack_length fields
- which are mapped to 1 char
+ which are mapped to 1 char.
*/
static uint32 dummy_buf;
-/*
- Stats that can be retrieved from ndb
+/**
+ Stats that can be retrieved from ndb.
*/
struct Ndb_statistics {
@@ -325,9 +328,9 @@ Thd_ndb::Thd_ndb()
{
ndb= new Ndb(g_ndb_cluster_connection, "");
lock_count= 0;
+ start_stmt_count= 0;
count= 0;
- all= NULL;
- stmt= NULL;
+ trans= NULL;
m_error= FALSE;
m_error_code= 0;
query_state&= NDB_QUERY_NORMAL;
@@ -382,6 +385,11 @@ Thd_ndb::get_open_table(THD *thd, const void *key)
{
thd_ndb_share= (THD_NDB_SHARE *) alloc_root(&thd->transaction.mem_root,
sizeof(THD_NDB_SHARE));
+ if (!thd_ndb_share)
+ {
+ mem_alloc_error(sizeof(THD_NDB_SHARE));
+ DBUG_RETURN(NULL);
+ }
thd_ndb_share->key= key;
thd_ndb_share->stat.last_count= count;
thd_ndb_share->stat.no_uncommitted_rows_count= 0;
@@ -572,7 +580,7 @@ int ha_ndbcluster::ndb_err(NdbTransaction *trans)
bzero((char*) &table_list,sizeof(table_list));
table_list.db= m_dbname;
table_list.alias= table_list.table_name= m_tabname;
- close_cached_tables(thd, 0, &table_list);
+ close_cached_tables(thd, &table_list, FALSE, FALSE, FALSE);
break;
}
default:
@@ -583,6 +591,24 @@ int ha_ndbcluster::ndb_err(NdbTransaction *trans)
err.code, res));
if (res == HA_ERR_FOUND_DUPP_KEY)
{
+ char *error_data= err.details;
+ uint dupkey= MAX_KEY;
+
+ for (uint i= 0; i < MAX_KEY; i++)
+ {
+ if (m_index[i].type == UNIQUE_INDEX ||
+ m_index[i].type == UNIQUE_ORDERED_INDEX)
+ {
+ const NDBINDEX *unique_index=
+ (const NDBINDEX *) m_index[i].unique_index;
+ if (unique_index &&
+ (char *) unique_index->getObjectId() == error_data)
+ {
+ dupkey= i;
+ break;
+ }
+ }
+ }
if (m_rows_to_insert == 1)
{
/*
@@ -590,7 +616,7 @@ int ha_ndbcluster::ndb_err(NdbTransaction *trans)
violations here, so we need to return MAX_KEY for non-primary
to signal that key is unknown
*/
- m_dupkey= err.code == 630 ? table_share->primary_key : MAX_KEY;
+ m_dupkey= err.code == 630 ? table_share->primary_key : dupkey;
}
else
{
@@ -602,10 +628,10 @@ int ha_ndbcluster::ndb_err(NdbTransaction *trans)
}
-/*
+/**
Override the default get_error_message in order to add the
- error message of NDB
- */
+ error message of NDB .
+*/
bool ha_ndbcluster::get_error_message(int error,
String *buf)
@@ -613,7 +639,7 @@ bool ha_ndbcluster::get_error_message(int error,
DBUG_ENTER("ha_ndbcluster::get_error_message");
DBUG_PRINT("enter", ("error: %d", error));
- Ndb *ndb= get_ndb();
+ Ndb *ndb= check_ndb_in_thd(current_thd);
if (!ndb)
DBUG_RETURN(FALSE);
@@ -626,7 +652,7 @@ bool ha_ndbcluster::get_error_message(int error,
#ifndef DBUG_OFF
-/*
+/**
Check if type is supported by NDB.
*/
@@ -668,8 +694,8 @@ static bool ndb_supported_type(enum_field_types type)
#endif /* !DBUG_OFF */
-/*
- Check if MySQL field type forces var part in ndb storage
+/**
+ Check if MySQL field type forces var part in ndb storage.
*/
static bool field_type_forces_var_part(enum_field_types type)
{
@@ -688,8 +714,8 @@ static bool field_type_forces_var_part(enum_field_types type)
}
}
-/*
- Instruct NDB to set the value of the hidden primary key
+/**
+ Instruct NDB to set the value of the hidden primary key.
*/
bool ha_ndbcluster::set_hidden_key(NdbOperation *ndb_op,
@@ -700,8 +726,8 @@ bool ha_ndbcluster::set_hidden_key(NdbOperation *ndb_op,
}
-/*
- Instruct NDB to set the value of one primary key attribute
+/**
+ Instruct NDB to set the value of one primary key attribute.
*/
int ha_ndbcluster::set_ndb_key(NdbOperation *ndb_op, Field *field,
@@ -721,8 +747,8 @@ int ha_ndbcluster::set_ndb_key(NdbOperation *ndb_op, Field *field,
}
-/*
- Instruct NDB to set the value of one attribute
+/**
+ Instruct NDB to set the value of one attribute.
*/
int ha_ndbcluster::set_ndb_value(NdbOperation *ndb_op, Field *field,
@@ -817,7 +843,9 @@ int ha_ndbcluster::set_ndb_value(NdbOperation *ndb_op, Field *field,
}
-/*
+NdbBlob::ActiveHook g_get_ndb_blobs_value;
+
+/**
Callback to read all blob values.
- not done in unpack_record because unpack_record is valid
after execute(Commit) but reading blobs is not
@@ -825,11 +853,11 @@ int ha_ndbcluster::set_ndb_value(NdbOperation *ndb_op, Field *field,
somewhere before the data is available
- due to single buffer for all blobs, we let the last blob
process all blobs (last so that all are active)
- - null bit is still set in unpack_record
- - TODO allocate blob part aligned buffers
-*/
+ - null bit is still set in unpack_record.
-NdbBlob::ActiveHook g_get_ndb_blobs_value;
+ @todo
+ allocate blob part aligned buffers
+*/
int g_get_ndb_blobs_value(NdbBlob *ndb_blob, void *arg)
{
@@ -925,10 +953,11 @@ int get_ndb_blobs_value(TABLE* table, NdbValue* value_array,
}
-/*
- Instruct NDB to fetch one field
- - data is read directly into buffer provided by field
- if field is NULL, data is read into memory provided by NDBAPI
+/**
+ Instruct NDB to fetch one field.
+
+ Data is read directly into buffer provided by field
+ if field is NULL, data is read into memory provided by NDBAPI.
*/
int ha_ndbcluster::get_ndb_value(NdbOperation *ndb_op, Field *field,
@@ -990,7 +1019,7 @@ int ha_ndbcluster::get_ndb_partition_id(NdbOperation *ndb_op)
(char *)&m_part_id) == NULL);
}
-/*
+/**
Check if any set or get of blob value in current query.
*/
@@ -1013,15 +1042,15 @@ bool ha_ndbcluster::uses_blob_value()
}
-/*
- Get metadata for this table from NDB
+/**
+ Get metadata for this table from NDB.
- IMPLEMENTATION
- - check that frm-file on disk is equal to frm-file
- of table accessed in NDB
+ Check that frm-file on disk is equal to frm-file
+ of table accessed in NDB.
- RETURN
+ @retval
0 ok
+ @retval
-2 Meta data has changed; Re-read data and try again
*/
@@ -1419,9 +1448,9 @@ int ha_ndbcluster::drop_indexes(Ndb *ndb, TABLE *tab)
DBUG_RETURN(error);
}
-/*
+/**
Decode the type of an index from information
- provided in table object
+ provided in table object.
*/
NDB_INDEX_TYPE ha_ndbcluster::get_index_type_from_table(uint inx) const
{
@@ -1563,10 +1592,10 @@ inline bool ha_ndbcluster::has_null_in_unique_index(uint idx_no) const
}
-/*
- Get the flags for an index
+/**
+ Get the flags for an index.
- RETURN
+ @return
flags depending on the type of the index.
*/
@@ -1638,6 +1667,26 @@ int ha_ndbcluster::set_primary_key_from_record(NdbOperation *op, const uchar *re
DBUG_RETURN(0);
}
+bool ha_ndbcluster::check_index_fields_in_write_set(uint keyno)
+{
+ KEY* key_info= table->key_info + keyno;
+ KEY_PART_INFO* key_part= key_info->key_part;
+ KEY_PART_INFO* end= key_part+key_info->key_parts;
+ uint i;
+ DBUG_ENTER("check_index_fields_in_write_set");
+
+ for (i= 0; key_part != end; key_part++, i++)
+ {
+ Field* field= key_part->field;
+ if (!bitmap_is_set(table->write_set, field->field_index))
+ {
+ DBUG_RETURN(false);
+ }
+ }
+
+ DBUG_RETURN(true);
+}
+
int ha_ndbcluster::set_index_key_from_record(NdbOperation *op,
const uchar *record, uint keyno)
{
@@ -1719,8 +1768,8 @@ int ha_ndbcluster::define_read_attrs(uchar* buf, NdbOperation* op)
}
-/*
- Read one record from NDB using primary key
+/**
+ Read one record from NDB using primary key.
*/
int ha_ndbcluster::pk_read(const uchar *key, uint key_len, uchar *buf,
@@ -1787,9 +1836,9 @@ int ha_ndbcluster::pk_read(const uchar *key, uint key_len, uchar *buf,
DBUG_RETURN(0);
}
-/*
+/**
Read one complementing record from NDB using primary key from old_data
- or hidden key
+ or hidden key.
*/
int ha_ndbcluster::complemented_read(const uchar *old_data, uchar *new_data,
@@ -1850,7 +1899,7 @@ int ha_ndbcluster::complemented_read(const uchar *old_data, uchar *new_data,
unpack_record(new_data);
table->status= 0;
- /**
+ /*
* restore m_value
*/
for (i= 0; i < no_fields; i++)
@@ -1866,12 +1915,12 @@ int ha_ndbcluster::complemented_read(const uchar *old_data, uchar *new_data,
DBUG_RETURN(0);
}
-/*
- * Check that all operations between first and last all
- * have gotten the errcode
- * If checking for HA_ERR_KEY_NOT_FOUND then update m_dupkey
- * for all succeeding operations
- */
+/**
+ Check that all operations between first and last all
+ have gotten the errcode
+ If checking for HA_ERR_KEY_NOT_FOUND then update m_dupkey
+ for all succeeding operations
+*/
bool ha_ndbcluster::check_all_operations_for_error(NdbTransaction *trans,
const NdbOperation *first,
const NdbOperation *last,
@@ -1951,13 +2000,13 @@ check_null_in_record(const KEY* key_info, const uchar *record)
*/
}
-/*
- * Peek to check if any rows already exist with conflicting
- * primary key or unique index values
+/**
+ Peek to check if any rows already exist with conflicting
+ primary key or unique index values
*/
-int ha_ndbcluster::peek_indexed_rows(const uchar *record,
- bool check_pk)
+int ha_ndbcluster::peek_indexed_rows(const uchar *record,
+ NDB_WRITE_OP write_op)
{
NdbTransaction *trans= m_active_trans;
NdbOperation *op;
@@ -1969,7 +2018,7 @@ int ha_ndbcluster::peek_indexed_rows(const uchar *record,
NdbOperation::LockMode lm=
(NdbOperation::LockMode)get_ndb_lock_type(m_lock.type);
first= NULL;
- if (check_pk && table->s->primary_key != MAX_KEY)
+ if (write_op != NDB_UPDATE && table->s->primary_key != MAX_KEY)
{
/*
* Fetch any row with colliding primary key
@@ -2019,6 +2068,11 @@ int ha_ndbcluster::peek_indexed_rows(const uchar *record,
DBUG_PRINT("info", ("skipping check for key with NULL"));
continue;
}
+ if (write_op != NDB_INSERT && !check_index_fields_in_write_set(i))
+ {
+ DBUG_PRINT("info", ("skipping check for key %u not in write_set", i));
+ continue;
+ }
NdbIndexOperation *iop;
const NDBINDEX *unique_index = m_index[i].unique_index;
key_part= key_info->key_part;
@@ -2056,8 +2110,8 @@ int ha_ndbcluster::peek_indexed_rows(const uchar *record,
}
-/*
- Read one record from NDB using unique secondary index
+/**
+ Read one record from NDB using unique secondary index.
*/
int ha_ndbcluster::unique_index_read(const uchar *key,
@@ -2199,15 +2253,14 @@ inline int ha_ndbcluster::fetch_next(NdbScanOperation* cursor)
DBUG_RETURN(1);
}
-/*
+/**
Get the next record of a started scan. Try to fetch
it locally from NdbApi cached records if possible,
otherwise ask NDB for more.
- NOTE
- If this is a update/delete make sure to not contact
- NDB before any pending ops have been sent to NDB.
-
+ @note
+ If this is a update/delete make sure to not contact
+ NDB before any pending ops have been sent to NDB.
*/
inline int ha_ndbcluster::next_result(uchar *buf)
@@ -2240,7 +2293,7 @@ inline int ha_ndbcluster::next_result(uchar *buf)
}
}
-/*
+/**
Set bounds for ordered index scan.
*/
@@ -2421,8 +2474,8 @@ int ha_ndbcluster::set_bounds(NdbIndexScanOperation *op,
DBUG_RETURN(op->end_of_bound(range_no));
}
-/*
- Start ordered index scan in NDB
+/**
+ Start ordered index scan in NDB.
*/
int ha_ndbcluster::ordered_index_scan(const key_range *start_key,
@@ -2606,10 +2659,9 @@ int ha_ndbcluster::unique_index_scan(const KEY* key_info,
}
-/*
- Start full table scan in NDB
- */
-
+/**
+ Start full table scan in NDB.
+*/
int ha_ndbcluster::full_table_scan(uchar *buf)
{
int res;
@@ -2674,8 +2726,31 @@ int ha_ndbcluster::full_table_scan(uchar *buf)
DBUG_RETURN(next_result(buf));
}
-/*
- Insert one record into NDB
+int
+ha_ndbcluster::set_auto_inc(Field *field)
+{
+ DBUG_ENTER("ha_ndbcluster::set_auto_inc");
+ Ndb *ndb= get_ndb();
+ bool read_bit= bitmap_is_set(table->read_set, field->field_index);
+ bitmap_set_bit(table->read_set, field->field_index);
+ Uint64 next_val= (Uint64) field->val_int() + 1;
+ if (!read_bit)
+ bitmap_clear_bit(table->read_set, field->field_index);
+#ifndef DBUG_OFF
+ char buff[22];
+ DBUG_PRINT("info",
+ ("Trying to set next auto increment value to %s",
+ llstr(next_val, buff)));
+#endif
+ Ndb_tuple_id_range_guard g(m_share);
+ if (ndb->setAutoIncrementValue(m_table, g.range, next_val, TRUE)
+ == -1)
+ ERR_RETURN(ndb->getNdbError());
+ DBUG_RETURN(0);
+}
+
+/**
+ Insert one record into NDB.
*/
int ha_ndbcluster::write_row(uchar *record)
{
@@ -2716,7 +2791,7 @@ int ha_ndbcluster::write_row(uchar *record)
start_bulk_insert will set parameters to ensure that each
write_row is committed individually
*/
- int peek_res= peek_indexed_rows(record, TRUE);
+ int peek_res= peek_indexed_rows(record, NDB_INSERT);
if (!peek_res)
{
@@ -2765,7 +2840,7 @@ int ha_ndbcluster::write_row(uchar *record)
if (ndb->getAutoIncrementValue(m_table, g.range, auto_value, 1) == -1)
{
if (--retries &&
- ndb->getNdbError().status == NdbError::TemporaryError);
+ ndb->getNdbError().status == NdbError::TemporaryError)
{
my_sleep(retry_sleep);
continue;
@@ -2880,18 +2955,11 @@ int ha_ndbcluster::write_row(uchar *record)
}
if ((has_auto_increment) && (m_skip_auto_increment))
{
- Ndb *ndb= get_ndb();
- Uint64 next_val= (Uint64) table->next_number_field->val_int() + 1;
-#ifndef DBUG_OFF
- char buff[22];
- DBUG_PRINT("info",
- ("Trying to set next auto increment value to %s",
- llstr(next_val, buff)));
-#endif
- Ndb_tuple_id_range_guard g(m_share);
- if (ndb->setAutoIncrementValue(m_table, g.range, next_val, TRUE)
- == -1)
- ERR_RETURN(ndb->getNdbError());
+ int ret_val;
+ if ((ret_val= set_auto_inc(table->next_number_field)))
+ {
+ DBUG_RETURN(ret_val);
+ }
}
m_skip_auto_increment= TRUE;
@@ -2900,7 +2968,9 @@ int ha_ndbcluster::write_row(uchar *record)
}
-/* Compare if a key in a row has changed */
+/**
+ Compare if a key in a row has changed.
+*/
int ha_ndbcluster::key_cmp(uint keynr, const uchar * old_row,
const uchar * new_row)
@@ -2934,8 +3004,8 @@ int ha_ndbcluster::key_cmp(uint keynr, const uchar * old_row,
return 0;
}
-/*
- Update one record in NDB using primary key
+/**
+ Update one record in NDB using primary key.
*/
int ha_ndbcluster::update_row(const uchar *old_data, uchar *new_data)
@@ -2960,7 +3030,8 @@ int ha_ndbcluster::update_row(const uchar *old_data, uchar *new_data)
if (m_ignore_dup_key && (thd->lex->sql_command == SQLCOM_UPDATE ||
thd->lex->sql_command == SQLCOM_UPDATE_MULTI))
{
- int peek_res= peek_indexed_rows(new_data, pk_update);
+ NDB_WRITE_OP write_op= (pk_update) ? NDB_PK_UPDATE : NDB_UPDATE;
+ int peek_res= peek_indexed_rows(new_data, write_op);
if (!peek_res)
{
@@ -3015,6 +3086,17 @@ int ha_ndbcluster::update_row(const uchar *old_data, uchar *new_data)
// Insert new row
DBUG_PRINT("info", ("delete succeded"));
m_primary_key_update= TRUE;
+ /*
+ If we are updating a primary key with auto_increment
+ then we need to update the auto_increment counter
+ */
+ if (table->found_next_number_field &&
+ bitmap_is_set(table->write_set,
+ table->found_next_number_field->field_index) &&
+ (error= set_auto_inc(table->found_next_number_field)))
+ {
+ DBUG_RETURN(error);
+ }
insert_res= write_row(new_data);
m_primary_key_update= FALSE;
if (insert_res)
@@ -3037,7 +3119,17 @@ int ha_ndbcluster::update_row(const uchar *old_data, uchar *new_data)
DBUG_PRINT("info", ("delete+insert succeeded"));
DBUG_RETURN(0);
}
-
+ /*
+ If we are updating a unique key with auto_increment
+ then we need to update the auto_increment counter
+ */
+ if (table->found_next_number_field &&
+ bitmap_is_set(table->write_set,
+ table->found_next_number_field->field_index) &&
+ (error= set_auto_inc(table->found_next_number_field)))
+ {
+ DBUG_RETURN(error);
+ }
if (cursor)
{
/*
@@ -3142,8 +3234,8 @@ int ha_ndbcluster::update_row(const uchar *old_data, uchar *new_data)
}
-/*
- Delete one record from NDB, using primary key
+/**
+ Delete one record from NDB, using primary key .
*/
int ha_ndbcluster::delete_row(const uchar *record)
@@ -3257,14 +3349,12 @@ int ha_ndbcluster::delete_row(const uchar *record)
DBUG_RETURN(0);
}
-/*
- Unpack a record read from NDB
+/**
+ Unpack a record read from NDB.
- SYNOPSIS
- unpack_record()
- buf Buffer to store read row
+ @param buf Buffer to store read row
- NOTE
+ @note
The data for each row is read directly into the
destination buffer. This function is primarily
called in order to check if any fields should be
@@ -3425,12 +3515,12 @@ void ha_ndbcluster::unpack_record(uchar *buf)
#endif
}
-/*
- Utility function to print/dump the fetched field
- to avoid unnecessary work, wrap in DBUG_EXECUTE as in:
+/**
+ Utility function to print/dump the fetched field.
+ To avoid unnecessary work, wrap in DBUG_EXECUTE as in:
DBUG_EXECUTE("value", print_results(););
- */
+*/
void ha_ndbcluster::print_results()
{
@@ -3512,8 +3602,8 @@ int ha_ndbcluster::index_end()
}
/**
- * Check if key contains null
- */
+ Check if key contains null.
+*/
static
int
check_null_in_key(const KEY* key_info, const uchar *key, uint key_len)
@@ -3786,11 +3876,10 @@ int ha_ndbcluster::rnd_next(uchar *buf)
}
-/*
+/**
An "interesting" record has been found and it's pk
- retrieved by calling position
- Now it's time to read the record from db once
- again
+ retrieved by calling position. Now it's time to read
+ the record from db once again.
*/
int ha_ndbcluster::rnd_pos(uchar *buf, uchar *pos)
@@ -3833,10 +3922,10 @@ int ha_ndbcluster::rnd_pos(uchar *buf, uchar *pos)
}
-/*
+/**
Store the primary key of this record in ref
variable, so that the row can be retrieved again later
- using "reference" in rnd_pos
+ using "reference" in rnd_pos.
*/
void ha_ndbcluster::position(const uchar *record)
@@ -4110,14 +4199,13 @@ int ha_ndbcluster::reset()
}
-/*
- Start of an insert, remember number of rows to be inserted, it will
- be used in write_row and get_autoincrement to send an optimal number
- of rows in each roundtrip to the server
+/**
+ Start of an insert, remember number of rows to be inserted, it will
+ be used in write_row and get_autoincrement to send an optimal number
+ of rows in each roundtrip to the server.
- SYNOPSIS
+ @param
rows number of rows to insert, 0 if unknown
-
*/
void ha_ndbcluster::start_bulk_insert(ha_rows rows)
@@ -4167,9 +4255,9 @@ void ha_ndbcluster::start_bulk_insert(ha_rows rows)
DBUG_VOID_RETURN;
}
-/*
- End of an insert
- */
+/**
+ End of an insert.
+*/
int ha_ndbcluster::end_bulk_insert()
{
int error= 0;
@@ -4230,8 +4318,9 @@ const char** ha_ndbcluster::bas_ext() const
return ha_ndbcluster_exts;
}
-/*
- How many seeks it will take to read through the table
+/**
+ How many seeks it will take to read through the table.
+
This is to be comparable to the number returned by records_in_range so
that we can decide if we should scan the table or use keys.
*/
@@ -4327,7 +4416,7 @@ static int ndbcluster_update_apply_status(THD *thd, int do_update)
Ndb *ndb= thd_ndb->ndb;
NDBDICT *dict= ndb->getDictionary();
const NDBTAB *ndbtab;
- NdbTransaction *trans= thd_ndb->all ? thd_ndb->all : thd_ndb->stmt;
+ NdbTransaction *trans= thd_ndb->trans;
ndb->setDatabaseName(NDB_REP_DB);
Ndb_table_guard ndbtab_g(dict, NDB_APPLY_TABLE);
if (!(ndbtab= ndbtab_g.get_table()))
@@ -4371,10 +4460,112 @@ static int ndbcluster_update_apply_status(THD *thd, int do_update)
}
#endif /* HAVE_NDB_BINLOG */
+void ha_ndbcluster::transaction_checks(THD *thd)
+{
+ if (thd->lex->sql_command == SQLCOM_LOAD)
+ {
+ m_transaction_on= FALSE;
+ /* Would be simpler if has_transactions() didn't always say "yes" */
+ thd->transaction.all.modified_non_trans_table=
+ thd->transaction.stmt.modified_non_trans_table= TRUE;
+ }
+ else if (!thd->transaction.on)
+ m_transaction_on= FALSE;
+ else
+ m_transaction_on= thd->variables.ndb_use_transactions;
+}
+
+int ha_ndbcluster::start_statement(THD *thd,
+ Thd_ndb *thd_ndb,
+ Ndb *ndb)
+{
+ DBUG_ENTER("ha_ndbcluster::start_statement");
+ PRINT_OPTION_FLAGS(thd);
+
+ trans_register_ha(thd, FALSE, ndbcluster_hton);
+ if (!thd_ndb->trans)
+ {
+ if (thd->options & (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN))
+ trans_register_ha(thd, TRUE, ndbcluster_hton);
+ DBUG_PRINT("trans",("Starting transaction"));
+ thd_ndb->trans= ndb->startTransaction();
+ if (thd_ndb->trans == NULL)
+ ERR_RETURN(ndb->getNdbError());
+ thd_ndb->init_open_tables();
+ thd_ndb->query_state&= NDB_QUERY_NORMAL;
+ thd_ndb->trans_options= 0;
+ thd_ndb->m_slow_path= FALSE;
+ if (!(thd->options & OPTION_BIN_LOG) ||
+ thd->variables.binlog_format == BINLOG_FORMAT_STMT)
+ {
+ thd_ndb->trans_options|= TNTO_NO_LOGGING;
+ thd_ndb->m_slow_path= TRUE;
+ }
+ else if (thd->slave_thread)
+ thd_ndb->m_slow_path= TRUE;
+ }
+ /*
+ If this is the start of a LOCK TABLE, a table look
+ should be taken on the table in NDB
+
+ Check if it should be read or write lock
+ */
+ if (thd->options & (OPTION_TABLE_LOCK))
+ {
+ //lockThisTable();
+ DBUG_PRINT("info", ("Locking the table..." ));
+ }
+ DBUG_RETURN(0);
+}
+
+int ha_ndbcluster::init_handler_for_statement(THD *thd, Thd_ndb *thd_ndb)
+{
+ /*
+ This is the place to make sure this handler instance
+ has a started transaction.
+
+ The transaction is started by the first handler on which
+ MySQL Server calls external lock
+
+ Other handlers in the same stmt or transaction should use
+ the same NDB transaction. This is done by setting up the m_active_trans
+ pointer to point to the NDB transaction.
+ */
+
+ DBUG_ENTER("ha_ndbcluster::init_handler_for_statement");
+ // store thread specific data first to set the right context
+ m_force_send= thd->variables.ndb_force_send;
+ m_ha_not_exact_count= !thd->variables.ndb_use_exact_count;
+ m_autoincrement_prefetch=
+ (thd->variables.ndb_autoincrement_prefetch_sz >
+ NDB_DEFAULT_AUTO_PREFETCH) ?
+ (ha_rows) thd->variables.ndb_autoincrement_prefetch_sz
+ : (ha_rows) NDB_DEFAULT_AUTO_PREFETCH;
+ m_active_trans= thd_ndb->trans;
+ DBUG_ASSERT(m_active_trans);
+ // Start of transaction
+ m_rows_changed= 0;
+ m_ops_pending= 0;
+ m_slow_path= thd_ndb->m_slow_path;
+#ifdef HAVE_NDB_BINLOG
+ if (unlikely(m_slow_path))
+ {
+ if (m_share == ndb_apply_status_share && thd->slave_thread)
+ thd_ndb->trans_options|= TNTO_INJECTED_APPLY_STATUS;
+ }
+#endif
+ // TODO remove double pointers...
+ if (!(m_thd_ndb_share= thd_ndb->get_open_table(thd, m_table)))
+ {
+ DBUG_RETURN(1);
+ }
+ m_table_info= &m_thd_ndb_share->stat;
+ DBUG_RETURN(0);
+}
+
int ha_ndbcluster::external_lock(THD *thd, int lock_type)
{
int error=0;
- NdbTransaction* trans= NULL;
DBUG_ENTER("external_lock");
/*
@@ -4395,124 +4586,15 @@ int ha_ndbcluster::external_lock(THD *thd, int lock_type)
if (lock_type != F_UNLCK)
{
DBUG_PRINT("info", ("lock_type != F_UNLCK"));
- if (thd->lex->sql_command == SQLCOM_LOAD)
- {
- m_transaction_on= FALSE;
- /* Would be simpler if has_transactions() didn't always say "yes" */
- thd->transaction.all.modified_non_trans_table= thd->transaction.stmt.modified_non_trans_table= TRUE;
- }
- else if (!thd->transaction.on)
- m_transaction_on= FALSE;
- else
- m_transaction_on= thd->variables.ndb_use_transactions;
+ transaction_checks(thd);
if (!thd_ndb->lock_count++)
{
- PRINT_OPTION_FLAGS(thd);
- if (!(thd->options & (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN)))
- {
- // Autocommit transaction
- DBUG_ASSERT(!thd_ndb->stmt);
- DBUG_PRINT("trans",("Starting transaction stmt"));
-
- trans= ndb->startTransaction();
- if (trans == NULL)
- {
- thd_ndb->lock_count= 0;
- ERR_RETURN(ndb->getNdbError());
- }
- thd_ndb->init_open_tables();
- thd_ndb->stmt= trans;
- thd_ndb->query_state&= NDB_QUERY_NORMAL;
- thd_ndb->trans_options= 0;
- thd_ndb->m_slow_path= FALSE;
- if (!(thd->options & OPTION_BIN_LOG) ||
- thd->variables.binlog_format == BINLOG_FORMAT_STMT)
- {
- thd_ndb->trans_options|= TNTO_NO_LOGGING;
- thd_ndb->m_slow_path= TRUE;
- }
- else if (thd->slave_thread)
- thd_ndb->m_slow_path= TRUE;
- trans_register_ha(thd, FALSE, ndbcluster_hton);
- }
- else
- {
- if (!thd_ndb->all)
- {
- // Not autocommit transaction
- // A "master" transaction ha not been started yet
- DBUG_PRINT("trans",("starting transaction, all"));
-
- trans= ndb->startTransaction();
- if (trans == NULL)
- {
- thd_ndb->lock_count= 0;
- ERR_RETURN(ndb->getNdbError());
- }
- thd_ndb->init_open_tables();
- thd_ndb->all= trans;
- thd_ndb->query_state&= NDB_QUERY_NORMAL;
- thd_ndb->trans_options= 0;
- thd_ndb->m_slow_path= FALSE;
- if (!(thd->options & OPTION_BIN_LOG) ||
- thd->variables.binlog_format == BINLOG_FORMAT_STMT)
- {
- thd_ndb->trans_options|= TNTO_NO_LOGGING;
- thd_ndb->m_slow_path= TRUE;
- }
- else if (thd->slave_thread)
- thd_ndb->m_slow_path= TRUE;
- trans_register_ha(thd, TRUE, ndbcluster_hton);
-
- /*
- If this is the start of a LOCK TABLE, a table look
- should be taken on the table in NDB
-
- Check if it should be read or write lock
- */
- if (thd->options & (OPTION_TABLE_LOCK))
- {
- //lockThisTable();
- DBUG_PRINT("info", ("Locking the table..." ));
- }
-
- }
- }
- }
- /*
- This is the place to make sure this handler instance
- has a started transaction.
-
- The transaction is started by the first handler on which
- MySQL Server calls external lock
-
- Other handlers in the same stmt or transaction should use
- the same NDB transaction. This is done by setting up the m_active_trans
- pointer to point to the NDB transaction.
- */
-
- // store thread specific data first to set the right context
- m_force_send= thd->variables.ndb_force_send;
- m_ha_not_exact_count= !thd->variables.ndb_use_exact_count;
- m_autoincrement_prefetch=
- (ha_rows) thd->variables.ndb_autoincrement_prefetch_sz;
-
- m_active_trans= thd_ndb->all ? thd_ndb->all : thd_ndb->stmt;
- DBUG_ASSERT(m_active_trans);
- // Start of transaction
- m_rows_changed= 0;
- m_ops_pending= 0;
- m_slow_path= thd_ndb->m_slow_path;
-#ifdef HAVE_NDB_BINLOG
- if (unlikely(m_slow_path))
- {
- if (m_share == ndb_apply_status_share && thd->slave_thread)
- thd_ndb->trans_options|= TNTO_INJECTED_APPLY_STATUS;
+ if ((error= start_statement(thd, thd_ndb, ndb)))
+ goto error;
}
-#endif
- // TODO remove double pointers...
- m_thd_ndb_share= thd_ndb->get_open_table(thd, m_table);
- m_table_info= &m_thd_ndb_share->stat;
+ if ((error= init_handler_for_statement(thd, thd_ndb)))
+ goto error;
+ DBUG_RETURN(0);
}
else
{
@@ -4540,16 +4622,19 @@ int ha_ndbcluster::external_lock(THD *thd, int lock_type)
DBUG_PRINT("trans", ("Last external_lock"));
PRINT_OPTION_FLAGS(thd);
- if (thd_ndb->stmt)
+ if (!(thd->options & (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN)))
{
- /*
- Unlock is done without a transaction commit / rollback.
- This happens if the thread didn't update any rows
- We must in this case close the transaction to release resources
- */
- DBUG_PRINT("trans",("ending non-updating transaction"));
- ndb->closeTransaction(m_active_trans);
- thd_ndb->stmt= NULL;
+ if (thd_ndb->trans)
+ {
+ /*
+ Unlock is done without a transaction commit / rollback.
+ This happens if the thread didn't update any rows
+ We must in this case close the transaction to release resources
+ */
+ DBUG_PRINT("trans",("ending non-updating transaction"));
+ ndb->closeTransaction(thd_ndb->trans);
+ thd_ndb->trans= NULL;
+ }
}
}
m_table_info= NULL;
@@ -4578,11 +4663,14 @@ int ha_ndbcluster::external_lock(THD *thd, int lock_type)
if (m_ops_pending)
DBUG_PRINT("warning", ("ops_pending != 0L"));
m_ops_pending= 0;
+ DBUG_RETURN(0);
}
+error:
+ thd_ndb->lock_count--;
DBUG_RETURN(error);
}
-/*
+/**
Unlock the last row read in an open scan.
Rows are unlocked by default in ndb, but
for SELECT FOR UPDATE and SELECT LOCK WIT SHARE MODE
@@ -4598,59 +4686,68 @@ void ha_ndbcluster::unlock_row()
DBUG_VOID_RETURN;
}
-/*
+/**
Start a transaction for running a statement if one is not
already running in a transaction. This will be the case in
a BEGIN; COMMIT; block
When using LOCK TABLE's external_lock will start a transaction
- since ndb does not currently does not support table locking
+ since ndb does not currently does not support table locking.
*/
int ha_ndbcluster::start_stmt(THD *thd, thr_lock_type lock_type)
{
int error=0;
DBUG_ENTER("start_stmt");
- PRINT_OPTION_FLAGS(thd);
Thd_ndb *thd_ndb= get_thd_ndb(thd);
- NdbTransaction *trans= (thd_ndb->stmt)?thd_ndb->stmt:thd_ndb->all;
- if (!trans){
+ transaction_checks(thd);
+ if (!thd_ndb->start_stmt_count++)
+ {
Ndb *ndb= thd_ndb->ndb;
- DBUG_PRINT("trans",("Starting transaction stmt"));
- trans= ndb->startTransaction();
- if (trans == NULL)
- ERR_RETURN(ndb->getNdbError());
- no_uncommitted_rows_reset(thd);
- thd_ndb->stmt= trans;
- thd_ndb->query_state&= NDB_QUERY_NORMAL;
- trans_register_ha(thd, FALSE, ndbcluster_hton);
+ if ((error= start_statement(thd, thd_ndb, ndb)))
+ goto error;
}
- m_active_trans= trans;
- // Start of statement
- m_ops_pending= 0;
-
+ if ((error= init_handler_for_statement(thd, thd_ndb)))
+ goto error;
+ DBUG_RETURN(0);
+error:
+ thd_ndb->start_stmt_count--;
DBUG_RETURN(error);
}
-/*
- Commit a transaction started in NDB
- */
+/**
+ Commit a transaction started in NDB.
+*/
static int ndbcluster_commit(handlerton *hton, THD *thd, bool all)
{
int res= 0;
Thd_ndb *thd_ndb= get_thd_ndb(thd);
Ndb *ndb= thd_ndb->ndb;
- NdbTransaction *trans= all ? thd_ndb->all : thd_ndb->stmt;
+ NdbTransaction *trans= thd_ndb->trans;
DBUG_ENTER("ndbcluster_commit");
- DBUG_PRINT("transaction",("%s",
- trans == thd_ndb->stmt ?
- "stmt" : "all"));
DBUG_ASSERT(ndb);
- if (trans == NULL)
+ PRINT_OPTION_FLAGS(thd);
+ DBUG_PRINT("enter", ("Commit %s", (all ? "all" : "stmt")));
+ thd_ndb->start_stmt_count= 0;
+ if (trans == NULL || (!all &&
+ thd->options & (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN)))
+ {
+ /*
+ An odditity in the handler interface is that commit on handlerton
+ is called to indicate end of statement only in cases where
+ autocommit isn't used and the all flag isn't set.
+
+ We also leave quickly when a transaction haven't even been started,
+ in this case we are safe that no clean up is needed. In this case
+ the MySQL Server could handle the query without contacting the
+ NDB kernel.
+ */
+ DBUG_PRINT("info", ("Commit before start or end-of-statement only"));
DBUG_RETURN(0);
+ }
#ifdef HAVE_NDB_BINLOG
if (unlikely(thd_ndb->m_slow_path))
@@ -4671,11 +4768,7 @@ static int ndbcluster_commit(handlerton *hton, THD *thd, bool all)
ndbcluster_print_error(res, error_op);
}
ndb->closeTransaction(trans);
-
- if (all)
- thd_ndb->all= NULL;
- else
- thd_ndb->stmt= NULL;
+ thd_ndb->trans= NULL;
/* Clear commit_count for tables changed by transaction */
NDB_SHARE* share;
@@ -4695,22 +4788,27 @@ static int ndbcluster_commit(handlerton *hton, THD *thd, bool all)
}
-/*
- Rollback a transaction started in NDB
- */
+/**
+ Rollback a transaction started in NDB.
+*/
static int ndbcluster_rollback(handlerton *hton, THD *thd, bool all)
{
int res= 0;
Thd_ndb *thd_ndb= get_thd_ndb(thd);
Ndb *ndb= thd_ndb->ndb;
- NdbTransaction *trans= all ? thd_ndb->all : thd_ndb->stmt;
+ NdbTransaction *trans= thd_ndb->trans;
DBUG_ENTER("ndbcluster_rollback");
- DBUG_PRINT("transaction",("%s",
- trans == thd_ndb->stmt ?
- "stmt" : "all"));
- DBUG_ASSERT(ndb && trans);
+ DBUG_ASSERT(ndb);
+ thd_ndb->start_stmt_count= 0;
+ if (trans == NULL || (!all &&
+ thd->options & (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN)))
+ {
+ /* Ignore end-of-statement until real rollback or commit is called */
+ DBUG_PRINT("info", ("Rollback before start or end-of-statement only"));
+ DBUG_RETURN(0);
+ }
if (trans->execute(NdbTransaction::Rollback) != 0)
{
@@ -4722,11 +4820,7 @@ static int ndbcluster_rollback(handlerton *hton, THD *thd, bool all)
ndbcluster_print_error(res, error_op);
}
ndb->closeTransaction(trans);
-
- if (all)
- thd_ndb->all= NULL;
- else
- thd_ndb->stmt= NULL;
+ thd_ndb->trans= NULL;
/* Clear list of tables changed by transaction */
thd_ndb->changed_tables.empty();
@@ -4735,14 +4829,17 @@ static int ndbcluster_rollback(handlerton *hton, THD *thd, bool all)
}
-/*
+/**
Define NDB column based on Field.
- Returns 0 or mysql error code.
+
Not member of ha_ndbcluster because NDBCOL cannot be declared.
MySQL text types with character set "binary" are mapped to true
NDB binary types without a character set. This may change.
- */
+
+ @return
+ Returns 0 or mysql error code.
+*/
static int create_ndb_column(NDBCOL &col,
Field *field,
@@ -5029,7 +5126,7 @@ static int create_ndb_column(NDBCOL &col,
return 0;
}
-/*
+/**
Create a table in NDB Cluster
*/
@@ -5577,9 +5674,12 @@ int ha_ndbcluster::create_unique_index(const char *name,
}
-/*
- Create an index in NDB Cluster
- */
+/**
+ Create an index in NDB Cluster.
+
+ @todo
+ Only temporary ordered indexes supported
+*/
int ha_ndbcluster::create_ndb_index(const char *name,
KEY *key_info,
@@ -5722,8 +5822,8 @@ int ha_ndbcluster::final_drop_index(TABLE *table_arg)
DBUG_RETURN(error);
}
-/*
- Rename a table in NDB Cluster
+/**
+ Rename a table in NDB Cluster.
*/
int ha_ndbcluster::rename_table(const char *from, const char *to)
@@ -5903,10 +6003,9 @@ int ha_ndbcluster::rename_table(const char *from, const char *to)
}
-/*
- Delete table from NDB Cluster
-
- */
+/**
+ Delete table from NDB Cluster.
+*/
/* static version which does not need a handler */
@@ -6129,8 +6228,9 @@ void ha_ndbcluster::get_auto_increment(ulonglong offset, ulonglong increment,
ulonglong *first_value,
ulonglong *nb_reserved_values)
{
- int cache_size;
+ uint cache_size;
Uint64 auto_value;
+ THD *thd= current_thd;
DBUG_ENTER("get_auto_increment");
DBUG_PRINT("enter", ("m_tabname: %s", m_tabname));
Ndb *ndb= get_ndb();
@@ -6140,11 +6240,14 @@ void ha_ndbcluster::get_auto_increment(ulonglong offset, ulonglong increment,
/* We guessed too low */
m_rows_to_insert+= m_autoincrement_prefetch;
}
- cache_size=
- (int) ((m_rows_to_insert - m_rows_inserted < m_autoincrement_prefetch) ?
- m_rows_to_insert - m_rows_inserted :
- ((m_rows_to_insert > m_autoincrement_prefetch) ?
- m_rows_to_insert : m_autoincrement_prefetch));
+ uint remaining= m_rows_to_insert - m_rows_inserted;
+ uint min_prefetch=
+ (remaining < thd->variables.ndb_autoincrement_prefetch_sz) ?
+ thd->variables.ndb_autoincrement_prefetch_sz
+ : remaining;
+ cache_size= ((remaining < m_autoincrement_prefetch) ?
+ min_prefetch
+ : remaining);
uint retries= NDB_AUTO_INCREMENT_RETRIES;
int retry_sleep= 30; /* 30 milliseconds, transaction */
for (;;)
@@ -6155,7 +6258,7 @@ void ha_ndbcluster::get_auto_increment(ulonglong offset, ulonglong increment,
ndb->getAutoIncrementValue(m_table, g.range, auto_value, cache_size, increment, offset))
{
if (--retries &&
- ndb->getNdbError().status == NdbError::TemporaryError);
+ ndb->getNdbError().status == NdbError::TemporaryError)
{
my_sleep(retry_sleep);
continue;
@@ -6175,9 +6278,9 @@ void ha_ndbcluster::get_auto_increment(ulonglong offset, ulonglong increment,
}
-/*
- Constructor for the NDB Cluster table handler
- */
+/**
+ Constructor for the NDB Cluster table handler .
+*/
/*
Normal flags for binlogging is that ndb has HA_HAS_OWN_BINLOGGING
@@ -6231,7 +6334,7 @@ ha_ndbcluster::ha_ndbcluster(handlerton *hton, TABLE_SHARE *table_arg):
m_dupkey((uint) -1),
m_ha_not_exact_count(FALSE),
m_force_send(TRUE),
- m_autoincrement_prefetch((ha_rows) 32),
+ m_autoincrement_prefetch((ha_rows) NDB_DEFAULT_AUTO_PREFETCH),
m_transaction_on(TRUE),
m_cond(NULL),
m_multi_cursor(NULL)
@@ -6263,9 +6366,9 @@ int ha_ndbcluster::ha_initialise()
DBUG_RETURN(TRUE);
}
-/*
- Destructor for NDB Cluster table handler
- */
+/**
+ Destructor for NDB Cluster table handler.
+*/
ha_ndbcluster::~ha_ndbcluster()
{
@@ -6305,13 +6408,15 @@ ha_ndbcluster::~ha_ndbcluster()
-/*
- Open a table for further use
+/**
+ Open a table for further use.
+
- fetch metadata for this table from NDB
- check that table exists
- RETURN
+ @retval
0 ok
+ @retval
< 0 Table has changed
*/
@@ -6419,10 +6524,9 @@ void ha_ndbcluster::set_part_info(partition_info *part_info)
m_use_partition_function= TRUE;
}
-/*
- Close the table
- - release resources setup by open()
- */
+/**
+ Close the table; release resources setup by open().
+*/
int ha_ndbcluster::close(void)
{
@@ -6439,6 +6543,12 @@ int ha_ndbcluster::close(void)
}
+/**
+ @todo
+ - Alt.1 If init fails because to many allocated Ndb
+ wait on condition for a Ndb object to be released.
+ - Alt.2 Seize/release from pool, wait until next release
+*/
Thd_ndb* ha_ndbcluster::seize_thd_ndb()
{
Thd_ndb *thd_ndb;
@@ -6474,7 +6584,7 @@ void ha_ndbcluster::release_thd_ndb(Thd_ndb* thd_ndb)
}
-/*
+/**
If this thread already has a Thd_ndb object allocated
in current THD, reuse it. Otherwise
seize a Thd_ndb object, assign it to current THD and use it.
@@ -6523,9 +6633,9 @@ static int ndbcluster_close_connection(handlerton *hton, THD *thd)
}
-/*
- Try to discover one table from NDB
- */
+/**
+ Try to discover one table from NDB.
+*/
int ndbcluster_discover(handlerton *hton, THD* thd, const char *db,
const char *name,
@@ -6632,10 +6742,9 @@ err:
DBUG_RETURN(error);
}
-/*
- Check if a table exists in NDB
-
- */
+/**
+ Check if a table exists in NDB.
+*/
int ndbcluster_table_exists_in_engine(handlerton *hton, THD* thd,
const char *db,
@@ -6674,11 +6783,12 @@ extern "C" uchar* tables_get_key(const char *entry, size_t *length,
}
-/*
+/**
Drop a database in NDB Cluster
- NOTE add a dummy void function, since stupid handlerton is returning void instead of int...
-*/
+ @note
+ add a dummy void function, since stupid handlerton is returning void instead of int...
+*/
int ndbcluster_drop_database_impl(const char *path)
{
DBUG_ENTER("ndbcluster_drop_database");
@@ -7434,10 +7544,9 @@ void ha_ndbcluster::print_error(int error, myf errflag)
}
-/*
- Static error print function called from
- static handler method ndbcluster_commit
- and ndbcluster_rollback
+/**
+ Static error print function called from static handler method
+ ndbcluster_commit and ndbcluster_rollback.
*/
void ndbcluster_print_error(int error, const NdbOperation *error_op)
@@ -7455,9 +7564,9 @@ void ndbcluster_print_error(int error, const NdbOperation *error_op)
}
/**
- * Set a given location from full pathname to database name
- *
- */
+ Set a given location from full pathname to database name.
+*/
+
void ha_ndbcluster::set_dbname(const char *path_name, char *dbname)
{
char *end, *ptr, *tmp_name;
@@ -7490,9 +7599,9 @@ void ha_ndbcluster::set_dbname(const char *path_name, char *dbname)
filename_to_tablename(tmp_name, dbname, FN_REFLEN);
}
-/*
- Set m_dbname from full pathname to table file
- */
+/**
+ Set m_dbname from full pathname to table file.
+*/
void ha_ndbcluster::set_dbname(const char *path_name)
{
@@ -7500,9 +7609,9 @@ void ha_ndbcluster::set_dbname(const char *path_name)
}
/**
- * Set a given location from full pathname to table file
- *
- */
+ Set a given location from full pathname to table file.
+*/
+
void
ha_ndbcluster::set_tabname(const char *path_name, char * tabname)
{
@@ -7531,9 +7640,9 @@ ha_ndbcluster::set_tabname(const char *path_name, char * tabname)
filename_to_tablename(tmp_name, tabname, FN_REFLEN);
}
-/*
- Set m_tabname from full pathname to table file
- */
+/**
+ Set m_tabname from full pathname to table file.
+*/
void ha_ndbcluster::set_tabname(const char *path_name)
{
@@ -7804,31 +7913,30 @@ uint ndb_get_commitcount(THD *thd, char *dbname, char *tabname,
}
-/*
+/**
Check if a cached query can be used.
+
This is done by comparing the supplied engine_data to commit_count of
the table.
+
The commit_count is either retrieved from the share for the table, where
it has been cached by the util thread. If the util thread is not started,
NDB has to be contacetd to retrieve the commit_count, this will introduce
a small delay while waiting for NDB to answer.
- SYNOPSIS
- ndbcluster_cache_retrieval_allowed
- thd thread handle
- full_name concatenation of database name,
- the null character '\0', and the table
- name
- full_name_len length of the full name,
- i.e. len(dbname) + len(tablename) + 1
-
- engine_data parameter retrieved when query was first inserted into
- the cache. If the value of engine_data is changed,
- all queries for this table should be invalidated.
+ @param thd thread handle
+ @param full_name concatenation of database name,
+ the null character '\\0', and the table name
+ @param full_name_len length of the full name,
+ i.e. len(dbname) + len(tablename) + 1
+ @param engine_data parameter retrieved when query was first inserted into
+ the cache. If the value of engine_data is changed,
+ all queries for this table should be invalidated.
- RETURN VALUE
+ @retval
TRUE Yes, use the query from cache
+ @retval
FALSE No, don't use the cached query, and if engine_data
has changed, all queries for this table should be invalidated
@@ -7884,25 +7992,25 @@ ndbcluster_cache_retrieval_allowed(THD *thd,
/**
- Register a table for use in the query cache. Fetch the commit_count
- for the table and return it in engine_data, this will later be used
- to check if the table has changed, before the cached query is reused.
-
- SYNOPSIS
- ha_ndbcluster::can_query_cache_table
- thd thread handle
- full_name concatenation of database name,
- the null character '\0', and the table
- name
- full_name_len length of the full name,
- i.e. len(dbname) + len(tablename) + 1
- qc_engine_callback function to be called before using cache on this table
- engine_data out, commit_count for this table
-
- RETURN VALUE
+ Register a table for use in the query cache.
+
+ Fetch the commit_count for the table and return it in engine_data,
+ this will later be used to check if the table has changed, before
+ the cached query is reused.
+
+ @param thd thread handle
+ @param full_name concatenation of database name,
+ the null character '\\0', and the table name
+ @param full_name_len length of the full name,
+ i.e. len(dbname) + len(tablename) + 1
+ @param engine_callback function to be called before using cache on
+ this table
+ @param[out] engine_data commit_count for this table
+
+ @retval
TRUE Yes, it's ok to cahce this query
+ @retval
FALSE No, don't cach the query
-
*/
my_bool
@@ -7939,13 +8047,14 @@ ha_ndbcluster::register_query_cache_table(THD *thd,
}
-/*
+/**
Handling the shared NDB_SHARE structure that is needed to
provide table locking.
+
It's also used for sharing data with other NDB handlers
in the same MySQL Server. There is currently not much
data we want to or can share.
- */
+*/
static uchar *ndbcluster_get_key(NDB_SHARE *share, size_t *length,
my_bool not_used __attribute__((unused)))
@@ -8030,7 +8139,7 @@ int handle_trailing_share(NDB_SHARE *share)
table_list.db= share->db;
table_list.alias= table_list.table_name= share->table_name;
safe_mutex_assert_owner(&LOCK_open);
- close_cached_tables(thd, 0, &table_list, TRUE);
+ close_cached_tables(thd, &table_list, TRUE, FALSE, FALSE);
pthread_mutex_lock(&ndbcluster_mutex);
/* ndb_share reference temporary free */
@@ -8498,9 +8607,9 @@ retry:
DBUG_RETURN(reterr);
}
-/*
+/**
Create a .ndb file to serve as a placeholder indicating
- that the table with this name is a ndb table
+ that the table with this name is a ndb table.
*/
int ha_ndbcluster::write_ndb_file(const char *name)
@@ -8607,7 +8716,7 @@ ha_ndbcluster::read_multi_range_first(KEY_MULTI_RANGE **found_range_p,
thd_ndb->query_state|= NDB_QUERY_MULTI_READ_RANGE;
m_disable_multi_read= FALSE;
- /**
+ /*
* Copy arguments into member variables
*/
m_multi_ranges= ranges;
@@ -8616,7 +8725,7 @@ ha_ndbcluster::read_multi_range_first(KEY_MULTI_RANGE **found_range_p,
multi_range_sorted= sorted;
multi_range_buffer= buffer;
- /**
+ /*
* read multi range will read ranges as follows (if not ordered)
*
* input read order
@@ -8629,7 +8738,7 @@ ha_ndbcluster::read_multi_range_first(KEY_MULTI_RANGE **found_range_p,
* pk-op 6 pk-ok 6
*/
- /**
+ /*
* Variables for loop
*/
uchar *curr= (uchar*)buffer->buffer;
@@ -8756,7 +8865,7 @@ ha_ndbcluster::read_multi_range_first(KEY_MULTI_RANGE **found_range_p,
if (multi_range_curr != multi_range_end)
{
- /**
+ /*
* Mark that we're using entire buffer (even if might not) as
* we haven't read all ranges for some reason
* This as we don't want mysqld to reuse the buffer when we read
@@ -8769,7 +8878,7 @@ ha_ndbcluster::read_multi_range_first(KEY_MULTI_RANGE **found_range_p,
buffer->end_of_used_area= curr;
}
- /**
+ /*
* Set first operation in multi range
*/
m_current_multi_operation=
@@ -8873,10 +8982,10 @@ ha_ndbcluster::read_multi_range_next(KEY_MULTI_RANGE ** multi_range_found_p)
continue;
}
}
- else /** m_multi_cursor == 0 */
+ else /* m_multi_cursor == 0 */
{
DBUG_MULTI_RANGE(7);
- /**
+ /*
* Corresponds to range 5 in example in read_multi_range_first
*/
(void)1;
@@ -8907,7 +9016,7 @@ close_scan:
DBUG_RETURN(HA_ERR_END_OF_FILE);
}
- /**
+ /*
* Read remaining ranges
*/
DBUG_RETURN(read_multi_range_first(multi_range_found_p,
@@ -8917,7 +9026,7 @@ close_scan:
multi_range_buffer));
found:
- /**
+ /*
* Found a record belonging to a scan
*/
m_active_cursor= m_multi_cursor;
@@ -8929,7 +9038,7 @@ found:
DBUG_RETURN(0);
found_next:
- /**
+ /*
* Found a record belonging to a pk/index op,
* copy result and move to next to prepare for next call
*/
@@ -8970,6 +9079,12 @@ ha_ndbcluster::setup_recattr(const NdbRecAttr* curr)
DBUG_RETURN(0);
}
+/**
+ @param[in] comment table comment defined by user
+
+ @return
+ table comment + additional
+*/
char*
ha_ndbcluster::update_table_comment(
/* out: table comment + additional */
@@ -9011,7 +9126,9 @@ ha_ndbcluster::update_table_comment(
}
-// Utility thread main loop
+/**
+ Utility thread main loop.
+*/
pthread_handler_t ndb_util_thread_func(void *arg __attribute__((unused)))
{
THD *thd; /* needs to be first for thread_stack */
@@ -9039,6 +9156,7 @@ pthread_handler_t ndb_util_thread_func(void *arg __attribute__((unused)))
thd->thread_stack= (char*)&thd; /* remember where our stack is */
if (thd->store_globals())
goto ndb_util_thread_fail;
+ lex_start(thd);
thd->init_for_queries();
thd->version=refresh_version;
thd->main_security_ctx.host_or_ip= "";
@@ -9298,7 +9416,7 @@ ndb_util_thread_fail:
/*
Condition pushdown
*/
-/*
+/**
Push a condition to ndbcluster storage engine for evaluation
during table and index scans. The conditions will be stored on a stack
for possibly storing several conditions. The stack can be popped
@@ -9309,9 +9427,10 @@ ndb_util_thread_fail:
expressions and function calls) and the following comparison operators:
=, !=, >, >=, <, <=, "is null", and "is not null".
- RETURN
+ @retval
NULL The condition was supported and will be evaluated for each
- row found during the scan
+ row found during the scan
+ @retval
cond The condition was not supported and all rows will be returned from
the scan for evaluation (and thus not saved on stack)
*/
@@ -9331,7 +9450,7 @@ ha_ndbcluster::cond_push(const COND *cond)
DBUG_RETURN(m_cond->cond_push(cond, table, (NDBTAB *)m_table));
}
-/*
+/**
Pop the top condition from the condition stack of the handler instance.
*/
void
diff --git a/sql/ha_ndbcluster.h b/sql/ha_ndbcluster.h
index a6f992226c2..cc79402fe92 100644
--- a/sql/ha_ndbcluster.h
+++ b/sql/ha_ndbcluster.h
@@ -31,6 +31,8 @@
#include <ndbapi_limits.h>
#define NDB_HIDDEN_PRIMARY_KEY_LENGTH 8
+#define NDB_DEFAULT_AUTO_PREFETCH 32
+
class Ndb; // Forward declaration
class NdbOperation; // Forward declaration
@@ -81,6 +83,12 @@ typedef struct ndb_index_data {
uint index_stat_query_count;
} NDB_INDEX_DATA;
+typedef enum ndb_write_op {
+ NDB_INSERT = 0,
+ NDB_UPDATE = 1,
+ NDB_PK_UPDATE = 2
+} NDB_WRITE_OP;
+
typedef union { const NdbRecAttr *rec; NdbBlob *blob; void *ptr; } NdbValue;
int get_ndb_blobs_value(TABLE* table, NdbValue* value_array,
@@ -204,8 +212,8 @@ class Thd_ndb
Ndb *ndb;
ulong count;
uint lock_count;
- NdbTransaction *all;
- NdbTransaction *stmt;
+ uint start_stmt_count;
+ NdbTransaction *trans;
bool m_error;
bool m_slow_path;
int m_error_code;
@@ -438,8 +446,9 @@ private:
const NdbOperation *first,
const NdbOperation *last,
uint errcode);
- int peek_indexed_rows(const uchar *record, bool check_pk);
+ int peek_indexed_rows(const uchar *record, NDB_WRITE_OP write_op);
int fetch_next(NdbScanOperation* op);
+ int set_auto_inc(Field *field);
int next_result(uchar *buf);
int define_read_attrs(uchar* buf, NdbOperation* op);
int filtered_scan(const uchar *key, uint key_len,
@@ -463,6 +472,7 @@ private:
friend int g_get_ndb_blobs_value(NdbBlob *ndb_blob, void *arg);
int set_primary_key(NdbOperation *op, const uchar *key);
int set_primary_key_from_record(NdbOperation *op, const uchar *record);
+ bool check_index_fields_in_write_set(uint keyno);
int set_index_key_from_record(NdbOperation *op, const uchar *record,
uint keyno);
int set_bounds(NdbIndexScanOperation*, uint inx, bool rir,
@@ -496,6 +506,10 @@ private:
friend int execute_no_commit(ha_ndbcluster*, NdbTransaction*, bool);
friend int execute_no_commit_ie(ha_ndbcluster*, NdbTransaction*, bool);
+ void transaction_checks(THD *thd);
+ int start_statement(THD *thd, Thd_ndb *thd_ndb, Ndb* ndb);
+ int init_handler_for_statement(THD *thd, Thd_ndb *thd_ndb);
+
NdbTransaction *m_active_trans;
NdbScanOperation *m_active_cursor;
const NdbDictionary::Table *m_table;
diff --git a/sql/ha_ndbcluster_binlog.cc b/sql/ha_ndbcluster_binlog.cc
index 5d5c8a26447..6dae841157c 100644
--- a/sql/ha_ndbcluster_binlog.cc
+++ b/sql/ha_ndbcluster_binlog.cc
@@ -241,44 +241,68 @@ static void dbug_print_table(const char *info, TABLE *table)
static void run_query(THD *thd, char *buf, char *end,
const int *no_print_error, my_bool disable_binlog)
{
- ulong save_query_length= thd->query_length;
- char *save_query= thd->query;
+ ulong save_thd_query_length= thd->query_length;
+ char *save_thd_query= thd->query;
ulong save_thread_id= thd->variables.pseudo_thread_id;
+ struct system_status_var save_thd_status_var= thd->status_var;
+ THD_TRANS save_thd_transaction_all= thd->transaction.all;
+ THD_TRANS save_thd_transaction_stmt= thd->transaction.stmt;
ulonglong save_thd_options= thd->options;
DBUG_ASSERT(sizeof(save_thd_options) == sizeof(thd->options));
- NET save_net= thd->net;
+ NET save_thd_net= thd->net;
const char* found_semicolon= NULL;
bzero((char*) &thd->net, sizeof(NET));
thd->query_length= end - buf;
thd->query= buf;
thd->variables.pseudo_thread_id= thread_id;
+ thd->transaction.stmt.modified_non_trans_table= FALSE;
if (disable_binlog)
thd->options&= ~OPTION_BIN_LOG;
DBUG_PRINT("query", ("%s", thd->query));
+
+ DBUG_ASSERT(!thd->in_sub_stmt);
+ DBUG_ASSERT(!thd->prelocked_mode);
+
mysql_parse(thd, thd->query, thd->query_length, &found_semicolon);
- if (no_print_error && thd->query_error)
+ if (no_print_error && thd->is_slave_error)
{
int i;
Thd_ndb *thd_ndb= get_thd_ndb(thd);
for (i= 0; no_print_error[i]; i++)
if ((thd_ndb->m_error_code == no_print_error[i]) ||
- (thd->net.last_errno == (unsigned)no_print_error[i]))
+ (thd->main_da.sql_errno() == (unsigned) no_print_error[i]))
break;
if (!no_print_error[i])
sql_print_error("NDB: %s: error %s %d(ndb: %d) %d %d",
- buf, thd->net.last_error, thd->net.last_errno,
+ buf,
+ thd->main_da.message(),
+ thd->main_da.sql_errno(),
thd_ndb->m_error_code,
- thd->net.report_error, thd->query_error);
+ (int) thd->is_error(), thd->is_slave_error);
}
+ /*
+ XXX: this code is broken. mysql_parse()/mysql_reset_thd_for_next_command()
+ can not be called from within a statement, and
+ run_query() can be called from anywhere, including from within
+ a sub-statement.
+ This particular reset is a temporary hack to avoid an assert
+ for double assignment of the diagnostics area when run_query()
+ is called from ndbcluster_reset_logs(), which is called from
+ mysql_flush().
+ */
+ thd->main_da.reset_diagnostics_area();
thd->options= save_thd_options;
- thd->query_length= save_query_length;
- thd->query= save_query;
+ thd->query_length= save_thd_query_length;
+ thd->query= save_thd_query;
thd->variables.pseudo_thread_id= save_thread_id;
- thd->net= save_net;
+ thd->status_var= save_thd_status_var;
+ thd->transaction.all= save_thd_transaction_all;
+ thd->transaction.stmt= save_thd_transaction_stmt;
+ thd->net= save_thd_net;
if (thd == injector_thd)
{
@@ -321,7 +345,7 @@ ndbcluster_binlog_open_table(THD *thd, NDB_SHARE *share,
DBUG_ENTER("ndbcluster_binlog_open_table");
safe_mutex_assert_owner(&LOCK_open);
- init_tmp_table_share(table_share, share->db, 0, share->table_name,
+ init_tmp_table_share(thd, table_share, share->db, 0, share->table_name,
share->key);
if ((error= open_table_def(thd, table_share, 0)))
{
@@ -775,10 +799,11 @@ static int ndbcluster_create_ndb_apply_status_table(THD *thd)
" log_name VARCHAR(255) BINARY NOT NULL, "
" start_pos BIGINT UNSIGNED NOT NULL, "
" end_pos BIGINT UNSIGNED NOT NULL, "
- " PRIMARY KEY USING HASH (server_id) ) ENGINE=NDB");
+ " PRIMARY KEY USING HASH (server_id) ) ENGINE=NDB CHARACTER SET latin1");
- const int no_print_error[4]= {ER_TABLE_EXISTS_ERROR,
+ const int no_print_error[5]= {ER_TABLE_EXISTS_ERROR,
701,
+ 702,
4009,
0}; // do not print error 701 etc
run_query(thd, buf, end, no_print_error, TRUE);
@@ -835,10 +860,11 @@ static int ndbcluster_create_schema_table(THD *thd)
" id INT UNSIGNED NOT NULL,"
" version INT UNSIGNED NOT NULL,"
" type INT UNSIGNED NOT NULL,"
- " PRIMARY KEY USING HASH (db,name) ) ENGINE=NDB");
+ " PRIMARY KEY USING HASH (db,name) ) ENGINE=NDB CHARACTER SET latin1");
- const int no_print_error[4]= {ER_TABLE_EXISTS_ERROR,
+ const int no_print_error[5]= {ER_TABLE_EXISTS_ERROR,
701,
+ 702,
4009,
0}; // do not print error 701 etc
run_query(thd, buf, end, no_print_error, TRUE);
@@ -883,7 +909,7 @@ int ndbcluster_setup_binlog_table_shares(THD *thd)
{
if (ndb_extra_logging)
sql_print_information("NDB Binlog: ndb tables writable");
- close_cached_tables((THD*) 0, 0, (TABLE_LIST*) 0, TRUE);
+ close_cached_tables(NULL, NULL, TRUE, FALSE, FALSE);
}
pthread_mutex_unlock(&LOCK_open);
/* Signal injector thread that all is setup */
@@ -976,7 +1002,7 @@ static void ndbcluster_get_schema(NDB_SHARE *share,
uint blob_len= field_blob->get_length((*field)->ptr);
uchar *blob_ptr= 0;
field_blob->get_ptr(&blob_ptr);
- assert(blob_len == 0 || blob_ptr != 0);
+ DBUG_ASSERT(blob_len == 0 || blob_ptr != 0);
s->query_length= blob_len;
s->query= sql_strmake((char*) blob_ptr, blob_len);
}
@@ -1683,7 +1709,7 @@ ndb_handle_schema_change(THD *thd, Ndb *ndb, NdbEventOperation *pOp,
bzero((char*) &table_list,sizeof(table_list));
table_list.db= (char *)dbname;
table_list.alias= table_list.table_name= (char *)tabname;
- close_cached_tables(thd, 0, &table_list, TRUE);
+ close_cached_tables(thd, &table_list, TRUE, FALSE, FALSE);
if ((error= ndbcluster_binlog_open_table(thd, share,
table_share, table, 1)))
@@ -1789,7 +1815,7 @@ ndb_handle_schema_change(THD *thd, Ndb *ndb, NdbEventOperation *pOp,
bzero((char*) &table_list,sizeof(table_list));
table_list.db= (char *)dbname;
table_list.alias= table_list.table_name= (char *)tabname;
- close_cached_tables(thd, 0, &table_list);
+ close_cached_tables(thd, &table_list, FALSE, FALSE, FALSE);
/* ndb_share reference create free */
DBUG_PRINT("NDB_SHARE", ("%s create free use_count: %u",
share->key, share->use_count));
@@ -1908,7 +1934,7 @@ ndb_binlog_thread_handle_schema_event(THD *thd, Ndb *ndb,
bzero((char*) &table_list,sizeof(table_list));
table_list.db= schema->db;
table_list.alias= table_list.table_name= schema->name;
- close_cached_tables(thd, 0, &table_list, FALSE);
+ close_cached_tables(thd, &table_list, FALSE, FALSE, FALSE);
}
/* ndb_share reference temporary free */
if (share)
@@ -2032,7 +2058,7 @@ ndb_binlog_thread_handle_schema_event(THD *thd, Ndb *ndb,
pthread_mutex_unlock(&ndb_schema_share_mutex);
/* end protect ndb_schema_share */
- close_cached_tables((THD*) 0, 0, (TABLE_LIST*) 0, FALSE);
+ close_cached_tables(NULL, NULL, FALSE, FALSE, FALSE);
// fall through
case NDBEVENT::TE_ALTER:
ndb_handle_schema_change(thd, ndb, pOp, tmp_share);
@@ -2189,7 +2215,7 @@ ndb_binlog_thread_handle_schema_event_post_epoch(THD *thd,
bzero((char*) &table_list,sizeof(table_list));
table_list.db= schema->db;
table_list.alias= table_list.table_name= schema->name;
- close_cached_tables(thd, 0, &table_list, FALSE);
+ close_cached_tables(thd, &table_list, FALSE, FALSE, FALSE);
}
if (schema_type != SOT_ALTER_TABLE)
break;
@@ -2300,9 +2326,12 @@ static int open_ndb_binlog_index(THD *thd, TABLE_LIST *tables,
thd->clear_error();
if (open_tables(thd, &tables, &counter, MYSQL_LOCK_IGNORE_FLUSH))
{
- sql_print_error("NDB Binlog: Opening ndb_binlog_index: %d, '%s'",
- thd->net.last_errno,
- thd->net.last_error ? thd->net.last_error : "");
+ if (thd->killed)
+ sql_print_error("NDB Binlog: Opening ndb_binlog_index: killed");
+ else
+ sql_print_error("NDB Binlog: Opening ndb_binlog_index: %d, '%s'",
+ thd->main_da.sql_errno(),
+ thd->main_da.message());
thd->proc_info= save_proc_info;
return -1;
}
@@ -3587,6 +3616,7 @@ pthread_handler_t ndb_binlog_thread_func(void *arg)
Thd_ndb *thd_ndb=0;
int ndb_update_ndb_binlog_index= 1;
injector *inj= injector::instance();
+ uint incident_id= 0;
#ifdef RUN_NDB_BINLOG_TIMER
Timer main_timer;
@@ -3621,6 +3651,7 @@ pthread_handler_t ndb_binlog_thread_func(void *arg)
pthread_exit(0);
DBUG_RETURN(NULL);
}
+ lex_start(thd);
thd->init_for_queries();
thd->command= COM_DAEMON;
@@ -3692,18 +3723,64 @@ pthread_handler_t ndb_binlog_thread_func(void *arg)
pthread_mutex_unlock(&injector_mutex);
pthread_cond_signal(&injector_cond);
+ /*
+ wait for mysql server to start (so that the binlog is started
+ and thus can receive the first GAP event)
+ */
+ pthread_mutex_lock(&LOCK_server_started);
+ while (!mysqld_server_started)
+ {
+ struct timespec abstime;
+ set_timespec(abstime, 1);
+ pthread_cond_timedwait(&COND_server_started, &LOCK_server_started,
+ &abstime);
+ if (ndbcluster_terminating)
+ {
+ pthread_mutex_unlock(&LOCK_server_started);
+ pthread_mutex_lock(&LOCK_ndb_util_thread);
+ goto err;
+ }
+ }
+ pthread_mutex_unlock(&LOCK_server_started);
restart:
/*
Main NDB Injector loop
*/
+ while (ndb_binlog_running)
{
/*
- Always insert a GAP event as we cannot know what has happened in the cluster
- while not being connected.
+ check if it is the first log, if so we do not insert a GAP event
+ as there is really no log to have a GAP in
+ */
+ if (incident_id == 0)
+ {
+ LOG_INFO log_info;
+ mysql_bin_log.get_current_log(&log_info);
+ int len= strlen(log_info.log_file_name);
+ uint no= 0;
+ if ((sscanf(log_info.log_file_name + len - 6, "%u", &no) == 1) &&
+ no == 1)
+ {
+ /* this is the fist log, so skip GAP event */
+ break;
+ }
+ }
+
+ /*
+ Always insert a GAP event as we cannot know what has happened
+ in the cluster while not being connected.
*/
- LEX_STRING const msg= { C_STRING_WITH_LEN("Cluster connect") };
- inj->record_incident(thd, INCIDENT_LOST_EVENTS, msg);
+ LEX_STRING const msg[2]=
+ {
+ { C_STRING_WITH_LEN("mysqld startup") },
+ { C_STRING_WITH_LEN("cluster disconnect")}
+ };
+ IF_DBUG(int error=)
+ inj->record_incident(thd, INCIDENT_LOST_EVENTS, msg[incident_id]);
+ DBUG_ASSERT(!error);
+ break;
}
+ incident_id= 1;
{
thd->proc_info= "Waiting for ndbcluster to start";
@@ -3959,6 +4036,7 @@ restart:
i_ndb->setReportThreshEventFreeMem(ndb_report_thresh_binlog_mem_usage);
bzero((char*) &row, sizeof(row));
+ thd->variables.character_set_client= &my_charset_latin1;
injector::transaction trans;
// pass table map before epoch
{
diff --git a/sql/ha_ndbcluster_cond.cc b/sql/ha_ndbcluster_cond.cc
index 94342c6d2ad..d8dff3c7e2f 100644
--- a/sql/ha_ndbcluster_cond.cc
+++ b/sql/ha_ndbcluster_cond.cc
@@ -1338,9 +1338,23 @@ ha_ndbcluster_cond::generate_scan_filter(NdbScanOperation *op)
if (m_cond_stack)
{
- NdbScanFilter filter(op);
+ NdbScanFilter filter(op, false); // don't abort on too large
- DBUG_RETURN(generate_scan_filter_from_cond(filter));
+ int ret=generate_scan_filter_from_cond(filter);
+ if (ret != 0)
+ {
+ const NdbError& err=filter.getNdbError();
+ if (err.code == NdbScanFilter::FilterTooLarge)
+ {
+ // err.message has static storage
+ DBUG_PRINT("info", ("%s", err.message));
+ push_warning(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
+ err.code, err.message);
+ ret=0;
+ }
+ }
+ if (ret != 0)
+ DBUG_RETURN(ret);
}
else
{
@@ -1391,7 +1405,7 @@ int ha_ndbcluster_cond::generate_scan_filter_from_key(NdbScanOperation *op,
{
KEY_PART_INFO* key_part= key_info->key_part;
KEY_PART_INFO* end= key_part+key_info->key_parts;
- NdbScanFilter filter(op);
+ NdbScanFilter filter(op, true); // abort on too large
int res;
DBUG_ENTER("generate_scan_filter_from_key");
diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc
index 1150cf41417..51070a525c5 100644
--- a/sql/ha_partition.cc
+++ b/sql/ha_partition.cc
@@ -367,7 +367,7 @@ bool ha_partition::initialise_partition(MEM_ROOT *mem_root)
HA_CAN_GEOMETRY, HA_CAN_FULLTEXT, HA_CAN_SQL_HANDLER, HA_DUPLICATE_POS,
HA_CAN_INSERT_DELAYED is disabled until further investigated.
*/
- m_table_flags= (ulong)m_file[0]->table_flags();
+ m_table_flags= (ulong)m_file[0]->ha_table_flags();
m_low_byte_first= m_file[0]->low_byte_first();
m_pkey_is_clustered= TRUE;
file_array= m_file;
@@ -382,7 +382,7 @@ bool ha_partition::initialise_partition(MEM_ROOT *mem_root)
}
if (!file->primary_key_is_clustered())
m_pkey_is_clustered= FALSE;
- m_table_flags&= file->table_flags();
+ m_table_flags&= file->ha_table_flags();
} while (*(++file_array));
m_table_flags&= ~(HA_CAN_GEOMETRY | HA_CAN_FULLTEXT | HA_DUPLICATE_POS |
HA_CAN_SQL_HANDLER | HA_CAN_INSERT_DELAYED |
@@ -616,7 +616,7 @@ int ha_partition::drop_partitions(const char *path)
sub_elem->partition_name, name_variant);
file= m_file[part];
DBUG_PRINT("info", ("Drop subpartition %s", part_name_buff));
- if ((ret_error= file->delete_table((const char *) part_name_buff)))
+ if ((ret_error= file->ha_delete_table(part_name_buff)))
error= ret_error;
if (deactivate_ddl_log_entry(sub_elem->log_entry->entry_pos))
error= 1;
@@ -629,7 +629,7 @@ int ha_partition::drop_partitions(const char *path)
TRUE);
file= m_file[i];
DBUG_PRINT("info", ("Drop partition %s", part_name_buff));
- if ((ret_error= file->delete_table((const char *) part_name_buff)))
+ if ((ret_error= file->ha_delete_table(part_name_buff)))
error= ret_error;
if (deactivate_ddl_log_entry(part_elem->log_entry->entry_pos))
error= 1;
@@ -707,7 +707,7 @@ int ha_partition::rename_partitions(const char *path)
sub_elem->partition_name,
NORMAL_PART_NAME);
DBUG_PRINT("info", ("Delete subpartition %s", norm_name_buff));
- if ((ret_error= file->delete_table((const char *) norm_name_buff)))
+ if ((ret_error= file->ha_delete_table(norm_name_buff)))
error= ret_error;
else if (deactivate_ddl_log_entry(sub_elem->log_entry->entry_pos))
error= 1;
@@ -722,7 +722,7 @@ int ha_partition::rename_partitions(const char *path)
part_elem->partition_name, NORMAL_PART_NAME,
TRUE);
DBUG_PRINT("info", ("Delete partition %s", norm_name_buff));
- if ((ret_error= file->delete_table((const char *) norm_name_buff)))
+ if ((ret_error= file->ha_delete_table(norm_name_buff)))
error= ret_error;
else if (deactivate_ddl_log_entry(part_elem->log_entry->entry_pos))
error= 1;
@@ -778,7 +778,7 @@ int ha_partition::rename_partitions(const char *path)
{
file= m_reorged_file[part_count++];
DBUG_PRINT("info", ("Delete subpartition %s", norm_name_buff));
- if ((ret_error= file->delete_table((const char *) norm_name_buff)))
+ if ((ret_error= file->ha_delete_table(norm_name_buff)))
error= ret_error;
else if (deactivate_ddl_log_entry(sub_elem->log_entry->entry_pos))
error= 1;
@@ -791,8 +791,8 @@ int ha_partition::rename_partitions(const char *path)
TEMP_PART_NAME);
DBUG_PRINT("info", ("Rename subpartition from %s to %s",
part_name_buff, norm_name_buff));
- if ((ret_error= file->rename_table((const char *) part_name_buff,
- (const char *) norm_name_buff)))
+ if ((ret_error= file->ha_rename_table(part_name_buff,
+ norm_name_buff)))
error= ret_error;
else if (deactivate_ddl_log_entry(sub_elem->log_entry->entry_pos))
error= 1;
@@ -809,7 +809,7 @@ int ha_partition::rename_partitions(const char *path)
{
file= m_reorged_file[part_count++];
DBUG_PRINT("info", ("Delete partition %s", norm_name_buff));
- if ((ret_error= file->delete_table((const char *) norm_name_buff)))
+ if ((ret_error= file->ha_delete_table(norm_name_buff)))
error= ret_error;
else if (deactivate_ddl_log_entry(part_elem->log_entry->entry_pos))
error= 1;
@@ -821,8 +821,8 @@ int ha_partition::rename_partitions(const char *path)
TRUE);
DBUG_PRINT("info", ("Rename partition from %s to %s",
part_name_buff, norm_name_buff));
- if ((ret_error= file->rename_table((const char *) part_name_buff,
- (const char *) norm_name_buff)))
+ if ((ret_error= file->ha_rename_table(part_name_buff,
+ norm_name_buff)))
error= ret_error;
else if (deactivate_ddl_log_entry(part_elem->log_entry->entry_pos))
error= 1;
@@ -1036,9 +1036,9 @@ static int handle_opt_part(THD *thd, HA_CHECK_OPT *check_opt,
DBUG_PRINT("enter", ("flag = %u", flag));
if (flag == OPTIMIZE_PARTS)
- error= file->optimize(thd, check_opt);
+ error= file->ha_optimize(thd, check_opt);
else if (flag == ANALYZE_PARTS)
- error= file->analyze(thd, check_opt);
+ error= file->ha_analyze(thd, check_opt);
else if (flag == CHECK_PARTS)
error= file->ha_check(thd, check_opt);
else if (flag == REPAIR_PARTS)
@@ -1139,7 +1139,7 @@ int ha_partition::prepare_new_partition(TABLE *tbl,
if ((error= set_up_table_before_create(tbl, part_name, create_info,
0, p_elem)))
goto error;
- if ((error= file->create(part_name, tbl, create_info)))
+ if ((error= file->ha_create(part_name, tbl, create_info)))
goto error;
create_flag= TRUE;
if ((error= file->ha_open(tbl, part_name, m_mode, m_open_test_lock)))
@@ -1150,13 +1150,13 @@ int ha_partition::prepare_new_partition(TABLE *tbl,
assumes that external_lock() is last call that may fail here.
Otherwise see description for cleanup_new_partition().
*/
- if ((error= file->external_lock(current_thd, m_lock_type)))
+ if ((error= file->ha_external_lock(current_thd, m_lock_type)))
goto error;
DBUG_RETURN(0);
error:
if (create_flag)
- VOID(file->delete_table(part_name));
+ VOID(file->ha_delete_table(part_name));
DBUG_RETURN(error);
}
@@ -1531,6 +1531,14 @@ int ha_partition::copy_partitions(ulonglong *copied, ulonglong *deleted)
longlong func_value;
DBUG_ENTER("ha_partition::copy_partitions");
+ if (m_part_info->linear_hash_ind)
+ {
+ if (m_part_info->part_type == HASH_PARTITION)
+ set_linear_hash_mask(m_part_info, m_part_info->no_parts);
+ else
+ set_linear_hash_mask(m_part_info, m_part_info->no_subparts);
+ }
+
while (reorg_part < m_reorged_parts)
{
handler *file= m_reorged_file[reorg_part];
@@ -1566,14 +1574,18 @@ int ha_partition::copy_partitions(ulonglong *copied, ulonglong *deleted)
}
else
{
+ THD *thd= ha_thd();
/* Copy record to new handler */
copied++;
- if ((result= m_new_file[new_part]->write_row(m_rec0)))
+ tmp_disable_binlog(thd); /* Do not replicate the low-level changes. */
+ result= m_new_file[new_part]->ha_write_row(m_rec0);
+ reenable_binlog(thd);
+ if (result)
goto error;
}
}
late_extra_no_cache(reorg_part);
- file->rnd_end();
+ file->ha_rnd_end();
reorg_part++;
}
DBUG_RETURN(FALSE);
@@ -1598,7 +1610,12 @@ error:
void ha_partition::update_create_info(HA_CREATE_INFO *create_info)
{
- m_file[0]->update_create_info(create_info);
+ info(HA_STATUS_AUTO);
+
+ if (!(create_info->used_fields & HA_CREATE_USED_AUTO))
+ create_info->auto_increment_value= stats.auto_increment_value;
+
+ create_info->data_file_name= create_info->index_file_name = NULL;
return;
}
@@ -1685,16 +1702,15 @@ uint ha_partition::del_ren_cre_table(const char *from,
{ // Rename branch
create_partition_name(to_buff, to, name_buffer_ptr, NORMAL_PART_NAME,
FALSE);
- error= (*file)->rename_table((const char*) from_buff,
- (const char*) to_buff);
+ error= (*file)->ha_rename_table(from_buff, to_buff);
}
else if (table_arg == NULL) // delete branch
- error= (*file)->delete_table((const char*) from_buff);
+ error= (*file)->ha_delete_table(from_buff);
else
{
if ((error= set_up_table_before_create(table_arg, from_buff,
create_info, i, NULL)) ||
- ((error= (*file)->create(from_buff, table_arg, create_info))))
+ ((error= (*file)->ha_create(from_buff, table_arg, create_info))))
goto create_error;
}
name_buffer_ptr= strend(name_buffer_ptr) + 1;
@@ -1709,7 +1725,7 @@ create_error:
{
create_partition_name(from_buff, from, name_buffer_ptr, NORMAL_PART_NAME,
FALSE);
- VOID((*file)->delete_table((const char*) from_buff));
+ VOID((*file)->ha_delete_table((const char*) from_buff));
name_buffer_ptr= strend(name_buffer_ptr) + 1;
}
DBUG_RETURN(error);
@@ -1752,6 +1768,7 @@ partition_element *ha_partition::find_partition_element(uint part_id)
return part_elem;
}
DBUG_ASSERT(0);
+ my_error(ER_OUT_OF_RESOURCES, MYF(0));
current_thd->fatal_error(); // Abort
return NULL;
}
@@ -2300,7 +2317,7 @@ int ha_partition::open(const char *name, int mode, uint test_if_locked)
}
/* Recalculate table flags as they may change after open */
- m_table_flags= m_file[0]->table_flags();
+ m_table_flags= m_file[0]->ha_table_flags();
file= m_file;
do
{
@@ -2312,7 +2329,7 @@ int ha_partition::open(const char *name, int mode, uint test_if_locked)
m_no_locks+= (*file)->lock_count();
name_buffer_ptr+= strlen(name_buffer_ptr) + 1;
set_if_bigger(ref_length, ((*file)->ref_length));
- m_table_flags&= (*file)->table_flags();
+ m_table_flags&= (*file)->ha_table_flags();
} while (*(++file));
m_table_flags&= ~(HA_CAN_GEOMETRY | HA_CAN_FULLTEXT | HA_DUPLICATE_POS |
HA_CAN_SQL_HANDLER | HA_CAN_INSERT_DELAYED);
@@ -2468,7 +2485,7 @@ repeat:
{
DBUG_PRINT("info", ("external_lock(thd, %d) iteration %d",
lock_type, (int) (file - m_file)));
- if ((error= (*file)->external_lock(thd, lock_type)))
+ if ((error= (*file)->ha_external_lock(thd, lock_type)))
{
if (F_UNLCK != lock_type)
goto err_handler;
@@ -2487,7 +2504,7 @@ repeat:
err_handler:
while (file-- != m_file)
{
- (*file)->external_lock(thd, F_UNLCK);
+ (*file)->ha_external_lock(thd, F_UNLCK);
}
DBUG_RETURN(error);
}
@@ -2678,7 +2695,9 @@ int ha_partition::write_row(uchar * buf)
uint32 part_id;
int error;
longlong func_value;
- bool autoincrement_lock= false;
+ bool autoincrement_lock= FALSE;
+ my_bitmap_map *old_map;
+ THD *thd= ha_thd();
#ifdef NOT_NEEDED
uchar *rec0= m_rec0;
#endif
@@ -2705,8 +2724,17 @@ int ha_partition::write_row(uchar * buf)
use autoincrement_lock variable to avoid unnecessary locks.
Probably not an ideal solution.
*/
- autoincrement_lock= true;
- pthread_mutex_lock(&table_share->mutex);
+ if (table_share->tmp_table == NO_TMP_TABLE)
+ {
+ /*
+ Bug#30878 crash when alter table from non partitioned table
+ to partitioned.
+ Checking if tmp table then there is no need to lock,
+ and the table_share->mutex may not be initialised.
+ */
+ autoincrement_lock= TRUE;
+ pthread_mutex_lock(&table_share->mutex);
+ }
error= update_auto_increment();
/*
@@ -2715,10 +2743,10 @@ int ha_partition::write_row(uchar * buf)
the correct partition. We must check and fail if neccessary.
*/
if (error)
- DBUG_RETURN(error);
+ goto exit;
}
- my_bitmap_map *old_map= dbug_tmp_use_all_columns(table, table->read_set);
+ old_map= dbug_tmp_use_all_columns(table, table->read_set);
#ifdef NOT_NEEDED
if (likely(buf == rec0))
#endif
@@ -2741,7 +2769,9 @@ int ha_partition::write_row(uchar * buf)
}
m_last_part= part_id;
DBUG_PRINT("info", ("Insert in partition %d", part_id));
- error= m_file[part_id]->write_row(buf);
+ tmp_disable_binlog(thd); /* Do not replicate the low-level changes. */
+ error= m_file[part_id]->ha_write_row(buf);
+ reenable_binlog(thd);
exit:
if (autoincrement_lock)
pthread_mutex_unlock(&table_share->mutex);
@@ -2782,17 +2812,30 @@ exit:
int ha_partition::update_row(const uchar *old_data, uchar *new_data)
{
+ THD *thd= ha_thd();
uint32 new_part_id, old_part_id;
- int error;
+ int error= 0;
longlong func_value;
+ timestamp_auto_set_type orig_timestamp_type= table->timestamp_field_type;
DBUG_ENTER("ha_partition::update_row");
+ /*
+ We need to set timestamp field once before we calculate
+ the partition. Then we disable timestamp calculations
+ inside m_file[*]->update_row() methods
+ */
+ if (orig_timestamp_type & TIMESTAMP_AUTO_SET_ON_UPDATE)
+ {
+ table->timestamp_field->set_time();
+ table->timestamp_field_type= TIMESTAMP_NO_AUTO_SET;
+ }
+
if ((error= get_parts_for_update(old_data, new_data, table->record[0],
m_part_info, &old_part_id, &new_part_id,
&func_value)))
{
m_part_info->err_value= func_value;
- DBUG_RETURN(error);
+ goto exit;
}
/*
@@ -2804,23 +2847,36 @@ int ha_partition::update_row(const uchar *old_data, uchar *new_data)
if (new_part_id == old_part_id)
{
DBUG_PRINT("info", ("Update in partition %d", new_part_id));
- DBUG_RETURN(m_file[new_part_id]->update_row(old_data, new_data));
+ tmp_disable_binlog(thd); /* Do not replicate the low-level changes. */
+ error= m_file[new_part_id]->ha_update_row(old_data, new_data);
+ reenable_binlog(thd);
+ goto exit;
}
else
{
DBUG_PRINT("info", ("Update from partition %d to partition %d",
old_part_id, new_part_id));
- if ((error= m_file[new_part_id]->write_row(new_data)))
- DBUG_RETURN(error);
- if ((error= m_file[old_part_id]->delete_row(old_data)))
+ tmp_disable_binlog(thd); /* Do not replicate the low-level changes. */
+ error= m_file[new_part_id]->ha_write_row(new_data);
+ reenable_binlog(thd);
+ if (error)
+ goto exit;
+
+ tmp_disable_binlog(thd); /* Do not replicate the low-level changes. */
+ error= m_file[old_part_id]->ha_delete_row(old_data);
+ reenable_binlog(thd);
+ if (error)
{
#ifdef IN_THE_FUTURE
(void) m_file[new_part_id]->delete_last_inserted_row(new_data);
#endif
- DBUG_RETURN(error);
+ goto exit;
}
}
- DBUG_RETURN(0);
+
+exit:
+ table->timestamp_field_type= orig_timestamp_type;
+ DBUG_RETURN(error);
}
@@ -2856,6 +2912,7 @@ int ha_partition::delete_row(const uchar *buf)
{
uint32 part_id;
int error;
+ THD *thd= ha_thd();
DBUG_ENTER("ha_partition::delete_row");
if ((error= get_part_for_delete(buf, m_rec0, m_part_info, &part_id)))
@@ -2863,7 +2920,10 @@ int ha_partition::delete_row(const uchar *buf)
DBUG_RETURN(error);
}
m_last_part= part_id;
- DBUG_RETURN(m_file[part_id]->delete_row(buf));
+ tmp_disable_binlog(thd);
+ error= m_file[part_id]->ha_delete_row(buf);
+ reenable_binlog(thd);
+ DBUG_RETURN(error);
}
@@ -2898,7 +2958,7 @@ int ha_partition::delete_all_rows()
file= m_file;
do
{
- if ((error= (*file)->delete_all_rows()))
+ if ((error= (*file)->ha_delete_all_rows()))
DBUG_RETURN(error);
} while (*(++file));
DBUG_RETURN(0);
@@ -2924,12 +2984,7 @@ void ha_partition::start_bulk_insert(ha_rows rows)
handler **file;
DBUG_ENTER("ha_partition::start_bulk_insert");
- if (!rows)
- {
- /* Avoid allocation big caches in all underlaying handlers */
- DBUG_VOID_RETURN;
- }
- rows= rows/m_tot_parts + 1;
+ rows= rows ? rows/m_tot_parts + 1 : 0;
file= m_file;
do
{
@@ -3391,14 +3446,17 @@ int ha_partition::index_init(uint inx, bool sorted)
*/
if (m_lock_type == F_WRLCK)
bitmap_union(table->read_set, &m_part_info->full_part_field_set);
- else if (sorted && m_table_flags & HA_PARTIAL_COLUMN_READ)
+ else if (sorted)
{
/*
- An ordered scan is requested and necessary fields aren't in read_set.
- This may happen e.g. with SELECT COUNT(*) FROM t1. We must ensure
- that all fields of current key are included into read_set, as
- partitioning requires them for sorting
- (see ha_partition::handle_ordered_index_scan).
+ An ordered scan is requested. We must make sure all fields of the
+ used index are in the read set, as partitioning requires them for
+ sorting (see ha_partition::handle_ordered_index_scan).
+
+ The SQL layer may request an ordered index scan without having index
+ fields in the read set when
+ - it needs to do an ordered scan over an index prefix.
+ - it evaluates ORDER BY with SELECT COUNT(*) FROM t1.
TODO: handle COUNT(*) queries via unordered scan.
*/
@@ -3942,7 +4000,7 @@ int ha_partition::partition_scan_set_up(uchar * buf, bool idx_read_flag)
int ha_partition::handle_unordered_next(uchar *buf, bool is_next_same)
{
- handler *file= file= m_file[m_part_spec.start_part];
+ handler *file= m_file[m_part_spec.start_part];
int error;
DBUG_ENTER("ha_partition::handle_unordered_next");
@@ -3961,7 +4019,8 @@ int ha_partition::handle_unordered_next(uchar *buf, bool is_next_same)
}
else if (!(error= file->index_next(buf)))
{
- if (compare_key(end_range) <= 0)
+ if (!(file->ha_table_flags() & HA_READ_ORDER) ||
+ compare_key(end_range) <= 0)
{
m_last_part= m_part_spec.start_part;
DBUG_RETURN(0); // Row was in range
@@ -4038,7 +4097,8 @@ int ha_partition::handle_unordered_scan_next_partition(uchar * buf)
}
if (!error)
{
- if (compare_key(end_range) <= 0)
+ if (!(file->ha_table_flags() & HA_READ_ORDER) ||
+ compare_key(end_range) <= 0)
{
m_last_part= i;
DBUG_RETURN(0);
@@ -4959,7 +5019,7 @@ int ha_partition::reset(void)
file= m_file;
do
{
- if ((tmp= (*file)->reset()))
+ if ((tmp= (*file)->ha_reset()))
result= tmp;
} while (*(++file));
DBUG_RETURN(result);
@@ -5601,7 +5661,7 @@ void ha_partition::release_auto_increment()
for (uint i= 0; i < m_tot_parts; i++)
{
- m_file[i]->release_auto_increment();
+ m_file[i]->ha_release_auto_increment();
}
DBUG_VOID_RETURN;
}
@@ -5637,7 +5697,7 @@ int ha_partition::disable_indexes(uint mode)
for (file= m_file; *file; file++)
{
- if ((error= (*file)->disable_indexes(mode)))
+ if ((error= (*file)->ha_disable_indexes(mode)))
break;
}
return error;
@@ -5661,7 +5721,7 @@ int ha_partition::enable_indexes(uint mode)
for (file= m_file; *file; file++)
{
- if ((error= (*file)->enable_indexes(mode)))
+ if ((error= (*file)->ha_enable_indexes(mode)))
break;
}
return error;
diff --git a/sql/handler.cc b/sql/handler.cc
index 75c3a64bc27..95d63740039 100644
--- a/sql/handler.cc
+++ b/sql/handler.cc
@@ -199,8 +199,8 @@ handlerton *ha_resolve_by_legacy_type(THD *thd, enum legacy_db_type db_type)
}
-/** @brief
- Use other database handler if databasehandler is not compiled in
+/**
+ Use other database handler if databasehandler is not compiled in.
*/
handlerton *ha_checktype(THD *thd, enum legacy_db_type database_type,
bool no_substitute, bool report_error)
@@ -280,15 +280,13 @@ handler *get_ha_partition(partition_info *part_info)
#endif
-/** @brief
+/**
Register handler error messages for use with my_error().
- SYNOPSIS
- ha_init_errors()
-
- RETURN
+ @retval
0 OK
- != 0 Error
+ @retval
+ !=0 Error
*/
static int ha_init_errors(void)
{
@@ -349,15 +347,13 @@ static int ha_init_errors(void)
}
-/** @brief
+/**
Unregister handler error messages.
- SYNOPSIS
- ha_finish_errors()
-
- RETURN
+ @retval
0 OK
- != 0 Error
+ @retval
+ !=0 Error
*/
static int ha_finish_errors(void)
{
@@ -567,8 +563,9 @@ static my_bool closecon_handlerton(THD *thd, plugin_ref plugin,
}
-/** @brief
- don't bother to rollback here, it's done already
+/**
+ @note
+ don't bother to rollback here, it's done already
*/
void ha_close_connection(THD* thd)
{
@@ -578,17 +575,16 @@ void ha_close_connection(THD* thd)
/* ========================================================================
======================= TRANSACTIONS ===================================*/
-/** @brief
- Register a storage engine for a transaction
+/**
+ Register a storage engine for a transaction.
- DESCRIPTION
- Every storage engine MUST call this function when it starts
- a transaction or a statement (that is it must be called both for the
- "beginning of transaction" and "beginning of statement").
- Only storage engines registered for the transaction/statement
- will know when to commit/rollback it.
+ Every storage engine MUST call this function when it starts
+ a transaction or a statement (that is it must be called both for the
+ "beginning of transaction" and "beginning of statement").
+ Only storage engines registered for the transaction/statement
+ will know when to commit/rollback it.
- NOTE
+ @note
trans_register_ha is idempotent - storage engine may register many
times per transaction.
@@ -620,10 +616,11 @@ void trans_register_ha(THD *thd, bool all, handlerton *ht_arg)
DBUG_VOID_RETURN;
}
-/** @brief
- RETURN
- 0 - ok
- 1 - error, transaction was rolled back
+/**
+ @retval
+ 0 ok
+ @retval
+ 1 error, transaction was rolled back
*/
int ha_prepare(THD *thd)
{
@@ -660,11 +657,19 @@ int ha_prepare(THD *thd)
DBUG_RETURN(error);
}
-/** @brief
- RETURN
- 0 - ok
- 1 - transaction was rolled back
- 2 - error during commit, data may be inconsistent
+/**
+ @retval
+ 0 ok
+ @retval
+ 1 transaction was rolled back
+ @retval
+ 2 error during commit, data may be inconsistent
+
+ @todo
+ Since we don't support nested statement transactions in 5.0,
+ we can't commit or rollback stmt transactions while we are inside
+ stored functions or triggers. So we simply do nothing now.
+ TODO: This should be fixed in later ( >= 5.1) releases.
*/
int ha_commit_trans(THD *thd, bool all)
{
@@ -757,9 +762,9 @@ end:
DBUG_RETURN(error);
}
-/** @brief
- NOTE - this function does not care about global read lock.
- A caller should.
+/**
+ @note
+ This function does not care about global read lock. A caller should.
*/
int ha_commit_one_phase(THD *thd, bool all)
{
@@ -869,13 +874,16 @@ int ha_rollback_trans(THD *thd, bool all)
DBUG_RETURN(error);
}
-/** @brief
- This is used to commit or rollback a single statement depending on the value
- of error. Note that if the autocommit is on, then the following call inside
- InnoDB will commit or rollback the whole transaction (= the statement). The
- autocommit mechanism built into InnoDB is based on counting locks, but if
- the user has used LOCK TABLES then that mechanism does not know to do the
- commit.
+/**
+ This is used to commit or rollback a single statement depending on
+ the value of error.
+
+ @note
+ Note that if the autocommit is on, then the following call inside
+ InnoDB will commit or rollback the whole transaction (= the statement). The
+ autocommit mechanism built into InnoDB is based on counting locks, but if
+ the user has used LOCK TABLES then that mechanism does not know to do the
+ commit.
*/
int ha_autocommit_or_rollback(THD *thd, int error)
{
@@ -944,7 +952,10 @@ int ha_commit_or_rollback_by_xid(XID *xid, bool commit)
#ifndef DBUG_OFF
-/* this does not need to be multi-byte safe or anything */
+/**
+ @note
+ This does not need to be multi-byte safe or anything
+*/
static char* xid_to_str(char *buf, XID *xid)
{
int i;
@@ -996,24 +1007,21 @@ static char* xid_to_str(char *buf, XID *xid)
}
#endif
-/** @brief
- recover() step of xa
-
- NOTE
- there are three modes of operation:
-
- - automatic recover after a crash
- in this case commit_list != 0, tc_heuristic_recover==0
- all xids from commit_list are committed, others are rolled back
-
- - manual (heuristic) recover
- in this case commit_list==0, tc_heuristic_recover != 0
- DBA has explicitly specified that all prepared transactions should
- be committed (or rolled back).
-
- - no recovery (MySQL did not detect a crash)
- in this case commit_list==0, tc_heuristic_recover == 0
- there should be no prepared transactions in this case.
+/**
+ recover() step of xa.
+
+ @note
+ there are three modes of operation:
+ - automatic recover after a crash
+ in this case commit_list != 0, tc_heuristic_recover==0
+ all xids from commit_list are committed, others are rolled back
+ - manual (heuristic) recover
+ in this case commit_list==0, tc_heuristic_recover != 0
+ DBA has explicitly specified that all prepared transactions should
+ be committed (or rolled back).
+ - no recovery (MySQL did not detect a crash)
+ in this case commit_list==0, tc_heuristic_recover == 0
+ there should be no prepared transactions in this case.
*/
struct xarecover_st
{
@@ -1146,10 +1154,10 @@ int ha_recover(HASH *commit_list)
DBUG_RETURN(0);
}
-/** @brief
- return the list of XID's to a client, the same way SHOW commands do
+/**
+ return the list of XID's to a client, the same way SHOW commands do.
- NOTE
+ @note
I didn't find in XA specs that an RM cannot return the same XID twice,
so mysql_xa_recover does not filter XID's to ensure uniqueness.
It can be easily fixed later, if necessary.
@@ -1195,7 +1203,8 @@ bool mysql_xa_recover(THD *thd)
DBUG_RETURN(0);
}
-/** @brief
+/**
+ @details
This function should be called when MySQL sends rows of a SELECT result set
or the EOF mark to the client. It releases a possible adaptive hash index
S-latch held by thd in InnoDB and also releases a possible InnoDB query
@@ -1207,9 +1216,10 @@ bool mysql_xa_recover(THD *thd)
performs another SQL query. In MySQL-4.1 this is even more important because
there a connection can have several SELECT queries open at the same time.
- arguments:
- thd: the thread handle of the current connection
- return value: always 0
+ @param thd the thread handle of the current connection
+
+ @return
+ always 0
*/
static my_bool release_temporary_latches(THD *thd, plugin_ref plugin,
void *unused)
@@ -1276,8 +1286,9 @@ int ha_rollback_to_savepoint(THD *thd, SAVEPOINT *sv)
DBUG_RETURN(error);
}
-/** @brief
- note, that according to the sql standard (ISO/IEC 9075-2:2003)
+/**
+ @note
+ according to the sql standard (ISO/IEC 9075-2:2003)
section "4.33.4 SQL-statements and transaction states",
SAVEPOINT is *not* transaction-initiating SQL-statement
*/
@@ -1414,6 +1425,36 @@ static const char *check_lowercase_names(handler *file, const char *path,
}
+/**
+ An interceptor to hijack the text of the error message without
+ setting an error in the thread. We need the text to present it
+ in the form of a warning to the user.
+*/
+
+struct Ha_delete_table_error_handler: public Internal_error_handler
+{
+public:
+ virtual bool handle_error(uint sql_errno,
+ const char *message,
+ MYSQL_ERROR::enum_warning_level level,
+ THD *thd);
+ char buff[MYSQL_ERRMSG_SIZE];
+};
+
+
+bool
+Ha_delete_table_error_handler::
+handle_error(uint sql_errno,
+ const char *message,
+ MYSQL_ERROR::enum_warning_level level,
+ THD *thd)
+{
+ /* Grab the error message */
+ strmake(buff, message, sizeof(buff)-1);
+ return TRUE;
+}
+
+
/** @brief
This should return ENOENT if the file doesn't exists.
The .frm file will be deleted only if we return 0 or ENOENT
@@ -1438,27 +1479,15 @@ int ha_delete_table(THD *thd, handlerton *table_type, const char *path,
DBUG_RETURN(ENOENT);
path= check_lowercase_names(file, path, tmp_path);
- if ((error= file->delete_table(path)) && generate_warning)
+ if ((error= file->ha_delete_table(path)) && generate_warning)
{
/*
Because file->print_error() use my_error() to generate the error message
- we must store the error state in thd, reset it and restore it to
- be able to get hold of the error message.
- (We should in the future either rewrite handler::print_error() or make
- a nice method of this.
+ we use an internal error handler to intercept it and store the text
+ in a temporary buffer. Later the message will be presented to user
+ as a warning.
*/
- bool query_error= thd->query_error;
- sp_rcontext *spcont= thd->spcont;
- SELECT_LEX *current_select= thd->lex->current_select;
- char buff[sizeof(thd->net.last_error)];
- char new_error[sizeof(thd->net.last_error)];
- int last_errno= thd->net.last_errno;
-
- strmake(buff, thd->net.last_error, sizeof(buff)-1);
- thd->query_error= 0;
- thd->spcont= NULL;
- thd->lex->current_select= 0;
- thd->net.last_error[0]= 0;
+ Ha_delete_table_error_handler ha_delete_table_error_handler;
/* Fill up strucutures that print_error may need */
dummy_share.path.str= (char*) path;
@@ -1469,18 +1498,19 @@ int ha_delete_table(THD *thd, handlerton *table_type, const char *path,
dummy_share.table_name.length= strlen(alias);
dummy_table.alias= alias;
- file->table_share= &dummy_share;
- file->table= &dummy_table;
+ file->change_table_ptr(&dummy_table, &dummy_share);
+
+ thd->push_internal_handler(&ha_delete_table_error_handler);
file->print_error(error, 0);
- strmake(new_error, thd->net.last_error, sizeof(buff)-1);
- /* restore thd */
- thd->query_error= query_error;
- thd->spcont= spcont;
- thd->lex->current_select= current_select;
- thd->net.last_errno= last_errno;
- strmake(thd->net.last_error, buff, sizeof(buff)-1);
- push_warning(thd, MYSQL_ERROR::WARN_LEVEL_ERROR, error, new_error);
+ thd->pop_internal_handler();
+
+ /*
+ XXX: should we convert *all* errors to warnings here?
+ What if the error is fatal?
+ */
+ push_warning(thd, MYSQL_ERROR::WARN_LEVEL_ERROR, error,
+ ha_delete_table_error_handler.buff);
}
delete file;
DBUG_RETURN(error);
@@ -1573,8 +1603,9 @@ int handler::ha_open(TABLE *table_arg, const char *name, int mode,
}
-/** @brief
- Read first row (only) from a table
+/**
+ Read first row (only) from a table.
+
This is never called for InnoDB tables, as these table types
has the HA_STATS_RECORDS_IS_EXACT set.
*/
@@ -1607,16 +1638,16 @@ int handler::read_first_row(uchar * buf, uint primary_key)
DBUG_RETURN(error);
}
-/** @brief
- Generate the next auto-increment number based on increment and offset:
+/**
+ Generate the next auto-increment number based on increment and offset.
computes the lowest number
- strictly greater than "nr"
- of the form: auto_increment_offset + N * auto_increment_increment
In most cases increment= offset= 1, in which case we get:
- 1,2,3,4,5,...
- If increment=10 and offset=5 and previous number is 1, we get:
- 1,5,15,25,35,...
+ @verbatim 1,2,3,4,5,... @endverbatim
+ If increment=10 and offset=5 and previous number is 1, we get:
+ @verbatim 1,5,15,25,35,... @endverbatim
*/
inline ulonglong
compute_next_insert_id(ulonglong nr,struct system_variables *variables)
@@ -1682,23 +1713,10 @@ prev_insert_id(ulonglong nr, struct system_variables *variables)
}
-/*
- Update the auto_increment field if necessary
-
- SYNOPSIS
- update_auto_increment()
-
- RETURN
- 0 ok
- HA_ERR_AUTOINC_READ_FAILED
- get_auto_increment() was called and returned ~(ulonglong) 0
- HA_ERR_AUTOINC_ERANGE
- storing value in field caused strict mode failure.
-
-
- IMPLEMENTATION
+/**
+ Update the auto_increment field if necessary.
- Updates the record's Field of type NEXT_NUMBER if:
+ Updates columns with type NEXT_NUMBER if:
- If column value is set to NULL (in which case
auto_increment_field_not_null is 0)
@@ -1749,13 +1767,20 @@ prev_insert_id(ulonglong nr, struct system_variables *variables)
present in thd->auto_inc_intervals_in_cur_stmt_for_binlog it is added to
this list.
- TODO
-
+ @todo
Replace all references to "next number" or NEXT_NUMBER to
"auto_increment", everywhere (see below: there is
table->auto_increment_field_not_null, and there also exists
table->next_number_field, it's not consistent).
+ @retval
+ 0 ok
+ @retval
+ HA_ERR_AUTOINC_READ_FAILED get_auto_increment() was called and
+ returned ~(ulonglong) 0
+ @retval
+ HA_ERR_AUTOINC_ERANGE storing value in field caused strict mode
+ failure.
*/
#define AUTO_INC_DEFAULT_NB_ROWS 1 // Some prefer 1024 here
@@ -2059,14 +2084,14 @@ void handler::print_keydup_error(uint key_nr, const char *msg)
}
-/** @brief
- Print error that we got from handler function
+/**
+ Print error that we got from handler function.
- NOTE
- In case of delete table it's only safe to use the following parts of
- the 'table' structure:
- table->s->path
- table->alias
+ @note
+ In case of delete table it's only safe to use the following parts of
+ the 'table' structure:
+ - table->s->path
+ - table->alias
*/
void handler::print_error(int error, myf errflag)
{
@@ -2203,7 +2228,7 @@ void handler::print_error(int error, myf errflag)
case HA_ERR_NO_SUCH_TABLE:
my_error(ER_NO_SUCH_TABLE, MYF(0), table_share->db.str,
table_share->table_name.str);
- break;
+ DBUG_VOID_RETURN;
case HA_ERR_RBR_LOGGING_FAILED:
textno= ER_BINLOG_ROW_LOGGING_FAILED;
break;
@@ -2253,14 +2278,14 @@ void handler::print_error(int error, myf errflag)
}
-/** @brief
- Return an error message specific to this handler
+/**
+ Return an error message specific to this handler.
- SYNOPSIS
- error error code previously returned by handler
- buf Pointer to String where to add error message
+ @param error error code previously returned by handler
+ @param buf pointer to String where to add error message
- Returns true if this is a temporary error
+ @return
+ Returns true if this is a temporary error
*/
bool handler::get_error_message(int error, String* buf)
{
@@ -2367,8 +2392,10 @@ err:
-/** @brief
- Return key if error because of duplicated keys */
+/**
+ @return
+ key if error because of duplicated keys
+*/
uint handler::get_dup_key(int error)
{
DBUG_ENTER("handler::get_dup_key");
@@ -2381,21 +2408,20 @@ uint handler::get_dup_key(int error)
}
-/** @brief
- Delete all files with extension from bas_ext()
+/**
+ Delete all files with extension from bas_ext().
- SYNOPSIS
- delete_table()
- name Base name of table
+ @param name Base name of table
- NOTES
+ @note
We assume that the handler may return more extensions than
was actually used for the file.
- RETURN
+ @retval
0 If we successfully deleted at least one file from base_ext and
- didn't get any other errors than ENOENT
- # Error
+ didn't get any other errors than ENOENT
+ @retval
+ !0 Error
*/
int handler::delete_table(const char *name)
{
@@ -2442,21 +2468,20 @@ void handler::drop_table(const char *name)
}
-/** @brief
- Performs checks upon the table.
-
- SYNOPSIS
- check()
- thd thread doing CHECK TABLE operation
- check_opt options from the parser
+/**
+ Performs checks upon the table.
- NOTES
+ @param thd thread doing CHECK TABLE operation
+ @param check_opt options from the parser
- RETURN
- HA_ADMIN_OK Successful upgrade
- HA_ADMIN_NEEDS_UPGRADE Table has structures requiring upgrade
- HA_ADMIN_NEEDS_ALTER Table has structures requiring ALTER TABLE
- HA_ADMIN_NOT_IMPLEMENTED
+ @retval
+ HA_ADMIN_OK Successful upgrade
+ @retval
+ HA_ADMIN_NEEDS_UPGRADE Table has structures requiring upgrade
+ @retval
+ HA_ADMIN_NEEDS_ALTER Table has structures requiring ALTER TABLE
+ @retval
+ HA_ADMIN_NOT_IMPLEMENTED
*/
int handler::ha_check(THD *thd, HA_CHECK_OPT *check_opt)
{
@@ -2482,6 +2507,12 @@ int handler::ha_check(THD *thd, HA_CHECK_OPT *check_opt)
}
+/**
+ Repair table: public interface.
+
+ @sa handler::repair()
+*/
+
int handler::ha_repair(THD* thd, HA_CHECK_OPT* check_opt)
{
int result;
@@ -2491,7 +2522,329 @@ int handler::ha_repair(THD* thd, HA_CHECK_OPT* check_opt)
}
-/** @brief
+/**
+ Bulk update row: public interface.
+
+ @sa handler::bulk_update_row()
+*/
+
+int
+handler::ha_bulk_update_row(const uchar *old_data, uchar *new_data,
+ uint *dup_key_found)
+{
+ return bulk_update_row(old_data, new_data, dup_key_found);
+}
+
+
+/**
+ Delete all rows: public interface.
+
+ @sa handler::delete_all_rows()
+*/
+
+int
+handler::ha_delete_all_rows()
+{
+ return delete_all_rows();
+}
+
+
+/**
+ Reset auto increment: public interface.
+
+ @sa handler::reset_auto_increment()
+*/
+
+int
+handler::ha_reset_auto_increment(ulonglong value)
+{
+ return reset_auto_increment(value);
+}
+
+
+/**
+ Backup table: public interface.
+
+ @sa handler::backup()
+*/
+
+int
+handler::ha_backup(THD* thd, HA_CHECK_OPT* check_opt)
+{
+ return backup(thd, check_opt);
+}
+
+
+/**
+ Restore table: public interface.
+
+ @sa handler::restore()
+*/
+
+int
+handler::ha_restore(THD* thd, HA_CHECK_OPT* check_opt)
+{
+ return restore(thd, check_opt);
+}
+
+
+/**
+ Optimize table: public interface.
+
+ @sa handler::optimize()
+*/
+
+int
+handler::ha_optimize(THD* thd, HA_CHECK_OPT* check_opt)
+{
+ return optimize(thd, check_opt);
+}
+
+
+/**
+ Analyze table: public interface.
+
+ @sa handler::analyze()
+*/
+
+int
+handler::ha_analyze(THD* thd, HA_CHECK_OPT* check_opt)
+{
+ return analyze(thd, check_opt);
+}
+
+
+/**
+ Check and repair table: public interface.
+
+ @sa handler::check_and_repair()
+*/
+
+bool
+handler::ha_check_and_repair(THD *thd)
+{
+ return check_and_repair(thd);
+}
+
+
+/**
+ Disable indexes: public interface.
+
+ @sa handler::disable_indexes()
+*/
+
+int
+handler::ha_disable_indexes(uint mode)
+{
+ return disable_indexes(mode);
+}
+
+
+/**
+ Enable indexes: public interface.
+
+ @sa handler::enable_indexes()
+*/
+
+int
+handler::ha_enable_indexes(uint mode)
+{
+ return enable_indexes(mode);
+}
+
+
+/**
+ Discard or import tablespace: public interface.
+
+ @sa handler::discard_or_import_tablespace()
+*/
+
+int
+handler::ha_discard_or_import_tablespace(my_bool discard)
+{
+ return discard_or_import_tablespace(discard);
+}
+
+
+/**
+ Prepare for alter: public interface.
+
+ Called to prepare an *online* ALTER.
+
+ @sa handler::prepare_for_alter()
+*/
+
+void
+handler::ha_prepare_for_alter()
+{
+ prepare_for_alter();
+}
+
+
+/**
+ Rename table: public interface.
+
+ @sa handler::rename_table()
+*/
+
+int
+handler::ha_rename_table(const char *from, const char *to)
+{
+ return rename_table(from, to);
+}
+
+
+/**
+ Delete table: public interface.
+
+ @sa handler::delete_table()
+*/
+
+int
+handler::ha_delete_table(const char *name)
+{
+ return delete_table(name);
+}
+
+
+/**
+ Drop table in the engine: public interface.
+
+ @sa handler::drop_table()
+*/
+
+void
+handler::ha_drop_table(const char *name)
+{
+ return drop_table(name);
+}
+
+
+/**
+ Create a table in the engine: public interface.
+
+ @sa handler::create()
+*/
+
+int
+handler::ha_create(const char *name, TABLE *form, HA_CREATE_INFO *info)
+{
+ return create(name, form, info);
+}
+
+
+/**
+ Create handler files for CREATE TABLE: public interface.
+
+ @sa handler::create_handler_files()
+*/
+
+int
+handler::ha_create_handler_files(const char *name, const char *old_name,
+ int action_flag, HA_CREATE_INFO *info)
+{
+ return create_handler_files(name, old_name, action_flag, info);
+}
+
+
+/**
+ Change partitions: public interface.
+
+ @sa handler::change_partitions()
+*/
+
+int
+handler::ha_change_partitions(HA_CREATE_INFO *create_info,
+ const char *path,
+ ulonglong *copied,
+ ulonglong *deleted,
+ const uchar *pack_frm_data,
+ size_t pack_frm_len)
+{
+ return change_partitions(create_info, path, copied, deleted,
+ pack_frm_data, pack_frm_len);
+}
+
+
+/**
+ Drop partitions: public interface.
+
+ @sa handler::drop_partitions()
+*/
+
+int
+handler::ha_drop_partitions(const char *path)
+{
+ return drop_partitions(path);
+}
+
+
+/**
+ Rename partitions: public interface.
+
+ @sa handler::rename_partitions()
+*/
+
+int
+handler::ha_rename_partitions(const char *path)
+{
+ return rename_partitions(path);
+}
+
+
+/**
+ Optimize partitions: public interface.
+
+ @sa handler::optimize_partitions()
+*/
+
+int
+handler::ha_optimize_partitions(THD *thd)
+{
+ return optimize_partitions(thd);
+}
+
+
+/**
+ Analyze partitions: public interface.
+
+ @sa handler::analyze_partitions()
+*/
+
+int
+handler::ha_analyze_partitions(THD *thd)
+{
+ return analyze_partitions(thd);
+}
+
+
+/**
+ Check partitions: public interface.
+
+ @sa handler::check_partitions()
+*/
+
+int
+handler::ha_check_partitions(THD *thd)
+{
+ return check_partitions(thd);
+}
+
+
+/**
+ Repair partitions: public interface.
+
+ @sa handler::repair_partitions()
+*/
+
+int
+handler::ha_repair_partitions(THD *thd)
+{
+ return repair_partitions(thd);
+}
+
+
+/**
Tell the storage engine that it is allowed to "disable transaction" in the
handler. It is a hint that ACID is not required - it is used in NDB for
ALTER TABLE, for example, when data are copied to temporary table.
@@ -2522,15 +2875,56 @@ int ha_enable_transaction(THD *thd, bool on)
int handler::index_next_same(uchar *buf, const uchar *key, uint keylen)
{
int error;
+ DBUG_ENTER("index_next_same");
if (!(error=index_next(buf)))
{
+ my_ptrdiff_t ptrdiff= buf - table->record[0];
+ uchar *save_record_0;
+ KEY *key_info;
+ KEY_PART_INFO *key_part;
+ KEY_PART_INFO *key_part_end;
+ LINT_INIT(save_record_0);
+ LINT_INIT(key_info);
+ LINT_INIT(key_part);
+ LINT_INIT(key_part_end);
+
+ /*
+ key_cmp_if_same() compares table->record[0] against 'key'.
+ In parts it uses table->record[0] directly, in parts it uses
+ field objects with their local pointers into table->record[0].
+ If 'buf' is distinct from table->record[0], we need to move
+ all record references. This is table->record[0] itself and
+ the field pointers of the fields used in this key.
+ */
+ if (ptrdiff)
+ {
+ save_record_0= table->record[0];
+ table->record[0]= buf;
+ key_info= table->key_info + active_index;
+ key_part= key_info->key_part;
+ key_part_end= key_part + key_info->key_parts;
+ for (; key_part < key_part_end; key_part++)
+ {
+ DBUG_ASSERT(key_part->field);
+ key_part->field->move_field_offset(ptrdiff);
+ }
+ }
+
if (key_cmp_if_same(table, key, active_index, keylen))
{
table->status=STATUS_NOT_FOUND;
error=HA_ERR_END_OF_FILE;
}
+
+ /* Move back if necessary. */
+ if (ptrdiff)
+ {
+ table->record[0]= save_record_0;
+ for (key_part= key_info->key_part; key_part < key_part_end; key_part++)
+ key_part->field->move_field_offset(-ptrdiff);
+ }
}
- return error;
+ DBUG_RETURN(error);
}
@@ -2559,15 +2953,12 @@ void handler::get_dynamic_partition_info(PARTITION_INFO *stat_info,
** Some general functions that isn't in the handler class
****************************************************************************/
-/** @brief
- Initiates table-file and calls appropriate database-creator
+/**
+ Initiates table-file and calls appropriate database-creator.
- NOTES
- We must have a write lock on LOCK_open to be sure no other thread
- interferes with table
-
- RETURN
+ @retval
0 ok
+ @retval
1 error
*/
int ha_create_table(THD *thd, const char *path,
@@ -2582,7 +2973,7 @@ int ha_create_table(THD *thd, const char *path,
TABLE_SHARE share;
DBUG_ENTER("ha_create_table");
- init_tmp_table_share(&share, db, 0, table_name, path);
+ init_tmp_table_share(thd, &share, db, 0, table_name, path);
if (open_table_def(thd, &share, 0) ||
open_table_from_share(thd, &share, "", 0, (uint) READ_ALL, 0, &table,
TRUE))
@@ -2593,7 +2984,7 @@ int ha_create_table(THD *thd, const char *path,
name= check_lowercase_names(table.file, share.path.str, name_buff);
- error= table.file->create(name, &table, create_info);
+ error= table.file->ha_create(name, &table, create_info);
VOID(closefrm(&table, 0));
if (error)
{
@@ -2605,17 +2996,18 @@ err:
DBUG_RETURN(error != 0);
}
-/** @brief
- Try to discover table from engine
+/**
+ Try to discover table from engine.
- NOTES
+ @note
If found, write the frm file to disk.
- RETURN VALUES:
+ @retval
-1 Table did not exists
+ @retval
0 Table created ok
+ @retval
> 0 Error, table existed but could not be created
-
*/
int ha_create_table_from_engine(THD* thd, const char *db, const char *name)
{
@@ -2641,15 +3033,14 @@ int ha_create_table_from_engine(THD* thd, const char *db, const char *name)
frmblob and frmlen are set, write the frm to disk
*/
- (void)strxnmov(path,FN_REFLEN-1,mysql_data_home,FN_ROOTDIR,
- db,FN_ROOTDIR,name,NullS);
+ build_table_filename(path, FN_REFLEN-1, db, name, "", 0);
// Save the frm file
error= writefrm(path, frmblob, frmlen);
my_free(frmblob, MYF(0));
if (error)
DBUG_RETURN(2);
- init_tmp_table_share(&share, db, 0, name, path);
+ init_tmp_table_share(thd, &share, db, 0, name, path);
if (open_table_def(thd, &share, 0))
{
DBUG_RETURN(3);
@@ -2664,7 +3055,7 @@ int ha_create_table_from_engine(THD* thd, const char *db, const char *name)
create_info.table_options|= HA_OPTION_CREATE_FROM_ENGINE;
check_lowercase_names(table.file, path, path);
- error=table.file->create(path,&table,&create_info);
+ error=table.file->ha_create(path, &table, &create_info);
VOID(closefrm(&table, 1));
DBUG_RETURN(error != 0);
@@ -2687,8 +3078,8 @@ void st_ha_check_opt::init()
call to ha_init_key_cache() (probably out of memory)
*****************************************************************************/
-/** @brief
- Init a key cache if it has not been initied before
+/**
+ Init a key cache if it has not been initied before.
*/
int ha_init_key_cache(const char *name, KEY_CACHE *key_cache)
{
@@ -2711,8 +3102,8 @@ int ha_init_key_cache(const char *name, KEY_CACHE *key_cache)
}
-/** @brief
- Resize key cache
+/**
+ Resize key cache.
*/
int ha_resize_key_cache(KEY_CACHE *key_cache)
{
@@ -2734,7 +3125,7 @@ int ha_resize_key_cache(KEY_CACHE *key_cache)
}
-/** @brief
+/**
Change parameters for key cache (like size)
*/
int ha_change_key_cache_param(KEY_CACHE *key_cache)
@@ -2750,8 +3141,8 @@ int ha_change_key_cache_param(KEY_CACHE *key_cache)
return 0;
}
-/** @brief
- Free memory allocated by a key cache
+/**
+ Free memory allocated by a key cache.
*/
int ha_end_key_cache(KEY_CACHE *key_cache)
{
@@ -2759,8 +3150,8 @@ int ha_end_key_cache(KEY_CACHE *key_cache)
return 0;
}
-/** @brief
- Move all tables from one key cache to another one
+/**
+ Move all tables from one key cache to another one.
*/
int ha_change_key_cache(KEY_CACHE *old_key_cache,
KEY_CACHE *new_key_cache)
@@ -2770,13 +3161,15 @@ int ha_change_key_cache(KEY_CACHE *old_key_cache,
}
-/** @brief
- Try to discover one table from handler(s)
+/**
+ Try to discover one table from handler(s).
- RETURN
- -1 : Table did not exists
- 0 : OK. In this case *frmblob and *frmlen are set
- >0 : error. frmblob and frmlen may not be set
+ @retval
+ -1 Table did not exists
+ @retval
+ 0 OK. In this case *frmblob and *frmlen are set
+ @retval
+ >0 error. frmblob and frmlen may not be set
*/
struct st_discover_args
{
@@ -2821,9 +3214,9 @@ int ha_discover(THD *thd, const char *db, const char *name,
}
-/** @brief
- Call this function in order to give the handler the possibility
- to ask engine if there are any new tables that should be written to disk
+/**
+ Call this function in order to give the handler the possiblity
+ to ask engine if there are any new tables that should be written to disk
or any dropped tables that need to be removed from disk
*/
struct st_find_files_args
@@ -2866,16 +3259,15 @@ ha_find_files(THD *thd,const char *db,const char *path,
DBUG_RETURN(error);
}
-/*
- Ask handler if the table exists in engine
-
- RETURN
+/**
+ Ask handler if the table exists in engine.
+ @retval
HA_ERR_NO_SUCH_TABLE Table does not exist
+ @retval
HA_ERR_TABLE_EXIST Table exists
- # Error code
-
- */
-
+ @retval
+ \# Error code
+*/
struct st_table_exists_in_engine_args
{
const char *db;
@@ -3050,29 +3442,29 @@ void ha_binlog_log_query(THD *thd, handlerton *hton,
}
#endif
-/** @brief
+/**
Read the first row of a multi-range set.
- SYNOPSIS
- read_multi_range_first()
- found_range_p Returns a pointer to the element in 'ranges' that
- corresponds to the returned row.
- ranges An array of KEY_MULTI_RANGE range descriptions.
- range_count Number of ranges in 'ranges'.
- sorted If result should be sorted per key.
- buffer A HANDLER_BUFFER for internal handler usage.
-
- NOTES
- Record is read into table->record[0].
- *found_range_p returns a valid value only if read_multi_range_first()
+ @param found_range_p Returns a pointer to the element in 'ranges' that
+ corresponds to the returned row.
+ @param ranges An array of KEY_MULTI_RANGE range descriptions.
+ @param range_count Number of ranges in 'ranges'.
+ @param sorted If result should be sorted per key.
+ @param buffer A HANDLER_BUFFER for internal handler usage.
+
+ @note
+ - Record is read into table->record[0].
+ - *found_range_p returns a valid value only if read_multi_range_first()
returns 0.
- Sorting is done within each range. If you want an overall sort, enter
+ - Sorting is done within each range. If you want an overall sort, enter
'ranges' with sorted ranges.
- RETURN
+ @retval
0 OK, found a row
+ @retval
HA_ERR_END_OF_FILE No rows in range
- # Error code
+ @retval
+ \# Error code
*/
int handler::read_multi_range_first(KEY_MULTI_RANGE **found_range_p,
KEY_MULTI_RANGE *ranges, uint range_count,
@@ -3106,23 +3498,23 @@ int handler::read_multi_range_first(KEY_MULTI_RANGE **found_range_p,
}
-/** @brief
+/**
Read the next row of a multi-range set.
- SYNOPSIS
- read_multi_range_next()
- found_range_p Returns a pointer to the element in 'ranges' that
- corresponds to the returned row.
+ @param found_range_p Returns a pointer to the element in 'ranges' that
+ corresponds to the returned row.
- NOTES
- Record is read into table->record[0].
- *found_range_p returns a valid value only if read_multi_range_next()
+ @note
+ - Record is read into table->record[0].
+ - *found_range_p returns a valid value only if read_multi_range_next()
returns 0.
- RETURN
+ @retval
0 OK, found a row
+ @retval
HA_ERR_END_OF_FILE No (more) rows in range
- # Error code
+ @retval
+ \# Error code
*/
int handler::read_multi_range_next(KEY_MULTI_RANGE **found_range_p)
{
@@ -3145,6 +3537,8 @@ int handler::read_multi_range_next(KEY_MULTI_RANGE **found_range_p)
}
else
{
+ if (was_semi_consistent_read())
+ goto scan_it_again;
/*
We need to set this for the last range only, but checking this
condition is more expensive than just setting the result code.
@@ -3152,10 +3546,10 @@ int handler::read_multi_range_next(KEY_MULTI_RANGE **found_range_p)
result= HA_ERR_END_OF_FILE;
}
+ multi_range_curr++;
+scan_it_again:
/* Try the next range(s) until one matches a record. */
- for (multi_range_curr++;
- multi_range_curr < multi_range_end;
- multi_range_curr++)
+ for (; multi_range_curr < multi_range_end; multi_range_curr++)
{
result= read_range_first(multi_range_curr->start_key.keypart_map ?
&multi_range_curr->start_key : 0,
@@ -3176,25 +3570,24 @@ int handler::read_multi_range_next(KEY_MULTI_RANGE **found_range_p)
}
-/** @brief
+/**
Read first row between two ranges.
- Store ranges for future calls to read_range_next
+ Store ranges for future calls to read_range_next.
- SYNOPSIS
- 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 and the range endpoints
- will not change during query execution.
- sorted Set to 1 if result should be sorted per key
-
- NOTES
+ @param start_key Start key. Is 0 if no min range
+ @param end_key End key. Is 0 if no max range
+ @param eq_range_arg Set to 1 if start_key == end_key
+ @param sorted Set to 1 if result should be sorted per key
+
+ @note
Record is read into table->record[0]
- RETURN
+ @retval
0 Found row
+ @retval
HA_ERR_END_OF_FILE No rows in range
- # Error code
+ @retval
+ \# Error code
*/
int handler::read_range_first(const key_range *start_key,
const key_range *end_key,
@@ -3230,19 +3623,18 @@ int handler::read_range_first(const key_range *start_key,
}
-/** @brief
+/**
Read next row between two ranges.
- SYNOPSIS
- read_range_next()
-
- NOTES
+ @note
Record is read into table->record[0]
- RETURN
+ @retval
0 Found row
+ @retval
HA_ERR_END_OF_FILE No rows in range
- # Error code
+ @retval
+ \# Error code
*/
int handler::read_range_next()
{
@@ -3263,22 +3655,20 @@ int handler::read_range_next()
}
-/** @brief
- Compare if found key (in row) is over max-value
+/**
+ Compare if found key (in row) is over max-value.
- SYNOPSIS
- compare_key
- range range to compare to row. May be 0 for no range
-
- NOTES
- See key.cc::key_cmp() for details
+ @param range range to compare to row. May be 0 for no range
- RETURN
+ @seealso
+ key.cc::key_cmp()
+
+ @return
The return value is SIGN(key_in_row - range_key):
- 0 Key is equal to range or 'range' == 0 (no range)
- -1 Key is less than range
- 1 Key is larger than range
+ - 0 : Key is equal to range or 'range' == 0 (no range)
+ - -1 : Key is less than range
+ - 1 : Key is larger than range
*/
int handler::compare_key(key_range *range)
{
@@ -3307,18 +3697,14 @@ int handler::index_read_idx_map(uchar * buf, uint index, const uchar * key,
}
-/** @brief
+/**
Returns a list of all known extensions.
- SYNOPSIS
- ha_known_exts()
-
- NOTES
No mutexes, worst case race is a minor surplus memory allocation
We have to recreate the extension map if mysqld is restarted (for example
within libmysqld)
- RETURN VALUE
+ @retval
pointer pointer to TYPELIB structure
*/
static my_bool exts_handlerton(THD *unused, plugin_ref plugin,
@@ -3655,11 +4041,12 @@ int handler::ha_reset()
int handler::ha_write_row(uchar *buf)
{
int error;
+ DBUG_ENTER("handler::ha_write_row");
if (unlikely(error= write_row(buf)))
- return error;
+ DBUG_RETURN(error);
if (unlikely(error= binlog_log_row<Write_rows_log_event>(table, 0, buf)))
- return error;
- return 0;
+ DBUG_RETURN(error); /* purecov: inspected */
+ DBUG_RETURN(0);
}
diff --git a/sql/handler.h b/sql/handler.h
index b91d8a39b88..b3a4b408589 100644
--- a/sql/handler.h
+++ b/sql/handler.h
@@ -959,46 +959,22 @@ uint calculate_key_len(TABLE *, uint, const uchar *, key_part_map);
*/
#define make_prev_keypart_map(N) (((key_part_map)1 << (N)) - 1)
-/*
+/**
The handler class is the interface for dynamically loadable
storage engines. Do not add ifdefs and take care when adding or
changing virtual functions to avoid vtable confusion
- */
+*/
class handler :public Sql_alloc
{
- friend class ha_partition;
- friend int ha_delete_table(THD*,handlerton*,const char*,const char*,
- const char*,bool);
-
public:
typedef ulonglong Table_flags;
-
- protected:
+protected:
struct st_table_share *table_share; /* The table definition */
struct st_table *table; /* The current open table */
Table_flags cached_table_flags; /* Set on init() and open() */
- virtual int index_init(uint idx, bool sorted) { active_index=idx; return 0; }
- virtual int index_end() { active_index=MAX_KEY; return 0; }
- /*
- rnd_init() can be called two times without rnd_end() in between
- (it only makes sense if scan=1).
- then the second call should prepare for the new table scan (e.g
- if rnd_init allocates the cursor, second call should position it
- to the start of the table, no need to deallocate and allocate it again
- */
- virtual int rnd_init(bool scan) =0;
- virtual int rnd_end() { return 0; }
- virtual Table_flags table_flags(void) const =0;
-
- void ha_statistic_increment(ulong SSV::*offset) const;
- void **ha_data(THD *) const;
- THD *ha_thd(void) const;
-
ha_rows estimation_rows_to_insert;
- virtual void start_bulk_insert(ha_rows rows) {}
- virtual int end_bulk_insert() {return 0; }
public:
handlerton *ht; /* storage engine of this handler */
uchar *ref; /* Pointer to current row */
@@ -1006,13 +982,13 @@ public:
ha_statistics stats;
- /* The following are for read_multi_range */
+ /** The following are for read_multi_range */
bool multi_range_sorted;
KEY_MULTI_RANGE *multi_range_curr;
KEY_MULTI_RANGE *multi_range_end;
HANDLER_BUFFER *multi_range_buffer;
- /* The following are for read_range() */
+ /** The following are for read_range() */
key_range save_end_range, *end_range;
KEY_PART_INFO *range_key_part;
int key_compare_result_on_equal;
@@ -1021,14 +997,14 @@ public:
uint errkey; /* Last dup key */
uint key_used_on_scan;
uint active_index;
- /* Length of ref (1-8 or the clustered key length) */
+ /** Length of ref (1-8 or the clustered key length) */
uint ref_length;
FT_INFO *ft_handler;
enum {NONE=0, INDEX, RND} inited;
bool locked;
bool implicit_emptied; /* Can be !=0 only if HEAP */
const COND *pushed_cond;
- /*
+ /**
next_insert_id is the next value which should be inserted into the
auto_increment column: in a inserting-multi-row statement (like INSERT
SELECT), for the first row where the autoinc value is not specified by the
@@ -1038,14 +1014,14 @@ public:
get_auto_increment().
*/
ulonglong next_insert_id;
- /*
+ /**
insert id for the current row (*autogenerated*; if not
autogenerated, it's 0).
At first successful insertion, this variable is stored into
THD::first_successful_insert_id_in_cur_stmt.
*/
ulonglong insert_id_for_cur_row;
- /*
+ /**
Interval returned by get_auto_increment() and being consumed by the
inserter.
*/
@@ -1066,12 +1042,113 @@ public:
/* TODO: DBUG_ASSERT(inited == NONE); */
}
virtual handler *clone(MEM_ROOT *mem_root);
- /* This is called after create to allow us to set up cached variables */
+ /** This is called after create to allow us to set up cached variables */
void init()
{
cached_table_flags= table_flags();
}
+ /* ha_ methods: pubilc wrappers for private virtual API */
+
int ha_open(TABLE *table, const char *name, int mode, int test_if_locked);
+ int ha_index_init(uint idx, bool sorted)
+ {
+ int result;
+ DBUG_ENTER("ha_index_init");
+ DBUG_ASSERT(inited==NONE);
+ if (!(result= index_init(idx, sorted)))
+ inited=INDEX;
+ DBUG_RETURN(result);
+ }
+ int ha_index_end()
+ {
+ DBUG_ENTER("ha_index_end");
+ DBUG_ASSERT(inited==INDEX);
+ inited=NONE;
+ DBUG_RETURN(index_end());
+ }
+ int ha_rnd_init(bool scan)
+ {
+ int result;
+ DBUG_ENTER("ha_rnd_init");
+ DBUG_ASSERT(inited==NONE || (inited==RND && scan));
+ inited= (result= rnd_init(scan)) ? NONE: RND;
+ DBUG_RETURN(result);
+ }
+ int ha_rnd_end()
+ {
+ DBUG_ENTER("ha_rnd_end");
+ DBUG_ASSERT(inited==RND);
+ inited=NONE;
+ DBUG_RETURN(rnd_end());
+ }
+ int ha_reset();
+ /* this is necessary in many places, e.g. in HANDLER command */
+ int ha_index_or_rnd_end()
+ {
+ return inited == INDEX ? ha_index_end() : inited == RND ? ha_rnd_end() : 0;
+ }
+ Table_flags ha_table_flags() const { return cached_table_flags; }
+ /**
+ These functions represent the public interface to *users* of the
+ handler class, hence they are *not* virtual. For the inheritance
+ interface, see the (private) functions write_row(), update_row(),
+ and delete_row() below.
+ */
+ int ha_external_lock(THD *thd, int lock_type);
+ int ha_write_row(uchar * buf);
+ int ha_update_row(const uchar * old_data, uchar * new_data);
+ int ha_delete_row(const uchar * buf);
+ void ha_release_auto_increment();
+
+ int ha_check_for_upgrade(HA_CHECK_OPT *check_opt);
+ /** to be actually called to get 'check()' functionality*/
+ int ha_check(THD *thd, HA_CHECK_OPT *check_opt);
+ int ha_repair(THD* thd, HA_CHECK_OPT* check_opt);
+ void ha_start_bulk_insert(ha_rows rows)
+ {
+ estimation_rows_to_insert= rows;
+ start_bulk_insert(rows);
+ }
+ int ha_end_bulk_insert()
+ {
+ estimation_rows_to_insert= 0;
+ return end_bulk_insert();
+ }
+ int ha_bulk_update_row(const uchar *old_data, uchar *new_data,
+ uint *dup_key_found);
+ int ha_delete_all_rows();
+ int ha_reset_auto_increment(ulonglong value);
+ int ha_backup(THD* thd, HA_CHECK_OPT* check_opt);
+ int ha_restore(THD* thd, HA_CHECK_OPT* check_opt);
+ int ha_optimize(THD* thd, HA_CHECK_OPT* check_opt);
+ int ha_analyze(THD* thd, HA_CHECK_OPT* check_opt);
+ bool ha_check_and_repair(THD *thd);
+ int ha_disable_indexes(uint mode);
+ int ha_enable_indexes(uint mode);
+ int ha_discard_or_import_tablespace(my_bool discard);
+ void ha_prepare_for_alter();
+ int ha_rename_table(const char *from, const char *to);
+ int ha_delete_table(const char *name);
+ void ha_drop_table(const char *name);
+
+ int ha_create(const char *name, TABLE *form, HA_CREATE_INFO *info);
+
+ int ha_create_handler_files(const char *name, const char *old_name,
+ int action_flag, HA_CREATE_INFO *info);
+
+ int ha_change_partitions(HA_CREATE_INFO *create_info,
+ const char *path,
+ ulonglong *copied,
+ ulonglong *deleted,
+ const uchar *pack_frm_data,
+ size_t pack_frm_len);
+ int ha_drop_partitions(const char *path);
+ int ha_rename_partitions(const char *path);
+ int ha_optimize_partitions(THD *thd);
+ int ha_analyze_partitions(THD *thd);
+ int ha_check_partitions(THD *thd);
+ int ha_repair_partitions(THD *thd);
+
void adjust_next_insert_id_after_explicit_value(ulonglong nr);
int update_auto_increment();
void print_keydup_error(uint key_nr, const char *msg);
@@ -1092,7 +1169,7 @@ public:
{ return (ha_table_flags() & HA_NO_TRANSACTIONS) == 0; }
virtual uint extra_rec_buf_length() const { return 0; }
- /*
+ /**
This method is used to analyse the error to see whether the error
is ignorable or not, certain handlers can have more error that are
ignorable than others. E.g. the partition handler can get inserts
@@ -1112,12 +1189,12 @@ public:
return TRUE;
}
- /*
+ /**
Number of rows in table. It will only be called if
(table_flags() & (HA_HAS_RECORDS | HA_STATS_RECORDS_IS_EXACT)) != 0
*/
virtual ha_rows records() { return stats.records; }
- /*
+ /**
Return upper bound of current number of records in the table
(max. of how many records one will retrieve when doing a full table scan)
If upper bound is not known, HA_POS_ERROR should be returned as a max
@@ -1126,7 +1203,7 @@ public:
virtual ha_rows estimate_rows_upper_bound()
{ return stats.records+EXTRA_RECORDS; }
- /*
+ /**
Get the row type from the storage engine. If this method returns
ROW_TYPE_NOT_USED, the information in HA_CREATE_INFO should be used.
*/
@@ -1134,47 +1211,8 @@ public:
virtual const char *index_type(uint key_number) { DBUG_ASSERT(0); return "";}
- int ha_index_init(uint idx, bool sorted)
- {
- int result;
- DBUG_ENTER("ha_index_init");
- DBUG_ASSERT(inited==NONE);
- if (!(result= index_init(idx, sorted)))
- inited=INDEX;
- DBUG_RETURN(result);
- }
- int ha_index_end()
- {
- DBUG_ENTER("ha_index_end");
- DBUG_ASSERT(inited==INDEX);
- inited=NONE;
- DBUG_RETURN(index_end());
- }
- int ha_rnd_init(bool scan)
- {
- int result;
- DBUG_ENTER("ha_rnd_init");
- DBUG_ASSERT(inited==NONE || (inited==RND && scan));
- inited= (result= rnd_init(scan)) ? NONE: RND;
- DBUG_RETURN(result);
- }
- int ha_rnd_end()
- {
- DBUG_ENTER("ha_rnd_end");
- DBUG_ASSERT(inited==RND);
- inited=NONE;
- DBUG_RETURN(rnd_end());
- }
- int ha_reset();
-
- /* this is necessary in many places, e.g. in HANDLER command */
- int ha_index_or_rnd_end()
- {
- return inited == INDEX ? ha_index_end() : inited == RND ? ha_rnd_end() : 0;
- }
- Table_flags ha_table_flags() const { return cached_table_flags; }
- /*
+ /**
Signal that the table->read_set and table->write_set table maps changed
The handler is allowed to set additional bits in the above map in this
call. Normally the handler should ignore all calls until we have done
@@ -1183,104 +1221,50 @@ public:
*/
virtual void column_bitmaps_signal();
uint get_index(void) const { return active_index; }
- virtual int open(const char *name, int mode, uint test_if_locked)=0;
virtual int close(void)=0;
- /*
- These functions represent the public interface to *users* of the
- handler class, hence they are *not* virtual. For the inheritance
- interface, see the (private) functions write_row(), update_row(),
- and delete_row() below.
- */
- int ha_external_lock(THD *thd, int lock_type);
- int ha_write_row(uchar * buf);
- int ha_update_row(const uchar * old_data, uchar * new_data);
- int ha_delete_row(const uchar * buf);
-
- /*
- SYNOPSIS
- start_bulk_update()
- RETURN
- 0 Bulk update used by handler
- 1 Bulk update not used, normal operation used
+ /**
+ @retval 0 Bulk update used by handler
+ @retval 1 Bulk update not used, normal operation used
*/
virtual bool start_bulk_update() { return 1; }
- /*
- SYNOPSIS
- start_bulk_delete()
- RETURN
- 0 Bulk delete used by handler
- 1 Bulk delete not used, normal operation used
+ /**
+ @retval 0 Bulk delete used by handler
+ @retval 1 Bulk delete not used, normal operation used
*/
virtual bool start_bulk_delete() { return 1; }
- /*
- SYNOPSIS
- This method is similar to update_row, however the handler doesn't need
- to execute the updates at this point in time. The handler can be certain
- that another call to bulk_update_row will occur OR a call to
- exec_bulk_update before the set of updates in this query is concluded.
-
- bulk_update_row()
- old_data Old record
- new_data New record
- dup_key_found Number of duplicate keys found
- RETURN
- 0 Bulk delete used by handler
- 1 Bulk delete not used, normal operation used
- */
- virtual int bulk_update_row(const uchar *old_data, uchar *new_data,
- uint *dup_key_found)
- {
- DBUG_ASSERT(FALSE);
- return HA_ERR_WRONG_COMMAND;
- }
- /*
- SYNOPSIS
+ /**
After this call all outstanding updates must be performed. The number
of duplicate key errors are reported in the duplicate key parameter.
It is allowed to continue to the batched update after this call, the
handler has to wait until end_bulk_update with changing state.
- exec_bulk_update()
- dup_key_found Number of duplicate keys found
- RETURN
- 0 Success
- >0 Error code
+ @param dup_key_found Number of duplicate keys found
+
+ @retval 0 Success
+ @retval >0 Error code
*/
virtual int exec_bulk_update(uint *dup_key_found)
{
DBUG_ASSERT(FALSE);
return HA_ERR_WRONG_COMMAND;
}
- /*
- SYNOPSIS
+ /**
Perform any needed clean-up, no outstanding updates are there at the
moment.
-
- end_bulk_update()
- RETURN
- Nothing
*/
virtual void end_bulk_update() { return; }
- /*
- SYNOPSIS
+ /**
Execute all outstanding deletes and close down the bulk delete.
- end_bulk_delete()
- RETURN
- 0 Success
- >0 Error code
+ @retval 0 Success
+ @retval >0 Error code
*/
virtual int end_bulk_delete()
{
DBUG_ASSERT(FALSE);
return HA_ERR_WRONG_COMMAND;
}
- private:
- virtual int index_read(uchar * buf, const uchar * key, uint key_len,
- enum ha_rkey_function find_flag)
- { return HA_ERR_WRONG_COMMAND; }
- public:
/**
@brief
Positions an index cursor to the index specified in the handle. Fetches the
@@ -1312,10 +1296,6 @@ public:
virtual int index_last(uchar * buf)
{ return HA_ERR_WRONG_COMMAND; }
virtual int index_next_same(uchar *buf, const uchar *key, uint keylen);
- private:
- virtual int index_read_last(uchar * buf, const uchar * key, uint key_len)
- { return (my_errno=HA_ERR_WRONG_COMMAND); }
- public:
/**
@brief
The following functions works like index_read, but it find the last
@@ -1343,11 +1323,11 @@ public:
virtual int ft_read(uchar *buf) { return HA_ERR_WRONG_COMMAND; }
virtual int rnd_next(uchar *buf)=0;
virtual int rnd_pos(uchar * buf, uchar *pos)=0;
- /*
- one has to use this method when to find
+ /**
+ One has to use this method when to find
random position by record as the plain
position() call doesn't work for some
- handlers for random position
+ handlers for random position.
*/
virtual int rnd_pos_by_record(uchar *record)
{
@@ -1355,9 +1335,9 @@ public:
return rnd_pos(record, ref);
}
virtual int read_first_row(uchar *buf, uint primary_key);
- /*
+ /**
The following function is only needed for tables that may be temporary
- tables during joins
+ tables during joins.
*/
virtual int restart_rnd_next(uchar *buf, uchar *pos)
{ return HA_ERR_WRONG_COMMAND; }
@@ -1374,13 +1354,7 @@ public:
virtual int extra_opt(enum ha_extra_function operation, ulong cache_size)
{ return extra(operation); }
- /*
- Reset state of file to after 'open'
- This function is called after every statement for all tables used
- by that statement.
- */
- virtual int reset() { return 0; }
- /*
+ /**
In an UPDATE or DELETE, if the row under the cursor was locked by another
transaction, and the engine used an optimistic read of the last
committed row value under the cursor, then the engine returns 1 from this
@@ -1393,7 +1367,7 @@ public:
engine that the next read will be a locking re-read of the row.
*/
virtual bool was_semi_consistent_read() { return 0; }
- /*
+ /**
Tell the engine whether it should avoid unnecessary lock waits.
If yes, in an UPDATE or DELETE, if the row under the cursor was locked
by another transaction, the engine may try an optimistic read of
@@ -1402,22 +1376,10 @@ public:
virtual void try_semi_consistent_read(bool) {}
virtual void unlock_row() {}
virtual int start_stmt(THD *thd, thr_lock_type lock_type) {return 0;}
- /*
- This is called to delete all rows in a table
- If the handler don't support this, then this function will
- return HA_ERR_WRONG_COMMAND and MySQL will delete the rows one
- by one.
- */
- virtual int delete_all_rows()
- { return (my_errno=HA_ERR_WRONG_COMMAND); }
virtual void get_auto_increment(ulonglong offset, ulonglong increment,
ulonglong nb_desired_values,
ulonglong *first_value,
ulonglong *nb_reserved_values);
-private:
- virtual void release_auto_increment() { return; };
-public:
- void ha_release_auto_increment();
void set_next_insert_id(ulonglong id)
{
DBUG_PRINT("info",("auto_increment: next value %lu", (ulong)id));
@@ -1438,91 +1400,30 @@ public:
next_insert_id= (prev_insert_id > 0) ? prev_insert_id :
insert_id_for_cur_row;
}
- /*
- Reset the auto-increment counter to the given value, i.e. the next row
- inserted will get the given value. This is called e.g. after TRUNCATE
- is emulated by doing a 'DELETE FROM t'. HA_ERR_WRONG_COMMAND is
- returned by storage engines that don't support this operation.
- */
- virtual int reset_auto_increment(ulonglong value)
- { return HA_ERR_WRONG_COMMAND; }
virtual void update_create_info(HA_CREATE_INFO *create_info) {}
-protected:
- /* to be implemented in handlers */
-
- /* admin commands - called from mysql_admin_table */
- virtual int check(THD* thd, HA_CHECK_OPT* check_opt)
- { return HA_ADMIN_NOT_IMPLEMENTED; }
-
- /*
- in these two methods check_opt can be modified
- to specify CHECK option to use to call check()
- upon the table
- */
- virtual int check_for_upgrade(HA_CHECK_OPT *check_opt)
- { return 0; }
-public:
- int ha_check_for_upgrade(HA_CHECK_OPT *check_opt);
int check_old_types();
- /* to be actually called to get 'check()' functionality*/
- int ha_check(THD *thd, HA_CHECK_OPT *check_opt);
-
- virtual int backup(THD* thd, HA_CHECK_OPT* check_opt)
- { return HA_ADMIN_NOT_IMPLEMENTED; }
- /*
- restore assumes .frm file must exist, and that generate_table() has been
- called; It will just copy the data file and run repair.
- */
- virtual int restore(THD* thd, HA_CHECK_OPT* check_opt)
- { return HA_ADMIN_NOT_IMPLEMENTED; }
-protected:
- virtual int repair(THD* thd, HA_CHECK_OPT* check_opt)
- { return HA_ADMIN_NOT_IMPLEMENTED; }
-public:
- int ha_repair(THD* thd, HA_CHECK_OPT* check_opt);
- virtual int optimize(THD* thd, HA_CHECK_OPT* check_opt)
- { return HA_ADMIN_NOT_IMPLEMENTED; }
- virtual int analyze(THD* thd, HA_CHECK_OPT* check_opt)
- { return HA_ADMIN_NOT_IMPLEMENTED; }
virtual int assign_to_keycache(THD* thd, HA_CHECK_OPT* check_opt)
{ return HA_ADMIN_NOT_IMPLEMENTED; }
virtual int preload_keys(THD* thd, HA_CHECK_OPT* check_opt)
{ return HA_ADMIN_NOT_IMPLEMENTED; }
/* end of the list of admin commands */
- virtual bool check_and_repair(THD *thd) { return HA_ERR_WRONG_COMMAND; }
virtual int dump(THD* thd, int fd = -1) { return HA_ERR_WRONG_COMMAND; }
- virtual int disable_indexes(uint mode) { return HA_ERR_WRONG_COMMAND; }
- virtual int enable_indexes(uint mode) { return HA_ERR_WRONG_COMMAND; }
virtual int indexes_are_disabled(void) {return 0;}
- void ha_start_bulk_insert(ha_rows rows)
- {
- estimation_rows_to_insert= rows;
- start_bulk_insert(rows);
- }
- int ha_end_bulk_insert()
- {
- estimation_rows_to_insert= 0;
- return end_bulk_insert();
- }
- virtual int discard_or_import_tablespace(my_bool discard)
- {return HA_ERR_WRONG_COMMAND;}
virtual int net_read_dump(NET* net) { return HA_ERR_WRONG_COMMAND; }
virtual char *update_table_comment(const char * comment)
{ return (char*) comment;}
virtual void append_create_info(String *packet) {}
- /*
- SYNOPSIS
- is_fk_defined_on_table_or_index()
- index Index to check if foreign key uses it
- RETURN VALUE
- TRUE Foreign key defined on table or index
- FALSE No foreign key defined
- DESCRIPTION
- If index == MAX_KEY then a check for table is made and if index <
- MAX_KEY then a check is made if the table has foreign keys and if
- a foreign key uses this index (and thus the index cannot be dropped).
+ /**
+ If index == MAX_KEY then a check for table is made and if index <
+ MAX_KEY then a check is made if the table has foreign keys and if
+ a foreign key uses this index (and thus the index cannot be dropped).
+
+ @param index Index to check if foreign key uses it
+
+ @retval TRUE Foreign key defined on table or index
+ @retval FALSE No foreign key defined
*/
virtual bool is_fk_defined_on_table_or_index(uint index)
{ return FALSE; }
@@ -1530,18 +1431,18 @@ public:
{ return(NULL);} /* gets foreign key create string from InnoDB */
virtual char* get_tablespace_name(THD *thd, char *name, uint name_len)
{ return(NULL);} /* gets tablespace name from handler */
- /* used in ALTER TABLE; 1 if changing storage engine is allowed */
+ /** used in ALTER TABLE; 1 if changing storage engine is allowed */
virtual bool can_switch_engines() { return 1; }
- /* used in REPLACE; is > 0 if table is referred by a FOREIGN KEY */
+ /** used in REPLACE; is > 0 if table is referred by a FOREIGN KEY */
virtual int get_foreign_key_list(THD *thd, List<FOREIGN_KEY_INFO> *f_key_list)
{ return 0; }
virtual uint referenced_by_foreign_key() { return 0;}
virtual void init_table_handle_for_HANDLER()
{ return; } /* prepare InnoDB for HANDLER */
virtual void free_foreign_key_create_info(char* str) {}
- /* The following can be called without an open handler */
+ /** The following can be called without an open handler */
virtual const char *table_type() const =0;
- /*
+ /**
If frm_error() is called then we will use this to find out what file
extentions exist for the storage engine. This is also used by the default
rename_table and delete_table method in handler.cc.
@@ -1566,7 +1467,6 @@ public:
virtual ulong index_flags(uint idx, uint part, bool all_parts) const =0;
- virtual void prepare_for_alter() { return; }
virtual int add_index(TABLE *table_arg, KEY *key_info, uint num_of_keys)
{ return (HA_ERR_WRONG_COMMAND); }
virtual int prepare_drop_index(TABLE *table_arg, uint *key_num,
@@ -1598,58 +1498,35 @@ public:
virtual bool is_crashed() const { return 0; }
virtual bool auto_repair() const { return 0; }
- /*
- default rename_table() and delete_table() rename/delete files with a
- given name and extensions from bas_ext()
- */
- virtual int rename_table(const char *from, const char *to);
- virtual int delete_table(const char *name);
- virtual void drop_table(const char *name);
-
- virtual int create(const char *name, TABLE *form, HA_CREATE_INFO *info)=0;
#define CHF_CREATE_FLAG 0
#define CHF_DELETE_FLAG 1
#define CHF_RENAME_FLAG 2
#define CHF_INDEX_FLAG 3
- virtual int create_handler_files(const char *name, const char *old_name,
- int action_flag, HA_CREATE_INFO *info)
- { return FALSE; }
- virtual int change_partitions(HA_CREATE_INFO *create_info,
- const char *path,
- ulonglong *copied,
- ulonglong *deleted,
- const uchar *pack_frm_data,
- size_t pack_frm_len)
- { return HA_ERR_WRONG_COMMAND; }
- virtual int drop_partitions(const char *path)
- { return HA_ERR_WRONG_COMMAND; }
- virtual int rename_partitions(const char *path)
- { return HA_ERR_WRONG_COMMAND; }
- virtual int optimize_partitions(THD *thd)
- { return HA_ERR_WRONG_COMMAND; }
- virtual int analyze_partitions(THD *thd)
- { return HA_ERR_WRONG_COMMAND; }
- virtual int check_partitions(THD *thd)
- { return HA_ERR_WRONG_COMMAND; }
- virtual int repair_partitions(THD *thd)
- { return HA_ERR_WRONG_COMMAND; }
-
- /* lock_count() can be more than one if the table is a MERGE */
+ /**
+ @note lock_count() can return > 1 if the table is MERGE or partitioned.
+ */
virtual uint lock_count(void) const { return 1; }
/**
Is not invoked for non-transactional temporary tables.
+ @note store_lock() can return more than one lock if the table is MERGE
+ or partitioned.
+
@note that one can NOT rely on table->in_use in store_lock(). It may
refer to a different thread if called from mysql_lock_abort_for_thread().
+
+ @note If the table is MERGE, store_lock() can return less locks
+ than lock_count() claimed. This can happen when the MERGE children
+ are not attached when this is called from another thread.
*/
virtual THR_LOCK_DATA **store_lock(THD *thd,
THR_LOCK_DATA **to,
enum thr_lock_type lock_type)=0;
- /* Type of table for caching query */
+ /** Type of table for caching query */
virtual uint8 table_cache_type() { return HA_CACHE_TBL_NONTRANSACT; }
@@ -1695,56 +1572,94 @@ public:
/*
- RETURN
- true Primary key (if there is one) is clustered key covering all fields
- false otherwise
+ @retval TRUE Primary key (if there is one) is clustered
+ key covering all fields
+ @retval FALSE otherwise
*/
virtual bool primary_key_is_clustered() { return FALSE; }
virtual int cmp_ref(const uchar *ref1, const uchar *ref2)
{
return memcmp(ref1, ref2, ref_length);
}
-
+
/*
Condition pushdown to storage engines
*/
- /*
+ /**
Push condition down to the table handler.
- SYNOPSIS
- cond_push()
- cond Condition to be pushed. The condition tree must not be
- modified by the by the caller.
- RETURN
+ @param cond Condition to be pushed. The condition tree must not be
+ modified by the by the caller.
+
+ @return
The 'remainder' condition that caller must use to filter out records.
NULL means the handler will not return rows that do not match the
passed condition.
- NOTES
+ @note
The pushed conditions form a stack (from which one can remove the
last pushed condition using cond_pop).
The table handler filters out rows using (pushed_cond1 AND pushed_cond2
AND ... AND pushed_condN)
or less restrictive condition, depending on handler's capabilities.
-
+
handler->ha_reset() call empties the condition stack.
Calls to rnd_init/rnd_end, index_init/index_end etc do not affect the
condition stack.
*/
virtual const COND *cond_push(const COND *cond) { return cond; };
- /*
+ /**
Pop the top condition from the condition stack of the handler instance.
- SYNOPSIS
- cond_pop()
- Pops the top if condition stack, if stack is not empty
+
+ Pops the top if condition stack, if stack is not empty.
*/
virtual void cond_pop() { return; };
virtual bool check_if_incompatible_data(HA_CREATE_INFO *create_info,
uint table_changes)
{ return COMPATIBLE_DATA_NO; }
- /* These are only called from sql_select for internal temporary tables */
+ /**
+ use_hidden_primary_key() is called in case of an update/delete when
+ (table_flags() and HA_PRIMARY_KEY_REQUIRED_FOR_DELETE) is defined
+ but we don't have a primary key
+ */
+ virtual void use_hidden_primary_key();
+
+protected:
+ /* Service methods for use by storage engines. */
+ void ha_statistic_increment(ulong SSV::*offset) const;
+ void **ha_data(THD *) const;
+ THD *ha_thd(void) const;
+
+ /**
+ Default rename_table() and delete_table() rename/delete files with a
+ given name and extensions from bas_ext().
+
+ These methods can be overridden, but their default implementation
+ provide useful functionality.
+ */
+ virtual int rename_table(const char *from, const char *to);
+ virtual int delete_table(const char *name);
+private:
+ /*
+ Low-level primitives for storage engines. These should be
+ overridden by the storage engine class. To call these methods, use
+ the corresponding 'ha_*' method above.
+ */
+
+ virtual int open(const char *name, int mode, uint test_if_locked)=0;
+ virtual int index_init(uint idx, bool sorted) { active_index= idx; return 0; }
+ virtual int index_end() { active_index= MAX_KEY; return 0; }
+ /**
+ rnd_init() can be called two times without rnd_end() in between
+ (it only makes sense if scan=1).
+ then the second call should prepare for the new table scan (e.g
+ if rnd_init allocates the cursor, second call should position it
+ to the start of the table, no need to deallocate and allocate it again
+ */
+ virtual int rnd_init(bool scan)= 0;
+ virtual int rnd_end() { return 0; }
virtual int write_row(uchar *buf __attribute__((unused)))
{
return HA_ERR_WRONG_COMMAND;
@@ -1760,20 +1675,13 @@ public:
{
return HA_ERR_WRONG_COMMAND;
}
- /*
- use_hidden_primary_key() is called in case of an update/delete when
- (table_flags() and HA_PRIMARY_KEY_REQUIRED_FOR_DELETE) is defined
- but we don't have a primary key
- */
- virtual void use_hidden_primary_key();
-
-private:
- /*
- Row-level primitives for storage engines. These should be
- overridden by the storage engine class. To call these methods, use
- the corresponding 'ha_*' method above.
+ /**
+ Reset state of file to after 'open'.
+ This function is called after every statement for all tables used
+ by that statement.
*/
-
+ virtual int reset() { return 0; }
+ virtual Table_flags table_flags(void) const= 0;
/**
Is not invoked for non-transactional temporary tables.
@@ -1801,8 +1709,109 @@ private:
{
return 0;
}
+ virtual void release_auto_increment() { return; };
+ /** admin commands - called from mysql_admin_table */
+ virtual int check_for_upgrade(HA_CHECK_OPT *check_opt)
+ { return 0; }
+ virtual int check(THD* thd, HA_CHECK_OPT* check_opt)
+ { return HA_ADMIN_NOT_IMPLEMENTED; }
+
+ /**
+ In this method check_opt can be modified
+ to specify CHECK option to use to call check()
+ upon the table.
+ */
+ virtual int repair(THD* thd, HA_CHECK_OPT* check_opt)
+ { return HA_ADMIN_NOT_IMPLEMENTED; }
+ virtual void start_bulk_insert(ha_rows rows) {}
+ virtual int end_bulk_insert() { return 0; }
+ virtual int index_read(uchar * buf, const uchar * key, uint key_len,
+ enum ha_rkey_function find_flag)
+ { return HA_ERR_WRONG_COMMAND; }
+ virtual int index_read_last(uchar * buf, const uchar * key, uint key_len)
+ { return (my_errno= HA_ERR_WRONG_COMMAND); }
+ /**
+ This method is similar to update_row, however the handler doesn't need
+ to execute the updates at this point in time. The handler can be certain
+ that another call to bulk_update_row will occur OR a call to
+ exec_bulk_update before the set of updates in this query is concluded.
+
+ @param old_data Old record
+ @param new_data New record
+ @param dup_key_found Number of duplicate keys found
+
+ @retval 0 Bulk delete used by handler
+ @retval 1 Bulk delete not used, normal operation used
+ */
+ virtual int bulk_update_row(const uchar *old_data, uchar *new_data,
+ uint *dup_key_found)
+ {
+ DBUG_ASSERT(FALSE);
+ return HA_ERR_WRONG_COMMAND;
+ }
+ /**
+ This is called to delete all rows in a table
+ If the handler don't support this, then this function will
+ return HA_ERR_WRONG_COMMAND and MySQL will delete the rows one
+ by one.
+ */
+ virtual int delete_all_rows()
+ { return (my_errno=HA_ERR_WRONG_COMMAND); }
+ /**
+ Reset the auto-increment counter to the given value, i.e. the next row
+ inserted will get the given value. This is called e.g. after TRUNCATE
+ is emulated by doing a 'DELETE FROM t'. HA_ERR_WRONG_COMMAND is
+ returned by storage engines that don't support this operation.
+ */
+ virtual int reset_auto_increment(ulonglong value)
+ { return HA_ERR_WRONG_COMMAND; }
+ virtual int backup(THD* thd, HA_CHECK_OPT* check_opt)
+ { return HA_ADMIN_NOT_IMPLEMENTED; }
+ /**
+ Restore assumes .frm file must exist, and that generate_table() has been
+ called; It will just copy the data file and run repair.
+ */
+ virtual int restore(THD* thd, HA_CHECK_OPT* check_opt)
+ { return HA_ADMIN_NOT_IMPLEMENTED; }
+ virtual int optimize(THD* thd, HA_CHECK_OPT* check_opt)
+ { return HA_ADMIN_NOT_IMPLEMENTED; }
+ virtual int analyze(THD* thd, HA_CHECK_OPT* check_opt)
+ { return HA_ADMIN_NOT_IMPLEMENTED; }
+ virtual bool check_and_repair(THD *thd) { return HA_ERR_WRONG_COMMAND; }
+ virtual int disable_indexes(uint mode) { return HA_ERR_WRONG_COMMAND; }
+ virtual int enable_indexes(uint mode) { return HA_ERR_WRONG_COMMAND; }
+ virtual int discard_or_import_tablespace(my_bool discard)
+ { return (my_errno=HA_ERR_WRONG_COMMAND); }
+ virtual void prepare_for_alter() { return; }
+ virtual void drop_table(const char *name);
+ virtual int create(const char *name, TABLE *form, HA_CREATE_INFO *info)=0;
+
+ virtual int create_handler_files(const char *name, const char *old_name,
+ int action_flag, HA_CREATE_INFO *info)
+ { return FALSE; }
+
+ virtual int change_partitions(HA_CREATE_INFO *create_info,
+ const char *path,
+ ulonglong *copied,
+ ulonglong *deleted,
+ const uchar *pack_frm_data,
+ size_t pack_frm_len)
+ { return HA_ERR_WRONG_COMMAND; }
+ virtual int drop_partitions(const char *path)
+ { return HA_ERR_WRONG_COMMAND; }
+ virtual int rename_partitions(const char *path)
+ { return HA_ERR_WRONG_COMMAND; }
+ virtual int optimize_partitions(THD *thd)
+ { return HA_ERR_WRONG_COMMAND; }
+ virtual int analyze_partitions(THD *thd)
+ { return HA_ERR_WRONG_COMMAND; }
+ virtual int check_partitions(THD *thd)
+ { return HA_ERR_WRONG_COMMAND; }
+ virtual int repair_partitions(THD *thd)
+ { return HA_ERR_WRONG_COMMAND; }
};
+
/* Some extern variables used with handlers */
extern const char *ha_row_type[];
diff --git a/sql/hostname.cc b/sql/hostname.cc
index 34384a9c8c0..c8cf46383a9 100644
--- a/sql/hostname.cc
+++ b/sql/hostname.cc
@@ -14,9 +14,14 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-/*
- Get hostname for an IP. Hostnames are checked with reverse name lookup and
- checked that they doesn't resemble an ip.
+/**
+ @file
+
+ @brief
+ Get hostname for an IP.
+
+ Hostnames are checked with reverse name lookup and
+ checked that they doesn't resemble an ip.
*/
#include "mysql_priv.h"
diff --git a/sql/init.cc b/sql/init.cc
index 73feaa797c3..aee0eb7179c 100644
--- a/sql/init.cc
+++ b/sql/init.cc
@@ -14,7 +14,12 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-/* Init and dummy functions for interface with unireg */
+/**
+ @file
+
+ @brief
+ Init and dummy functions for interface with unireg
+*/
#include "mysql_priv.h"
#include <m_ctype.h>
diff --git a/sql/item.cc b/sql/item.cc
index 18b48280754..c546badd8e7 100644
--- a/sql/item.cc
+++ b/sql/item.cc
@@ -95,6 +95,10 @@ void Hybrid_type_traits_decimal::add(Hybrid_type *val, Field *f) const
}
+/**
+ @todo
+ what is '4' for scale?
+*/
void Hybrid_type_traits_decimal::div(Hybrid_type *val, ulonglong u) const
{
int2my_decimal(E_DEC_FATAL_ERROR, u, TRUE, &val->dec_buf[2]);
@@ -156,7 +160,9 @@ Hybrid_type_traits_integer::fix_length_and_dec(Item *item, Item *arg) const
** Item functions
*****************************************************************************/
-/* Init all special items */
+/**
+ Init all special items.
+*/
void item_init(void)
{
@@ -165,8 +171,9 @@ void item_init(void)
}
-/*
-TODO: make this functions class dependent
+/**
+ @todo
+ Make this functions class dependent
*/
bool Item::val_bool()
@@ -396,10 +403,12 @@ Item::Item():
}
}
-/*
- Constructor used by Item_field, Item_*_ref & aggregate (sum) functions.
+/**
+ Constructor used by Item_field, Item_ref & aggregate (sum)
+ functions.
+
Used for duplicating lists in processing queries with temporary
- tables
+ tables.
*/
Item::Item(THD *thd, Item *item):
rsize(0),
@@ -456,12 +465,10 @@ void Item::cleanup()
}
-/*
- cleanup() item if it is 'fixed'
+/**
+ cleanup() item if it is 'fixed'.
- SYNOPSIS
- cleanup_processor()
- arg - a dummy parameter, is not used here
+ @param arg a dummy parameter, is not used here
*/
bool Item::cleanup_processor(uchar *arg)
@@ -472,12 +479,10 @@ bool Item::cleanup_processor(uchar *arg)
}
-/*
- rename item (used for views, cleanup() return original name)
+/**
+ rename item (used for views, cleanup() return original name).
- SYNOPSIS
- Item::rename()
- new_name new name of item;
+ @param new_name new name of item;
*/
void Item::rename(char *new_name)
@@ -492,36 +497,30 @@ void Item::rename(char *new_name)
}
-/*
+/**
Traverse item tree possibly transforming it (replacing items).
- SYNOPSIS
- Item::transform()
- transformer functor that performs transformation of a subtree
- arg opaque argument passed to the functor
-
- DESCRIPTION
- This function is designed to ease transformation of Item trees.
-
- Re-execution note: every such transformation is registered for
- rollback by THD::change_item_tree() and is rolled back at the end
- of execution by THD::rollback_item_tree_changes().
-
- Therefore:
+ This function is designed to ease transformation of Item trees.
+ Re-execution note: every such transformation is registered for
+ rollback by THD::change_item_tree() and is rolled back at the end
+ of execution by THD::rollback_item_tree_changes().
- - this function can not be used at prepared statement prepare
- (in particular, in fix_fields!), as only permanent
- transformation of Item trees are allowed at prepare.
+ Therefore:
+ - this function can not be used at prepared statement prepare
+ (in particular, in fix_fields!), as only permanent
+ transformation of Item trees are allowed at prepare.
+ - the transformer function shall allocate new Items in execution
+ memory root (thd->mem_root) and not anywhere else: allocated
+ items will be gone in the end of execution.
- - the transformer function shall allocate new Items in execution
- memory root (thd->mem_root) and not anywhere else: allocated
- items will be gone in the end of execution.
+ If you don't need to transform an item tree, but only traverse
+ it, please use Item::walk() instead.
- If you don't need to transform an item tree, but only traverse
- it, please use Item::walk() instead.
+ @param transformer functor that performs transformation of a subtree
+ @param arg opaque argument passed to the functor
- RETURN VALUE
+ @return
Returns pointer to the new subtree root. THD::change_item_tree()
should be called for it if transformation took place, i.e. if a
pointer to newly allocated item is returned.
@@ -549,7 +548,9 @@ Item_ident::Item_ident(Name_resolution_context *context_arg,
}
-/* Constructor used by Item_field & Item_*_ref (see Item comment) */
+/**
+ Constructor used by Item_field & Item_*_ref (see Item comment)
+*/
Item_ident::Item_ident(THD *thd, Item_ident *item)
:Item(thd, item),
@@ -594,26 +595,22 @@ bool Item_ident::remove_dependence_processor(uchar * arg)
}
-/*
+/**
Store the pointer to this item field into a list if not already there.
- SYNOPSIS
- Item_field::collect_item_field_processor()
- arg pointer to a List<Item_field>
+ The method is used by Item::walk to collect all unique Item_field objects
+ from a tree of Items into a set of items represented as a list.
- DESCRIPTION
- The method is used by Item::walk to collect all unique Item_field objects
- from a tree of Items into a set of items represented as a list.
+ Item_cond::walk() and Item_func::walk() stop the evaluation of the
+ processor function for its arguments once the processor returns
+ true.Therefore in order to force this method being called for all item
+ arguments in a condition the method must return false.
- IMPLEMENTATION
- Item_cond::walk() and Item_func::walk() stop the evaluation of the
- processor function for its arguments once the processor returns
- true.Therefore in order to force this method being called for all item
- arguments in a condition the method must return false.
+ @param arg pointer to a List<Item_field>
- RETURN
+ @return
FALSE to force the evaluation of collect_item_field_processor
- for the subsequent items.
+ for the subsequent items.
*/
bool Item_field::collect_item_field_processor(uchar *arg)
@@ -633,21 +630,19 @@ bool Item_field::collect_item_field_processor(uchar *arg)
}
-/*
+/**
Check if an Item_field references some field from a list of fields.
- SYNOPSIS
- Item_field::find_item_in_field_list_processor
- arg Field being compared, arg must be of type Field
+ Check whether the Item_field represented by 'this' references any
+ of the fields in the keyparts passed via 'arg'. Used with the
+ method Item::walk() to test whether any keypart in a sequence of
+ keyparts is referenced in an expression.
- DESCRIPTION
- Check whether the Item_field represented by 'this' references any
- of the fields in the keyparts passed via 'arg'. Used with the
- method Item::walk() to test whether any keypart in a sequence of
- keyparts is referenced in an expression.
+ @param arg Field being compared, arg must be of type Field
- RETURN
+ @retval
TRUE if 'this' references the field 'arg'
+ @retval
FALSE otherwise
*/
@@ -739,7 +734,8 @@ void Item::set_name(const char *str, uint length, CHARSET_INFO *cs)
}
-/*
+/**
+ @details
This function is called when:
- Comparing items in the WHERE clause (when doing where optimization)
- When trying to find an ORDER BY/GROUP BY item in the SELECT part
@@ -764,7 +760,8 @@ Item *Item::safe_charset_converter(CHARSET_INFO *tocs)
}
-/*
+/**
+ @details
Created mostly for mysql_prepare_table(). Important
when a string ENUM/SET column is described with a numeric default value:
@@ -891,10 +888,10 @@ bool Item_string::eq(const Item *item, bool binary_cmp) const
}
-/*
+/**
Get the value of the function as a MYSQL_TIME structure.
As a extra convenience the time structure is reset on error!
- */
+*/
bool Item::get_date(MYSQL_TIME *ltime,uint fuzzydate)
{
@@ -928,10 +925,11 @@ err:
return 1;
}
-/*
- Get time of first argument.
+/**
+ Get time of first argument.\
+
As a extra convenience the time structure is reset on error!
- */
+*/
bool Item::get_time(MYSQL_TIME *ltime)
{
@@ -967,10 +965,13 @@ int Item::save_in_field_no_warnings(Field *field, bool no_conversions)
THD *thd= table->in_use;
enum_check_fields tmp= thd->count_cuted_fields;
my_bitmap_map *old_map= dbug_tmp_use_all_columns(table, table->write_set);
+ ulong sql_mode= thd->variables.sql_mode;
+ thd->variables.sql_mode&= ~(MODE_NO_ZERO_IN_DATE | MODE_NO_ZERO_DATE);
thd->count_cuted_fields= CHECK_FIELD_IGNORE;
res= save_in_field(field, no_conversions);
thd->count_cuted_fields= tmp;
dbug_tmp_restore_column_map(table->write_set, old_map);
+ thd->variables.sql_mode= sql_mode;
return res;
}
@@ -1237,7 +1238,17 @@ bool Item_name_const::is_null()
Item::Type Item_name_const::type() const
{
- return value_item->type();
+ /*
+ As
+ 1. one can try to create the Item_name_const passing non-constant
+ arguments, although it's incorrect and
+ 2. the type() method can be called before the fix_fields() to get
+ type information for a further type cast, e.g.
+ if (item->type() == FIELD_ITEM)
+ ((Item_field *) item)->...
+ we return NULL_ITEM in the case to avoid wrong casting.
+ */
+ return valid_args ? value_item->type() : NULL_ITEM;
}
@@ -1249,14 +1260,14 @@ bool Item_name_const::fix_fields(THD *thd, Item **ref)
s.length(0);
if (value_item->fix_fields(thd, &value_item) ||
- name_item->fix_fields(thd, &name_item))
- return TRUE;
- if (!(value_item->const_item() && name_item->const_item()))
+ name_item->fix_fields(thd, &name_item) ||
+ !value_item->const_item() ||
+ !name_item->const_item() ||
+ !(item_name= name_item->val_str(&s))) // Can't have a NULL name
+ {
+ my_error(ER_RESERVED_SYNTAX, MYF(0), "NAME_CONST");
return TRUE;
-
- if (!(item_name= name_item->val_str(&s)))
- return TRUE; /* Can't have a NULL name */
-
+ }
set_name(item_name->ptr(), (uint) item_name->length(), system_charset_info);
max_length= value_item->max_length;
decimals= value_item->decimals;
@@ -1297,27 +1308,25 @@ public:
};
-/*
- Move SUM items out from item tree and replace with reference
+/**
+ Move SUM items out from item tree and replace with reference.
- SYNOPSIS
- split_sum_func2()
- thd Thread handler
- ref_pointer_array Pointer to array of reference fields
- fields All fields in select
- ref Pointer to item
- skip_registered <=> function be must skipped for registered SUM items
+ @param thd Thread handler
+ @param ref_pointer_array Pointer to array of reference fields
+ @param fields All fields in select
+ @param ref Pointer to item
+ @param skip_registered <=> function be must skipped for registered
+ SUM items
- NOTES
- This is from split_sum_func2() for items that should be split
+ @note
+ This is from split_sum_func2() for items that should be split
- All found SUM items are added FIRST in the fields list and
- we replace the item with a reference.
+ All found SUM items are added FIRST in the fields list and
+ we replace the item with a reference.
- thd->fatal_error() may be called if we are out of memory
+ thd->fatal_error() may be called if we are out of memory
*/
-
void Item::split_sum_func2(THD *thd, Item **ref_pointer_array,
List<Item> &fields, Item **ref,
bool skip_registered)
@@ -1384,41 +1393,42 @@ left_is_superset(DTCollation *left, DTCollation *right)
return FALSE;
}
-/*
- Aggregate two collations together taking
- into account their coercibility (aka derivation):
-
- 0 == DERIVATION_EXPLICIT - an explicitly written COLLATE clause
- 1 == DERIVATION_NONE - a mix of two different collations
- 2 == DERIVATION_IMPLICIT - a column
- 3 == DERIVATION_COERCIBLE - a string constant
-
- The most important rules are:
-
- 1. If collations are the same:
- chose this collation, and the strongest derivation.
-
- 2. If collations are different:
- - Character sets may differ, but only if conversion without
- data loss is possible. The caller provides flags whether
- character set conversion attempts should be done. If no
- flags are substituted, then the character sets must be the same.
- Currently processed flags are:
- MY_COLL_ALLOW_SUPERSET_CONV - allow conversion to a superset
- MY_COLL_ALLOW_COERCIBLE_CONV - allow conversion of a coercible value
- - two EXPLICIT collations produce an error, e.g. this is wrong:
- CONCAT(expr1 collate latin1_swedish_ci, expr2 collate latin1_german_ci)
- - the side with smaller derivation value wins,
- i.e. a column is stronger than a string constant,
- an explicit COLLATE clause is stronger than a column.
- - if derivations are the same, we have DERIVATION_NONE,
- we'll wait for an explicit COLLATE clause which possibly can
- come from another argument later: for example, this is valid,
- but we don't know yet when collecting the first two arguments:
- CONCAT(latin1_swedish_ci_column,
- latin1_german1_ci_column,
- expr COLLATE latin1_german2_ci)
+/**
+ Aggregate two collations together taking
+ into account their coercibility (aka derivation):.
+
+ 0 == DERIVATION_EXPLICIT - an explicitly written COLLATE clause @n
+ 1 == DERIVATION_NONE - a mix of two different collations @n
+ 2 == DERIVATION_IMPLICIT - a column @n
+ 3 == DERIVATION_COERCIBLE - a string constant.
+
+ The most important rules are:
+ -# If collations are the same:
+ chose this collation, and the strongest derivation.
+ -# If collations are different:
+ - Character sets may differ, but only if conversion without
+ data loss is possible. The caller provides flags whether
+ character set conversion attempts should be done. If no
+ flags are substituted, then the character sets must be the same.
+ Currently processed flags are:
+ MY_COLL_ALLOW_SUPERSET_CONV - allow conversion to a superset
+ MY_COLL_ALLOW_COERCIBLE_CONV - allow conversion of a coercible value
+ - two EXPLICIT collations produce an error, e.g. this is wrong:
+ CONCAT(expr1 collate latin1_swedish_ci, expr2 collate latin1_german_ci)
+ - the side with smaller derivation value wins,
+ i.e. a column is stronger than a string constant,
+ an explicit COLLATE clause is stronger than a column.
+ - if derivations are the same, we have DERIVATION_NONE,
+ we'll wait for an explicit COLLATE clause which possibly can
+ come from another argument later: for example, this is valid,
+ but we don't know yet when collecting the first two arguments:
+ @code
+ CONCAT(latin1_swedish_ci_column,
+ latin1_german1_ci_column,
+ expr COLLATE latin1_german2_ci)
+ @endcode
*/
+
bool DTCollation::aggregate(DTCollation &dt, uint flags)
{
if (!my_charset_same(collation, dt.collation))
@@ -1582,8 +1592,9 @@ bool agg_item_collations_for_comparison(DTCollation &c, const char *fname,
}
-/*
+/**
Collect arguments' character sets together.
+
We allow to apply automatic character set conversion in some cases.
The conditions when conversion is possible are:
- arguments A and B have different charsets
@@ -1599,17 +1610,17 @@ bool agg_item_collations_for_comparison(DTCollation &c, const char *fname,
to the collation of A.
For functions with more than two arguments:
-
+ @code
collect(A,B,C) ::= collect(collect(A,B),C)
-
+ @endcode
Since this function calls THD::change_item_tree() on the passed Item **
pointers, it is necessary to pass the original Item **'s, not copies.
Otherwise their values will not be properly restored (see BUG#20769).
If the items are not consecutive (eg. args[2] and args[5]), use the
item_sep argument, ie.
-
+ @code
agg_item_charsets(coll, fname, &args[2], 2, flags, 3)
-
+ @endcode
*/
bool agg_item_charsets(DTCollation &coll, const char *fname,
@@ -1731,6 +1742,13 @@ Item_field::Item_field(Field *f)
}
+/**
+ Constructor used inside setup_wild().
+
+ Ensures that field, table, and database names will live as long as
+ Item_field (this is important in prepared statements).
+*/
+
Item_field::Item_field(THD *thd, Name_resolution_context *context_arg,
Field *f)
:Item_ident(context_arg, f->table->s->db.str, *f->table_name, f->field_name),
@@ -1782,7 +1800,10 @@ Item_field::Item_field(Name_resolution_context *context_arg,
select->select_n_where_fields++;
}
-// Constructor need to process subselect with temporary tables (see Item)
+/**
+ Constructor need to process subselect with temporary tables (see Item)
+*/
+
Item_field::Item_field(THD *thd, Item_field *item)
:Item_ident(thd, item),
field(item->field),
@@ -1813,7 +1834,7 @@ void Item_field::set_field(Field *field_par)
}
-/*
+/**
Reset this item to point to a field from the new temporary table.
This is used when we create a new temporary table for each execution
of prepared statement.
@@ -2082,9 +2103,9 @@ longlong Item_field::val_int_endpoint(bool left_endp, bool *incl_endp)
return null_value? LONGLONG_MIN : res;
}
-/*
+/**
Create an item from a string we KNOW points to a valid longlong
- end \0 terminated number string.
+ end \\0 terminated number string.
This is always 'signed'. Unsigned values are created with Item_uint()
*/
@@ -2325,6 +2346,10 @@ double Item_string::val_real()
}
+/**
+ @todo
+ Give error if we wanted a signed integer and we got an unsigned one
+*/
longlong Item_string::val_int()
{
DBUG_ASSERT(fixed == 1);
@@ -2398,9 +2423,9 @@ Item *Item_null::safe_charset_converter(CHARSET_INFO *tocs)
/*********************** Item_param related ******************************/
-/*
+/**
Default function of Item_param::set_param_func, so in case
- of malformed packet the server won't SIGSEGV
+ of malformed packet the server won't SIGSEGV.
*/
static void
@@ -2474,16 +2499,14 @@ void Item_param::set_double(double d)
}
-/*
+/**
Set decimal parameter value from string.
- SYNOPSIS
- set_decimal()
- str - character string
- length - string length
+ @param str character string
+ @param length string length
- NOTE
- as we use character strings to send decimal values in
+ @note
+ As we use character strings to send decimal values in
binary protocol, we use str2my_decimal to convert it to
internal decimal value.
*/
@@ -2504,16 +2527,14 @@ void Item_param::set_decimal(const char *str, ulong length)
}
-/*
+/**
Set parameter value from MYSQL_TIME value.
- SYNOPSIS
- set_time()
- tm - datetime value to set (time_type is ignored)
- type - type of datetime value
- max_length_arg - max length of datetime value as string
+ @param tm datetime value to set (time_type is ignored)
+ @param type type of datetime value
+ @param max_length_arg max length of datetime value as string
- NOTE
+ @note
If we value to be stored is not normalized, zero value will be stored
instead and proper warning will be produced. This function relies on
the fact that even wrong value sent over binary protocol fits into
@@ -2589,16 +2610,15 @@ bool Item_param::set_longdata(const char *str, ulong length)
}
-/*
+/**
Set parameter value from user variable value.
- SYNOPSIS
- set_from_user_var
- thd Current thread
- entry User variable structure (NULL means use NULL value)
+ @param thd Current thread
+ @param entry User variable structure (NULL means use NULL value)
- RETURN
+ @retval
0 OK
+ @retval
1 Out of memory
*/
@@ -2667,14 +2687,11 @@ bool Item_param::set_from_user_var(THD *thd, const user_var_entry *entry)
DBUG_RETURN(0);
}
-/*
- Resets parameter after execution.
-
- SYNOPSIS
- Item_param::reset()
-
- NOTES
- We clear null_value here instead of setting it in set_* methods,
+/**
+ Resets parameter after execution.
+
+ @note
+ We clear null_value here instead of setting it in set_* methods,
because we want more easily handle case for long data.
*/
@@ -2893,11 +2910,15 @@ String *Item_param::val_str(String* str)
return str;
}
-/*
+/**
Return Param item values in string format, for generating the dynamic
- query used in update/binary logs
- TODO: change interface and implementation to fill log data in place
- and avoid one more memcpy/alloc between str and log string.
+ query used in update/binary logs.
+
+ @todo
+ - Change interface and implementation to fill log data in place
+ and avoid one more memcpy/alloc between str and log string.
+ - In case of error we need to notify replication
+ that binary log contains wrong statement
*/
const String *Item_param::query_val_str(String* str) const
@@ -2950,7 +2971,7 @@ const String *Item_param::query_val_str(String* str) const
}
-/*
+/**
Convert string from client character set to the character set of
connection.
*/
@@ -3174,17 +3195,16 @@ bool Item_ref_null_helper::get_date(MYSQL_TIME *ltime, uint fuzzydate)
}
-/*
- Mark item and SELECT_LEXs as dependent if item was resolved in outer SELECT
+/**
+ Mark item and SELECT_LEXs as dependent if item was resolved in
+ outer SELECT.
- SYNOPSIS
- mark_as_dependent()
- thd - thread handler
- last - select from which current item depend
- current - current select
- resolved_item - item which was resolved in outer SELECT(for warning)
- mark_item - item which should be marked (can be differ in case of
- substitution)
+ @param thd thread handler
+ @param last select from which current item depend
+ @param current current select
+ @param resolved_item item which was resolved in outer SELECT(for warning)
+ @param mark_item item which should be marked (can be differ in case of
+ substitution)
*/
static void mark_as_dependent(THD *thd, SELECT_LEX *last, SELECT_LEX *current,
@@ -3213,21 +3233,19 @@ static void mark_as_dependent(THD *thd, SELECT_LEX *last, SELECT_LEX *current,
}
-/*
- Mark range of selects and resolved identifier (field/reference) item as
- dependent
+/**
+ Mark range of selects and resolved identifier (field/reference)
+ item as dependent.
- SYNOPSIS
- mark_select_range_as_dependent()
- thd - thread handler
- last_select - select where resolved_item was resolved
- current_sel - current select (select where resolved_item was placed)
- found_field - field which was found during resolving
- found_item - Item which was found during resolving (if resolved
- identifier belongs to VIEW)
- resolved_item - Identifier which was resolved
-
- NOTE:
+ @param thd thread handler
+ @param last_select select where resolved_item was resolved
+ @param current_sel current select (select where resolved_item was placed)
+ @param found_field field which was found during resolving
+ @param found_item Item which was found during resolving (if resolved
+ identifier belongs to VIEW)
+ @param resolved_item Identifier which was resolved
+
+ @note
We have to mark all items between current_sel (including) and
last_select (excluding) as dependend (select before last_select should
be marked with actual table mask used by resolved item, all other with
@@ -3279,20 +3297,17 @@ void mark_select_range_as_dependent(THD *thd,
}
-/*
+/**
Search a GROUP BY clause for a field with a certain name.
- SYNOPSIS
- find_field_in_group_list()
- find_item the item being searched for
- group_list GROUP BY clause
+ Search the GROUP BY list for a column named as find_item. When searching
+ preference is given to columns that are qualified with the same table (and
+ database) name as the one being searched for.
- DESCRIPTION
- Search the GROUP BY list for a column named as find_item. When searching
- preference is given to columns that are qualified with the same table (and
- database) name as the one being searched for.
+ @param find_item the item being searched for
+ @param group_list GROUP BY clause
- RETURN
+ @return
- the found item on success
- NULL if find_item is not in group_list
*/
@@ -3346,7 +3361,7 @@ static Item** find_field_in_group_list(Item *find_item, ORDER *group_list)
if (cur_field->table_name && table_name)
{
/* If field_name is qualified by a table name. */
- if (strcmp(cur_field->table_name, table_name))
+ if (my_strcasecmp(table_alias_charset, cur_field->table_name, table_name))
/* Same field names, different tables. */
return NULL;
@@ -3388,43 +3403,40 @@ static Item** find_field_in_group_list(Item *find_item, ORDER *group_list)
}
-/*
+/**
Resolve a column reference in a sub-select.
- SYNOPSIS
- resolve_ref_in_select_and_group()
- thd current thread
- ref column reference being resolved
- select the sub-select that ref is resolved against
-
- DESCRIPTION
- Resolve a column reference (usually inside a HAVING clause) against the
- SELECT and GROUP BY clauses of the query described by 'select'. The name
- resolution algorithm searches both the SELECT and GROUP BY clauses, and in
- case of a name conflict prefers GROUP BY column names over SELECT names. If
- both clauses contain different fields with the same names, a warning is
- issued that name of 'ref' is ambiguous. We extend ANSI SQL in that when no
- GROUP BY column is found, then a HAVING name is resolved as a possibly
- derived SELECT column. This extension is allowed only if the
- MODE_ONLY_FULL_GROUP_BY sql mode isn't enabled.
-
- NOTES
+ Resolve a column reference (usually inside a HAVING clause) against the
+ SELECT and GROUP BY clauses of the query described by 'select'. The name
+ resolution algorithm searches both the SELECT and GROUP BY clauses, and in
+ case of a name conflict prefers GROUP BY column names over SELECT names. If
+ both clauses contain different fields with the same names, a warning is
+ issued that name of 'ref' is ambiguous. We extend ANSI SQL in that when no
+ GROUP BY column is found, then a HAVING name is resolved as a possibly
+ derived SELECT column. This extension is allowed only if the
+ MODE_ONLY_FULL_GROUP_BY sql mode isn't enabled.
+
+ @param thd current thread
+ @param ref column reference being resolved
+ @param select the select that ref is resolved against
+
+ @note
The resolution procedure is:
- Search for a column or derived column named col_ref_i [in table T_j]
- in the SELECT clause of Q.
+ in the SELECT clause of Q.
- Search for a column named col_ref_i [in table T_j]
- in the GROUP BY clause of Q.
+ in the GROUP BY clause of Q.
- If found different columns with the same name in GROUP BY and SELECT
- - issue a warning and return the GROUP BY column,
- - otherwise
- - if the MODE_ONLY_FULL_GROUP_BY mode is enabled return error
- - else return the found SELECT column.
+ - issue a warning and return the GROUP BY column,
+ - otherwise
+ - if the MODE_ONLY_FULL_GROUP_BY mode is enabled return error
+ - else return the found SELECT column.
- RETURN
- NULL - there was an error, and the error was already reported
- not_found_item - the item was not resolved, no error was reported
- resolved item - if the item was resolved
+ @return
+ - NULL - there was an error, and the error was already reported
+ - not_found_item - the item was not resolved, no error was reported
+ - resolved item - if the item was resolved
*/
static Item**
@@ -3466,6 +3478,7 @@ resolve_ref_in_select_and_group(THD *thd, Item_ident *ref, SELECT_LEX *select)
}
if (thd->variables.sql_mode & MODE_ONLY_FULL_GROUP_BY &&
+ select->having_fix_field &&
select_ref != not_found_item && !group_by_ref)
{
/*
@@ -3500,44 +3513,45 @@ resolve_ref_in_select_and_group(THD *thd, Item_ident *ref, SELECT_LEX *select)
}
-/*
+/**
Resolve the name of an outer select column reference.
- SYNOPSIS
- Item_field::fix_outer_field()
- thd [in] current thread
- from_field [in/out] found field reference or (Field*)not_found_field
- reference [in/out] view column if this item was resolved to a view column
-
- DESCRIPTION
- The method resolves the column reference represented by 'this' as a column
- present in outer selects that contain current select.
-
- NOTES
- This is the inner loop of Item_field::fix_fields:
+ The method resolves the column reference represented by 'this' as a column
+ present in outer selects that contain current select.
- for each outer query Q_k beginning from the inner-most one
- {
- search for a column or derived column named col_ref_i
- [in table T_j] in the FROM clause of Q_k;
+ In prepared statements, because of cache, find_field_in_tables()
+ can resolve fields even if they don't belong to current context.
+ In this case this method only finds appropriate context and marks
+ current select as dependent. The found reference of field should be
+ provided in 'from_field'.
- if such a column is not found
- Search for a column or derived column named col_ref_i
- [in table T_j] in the SELECT and GROUP clauses of Q_k.
- }
+ @param[in] thd current thread
+ @param[in,out] from_field found field reference or (Field*)not_found_field
+ @param[in,out] reference view column if this item was resolved to a
+ view column
- IMPLEMENTATION
- In prepared statements, because of cache, find_field_in_tables()
- can resolve fields even if they don't belong to current context.
- In this case this method only finds appropriate context and marks
- current select as dependent. The found reference of field should be
- provided in 'from_field'.
+ @note
+ This is the inner loop of Item_field::fix_fields:
+ @code
+ for each outer query Q_k beginning from the inner-most one
+ {
+ search for a column or derived column named col_ref_i
+ [in table T_j] in the FROM clause of Q_k;
- RETURN
- 1 - column succefully resolved and fix_fields() should continue.
- 0 - column fully fixed and fix_fields() should return FALSE
- -1 - error occured
+ if such a column is not found
+ Search for a column or derived column named col_ref_i
+ [in table T_j] in the SELECT and GROUP clauses of Q_k.
+ }
+ @endcode
+
+ @retval
+ 1 column succefully resolved and fix_fields() should continue.
+ @retval
+ 0 column fully fixed and fix_fields() should return FALSE
+ @retval
+ -1 error occured
*/
+
int
Item_field::fix_outer_field(THD *thd, Field **from_field, Item **reference)
{
@@ -3680,7 +3694,7 @@ Item_field::fix_outer_field(THD *thd, Field **from_field, Item **reference)
}
/* Search in SELECT and GROUP lists of the outer select. */
- if (outer_context->resolve_in_select_list)
+ if (place != IN_WHERE && place != IN_ON)
{
if (!(ref= resolve_ref_in_select_and_group(thd, this, select)))
return -1; /* Some error occurred (e.g. ambiguous names). */
@@ -3798,48 +3812,48 @@ Item_field::fix_outer_field(THD *thd, Field **from_field, Item **reference)
}
-/*
+/**
Resolve the name of a column reference.
- SYNOPSIS
- Item_field::fix_fields()
- thd [in] current thread
- reference [in/out] view column if this item was resolved to a view column
+ The method resolves the column reference represented by 'this' as a column
+ present in one of: FROM clause, SELECT clause, GROUP BY clause of a query
+ Q, or in outer queries that contain Q.
- DESCRIPTION
- The method resolves the column reference represented by 'this' as a column
- present in one of: FROM clause, SELECT clause, GROUP BY clause of a query
- Q, or in outer queries that contain Q.
+ The name resolution algorithm used is (where [T_j] is an optional table
+ name that qualifies the column name):
- NOTES
- The name resolution algorithm used is (where [T_j] is an optional table
- name that qualifies the column name):
+ @code
+ resolve_column_reference([T_j].col_ref_i)
+ {
+ search for a column or derived column named col_ref_i
+ [in table T_j] in the FROM clause of Q;
- resolve_column_reference([T_j].col_ref_i)
+ if such a column is NOT found AND // Lookup in outer queries.
+ there are outer queries
{
- search for a column or derived column named col_ref_i
- [in table T_j] in the FROM clause of Q;
-
- if such a column is NOT found AND // Lookup in outer queries.
- there are outer queries
+ for each outer query Q_k beginning from the inner-most one
{
- for each outer query Q_k beginning from the inner-most one
- {
- search for a column or derived column named col_ref_i
- [in table T_j] in the FROM clause of Q_k;
+ search for a column or derived column named col_ref_i
+ [in table T_j] in the FROM clause of Q_k;
- if such a column is not found
- Search for a column or derived column named col_ref_i
- [in table T_j] in the SELECT and GROUP clauses of Q_k.
- }
+ if such a column is not found
+ Search for a column or derived column named col_ref_i
+ [in table T_j] in the SELECT and GROUP clauses of Q_k.
}
}
+ }
+ @endcode
Notice that compared to Item_ref::fix_fields, here we first search the FROM
clause, and then we search the SELECT and GROUP BY clauses.
- RETURN
+ @param[in] thd current thread
+ @param[in,out] reference view column if this item was resolved to a
+ view column
+
+ @retval
TRUE if error
+ @retval
FALSE on success
*/
@@ -4055,26 +4069,24 @@ void Item_field::cleanup()
DBUG_VOID_RETURN;
}
-/*
- Find a field among specified multiple equalities
+/**
+ Find a field among specified multiple equalities.
- SYNOPSIS
- find_item_equal()
- cond_equal reference to list of multiple equalities where
- the field (this object) is to be looked for
-
- DESCRIPTION
- The function first searches the field among multiple equalities
- of the current level (in the cond_equal->current_level list).
- If it fails, it continues searching in upper levels accessed
- through a pointer cond_equal->upper_levels.
- The search terminates as soon as a multiple equality containing
- the field is found.
-
- RETURN VALUES
- First Item_equal containing the field, if success
- 0, otherwise
+ The function first searches the field among multiple equalities
+ of the current level (in the cond_equal->current_level list).
+ If it fails, it continues searching in upper levels accessed
+ through a pointer cond_equal->upper_levels.
+ The search terminates as soon as a multiple equality containing
+ the field is found.
+
+ @param cond_equal reference to list of multiple equalities where
+ the field (this object) is to be looked for
+
+ @return
+ - First Item_equal containing the field, if success
+ - 0, otherwise
*/
+
Item_equal *Item_field::find_item_equal(COND_EQUAL *cond_equal)
{
Item_equal *item= 0;
@@ -4096,32 +4108,33 @@ Item_equal *Item_field::find_item_equal(COND_EQUAL *cond_equal)
}
-/*
- Check whether a field can be substituted by an equal item
+/**
+ Check whether a field can be substituted by an equal item.
- SYNOPSIS
- equal_fields_propagator()
- arg - *arg != NULL <-> the field is in the context where
- substitution for an equal item is valid
-
- DESCRIPTION
- The function checks whether a substitution of the field
- occurrence for an equal item is valid.
+ The function checks whether a substitution of the field
+ occurrence for an equal item is valid.
- NOTES
+ @param arg *arg != NULL <-> the field is in the context where
+ substitution for an equal item is valid
+
+ @note
The following statement is not always true:
+ @n
x=y => F(x)=F(x/y).
+ @n
This means substitution of an item for an equal item not always
- yields an equavalent condition.
- Here's an example:
- 'a'='a '
- (LENGTH('a')=1) != (LENGTH('a ')=2)
+ yields an equavalent condition. Here's an example:
+ @code
+ 'a'='a '
+ (LENGTH('a')=1) != (LENGTH('a ')=2)
+ @endcode
Such a substitution is surely valid if either the substituted
field is not of a STRING type or if it is an argument of
- a comparison predicate.
+ a comparison predicate.
- RETURN
+ @retval
TRUE substitution is valid
+ @retval
FALSE otherwise
*/
@@ -4131,30 +4144,28 @@ bool Item_field::subst_argument_checker(uchar **arg)
}
-/*
+/**
Set a pointer to the multiple equality the field reference belongs to
- (if any)
-
- SYNOPSIS
- equal_fields_propagator()
- arg - reference to list of multiple equalities where
- the field (this object) is to be looked for
-
- DESCRIPTION
- The function looks for a multiple equality containing the field item
- among those referenced by arg.
- In the case such equality exists the function does the following.
- If the found multiple equality contains a constant, then the field
- reference is substituted for this constant, otherwise it sets a pointer
- to the multiple equality in the field item.
+ (if any).
- NOTES
+ The function looks for a multiple equality containing the field item
+ among those referenced by arg.
+ In the case such equality exists the function does the following.
+ If the found multiple equality contains a constant, then the field
+ reference is substituted for this constant, otherwise it sets a pointer
+ to the multiple equality in the field item.
+
+
+ @param arg reference to list of multiple equalities where
+ the field (this object) is to be looked for
+
+ @note
This function is supposed to be called as a callback parameter in calls
- of the compile method.
+ of the compile method.
- RETURN VALUES
- pointer to the replacing constant item, if the field item was substituted
- pointer to the field item, otherwise.
+ @return
+ - pointer to the replacing constant item, if the field item was substituted
+ - pointer to the field item, otherwise.
*/
Item *Item_field::equal_fields_propagator(uchar *arg)
@@ -4183,9 +4194,10 @@ Item *Item_field::equal_fields_propagator(uchar *arg)
}
-/*
- Mark the item to not be part of substitution if it's not a binary item
- See comments in Arg_comparator::set_compare_func() for details
+/**
+ Mark the item to not be part of substitution if it's not a binary item.
+
+ See comments in Arg_comparator::set_compare_func() for details.
*/
bool Item_field::set_no_const_sub(uchar *arg)
@@ -4196,31 +4208,29 @@ bool Item_field::set_no_const_sub(uchar *arg)
}
-/*
+/**
Replace an Item_field for an equal Item_field that evaluated earlier
- (if any)
-
- SYNOPSIS
- replace_equal_field_()
- arg - a dummy parameter, is not used here
-
- DESCRIPTION
- The function returns a pointer to an item that is taken from
- the very beginning of the item_equal list which the Item_field
- object refers to (belongs to) unless item_equal contains a constant
- item. In this case the function returns this constant item,
- (if the substitution does not require conversion).
- If the Item_field object does not refer any Item_equal object
- 'this' is returned
+ (if any).
- NOTES
+ The function returns a pointer to an item that is taken from
+ the very beginning of the item_equal list which the Item_field
+ object refers to (belongs to) unless item_equal contains a constant
+ item. In this case the function returns this constant item,
+ (if the substitution does not require conversion).
+ If the Item_field object does not refer any Item_equal object
+ 'this' is returned .
+
+ @param arg a dummy parameter, is not used here
+
+
+ @note
This function is supposed to be called as a callback parameter in calls
- of the thransformer method.
+ of the thransformer method.
- RETURN VALUES
- pointer to a replacement Item_field if there is a better equal item or
- a pointer to a constant equal item;
- this - otherwise.
+ @return
+ - pointer to a replacement Item_field if there is a better equal item or
+ a pointer to a constant equal item;
+ - this - otherwise.
*/
Item *Item_field::replace_equal_field(uchar *arg)
@@ -4316,19 +4326,56 @@ bool Item::is_datetime()
}
-/*
- Create a field to hold a string value from an item
+String *Item::check_well_formed_result(String *str, bool send_error)
+{
+ /* Check whether we got a well-formed string */
+ CHARSET_INFO *cs= str->charset();
+ int well_formed_error;
+ uint wlen= cs->cset->well_formed_len(cs,
+ str->ptr(), str->ptr() + str->length(),
+ str->length(), &well_formed_error);
+ if (wlen < str->length())
+ {
+ THD *thd= current_thd;
+ char hexbuf[7];
+ enum MYSQL_ERROR::enum_warning_level level;
+ uint diff= str->length() - wlen;
+ set_if_smaller(diff, 3);
+ octet2hex(hexbuf, str->ptr() + wlen, diff);
+ if (send_error)
+ {
+ my_error(ER_INVALID_CHARACTER_STRING, MYF(0),
+ cs->csname, hexbuf);
+ return 0;
+ }
+ if ((thd->variables.sql_mode &
+ (MODE_STRICT_TRANS_TABLES | MODE_STRICT_ALL_TABLES)))
+ {
+ level= MYSQL_ERROR::WARN_LEVEL_ERROR;
+ null_value= 1;
+ str= 0;
+ }
+ else
+ {
+ level= MYSQL_ERROR::WARN_LEVEL_WARN;
+ str->length(wlen);
+ }
+ push_warning_printf(thd, level, ER_INVALID_CHARACTER_STRING,
+ ER(ER_INVALID_CHARACTER_STRING), cs->csname, hexbuf);
+ }
+ return str;
+}
- SYNOPSIS
- make_string_field()
- table Table for which the field is created
- IMPLEMENTATION
- If max_length > CONVERT_IF_BIGGER_TO_BLOB create a blob
- If max_length > 0 create a varchar
- If max_length == 0 create a CHAR(0)
-*/
+/**
+ Create a field to hold a string value from an item.
+
+ If max_length > CONVERT_IF_BIGGER_TO_BLOB create a blob @n
+ If max_length > 0 create a varchar @n
+ If max_length == 0 create a CHAR(0)
+ @param table Table for which the field is created
+*/
Field *Item::make_string_field(TABLE *table)
{
@@ -4351,15 +4398,16 @@ Field *Item::make_string_field(TABLE *table)
}
-/*
- Create a field based on field_type of argument
+/**
+ Create a field based on field_type of argument.
For now, this is only used to create a field for
IFNULL(x,something) and time functions
- RETURN
- 0 error
- # Created field
+ @retval
+ NULL error
+ @retval
+ \# Created field
*/
Field *Item::tmp_table_field_from_field_type(TABLE *table, bool fixed_length)
@@ -4413,7 +4461,7 @@ Field *Item::tmp_table_field_from_field_type(TABLE *table, bool fixed_length)
break;
case MYSQL_TYPE_NEWDATE:
case MYSQL_TYPE_DATE:
- field= new Field_date(maybe_null, name, &my_charset_bin);
+ field= new Field_newdate(maybe_null, name, &my_charset_bin);
break;
case MYSQL_TYPE_TIME:
field= new Field_time(maybe_null, name, &my_charset_bin);
@@ -4461,11 +4509,8 @@ Field *Item::tmp_table_field_from_field_type(TABLE *table, bool fixed_length)
break; // Blob handled outside of case
#ifdef HAVE_SPATIAL
case MYSQL_TYPE_GEOMETRY:
- field= new Field_geom(max_length, maybe_null, name, table->s,
- (Field::geometry_type)
- ((type() == Item::TYPE_HOLDER) ?
- ((Item_type_holder *)this)->get_geometry_type() :
- ((Item_geometry_func *)this)->get_geometry_type()));
+ field= new Field_geom(max_length, maybe_null,
+ name, table->s, get_geometry_type());
#endif /* HAVE_SPATIAL */
}
if (field)
@@ -4488,8 +4533,8 @@ void Item_field::make_field(Send_field *tmp_field)
}
-/*
- Set a field:s value from a item
+/**
+ Set a field's value from a item.
*/
void Item_field::save_org_in_field(Field *to)
@@ -4525,21 +4570,19 @@ int Item_field::save_in_field(Field *to, bool no_conversions)
}
-/*
- Store null in field
+/**
+ Store null in field.
- SYNOPSIS
- save_in_field()
- field Field where we want to store NULL
+ This is used on INSERT.
+ Allow NULL to be inserted in timestamp and auto_increment values.
- DESCRIPTION
- This is used on INSERT.
- Allow NULL to be inserted in timestamp and auto_increment values
+ @param field Field where we want to store NULL
- RETURN VALUES
- 0 ok
- 1 Field doesn't support NULL values and can't handle 'field = NULL'
-*/
+ @retval
+ 0 ok
+ @retval
+ 1 Field doesn't support NULL values and can't handle 'field = NULL'
+*/
int Item_null::save_in_field(Field *field, bool no_conversions)
{
@@ -4547,17 +4590,16 @@ int Item_null::save_in_field(Field *field, bool no_conversions)
}
-/*
- Store null in field
+/**
+ Store null in field.
- SYNOPSIS
- save_safe_in_field()
- field Field where we want to store NULL
+ @param field Field where we want to store NULL
- RETURN VALUES
+ @retval
0 OK
+ @retval
1 Field doesn't support NULL values
-*/
+*/
int Item_null::save_safe_in_field(Field *field)
{
@@ -4608,7 +4650,7 @@ int Item::save_in_field(Field *field, bool no_conversions)
my_decimal decimal_value;
my_decimal *value= val_decimal(&decimal_value);
if (null_value)
- return set_field_to_null(field);
+ return set_field_to_null_with_conversions(field, no_conversions);
field->set_notnull();
error=field->store_decimal(value);
}
@@ -4715,7 +4757,7 @@ static uint nr_of_decimals(const char *str, const char *end)
}
-/*
+/**
This function is only called during parsing. We will signal an error if
value is not a true double value (overflow)
*/
@@ -4870,6 +4912,19 @@ warn:
}
+void Item_hex_string::print(String *str)
+{
+ char *end= (char*) str_value.ptr() + str_value.length(),
+ *ptr= end - min(str_value.length(), sizeof(longlong));
+ str->append("0x");
+ for (; ptr != end ; ptr++)
+ {
+ str->append(_dig_vec_lower[((uchar) *ptr) >> 4]);
+ str->append(_dig_vec_lower[((uchar) *ptr) & 0x0F]);
+ }
+}
+
+
bool Item_hex_string::eq(const Item *arg, bool binary_cmp) const
{
if (arg->basic_const_item() && arg->type() == type())
@@ -4932,8 +4987,8 @@ Item_bin_string::Item_bin_string(const char *str, uint str_length)
}
-/*
- Pack data in buffer for sending
+/**
+ Pack data in buffer for sending.
*/
bool Item_null::send(Protocol *protocol, String *packet)
@@ -4941,8 +4996,8 @@ bool Item_null::send(Protocol *protocol, String *packet)
return protocol->store_null();
}
-/*
- This is only called from items that is not of type item_field
+/**
+ This is only called from items that is not of type item_field.
*/
bool Item::send(Protocol *protocol, String *buffer)
@@ -5151,60 +5206,67 @@ Item_ref::Item_ref(Name_resolution_context *context_arg,
}
-/*
+/**
Resolve the name of a reference to a column reference.
- SYNOPSIS
- Item_ref::fix_fields()
- thd [in] current thread
- reference [in/out] view column if this item was resolved to a view column
+ The method resolves the column reference represented by 'this' as a column
+ present in one of: GROUP BY clause, SELECT clause, outer queries. It is
+ used typically for columns in the HAVING clause which are not under
+ aggregate functions.
- DESCRIPTION
- The method resolves the column reference represented by 'this' as a column
- present in one of: GROUP BY clause, SELECT clause, outer queries. It is
- used typically for columns in the HAVING clause which are not under
- aggregate functions.
+ POSTCONDITION @n
+ Item_ref::ref is 0 or points to a valid item.
- NOTES
+ @note
The name resolution algorithm used is (where [T_j] is an optional table
name that qualifies the column name):
- resolve_extended([T_j].col_ref_i)
- {
- Search for a column or derived column named col_ref_i [in table T_j]
- in the SELECT and GROUP clauses of Q.
-
- if such a column is NOT found AND // Lookup in outer queries.
- there are outer queries
+ @code
+ resolve_extended([T_j].col_ref_i)
{
- for each outer query Q_k beginning from the inner-most one
- {
- Search for a column or derived column named col_ref_i
- [in table T_j] in the SELECT and GROUP clauses of Q_k.
+ Search for a column or derived column named col_ref_i [in table T_j]
+ in the SELECT and GROUP clauses of Q.
- if such a column is not found AND
- - Q_k is not a group query AND
- - Q_k is not inside an aggregate function
- OR
- - Q_(k-1) is not in a HAVING or SELECT clause of Q_k
- {
- search for a column or derived column named col_ref_i
- [in table T_j] in the FROM clause of Q_k;
+ if such a column is NOT found AND // Lookup in outer queries.
+ there are outer queries
+ {
+ for each outer query Q_k beginning from the inner-most one
+ {
+ Search for a column or derived column named col_ref_i
+ [in table T_j] in the SELECT and GROUP clauses of Q_k.
+
+ if such a column is not found AND
+ - Q_k is not a group query AND
+ - Q_k is not inside an aggregate function
+ OR
+ - Q_(k-1) is not in a HAVING or SELECT clause of Q_k
+ {
+ search for a column or derived column named col_ref_i
+ [in table T_j] in the FROM clause of Q_k;
+ }
}
}
}
- }
-
+ @endcode
+ @n
This procedure treats GROUP BY and SELECT clauses as one namespace for
column references in HAVING. Notice that compared to
Item_field::fix_fields, here we first search the SELECT and GROUP BY
clauses, and then we search the FROM clause.
- POSTCONDITION
- Item_ref::ref is 0 or points to a valid item
+ @param[in] thd current thread
+ @param[in,out] reference view column if this item was resolved to a
+ view column
- RETURN
+ @todo
+ Here we could first find the field anyway, and then test this
+ condition, so that we can give a better error message -
+ ER_WRONG_FIELD_WITH_GROUP, instead of the less informative
+ ER_BAD_FIELD_ERROR which we produce now.
+
+ @retval
TRUE if error
+ @retval
FALSE on success
*/
@@ -5731,16 +5793,15 @@ bool Item_direct_ref::get_date(MYSQL_TIME *ltime,uint fuzzydate)
}
-/*
- Prepare referenced field then call usual Item_direct_ref::fix_fields
+/**
+ Prepare referenced field then call usual Item_direct_ref::fix_fields .
- SYNOPSIS
- Item_direct_view_ref::fix_fields()
- thd thread handler
- reference reference on reference where this item stored
+ @param thd thread handler
+ @param reference reference on reference where this item stored
- RETURN
+ @retval
FALSE OK
+ @retval
TRUE Error
*/
@@ -5783,25 +5844,23 @@ bool Item_outer_ref::fix_fields(THD *thd, Item **reference)
}
-/*
+/**
Compare two view column references for equality.
- SYNOPSIS
- Item_direct_view_ref::eq()
- item item to compare with
- binary_cmp make binary comparison
+ A view column reference is considered equal to another column
+ reference if the second one is a view column and if both column
+ references resolve to the same item. It is assumed that both
+ items are of the same type.
- DESCRIPTION
- A view column reference is considered equal to another column
- reference if the second one is a view column and if both column
- references resolve to the same item.
+ @param item item to compare with
+ @param binary_cmp make binary comparison
- RETURN
+ @retval
TRUE Referenced item is equal to given item
+ @retval
FALSE otherwise
*/
-
bool Item_direct_view_ref::eq(const Item *item, bool binary_cmp) const
{
if (item->type() == REF_ITEM)
@@ -5920,9 +5979,9 @@ int Item_default_value::save_in_field(Field *field_arg, bool no_conversions)
}
-/*
+/**
This method like the walk method traverses the item tree, but at the
- same time it can replace some nodes in the tree
+ same time it can replace some nodes in the tree.
*/
Item *Item_default_value::transform(Item_transformer transformer, uchar *args)
@@ -6019,17 +6078,15 @@ void Item_insert_value::print(String *str)
}
-/*
+/**
Find index of Field object which will be appropriate for item
representing field of row being changed in trigger.
- SYNOPSIS
- setup_field()
- thd - current thread context
- table - table of trigger (and where we looking for fields)
- table_grant_info - GRANT_INFO of the subject table
+ @param thd current thread context
+ @param table table of trigger (and where we looking for fields)
+ @param table_grant_info GRANT_INFO of the subject table
- NOTE
+ @note
This function does almost the same as fix_fields() for Item_field
but is invoked right after trigger definition parsing. Since at
this stage we can't say exactly what Field object (corresponding
@@ -6263,8 +6320,10 @@ void resolve_const_item(THD *thd, Item **ref, Item *comp_item)
thd->change_item_tree(ref, new_item);
}
-/*
- Return true if the value stored in the field is equal to the const item
+/**
+ Return true if the value stored in the field is equal to the const
+ item.
+
We need to use this on the range optimizer because in some cases
we can't store the value in the field without some precision/character loss.
*/
@@ -6304,9 +6363,9 @@ bool field_is_equal_to_item(Field *field,Item *item)
return result == field->val_real();
}
-Item_cache* Item_cache::get_cache(Item_result type)
+Item_cache* Item_cache::get_cache(const Item *item)
{
- switch (type) {
+ switch (item->result_type()) {
case INT_RESULT:
return new Item_cache_int();
case REAL_RESULT:
@@ -6314,7 +6373,7 @@ Item_cache* Item_cache::get_cache(Item_result type)
case DECIMAL_RESULT:
return new Item_cache_decimal();
case STRING_RESULT:
- return new Item_cache_str();
+ return new Item_cache_str(item);
case ROW_RESULT:
return new Item_cache_row();
default:
@@ -6492,6 +6551,14 @@ my_decimal *Item_cache_str::val_decimal(my_decimal *decimal_val)
}
+int Item_cache_str::save_in_field(Field *field, bool no_conversions)
+{
+ int res= Item_cache::save_in_field(field, no_conversions);
+ return (is_varbinary && field->type() == MYSQL_TYPE_STRING &&
+ value->length() < field->field_length) ? 1 : res;
+}
+
+
bool Item_cache_row::allocate(uint num)
{
item_count= num;
@@ -6510,7 +6577,7 @@ bool Item_cache_row::setup(Item * item)
{
Item *el= item->element_index(i);
Item_cache *tmp;
- if (!(tmp= values[i]= Item_cache::get_cache(el->result_type())))
+ if (!(tmp= values[i]= Item_cache::get_cache(el)))
return 1;
tmp->setup(el);
}
@@ -6592,21 +6659,16 @@ Item_type_holder::Item_type_holder(THD *thd, Item *item)
prev_decimal_int_part= item->decimal_int_part();
#ifdef HAVE_SPATIAL
if (item->field_type() == MYSQL_TYPE_GEOMETRY)
- geometry_type= (item->type() == Item::FIELD_ITEM) ?
- ((Item_field *)item)->get_geometry_type() :
- (Field::geometry_type)((Item_geometry_func *)item)->get_geometry_type();
+ geometry_type= item->get_geometry_type();
#endif /* HAVE_SPATIAL */
}
-/*
- Return expression type of Item_type_holder
-
- SYNOPSIS
- Item_type_holder::result_type()
+/**
+ Return expression type of Item_type_holder.
- RETURN
- Item_result (type of internal MySQL expression result)
+ @return
+ Item_result (type of internal MySQL expression result)
*/
Item_result Item_type_holder::result_type() const
@@ -6615,13 +6677,10 @@ Item_result Item_type_holder::result_type() const
}
-/*
- Find real field type of item
-
- SYNOPSIS
- Item_type_holder::get_real_type()
+/**
+ Find real field type of item.
- RETURN
+ @return
type of field which should be created to store item value
*/
@@ -6637,6 +6696,8 @@ enum_field_types Item_type_holder::get_real_type(Item *item)
*/
Field *field= ((Item_field *) item)->field;
enum_field_types type= field->real_type();
+ if (field->is_created_from_null_item)
+ return MYSQL_TYPE_NULL;
/* work around about varchar type field detection */
if (type == MYSQL_TYPE_STRING && field->type() == MYSQL_TYPE_VAR_STRING)
return MYSQL_TYPE_VAR_STRING;
@@ -6684,17 +6745,16 @@ enum_field_types Item_type_holder::get_real_type(Item *item)
return item->field_type();
}
-/*
+/**
Find field type which can carry current Item_type_holder type and
type of given Item.
- SYNOPSIS
- Item_type_holder::join_types()
- thd thread handler
- item given item to join its parameters with this item ones
+ @param thd thread handler
+ @param item given item to join its parameters with this item ones
- RETURN
+ @retval
TRUE error - types are incompatible
+ @retval
FALSE OK
*/
@@ -6795,14 +6855,12 @@ bool Item_type_holder::join_types(THD *thd, Item *item)
DBUG_RETURN(FALSE);
}
-/*
- Calculate lenth for merging result for given Item type
+/**
+ Calculate lenth for merging result for given Item type.
- SYNOPSIS
- Item_type_holder::real_length()
- item Item for lrngth detection
+ @param item Item for length detection
- RETURN
+ @return
length
*/
@@ -6856,15 +6914,13 @@ uint32 Item_type_holder::display_length(Item *item)
}
-/*
+/**
Make temporary table field according collected information about type
- of UNION result
+ of UNION result.
- SYNOPSIS
- Item_type_holder::make_field_by_type()
- table temporary table for which we create fields
+ @param table temporary table for which we create fields
- RETURN
+ @return
created field
*/
@@ -6895,6 +6951,8 @@ Field *Item_type_holder::make_field_by_type(TABLE *table)
if (field)
field->init(table);
return field;
+ case MYSQL_TYPE_NULL:
+ return make_string_field(table);
default:
break;
}
@@ -6902,13 +6960,11 @@ Field *Item_type_holder::make_field_by_type(TABLE *table)
}
-/*
+/**
Get full information from Item about enum/set fields to be able to create
- them later
+ them later.
- SYNOPSIS
- Item_type_holder::get_full_info
- item Item for information collection
+ @param item Item for information collection
*/
void Item_type_holder::get_full_info(Item *item)
{
@@ -6971,26 +7027,21 @@ void Item_result_field::cleanup()
DBUG_VOID_RETURN;
}
-/*
- Dummy error processor used by default by Name_resolution_context
-
- SYNOPSIS
- dummy_error_processor()
+/**
+ Dummy error processor used by default by Name_resolution_context.
- NOTE
+ @note
do nothing
*/
void dummy_error_processor(THD *thd, void *data)
{}
-/*
- Wrapper of hide_view_error call for Name_resolution_context error processor
-
- SYNOPSIS
- view_error_processor()
+/**
+ Wrapper of hide_view_error call for Name_resolution_context error
+ processor.
- NOTE
+ @note
hide view underlying tables details in error messages
*/
diff --git a/sql/item.h b/sql/item.h
index 655159ab752..b98389bc8d4 100644
--- a/sql/item.h
+++ b/sql/item.h
@@ -1001,6 +1001,9 @@ public:
*/
virtual bool result_as_longlong() { return FALSE; }
bool is_datetime();
+ virtual Field::geometry_type get_geometry_type() const
+ { return Field::GEOM_GEOMETRY; };
+ String *check_well_formed_result(String *str, bool send_error= 0);
};
@@ -1239,10 +1242,14 @@ class Item_name_const : public Item
{
Item *value_item;
Item *name_item;
+ bool valid_args;
public:
Item_name_const(Item *name_arg, Item *val):
value_item(val), name_item(name_arg)
{
+ if (!(valid_args= name_item->basic_const_item() &
+ value_item->basic_const_item()))
+ my_error(ER_WRONG_ARGUMENTS, MYF(0), "NAME_CONST");
Item::maybe_null= TRUE;
}
@@ -1467,7 +1474,7 @@ public:
int fix_outer_field(THD *thd, Field **field, Item **reference);
virtual Item *update_value_transformer(uchar *select_arg);
void print(String *str);
- Field::geometry_type get_geometry_type()
+ Field::geometry_type get_geometry_type() const
{
DBUG_ASSERT(field_type() == MYSQL_TYPE_GEOMETRY);
return field->get_geometry_type();
@@ -1714,7 +1721,7 @@ public:
double val_real()
{ DBUG_ASSERT(fixed == 1); return ulonglong2double((ulonglong)value); }
String *val_str(String*);
- Item *clone_item() { return new Item_uint(name,max_length); }
+ Item *clone_item() { return new Item_uint(name, value, max_length); }
int save_in_field(Field *field, bool no_conversions);
void print(String *str);
Item_num *neg ();
@@ -2019,6 +2026,7 @@ public:
enum_field_types field_type() const { return MYSQL_TYPE_VARCHAR; }
// to prevent drop fixed flag (no need parent cleanup call)
void cleanup() {}
+ void print(String *str);
bool eq(const Item *item, bool binary_cmp) const;
virtual Item *safe_charset_converter(CHARSET_INFO *tocs);
bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
@@ -2614,8 +2622,27 @@ class Item_cache: public Item
protected:
Item *example;
table_map used_table_map;
+ /*
+ Field that this object will get value from. This is set/used by
+ index-based subquery engines to detect and remove the equality injected
+ by IN->EXISTS transformation.
+ For all other uses of Item_cache, cached_field doesn't matter.
+ */
+ Field *cached_field;
+ enum enum_field_types cached_field_type;
public:
- Item_cache(): example(0), used_table_map(0) {fixed= 1; null_value= 1;}
+ Item_cache():
+ example(0), used_table_map(0), cached_field(0), cached_field_type(MYSQL_TYPE_STRING)
+ {
+ fixed= 1;
+ null_value= 1;
+ }
+ Item_cache(enum_field_types field_type_arg):
+ example(0), used_table_map(0), cached_field(0), cached_field_type(field_type_arg)
+ {
+ fixed= 1;
+ null_value= 1;
+ }
void set_used_tables(table_map map) { used_table_map= map; }
@@ -2627,16 +2654,27 @@ public:
decimals= item->decimals;
collation.set(item->collation);
unsigned_flag= item->unsigned_flag;
+ if (item->type() == FIELD_ITEM)
+ cached_field= ((Item_field *)item)->field;
return 0;
};
virtual void store(Item *)= 0;
enum Type type() const { return CACHE_ITEM; }
- static Item_cache* get_cache(Item_result type);
+ enum_field_types field_type() const { return cached_field_type; }
+ static Item_cache* get_cache(const Item *item);
table_map used_tables() const { return used_table_map; }
virtual void keep_array() {}
// to prevent drop fixed flag (no need parent cleanup call)
void cleanup() {}
void print(String *str);
+ bool eq_def(Field *field)
+ {
+ return cached_field ? cached_field->eq_def (field) : FALSE;
+ }
+ bool eq(const Item *item, bool binary_cmp) const
+ {
+ return this == item;
+ }
};
@@ -2646,6 +2684,8 @@ protected:
longlong value;
public:
Item_cache_int(): Item_cache(), value(0) {}
+ Item_cache_int(enum_field_types field_type_arg):
+ Item_cache(field_type_arg), value(0) {}
void store(Item *item);
void store(Item *item, longlong val_arg);
@@ -2693,9 +2733,16 @@ class Item_cache_str: public Item_cache
{
char buffer[STRING_BUFFER_USUAL_SIZE];
String *value, value_buff;
+ bool is_varbinary;
+
public:
- Item_cache_str(): Item_cache(), value(0) { }
-
+ Item_cache_str(const Item *item) :
+ Item_cache(), value(0),
+ is_varbinary(item->type() == FIELD_ITEM &&
+ ((const Item_field *) item)->field->type() ==
+ MYSQL_TYPE_VARCHAR &&
+ !((const Item_field *) item)->field->has_charset())
+ {}
void store(Item *item);
double val_real();
longlong val_int();
@@ -2703,6 +2750,7 @@ public:
my_decimal *val_decimal(my_decimal *);
enum Item_result result_type() const { return STRING_RESULT; }
CHARSET_INFO *charset() const { return value->charset(); };
+ int save_in_field(Field *field, bool no_conversions);
};
class Item_cache_row: public Item_cache
@@ -2805,7 +2853,7 @@ public:
Field *make_field_by_type(TABLE *table);
static uint32 display_length(Item *item);
static enum_field_types get_real_type(Item *);
- Field::geometry_type get_geometry_type() { return geometry_type; };
+ Field::geometry_type get_geometry_type() const { return geometry_type; };
};
diff --git a/sql/item_buff.cc b/sql/item_buff.cc
index c162b84f457..2f45d0a17c2 100644
--- a/sql/item_buff.cc
+++ b/sql/item_buff.cc
@@ -14,12 +14,17 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-/* Buffers to save and compare item values */
+/**
+ @file
+
+ @brief
+ Buffers to save and compare item values
+*/
#include "mysql_priv.h"
-/*
-** Create right type of Cached_item for an item
+/**
+ Create right type of Cached_item for an item.
*/
Cached_item *new_Cached_item(THD *thd, Item *item)
@@ -45,9 +50,11 @@ Cached_item *new_Cached_item(THD *thd, Item *item)
Cached_item::~Cached_item() {}
-/*
-** Compare with old value and replace value with new value
-** Return true if values have changed
+/**
+ Compare with old value and replace value with new value.
+
+ @return
+ Return true if values have changed
*/
Cached_item_str::Cached_item_str(THD *thd, Item *arg)
diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc
index 9b7b7b1a62a..dc868376796 100644
--- a/sql/item_cmpfunc.cc
+++ b/sql/item_cmpfunc.cc
@@ -14,7 +14,12 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-/* This file defines all compare functions */
+/**
+ @file
+
+ @brief
+ This file defines all compare functions
+*/
#ifdef USE_PRAGMA_IMPLEMENTATION
#pragma implementation // gcc: Class implementation
@@ -24,7 +29,7 @@
#include <m_ctype.h>
#include "sql_select.h"
-static bool convert_constant_item(THD *thd, Field *field, Item **item);
+static bool convert_constant_item(THD *, Item_field *, Item **);
static Item_result item_store_type(Item_result a, Item *item,
my_bool unsigned_flag)
@@ -104,7 +109,7 @@ static int cmp_row_type(Item* item1, Item* item2)
}
-/*
+/**
Aggregates result types from the array of items.
SYNOPSIS:
@@ -117,11 +122,13 @@ static int cmp_row_type(Item* item1, Item* item2)
This function aggregates result types from the array of items. Found type
supposed to be used later for comparison of values of these items.
Aggregation itself is performed by the item_cmp_type() function.
- The function also checks compatibility of row signatures for the
- submitted items (see the spec for the cmp_row_type function).
+ @param[out] type the aggregated type
+ @param items array of items to aggregate the type from
+ @param nitems number of items in the array
- RETURN VALUES
+ @retval
1 type incompatibility has been detected
+ @retval
0 otherwise
*/
@@ -146,6 +153,35 @@ static int agg_cmp_type(Item_result *type, Item **items, uint nitems)
}
+/**
+ @brief Aggregates field types from the array of items.
+
+ @param[in] items array of items to aggregate the type from
+ @paran[in] nitems number of items in the array
+
+ @details This function aggregates field types from the array of items.
+ Found type is supposed to be used later as the result field type
+ of a multi-argument function.
+ Aggregation itself is performed by the Field::field_type_merge()
+ function.
+
+ @note The term "aggregation" is used here in the sense of inferring the
+ result type of a function from its argument types.
+
+ @return aggregated field type.
+*/
+
+enum_field_types agg_field_type(Item **items, uint nitems)
+{
+ uint i;
+ if (!nitems || items[0]->result_type() == ROW_RESULT )
+ return (enum_field_types)-1;
+ enum_field_types res= items[0]->field_type();
+ for (i= 1 ; i < nitems ; i++)
+ res= Field::field_type_merge(res, items[i]->field_type());
+ return res;
+}
+
/*
Collects different types for comparison of first item with each other items
@@ -257,10 +293,11 @@ void Item_func_not::print(String *str)
str->append(')');
}
-/*
- special NOT for ALL subquery
+/**
+ special NOT for ALL subquery.
*/
+
longlong Item_func_not_all::val_int()
{
DBUG_ASSERT(fixed == 1);
@@ -293,10 +330,13 @@ void Item_func_not_all::print(String *str)
}
-/*
- Special NOP (No OPeration) for ALL subquery it is like Item_func_not_all
- (return TRUE if underlying subquery do not return rows) but if subquery
- returns some rows it return same value as argument (TRUE/FALSE).
+/**
+ Special NOP (No OPeration) for ALL subquery. It is like
+ Item_func_not_all.
+
+ @return
+ (return TRUE if underlying subquery do not return rows) but if subquery
+ returns some rows it return same value as argument (TRUE/FALSE).
*/
longlong Item_func_nop_all::val_int()
@@ -316,16 +356,9 @@ longlong Item_func_nop_all::val_int()
}
-/*
- Convert a constant item to an int and replace the original item
-
- SYNOPSIS
- convert_constant_item()
- thd thread handle
- field item will be converted using the type of this field
- item [in/out] reference to the item to convert
+/**
+ Convert a constant item to an int and replace the original item.
- DESCRIPTION
The function converts a constant expression or string to an integer.
On successful conversion the original item is substituted for the
result of the item evaluation.
@@ -333,20 +366,27 @@ longlong Item_func_nop_all::val_int()
also when comparing bigint to strings (in which case strings
are converted to bigints).
- NOTES
+ @param thd thread handle
+ @param field item will be converted using the type of this field
+ @param[in,out] item reference to the item to convert
+
+ @note
This function is called only at prepare stage.
As all derived tables are filled only after all derived tables
are prepared we do not evaluate items with subselects here because
they can contain derived tables and thus we may attempt to use a
table that has not been populated yet.
- RESULT VALUES
- 0 Can't convert item
- 1 Item was replaced with an integer version of the item
+ @retval
+ 0 Can't convert item
+ @retval
+ 1 Item was replaced with an integer version of the item
*/
-static bool convert_constant_item(THD *thd, Field *field, Item **item)
+static bool convert_constant_item(THD *thd, Item_field *field_item,
+ Item **item)
{
+ Field *field= field_item->field;
int result= 0;
if (!(*item)->with_subselect && (*item)->const_item())
@@ -356,9 +396,11 @@ static bool convert_constant_item(THD *thd, Field *field, Item **item)
enum_check_fields orig_count_cuted_fields= thd->count_cuted_fields;
my_bitmap_map *old_write_map;
my_bitmap_map *old_read_map;
+ ulonglong orig_field_val; /* original field value if valid */
LINT_INIT(old_write_map);
LINT_INIT(old_read_map);
+ LINT_INIT(orig_field_val);
if (table)
{
@@ -369,7 +411,14 @@ static bool convert_constant_item(THD *thd, Field *field, Item **item)
thd->variables.sql_mode= (orig_sql_mode & ~MODE_NO_ZERO_DATE) |
MODE_INVALID_DATES;
thd->count_cuted_fields= CHECK_FIELD_IGNORE;
- if (!(*item)->save_in_field(field, 1) && !((*item)->null_value))
+
+ /*
+ Store the value of the field if it references an outer field because
+ the call to save_in_field below overrides that value.
+ */
+ if (field_item->depended_from)
+ orig_field_val= field->val_int();
+ if (!(*item)->is_null() && !(*item)->save_in_field(field, 1))
{
Item *tmp= new Item_int_with_ref(field->val_int(), *item,
test(field->flags & UNSIGNED_FLAG));
@@ -377,6 +426,13 @@ static bool convert_constant_item(THD *thd, Field *field, Item **item)
thd->change_item_tree(item, tmp);
result= 1; // Item was replaced
}
+ /* Restore the original field value. */
+ if (field_item->depended_from)
+ {
+ result= field->store(orig_field_val, TRUE);
+ /* orig_field_val must be a valid value that can be restored back. */
+ DBUG_ASSERT(!result);
+ }
thd->variables.sql_mode= orig_sql_mode;
thd->count_cuted_fields= orig_count_cuted_fields;
if (table)
@@ -433,15 +489,14 @@ void Item_bool_func2::fix_length_and_dec()
thd= current_thd;
if (!thd->is_context_analysis_only())
{
- Item *arg_real_item= args[0]->real_item();
- if (arg_real_item->type() == FIELD_ITEM)
+ if (args[0]->real_item()->type() == FIELD_ITEM)
{
- Field *field=((Item_field*) arg_real_item)->field;
- if (field->can_be_compared_as_longlong() &&
- !(arg_real_item->is_datetime() &&
+ Item_field *field_item= (Item_field*) (args[0]->real_item());
+ if (field_item->field->can_be_compared_as_longlong() &&
+ !(field_item->is_datetime() &&
args[1]->result_type() == STRING_RESULT))
{
- if (convert_constant_item(thd, field,&args[1]))
+ if (convert_constant_item(thd, field_item, &args[1]))
{
cmp.set_cmp_func(this, tmp_arg, tmp_arg+1,
INT_RESULT); // Works for all types.
@@ -450,15 +505,14 @@ void Item_bool_func2::fix_length_and_dec()
}
}
}
- arg_real_item= args[1]->real_item();
- if (arg_real_item->type() == FIELD_ITEM)
+ if (args[1]->real_item()->type() == FIELD_ITEM)
{
- Field *field=((Item_field*) arg_real_item)->field;
- if (field->can_be_compared_as_longlong() &&
- !(arg_real_item->is_datetime() &&
+ Item_field *field_item= (Item_field*) (args[1]->real_item());
+ if (field_item->field->can_be_compared_as_longlong() &&
+ !(field_item->is_datetime() &&
args[0]->result_type() == STRING_RESULT))
{
- if (convert_constant_item(thd, field,&args[0]))
+ if (convert_constant_item(thd, field_item, &args[0]))
{
cmp.set_cmp_func(this, tmp_arg, tmp_arg+1,
INT_RESULT); // Works for all types.
@@ -575,26 +629,26 @@ int Arg_comparator::set_compare_func(Item_bool_func2 *item, Item_result type)
}
-/*
- Convert date provided in a string to the int representation.
+/**
+ @brief Convert date provided in a string to the int representation.
- SYNOPSIS
- get_date_from_str()
- thd Thread handle
- str a string to convert
- warn_type type of the timestamp for issuing the warning
- warn_name field name for issuing the warning
- error_arg [out] TRUE if string isn't a DATETIME or clipping occur
+ @param[in] thd thread handle
+ @param[in] str a string to convert
+ @param[in] warn_type type of the timestamp for issuing the warning
+ @param[in] warn_name field name for issuing the warning
+ @param[out] error_arg could not extract a DATE or DATETIME
- DESCRIPTION
- Convert date provided in the string str to the int representation.
- if the string contains wrong date or doesn't contain it at all
- then the warning is issued and TRUE returned in the error_arg argument.
- The warn_type and the warn_name arguments are used as the name and the
- type of the field when issuing the warning.
+ @details Convert date provided in the string str to the int
+ representation. If the string contains wrong date or doesn't
+ contain it at all then a warning is issued. The warn_type and
+ the warn_name arguments are used as the name and the type of the
+ field when issuing the warning. If any input was discarded
+ (trailing or non-timestampy characters), was_cut will be non-zero.
+ was_type will return the type str_to_datetime() could correctly
+ extract.
- RETURN
- converted value.
+ @return
+ converted value. 0 on error and on zero-dates -- check 'failure'
*/
static ulonglong
@@ -605,26 +659,33 @@ get_date_from_str(THD *thd, String *str, timestamp_type warn_type,
int error;
MYSQL_TIME l_time;
enum_mysql_timestamp_type ret;
- *error_arg= TRUE;
ret= str_to_datetime(str->ptr(), str->length(), &l_time,
(TIME_FUZZY_DATE | MODE_INVALID_DATES |
(thd->variables.sql_mode &
(MODE_NO_ZERO_IN_DATE | MODE_NO_ZERO_DATE))),
&error);
- if ((ret == MYSQL_TIMESTAMP_DATETIME || ret == MYSQL_TIMESTAMP_DATE))
+
+ if (ret == MYSQL_TIMESTAMP_DATETIME || ret == MYSQL_TIMESTAMP_DATE)
{
- value= TIME_to_ulonglong_datetime(&l_time);
+ /*
+ Do not return yet, we may still want to throw a "trailing garbage"
+ warning.
+ */
*error_arg= FALSE;
+ value= TIME_to_ulonglong_datetime(&l_time);
}
-
- if (error || *error_arg)
+ else
{
+ *error_arg= TRUE;
+ error= 1; /* force warning */
+ }
+
+ if (error > 0)
make_truncated_value_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
str->ptr(), str->length(),
warn_type, warn_name);
- *error_arg= TRUE;
- }
+
return value;
}
@@ -897,12 +958,15 @@ get_datetime_value(THD *thd, Item ***item_arg, Item **cache_arg,
{
value= item->val_int();
*is_null= item->null_value;
+ enum_field_types f_type= item->field_type();
/*
Item_date_add_interval may return MYSQL_TYPE_STRING as the result
field type. To detect that the DATE value has been returned we
- compare it with 1000000L - any DATE value should be less than it.
+ compare it with 100000000L - any DATE value should be less than it.
+ Don't shift cached DATETIME values up for the second time.
*/
- if (item->field_type() == MYSQL_TYPE_DATE || value < 100000000L)
+ if (f_type == MYSQL_TYPE_DATE ||
+ (f_type != MYSQL_TYPE_DATETIME && value < 100000000L))
value*= 1000000L;
}
else
@@ -911,7 +975,7 @@ get_datetime_value(THD *thd, Item ***item_arg, Item **cache_arg,
*is_null= item->null_value;
}
if (*is_null)
- return -1;
+ return ~(ulonglong) 0;
/*
Convert strings to the integer DATE/DATETIME representation.
Even if both dates provided in strings we can't compare them directly as
@@ -925,6 +989,12 @@ get_datetime_value(THD *thd, Item ***item_arg, Item **cache_arg,
timestamp_type t_type= f_type ==
MYSQL_TYPE_DATE ? MYSQL_TIMESTAMP_DATE : MYSQL_TIMESTAMP_DATETIME;
value= get_date_from_str(thd, str, t_type, warn_item->name, &error);
+ /*
+ If str did not contain a valid date according to the current
+ SQL_MODE, get_date_from_str() has already thrown a warning,
+ and we don't want to throw NULL on invalid date (see 5.2.6
+ "SQL modes" in the manual), so we're done here.
+ */
}
/*
Do not cache GET_USER_VAR() function as its const_item() may return TRUE
@@ -933,7 +1003,7 @@ get_datetime_value(THD *thd, Item ***item_arg, Item **cache_arg,
if (item->const_item() && cache_arg && (item->type() != Item::FUNC_ITEM ||
((Item_func*)item)->functype() != Item_func::GUSERVAR_FUNC))
{
- Item_cache_int *cache= new Item_cache_int();
+ Item_cache_int *cache= new Item_cache_int(MYSQL_TYPE_DATETIME);
/* Mark the cache as non-const to prevent re-caching. */
cache->set_used_tables(1);
cache->store(item, value);
@@ -1013,13 +1083,15 @@ int Arg_comparator::compare_string()
}
-/*
+/**
Compare strings byte by byte. End spaces are also compared.
- RETURN
- < 0 *a < *b
- 0 *b == *b
- > 0 *a > *b
+ @retval
+ <0 *a < *b
+ @retval
+ 0 *b == *b
+ @retval
+ >0 *a > *b
*/
int Arg_comparator::compare_binary_string()
@@ -1041,10 +1113,11 @@ int Arg_comparator::compare_binary_string()
}
-/*
- Compare strings, but take into account that NULL == NULL
+/**
+ Compare strings, but take into account that NULL == NULL.
*/
+
int Arg_comparator::compare_e_string()
{
String *res1,*res2;
@@ -1185,7 +1258,7 @@ int Arg_comparator::compare_int_signed()
}
-/*
+/**
Compare values as BIGINT UNSIGNED.
*/
@@ -1208,7 +1281,7 @@ int Arg_comparator::compare_int_unsigned()
}
-/*
+/**
Compare signed (*a) with unsigned (*B)
*/
@@ -1233,7 +1306,7 @@ int Arg_comparator::compare_int_signed_unsigned()
}
-/*
+/**
Compare unsigned (*a) with signed (*B)
*/
@@ -1269,7 +1342,7 @@ int Arg_comparator::compare_e_int()
return test(val1 == val2);
}
-/*
+/**
Compare unsigned *a with signed *b or signed *a with unsigned *b.
*/
int Arg_comparator::compare_e_int_diff_signedness()
@@ -1396,7 +1469,7 @@ longlong Item_func_truth::val_int()
bool Item_in_optimizer::fix_left(THD *thd, Item **ref)
{
if (!args[0]->fixed && args[0]->fix_fields(thd, args) ||
- !cache && !(cache= Item_cache::get_cache(args[0]->result_type())))
+ !cache && !(cache= Item_cache::get_cache(args[0])))
return 1;
cache->setup(args[0]);
@@ -1558,7 +1631,7 @@ longlong Item_func_eq::val_int()
}
-/* Same as Item_func_eq, but NULL = NULL */
+/** Same as Item_func_eq, but NULL = NULL. */
void Item_func_equal::fix_length_and_dec()
{
@@ -1649,26 +1722,29 @@ bool Item_func_opt_neg::eq(const Item *item, bool binary_cmp) const
void Item_func_interval::fix_length_and_dec()
{
+ uint rows= row->cols();
+
use_decimal_comparison= ((row->element_index(0)->result_type() ==
DECIMAL_RESULT) ||
(row->element_index(0)->result_type() ==
INT_RESULT));
- if (row->cols() > 8)
+ if (rows > 8)
{
- bool consts=1;
+ bool not_null_consts= TRUE;
- for (uint i=1 ; consts && i < row->cols() ; i++)
+ for (uint i= 1; not_null_consts && i < rows; i++)
{
- consts&= row->element_index(i)->const_item();
+ Item *el= row->element_index(i);
+ not_null_consts&= el->const_item() & !el->is_null();
}
- if (consts &&
+ if (not_null_consts &&
(intervals=
- (interval_range*) sql_alloc(sizeof(interval_range)*(row->cols()-1))))
+ (interval_range*) sql_alloc(sizeof(interval_range) * (rows - 1))))
{
if (use_decimal_comparison)
{
- for (uint i=1 ; i < row->cols(); i++)
+ for (uint i= 1; i < rows; i++)
{
Item *el= row->element_index(i);
interval_range *range= intervals + (i-1);
@@ -1693,7 +1769,7 @@ void Item_func_interval::fix_length_and_dec()
}
else
{
- for (uint i=1 ; i < row->cols(); i++)
+ for (uint i= 1; i < rows; i++)
{
intervals[i-1].dbl= row->element_index(i)->val_real();
}
@@ -1709,21 +1785,18 @@ void Item_func_interval::fix_length_and_dec()
}
-/*
- Execute Item_func_interval()
-
- SYNOPSIS
- Item_func_interval::val_int()
+/**
+ Execute Item_func_interval().
- NOTES
- If we are doing a decimal comparison, we are
- evaluating the first item twice.
+ @note
+ If we are doing a decimal comparison, we are evaluating the first
+ item twice.
- RETURN
- -1 if null value,
- 0 if lower than lowest
- 1 - arg_count-1 if between args[n] and args[n+1]
- arg_count if higher than biggest argument
+ @return
+ - -1 if null value,
+ - 0 if lower than lowest
+ - 1 - arg_count-1 if between args[n] and args[n+1]
+ - arg_count if higher than biggest argument
*/
longlong Item_func_interval::val_int()
@@ -1784,43 +1857,52 @@ longlong Item_func_interval::val_int()
((el->result_type() == DECIMAL_RESULT) ||
(el->result_type() == INT_RESULT)))
{
- my_decimal e_dec_buf, *e_dec= row->element_index(i)->val_decimal(&e_dec_buf);
+ my_decimal e_dec_buf, *e_dec= el->val_decimal(&e_dec_buf);
+ /* Skip NULL ranges. */
+ if (el->null_value)
+ continue;
if (my_decimal_cmp(e_dec, dec) > 0)
- return i-1;
+ return i - 1;
+ }
+ else
+ {
+ double val= el->val_real();
+ /* Skip NULL ranges. */
+ if (el->null_value)
+ continue;
+ if (val > value)
+ return i - 1;
}
- else if (row->element_index(i)->val_real() > value)
- return i-1;
}
return i-1;
}
-/*
- Perform context analysis of a BETWEEN item tree
-
- SYNOPSIS:
- fix_fields()
- thd reference to the global context of the query thread
- tables list of all open tables involved in the query
- ref pointer to Item* variable where pointer to resulting "fixed"
- item is to be assigned
+/**
+ Perform context analysis of a BETWEEN item tree.
- DESCRIPTION
This function performs context analysis (name resolution) and calculates
various attributes of the item tree with Item_func_between as its root.
The function saves in ref the pointer to the item or to a newly created
item that is considered as a replacement for the original one.
- NOTES
+ @param thd reference to the global context of the query thread
+ @param ref pointer to Item* variable where pointer to resulting "fixed"
+ item is to be assigned
+
+ @note
Let T0(e)/T1(e) be the value of not_null_tables(e) when e is used on
a predicate/function level. Then it's easy to show that:
+ @verbatim
T0(e BETWEEN e1 AND e2) = union(T1(e),T1(e1),T1(e2))
T1(e BETWEEN e1 AND e2) = union(T1(e),intersection(T1(e1),T1(e2)))
T0(e NOT BETWEEN e1 AND e2) = union(T1(e),intersection(T1(e1),T1(e2)))
T1(e NOT BETWEEN e1 AND e2) = union(T1(e),intersection(T1(e1),T1(e2)))
+ @endverbatim
- RETURN
+ @retval
0 ok
+ @retval
1 got error
*/
@@ -1901,16 +1983,16 @@ void Item_func_between::fix_length_and_dec()
thd->lex->sql_command != SQLCOM_CREATE_VIEW &&
thd->lex->sql_command != SQLCOM_SHOW_CREATE)
{
- Field *field=((Item_field*) (args[0]->real_item()))->field;
- if (field->can_be_compared_as_longlong())
+ Item_field *field_item= (Item_field*) (args[0]->real_item());
+ if (field_item->field->can_be_compared_as_longlong())
{
/*
The following can't be recoded with || as convert_constant_item
changes the argument
*/
- if (convert_constant_item(thd, field,&args[1]))
+ if (convert_constant_item(thd, field_item, &args[1]))
cmp_type=INT_RESULT; // Works for all types.
- if (convert_constant_item(thd, field,&args[2]))
+ if (convert_constant_item(thd, field_item, &args[2]))
cmp_type=INT_RESULT; // Works for all types.
}
}
@@ -2046,10 +2128,20 @@ Item_func_ifnull::fix_length_and_dec()
agg_result_type(&hybrid_type, args, 2);
maybe_null=args[1]->maybe_null;
decimals= max(args[0]->decimals, args[1]->decimals);
- max_length= (hybrid_type == DECIMAL_RESULT || hybrid_type == INT_RESULT) ?
- (max(args[0]->max_length - args[0]->decimals,
- args[1]->max_length - args[1]->decimals) + decimals) :
- max(args[0]->max_length, args[1]->max_length);
+ unsigned_flag= args[0]->unsigned_flag && args[1]->unsigned_flag;
+
+ if (hybrid_type == DECIMAL_RESULT || hybrid_type == INT_RESULT)
+ {
+ int len0= args[0]->max_length - args[0]->decimals
+ - (args[0]->unsigned_flag ? 0 : 1);
+
+ int len1= args[1]->max_length - args[1]->decimals
+ - (args[1]->unsigned_flag ? 0 : 1);
+
+ max_length= max(len0, len1) + decimals + (unsigned_flag ? 0 : 1);
+ }
+ else
+ max_length= max(args[0]->max_length, args[1]->max_length);
switch (hybrid_type) {
case STRING_RESULT:
@@ -2065,9 +2157,7 @@ Item_func_ifnull::fix_length_and_dec()
default:
DBUG_ASSERT(0);
}
- cached_field_type= args[0]->field_type();
- if (cached_field_type != args[1]->field_type())
- cached_field_type= Item_func::field_type();
+ cached_field_type= agg_field_type(args, 2);
}
@@ -2156,30 +2246,29 @@ Item_func_ifnull::str_op(String *str)
}
-/*
- Perform context analysis of an IF item tree
+/**
+ Perform context analysis of an IF item tree.
- SYNOPSIS:
- fix_fields()
- thd reference to the global context of the query thread
- tables list of all open tables involved in the query
- ref pointer to Item* variable where pointer to resulting "fixed"
- item is to be assigned
-
- DESCRIPTION
This function performs context analysis (name resolution) and calculates
various attributes of the item tree with Item_func_if as its root.
The function saves in ref the pointer to the item or to a newly created
item that is considered as a replacement for the original one.
- NOTES
+ @param thd reference to the global context of the query thread
+ @param ref pointer to Item* variable where pointer to resulting "fixed"
+ item is to be assigned
+
+ @note
Let T0(e)/T1(e) be the value of not_null_tables(e) when e is used on
a predicate/function level. Then it's easy to show that:
+ @verbatim
T0(IF(e,e1,e2) = T1(IF(e,e1,e2))
T1(IF(e,e1,e2)) = intersection(T1(e1),T1(e2))
+ @endverbatim
- RETURN
+ @retval
0 ok
+ @retval
1 got error
*/
@@ -2215,11 +2304,13 @@ Item_func_if::fix_length_and_dec()
{
cached_result_type= arg2_type;
collation.set(args[2]->collation.collation);
+ cached_field_type= args[2]->field_type();
}
else if (null2)
{
cached_result_type= arg1_type;
collation.set(args[1]->collation.collation);
+ cached_field_type= args[1]->field_type();
}
else
{
@@ -2233,6 +2324,7 @@ Item_func_if::fix_length_and_dec()
{
collation.set(&my_charset_bin); // Number
}
+ cached_field_type= agg_field_type(args + 1, 2);
}
if ((cached_result_type == DECIMAL_RESULT )
@@ -2321,11 +2413,14 @@ Item_func_nullif::fix_length_and_dec()
}
-/*
- nullif () returns NULL if arguments are equal, else it returns the
- first argument.
+/**
+ @note
Note that we have to evaluate the first argument twice as the compare
may have been done with a different type than return value
+ @return
+ NULL if arguments are equal
+ @return
+ the first argument if not equal
*/
double
@@ -2397,14 +2492,7 @@ Item_func_nullif::is_null()
}
-/*
- Return the matching ITEM or NULL if all compares (including else) failed
-
- SYNOPSIS
- find_item()
- str Buffer string
-
- DESCRIPTION
+/**
Find and return matching items for CASE or ELSE item if all compares
are failed or NULL if ELSE item isn't defined.
@@ -2418,9 +2506,10 @@ Item_func_nullif::is_null()
to it according to their int values i.e. STRING_RESULT is mapped to bit
0, REAL_RESULT to bit 1, so on.
- RETURN
- NULL - Nothing found and there is no ELSE expression defined
- item - Found item or ELSE item if defined and all comparisons are
+ @retval
+ NULL Nothing found and there is no ELSE expression defined
+ @retval
+ item Found item or ELSE item if defined and all comparisons are
failed
*/
@@ -2557,6 +2646,23 @@ bool Item_func_case::fix_fields(THD *thd, Item **ref)
}
+void Item_func_case::agg_str_lengths(Item* arg)
+{
+ set_if_bigger(max_length, arg->max_length);
+ set_if_bigger(decimals, arg->decimals);
+ unsigned_flag= unsigned_flag && arg->unsigned_flag;
+}
+
+
+void Item_func_case::agg_num_lengths(Item *arg)
+{
+ uint len= my_decimal_length_to_precision(arg->max_length, arg->decimals,
+ arg->unsigned_flag) - arg->decimals;
+ set_if_bigger(max_length, len);
+ set_if_bigger(decimals, arg->decimals);
+ unsigned_flag= unsigned_flag && arg->unsigned_flag;
+}
+
void Item_func_case::fix_length_and_dec()
{
@@ -2582,7 +2688,7 @@ void Item_func_case::fix_length_and_dec()
agg_arg_charsets(collation, agg, nagg, MY_COLL_ALLOW_CONV, 1))
return;
-
+ cached_field_type= agg_field_type(agg, nagg);
/*
Aggregate first expression and all THEN expression types
and collations when string comparison
@@ -2620,15 +2726,22 @@ void Item_func_case::fix_length_and_dec()
max_length=0;
decimals=0;
- for (uint i=0 ; i < ncases ; i+=2)
+ unsigned_flag= TRUE;
+ if (cached_result_type == STRING_RESULT)
{
- set_if_bigger(max_length,args[i+1]->max_length);
- set_if_bigger(decimals,args[i+1]->decimals);
+ for (uint i= 0; i < ncases; i+= 2)
+ agg_str_lengths(args[i + 1]);
+ if (else_expr_num != -1)
+ agg_str_lengths(args[else_expr_num]);
}
- if (else_expr_num != -1)
+ else
{
- set_if_bigger(max_length,args[else_expr_num]->max_length);
- set_if_bigger(decimals,args[else_expr_num]->decimals);
+ for (uint i= 0; i < ncases; i+= 2)
+ agg_num_lengths(args[i + 1]);
+ if (else_expr_num != -1)
+ agg_num_lengths(args[else_expr_num]);
+ max_length= my_decimal_precision_to_length(max_length + decimals, decimals,
+ unsigned_flag);
}
}
@@ -2645,7 +2758,10 @@ uint Item_func_case::decimal_precision() const
}
-/* TODO: Fix this so that it prints the whole CASE expression */
+/**
+ @todo
+ Fix this so that it prints the whole CASE expression
+*/
void Item_func_case::print(String *str)
{
@@ -2687,7 +2803,7 @@ void Item_func_case::cleanup()
}
-/*
+/**
Coalesce - return first not NULL argument.
*/
@@ -2751,6 +2867,7 @@ my_decimal *Item_func_coalesce::decimal_op(my_decimal *decimal_value)
void Item_func_coalesce::fix_length_and_dec()
{
+ cached_field_type= agg_field_type(args, arg_count);
agg_result_type(&hybrid_type, args, arg_count);
switch (hybrid_type) {
case STRING_RESULT:
@@ -3305,32 +3422,31 @@ bool Item_func_in::nulls_in_row()
}
-/*
- Perform context analysis of an IN item tree
+/**
+ Perform context analysis of an IN item tree.
- SYNOPSIS:
- fix_fields()
- thd reference to the global context of the query thread
- tables list of all open tables involved in the query
- ref pointer to Item* variable where pointer to resulting "fixed"
- item is to be assigned
-
- DESCRIPTION
This function performs context analysis (name resolution) and calculates
various attributes of the item tree with Item_func_in as its root.
The function saves in ref the pointer to the item or to a newly created
item that is considered as a replacement for the original one.
- NOTES
+ @param thd reference to the global context of the query thread
+ @param ref pointer to Item* variable where pointer to resulting "fixed"
+ item is to be assigned
+
+ @note
Let T0(e)/T1(e) be the value of not_null_tables(e) when e is used on
a predicate/function level. Then it's easy to show that:
+ @verbatim
T0(e IN(e1,...,en)) = union(T1(e),intersection(T1(ei)))
T1(e IN(e1,...,en)) = union(T1(e),intersection(T1(ei)))
T0(e NOT IN(e1,...,en)) = union(T1(e),union(T1(ei)))
T1(e NOT IN(e1,...,en)) = union(T1(e),intersection(T1(ei)))
+ @endverbatim
- RETURN
+ @retval
0 ok
+ @retval
1 got error
*/
@@ -3509,13 +3625,13 @@ void Item_func_in::fix_length_and_dec()
thd->lex->sql_command != SQLCOM_SHOW_CREATE &&
cmp_type != INT_RESULT)
{
- Field *field= ((Item_field*) (args[0]->real_item()))->field;
- if (field->can_be_compared_as_longlong())
+ Item_field *field_item= (Item_field*) (args[0]->real_item());
+ if (field_item->field->can_be_compared_as_longlong())
{
bool all_converted= TRUE;
for (arg=args+1, arg_end=args+arg_count; arg != arg_end ; arg++)
{
- if (!convert_constant_item (thd, field, &arg[0]))
+ if (!convert_constant_item (thd, field_item, &arg[0]))
all_converted= FALSE;
}
if (all_converted)
@@ -3805,16 +3921,9 @@ bool Item_cond::walk(Item_processor processor, bool walk_subquery, uchar *arg)
}
-/*
- Transform an Item_cond object with a transformer callback function
-
- SYNOPSIS
- transform()
- transformer the transformer callback function to be applied to the nodes
- of the tree of the object
- arg parameter to be passed to the transformer
+/**
+ Transform an Item_cond object with a transformer callback function.
- DESCRIPTION
The function recursively applies the transform method to each
member item of the condition list.
If the call of the method for a member item returns a new item
@@ -3822,7 +3931,11 @@ bool Item_cond::walk(Item_processor processor, bool walk_subquery, uchar *arg)
After this the transformer is applied to the root node
of the Item_cond object.
- RETURN VALUES
+ @param transformer the transformer callback function to be applied to
+ the nodes of the tree of the object
+ @param arg parameter to be passed to the transformer
+
+ @return
Item returned as the result of transformation of the root node
*/
@@ -3851,19 +3964,10 @@ Item *Item_cond::transform(Item_transformer transformer, uchar *arg)
}
-/*
- Compile Item_cond object with a processor and a transformer callback functions
-
- SYNOPSIS
- compile()
- analyzer the analyzer callback function to be applied to the nodes
- of the tree of the object
- arg_p in/out parameter to be passed to the analyzer
- transformer the transformer callback function to be applied to the nodes
- of the tree of the object
- arg_t parameter to be passed to the transformer
+/**
+ Compile Item_cond object with a processor and a transformer
+ callback functions.
- DESCRIPTION
First the function applies the analyzer to the root node of
the Item_func object. Then if the analyzer succeeeds (returns TRUE)
the function recursively applies the compile method to member
@@ -3873,7 +3977,14 @@ Item *Item_cond::transform(Item_transformer transformer, uchar *arg)
After this the transformer is applied to the root node
of the Item_cond object.
- RETURN VALUES
+ @param analyzer the analyzer callback function to be applied to the
+ nodes of the tree of the object
+ @param[in,out] arg_p parameter to be passed to the analyzer
+ @param transformer the transformer callback function to be applied to the
+ nodes of the tree of the object
+ @param arg_t parameter to be passed to the transformer
+
+ @return
Item returned as the result of transformation of the root node
*/
@@ -3923,23 +4034,21 @@ void Item_cond::traverse_cond(Cond_traverser traverser,
}
}
-/*
- Move SUM items out from item tree and replace with reference
+/**
+ Move SUM items out from item tree and replace with reference.
- SYNOPSIS
- split_sum_func()
- thd Thread handler
- ref_pointer_array Pointer to array of reference fields
- fields All fields in select
-
- NOTES
- This function is run on all expression (SELECT list, WHERE, HAVING etc)
- that have or refer (HAVING) to a SUM expression.
-
- The split is done to get an unique item for each SUM function
- so that we can easily find and calculate them.
- (Calculation done by update_sum_func() and copy_sum_funcs() in
- sql_select.cc)
+ The split is done to get an unique item for each SUM function
+ so that we can easily find and calculate them.
+ (Calculation done by update_sum_func() and copy_sum_funcs() in
+ sql_select.cc)
+
+ @param thd Thread handler
+ @param ref_pointer_array Pointer to array of reference fields
+ @param fields All fields in select
+
+ @note
+ This function is run on all expression (SELECT list, WHERE, HAVING etc)
+ that have or refer (HAVING) to a SUM expression.
*/
void Item_cond::split_sum_func(THD *thd, Item **ref_pointer_array,
@@ -4010,20 +4119,22 @@ void Item_cond::neg_arguments(THD *thd)
}
-/*
- Evaluation of AND(expr, expr, expr ...)
+/**
+ Evaluation of AND(expr, expr, expr ...).
- NOTES:
+ @note
abort_if_null is set for AND expressions for which we don't care if the
result is NULL or 0. This is set for:
- WHERE clause
- HAVING clause
- IF(expression)
- RETURN VALUES
+ @retval
1 If all expressions are true
+ @retval
0 If all expressions are false or if we find a NULL expression and
'abort_on_null' is set.
+ @retval
NULL if all expression are either 1 or NULL
*/
@@ -4065,24 +4176,23 @@ longlong Item_cond_or::val_int()
return 0;
}
-/*
- Create an AND expression from two expressions
+/**
+ Create an AND expression from two expressions.
- SYNOPSIS
- and_expressions()
- a expression or NULL
- b expression.
- org_item Don't modify a if a == *org_item
- If a == NULL, org_item is set to point at b,
- to ensure that future calls will not modify b.
-
- NOTES
+ @param a expression or NULL
+ @param b expression.
+ @param org_item Don't modify a if a == *org_item.
+ If a == NULL, org_item is set to point at b,
+ to ensure that future calls will not modify b.
+
+ @note
This will not modify item pointed to by org_item or b
The idea is that one can call this in a loop and create and
'and' over all items without modifying any of the original items.
- RETURN
+ @retval
NULL Error
+ @retval
Item
*/
@@ -4140,7 +4250,9 @@ longlong Item_is_not_null_test::val_int()
DBUG_RETURN(1);
}
-/* Optimize case of not_null_column IS NULL */
+/**
+ Optimize case of not_null_column IS NULL.
+*/
void Item_is_not_null_test::update_used_tables()
{
if (!args[0]->maybe_null)
@@ -4200,7 +4312,9 @@ longlong Item_func_like::val_int()
}
-/* We can optimize a where if first character isn't a wildcard */
+/**
+ We can optimize a where if first character isn't a wildcard
+*/
Item_func::optimize_type Item_func_like::select_optimize() const
{
@@ -4340,6 +4454,51 @@ void Item_func_like::cleanup()
#ifdef USE_REGEX
bool
+Item_func_regex::regcomp(bool send_error)
+{
+ char buff[MAX_FIELD_WIDTH];
+ String tmp(buff,sizeof(buff),&my_charset_bin);
+ String *res= args[1]->val_str(&tmp);
+ int error;
+
+ if (args[1]->null_value)
+ return TRUE;
+
+ if (regex_compiled)
+ {
+ if (!stringcmp(res, &prev_regexp))
+ return FALSE;
+ prev_regexp.copy(*res);
+ my_regfree(&preg);
+ regex_compiled= 0;
+ }
+
+ if (cmp_collation.collation != regex_lib_charset)
+ {
+ /* Convert UCS2 strings to UTF8 */
+ uint dummy_errors;
+ if (conv.copy(res->ptr(), res->length(), res->charset(),
+ regex_lib_charset, &dummy_errors))
+ return TRUE;
+ res= &conv;
+ }
+
+ if ((error= my_regcomp(&preg, res->c_ptr_safe(),
+ regex_lib_flags, regex_lib_charset)))
+ {
+ if (send_error)
+ {
+ (void) my_regerror(error, &preg, buff, sizeof(buff));
+ my_error(ER_REGEXP_ERROR, MYF(0), buff);
+ }
+ return TRUE;
+ }
+ regex_compiled= 1;
+ return FALSE;
+}
+
+
+bool
Item_func_regex::fix_fields(THD *thd, Item **ref)
{
DBUG_ASSERT(fixed == 0);
@@ -4355,34 +4514,34 @@ Item_func_regex::fix_fields(THD *thd, Item **ref)
if (agg_arg_charsets(cmp_collation, args, 2, MY_COLL_CMP_CONV, 1))
return TRUE;
+ regex_lib_flags= (cmp_collation.collation->state &
+ (MY_CS_BINSORT | MY_CS_CSSORT)) ?
+ REG_EXTENDED | REG_NOSUB :
+ REG_EXTENDED | REG_NOSUB | REG_ICASE;
+ /*
+ If the case of UCS2 and other non-ASCII character sets,
+ we will convert patterns and strings to UTF8.
+ */
+ regex_lib_charset= (cmp_collation.collation->mbminlen > 1) ?
+ &my_charset_utf8_general_ci :
+ cmp_collation.collation;
+
used_tables_cache=args[0]->used_tables() | args[1]->used_tables();
not_null_tables_cache= (args[0]->not_null_tables() |
args[1]->not_null_tables());
const_item_cache=args[0]->const_item() && args[1]->const_item();
if (!regex_compiled && args[1]->const_item())
{
- char buff[MAX_FIELD_WIDTH];
- String tmp(buff,sizeof(buff),&my_charset_bin);
- String *res=args[1]->val_str(&tmp);
if (args[1]->null_value)
{ // Will always return NULL
maybe_null=1;
+ fixed= 1;
return FALSE;
}
- int error;
- if ((error= my_regcomp(&preg,res->c_ptr(),
- ((cmp_collation.collation->state &
- (MY_CS_BINSORT | MY_CS_CSSORT)) ?
- REG_EXTENDED | REG_NOSUB :
- REG_EXTENDED | REG_NOSUB | REG_ICASE),
- cmp_collation.collation)))
- {
- (void) my_regerror(error,&preg,buff,sizeof(buff));
- my_error(ER_REGEXP_ERROR, MYF(0), buff);
+ if (regcomp(TRUE))
return TRUE;
- }
- regex_compiled=regex_is_const=1;
- maybe_null=args[0]->maybe_null;
+ regex_is_const= 1;
+ maybe_null= args[0]->maybe_null;
}
else
maybe_null=1;
@@ -4395,47 +4554,25 @@ longlong Item_func_regex::val_int()
{
DBUG_ASSERT(fixed == 1);
char buff[MAX_FIELD_WIDTH];
- String *res, tmp(buff,sizeof(buff),&my_charset_bin);
+ String tmp(buff,sizeof(buff),&my_charset_bin);
+ String *res= args[0]->val_str(&tmp);
- res=args[0]->val_str(&tmp);
- if (args[0]->null_value)
- {
- null_value=1;
+ if ((null_value= (args[0]->null_value ||
+ (!regex_is_const && regcomp(FALSE)))))
return 0;
- }
- if (!regex_is_const)
- {
- char buff2[MAX_FIELD_WIDTH];
- String *res2, tmp2(buff2,sizeof(buff2),&my_charset_bin);
- res2= args[1]->val_str(&tmp2);
- if (args[1]->null_value)
+ if (cmp_collation.collation != regex_lib_charset)
+ {
+ /* Convert UCS2 strings to UTF8 */
+ uint dummy_errors;
+ if (conv.copy(res->ptr(), res->length(), res->charset(),
+ regex_lib_charset, &dummy_errors))
{
- null_value=1;
+ null_value= 1;
return 0;
}
- if (!regex_compiled || stringcmp(res2,&prev_regexp))
- {
- prev_regexp.copy(*res2);
- if (regex_compiled)
- {
- my_regfree(&preg);
- regex_compiled=0;
- }
- if (my_regcomp(&preg,res2->c_ptr_safe(),
- ((cmp_collation.collation->state &
- (MY_CS_BINSORT | MY_CS_CSSORT)) ?
- REG_EXTENDED | REG_NOSUB :
- REG_EXTENDED | REG_NOSUB | REG_ICASE),
- cmp_collation.collation))
- {
- null_value=1;
- return 0;
- }
- regex_compiled=1;
- }
+ res= &conv;
}
- null_value=0;
return my_regexec(&preg,res->c_ptr_safe(),0,(my_regmatch_t*) 0,0) ? 0 : 1;
}
@@ -4463,10 +4600,9 @@ void Item_func_regex::cleanup()
#endif
-/**********************************************************************
- turboBM_compute_suffixes()
+/**
Precomputation dependent only on pattern_len.
-**********************************************************************/
+*/
void Item_func_like::turboBM_compute_suffixes(int *suff)
{
@@ -4520,10 +4656,9 @@ void Item_func_like::turboBM_compute_suffixes(int *suff)
}
-/**********************************************************************
- turboBM_compute_good_suffix_shifts()
- Precomputation dependent only on pattern_len.
-**********************************************************************/
+/**
+ Precomputation dependent only on pattern_len.
+*/
void Item_func_like::turboBM_compute_good_suffix_shifts(int *suff)
{
@@ -4565,10 +4700,9 @@ void Item_func_like::turboBM_compute_good_suffix_shifts(int *suff)
}
-/**********************************************************************
- turboBM_compute_bad_character_shifts()
+/**
Precomputation dependent on pattern_len.
-**********************************************************************/
+*/
void Item_func_like::turboBM_compute_bad_character_shifts()
{
@@ -4594,10 +4728,12 @@ void Item_func_like::turboBM_compute_bad_character_shifts()
}
-/**********************************************************************
- turboBM_matches()
- Search for pattern in text, returns true/false for match/no match
-**********************************************************************/
+/**
+ Search for pattern in text.
+
+ @return
+ returns true/false for match/no match
+*/
bool Item_func_like::turboBM_matches(const char* text, int text_len) const
{
@@ -4677,24 +4813,20 @@ bool Item_func_like::turboBM_matches(const char* text, int text_len) const
}
-/*
+/**
Make a logical XOR of the arguments.
- SYNOPSIS
- val_int()
-
- DESCRIPTION
If either operator is NULL, return NULL.
- NOTE
- As we don't do any index optimization on XOR this is not going to be
- very fast to use.
-
- TODO (low priority)
- Change this to be optimized as:
- A XOR B -> (A) == 1 AND (B) <> 1) OR (A <> 1 AND (B) == 1)
+ @todo
+ (low priority) Change this to be optimized as: @n
+ A XOR B -> (A) == 1 AND (B) <> 1) OR (A <> 1 AND (B) == 1) @n
To be able to do this, we would however first have to extend the MySQL
range optimizer to handle OR better.
+
+ @note
+ As we don't do any index optimization on XOR this is not going to be
+ very fast to use.
*/
longlong Item_cond_xor::val_int()
@@ -4716,15 +4848,12 @@ longlong Item_cond_xor::val_int()
return (longlong) result;
}
-/*
+/**
Apply NOT transformation to the item and return a new one.
- SYNOPSIS
- neg_transformer()
- thd thread handler
- DESCRIPTION
Transform the item using next rules:
+ @verbatim
a AND b AND ... -> NOT(a) OR NOT(b) OR ...
a OR b OR ... -> NOT(a) AND NOT(b) AND ...
NOT(a) -> a
@@ -4736,8 +4865,11 @@ longlong Item_cond_xor::val_int()
a <= b -> a > b
IS NULL(a) -> IS NOT NULL(a)
IS NOT NULL(a) -> IS NULL(a)
+ @endverbatim
- RETURN
+ @param thd thread handler
+
+ @return
New item or
NULL if we cannot apply NOT transformation (see Item::neg_transformer()).
*/
@@ -4755,7 +4887,9 @@ Item *Item_bool_rowready_func2::neg_transformer(THD *thd)
}
-/* a IS NULL -> a IS NOT NULL */
+/**
+ a IS NULL -> a IS NOT NULL.
+*/
Item *Item_func_isnull::neg_transformer(THD *thd)
{
Item *item= new Item_func_isnotnull(args[0]);
@@ -4763,7 +4897,9 @@ Item *Item_func_isnull::neg_transformer(THD *thd)
}
-/* a IS NOT NULL -> a IS NULL */
+/**
+ a IS NOT NULL -> a IS NULL.
+*/
Item *Item_func_isnotnull::neg_transformer(THD *thd)
{
Item *item= new Item_func_isnull(args[0]);
@@ -4846,7 +4982,9 @@ Item *Item_func_le::negated_item() /* a <= b -> a > b */
return new Item_func_gt(args[0], args[1]);
}
-// just fake method, should never be called
+/**
+ just fake method, should never be called.
+*/
Item *Item_bool_rowready_func2::negated_item()
{
DBUG_ASSERT(0);
@@ -4911,18 +5049,16 @@ uint Item_equal::members()
}
-/*
- Check whether a field is referred in the multiple equality
+/**
+ Check whether a field is referred in the multiple equality.
- SYNOPSIS
- contains()
- field field whose occurrence is to be checked
-
- DESCRIPTION
- The function checks whether field is occurred in the Item_equal object
-
- RETURN VALUES
+ The function checks whether field is occurred in the Item_equal object .
+
+ @param field field whose occurrence is to be checked
+
+ @retval
1 if nultiple equality contains a reference to field
+ @retval
0 otherwise
*/
@@ -4939,22 +5075,15 @@ bool Item_equal::contains(Field *field)
}
-/*
- Join members of another Item_equal object
-
- SYNOPSIS
- merge()
- item multiple equality whose members are to be joined
+/**
+ Join members of another Item_equal object.
- DESCRIPTION
The function actually merges two multiple equalities.
After this operation the Item_equal object additionally contains
the field items of another item of the type Item_equal.
If the optional constant items are not equal the cond_false flag is
set to 1.
-
- RETURN VALUES
- none
+ @param item multiple equality whose members are to be joined
*/
void Item_equal::merge(Item_equal *item)
@@ -4974,28 +5103,21 @@ void Item_equal::merge(Item_equal *item)
}
-/*
- Order field items in multiple equality according to a sorting criteria
+/**
+ Order field items in multiple equality according to a sorting criteria.
- SYNOPSIS
- sort()
- cmp function to compare field item
- arg context extra parameter for the cmp function
-
- DESCRIPTION
- The function perform ordering of the field items in the Item_equal
- object according to the criteria determined by the cmp callback parameter.
- If cmp(item_field1,item_field2,arg)<0 than item_field1 must be
- placed after item_fiel2.
+ The function perform ordering of the field items in the Item_equal
+ object according to the criteria determined by the cmp callback parameter.
+ If cmp(item_field1,item_field2,arg)<0 than item_field1 must be
+ placed after item_fiel2.
- IMPLEMENTATION
- The function sorts field items by the exchange sort algorithm.
- The list of field items is looked through and whenever two neighboring
- members follow in a wrong order they are swapped. This is performed
- again and again until we get all members in a right order.
-
- RETURN VALUES
- None
+ The function sorts field items by the exchange sort algorithm.
+ The list of field items is looked through and whenever two neighboring
+ members follow in a wrong order they are swapped. This is performed
+ again and again until we get all members in a right order.
+
+ @param cmp function to compare field item
+ @param arg context extra parameter for the cmp function
*/
void Item_equal::sort(Item_field_cmpfunc cmp, void *arg)
@@ -5030,21 +5152,14 @@ void Item_equal::sort(Item_field_cmpfunc cmp, void *arg)
}
-/*
- Check appearance of new constant items in the multiple equality object
+/**
+ Check appearance of new constant items in the multiple equality object.
- SYNOPSIS
- update_const()
-
- DESCRIPTION
- The function checks appearance of new constant items among
- the members of multiple equalities. Each new constant item is
- compared with the designated constant item if there is any in the
- multiple equality. If there is none the first new constant item
- becomes designated.
-
- RETURN VALUES
- none
+ The function checks appearance of new constant items among
+ the members of multiple equalities. Each new constant item is
+ compared with the designated constant item if there is any in the
+ multiple equality. If there is none the first new constant item
+ becomes designated.
*/
void Item_equal::update_const()
diff --git a/sql/item_cmpfunc.h b/sql/item_cmpfunc.h
index a5252cc08f7..188d87a69ca 100644
--- a/sql/item_cmpfunc.h
+++ b/sql/item_cmpfunc.h
@@ -640,6 +640,7 @@ public:
class Item_func_coalesce :public Item_func_numhybrid
{
protected:
+ enum_field_types cached_field_type;
Item_func_coalesce(Item *a, Item *b) :Item_func_numhybrid(a, b) {}
public:
Item_func_coalesce(List<Item> &list) :Item_func_numhybrid(list) {}
@@ -652,13 +653,13 @@ public:
enum Item_result result_type () const { return hybrid_type; }
const char *func_name() const { return "coalesce"; }
table_map not_null_tables() const { return 0; }
+ enum_field_types field_type() const { return cached_field_type; }
};
class Item_func_ifnull :public Item_func_coalesce
{
protected:
- enum_field_types cached_field_type;
bool field_type_defined;
public:
Item_func_ifnull(Item *a, Item *b) :Item_func_coalesce(a,b) {}
@@ -677,6 +678,7 @@ public:
class Item_func_if :public Item_func
{
enum Item_result cached_result_type;
+ enum_field_types cached_field_type;
public:
Item_func_if(Item *a,Item *b,Item *c)
:Item_func(a,b,c), cached_result_type(INT_RESULT)
@@ -686,6 +688,7 @@ public:
String *val_str(String *str);
my_decimal *val_decimal(my_decimal *);
enum Item_result result_type () const { return cached_result_type; }
+ enum_field_types field_type() const { return cached_field_type; }
bool fix_fields(THD *, Item **);
void fix_length_and_dec();
uint decimal_precision() const;
@@ -713,6 +716,7 @@ public:
bool is_null();
};
+
/* Functions to handle the optimized IN */
@@ -1104,6 +1108,7 @@ class Item_func_case :public Item_func
uint ncases;
Item_result cmp_type;
DTCollation cmp_collation;
+ enum_field_types cached_field_type;
cmp_item *cmp_items[5]; /* For all result types */
cmp_item *case_item;
public:
@@ -1134,11 +1139,14 @@ public:
uint decimal_precision() const;
table_map not_null_tables() const { return 0; }
enum Item_result result_type () const { return cached_result_type; }
+ enum_field_types field_type() const { return cached_field_type; }
const char *func_name() const { return "case"; }
void print(String *str);
Item *find_item(String *str);
CHARSET_INFO *compare_collation() { return cmp_collation.collation; }
void cleanup();
+ void agg_str_lengths(Item *arg);
+ void agg_num_lengths(Item *arg);
};
/*
@@ -1376,6 +1384,10 @@ class Item_func_regex :public Item_bool_func
bool regex_is_const;
String prev_regexp;
DTCollation cmp_collation;
+ CHARSET_INFO *regex_lib_charset;
+ int regex_lib_flags;
+ String conv;
+ bool regcomp(bool send_error);
public:
Item_func_regex(Item *a,Item *b) :Item_bool_func(a,b),
regex_compiled(0),regex_is_const(0) {}
@@ -1442,6 +1454,7 @@ public:
Item *transform(Item_transformer transformer, uchar *arg);
void traverse_cond(Cond_traverser, void *arg, traverse_order order);
void neg_arguments(THD *thd);
+ enum_field_types field_type() const { return MYSQL_TYPE_LONGLONG; }
bool subst_argument_checker(uchar **arg) { return TRUE; }
Item *compile(Item_analyzer analyzer, uchar **arg_p,
Item_transformer transformer, uchar *arg_t);
diff --git a/sql/item_create.cc b/sql/item_create.cc
index dc9f6e92884..40578bef5f8 100644
--- a/sql/item_create.cc
+++ b/sql/item_create.cc
@@ -13,7 +13,12 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-/* Functions to create an item. Used by sql_yacc.yy */
+/**
+ @file
+
+ @brief
+ Functions to create an item. Used by sql_yac.yy
+*/
#include "mysql_priv.h"
#include "item_create.h"
diff --git a/sql/item_func.cc b/sql/item_func.cc
index fded5fa1391..6e9371de9dc 100644
--- a/sql/item_func.cc
+++ b/sql/item_func.cc
@@ -14,7 +14,12 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-/* This file defines all numerical functions */
+/**
+ @file
+
+ @brief
+ This file defines all numerical functions
+*/
#ifdef USE_PRAGMA_IMPLEMENTATION
#pragma implementation // gcc: Class implementation
@@ -46,7 +51,10 @@ bool check_reserved_words(LEX_STRING *name)
}
-/* return TRUE if item is a constant */
+/**
+ @return
+ TRUE if item is a constant
+*/
bool
eval_const_cond(COND *cond)
@@ -187,7 +195,7 @@ Item_func::fix_fields(THD *thd, Item **ref)
}
}
fix_length_and_dec();
- if (thd->net.report_error) // An error inside fix_length_and_dec occured
+ if (thd->is_error()) // An error inside fix_length_and_dec occured
return TRUE;
fixed= 1;
return FALSE;
@@ -237,25 +245,21 @@ void Item_func::traverse_cond(Cond_traverser traverser,
}
-/*
- Transform an Item_func object with a transformer callback function
-
- SYNOPSIS
- transform()
- transformer the transformer callback function to be applied to the nodes
- of the tree of the object
- argument parameter to be passed to the transformer
-
- DESCRIPTION
+/**
+ Transform an Item_func object with a transformer callback function.
+
The function recursively applies the transform method to each
argument of the Item_func node.
If the call of the method for an argument item returns a new item
the old item is substituted for a new one.
After this the transformer is applied to the root node
of the Item_func object.
-
- RETURN VALUES
- Item returned as the result of transformation of the root node
+ @param transformer the transformer callback function to be applied to
+ the nodes of the tree of the object
+ @param argument parameter to be passed to the transformer
+
+ @return
+ Item returned as the result of transformation of the root node
*/
Item *Item_func::transform(Item_transformer transformer, uchar *argument)
@@ -285,19 +289,10 @@ Item *Item_func::transform(Item_transformer transformer, uchar *argument)
}
-/*
- Compile Item_func object with a processor and a transformer callback functions
-
- SYNOPSIS
- compile()
- analyzer the analyzer callback function to be applied to the nodes
- of the tree of the object
- arg_p in/out parameter to be passed to the processor
- transformer the transformer callback function to be applied to the nodes
- of the tree of the object
- arg_t parameter to be passed to the transformer
-
- DESCRIPTION
+/**
+ Compile Item_func object with a processor and a transformer
+ callback functions.
+
First the function applies the analyzer to the root node of
the Item_func object. Then if the analizer succeeeds (returns TRUE)
the function recursively applies the compile method to each argument
@@ -306,9 +301,16 @@ Item *Item_func::transform(Item_transformer transformer, uchar *argument)
the old item is substituted for a new one.
After this the transformer is applied to the root node
of the Item_func object.
-
- RETURN VALUES
- Item returned as the result of transformation of the root node
+
+ @param analyzer the analyzer callback function to be applied to the
+ nodes of the tree of the object
+ @param[in,out] arg_p parameter to be passed to the processor
+ @param transformer the transformer callback function to be applied to the
+ nodes of the tree of the object
+ @param arg_t parameter to be passed to the transformer
+
+ @return
+ Item returned as the result of transformation of the root node
*/
Item *Item_func::compile(Item_analyzer analyzer, uchar **arg_p,
@@ -334,7 +336,9 @@ Item *Item_func::compile(Item_analyzer analyzer, uchar **arg_p,
return (this->*transformer)(arg_t);
}
-/* See comments in Item_cmp_func::split_sum_func() */
+/**
+ See comments in Item_cmp_func::split_sum_func()
+*/
void Item_func::split_sum_func(THD *thd, Item **ref_pointer_array,
List<Item> &fields)
@@ -523,12 +527,9 @@ void Item_func_numhybrid::fix_num_length_and_dec()
{}
-/*
+/**
Set max_length/decimals of function if function is fixed point and
- result length/precision depends on argument ones
-
- SYNOPSIS
- Item_func::count_decimal_length()
+ result length/precision depends on argument ones.
*/
void Item_func::count_decimal_length()
@@ -548,11 +549,8 @@ void Item_func::count_decimal_length()
}
-/*
- Set max_length of if it is maximum length of its arguments
-
- SYNOPSIS
- Item_func::count_only_length()
+/**
+ Set max_length of if it is maximum length of its arguments.
*/
void Item_func::count_only_length()
@@ -567,12 +565,9 @@ void Item_func::count_only_length()
}
-/*
+/**
Set max_length/decimals of function if function is floating point and
- result length/precision depends on argument ones
-
- SYNOPSIS
- Item_func::count_real_length()
+ result length/precision depends on argument ones.
*/
void Item_func::count_real_length()
@@ -655,12 +650,9 @@ bool Item_func_connection_id::fix_fields(THD *thd, Item **ref)
}
-/*
+/**
Check arguments here to determine result's type for a numeric
function of two arguments.
-
- SYNOPSIS
- Item_num_op::find_num_type()
*/
void Item_num_op::find_num_type(void)
@@ -699,13 +691,10 @@ void Item_num_op::find_num_type(void)
}
-/*
+/**
Set result type for a numeric function of one argument
(can be also used by a numeric function of many arguments, if the result
type depends only on the first argument)
-
- SYNOPSIS
- Item_func_num1::find_num_type()
*/
void Item_func_num1::find_num_type()
@@ -1117,16 +1106,15 @@ longlong Item_func_plus::int_op()
}
-/*
- Calculate plus of two decimail's
+/**
+ Calculate plus of two decimals.
- SYNOPSIS
- decimal_op()
- decimal_value Buffer that can be used to store result
+ @param decimal_value Buffer that can be used to store result
- RETURN
- 0 Value was NULL; In this case null_value is set
- # Value of operation as a decimal
+ @retval
+ 0 Value was NULL; In this case null_value is set
+ @retval
+ \# Value of operation as a decimal
*/
my_decimal *Item_func_plus::decimal_op(my_decimal *decimal_value)
@@ -1144,11 +1132,8 @@ my_decimal *Item_func_plus::decimal_op(my_decimal *decimal_value)
return 0;
}
-/*
+/**
Set precision of results for additive operations (+ and -)
-
- SYNOPSIS
- Item_func_additive_op::result_precision()
*/
void Item_func_additive_op::result_precision()
{
@@ -1167,7 +1152,7 @@ void Item_func_additive_op::result_precision()
}
-/*
+/**
The following function is here to allow the user to force
subtraction of UNSIGNED BIGINT to return negative values.
*/
@@ -1199,7 +1184,9 @@ longlong Item_func_minus::int_op()
}
-/* See Item_func_plus::decimal_op for comments */
+/**
+ See Item_func_plus::decimal_op for comments.
+*/
my_decimal *Item_func_minus::decimal_op(my_decimal *decimal_value)
{
@@ -1238,7 +1225,7 @@ longlong Item_func_mul::int_op()
}
-/* See Item_func_plus::decimal_op for comments */
+/** See Item_func_plus::decimal_op for comments. */
my_decimal *Item_func_mul::decimal_op(my_decimal *decimal_value)
{
@@ -1377,7 +1364,11 @@ longlong Item_func_int_div::val_int()
void Item_func_int_div::fix_length_and_dec()
{
- max_length=args[0]->max_length - args[0]->decimals;
+ Item_result argtype= args[0]->result_type();
+ /* use precision ony for the data type it is applicable for and valid */
+ max_length=args[0]->max_length -
+ (argtype == DECIMAL_RESULT || argtype == INT_RESULT ?
+ args[0]->decimals : 0);
maybe_null=1;
unsigned_flag=args[0]->unsigned_flag | args[1]->unsigned_flag;
}
@@ -1570,7 +1561,7 @@ void Item_func_abs::fix_length_and_dec()
}
-/* Gateway to natural LOG function */
+/** Gateway to natural LOG function. */
double Item_func_ln::val_real()
{
DBUG_ASSERT(fixed == 1);
@@ -1585,10 +1576,11 @@ double Item_func_ln::val_real()
return log(value);
}
-/*
- Extended but so slower LOG function
- We have to check if all values are > zero and first one is not one
- as these are the cases then result is not a number.
+/**
+ Extended but so slower LOG function.
+
+ We have to check if all values are > zero and first one is not one
+ as these are the cases then result is not a number.
*/
double Item_func_log::val_real()
{
@@ -1996,12 +1988,13 @@ void Item_func_round::fix_length_and_dec()
case DECIMAL_RESULT:
{
hybrid_type= DECIMAL_RESULT;
+ decimals_to_set= min(DECIMAL_MAX_SCALE, decimals_to_set);
int decimals_delta= args[0]->decimals - decimals_to_set;
int precision= args[0]->decimal_precision();
int length_increase= ((decimals_delta <= 0) || truncate) ? 0:1;
precision-= decimals_delta - length_increase;
- decimals= decimals_to_set;
+ decimals= min(decimals_to_set, DECIMAL_MAX_SCALE);
max_length= my_decimal_precision_to_length(precision, decimals,
unsigned_flag);
break;
@@ -2100,18 +2093,18 @@ my_decimal *Item_func_round::decimal_op(my_decimal *decimal_value)
{
my_decimal val, *value= args[0]->val_decimal(&val);
longlong dec= args[1]->val_int();
- if (dec > 0 || (dec < 0 && args[1]->unsigned_flag))
- {
- dec= min((ulonglong) dec, DECIMAL_MAX_SCALE);
- decimals= (uint8) dec; // to get correct output
- }
+ if (dec >= 0 || args[1]->unsigned_flag)
+ dec= min((ulonglong) dec, decimals);
else if (dec < INT_MIN)
dec= INT_MIN;
if (!(null_value= (args[0]->null_value || args[1]->null_value ||
my_decimal_round(E_DEC_FATAL_ERROR, value, (int) dec,
- truncate, decimal_value) > 1)))
+ truncate, decimal_value) > 1)))
+ {
+ decimal_value->frac= decimals;
return decimal_value;
+ }
return 0;
}
@@ -2238,6 +2231,7 @@ void Item_func_min_max::fix_length_and_dec()
else if ((cmp_type == DECIMAL_RESULT) || (cmp_type == INT_RESULT))
max_length= my_decimal_precision_to_length(max_int_part+decimals, decimals,
unsigned_flag);
+ cached_field_type= agg_field_type(args, arg_count);
}
@@ -2892,6 +2886,7 @@ udf_handler::fix_fields(THD *thd, Item_result_field *func,
if (u_d->func_init)
{
+ char init_msg_buff[MYSQL_ERRMSG_SIZE];
char *to=num_buffer;
for (uint i=0; i < arg_count; i++)
{
@@ -2942,18 +2937,23 @@ udf_handler::fix_fields(THD *thd, Item_result_field *func,
}
}
}
- thd->net.last_error[0]=0;
Udf_func_init init= u_d->func_init;
- if ((error=(uchar) init(&initid, &f_args, thd->net.last_error)))
+ if ((error=(uchar) init(&initid, &f_args, init_msg_buff)))
{
my_error(ER_CANT_INITIALIZE_UDF, MYF(0),
- u_d->name.str, thd->net.last_error);
+ u_d->name.str, init_msg_buff);
free_udf(u_d);
DBUG_RETURN(TRUE);
}
func->max_length=min(initid.max_length,MAX_BLOB_WIDTH);
func->maybe_null=initid.maybe_null;
const_item_cache=initid.const_item;
+ /*
+ Keep used_tables_cache in sync with const_item_cache.
+ See the comment in Item_udf_func::update_used tables.
+ */
+ if (!const_item_cache && !used_tables_cache)
+ used_tables_cache= RAND_TABLE_BIT;
func->decimals=min(initid.decimals,NOT_FIXED_DEC);
}
initialized=1;
@@ -3014,8 +3014,10 @@ bool udf_handler::get_arguments()
return 0;
}
-/* This returns (String*) 0 in case of NULL values */
-
+/**
+ @return
+ (String*)NULL in case of NULL values
+*/
String *udf_handler::val_str(String *str,String *save_str)
{
uchar is_null_tmp=0;
@@ -3219,10 +3221,11 @@ String *Item_func_udf_str::val_str(String *str)
}
-/*
- This has to come last in the udf_handler methods, or C for AIX
- version 6.0.0.0 fails to compile with debugging enabled. (Yes, really.)
- */
+/**
+ @note
+ This has to come last in the udf_handler methods, or C for AIX
+ version 6.0.0.0 fails to compile with debugging enabled. (Yes, really.)
+*/
udf_handler::~udf_handler()
{
@@ -3320,10 +3323,10 @@ void item_user_lock_release(User_level_lock *ull)
delete ull;
}
-/*
- Wait until we are at or past the given position in the master binlog
- on the slave
- */
+/**
+ Wait until we are at or past the given position in the master binlog
+ on the slave.
+*/
longlong Item_master_pos_wait::val_int()
{
@@ -3385,7 +3388,7 @@ void debug_sync_point(const char* lock_name, uint lock_timeout)
Structure is now initialized. Try to get the lock.
Set up control struct to allow others to abort locks
*/
- thd->proc_info="User lock";
+ thd_proc_info(thd, "User lock");
thd->mysys_var->current_mutex= &LOCK_user_locks;
thd->mysys_var->current_cond= &ull->cond;
@@ -3410,7 +3413,7 @@ void debug_sync_point(const char* lock_name, uint lock_timeout)
}
pthread_mutex_unlock(&LOCK_user_locks);
pthread_mutex_lock(&thd->mysys_var->mutex);
- thd->proc_info=0;
+ thd_proc_info(thd, 0);
thd->mysys_var->current_mutex= 0;
thd->mysys_var->current_cond= 0;
pthread_mutex_unlock(&thd->mysys_var->mutex);
@@ -3425,11 +3428,15 @@ void debug_sync_point(const char* lock_name, uint lock_timeout)
#endif
-/*
- Get a user level lock. If the thread has an old lock this is first released.
- Returns 1: Got lock
- Returns 0: Timeout
- Returns NULL: Error
+/**
+ Get a user level lock. If the thread has an old lock this is first released.
+
+ @retval
+ 1 : Got lock
+ @retval
+ 0 : Timeout
+ @retval
+ NULL : Error
*/
longlong Item_func_get_lock::val_int()
@@ -3497,7 +3504,7 @@ longlong Item_func_get_lock::val_int()
Structure is now initialized. Try to get the lock.
Set up control struct to allow others to abort locks.
*/
- thd->proc_info="User lock";
+ thd_proc_info(thd, "User lock");
thd->mysys_var->current_mutex= &LOCK_user_locks;
thd->mysys_var->current_cond= &ull->cond;
@@ -3540,7 +3547,7 @@ longlong Item_func_get_lock::val_int()
pthread_mutex_unlock(&LOCK_user_locks);
pthread_mutex_lock(&thd->mysys_var->mutex);
- thd->proc_info=0;
+ thd_proc_info(thd, 0);
thd->mysys_var->current_mutex= 0;
thd->mysys_var->current_cond= 0;
pthread_mutex_unlock(&thd->mysys_var->mutex);
@@ -3549,12 +3556,12 @@ longlong Item_func_get_lock::val_int()
}
-/*
+/**
Release a user level lock.
- Return:
- 1 if lock released
- 0 if lock wasn't held
- (SQL) NULL if no such lock
+ @return
+ - 1 if lock released
+ - 0 if lock wasn't held
+ - (SQL) NULL if no such lock
*/
longlong Item_func_release_lock::val_int()
@@ -3619,10 +3626,17 @@ longlong Item_func_last_insert_id::val_int()
thd->first_successful_insert_id_in_prev_stmt= value;
return value;
}
- thd->lex->uncacheable(UNCACHEABLE_SIDEEFFECT);
return thd->read_first_successful_insert_id_in_prev_stmt();
}
+
+bool Item_func_last_insert_id::fix_fields(THD *thd, Item **ref)
+{
+ thd->lex->uncacheable(UNCACHEABLE_SIDEEFFECT);
+ return Item_int_func::fix_fields(thd, ref);
+}
+
+
/* This function is just used to test speed of different functions */
longlong Item_func_benchmark::val_int()
@@ -3679,7 +3693,7 @@ void Item_func_benchmark::print(String *str)
}
-/* This function is just used to create tests with time gaps */
+/** This function is just used to create tests with time gaps. */
longlong Item_func_sleep::val_int()
{
@@ -3707,13 +3721,12 @@ longlong Item_func_sleep::val_int()
break;
error= 0;
}
-
+ pthread_mutex_unlock(&LOCK_user_locks);
pthread_mutex_lock(&thd->mysys_var->mutex);
thd->mysys_var->current_mutex= 0;
thd->mysys_var->current_cond= 0;
pthread_mutex_unlock(&thd->mysys_var->mutex);
- pthread_mutex_unlock(&LOCK_user_locks);
pthread_cond_destroy(&cond);
return test(!error); // Return 1 killed
@@ -3828,29 +3841,32 @@ Item_func_set_user_var::fix_length_and_dec()
bool Item_func_set_user_var::register_field_in_read_map(uchar *arg)
{
- TABLE *table= (TABLE *) arg;
- if (result_field->table == table || !table)
- bitmap_set_bit(result_field->table->read_set, result_field->field_index);
+ if (result_field)
+ {
+ TABLE *table= (TABLE *) arg;
+ if (result_field->table == table || !table)
+ bitmap_set_bit(result_field->table->read_set, result_field->field_index);
+ }
return 0;
}
-/*
+/**
Set value to user variable.
- SYNOPSYS
- update_hash()
- entry - pointer to structure representing variable
- set_null - should we set NULL value ?
- ptr - pointer to buffer with new value
- length - length of new value
- type - type of new value
- cs - charset info for new value
- dv - derivation for new value
- unsigned_arg - indiates if a value of type INT_RESULT is unsigned
-
- RETURN VALUE
- False - success, True - failure
+ @param entry pointer to structure representing variable
+ @param set_null should we set NULL value ?
+ @param ptr pointer to buffer with new value
+ @param length length of new value
+ @param type type of new value
+ @param cs charset info for new value
+ @param dv derivation for new value
+ @param unsigned_arg indiates if a value of type INT_RESULT is unsigned
+
+ @retval
+ false success
+ @retval
+ true failure
*/
static bool
@@ -3935,7 +3951,7 @@ Item_func_set_user_var::update_hash(void *ptr, uint length,
}
-/* Get the value of a variable as a double */
+/** Get the value of a variable as a double. */
double user_var_entry::val_real(my_bool *null_value)
{
@@ -3963,7 +3979,7 @@ double user_var_entry::val_real(my_bool *null_value)
}
-/* Get the value of a variable as an integer */
+/** Get the value of a variable as an integer. */
longlong user_var_entry::val_int(my_bool *null_value)
{
@@ -3994,7 +4010,7 @@ longlong user_var_entry::val_int(my_bool *null_value)
}
-/* Get the value of a variable as a string */
+/** Get the value of a variable as a string. */
String *user_var_entry::val_str(my_bool *null_value, String *str,
uint decimals)
@@ -4025,7 +4041,7 @@ String *user_var_entry::val_str(my_bool *null_value, String *str,
return(str);
}
-/* Get the value of a variable as a decimal */
+/** Get the value of a variable as a decimal. */
my_decimal *user_var_entry::val_decimal(my_bool *null_value, my_decimal *val)
{
@@ -4052,18 +4068,17 @@ my_decimal *user_var_entry::val_decimal(my_bool *null_value, my_decimal *val)
return(val);
}
-/*
- This functions is invoked on SET @variable or @variable:= expression.
- Evaluate (and check expression), store results.
+/**
+ This functions is invoked on SET \@variable or
+ \@variable:= expression.
- SYNOPSYS
- Item_func_set_user_var::check()
+ Evaluate (and check expression), store results.
- NOTES
+ @note
For now it always return OK. All problem with value evaluating
- will be caught by thd->net.report_error check in sql_set_variables().
+ will be caught by thd->is_error() check in sql_set_variables().
- RETURN
+ @retval
FALSE OK.
*/
@@ -4112,18 +4127,17 @@ Item_func_set_user_var::check(bool use_result_field)
}
-/*
- This functions is invoked on SET @variable or @variable:= expression.
-
- SYNOPSIS
- Item_func_set_user_var::update()
+/**
+ This functions is invoked on
+ SET \@variable or \@variable:= expression.
- NOTES
+ @note
We have to store the expression as such in the variable, independent of
the value method used by the user
- RETURN
+ @retval
0 OK
+ @retval
1 EOM Error
*/
@@ -4432,24 +4446,23 @@ longlong Item_func_get_user_var::val_int()
}
-/*
+/**
Get variable by name and, if necessary, put the record of variable
use into the binary log.
-
- SYNOPSIS
- get_var_with_binlog()
- thd Current thread
- name Variable name
- out_entry [out] variable structure or NULL. The pointer is set
- regardless of whether function succeeded or not.
When a user variable is invoked from an update query (INSERT, UPDATE etc),
stores this variable and its value in thd->user_var_events, so that it can be
written to the binlog (will be written just before the query is written, see
log.cc).
- RETURN
+ @param thd Current thread
+ @param name Variable name
+ @param[out] out_entry variable structure or NULL. The pointer is set
+ regardless of whether function succeeded or not.
+
+ @retval
0 OK
+ @retval
1 Failed to put appropriate record into binary log
*/
@@ -5104,22 +5117,20 @@ longlong Item_func_bit_xor::val_int()
System variables
****************************************************************************/
-/*
- Return value of an system variable base[.name] as a constant item
+/**
+ Return value of an system variable base[.name] as a constant item.
- SYNOPSIS
- get_system_var()
- thd Thread handler
- var_type global / session
- name Name of base or system variable
- component Component
+ @param thd Thread handler
+ @param var_type global / session
+ @param name Name of base or system variable
+ @param component Component.
- NOTES
+ @note
If component.str = 0 then the variable name is in 'name'
- RETURN
- 0 error
- # constant item
+ @return
+ - 0 : error
+ - # : constant item
*/
@@ -5159,16 +5170,15 @@ Item *get_system_var(THD *thd, enum_var_type var_type, LEX_STRING name,
}
-/*
+/**
Check a user level lock.
- SYNOPSIS:
- val_int()
+ Sets null_value=TRUE on error.
- RETURN VALUES
+ @retval
1 Available
- 0 Already taken
- NULL Error
+ @retval
+ 0 Already taken, or error
*/
longlong Item_func_is_free_lock::val_int()
diff --git a/sql/item_func.h b/sql/item_func.h
index 66a417f31fa..e09b584de95 100644
--- a/sql/item_func.h
+++ b/sql/item_func.h
@@ -236,9 +236,40 @@ public:
my_decimal *val_decimal(my_decimal *);
String *val_str(String*str);
+ /**
+ @brief Performs the operation that this functions implements when the
+ result type is INT.
+
+ @return The result of the operation.
+ */
virtual longlong int_op()= 0;
+
+ /**
+ @brief Performs the operation that this functions implements when the
+ result type is REAL.
+
+ @return The result of the operation.
+ */
virtual double real_op()= 0;
+
+ /**
+ @brief Performs the operation that this functions implements when the
+ result type is DECIMAL.
+
+ @param A pointer where the DECIMAL value will be allocated.
+ @return
+ - 0 If the result is NULL
+ - The same pointer it was given, with the area initialized to the
+ result of the operation.
+ */
virtual my_decimal *decimal_op(my_decimal *)= 0;
+
+ /**
+ @brief Performs the operation that this functions implements when the
+ result type is a string type.
+
+ @return The result of the operation.
+ */
virtual String *str_op(String *)= 0;
bool is_null() { update_null_value(); return null_value; }
};
@@ -436,6 +467,7 @@ public:
longlong int_op();
my_decimal *decimal_op(my_decimal *);
const char *func_name() const { return "-"; }
+ virtual bool basic_const_item() const { return args[0]->basic_const_item(); }
void fix_length_and_dec();
void fix_num_length_and_dec();
uint decimal_precision() const { return args[0]->decimal_precision(); }
@@ -699,7 +731,8 @@ class Item_func_min_max :public Item_func
/* An item used for issuing warnings while string to DATETIME conversion. */
Item *datetime_item;
THD *thd;
-
+protected:
+ enum_field_types cached_field_type;
public:
Item_func_min_max(List<Item> &list,int cmp_sign_arg) :Item_func(list),
cmp_type(INT_RESULT), cmp_sign(cmp_sign_arg), compare_as_dates(FALSE),
@@ -712,6 +745,7 @@ public:
enum Item_result result_type () const { return cmp_type; }
bool result_as_longlong() { return compare_as_dates; };
uint cmp_datetimes(ulonglong *value);
+ enum_field_types field_type() const { return cached_field_type; }
};
class Item_func_min :public Item_func_min_max
@@ -754,6 +788,8 @@ public:
collation= args[0]->collation;
max_length= args[0]->max_length;
decimals=args[0]->decimals;
+ /* The item could be a NULL constant. */
+ null_value= args[0]->is_null();
}
};
@@ -930,6 +966,7 @@ public:
if (arg_count)
max_length= args[0]->max_length;
}
+ bool fix_fields(THD *thd, Item **ref);
};
@@ -985,6 +1022,56 @@ public:
fixed= 1;
return res;
}
+ void update_used_tables()
+ {
+ /*
+ TODO: Make a member in UDF_INIT and return if a UDF is deterministic or
+ not.
+ Currently UDF_INIT has a member (const_item) that is an in/out
+ parameter to the init() call.
+ The code in udf_handler::fix_fields also duplicates the arguments
+ handling code in Item_func::fix_fields().
+
+ The lack of information if a UDF is deterministic makes writing
+ a correct update_used_tables() for UDFs impossible.
+ One solution to this would be :
+ - Add a is_deterministic member of UDF_INIT
+ - (optionally) deprecate the const_item member of UDF_INIT
+ - Take away the duplicate code from udf_handler::fix_fields() and
+ make Item_udf_func call Item_func::fix_fields() to process its
+ arguments as for any other function.
+ - Store the deterministic flag returned by <udf>_init into the
+ udf_handler.
+ - Don't implement Item_udf_func::fix_fields, implement
+ Item_udf_func::fix_length_and_dec() instead (similar to non-UDF
+ functions).
+ - Override Item_func::update_used_tables to call
+ Item_func::update_used_tables() and add a RAND_TABLE_BIT to the
+ result of Item_func::update_used_tables() if the UDF is
+ non-deterministic.
+ - (optionally) rename RAND_TABLE_BIT to NONDETERMINISTIC_BIT to
+ better describe its usage.
+
+ The above would require a change of the UDF API.
+ Until that change is done here's how the current code works:
+ We call Item_func::update_used_tables() only when we know that
+ the function depends on real non-const tables and is deterministic.
+ This can be done only because we know that the optimizer will
+ call update_used_tables() only when there's possibly a new const
+ table. So update_used_tables() can only make a Item_func more
+ constant than it is currently.
+ That's why we don't need to do anything if a function is guaranteed
+ to return non-constant (it's non-deterministic) or is already a
+ const.
+ */
+ if ((used_tables_cache & ~PSEUDO_TABLE_BITS) &&
+ !(used_tables_cache & RAND_TABLE_BIT))
+ {
+ Item_func::update_used_tables();
+ if (!const_item_cache && !used_tables_cache)
+ used_tables_cache= RAND_TABLE_BIT;
+ }
+ }
void cleanup();
Item_result result_type () const { return udf.result_type(); }
table_map not_null_tables() const { return 0; }
diff --git a/sql/item_geofunc.cc b/sql/item_geofunc.cc
index 78741483c0b..ac1b7738a27 100644
--- a/sql/item_geofunc.cc
+++ b/sql/item_geofunc.cc
@@ -14,7 +14,12 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-/* This file defines all spatial functions */
+/**
+ @file
+
+ @brief
+ This file defines all spatial functions
+*/
#ifdef USE_PRAGMA_IMPLEMENTATION
#pragma implementation // gcc: Class implementation
@@ -28,7 +33,7 @@ Field *Item_geometry_func::tmp_table_field(TABLE *t_arg)
{
Field *result;
if ((result= new Field_geom(max_length, maybe_null, name, t_arg->s,
- (Field::geometry_type) get_geometry_type())))
+ get_geometry_type())))
result->init(t_arg);
return result;
}
@@ -37,14 +42,10 @@ void Item_geometry_func::fix_length_and_dec()
{
collation.set(&my_charset_bin);
decimals=0;
- max_length=MAX_BLOB_WIDTH;
+ max_length= max_field_size;
maybe_null= 1;
}
-int Item_geometry_func::get_geometry_type() const
-{
- return (int)Field::GEOM_GEOMETRY;
-}
String *Item_func_geometry_from_text::val_str(String *str)
{
@@ -163,9 +164,9 @@ String *Item_func_geometry_type::val_str(String *str)
}
-int Item_func_envelope::get_geometry_type() const
+Field::geometry_type Item_func_envelope::get_geometry_type() const
{
- return (int) Field::GEOM_POLYGON;
+ return Field::GEOM_POLYGON;
}
@@ -193,9 +194,9 @@ String *Item_func_envelope::val_str(String *str)
}
-int Item_func_centroid::get_geometry_type() const
+Field::geometry_type Item_func_centroid::get_geometry_type() const
{
- return (int) Field::GEOM_POINT;
+ return Field::GEOM_POINT;
}
@@ -333,9 +334,9 @@ err:
*/
-int Item_func_point::get_geometry_type() const
+Field::geometry_type Item_func_point::get_geometry_type() const
{
- return (int) Field::GEOM_POINT;
+ return Field::GEOM_POINT;
}
@@ -360,7 +361,7 @@ String *Item_func_point::val_str(String *str)
}
-/*
+/**
Concatenates various items into various collections
with checkings for valid wkb type of items.
For example, MultiPoint can be a collection of Points only.
@@ -542,6 +543,10 @@ longlong Item_func_isempty::val_int()
}
+/**
+ @todo
+ Ramil or Holyfoot, add real IsSimple calculation
+*/
longlong Item_func_issimple::val_int()
{
DBUG_ASSERT(fixed == 1);
diff --git a/sql/item_geofunc.h b/sql/item_geofunc.h
index 068caa447ef..62be78eee9e 100644
--- a/sql/item_geofunc.h
+++ b/sql/item_geofunc.h
@@ -33,7 +33,6 @@ public:
void fix_length_and_dec();
enum_field_types field_type() const { return MYSQL_TYPE_GEOMETRY; }
Field *tmp_table_field(TABLE *t_arg);
- virtual int get_geometry_type() const;
bool is_null() { (void) val_int(); return null_value; }
};
@@ -92,7 +91,7 @@ public:
Item_func_centroid(Item *a): Item_geometry_func(a) {}
const char *func_name() const { return "centroid"; }
String *val_str(String *);
- int get_geometry_type() const;
+ Field::geometry_type get_geometry_type() const;
};
class Item_func_envelope: public Item_geometry_func
@@ -101,7 +100,7 @@ public:
Item_func_envelope(Item *a): Item_geometry_func(a) {}
const char *func_name() const { return "envelope"; }
String *val_str(String *);
- int get_geometry_type() const;
+ Field::geometry_type get_geometry_type() const;
};
class Item_func_point: public Item_geometry_func
@@ -111,7 +110,7 @@ public:
Item_func_point(Item *a, Item *b, Item *srid): Item_geometry_func(a, b, srid) {}
const char *func_name() const { return "point"; }
String *val_str(String *);
- int get_geometry_type() const;
+ Field::geometry_type get_geometry_type() const;
};
class Item_func_spatial_decomp: public Item_geometry_func
diff --git a/sql/item_row.cc b/sql/item_row.cc
index d1d1011ab2b..369aa04930e 100644
--- a/sql/item_row.cc
+++ b/sql/item_row.cc
@@ -15,13 +15,18 @@
#include "mysql_priv.h"
-/*
+/**
Row items used for comparing rows and IN operations on rows:
+ @verbatim
(a, b, c) > (10, 10, 30)
(a, b, c) = (select c, d, e, from t1 where x=12)
(a, b, c) IN ((1,2,2), (3,4,5), (6,7,8)
(a, b, c) IN (select c, d, e, from t1)
+ @endverbatim
+
+ @todo
+ think placing 2-3 component items in item (as it done for function
*/
Item_row::Item_row(List<Item> &arg):
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc
index d1c8e7a37e8..42314872997 100644
--- a/sql/item_strfunc.cc
+++ b/sql/item_strfunc.cc
@@ -14,9 +14,15 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-/* This file defines all string functions
-** Warning: Some string functions doesn't always put and end-null on a String
-** (This shouldn't be needed)
+/**
+ @file
+
+ @brief
+ This file defines all string functions
+
+ @warning
+ Some string functions don't always put and end-null on a String.
+ (This shouldn't be needed)
*/
#ifdef USE_PRAGMA_IMPLEMENTATION
@@ -36,36 +42,6 @@ C_MODE_END
String my_empty_string("",default_charset_info);
-String *Item_str_func::check_well_formed_result(String *str)
-{
- /* Check whether we got a well-formed string */
- CHARSET_INFO *cs= str->charset();
- int well_formed_error;
- uint wlen= cs->cset->well_formed_len(cs,
- str->ptr(), str->ptr() + str->length(),
- str->length(), &well_formed_error);
- if (wlen < str->length())
- {
- THD *thd= current_thd;
- char hexbuf[7];
- enum MYSQL_ERROR::enum_warning_level level;
- uint diff= str->length() - wlen;
- set_if_smaller(diff, 3);
- octet2hex(hexbuf, str->ptr() + wlen, diff);
- if (thd->variables.sql_mode &
- (MODE_STRICT_TRANS_TABLES | MODE_STRICT_ALL_TABLES))
- {
- level= MYSQL_ERROR::WARN_LEVEL_ERROR;
- null_value= 1;
- str= 0;
- }
- else
- level= MYSQL_ERROR::WARN_LEVEL_WARN;
- push_warning_printf(thd, level, ER_INVALID_CHARACTER_STRING,
- ER(ER_INVALID_CHARACTER_STRING), cs->csname, hexbuf);
- }
- return str;
-}
bool Item_str_func::fix_fields(THD *thd, Item **ref)
@@ -297,9 +273,9 @@ void Item_func_aes_decrypt::fix_length_and_dec()
}
-/*
+/**
Concatenate args with the following premises:
- If only one arg (which is ok), return value of arg
+ If only one arg (which is ok), return value of arg;
Don't reallocate val_str() if not absolute necessary.
*/
@@ -386,10 +362,35 @@ String *Item_func_concat::val_str(String *str)
}
else
{ // Two big const strings
- if (tmp_value.alloc(max_length) ||
- tmp_value.copy(*res) ||
- tmp_value.append(*res2))
+ /*
+ NOTE: We should be prudent in the initial allocation unit -- the
+ size of the arguments is a function of data distribution, which
+ can be any. Instead of overcommitting at the first row, we grow
+ the allocated amount by the factor of 2. This ensures that no
+ more than 25% of memory will be overcommitted on average.
+ */
+
+ uint concat_len= res->length() + res2->length();
+
+ if (tmp_value.alloced_length() < concat_len)
+ {
+ if (tmp_value.alloced_length() == 0)
+ {
+ if (tmp_value.alloc(concat_len))
+ goto null;
+ }
+ else
+ {
+ uint new_len = max(tmp_value.alloced_length() * 2, concat_len);
+
+ if (tmp_value.realloc(new_len))
+ goto null;
+ }
+ }
+
+ if (tmp_value.copy(*res) || tmp_value.append(*res2))
goto null;
+
res= &tmp_value;
use_as_buff=str;
}
@@ -430,13 +431,15 @@ void Item_func_concat::fix_length_and_dec()
max_length= (ulong) max_result_length;
}
-/*
+/**
+ @details
Function des_encrypt() by tonu@spam.ee & monty
Works only if compiled with OpenSSL library support.
- This returns a binary string where first character is CHAR(128 | key-number).
- If one uses a string key key_number is 127.
- Encryption result is longer than original by formula:
- new_length= org_length + (8-(org_length % 8))+1
+ @return
+ A binary string where first character is CHAR(128 | key-number).
+ If one uses a string key key_number is 127.
+ Encryption result is longer than original by formula:
+ @code new_length= org_length + (8-(org_length % 8))+1 @endcode
*/
String *Item_func_des_encrypt::val_str(String *str)
@@ -609,7 +612,7 @@ wrong_key:
}
-/*
+/**
concat with separator. First arg is the separator
concat_ws takes at least two arguments.
*/
@@ -709,8 +712,33 @@ String *Item_func_concat_ws::val_str(String *str)
}
else
{ // Two big const strings
- if (tmp_value.alloc(max_length) ||
- tmp_value.copy(*res) ||
+ /*
+ NOTE: We should be prudent in the initial allocation unit -- the
+ size of the arguments is a function of data distribution, which can
+ be any. Instead of overcommitting at the first row, we grow the
+ allocated amount by the factor of 2. This ensures that no more than
+ 25% of memory will be overcommitted on average.
+ */
+
+ uint concat_len= res->length() + sep_str->length() + res2->length();
+
+ if (tmp_value.alloced_length() < concat_len)
+ {
+ if (tmp_value.alloced_length() == 0)
+ {
+ if (tmp_value.alloc(concat_len))
+ goto null;
+ }
+ else
+ {
+ uint new_len = max(tmp_value.alloced_length() * 2, concat_len);
+
+ if (tmp_value.realloc(new_len))
+ goto null;
+ }
+ }
+
+ if (tmp_value.copy(*res) ||
tmp_value.append(*sep_str) ||
tmp_value.append(*res2))
goto null;
@@ -806,12 +834,14 @@ void Item_func_reverse::fix_length_and_dec()
max_length = args[0]->max_length;
}
-/*
-** Replace all occurences of string2 in string1 with string3.
-** Don't reallocate val_str() if not needed
-*/
+/**
+ Replace all occurences of string2 in string1 with string3.
+
+ Don't reallocate val_str() if not needed.
-/* TODO: Fix that this works with binary strings when using USE_MB */
+ @todo
+ Fix that this works with binary strings when using USE_MB
+*/
String *Item_func_replace::val_str(String *str)
{
@@ -1776,8 +1806,9 @@ String *Item_func_database::val_str(String *str)
}
-/*
- TODO: make USER() replicate properly (currently it is replicated to "")
+/**
+ @todo
+ make USER() replicate properly (currently it is replicated to "")
*/
bool Item_func_user::init(const char *user, const char *host)
{
@@ -1837,7 +1868,7 @@ void Item_func_soundex::fix_length_and_dec()
}
-/*
+/**
If alpha, map input letter to soundex code.
If not alpha and remove_garbage is set then skip to next char
else return 0
@@ -1981,9 +2012,10 @@ String *Item_func_soundex::val_str(String *str)
}
-/*
-** Change a number to format '3,333,333,333.000'
-** This should be 'internationalized' sometimes.
+/**
+ Change a number to format '3,333,333,333.000'.
+
+ This should be 'internationalized' sometimes.
*/
const int FORMAT_MAX_DECIMALS= 30;
@@ -2002,8 +2034,9 @@ void Item_func_format::fix_length_and_dec()
}
-/*
- TODO: This needs to be fixed for multi-byte character set where numbers
+/**
+ @todo
+ This needs to be fixed for multi-byte character set where numbers
are stored in more than one byte
*/
@@ -2276,11 +2309,13 @@ String *Item_func_char::val_str(String *str)
{
DBUG_ASSERT(fixed == 1);
str->length(0);
+ str->set_charset(collation.collation);
for (uint i=0 ; i < arg_count ; i++)
{
int32 num=(int32) args[i]->val_int();
if (!args[i]->null_value)
{
+ char char_num= (char) num;
if (num&0xFF000000L) {
str->append((char)(num>>24));
goto b2;
@@ -2290,10 +2325,9 @@ String *Item_func_char::val_str(String *str)
} else if (num&0xFF00L) {
b1: str->append((char)(num>>8));
}
- str->append((char) num);
+ str->append(&char_num, 1);
}
}
- str->set_charset(collation.collation);
str->realloc(str->length()); // Add end 0 (for Purify)
return check_well_formed_result(str);
}
@@ -2349,9 +2383,9 @@ void Item_func_repeat::fix_length_and_dec()
}
}
-/*
-** Item_func_repeat::str is carefully written to avoid reallocs
-** as much as possible at the cost of a local buffer
+/**
+ Item_func_repeat::str is carefully written to avoid reallocs
+ as much as possible at the cost of a local buffer
*/
String *Item_func_repeat::val_str(String *str)
@@ -2827,7 +2861,7 @@ String *Item_func_hex::val_str(String *str)
return &tmp_value;
}
- /* Convert given hex string to a binary string */
+ /** Convert given hex string to a binary string. */
String *Item_func_unhex::val_str(String *str)
{
@@ -3060,27 +3094,27 @@ String* Item_func_inet_ntoa::val_str(String* str)
}
-/*
+#define get_esc_bit(mask, num) (1 & (*((mask) + ((num) >> 3))) >> ((num) & 7))
+
+/**
QUOTE() function returns argument string in single quotes suitable for
using in a SQL statement.
- DESCRIPTION
- Adds a \ before all characters that needs to be escaped in a SQL string.
- We also escape '^Z' (END-OF-FILE in windows) to avoid probelms when
- running commands from a file in windows.
+ Adds a \\ before all characters that needs to be escaped in a SQL string.
+ We also escape '^Z' (END-OF-FILE in windows) to avoid probelms when
+ running commands from a file in windows.
- This function is very useful when you want to generate SQL statements
+ This function is very useful when you want to generate SQL statements.
- NOTE
+ @note
QUOTE(NULL) returns the string 'NULL' (4 letters, without quotes).
- RETURN VALUES
- str Quoted string
- NULL Out of memory.
+ @retval
+ str Quoted string
+ @retval
+ NULL Out of memory.
*/
-#define get_esc_bit(mask, num) (1 & (*((mask) + ((num) >> 3))) >> ((num) & 7))
-
String *Item_func_quote::val_str(String *str)
{
DBUG_ASSERT(fixed == 1);
@@ -3326,8 +3360,10 @@ static uint nanoseq;
static ulonglong uuid_time=0;
static char clock_seq_and_node_str[]="-0000-000000000000";
-/* number of 100-nanosecond intervals between
- 1582-10-15 00:00:00.00 and 1970-01-01 00:00:00.00 */
+/**
+ number of 100-nanosecond intervals between
+ 1582-10-15 00:00:00.00 and 1970-01-01 00:00:00.00.
+*/
#define UUID_TIME_OFFSET ((ulonglong) 141427 * 24 * 60 * 60 * 1000 * 10 )
#define UUID_VERSION 0x1000
diff --git a/sql/item_strfunc.h b/sql/item_strfunc.h
index 2322f0aacc2..0d7cd66acff 100644
--- a/sql/item_strfunc.h
+++ b/sql/item_strfunc.h
@@ -35,7 +35,6 @@ public:
my_decimal *val_decimal(my_decimal *);
enum Item_result result_type () const { return STRING_RESULT; }
void left_right_max_length();
- String *check_well_formed_result(String *str);
bool fix_fields(THD *thd, Item **ref);
};
@@ -509,7 +508,7 @@ public:
String *val_str(String *);
void fix_length_and_dec()
{
- max_length= arg_count * collation.collation->mbmaxlen;
+ max_length= arg_count * 4;
}
const char *func_name() const { return "char"; }
};
@@ -559,7 +558,8 @@ public:
void fix_length_and_dec()
{
collation.set(default_charset());
- max_length= 64;
+ max_length=64;
+ maybe_null= 1;
}
};
diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc
index 843c6ced263..46b8d2e46cc 100644
--- a/sql/item_subselect.cc
+++ b/sql/item_subselect.cc
@@ -13,12 +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 */
-/*
- subselect Item
+/**
+ @file
+
+ @brief
+ subselect Item
-SUBSELECT TODO:
- - add function from mysql_select that use JOIN* as parameter to JOIN methods
- (sql_select.h/sql_select.cc)
+ @todo
+ - add function from mysql_select that use JOIN* as parameter to JOIN
+ methods (sql_select.h/sql_select.cc)
*/
#ifdef USE_PRAGMA_IMPLEMENTATION
@@ -248,7 +251,7 @@ bool Item_subselect::exec()
{
int res;
- if (thd->net.report_error)
+ if (thd->is_error())
/* Do not execute subselect in case of a fatal error */
return 1;
@@ -403,6 +406,16 @@ void Item_singlerow_subselect::reset()
}
+/**
+ @todo
+ - We cant change name of Item_field or Item_ref, because it will
+ prevent it's correct resolving, but we should save name of
+ removed item => we do not make optimization if top item of
+ list is field or reference.
+ - switch off this optimization for prepare statement,
+ because we do not rollback this changes.
+ Make rollback for it, or special name resolving mode in 5.0.
+*/
Item_subselect::trans_res
Item_singlerow_subselect::select_transformer(JOIN *join)
{
@@ -1445,24 +1458,24 @@ Item_in_subselect::select_transformer(JOIN *join)
}
-/*
+/**
Prepare IN/ALL/ANY/SOME subquery transformation and call appropriate
- transformation function
-
- SYNOPSIS
- Item_in_subselect::select_in_like_transformer()
- join JOIN object of transforming subquery
- func creator of condition function of subquery
+ transformation function.
- DESCRIPTION
To decide which transformation procedure (scalar or row) applicable here
we have to call fix_fields() for left expression to be able to call
cols() method on it. Also this method make arena management for
underlying transformation methods.
- RETURN
+ @param join JOIN object of transforming subquery
+ @param func creator of condition function of subquery
+
+ @retval
RES_OK OK
- RES_REDUCE OK, and current subquery was reduced during transformation
+ @retval
+ RES_REDUCE OK, and current subquery was reduced during
+ transformation
+ @retval
RES_ERROR Error
*/
@@ -1760,7 +1773,7 @@ void subselect_engine::set_row(List<Item> &item_list, Item_cache **row)
item->decimals= sel_item->decimals;
item->unsigned_flag= sel_item->unsigned_flag;
maybe_null= sel_item->maybe_null;
- if (!(row[i]= Item_cache::get_cache(res_type)))
+ if (!(row[i]= Item_cache::get_cache(sel_item)))
return;
row[i]->setup(sel_item);
}
@@ -1843,7 +1856,9 @@ int subselect_single_select_engine::exec()
DBUG_RETURN(1);
}
}
- if (select_lex->uncacheable && executed)
+ if (select_lex->uncacheable &&
+ select_lex->uncacheable != UNCACHEABLE_EXPLAIN
+ && executed)
{
if (join->reinit())
{
@@ -2222,6 +2237,7 @@ int subselect_indexsubquery_engine::exec()
((Item_in_subselect *) item)->value= 0;
empty_result_set= TRUE;
null_keypart= 0;
+ table->status= 0;
if (check_null)
{
@@ -2234,6 +2250,16 @@ int subselect_indexsubquery_engine::exec()
if (copy_ref_key())
DBUG_RETURN(1);
+ if (table->status)
+ {
+ /*
+ We know that there will be no rows even if we scan.
+ Can be set in copy_ref_key.
+ */
+ ((Item_in_subselect *) item)->value= 0;
+ DBUG_RETURN(0);
+ }
+
if (null_keypart)
DBUG_RETURN(scan_table());
@@ -2412,16 +2438,15 @@ void subselect_indexsubquery_engine::print(String *str)
str->append(')');
}
-/*
- change select_result object of engine
+/**
+ change select_result object of engine.
- SYNOPSIS
- subselect_single_select_engine::change_result()
- si new subselect Item
- res new select_result object
+ @param si new subselect Item
+ @param res new select_result object
- RETURN
+ @retval
FALSE OK
+ @retval
TRUE error
*/
@@ -2434,16 +2459,15 @@ bool subselect_single_select_engine::change_result(Item_subselect *si,
}
-/*
- change select_result object of engine
+/**
+ change select_result object of engine.
- SYNOPSIS
- subselect_single_select_engine::change_result()
- si new subselect Item
- res new select_result object
+ @param si new subselect Item
+ @param res new select_result object
- RETURN
+ @retval
FALSE OK
+ @retval
TRUE error
*/
@@ -2457,16 +2481,15 @@ bool subselect_union_engine::change_result(Item_subselect *si,
}
-/*
- change select_result emulation, never should be called
+/**
+ change select_result emulation, never should be called.
- SYNOPSIS
- subselect_single_select_engine::change_result()
- si new subselect Item
- res new select_result object
+ @param si new subselect Item
+ @param res new select_result object
- RETURN
+ @retval
FALSE OK
+ @retval
TRUE error
*/
@@ -2478,14 +2501,12 @@ bool subselect_uniquesubquery_engine::change_result(Item_subselect *si,
}
-/*
- Report about presence of tables in subquery
-
- SYNOPSIS
- subselect_single_select_engine::no_tables()
+/**
+ Report about presence of tables in subquery.
- RETURN
+ @retval
TRUE there are not tables used in subquery
+ @retval
FALSE there are some tables in subquery
*/
bool subselect_single_select_engine::no_tables()
@@ -2510,14 +2531,12 @@ bool subselect_single_select_engine::may_be_null()
}
-/*
- Report about presence of tables in subquery
-
- SYNOPSIS
- subselect_union_engine::no_tables()
+/**
+ Report about presence of tables in subquery.
- RETURN
+ @retval
TRUE there are not tables used in subquery
+ @retval
FALSE there are some tables in subquery
*/
bool subselect_union_engine::no_tables()
@@ -2531,14 +2550,12 @@ bool subselect_union_engine::no_tables()
}
-/*
- Report about presence of tables in subquery
+/**
+ Report about presence of tables in subquery.
- SYNOPSIS
- subselect_uniquesubquery_engine::no_tables()
-
- RETURN
+ @retval
TRUE there are not tables used in subquery
+ @retval
FALSE there are some tables in subquery
*/
diff --git a/sql/item_subselect.h b/sql/item_subselect.h
index 51ab7b8ad42..de4b1cbdc06 100644
--- a/sql/item_subselect.h
+++ b/sql/item_subselect.h
@@ -307,6 +307,7 @@ public:
double val_real();
String *val_str(String*);
my_decimal *val_decimal(my_decimal *);
+ void update_null_value () { (void) val_bool(); }
bool val_bool();
void top_level_item() { abort_on_null=1; }
inline bool is_top_level_item() { return abort_on_null; }
diff --git a/sql/item_sum.cc b/sql/item_sum.cc
index 571e387cf7b..27b964a9e15 100644
--- a/sql/item_sum.cc
+++ b/sql/item_sum.cc
@@ -14,7 +14,12 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-/* Sum functions (COUNT, MIN...) */
+/**
+ @file
+
+ @brief
+ Sum functions (COUNT, MIN...)
+*/
#ifdef USE_PRAGMA_IMPLEMENTATION
#pragma implementation // gcc: Class implementation
@@ -23,28 +28,25 @@
#include "mysql_priv.h"
#include "sql_select.h"
-/*
- Prepare an aggregate function item for checking context conditions
-
- SYNOPSIS
- init_sum_func_check()
- thd reference to the thread context info
+/**
+ Prepare an aggregate function item for checking context conditions.
- DESCRIPTION
The function initializes the members of the Item_sum object created
for a set function that are used to check validity of the set function
occurrence.
If the set function is not allowed in any subquery where it occurs
an error is reported immediately.
- NOTES
+ @param thd reference to the thread context info
+
+ @note
This function is to be called for any item created for a set function
object when the traversal of trees built for expressions used in the query
is performed at the phase of context analysis. This function is to
be invoked at the descent of this traversal.
-
- RETURN
- TRUE if an error is reported
+ @retval
+ TRUE if an error is reported
+ @retval
FALSE otherwise
*/
@@ -69,15 +71,9 @@ bool Item_sum::init_sum_func_check(THD *thd)
return FALSE;
}
-/*
- Check constraints imposed on a usage of a set function
-
- SYNOPSIS
- check_sum_func()
- thd reference to the thread context info
- ref location of the pointer to this item in the embedding expression
+/**
+ Check constraints imposed on a usage of a set function.
- DESCRIPTION
The method verifies whether context conditions imposed on a usage
of any set function are met for this occurrence.
It checks whether the set function occurs in the position where it
@@ -89,13 +85,6 @@ bool Item_sum::init_sum_func_check(THD *thd)
adds it to the chain of items for such set functions that is attached
to the the st_select_lex structure for this subquery.
- NOTES
- This function is to be called for any item created for a set function
- object when the traversal of trees built for expressions used in the query
- is performed at the phase of context analysis. This function is to
- be invoked at the ascent of this traversal.
-
- IMPLEMENTATION
A number of designated members of the object are used to check the
conditions. They are specified in the comment before the Item_sum
class declaration.
@@ -106,16 +95,28 @@ bool Item_sum::init_sum_func_check(THD *thd)
of set functions are allowed (i.e either in the SELECT list or
in the HAVING clause of the corresponding subquery)
Consider the query:
- SELECT SUM(t1.b) FROM t1 GROUP BY t1.a
- HAVING t1.a IN (SELECT t2.c FROM t2 WHERE AVG(t1.b) > 20) AND
- t1.a > (SELECT MIN(t2.d) FROM t2);
+ @code
+ SELECT SUM(t1.b) FROM t1 GROUP BY t1.a
+ HAVING t1.a IN (SELECT t2.c FROM t2 WHERE AVG(t1.b) > 20) AND
+ t1.a > (SELECT MIN(t2.d) FROM t2);
+ @endcode
allow_sum_func will contain:
- for SUM(t1.b) - 1 at the first position
- for AVG(t1.b) - 1 at the first position, 0 at the second position
- for MIN(t2.d) - 1 at the first position, 1 at the second position.
+ - for SUM(t1.b) - 1 at the first position
+ - for AVG(t1.b) - 1 at the first position, 0 at the second position
+ - for MIN(t2.d) - 1 at the first position, 1 at the second position.
- RETURN
- TRUE if an error is reported
+ @param thd reference to the thread context info
+ @param ref location of the pointer to this item in the embedding expression
+
+ @note
+ This function is to be called for any item created for a set function
+ object when the traversal of trees built for expressions used in the query
+ is performed at the phase of context analysis. This function is to
+ be invoked at the ascent of this traversal.
+
+ @retval
+ TRUE if an error is reported
+ @retval
FALSE otherwise
*/
@@ -200,15 +201,9 @@ bool Item_sum::check_sum_func(THD *thd, Item **ref)
return FALSE;
}
-/*
- Attach a set function to the subquery where it must be aggregated
+/**
+ Attach a set function to the subquery where it must be aggregated.
- SYNOPSIS
- register_sum_func()
- thd reference to the thread context info
- ref location of the pointer to this item in the embedding expression
-
- DESCRIPTION
The function looks for an outer subquery where the set function must be
aggregated. If it finds such a subquery then aggr_level is set to
the nest level of this subquery and the item for the set function
@@ -216,14 +211,18 @@ bool Item_sum::check_sum_func(THD *thd, Item **ref)
inner_sum_func_list defined for each subquery. When the item is placed
there the field 'ref_by' is set to ref.
- NOTES.
+ @note
Now we 'register' only set functions that are aggregated in outer
subqueries. Actually it makes sense to link all set function for
a subquery in one chain. It would simplify the process of 'splitting'
for set functions.
- RETURN
+ @param thd reference to the thread context info
+ @param ref location of the pointer to this item in the embedding expression
+
+ @retval
FALSE if the executes without failures (currently always)
+ @retval
TRUE otherwise
*/
@@ -311,8 +310,8 @@ Item_sum::Item_sum(List<Item> &list) :arg_count(list.elements),
}
-/*
- Constructor used in processing select with temporary tebles
+/**
+ Constructor used in processing select with temporary tebles.
*/
Item_sum::Item_sum(THD *thd, Item_sum *item):
@@ -633,7 +632,7 @@ Field *Item_sum_hybrid::create_tmp_field(bool group, TABLE *table,
*/
switch (args[0]->field_type()) {
case MYSQL_TYPE_DATE:
- field= new Field_date(maybe_null, name, collation.collation);
+ field= new Field_newdate(maybe_null, name, collation.collation);
break;
case MYSQL_TYPE_TIME:
field= new Field_time(maybe_null, name, collation.collation);
@@ -655,6 +654,10 @@ Field *Item_sum_hybrid::create_tmp_field(bool group, TABLE *table,
** reset and add of sum_func
***********************************************************************/
+/**
+ @todo
+ check if the following assignments are really needed
+*/
Item_sum_sum::Item_sum_sum(THD *thd, Item_sum_sum *item)
:Item_sum_num(thd, item), hybrid_type(item->hybrid_type),
curr_dec_buff(item->curr_dec_buff)
@@ -833,7 +836,7 @@ Item_sum_distinct::Item_sum_distinct(THD *thd, Item_sum_distinct *original)
}
-/*
+/**
Behaves like an Integer except to fix_length_and_dec().
Additionally div() converts val with this traits to a val with true
decimal traits along with conversion of integer value to decimal value.
@@ -910,12 +913,18 @@ void Item_sum_distinct::fix_length_and_dec()
}
+/**
+ @todo
+ check that the case of CHAR(0) works OK
+*/
bool Item_sum_distinct::setup(THD *thd)
{
List<Create_field> field_list;
Create_field field_def; /* field definition */
DBUG_ENTER("Item_sum_distinct::setup");
- DBUG_ASSERT(tree == 0);
+ /* It's legal to call setup() more than once when in a subquery */
+ if (tree)
+ DBUG_RETURN(FALSE);
/*
Virtual table and the tree are created anew on each re-execution of
@@ -923,7 +932,7 @@ bool Item_sum_distinct::setup(THD *thd)
mem_root.
*/
if (field_list.push_back(&field_def))
- return TRUE;
+ DBUG_RETURN(TRUE);
null_value= maybe_null= 1;
quick_group= 0;
@@ -935,7 +944,7 @@ bool Item_sum_distinct::setup(THD *thd)
args[0]->unsigned_flag);
if (! (table= create_virtual_tmp_table(thd, field_list)))
- return TRUE;
+ DBUG_RETURN(TRUE);
/* XXX: check that the case of CHAR(0) works OK */
tree_key_length= table->s->reclength - table->s->null_bytes;
@@ -2002,8 +2011,8 @@ void Item_sum_bit::update_field()
}
-/*
-** calc next value and merge it with field_value
+/**
+ calc next value and merge it with field_value.
*/
void Item_sum_sum::update_field()
@@ -2179,6 +2188,10 @@ Item_sum_hybrid::min_max_update_int_field()
}
+/**
+ @todo
+ optimize: do not get result_field in case of args[0] is NULL
+*/
void
Item_sum_hybrid::min_max_update_decimal_field()
{
@@ -2367,7 +2380,7 @@ int simple_str_key_cmp(void* arg, uchar* key1, uchar* key2)
return f->cmp(key1, key2);
}
-/*
+/**
Did not make this one static - at least gcc gets confused when
I try to declare a static function as a friend. If you can figure
out the syntax to make a static function a friend, make this one
@@ -2434,7 +2447,10 @@ void Item_sum_count_distinct::cleanup()
}
-/* This is used by rollup to create a separate usable copy of the function */
+/**
+ This is used by rollup to create a separate usable copy of
+ the function.
+*/
void Item_sum_count_distinct::make_unique()
{
@@ -2462,6 +2478,7 @@ bool Item_sum_count_distinct::setup(THD *thd)
/*
Setup can be called twice for ROLLUP items. This is a bug.
Please add DBUG_ASSERT(tree == 0) here when it's fixed.
+ It's legal to call setup() more than once when in a subquery
*/
if (tree || table || tmp_table_param)
return FALSE;
@@ -2600,7 +2617,7 @@ void Item_sum_count_distinct::clear()
else if (table)
{
table->file->extra(HA_EXTRA_NO_CACHE);
- table->file->delete_all_rows();
+ table->file->ha_delete_all_rows();
table->file->extra(HA_EXTRA_WRITE_CACHE);
}
}
@@ -2801,7 +2818,7 @@ my_decimal *Item_sum_udf_int::val_decimal(my_decimal *dec)
}
-/* Default max_length is max argument length */
+/** Default max_length is max argument length. */
void Item_sum_udf_str::fix_length_and_dec()
{
@@ -2846,56 +2863,62 @@ String *Item_sum_udf_str::val_str(String *str)
concat of values from "group by" operation
BUGS
- DISTINCT and ORDER BY only works if ORDER BY uses all fields and only fields
- in expression list
Blobs doesn't work with DISTINCT or ORDER BY
*****************************************************************************/
-/*
- function of sort for syntax:
- GROUP_CONCAT(DISTINCT expr,...)
+
+
+/**
+ Compares the values for fields in expr list of GROUP_CONCAT.
+ @note
+
+ GROUP_CONCAT([DISTINCT] expr [,expr ...]
+ [ORDER BY {unsigned_integer | col_name | expr}
+ [ASC | DESC] [,col_name ...]]
+ [SEPARATOR str_val])
+
+ @return
+ @retval -1 : key1 < key2
+ @retval 0 : key1 = key2
+ @retval 1 : key1 > key2
*/
-int group_concat_key_cmp_with_distinct(void* arg, uchar* key1,
- uchar* key2)
+int group_concat_key_cmp_with_distinct(void* arg, const void* key1,
+ const void* key2)
{
- Item_func_group_concat* grp_item= (Item_func_group_concat*)arg;
- TABLE *table= grp_item->table;
- Item **field_item, **end;
+ Item_func_group_concat *item_func= (Item_func_group_concat*)arg;
+ TABLE *table= item_func->table;
- for (field_item= grp_item->args, end= field_item + grp_item->arg_count_field;
- field_item < end;
- field_item++)
+ for (uint i= 0; i < item_func->arg_count_field; i++)
{
+ Item *item= item_func->args[i];
+ /*
+ If field_item is a const item then either get_tp_table_field returns 0
+ or it is an item over a const table.
+ */
+ if (item->const_item())
+ continue;
/*
We have to use get_tmp_table_field() instead of
real_item()->get_tmp_table_field() because we want the field in
the temporary table, not the original field
*/
- Field *field= (*field_item)->get_tmp_table_field();
- /*
- If field_item is a const item then either get_tmp_table_field returns 0
- or it is an item over a const table.
- */
- if (field && !(*field_item)->const_item())
- {
- int res;
- uint offset= (field->offset(field->table->record[0]) -
- table->s->null_bytes);
- if ((res= field->cmp(key1 + offset, key2 + offset)))
- return res;
- }
+ Field *field= item->get_tmp_table_field();
+ int res;
+ uint offset= field->offset(field->table->record[0])-table->s->null_bytes;
+ if((res= field->cmp((uchar*)key1 + offset, (uchar*)key2 + offset)))
+ return res;
}
return 0;
}
-/*
- function of sort for syntax:
- GROUP_CONCAT(expr,... ORDER BY col,... )
+/**
+ function of sort for syntax: GROUP_CONCAT(expr,... ORDER BY col,... )
*/
-int group_concat_key_cmp_with_order(void* arg, uchar* key1, uchar* key2)
+int group_concat_key_cmp_with_order(void* arg, const void* key1,
+ const void* key2)
{
Item_func_group_concat* grp_item= (Item_func_group_concat*) arg;
ORDER **order_item, **end;
@@ -2921,7 +2944,7 @@ int group_concat_key_cmp_with_order(void* arg, uchar* key1, uchar* key2)
int res;
uint offset= (field->offset(field->table->record[0]) -
table->s->null_bytes);
- if ((res= field->cmp(key1 + offset, key2 + offset)))
+ if ((res= field->cmp((uchar*)key1 + offset, (uchar*)key2 + offset)))
return (*order_item)->asc ? res : -res;
}
}
@@ -2934,27 +2957,8 @@ int group_concat_key_cmp_with_order(void* arg, uchar* key1, uchar* key2)
}
-/*
- function of sort for syntax:
- GROUP_CONCAT(DISTINCT expr,... ORDER BY col,... )
-
- BUG:
- This doesn't work in the case when the order by contains data that
- is not part of the field list because tree-insert will not notice
- the duplicated values when inserting things sorted by ORDER BY
-*/
-
-int group_concat_key_cmp_with_distinct_and_order(void* arg,uchar* key1,
- uchar* key2)
-{
- if (!group_concat_key_cmp_with_distinct(arg,key1,key2))
- return 0;
- return(group_concat_key_cmp_with_order(arg,key1,key2));
-}
-
-
-/*
- Append data from current leaf to item->result
+/**
+ Append data from current leaf to item->result.
*/
int dump_leaf_key(uchar* key, element_count count __attribute__((unused)),
@@ -3025,12 +3029,13 @@ int dump_leaf_key(uchar* key, element_count count __attribute__((unused)),
}
-/*
- Constructor of Item_func_group_concat
- distinct_arg - distinct
- select_list - list of expression for show values
- order_list - list of sort columns
- separator_arg - string value of separator
+/**
+ Constructor of Item_func_group_concat.
+
+ @param distinct_arg distinct
+ @param select_list list of expression for show values
+ @param order_list list of sort columns
+ @param separator_arg string value of separator.
*/
Item_func_group_concat::
@@ -3038,7 +3043,7 @@ Item_func_group_concat(Name_resolution_context *context_arg,
bool distinct_arg, List<Item> *select_list,
SQL_LIST *order_list, String *separator_arg)
:tmp_table_param(0), warning(0),
- separator(separator_arg), tree(0), table(0),
+ separator(separator_arg), tree(0), unique_filter(NULL), table(0),
order(0), context(context_arg),
arg_count_order(order_list ? order_list->elements : 0),
arg_count_field(select_list->elements),
@@ -3093,6 +3098,7 @@ Item_func_group_concat::Item_func_group_concat(THD *thd,
warning(item->warning),
separator(item->separator),
tree(item->tree),
+ unique_filter(item->unique_filter),
table(item->table),
order(item->order),
context(item->context),
@@ -3143,6 +3149,11 @@ void Item_func_group_concat::cleanup()
delete_tree(tree);
tree= 0;
}
+ if (unique_filter)
+ {
+ delete unique_filter;
+ unique_filter= NULL;
+ }
if (warning)
{
char warn_buff[MYSQL_ERRMSG_SIZE];
@@ -3172,6 +3183,8 @@ void Item_func_group_concat::clear()
no_appended= TRUE;
if (tree)
reset_tree(tree);
+ if (distinct)
+ unique_filter->reset();
/* No need to reset the table as we never call write_row */
}
@@ -3195,9 +3208,19 @@ bool Item_func_group_concat::add()
}
null_value= FALSE;
+ bool row_eligible= TRUE;
+
+ if (distinct)
+ {
+ /* Filter out duplicate rows. */
+ uint count= unique_filter->elements_in_tree();
+ unique_filter->unique_add(table->record[0] + table->s->null_bytes);
+ if (count == unique_filter->elements_in_tree())
+ row_eligible= FALSE;
+ }
TREE_ELEMENT *el= 0; // Only for safety
- if (tree)
+ if (row_eligible && tree)
el= tree_insert(tree, table->record[0] + table->s->null_bytes, 0,
tree->custom_arg);
/*
@@ -3205,7 +3228,7 @@ bool Item_func_group_concat::add()
we can dump the row here in case of GROUP_CONCAT(DISTINCT...)
instead of doing tree traverse later.
*/
- if (!warning_for_row &&
+ if (row_eligible && !warning_for_row &&
(!tree || (el->count == 1 && distinct && !arg_count_order)))
dump_leaf_key(table->record[0] + table->s->null_bytes, 1, this);
@@ -3281,7 +3304,6 @@ bool Item_func_group_concat::setup(THD *thd)
{
List<Item> list;
SELECT_LEX *select_lex= thd->lex->current_select;
- qsort_cmp2 compare_key;
DBUG_ENTER("Item_func_group_concat::setup");
/*
@@ -3371,38 +3393,33 @@ bool Item_func_group_concat::setup(THD *thd)
table->file->extra(HA_EXTRA_NO_ROWS);
table->no_rows= 1;
+ /*
+ Need sorting or uniqueness: init tree and choose a function to sort.
+ Don't reserve space for NULLs: if any of gconcat arguments is NULL,
+ the row is not added to the result.
+ */
+ uint tree_key_length= table->s->reclength - table->s->null_bytes;
- if (distinct || arg_count_order)
+ if (arg_count_order)
{
- /*
- Need sorting: init tree and choose a function to sort.
- Don't reserve space for NULLs: if any of gconcat arguments is NULL,
- the row is not added to the result.
- */
- uint tree_key_length= table->s->reclength - table->s->null_bytes;
-
tree= &tree_base;
- if (arg_count_order)
- {
- if (distinct)
- compare_key= (qsort_cmp2) group_concat_key_cmp_with_distinct_and_order;
- else
- compare_key= (qsort_cmp2) group_concat_key_cmp_with_order;
- }
- else
- {
- compare_key= (qsort_cmp2) group_concat_key_cmp_with_distinct;
- }
/*
- Create a tree for sorting. The tree is used to sort and to remove
- duplicate values (according to the syntax of this function). If there
- is no DISTINCT or ORDER BY clauses, we don't create this tree.
+ Create a tree for sorting. The tree is used to sort (according to the
+ syntax of this function). If there is no ORDER BY clause, we don't
+ create this tree.
*/
init_tree(tree, (uint) min(thd->variables.max_heap_table_size,
thd->variables.sortbuff_size/16), 0,
- tree_key_length, compare_key, 0, NULL, (void*) this);
+ tree_key_length,
+ group_concat_key_cmp_with_order , 0, NULL, (void*) this);
}
+ if (distinct)
+ unique_filter= new Unique(group_concat_key_cmp_with_distinct,
+ (void*)this,
+ tree_key_length,
+ thd->variables.max_heap_table_size);
+
DBUG_RETURN(FALSE);
}
@@ -3424,7 +3441,7 @@ String* Item_func_group_concat::val_str(String* str)
DBUG_ASSERT(fixed == 1);
if (null_value)
return 0;
- if (!result.length() && tree)
+ if (no_appended && tree)
/* Tree is used for sorting as in ORDER BY */
tree_walk(tree, (tree_walk_action)&dump_leaf_key, (void*)this,
left_root_right);
@@ -3472,3 +3489,10 @@ void Item_func_group_concat::print(String *str)
str->append(*separator);
str->append(STRING_WITH_LEN("\')"));
}
+
+
+Item_func_group_concat::~Item_func_group_concat()
+{
+ if (unique_filter)
+ delete unique_filter;
+}
diff --git a/sql/item_sum.h b/sql/item_sum.h
index b3a382012f1..a3582967736 100644
--- a/sql/item_sum.h
+++ b/sql/item_sum.h
@@ -1173,11 +1173,22 @@ class Item_func_group_concat : public Item_sum
String *separator;
TREE tree_base;
TREE *tree;
+
+ /**
+ If DISTINCT is used with this GROUP_CONCAT, this member is used to filter
+ out duplicates.
+ @see Item_func_group_concat::setup
+ @see Item_func_group_concat::add
+ @see Item_func_group_concat::clear
+ */
+ Unique *unique_filter;
TABLE *table;
ORDER **order;
Name_resolution_context *context;
- uint arg_count_order; // total count of ORDER BY items
- uint arg_count_field; // count of arguments
+ /** The number of ORDER BY items. */
+ uint arg_count_order;
+ /** The number of selected items, aka the expr list. */
+ uint arg_count_field;
uint count_cut_values;
bool distinct;
bool warning_for_row;
@@ -1190,13 +1201,10 @@ class Item_func_group_concat : public Item_sum
*/
Item_func_group_concat *original;
- friend int group_concat_key_cmp_with_distinct(void* arg, uchar* key1,
- uchar* key2);
- friend int group_concat_key_cmp_with_order(void* arg, uchar* key1,
- uchar* key2);
- friend int group_concat_key_cmp_with_distinct_and_order(void* arg,
- uchar* key1,
- uchar* key2);
+ friend int group_concat_key_cmp_with_distinct(void* arg, const void* key1,
+ const void* key2);
+ friend int group_concat_key_cmp_with_order(void* arg, const void* key1,
+ const void* key2);
friend int dump_leaf_key(uchar* key,
element_count count __attribute__((unused)),
Item_func_group_concat *group_concat_item);
@@ -1207,7 +1215,7 @@ public:
SQL_LIST *is_order, String *is_separator);
Item_func_group_concat(THD *thd, Item_func_group_concat *item);
- ~Item_func_group_concat() {}
+ ~Item_func_group_concat();
void cleanup();
enum Sumfunctype sum_func () const {return GROUP_CONCAT_FUNC;}
diff --git a/sql/item_timefunc.cc b/sql/item_timefunc.cc
index 300d0788f55..a0beadcd481 100644
--- a/sql/item_timefunc.cc
+++ b/sql/item_timefunc.cc
@@ -14,7 +14,15 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-/* This file defines all time functions */
+/**
+ @file
+
+ @brief
+ This file defines all time functions
+
+ @todo
+ Move month and days to language files
+*/
#ifdef USE_PRAGMA_IMPLEMENTATION
#pragma implementation // gcc: Class implementation
@@ -24,17 +32,16 @@
#include <m_ctype.h>
#include <time.h>
-/* TODO: Move month and days to language files */
-
-/* Day number for Dec 31st, 9999 */
+/** Day number for Dec 31st, 9999. */
#define MAX_DAY_NUMBER 3652424L
-/*
- OPTIMIZATION TODO:
- - Replace the switch with a function that should be called for each
- date type.
- - Remove sprintf and opencode the conversion, like we do in
- Field_datetime.
+/**
+ @todo
+ OPTIMIZATION
+ - Replace the switch with a function that should be called for each
+ date type.
+ - Remove sprintf and opencode the conversion, like we do in
+ Field_datetime.
The reason for this functions existence is that as we don't have a
way to know if a datetime/time value has microseconds in them
@@ -226,37 +233,37 @@ static DATE_TIME_FORMAT time_ampm_format= {{0}, '\0', 0,
static DATE_TIME_FORMAT time_24hrs_format= {{0}, '\0', 0,
{(char *)"%H:%i:%S", 8}};
-/*
+/**
Extract datetime value to MYSQL_TIME struct from string value
- according to format string.
+ according to format string.
- SYNOPSIS
- extract_date_time()
- format date/time format specification
- val String to decode
- length Length of string
- l_time Store result here
- cached_timestamp_type
- It uses to get an appropriate warning
- in the case when the value is truncated.
- sub_pattern_end if non-zero then we are parsing string which
- should correspond compound specifier (like %T or
- %r) and this parameter is pointer to place where
- pointer to end of string matching this specifier
- should be stored.
- NOTE
- Possibility to parse strings matching to patterns equivalent to compound
- specifiers is mainly intended for use from inside of this function in
- order to understand %T and %r conversion specifiers, so number of
- conversion specifiers that can be used in such sub-patterns is limited.
- Also most of checks are skipped in this case.
-
- If one adds new format specifiers to this function he should also
- consider adding them to get_date_time_result_type() function.
-
- RETURN
- 0 ok
- 1 error
+ @param format date/time format specification
+ @param val String to decode
+ @param length Length of string
+ @param l_time Store result here
+ @param cached_timestamp_type It uses to get an appropriate warning
+ in the case when the value is truncated.
+ @param sub_pattern_end if non-zero then we are parsing string which
+ should correspond compound specifier (like %T or
+ %r) and this parameter is pointer to place where
+ pointer to end of string matching this specifier
+ should be stored.
+
+ @note
+ Possibility to parse strings matching to patterns equivalent to compound
+ specifiers is mainly intended for use from inside of this function in
+ order to understand %T and %r conversion specifiers, so number of
+ conversion specifiers that can be used in such sub-patterns is limited.
+ Also most of checks are skipped in this case.
+
+ @note
+ If one adds new format specifiers to this function he should also
+ consider adding them to get_date_time_result_type() function.
+
+ @retval
+ 0 ok
+ @retval
+ 1 error
*/
static bool extract_date_time(DATE_TIME_FORMAT *format,
@@ -603,8 +610,8 @@ err:
}
-/*
- Create a formated date/time value in a string
+/**
+ Create a formated date/time value in a string.
*/
bool make_date_time(DATE_TIME_FORMAT *format, MYSQL_TIME *l_time,
@@ -838,7 +845,8 @@ bool make_date_time(DATE_TIME_FORMAT *format, MYSQL_TIME *l_time,
}
-/*
+/**
+ @details
Get a array of positive numbers from a string object.
Each number is separated by 1 non digit character
Return error if there is too many numbers.
@@ -846,16 +854,14 @@ bool make_date_time(DATE_TIME_FORMAT *format, MYSQL_TIME *l_time,
from the high end. This allows one to give:
DAY_TO_SECOND as "D MM:HH:SS", "MM:HH:SS" "HH:SS" or as seconds.
- SYNOPSIS
- str: string value
- length: length of str
- cs: charset of str
- values: array of results
- count: count of elements in result array
- transform_msec: if value is true we suppose
- that the last part of string value is microseconds
- and we should transform value to six digit value.
- For example, '1.1' -> '1.100000'
+ @param length: length of str
+ @param cs: charset of str
+ @param values: array of results
+ @param count: count of elements in result array
+ @param transform_msec: if value is true we suppose
+ that the last part of string value is microseconds
+ and we should transform value to six digit value.
+ For example, '1.1' -> '1.100000'
*/
static bool get_interval_info(const char *str,uint length,CHARSET_INFO *cs,
@@ -1046,7 +1052,9 @@ String* Item_func_monthname::val_str(String* str)
}
-// Returns the quarter of the year
+/**
+ Returns the quarter of the year.
+*/
longlong Item_func_quarter::val_int()
{
@@ -1072,8 +1080,10 @@ longlong Item_func_minute::val_int()
(void) get_arg0_time(&ltime);
return ltime.minute;
}
-// Returns the second in time_exp in the range of 0 - 59
+/**
+ Returns the second in time_exp in the range of 0 - 59.
+*/
longlong Item_func_second::val_int()
{
DBUG_ASSERT(fixed == 1);
@@ -1091,7 +1101,8 @@ uint week_mode(uint mode)
return week_format;
}
-/*
+/**
+ @verbatim
The bits in week_format(for calc_week() function) has the following meaning:
WEEK_MONDAY_FIRST (0) If not set Sunday is first day of week
If set Monday is first day of week
@@ -1118,6 +1129,7 @@ uint week_mode(uint mode)
four or more days in the new year, then it is week 1;
Otherwise it is the last week of the previous year, and the
next week is week 1.
+ @endverbatim
*/
longlong Item_func_week::val_int()
@@ -1281,8 +1293,9 @@ longlong Item_func_time_to_sec::val_int()
}
-/*
- Convert a string to a interval value
+/**
+ Convert a string to a interval value.
+
To make code easy, allow interval objects without separators.
*/
@@ -1506,7 +1519,7 @@ String *Item_func_curdate::val_str(String *str)
return str;
}
-/*
+/**
Converts current time in my_time_t to MYSQL_TIME represenatation for local
time zone. Defines time zone (local) used for whole CURDATE function.
*/
@@ -1519,7 +1532,7 @@ void Item_func_curdate_local::store_now_in_TIME(MYSQL_TIME *now_time)
}
-/*
+/**
Converts current time in my_time_t to MYSQL_TIME represenatation for UTC
time zone. Defines time zone (UTC) used for whole UTC_DATE function.
*/
@@ -1563,7 +1576,7 @@ void Item_func_curtime::fix_length_and_dec()
}
-/*
+/**
Converts current time in my_time_t to MYSQL_TIME represenatation for local
time zone. Defines time zone (local) used for whole CURTIME function.
*/
@@ -1576,7 +1589,7 @@ void Item_func_curtime_local::store_now_in_TIME(MYSQL_TIME *now_time)
}
-/*
+/**
Converts current time in my_time_t to MYSQL_TIME represenatation for UTC
time zone. Defines time zone (UTC) used for whole UTC_TIME function.
*/
@@ -1612,7 +1625,7 @@ void Item_func_now::fix_length_and_dec()
}
-/*
+/**
Converts current time in my_time_t to MYSQL_TIME represenatation for local
time zone. Defines time zone (local) used for whole NOW function.
*/
@@ -1625,7 +1638,7 @@ void Item_func_now_local::store_now_in_TIME(MYSQL_TIME *now_time)
}
-/*
+/**
Converts current time in my_time_t to MYSQL_TIME represenatation for UTC
time zone. Defines time zone (UTC) used for whole UTC_TIMESTAMP function.
*/
@@ -1651,12 +1664,11 @@ bool Item_func_now::get_date(MYSQL_TIME *res,
int Item_func_now::save_in_field(Field *to, bool no_conversions)
{
to->set_notnull();
- to->store_time(&ltime, MYSQL_TIMESTAMP_DATETIME);
- return 0;
+ return to->store_time(&ltime, MYSQL_TIMESTAMP_DATETIME);
}
-/*
+/**
Converts current time in my_time_t to MYSQL_TIME represenatation for local
time zone. Defines time zone (local) used for whole SYSDATE function.
*/
@@ -2587,6 +2599,13 @@ bool Item_date_typecast::get_date(MYSQL_TIME *ltime, uint fuzzy_date)
}
+bool Item_date_typecast::get_time(MYSQL_TIME *ltime)
+{
+ bzero((char *)ltime, sizeof(MYSQL_TIME));
+ return args[0]->null_value;
+}
+
+
String *Item_date_typecast::val_str(String *str)
{
DBUG_ASSERT(fixed == 1);
@@ -2612,7 +2631,7 @@ longlong Item_date_typecast::val_int()
return (longlong) (ltime.year * 10000L + ltime.month * 100 + ltime.day);
}
-/*
+/**
MAKEDATE(a,b) is a date function that creates a date value
from a year and day value.
@@ -2722,7 +2741,7 @@ void Item_func_add_time::fix_length_and_dec()
cached_field_type= MYSQL_TYPE_TIME;
}
-/*
+/**
ADDTIME(t,a) and SUBTIME(t,a) are time functions that calculate a
time/datetime value
@@ -2824,7 +2843,7 @@ void Item_func_add_time::print(String *str)
}
-/*
+/**
TIMEDIFF(t,s) is a time function that calculates the
time value between a start and end time.
@@ -2874,7 +2893,7 @@ null_date:
return 0;
}
-/*
+/**
MAKETIME(h,m,s) is a time function that calculates a time value
from the total number of hours, minutes, and seconds.
Result: Time value
@@ -2941,7 +2960,7 @@ String *Item_func_maketime::val_str(String *str)
}
-/*
+/**
MICROSECOND(a) is a function ( extraction) that extracts the microseconds
from a.
@@ -3167,25 +3186,28 @@ void Item_func_get_format::print(String *str)
}
-/*
+/**
Get type of datetime value (DATE/TIME/...) which will be produced
according to format string.
- SYNOPSIS
- get_date_time_result_type()
- format - format string
- length - length of format string
+ @param format format string
+ @param length length of format string
- NOTE
+ @note
We don't process day format's characters('D', 'd', 'e') because day
may be a member of all date/time types.
+ @note
Format specifiers supported by this function should be in sync with
specifiers supported by extract_date_time() function.
- RETURN VALUE
+ @return
One of date_time_format_types values:
- DATE_TIME_MICROSECOND, DATE_TIME, DATE_ONLY, TIME_MICROSECOND, TIME_ONLY
+ - DATE_TIME_MICROSECOND
+ - DATE_TIME
+ - DATE_ONLY
+ - TIME_MICROSECOND
+ - TIME_ONLY
*/
static date_time_format_types
@@ -3235,38 +3257,42 @@ get_date_time_result_type(const char *format, uint length)
void Item_func_str_to_date::fix_length_and_dec()
{
- char format_buff[64];
- String format_str(format_buff, sizeof(format_buff), &my_charset_bin), *format;
maybe_null= 1;
decimals=0;
- cached_field_type= MYSQL_TYPE_STRING;
+ cached_field_type= MYSQL_TYPE_DATETIME;
max_length= MAX_DATETIME_FULL_WIDTH*MY_CHARSET_BIN_MB_MAXLEN;
cached_timestamp_type= MYSQL_TIMESTAMP_NONE;
- format= args[1]->val_str(&format_str);
- if (!args[1]->null_value && (const_item= args[1]->const_item()))
+ if ((const_item= args[1]->const_item()))
{
- cached_format_type= get_date_time_result_type(format->ptr(),
- format->length());
- switch (cached_format_type) {
- case DATE_ONLY:
- cached_timestamp_type= MYSQL_TIMESTAMP_DATE;
- cached_field_type= MYSQL_TYPE_DATE;
- max_length= MAX_DATE_WIDTH*MY_CHARSET_BIN_MB_MAXLEN;
- break;
- case TIME_ONLY:
- case TIME_MICROSECOND:
- cached_timestamp_type= MYSQL_TIMESTAMP_TIME;
- cached_field_type= MYSQL_TYPE_TIME;
- max_length= MAX_TIME_WIDTH*MY_CHARSET_BIN_MB_MAXLEN;
- break;
- default:
- cached_timestamp_type= MYSQL_TIMESTAMP_DATETIME;
- cached_field_type= MYSQL_TYPE_DATETIME;
- break;
+ char format_buff[64];
+ String format_str(format_buff, sizeof(format_buff), &my_charset_bin);
+ String *format= args[1]->val_str(&format_str);
+ if (!args[1]->null_value)
+ {
+ cached_format_type= get_date_time_result_type(format->ptr(),
+ format->length());
+ switch (cached_format_type) {
+ case DATE_ONLY:
+ cached_timestamp_type= MYSQL_TIMESTAMP_DATE;
+ cached_field_type= MYSQL_TYPE_DATE;
+ max_length= MAX_DATE_WIDTH * MY_CHARSET_BIN_MB_MAXLEN;
+ break;
+ case TIME_ONLY:
+ case TIME_MICROSECOND:
+ cached_timestamp_type= MYSQL_TIMESTAMP_TIME;
+ cached_field_type= MYSQL_TYPE_TIME;
+ max_length= MAX_TIME_WIDTH * MY_CHARSET_BIN_MB_MAXLEN;
+ break;
+ default:
+ cached_timestamp_type= MYSQL_TIMESTAMP_DATETIME;
+ cached_field_type= MYSQL_TYPE_DATETIME;
+ break;
+ }
}
}
}
+
bool Item_func_str_to_date::get_date(MYSQL_TIME *ltime, uint fuzzy_date)
{
DATE_TIME_FORMAT date_time_format;
@@ -3334,6 +3360,8 @@ bool Item_func_last_day::get_date(MYSQL_TIME *ltime, uint fuzzy_date)
ltime->day= days_in_month[month_idx];
if ( month_idx == 1 && calc_days_in_year(ltime->year) == 366)
ltime->day= 29;
+ ltime->hour= ltime->minute= ltime->second= 0;
+ ltime->second_part= 0;
ltime->time_type= MYSQL_TIMESTAMP_DATE;
return 0;
}
diff --git a/sql/item_timefunc.h b/sql/item_timefunc.h
index 5503a172825..9be7e97db49 100644
--- a/sql/item_timefunc.h
+++ b/sql/item_timefunc.h
@@ -778,6 +778,7 @@ public:
const char *func_name() const { return "cast_as_date"; }
String *val_str(String *str);
bool get_date(MYSQL_TIME *ltime, uint fuzzy_date);
+ bool get_time(MYSQL_TIME *ltime);
const char *cast_type() const { return "date"; }
enum_field_types field_type() const { return MYSQL_TYPE_DATE; }
Field *tmp_table_field(TABLE *table)
@@ -940,7 +941,10 @@ class Item_func_maketime :public Item_str_timefunc
{
public:
Item_func_maketime(Item *a, Item *b, Item *c)
- :Item_str_timefunc(a, b ,c) {}
+ :Item_str_timefunc(a, b, c)
+ {
+ maybe_null= TRUE;
+ }
String *val_str(String *str);
const char *func_name() const { return "maketime"; }
};
@@ -1009,7 +1013,7 @@ class Item_func_str_to_date :public Item_str_func
bool const_item;
public:
Item_func_str_to_date(Item *a, Item *b)
- :Item_str_func(a, b)
+ :Item_str_func(a, b), const_item(false)
{}
String *val_str(String *str);
bool get_date(MYSQL_TIME *ltime, uint fuzzy_date);
diff --git a/sql/item_xmlfunc.cc b/sql/item_xmlfunc.cc
index 1a6c15a4d2e..68d85418324 100644
--- a/sql/item_xmlfunc.cc
+++ b/sql/item_xmlfunc.cc
@@ -2612,35 +2612,27 @@ typedef struct
uint level;
String *pxml; // parsed XML
uint pos[MAX_LEVEL]; // Tag position stack
+ uint parent; // Offset of the parent of the current node
} MY_XML_USER_DATA;
-/*
- Find the parent node
-
- SYNOPSYS
- Find the parent node, i.e. a tag or attrubute node on the given level.
-
- RETURN
- 1 - success
- 0 - failure
-*/
-static uint xml_parent_tag(MY_XML_NODE *items, uint nitems, uint level)
+static bool
+append_node(String *str, MY_XML_NODE *node)
{
- if (!nitems)
- return 0;
-
- MY_XML_NODE *p, *last= &items[nitems-1];
- for (p= last; p >= items; p--)
- {
- if (p->level == level &&
- (p->type == MY_XML_NODE_TAG ||
- p->type == MY_XML_NODE_ATTR))
- {
- return p - items;
- }
- }
- return 0;
+ /*
+ If "str" doesn't have space for a new node,
+ it will allocate two times more space that it has had so far.
+ (2*len+512) is a heuristic value,
+ which gave the best performance during tests.
+ The ideas behind this formula are:
+ - It allows to have a very small number of reallocs:
+ about 10 reallocs on a 1Mb-long XML value.
+ - At the same time, it avoids excessive memory use.
+ */
+ if (str->reserve(sizeof(MY_XML_NODE), 2 * str->length() + 512))
+ return TRUE;
+ str->q_append((const char*) node, sizeof(MY_XML_NODE));
+ return FALSE;
}
@@ -2662,19 +2654,17 @@ extern "C" int xml_enter(MY_XML_PARSER *st,const char *attr, size_t len);
int xml_enter(MY_XML_PARSER *st,const char *attr, size_t len)
{
MY_XML_USER_DATA *data= (MY_XML_USER_DATA*)st->user_data;
- MY_XML_NODE *nodes= (MY_XML_NODE*) data->pxml->ptr();
uint numnodes= data->pxml->length() / sizeof(MY_XML_NODE);
- uint parent= xml_parent_tag(nodes, numnodes, data->level - 1);
MY_XML_NODE node;
+ node.parent= data->parent; // Set parent for the new node to old parent
+ data->parent= numnodes; // Remember current node as new parent
data->pos[data->level]= numnodes;
node.level= data->level++;
node.type= st->current_node_type; // TAG or ATTR
node.beg= attr;
node.end= attr + len;
- node.parent= parent;
- data->pxml->append((const char*) &node, sizeof(MY_XML_NODE));
- return MY_XML_OK;
+ return append_node(data->pxml, &node) ? MY_XML_ERROR : MY_XML_OK;
}
@@ -2695,18 +2685,14 @@ extern "C" int xml_value(MY_XML_PARSER *st,const char *attr, size_t len);
int xml_value(MY_XML_PARSER *st,const char *attr, size_t len)
{
MY_XML_USER_DATA *data= (MY_XML_USER_DATA*)st->user_data;
- MY_XML_NODE *nodes= (MY_XML_NODE*) data->pxml->ptr();
- uint numnodes= data->pxml->length() / sizeof(MY_XML_NODE);
- uint parent= xml_parent_tag(nodes, numnodes, data->level - 1);
MY_XML_NODE node;
+ node.parent= data->parent; // Set parent for the new text node to old parent
node.level= data->level;
node.type= MY_XML_NODE_TEXT;
node.beg= attr;
node.end= attr + len;
- node.parent= parent;
- data->pxml->append((const char*) &node, sizeof(MY_XML_NODE));
- return MY_XML_OK;
+ return append_node(data->pxml, &node) ? MY_XML_ERROR : MY_XML_OK;
}
@@ -2731,6 +2717,7 @@ int xml_leave(MY_XML_PARSER *st,const char *attr, size_t len)
data->level--;
MY_XML_NODE *nodes= (MY_XML_NODE*) data->pxml->ptr();
+ data->parent= nodes[data->parent].parent;
nodes+= data->pos[data->level];
nodes->tagend= st->cur;
@@ -2761,6 +2748,7 @@ String *Item_xml_str_func::parse_xml(String *raw_xml, String *parsed_xml_buf)
p.flags= MY_XML_FLAG_RELATIVE_NAMES | MY_XML_FLAG_SKIP_TEXT_NORMALIZATION;
user_data.level= 0;
user_data.pxml= parsed_xml_buf;
+ user_data.parent= 0;
my_xml_set_enter_handler(&p, xml_enter);
my_xml_set_value_handler(&p, xml_value);
my_xml_set_leave_handler(&p, xml_leave);
diff --git a/sql/item_xmlfunc.h b/sql/item_xmlfunc.h
index 278c98baf7c..dadbb5ccf42 100644
--- a/sql/item_xmlfunc.h
+++ b/sql/item_xmlfunc.h
@@ -28,8 +28,16 @@ protected:
String tmp_value, pxml;
Item *nodeset_func;
public:
- Item_xml_str_func(Item *a, Item *b): Item_str_func(a,b) {}
- Item_xml_str_func(Item *a, Item *b, Item *c): Item_str_func(a,b,c) {}
+ Item_xml_str_func(Item *a, Item *b):
+ Item_str_func(a,b)
+ {
+ maybe_null= TRUE;
+ }
+ Item_xml_str_func(Item *a, Item *b, Item *c):
+ Item_str_func(a,b,c)
+ {
+ maybe_null= TRUE;
+ }
void fix_length_and_dec();
String *parse_xml(String *raw_xml, String *parsed_xml_buf);
};
diff --git a/sql/key.cc b/sql/key.cc
index e8354ed2635..7f075674ab6 100644
--- a/sql/key.cc
+++ b/sql/key.cc
@@ -90,25 +90,19 @@ int find_ref_key(KEY *key, uint key_count, uchar *record, Field *field,
}
-/*
+/**
Copy part of a record that forms a key or key prefix to a buffer.
- SYNOPSIS
- key_copy()
- to_key buffer that will be used as a key
- from_record full record to be copied from
- key_info descriptor of the index
- key_length specifies length of all keyparts that will be copied
-
- DESCRIPTION
The function takes a complete table record (as e.g. retrieved by
handler::index_read()), and a description of an index on the same table,
and extracts the first key_length bytes of the record which are part of a
key into to_key. If length == 0 then copy all bytes from the record that
form a key.
- RETURN
- None
+ @param to_key buffer that will be used as a key
+ @param from_record full record to be copied from
+ @param key_info descriptor of the index
+ @param key_length specifies length of all keyparts that will be copied
*/
void key_copy(uchar *to_key, uchar *from_record, KEY *key_info,
@@ -127,19 +121,6 @@ void key_copy(uchar *to_key, uchar *from_record, KEY *key_info,
key_part->null_bit);
key_length--;
}
- if (key_part->type == HA_KEYTYPE_BIT)
- {
- Field_bit *field= (Field_bit *) (key_part->field);
- if (field->bit_len)
- {
- uchar bits= get_rec_bits(from_record +
- key_part->null_offset +
- (key_part->null_bit == 128),
- field->bit_ofs, field->bit_len);
- *to_key++= bits;
- key_length--;
- }
- }
if (key_part->key_part_flag & HA_BLOB_PART ||
key_part->key_part_flag & HA_VAR_LENGTH_PART)
{
@@ -163,22 +144,16 @@ void key_copy(uchar *to_key, uchar *from_record, KEY *key_info,
}
-/*
+/**
Restore a key from some buffer to record.
- SYNOPSIS
- key_restore()
- to_record record buffer where the key will be restored to
- from_key buffer that contains a key
- key_info descriptor of the index
- key_length specifies length of all keyparts that will be restored
-
- DESCRIPTION
This function converts a key into record format. It can be used in cases
when we want to return a key as a result row.
- RETURN
- None
+ @param to_record record buffer where the key will be restored to
+ @param from_key buffer that contains a key
+ @param key_info descriptor of the index
+ @param key_length specifies length of all keyparts that will be restored
*/
void key_restore(uchar *to_record, uchar *from_key, KEY *key_info,
@@ -255,24 +230,23 @@ void key_restore(uchar *to_record, uchar *from_key, KEY *key_info,
}
-/*
- Compare if a key has changed
+/**
+ Compare if a key has changed.
- SYNOPSIS
- key_cmp_if_same()
- table TABLE
- key key to compare to row
- idx Index used
- key_length Length of key
+ @param table TABLE
+ @param key key to compare to row
+ @param idx Index used
+ @param key_length Length of key
- NOTES
+ @note
In theory we could just call field->cmp() for all field types,
but as we are only interested if a key has changed (not if the key is
larger or smaller than the previous value) we can do things a bit
faster by using memcmp() instead.
- RETURN
+ @retval
0 If key is equal
+ @retval
1 Key has changed
*/
@@ -331,17 +305,17 @@ bool key_cmp_if_same(TABLE *table,const uchar *key,uint idx,uint key_length)
}
/*
- unpack key-fields from record to some buffer
+ unpack key-fields from record to some buffer.
- SYNOPSIS
- key_unpack()
+ This is used mainly to get a good error message. We temporary
+ change the column bitmap so that all columns are readable.
+
+ @param
to Store value here in an easy to read form
+ @param
table Table to use
+ @param
idx Key number
-
- NOTES
- This is used mainly to get a good error message
- We temporary change the column bitmap so that all columns are readable.
*/
void key_unpack(String *to,TABLE *table,uint idx)
@@ -419,21 +393,18 @@ bool is_key_used(TABLE *table, uint idx, const MY_BITMAP *fields)
}
-/*
- Compare key in row to a given key
+/**
+ Compare key in row to a given key.
- SYNOPSIS
- key_cmp()
- key_part Key part handler
- key Key to compare to value in table->record[0]
- key_length length of 'key'
+ @param key_part Key part handler
+ @param key Key to compare to value in table->record[0]
+ @param key_length length of 'key'
- RETURN
+ @return
The return value is SIGN(key_in_row - range_key):
-
- 0 Key is equal to range or 'range' == 0 (no range)
- -1 Key is less than range
- 1 Key is larger than range
+ - 0 Key is equal to range or 'range' == 0 (no range)
+ - -1 Key is less than range
+ - 1 Key is larger than range
*/
int key_cmp(KEY_PART_INFO *key_part, const uchar *key, uint key_length)
diff --git a/sql/lex.h b/sql/lex.h
index e311379120d..0b601de772a 100644
--- a/sql/lex.h
+++ b/sql/lex.h
@@ -84,6 +84,7 @@ static SYMBOL symbols[] = {
{ "BINLOG", SYM(BINLOG_SYM)},
{ "BIT", SYM(BIT_SYM)},
{ "BLOB", SYM(BLOB_SYM)},
+ { "BLOCK", SYM(BLOCK_SYM)},
{ "BOOL", SYM(BOOL_SYM)},
{ "BOOLEAN", SYM(BOOLEAN_SYM)},
{ "BOTH", SYM(BOTH)},
@@ -124,9 +125,11 @@ static SYMBOL symbols[] = {
{ "CONSISTENT", SYM(CONSISTENT_SYM)},
{ "CONSTRAINT", SYM(CONSTRAINT)},
{ "CONTAINS", SYM(CONTAINS_SYM)},
+ { "CONTEXT", SYM(CONTEXT_SYM)},
{ "CONTINUE", SYM(CONTINUE_SYM)},
{ "CONTRIBUTORS", SYM(CONTRIBUTORS_SYM)},
{ "CONVERT", SYM(CONVERT_SYM)},
+ { "CPU", SYM(CPU_SYM)},
{ "CREATE", SYM(CREATE)},
{ "CROSS", SYM(CROSS)},
{ "CUBE", SYM(CUBE_SYM)},
@@ -198,6 +201,7 @@ static SYMBOL symbols[] = {
{ "EXTENT_SIZE", SYM(EXTENT_SIZE_SYM)},
{ "FALSE", SYM(FALSE_SYM)},
{ "FAST", SYM(FAST_SYM)},
+ { "FAULTS", SYM(FAULTS_SYM)},
{ "FETCH", SYM(FETCH_SYM)},
{ "FIELDS", SYM(COLUMNS)},
{ "FILE", SYM(FILE_SYM)},
@@ -260,7 +264,9 @@ static SYMBOL symbols[] = {
{ "INTEGER", SYM(INT_SYM)},
{ "INTERVAL", SYM(INTERVAL_SYM)},
{ "INTO", SYM(INTO)},
+ { "IO", SYM(IO_SYM)},
{ "IO_THREAD", SYM(RELAY_THREAD)},
+ { "IPC", SYM(IPC_SYM)},
{ "IS", SYM(IS)},
{ "ISOLATION", SYM(ISOLATION)},
{ "ISSUER", SYM(ISSUER_SYM)},
@@ -381,6 +387,7 @@ static SYMBOL symbols[] = {
{ "PACK_KEYS", SYM(PACK_KEYS_SYM)},
{ "PARSER", SYM(PARSER_SYM)},
{ "PARTIAL", SYM(PARTIAL)},
+ { "PAGE", SYM(PAGE_SYM)},
{ "PARTITION", SYM(PARTITION_SYM)},
{ "PARTITIONING", SYM(PARTITIONING_SYM)},
{ "PARTITIONS", SYM(PARTITIONS_SYM)},
@@ -400,6 +407,8 @@ static SYMBOL symbols[] = {
{ "PROCEDURE", SYM(PROCEDURE)},
{ "PROCESS" , SYM(PROCESS)},
{ "PROCESSLIST", SYM(PROCESSLIST_SYM)},
+ { "PROFILE", SYM(PROFILE_SYM)},
+ { "PROFILES", SYM(PROFILES_SYM)},
{ "PURGE", SYM(PURGE)},
{ "QUARTER", SYM(QUARTER_SYM)},
{ "QUERY", SYM(QUERY_SYM)},
@@ -474,6 +483,7 @@ static SYMBOL symbols[] = {
{ "SOME", SYM(ANY_SYM)},
{ "SONAME", SYM(SONAME_SYM)},
{ "SOUNDS", SYM(SOUNDS_SYM)},
+ { "SOURCE", SYM(SOURCE_SYM)},
{ "SPATIAL", SYM(SPATIAL_SYM)},
{ "SPECIFIC", SYM(SPECIFIC_SYM)},
{ "SQL", SYM(SQL_SYM)},
@@ -510,6 +520,8 @@ static SYMBOL symbols[] = {
{ "SUBPARTITIONS", SYM(SUBPARTITIONS_SYM)},
{ "SUPER", SYM(SUPER_SYM)},
{ "SUSPEND", SYM(SUSPEND_SYM)},
+ { "SWAPS", SYM(SWAPS_SYM)},
+ { "SWITCHES", SYM(SWITCHES_SYM)},
{ "TABLE", SYM(TABLE_SYM)},
{ "TABLES", SYM(TABLES)},
{ "TABLESPACE", SYM(TABLESPACE)},
diff --git a/sql/lock.cc b/sql/lock.cc
index 29a07858bc1..a0d6faa6604 100644
--- a/sql/lock.cc
+++ b/sql/lock.cc
@@ -14,8 +14,11 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-/* locking functions for mysql */
-/*
+/**
+ @file
+
+ Locking functions for mysql.
+
Because of the new concurrent inserts, we must first get external locks
before getting internal locks. If we do it in the other order, the status
information is not up to date when called from the lock handler.
@@ -65,7 +68,7 @@
excluding one that caused failure. That means handler must cleanup itself
in case external_lock() fails.
-TODO:
+ @todo
Change to use my_malloc() ONLY when using LOCK TABLES command or when
we are forced to use mysql_lock_merge.
*/
@@ -252,7 +255,7 @@ MYSQL_LOCK *mysql_lock_tables(THD *thd, TABLE **tables, uint count,
break;
}
- thd->proc_info="System lock";
+ thd_proc_info(thd, "System lock");
DBUG_PRINT("info", ("thd->proc_info %s", thd->proc_info));
if (sql_lock->table_count && lock_external(thd, sql_lock->table,
sql_lock->table_count))
@@ -263,7 +266,7 @@ MYSQL_LOCK *mysql_lock_tables(THD *thd, TABLE **tables, uint count,
sql_lock=0;
break;
}
- thd->proc_info="Table lock";
+ thd_proc_info(thd, "Table lock");
DBUG_PRINT("info", ("thd->proc_info %s", thd->proc_info));
thd->locked=1;
/* Copy the lock data array. thr_multi_lock() reorders its contens. */
@@ -311,7 +314,7 @@ MYSQL_LOCK *mysql_lock_tables(THD *thd, TABLE **tables, uint count,
thd->locked=0;
break;
}
- thd->proc_info=0;
+ thd_proc_info(thd, 0);
/* some table was altered or deleted. reopen tables marked deleted */
mysql_unlock_tables(thd,sql_lock);
@@ -326,7 +329,7 @@ retry:
if (wait_for_tables(thd))
break; // Couldn't open tables
}
- thd->proc_info=0;
+ thd_proc_info(thd, 0);
if (thd->killed)
{
thd->send_kill_message();
@@ -390,10 +393,11 @@ void mysql_unlock_tables(THD *thd, MYSQL_LOCK *sql_lock)
DBUG_VOID_RETURN;
}
-/*
- Unlock some of the tables locked by mysql_lock_tables
+/**
+ Unlock some of the tables locked by mysql_lock_tables.
+
This will work even if get_lock_data fails (next unlock will free all)
- */
+*/
void mysql_unlock_some_tables(THD *thd, TABLE **table,uint count)
{
@@ -405,8 +409,8 @@ void mysql_unlock_some_tables(THD *thd, TABLE **table,uint count)
}
-/*
-** unlock all tables locked for read.
+/**
+ unlock all tables locked for read.
*/
void mysql_unlock_read_tables(THD *thd, MYSQL_LOCK *sql_lock)
@@ -567,7 +571,7 @@ void mysql_lock_downgrade_write(THD *thd, TABLE *table,
}
-/* abort all other threads waiting to get lock in table */
+/** Abort all other threads waiting to get lock in table. */
void mysql_lock_abort(THD *thd, TABLE *table, bool upgrade_lock)
{
@@ -586,16 +590,15 @@ void mysql_lock_abort(THD *thd, TABLE *table, bool upgrade_lock)
}
-/*
- Abort one thread / table combination
+/**
+ Abort one thread / table combination.
- SYNOPSIS
- mysql_lock_abort_for_thread()
- thd Thread handler
- table Table that should be removed from lock queue
+ @param thd Thread handler
+ @param table Table that should be removed from lock queue
- RETURN
+ @retval
0 Table was not locked by another thread
+ @retval
1 Table was locked by at least one other thread
*/
@@ -663,28 +666,27 @@ MYSQL_LOCK *mysql_lock_merge(MYSQL_LOCK *a,MYSQL_LOCK *b)
}
-/*
+/**
Find duplicate lock in tables.
- SYNOPSIS
- mysql_lock_have_duplicate()
- thd The current thread.
- needle The table to check for duplicate lock.
- haystack The list of tables to search for the dup lock.
+ Temporary tables are ignored here like they are ignored in
+ get_lock_data(). If we allow two opens on temporary tables later,
+ both functions should be checked.
+
+ @param thd The current thread.
+ @param needle The table to check for duplicate lock.
+ @param haystack The list of tables to search for the dup lock.
- NOTE
+ @note
This is mainly meant for MERGE tables in INSERT ... SELECT
situations. The 'real', underlying tables can be found only after
the MERGE tables are opened. This function assumes that the tables are
already locked.
- Temporary tables are ignored here like they are ignored in
- get_lock_data(). If we allow two opens on temporary tables later,
- both functions should be checked.
-
- RETURN
- NULL No duplicate lock found.
- ! NULL First table from 'haystack' that matches a lock on 'needle'.
+ @retval
+ NULL No duplicate lock found.
+ @retval
+ !NULL First table from 'haystack' that matches a lock on 'needle'.
*/
TABLE_LIST *mysql_lock_have_duplicate(THD *thd, TABLE_LIST *needle,
@@ -768,7 +770,7 @@ TABLE_LIST *mysql_lock_have_duplicate(THD *thd, TABLE_LIST *needle,
}
- /* unlock a set of external */
+/** Unlock a set of external. */
static int unlock_external(THD *thd, TABLE **table,uint count)
{
@@ -793,21 +795,17 @@ static int unlock_external(THD *thd, TABLE **table,uint count)
}
-/*
- Get lock structures from table structs and initialize locks
-
- SYNOPSIS
- get_lock_data()
- thd Thread handler
- table_ptr Pointer to tables that should be locks
- flags One of:
- GET_LOCK_UNLOCK: If we should send TL_IGNORE to
- store lock
- GET_LOCK_STORE_LOCKS: Store lock info in TABLE
- write_lock_used Store pointer to last table with WRITE_ALLOW_WRITE
+/**
+ Get lock structures from table structs and initialize locks.
+
+ @param thd Thread handler
+ @param table_ptr Pointer to tables that should be locks
+ @param flags One of:
+ - GET_LOCK_UNLOCK : If we should send TL_IGNORE to store lock
+ - GET_LOCK_STORE_LOCKS : Store lock info in TABLE
+ @param write_lock_used Store pointer to last table with WRITE_ALLOW_WRITE
*/
-
static MYSQL_LOCK *get_lock_data(THD *thd, TABLE **table_ptr, uint count,
uint flags, TABLE **write_lock_used)
{
@@ -847,9 +845,6 @@ static MYSQL_LOCK *get_lock_data(THD *thd, TABLE **table_ptr, uint count,
locks= locks_buf= sql_lock->locks= (THR_LOCK_DATA**) (sql_lock + 1);
to= table_buf= sql_lock->table= (TABLE**) (locks + tables * 2);
sql_lock->table_count=lock_count;
- sql_lock->lock_count=tables;
- DBUG_PRINT("info", ("sql_lock->table_count %d sql_lock->lock_count %d",
- sql_lock->table_count, sql_lock->lock_count));
for (i=0 ; i < count ; i++)
{
@@ -889,35 +884,46 @@ static MYSQL_LOCK *get_lock_data(THD *thd, TABLE **table_ptr, uint count,
for ( ; org_locks != locks ; org_locks++)
(*org_locks)->debug_print_param= (void *) table;
}
+ /*
+ We do not use 'tables', because there are cases where store_lock()
+ returns less locks than lock_count() claimed. This can happen when
+ a FLUSH TABLES tries to abort locks from a MERGE table of another
+ thread. When that thread has just opened the table, but not yet
+ attached its children, it cannot return the locks. lock_count()
+ always returns the number of locks that an attached table has.
+ This is done to avoid the reverse situation: If lock_count() would
+ return 0 for a non-attached MERGE table, and that table becomes
+ attached between the calls to lock_count() and store_lock(), then
+ we would have allocated too little memory for the lock data. Now
+ we may allocate too much, but better safe than memory overrun.
+ And in the FLUSH case, the memory is released quickly anyway.
+ */
+ sql_lock->lock_count= locks - locks_buf;
+ DBUG_PRINT("info", ("sql_lock->table_count %d sql_lock->lock_count %d",
+ sql_lock->table_count, sql_lock->lock_count));
DBUG_RETURN(sql_lock);
}
-/*
+/**
Reset lock type in lock data.
- SYNOPSIS
- reset_lock_data()
- sql_lock The MySQL lock.
-
- DESCRIPTION
+ After a locking error we want to quit the locking of the table(s).
+ The test case in the bug report for Bug #18544 has the following
+ cases:
+ -# Locking error in lock_external() due to InnoDB timeout.
+ -# Locking error in get_lock_data() due to missing write permission.
+ -# Locking error in wait_if_global_read_lock() due to lock conflict.
- After a locking error we want to quit the locking of the table(s).
- The test case in the bug report for Bug #18544 has the following
- cases: 1. Locking error in lock_external() due to InnoDB timeout.
- 2. Locking error in get_lock_data() due to missing write permission.
- 3. Locking error in wait_if_global_read_lock() due to lock conflict.
+ In all these cases we have already set the lock type into the lock
+ data of the open table(s). If the table(s) are in the open table
+ cache, they could be reused with the non-zero lock type set. This
+ could lead to ignoring a different lock type with the next lock.
- In all these cases we have already set the lock type into the lock
- data of the open table(s). If the table(s) are in the open table
- cache, they could be reused with the non-zero lock type set. This
- could lead to ignoring a different lock type with the next lock.
+ Clear the lock type of all lock data. This ensures that the next
+ lock request will set its lock type properly.
- Clear the lock type of all lock data. This ensures that the next
- lock request will set its lock type properly.
-
- RETURN
- void
+ @param sql_lock The MySQL lock.
*/
static void reset_lock_data(MYSQL_LOCK *sql_lock)
@@ -940,20 +946,19 @@ static void reset_lock_data(MYSQL_LOCK *sql_lock)
This is used when we need total access to a closed, not open table
*****************************************************************************/
-/*
+/**
Lock and wait for the named lock.
- SYNOPSIS
- lock_and_wait_for_table_name()
- thd Thread handler
- table_list Lock first table in this list
+ @param thd Thread handler
+ @param table_list Lock first table in this list
- NOTES
+ @note
Works together with global read lock.
- RETURN
+ @retval
0 ok
+ @retval
1 error
*/
@@ -982,30 +987,30 @@ end:
}
-/*
+/**
Put a not open table with an old refresh version in the table cache.
- SYNPOSIS
- lock_table_name()
- thd Thread handler
- table_list Lock first table in this list
- check_in_use Do we need to check if table already in use by us
+ @param thd Thread handler
+ @param table_list Lock first table in this list
+ @param check_in_use Do we need to check if table already in use by us
- WARNING
+ @note
+ One must have a lock on LOCK_open!
+
+ @warning
If you are going to update the table, you should use
lock_and_wait_for_table_name instead of this function as this works
together with 'FLUSH TABLES WITH READ LOCK'
- NOTES
+ @note
This will force any other threads that uses the table to release it
as soon as possible.
- REQUIREMENTS
- One must have a lock on LOCK_open !
-
- RETURN:
+ @return
< 0 error
+ @return
== 0 table locked
+ @return
> 0 table locked, but someone is using it
*/
@@ -1102,23 +1107,22 @@ bool wait_for_locked_table_names(THD *thd, TABLE_LIST *table_list)
}
-/*
- Lock all tables in list with a name lock
+/**
+ Lock all tables in list with a name lock.
- SYNOPSIS
- lock_table_names()
- thd Thread handle
- table_list Names of tables to lock
+ REQUIREMENTS
+ - One must have a lock on LOCK_open when calling this
+
+ @param thd Thread handle
+ @param table_list Names of tables to lock
- NOTES
+ @note
If you are just locking one table, you should use
lock_and_wait_for_table_name().
- REQUIREMENTS
- One must have a lock on LOCK_open when calling this
-
- RETURN
+ @retval
0 ok
+ @retval
1 Fatal error (end of memory ?)
*/
@@ -1148,12 +1152,13 @@ end:
/**
- @brief Lock all tables in list with an exclusive table name lock.
+ Unlock all tables in list with a name lock.
- @param thd Thread handle.
+ @param thd Thread handle.
@param table_list Names of tables to lock.
- @note This function needs to be protected by LOCK_open. If we're
+ @note
+ This function needs to be protected by LOCK_open. If we're
under LOCK TABLES, this function does not work as advertised. Namely,
it does not exclude other threads from using this table and does not
put an exclusive name lock on this table into the table cache.
@@ -1183,7 +1188,7 @@ bool lock_table_names_exclusively(THD *thd, TABLE_LIST *table_list)
/**
- @brief Test is 'table' is protected by an exclusive name lock.
+ Test is 'table' is protected by an exclusive name lock.
@param[in] thd The current thread handler
@param[in] table_list Table container containing the single table to be
@@ -1211,7 +1216,7 @@ is_table_name_exclusively_locked_by_this_thread(THD *thd,
/**
- @brief Test is 'table key' is protected by an exclusive name lock.
+ Test is 'table key' is protected by an exclusive name lock.
@param[in] thd The current thread handler.
@param[in] key
@@ -1245,23 +1250,27 @@ is_table_name_exclusively_locked_by_this_thread(THD *thd, uchar *key,
return FALSE;
}
-/*
- Unlock all tables in list with a name lock
+/**
+ Unlock all tables in list with a name lock.
- SYNOPSIS
- unlock_table_names()
+ @param
thd Thread handle
+ @param
table_list Names of tables to unlock
+ @param
last_table Don't unlock any tables after this one.
- (default 0, which will unlock all tables)
+ (default 0, which will unlock all tables)
- NOTES
+ @note
One must have a lock on LOCK_open when calling this.
+
+ @note
This function will broadcast refresh signals to inform other threads
that the name locks are removed.
- RETURN
+ @retval
0 ok
+ @retval
1 Fatal error (end of memory ?)
*/
@@ -1565,14 +1574,9 @@ bool make_global_read_lock_block_commit(THD *thd)
}
-/*
+/**
Broadcast COND_refresh and COND_global_read_lock.
- SYNOPSIS
- broadcast_refresh()
- void No parameters.
-
- DESCRIPTION
Due to a bug in a threading library it could happen that a signal
did not reach its target. A condition for this was that the same
condition variable was used with different mutexes in
@@ -1584,12 +1588,9 @@ bool make_global_read_lock_block_commit(THD *thd)
in global read lock handling. But now it is necessary to signal
both conditions at the same time.
- NOTE
+ @note
When signalling COND_global_read_lock within the global read lock
handling, it is not necessary to also signal COND_refresh.
-
- RETURN
- void
*/
void broadcast_refresh(void)
diff --git a/sql/log.cc b/sql/log.cc
index e923418b23a..fce1eb076db 100644
--- a/sql/log.cc
+++ b/sql/log.cc
@@ -14,8 +14,15 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-/* logging of commands */
-/* TODO: Abort logging when we get an error in reading or writing log files */
+/**
+ @file
+
+ @brief
+ logging of commands
+
+ @todo
+ Abort logging when we get an error in reading or writing log files
+*/
#include "mysql_priv.h"
#include "sql_repl.h"
@@ -72,13 +79,14 @@ public:
virtual ~Silence_log_table_errors() {}
- virtual bool handle_error(uint sql_errno,
+ virtual bool handle_error(uint sql_errno, const char *message,
MYSQL_ERROR::enum_warning_level level,
THD *thd);
};
bool
Silence_log_table_errors::handle_error(uint /* sql_errno */,
+ const char * /* message */,
MYSQL_ERROR::enum_warning_level /* level */,
THD * /* thd */)
{
@@ -279,29 +287,34 @@ void Log_to_csv_event_handler::cleanup()
/* log event handlers */
-/*
+/**
Log command to the general log table
- SYNOPSIS
- log_general()
-
- event_time command start timestamp
- user_host the pointer to the string with user@host info
- user_host_len length of the user_host string. this is computed once
- and passed to all general log event handlers
- thread_id Id of the thread, issued a query
- command_type the type of the command being logged
- command_type_len the length of the string above
- sql_text the very text of the query being executed
- sql_text_len the length of sql_text string
-
- DESCRIPTION
-
- Log given command to the general log table
-
- RETURN
- FALSE - OK
- TRUE - error occured
+ Log given command to the general log table.
+
+ @param event_time command start timestamp
+ @param user_host the pointer to the string with user@host info
+ @param user_host_len length of the user_host string. this is computed
+ once and passed to all general log event handlers
+ @param thread_id Id of the thread, issued a query
+ @param command_type the type of the command being logged
+ @param command_type_len the length of the string above
+ @param sql_text the very text of the query being executed
+ @param sql_text_len the length of sql_text string
+
+
+ @return This function attempts to never call my_error(). This is
+ necessary, because general logging happens already after a statement
+ status has been sent to the client, so the client can not see the
+ error anyway. Besides, the error is not related to the statement
+ being executed and is internal, and thus should be handled
+ internally (@todo: how?).
+ If a write to the table has failed, the function attempts to
+ write to a short error message to the file. The failure is also
+ indicated in the return value.
+
+ @retval FALSE OK
+ @retval TRUE error occured
*/
bool Log_to_csv_event_handler::
@@ -341,6 +354,20 @@ bool Log_to_csv_event_handler::
table_list.db= MYSQL_SCHEMA_NAME.str;
table_list.db_length= MYSQL_SCHEMA_NAME.length;
+ /*
+ 1) open_performance_schema_table generates an error of the
+ table can not be opened or is corrupted.
+ 2) "INSERT INTO general_log" can generate warning sometimes.
+
+ Suppress these warnings and errors, they can't be dealt with
+ properly anyway.
+
+ QQ: this problem needs to be studied in more detail.
+ Comment this 2 lines and run "cast.test" to see what's happening.
+ */
+ thd->push_internal_handler(& error_handler);
+ need_pop= TRUE;
+
if (!(table= open_performance_schema_table(thd, & table_list,
& open_tables_backup)))
goto err;
@@ -357,14 +384,6 @@ bool Log_to_csv_event_handler::
table->next_number_field= table->found_next_number_field;
/*
- "INSERT INTO general_log" can generate warning sometimes.
- QQ: this problem needs to be studied in more details.
- Comment this 2 lines and run "cast.test" to see what's happening:
- */
- thd->push_internal_handler(& error_handler);
- need_pop= TRUE;
-
- /*
NOTE: we do not call restore_record() here, as all fields are
filled by the Logger (=> no need to load default ones).
*/
@@ -688,7 +707,7 @@ void Log_to_file_event_handler::init_pthread_objects()
}
-/* Wrapper around MYSQL_LOG::write() for slow log */
+/** Wrapper around MYSQL_LOG::write() for slow log. */
bool Log_to_file_event_handler::
log_slow(THD *thd, time_t current_time, time_t query_start_arg,
@@ -703,7 +722,7 @@ bool Log_to_file_event_handler::
}
-/*
+/**
Wrapper around MYSQL_LOG::write() for general log. We need it since we
want all log event handlers to have the same signature.
*/
@@ -805,7 +824,7 @@ void LOGGER::cleanup_end()
}
-/*
+/**
Perform basic log initialization: create file-based log handler and
init error log.
*/
@@ -1401,6 +1420,21 @@ static int binlog_prepare(handlerton *hton, THD *thd, bool all)
return 0;
}
+/**
+ This function is called once after each statement.
+
+ It has the responsibility to flush the transaction cache to the
+ binlog file on commits.
+
+ @param hton The binlog handlerton.
+ @param thd The client thread that executes the transaction.
+ @param all true if this is the last statement before a COMMIT
+ statement; false if either this is a statement in a
+ transaction but not the last, or if this is a statement
+ not inside a BEGIN block and autocommit is on.
+
+ @see handlerton::commit
+*/
static int binlog_commit(handlerton *hton, THD *thd, bool all)
{
DBUG_ENTER("binlog_commit");
@@ -1413,7 +1447,15 @@ static int binlog_commit(handlerton *hton, THD *thd, bool all)
trx_data->reset();
DBUG_RETURN(0);
}
- if (all)
+ /*
+ Write commit event if at least one of the following holds:
+ - the user sends an explicit COMMIT; or
+ - the autocommit flag is on, and we are not inside a BEGIN.
+ However, if the user has not sent an explicit COMMIT, and we are
+ either inside a BEGIN or run with autocommit off, then this is not
+ the end of a transaction and we should not write a commit event.
+ */
+ if (all || !(thd->options & (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN)))
{
Query_log_event qev(thd, STRING_WITH_LEN("COMMIT"), TRUE, FALSE);
qev.error_code= 0; // see comment in MYSQL_LOG::write(THD, IO_CACHE)
@@ -1427,6 +1469,23 @@ static int binlog_commit(handlerton *hton, THD *thd, bool all)
}
}
+/**
+ This function is called when a transaction involving a transactional
+ table is rolled back.
+
+ It has the responsibility to flush the transaction cache to the
+ binlog file. However, if the transaction does not involve
+ non-transactional tables, nothing needs to be logged.
+
+ @param hton The binlog handlerton.
+ @param thd The client thread that executes the transaction.
+ @param all true if this is the last statement before a COMMIT
+ statement; false if either this is a statement in a
+ transaction but not the last, or if this is a statement
+ not inside a BEGIN block and autocommit is on.
+
+ @see handlerton::rollback
+*/
static int binlog_rollback(handlerton *hton, THD *thd, bool all)
{
DBUG_ENTER("binlog_rollback");
@@ -1457,9 +1516,12 @@ static int binlog_rollback(handlerton *hton, THD *thd, bool all)
DBUG_RETURN(error);
}
-/*
- NOTE: how do we handle this (unlikely but legal) case:
- [transaction] + [update to non-trans table] + [rollback to savepoint] ?
+/**
+ @note
+ How do we handle this (unlikely but legal) case:
+ @verbatim
+ [transaction] + [update to non-trans table] + [rollback to savepoint] ?
+ @endverbatim
The problem occurs when a savepoint is before the update to the
non-transactional table. Then when there's a rollback to the savepoint, if we
simply truncate the binlog cache, we lose the part of the binlog cache where
@@ -1606,11 +1668,14 @@ static void setup_windows_event_source()
#endif /* __NT__ */
-/****************************************************************************
-** Find a uniq filename for 'filename.#'.
-** Set # to a number as low as possible
-** returns != 0 if not possible to get uniq filename
-****************************************************************************/
+/**
+ Find a unique filename for 'filename.#'.
+
+ Set '#' to a number as low as possible.
+
+ @return
+ nonzero if not possible to get unique filename
+*/
static int find_uniq_filename(char *name)
{
@@ -1824,7 +1889,7 @@ void MYSQL_LOG::close(uint exiting)
DBUG_VOID_RETURN;
}
-/* this is called only once */
+/** This is called only once. */
void MYSQL_LOG::cleanup()
{
@@ -2151,19 +2216,20 @@ bool MYSQL_QUERY_LOG::write(THD *thd, time_t current_time,
}
+/**
+ @todo
+ The following should be using fn_format(); We just need to
+ first change fn_format() to cut the file name if it's too long.
+*/
const char *MYSQL_LOG::generate_name(const char *log_name,
const char *suffix,
bool strip_ext, char *buff)
{
if (!log_name || !log_name[0])
{
- /*
- TODO: The following should be using fn_format(); We just need to
- first change fn_format() to cut the file name if it's too long.
- */
- strmake(buff, pidfile_name, FN_REFLEN - 5);
- strmov(fn_ext(buff), suffix);
- return (const char *)buff;
+ strmake(buff, pidfile_name, FN_REFLEN - strlen(suffix) - 1);
+ return (const char *)
+ fn_format(buff, buff, "", suffix, MYF(MY_REPLACE_EXT|MY_REPLACE_DIR));
}
// get rid of extension if the log is binary to avoid problems
if (strip_ext)
@@ -2269,17 +2335,17 @@ bool MYSQL_BIN_LOG::open_index_file(const char *index_file_name_arg,
}
-/*
+/**
Open a (new) binlog file.
- DESCRIPTION
- Open the log file and the index file. Register the new
- file name in it
+ file name in it
- When calling this when the file is in use, you must have a locks
- on LOCK_log and LOCK_index.
+ on LOCK_log and LOCK_index.
- RETURN VALUES
+ @retval
0 ok
+ @retval
1 error
*/
@@ -2431,24 +2497,20 @@ int MYSQL_BIN_LOG::raw_get_current_log(LOG_INFO* linfo)
return 0;
}
-/*
- Move all data up in a file in an filename index file
-
- SYNOPSIS
- copy_up_file_and_fill()
- index_file File to move
- offset Move everything from here to beginning
-
- NOTE
- File will be truncated to be 'offset' shorter or filled up with
- newlines
+/**
+ Move all data up in a file in an filename index file.
- IMPLEMENTATION
We do the copy outside of the IO_CACHE as the cache buffers would just
make things slower and more complicated.
In most cases the copy loop should only do one read.
- RETURN VALUES
+ @param index_file File to move
+ @param offset Move everything from here to beginning
+
+ @note
+ File will be truncated to be 'offset' shorter or filled up with newlines
+
+ @retval
0 ok
*/
@@ -2489,25 +2551,25 @@ err:
#endif /* HAVE_REPLICATION */
-/*
- Find the position in the log-index-file for the given log name
+/**
+ Find the position in the log-index-file for the given log name.
- SYNOPSIS
- find_log_pos()
- linfo Store here the found log file name and position to
- the NEXT log file name in the index file.
- log_name Filename to find in the index file.
- Is a null pointer if we want to read the first entry
- need_lock Set this to 1 if the parent doesn't already have a
- lock on LOCK_index
+ @param linfo Store here the found log file name and position to
+ the NEXT log file name in the index file.
+ @param log_name Filename to find in the index file.
+ Is a null pointer if we want to read the first entry
+ @param need_lock Set this to 1 if the parent doesn't already have a
+ lock on LOCK_index
- NOTE
+ @note
On systems without the truncate function the file will end with one or
more empty lines. These will be ignored when reading the file.
- RETURN VALUES
+ @retval
0 ok
- LOG_INFO_EOF End of log-index-file found
+ @retval
+ LOG_INFO_EOF End of log-index-file found
+ @retval
LOG_INFO_IO Got IO error while reading file
*/
@@ -2563,25 +2625,27 @@ int MYSQL_BIN_LOG::find_log_pos(LOG_INFO *linfo, const char *log_name,
}
-/*
- Find the position in the log-index-file for the given log name
+/**
+ Find the position in the log-index-file for the given log name.
- SYNOPSIS
- find_next_log()
+ @param
linfo Store here the next log file name and position to
the file name after that.
+ @param
need_lock Set this to 1 if the parent doesn't already have a
lock on LOCK_index
- NOTE
+ @note
- Before calling this function, one has to call find_log_pos()
- to set up 'linfo'
+ to set up 'linfo'
- Mutex needed because we need to make sure the file pointer does not move
- from under our feet
+ from under our feet
- RETURN VALUES
+ @retval
0 ok
- LOG_INFO_EOF End of log-index-file found
+ @retval
+ LOG_INFO_EOF End of log-index-file found
+ @retval
LOG_INFO_IO Got IO error while reading file
*/
@@ -2615,21 +2679,20 @@ err:
}
-/*
- Delete all logs refered to in the index file
- Start writing to a new log file. The new index file will only contain
- this file.
+/**
+ Delete all logs refered to in the index file.
+ Start writing to a new log file.
- SYNOPSIS
- reset_logs()
- thd Thread
+ The new index file will only contain this file.
- NOTE
- If not called from slave thread, write start event to new log
+ @param thd Thread
+ @note
+ If not called from slave thread, write start event to new log
- RETURN VALUES
+ @retval
0 ok
+ @retval
1 error
*/
@@ -2693,38 +2756,40 @@ err:
}
-/*
+/**
Delete relay log files prior to rli->group_relay_log_name
(i.e. all logs which are not involved in a non-finished group
- (transaction)), remove them from the index file and start on next relay log.
+ (transaction)), remove them from the index file and start on next
+ relay log.
- SYNOPSIS
- purge_first_log()
- rli Relay log information
- included If false, all relay logs that are strictly before
- rli->group_relay_log_name are deleted ; if true, the latter is
- deleted too (i.e. all relay logs
- read by the SQL slave thread are deleted).
-
- NOTE
+ IMPLEMENTATION
+ - Protects index file with LOCK_index
+ - Delete relevant relay log files
+ - Copy all file names after these ones to the front of the index file
+ - If the OS has truncate, truncate the file, else fill it with \n'
+ - Read the next file name from the index file and store in rli->linfo
+
+ @param rli Relay log information
+ @param included If false, all relay logs that are strictly before
+ rli->group_relay_log_name are deleted ; if true, the
+ latter is deleted too (i.e. all relay logs
+ read by the SQL slave thread are deleted).
+
+ @note
- This is only called from the slave-execute thread when it has read
- all commands from a relay log and want to switch to a new relay log.
+ all commands from a relay log and want to switch to a new relay log.
- When this happens, we can be in an active transaction as
- a transaction can span over two relay logs
- (although it is always written as a single block to the master's binary
- log, hence cannot span over two master's binary logs).
-
- IMPLEMENTATION
- - Protects index file with LOCK_index
- - Delete relevant relay log files
- - Copy all file names after these ones to the front of the index file
- - If the OS has truncate, truncate the file, else fill it with \n'
- - Read the next file name from the index file and store in rli->linfo
+ a transaction can span over two relay logs
+ (although it is always written as a single block to the master's binary
+ log, hence cannot span over two master's binary logs).
- RETURN VALUES
+ @retval
0 ok
- LOG_INFO_EOF End of log-index-file found
+ @retval
+ LOG_INFO_EOF End of log-index-file found
+ @retval
LOG_INFO_SEEK Could not allocate IO cache
+ @retval
LOG_INFO_IO Got IO error while reading file
*/
@@ -2802,8 +2867,8 @@ err:
DBUG_RETURN(error);
}
-/*
- Update log index_file
+/**
+ Update log index_file.
*/
int MYSQL_BIN_LOG::update_log_index(LOG_INFO* log_info, bool need_update_threads)
@@ -2817,25 +2882,24 @@ int MYSQL_BIN_LOG::update_log_index(LOG_INFO* log_info, bool need_update_threads
return 0;
}
-/*
+/**
Remove all logs before the given log from disk and from the index file.
- SYNOPSIS
- purge_logs()
- to_log Delete all log file name before this file.
- included If true, to_log is deleted too.
- need_mutex
- need_update_threads If we want to update the log coordinates of
- all threads. False for relay logs, true otherwise.
- freed_log_space If not null, decrement this variable of
- the amount of log space freed
+ @param to_log Delete all log file name before this file.
+ @param included If true, to_log is deleted too.
+ @param need_mutex
+ @param need_update_threads If we want to update the log coordinates of
+ all threads. False for relay logs, true otherwise.
+ @param freed_log_space If not null, decrement this variable of
+ the amount of log space freed
- NOTES
+ @note
If any of the logs before the deleted one is in use,
only purge logs up to this one.
- RETURN VALUES
- 0 ok
+ @retval
+ 0 ok
+ @retval
LOG_INFO_EOF to_log not found
*/
@@ -2891,8 +2955,8 @@ int MYSQL_BIN_LOG::purge_logs(const char *to_log,
*decrease_log_space-= file_size;
ha_binlog_index_purge_file(current_thd, log_info.log_file_name);
- if (current_thd->query_error) {
- DBUG_PRINT("info",("query error: %d", current_thd->query_error));
+ if (current_thd->is_slave_error) {
+ DBUG_PRINT("info",("slave error: %d", current_thd->is_slave_error));
if (my_errno == EMFILE) {
DBUG_PRINT("info",("my_errno: %d, set ret = LOG_INFO_EMFILE", my_errno));
ret = LOG_INFO_EMFILE;
@@ -2919,21 +2983,20 @@ err:
DBUG_RETURN(error);
}
-/*
+/**
Remove all logs before the given file date from disk and from the
index file.
- SYNOPSIS
- purge_logs_before_date()
- thd Thread pointer
- before_date Delete all log files before given date.
+ @param thd Thread pointer
+ @param before_date Delete all log files before given date.
- NOTES
+ @note
If any of the logs before the deleted one is in use,
only purge logs up to this one.
- RETURN VALUES
+ @retval
0 ok
+ @retval
LOG_INFO_PURGE_NO_ROTATE Binary file that can't be rotated
*/
@@ -2983,29 +3046,27 @@ err:
#endif /* HAVE_REPLICATION */
-/*
- Create a new log file name
+/**
+ Create a new log file name.
- SYNOPSIS
- make_log_name()
- buf buf of at least FN_REFLEN where new name is stored
+ @param buf buf of at least FN_REFLEN where new name is stored
- NOTE
+ @note
If file name will be longer then FN_REFLEN it will be truncated
*/
void MYSQL_BIN_LOG::make_log_name(char* buf, const char* log_ident)
{
uint dir_len = dirname_length(log_file_name);
- if (dir_len > FN_REFLEN)
+ if (dir_len >= FN_REFLEN)
dir_len=FN_REFLEN-1;
strnmov(buf, log_file_name, dir_len);
- strmake(buf+dir_len, log_ident, FN_REFLEN - dir_len);
+ strmake(buf+dir_len, log_ident, FN_REFLEN - dir_len -1);
}
-/*
- Check if we are writing/reading to the given log file
+/**
+ Check if we are writing/reading to the given log file.
*/
bool MYSQL_BIN_LOG::is_active(const char *log_file_name_arg)
@@ -3034,14 +3095,12 @@ void MYSQL_BIN_LOG::new_file_without_locking()
}
-/*
- Start writing to a new log file or reopen the old file
+/**
+ Start writing to a new log file or reopen the old file.
- SYNOPSIS
- new_file_impl()
- need_lock Set to 1 if caller has not locked LOCK_log
+ @param need_lock Set to 1 if caller has not locked LOCK_log
- NOTE
+ @note
The new file name is stored last in the index file
*/
@@ -3512,8 +3571,8 @@ MYSQL_BIN_LOG::flush_and_set_pending_rows_event(THD *thd,
DBUG_RETURN(error);
}
-/*
- Write an event to the binary log
+/**
+ Write an event to the binary log.
*/
bool MYSQL_BIN_LOG::write(Log_event *event_info)
@@ -3568,9 +3627,6 @@ bool MYSQL_BIN_LOG::write(Log_event *event_info)
(!binlog_filter->db_ok(local_db)))
{
VOID(pthread_mutex_unlock(&LOCK_log));
- DBUG_PRINT("info",("OPTION_BIN_LOG is %s, db_ok('%s') == %d",
- (thd->options & OPTION_BIN_LOG) ? "set" : "clear",
- local_db, binlog_filter->db_ok(local_db)));
DBUG_RETURN(0);
}
#endif /* HAVE_REPLICATION */
@@ -3955,27 +4011,25 @@ int MYSQL_BIN_LOG::write_cache(IO_CACHE *cache, bool lock_log, bool sync_log)
return 0; // All OK
}
-/*
- Write a cached log entry to the binary log
-
- SYNOPSIS
- write()
- thd
- cache The cache to copy to the binlog
- commit_event The commit event to print after writing the
+/**
+ Write a cached log entry to the binary log.
+ - To support transaction over replication, we wrap the transaction
+ with BEGIN/COMMIT or BEGIN/ROLLBACK in the binary log.
+ We want to write a BEGIN/ROLLBACK block when a non-transactional table
+ was updated in a transaction which was rolled back. This is to ensure
+ that the same updates are run on the slave.
+
+ @param thd
+ @param cache The cache to copy to the binlog
+ @param commit_event The commit event to print after writing the
contents of the cache.
- NOTE
- - We only come here if there is something in the cache.
- - The thing in the cache is always a complete transaction
- - 'cache' needs to be reinitialized after this functions returns.
-
- IMPLEMENTATION
- - To support transaction over replication, we wrap the transaction
- with BEGIN/COMMIT or BEGIN/ROLLBACK in the binary log.
- We want to write a BEGIN/ROLLBACK block when a non-transactional table
- was updated in a transaction which was rolled back. This is to ensure
- that the same updates are run on the slave.
+ @note
+ We only come here if there is something in the cache.
+ @note
+ The thing in the cache is always a complete transaction.
+ @note
+ 'cache' needs to be reinitialized after this functions returns.
*/
bool MYSQL_BIN_LOG::write(THD *thd, IO_CACHE *cache, Log_event *commit_event)
@@ -3996,32 +4050,42 @@ bool MYSQL_BIN_LOG::write(THD *thd, IO_CACHE *cache, Log_event *commit_event)
if (my_b_tell(cache) > 0)
{
/*
- Log "BEGIN" at the beginning of the transaction.
- which may contain more than 1 SQL statement.
+ Log "BEGIN" at the beginning of every transaction. Here, a
+ transaction is either a BEGIN..COMMIT block or a single
+ statement in autocommit mode.
*/
- if (thd->options & (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN))
- {
- Query_log_event qinfo(thd, STRING_WITH_LEN("BEGIN"), TRUE, FALSE);
- /*
- Imagine this is rollback due to net timeout, after all statements of
- the transaction succeeded. Then we want a zero-error code in BEGIN.
- In other words, if there was a really serious error code it's already
- in the statement's events, there is no need to put it also in this
- internally generated event, and as this event is generated late it
- would lead to false alarms.
- This is safer than thd->clear_error() against kills at shutdown.
- */
- qinfo.error_code= 0;
- /*
- Now this Query_log_event has artificial log_pos 0. It must be adjusted
- to reflect the real position in the log. Not doing it would confuse the
- slave: it would prevent this one from knowing where he is in the
- master's binlog, which would result in wrong positions being shown to
- the user, MASTER_POS_WAIT undue waiting etc.
- */
- if (qinfo.write(&log_file))
- goto err;
- }
+ Query_log_event qinfo(thd, STRING_WITH_LEN("BEGIN"), TRUE, FALSE);
+ /*
+ Imagine this is rollback due to net timeout, after all
+ statements of the transaction succeeded. Then we want a
+ zero-error code in BEGIN. In other words, if there was a
+ really serious error code it's already in the statement's
+ events, there is no need to put it also in this internally
+ generated event, and as this event is generated late it would
+ lead to false alarms.
+
+ This is safer than thd->clear_error() against kills at shutdown.
+ */
+ qinfo.error_code= 0;
+ /*
+ Now this Query_log_event has artificial log_pos 0. It must be
+ adjusted to reflect the real position in the log. Not doing it
+ would confuse the slave: it would prevent this one from
+ knowing where he is in the master's binlog, which would result
+ in wrong positions being shown to the user, MASTER_POS_WAIT
+ undue waiting etc.
+ */
+ if (qinfo.write(&log_file))
+ goto err;
+
+ DBUG_EXECUTE_IF("crash_before_writing_xid",
+ {
+ if ((write_error= write_cache(cache, false, true)))
+ DBUG_PRINT("info", ("error writing binlog cache: %d",
+ write_error));
+ DBUG_PRINT("info", ("crashing before writing xid"));
+ abort();
+ });
if ((write_error= write_cache(cache, false, false)))
goto err;
@@ -4072,17 +4136,15 @@ err:
}
-/*
- Wait until we get a signal that the binary log has been updated
+/**
+ Wait until we get a signal that the binary log has been updated.
- SYNOPSIS
- wait_for_update()
- thd Thread variable
- is_slave If 0, the caller is the Binlog_dump thread from master;
- if 1, the caller is the SQL thread from the slave. This
- influences only thd->proc_info.
+ @param thd Thread variable
+ @param is_slave If 0, the caller is the Binlog_dump thread from master;
+ if 1, the caller is the SQL thread from the slave. This
+ influences only thd->proc_info.
- NOTES
+ @note
One must have a lock on LOCK_log before calling this function.
This lock will be released before return! That's required by
THD::enter_cond() (see NOTES in sql_class.h).
@@ -4105,18 +4167,16 @@ void MYSQL_BIN_LOG::wait_for_update(THD* thd, bool is_slave)
}
-/*
- Close the log file
+/**
+ Close the log file.
- SYNOPSIS
- close()
- exiting Bitmask for one or more of the following bits:
- LOG_CLOSE_INDEX if we should close the index file
- LOG_CLOSE_TO_BE_OPENED if we intend to call open
- at once after close.
- LOG_CLOSE_STOP_EVENT write a 'stop' event to the log
+ @param exiting Bitmask for one or more of the following bits:
+ - LOG_CLOSE_INDEX : if we should close the index file
+ - LOG_CLOSE_TO_BE_OPENED : if we intend to call open
+ at once after close.
+ - LOG_CLOSE_STOP_EVENT : write a 'stop' event to the log
- NOTES
+ @note
One can do an open on the object at once after doing a close.
The internal structures are not freed until cleanup() is called
*/
@@ -4196,21 +4256,20 @@ void MYSQL_BIN_LOG::set_max_size(ulong max_size_arg)
}
-/*
- Check if a string is a valid number
+/**
+ Check if a string is a valid number.
- SYNOPSIS
- test_if_number()
- str String to test
- res Store value here
- allow_wildcards Set to 1 if we should ignore '%' and '_'
+ @param str String to test
+ @param res Store value here
+ @param allow_wildcards Set to 1 if we should ignore '%' and '_'
- NOTE
+ @note
For the moment the allow_wildcards argument is not used
Should be move to some other file.
- RETURN VALUES
+ @retval
1 String is a number
+ @retval
0 Error
*/
@@ -4351,23 +4410,18 @@ static void print_buffer_to_nt_eventlog(enum loglevel level, char *buff,
#endif /* __NT__ */
-/*
+/**
Prints a printf style message to the error log and, under NT, to the
Windows event log.
- SYNOPSIS
- vprint_msg_to_log()
- event_type Type of event to write (Error, Warning, or Info)
- format Printf style format of message
- args va_list list of arguments for the message
-
- NOTE
+ This function prints the message into a buffer and then sends that buffer
+ to other functions to write that message to other logging sources.
- IMPLEMENTATION
- This function prints the message into a buffer and then sends that buffer
- to other functions to write that message to other logging sources.
+ @param event_type Type of event to write (Error, Warning, or Info)
+ @param format Printf style format of message
+ @param args va_list list of arguments for the message
- RETURN VALUES
+ @returns
The function always returns 0. The return value is present in the
signature to be compatible with other logging routines, which could
return an error (e.g. logging to the log tables)
@@ -4621,16 +4675,18 @@ err:
return 1;
}
-/*
- there is no active page, let's got one from the pool
+/**
+ there is no active page, let's got one from the pool.
- two strategies here:
- 1. take the first from the pool
- 2. if there're waiters - take the one with the most free space
+ Two strategies here:
+ -# take the first from the pool
+ -# if there're waiters - take the one with the most free space.
- TODO page merging. try to allocate adjacent page first,
- so that they can be flushed both in one sync
+ @todo
+ TODO page merging. try to allocate adjacent page first,
+ so that they can be flushed both in one sync
*/
+
void TC_LOG_MMAP::get_active_from_pool()
{
PAGE **p, **best_p=0;
@@ -4673,6 +4729,10 @@ void TC_LOG_MMAP::get_active_from_pool()
pthread_mutex_unlock(&LOCK_pool);
}
+/**
+ @todo
+ perhaps, increase log size ?
+*/
int TC_LOG_MMAP::overflow()
{
/*
@@ -4685,10 +4745,9 @@ int TC_LOG_MMAP::overflow()
return 1; // always return 1
}
-/*
- Record that transaction XID is committed on the persistent storage
+/**
+ Record that transaction XID is committed on the persistent storage.
- NOTES
This function is called in the middle of two-phase commit:
First all resources prepare the transaction, then tc_log->log() is called,
then all resources commit the transaction, then tc_log->unlog() is called.
@@ -4699,18 +4758,18 @@ int TC_LOG_MMAP::overflow()
threads waiting for a page, but then all these threads will be waiting
for a fsync() anyway
- IMPLEMENTATION
If tc_log == MYSQL_LOG then tc_log writes transaction to binlog and
records XID in a special Xid_log_event.
If tc_log = TC_LOG_MMAP then xid is written in a special memory-mapped
log.
- RETURN
- 0 Error
- # "cookie", a number that will be passed as an argument
- to unlog() call. tc_log can define it any way it wants,
- and use for whatever purposes. TC_LOG_MMAP sets it
- to the position in memory where xid was logged to.
+ @retval
+ 0 - error
+ @retval
+ \# - otherwise, "cookie", a number that will be passed as an argument
+ to unlog() call. tc_log can define it any way it wants,
+ and use for whatever purposes. TC_LOG_MMAP sets it
+ to the position in memory where xid was logged to.
*/
int TC_LOG_MMAP::log_xid(THD *thd, my_xid xid)
@@ -4818,9 +4877,9 @@ int TC_LOG_MMAP::sync()
return err;
}
-/*
+/**
erase xid from the page, update page free space counters/pointers.
- cookie points directly to the memory where xid was logged
+ cookie points directly to the memory where xid was logged.
*/
void TC_LOG_MMAP::unlog(ulong cookie, my_xid xid)
@@ -4931,16 +4990,17 @@ TC_LOG *tc_log;
TC_LOG_DUMMY tc_log_dummy;
TC_LOG_MMAP tc_log_mmap;
-/*
- Perform heuristic recovery, if --tc-heuristic-recover was used
-
- RETURN VALUE
- 0 no heuristic recovery was requested
- 1 heuristic recovery was performed
+/**
+ Perform heuristic recovery, if --tc-heuristic-recover was used.
- NOTE
+ @note
no matter whether heuristic recovery was successful or not
mysqld must exit. So, return value is the same in both cases.
+
+ @retval
+ 0 no heuristic recovery was requested
+ @retval
+ 1 heuristic recovery was performed
*/
int TC_LOG::using_heuristic_recover()
@@ -4958,8 +5018,9 @@ int TC_LOG::using_heuristic_recover()
/****** transaction coordinator log for 2pc - binlog() based solution ******/
#define TC_LOG_BINLOG MYSQL_BIN_LOG
-/*
- TODO keep in-memory list of prepared transactions
+/**
+ @todo
+ keep in-memory list of prepared transactions
(add to list in log(), remove on unlog())
and copy it to the new binlog if rotated
but let's check the behaviour of tc_log_page_waits first!
@@ -5050,7 +5111,7 @@ err:
return error;
}
-/* this is called on shutdown, after ha_panic */
+/** This is called on shutdown, after ha_panic. */
void TC_LOG_BINLOG::close()
{
DBUG_ASSERT(prepared_xids==0);
@@ -5058,12 +5119,14 @@ void TC_LOG_BINLOG::close()
pthread_cond_destroy (&COND_prep_xids);
}
-/*
- TODO group commit
+/**
+ @todo
+ group commit
- RETURN
- 0 - error
- 1 - success
+ @retval
+ 0 error
+ @retval
+ 1 success
*/
int TC_LOG_BINLOG::log_xid(THD *thd, my_xid xid)
{
diff --git a/sql/log.h b/sql/log.h
index bef0101c8b5..20a1b7e8e6d 100644
--- a/sql/log.h
+++ b/sql/log.h
@@ -130,7 +130,13 @@ typedef struct st_log_info
my_off_t pos;
bool fatal; // if the purge happens to give us a negative offset
pthread_mutex_t lock;
- st_log_info():fatal(0) { pthread_mutex_init(&lock, MY_MUTEX_INIT_FAST);}
+ st_log_info()
+ : index_file_offset(0), index_file_start_offset(0),
+ pos(0), fatal(0)
+ {
+ log_file_name[0] = '\0';
+ pthread_mutex_init(&lock, MY_MUTEX_INIT_FAST);
+ }
~st_log_info() { pthread_mutex_destroy(&lock);}
} LOG_INFO;
diff --git a/sql/log_event.cc b/sql/log_event.cc
index a435894382b..df0d1e8a020 100644
--- a/sql/log_event.cc
+++ b/sql/log_event.cc
@@ -36,6 +36,95 @@
#define FLAGSTR(V,F) ((V)&(F)?#F" ":"")
+
+/*
+ Size of buffer for printing a double in format %.<PREC>g
+
+ optional '-' + optional zero + '.' + PREC digits + 'e' + sign +
+ exponent digits + '\0'
+*/
+#define FMT_G_BUFSIZE(PREC) (3 + (PREC) + 5 + 1)
+
+
+#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION)
+static const char *HA_ERR(int i)
+{
+ switch (i) {
+ case HA_ERR_KEY_NOT_FOUND: return "HA_ERR_KEY_NOT_FOUND";
+ case HA_ERR_FOUND_DUPP_KEY: return "HA_ERR_FOUND_DUPP_KEY";
+ case HA_ERR_RECORD_CHANGED: return "HA_ERR_RECORD_CHANGED";
+ case HA_ERR_WRONG_INDEX: return "HA_ERR_WRONG_INDEX";
+ case HA_ERR_CRASHED: return "HA_ERR_CRASHED";
+ case HA_ERR_WRONG_IN_RECORD: return "HA_ERR_WRONG_IN_RECORD";
+ case HA_ERR_OUT_OF_MEM: return "HA_ERR_OUT_OF_MEM";
+ case HA_ERR_NOT_A_TABLE: return "HA_ERR_NOT_A_TABLE";
+ case HA_ERR_WRONG_COMMAND: return "HA_ERR_WRONG_COMMAND";
+ case HA_ERR_OLD_FILE: return "HA_ERR_OLD_FILE";
+ case HA_ERR_NO_ACTIVE_RECORD: return "HA_ERR_NO_ACTIVE_RECORD";
+ case HA_ERR_RECORD_DELETED: return "HA_ERR_RECORD_DELETED";
+ case HA_ERR_RECORD_FILE_FULL: return "HA_ERR_RECORD_FILE_FULL";
+ case HA_ERR_INDEX_FILE_FULL: return "HA_ERR_INDEX_FILE_FULL";
+ case HA_ERR_END_OF_FILE: return "HA_ERR_END_OF_FILE";
+ case HA_ERR_UNSUPPORTED: return "HA_ERR_UNSUPPORTED";
+ case HA_ERR_TO_BIG_ROW: return "HA_ERR_TO_BIG_ROW";
+ case HA_WRONG_CREATE_OPTION: return "HA_WRONG_CREATE_OPTION";
+ case HA_ERR_FOUND_DUPP_UNIQUE: return "HA_ERR_FOUND_DUPP_UNIQUE";
+ case HA_ERR_UNKNOWN_CHARSET: return "HA_ERR_UNKNOWN_CHARSET";
+ case HA_ERR_WRONG_MRG_TABLE_DEF: return "HA_ERR_WRONG_MRG_TABLE_DEF";
+ case HA_ERR_CRASHED_ON_REPAIR: return "HA_ERR_CRASHED_ON_REPAIR";
+ case HA_ERR_CRASHED_ON_USAGE: return "HA_ERR_CRASHED_ON_USAGE";
+ case HA_ERR_LOCK_WAIT_TIMEOUT: return "HA_ERR_LOCK_WAIT_TIMEOUT";
+ case HA_ERR_LOCK_TABLE_FULL: return "HA_ERR_LOCK_TABLE_FULL";
+ case HA_ERR_READ_ONLY_TRANSACTION: return "HA_ERR_READ_ONLY_TRANSACTION";
+ case HA_ERR_LOCK_DEADLOCK: return "HA_ERR_LOCK_DEADLOCK";
+ case HA_ERR_CANNOT_ADD_FOREIGN: return "HA_ERR_CANNOT_ADD_FOREIGN";
+ case HA_ERR_NO_REFERENCED_ROW: return "HA_ERR_NO_REFERENCED_ROW";
+ case HA_ERR_ROW_IS_REFERENCED: return "HA_ERR_ROW_IS_REFERENCED";
+ case HA_ERR_NO_SAVEPOINT: return "HA_ERR_NO_SAVEPOINT";
+ case HA_ERR_NON_UNIQUE_BLOCK_SIZE: return "HA_ERR_NON_UNIQUE_BLOCK_SIZE";
+ case HA_ERR_NO_SUCH_TABLE: return "HA_ERR_NO_SUCH_TABLE";
+ case HA_ERR_TABLE_EXIST: return "HA_ERR_TABLE_EXIST";
+ case HA_ERR_NO_CONNECTION: return "HA_ERR_NO_CONNECTION";
+ case HA_ERR_NULL_IN_SPATIAL: return "HA_ERR_NULL_IN_SPATIAL";
+ case HA_ERR_TABLE_DEF_CHANGED: return "HA_ERR_TABLE_DEF_CHANGED";
+ case HA_ERR_NO_PARTITION_FOUND: return "HA_ERR_NO_PARTITION_FOUND";
+ case HA_ERR_RBR_LOGGING_FAILED: return "HA_ERR_RBR_LOGGING_FAILED";
+ case HA_ERR_DROP_INDEX_FK: return "HA_ERR_DROP_INDEX_FK";
+ case HA_ERR_FOREIGN_DUPLICATE_KEY: return "HA_ERR_FOREIGN_DUPLICATE_KEY";
+ case HA_ERR_TABLE_NEEDS_UPGRADE: return "HA_ERR_TABLE_NEEDS_UPGRADE";
+ case HA_ERR_TABLE_READONLY: return "HA_ERR_TABLE_READONLY";
+ case HA_ERR_AUTOINC_READ_FAILED: return "HA_ERR_AUTOINC_READ_FAILED";
+ case HA_ERR_AUTOINC_ERANGE: return "HA_ERR_AUTOINC_ERANGE";
+ case HA_ERR_GENERIC: return "HA_ERR_GENERIC";
+ case HA_ERR_RECORD_IS_THE_SAME: return "HA_ERR_RECORD_IS_THE_SAME";
+ case HA_ERR_LOGGING_IMPOSSIBLE: return "HA_ERR_LOGGING_IMPOSSIBLE";
+ case HA_ERR_CORRUPT_EVENT: return "HA_ERR_CORRUPT_EVENT";
+ }
+ return 0;
+}
+
+/**
+ macro to call from different branches of Rows_log_event::do_apply_event
+*/
+static void inline slave_rows_error_report(enum loglevel level, int ha_error,
+ Relay_log_info const *rli, THD *thd,
+ TABLE *table, const char * type,
+ const char *log_name, ulong pos)
+{
+ const char *handler_error= HA_ERR(ha_error);
+ rli->report(level, thd->net.client_last_errno,
+ "Could not execute %s event on table %s.%s;"
+ "%s%s handler error %s; "
+ "the event's master log %s, end_log_pos %lu",
+ type, table->s->db.str,
+ table->s->table_name.str,
+ thd->net.client_last_error[0] != 0 ? thd->net.client_last_error : "",
+ thd->net.client_last_error[0] != 0 ? ";" : "",
+ handler_error == NULL? "<unknown>" : handler_error,
+ log_name, pos);
+}
+#endif
+
/*
Cache that will automatically be written to a dedicated file on
destruction.
@@ -114,6 +203,9 @@ private:
flag_set m_flags;
};
+#ifndef DBUG_OFF
+uint debug_not_change_ts_if_art_event= 1; // bug#29309 simulation
+#endif
/*
pretty_print_str()
@@ -148,14 +240,14 @@ static void pretty_print_str(IO_CACHE* cache, char* str, int len)
static void clear_all_errors(THD *thd, Relay_log_info *rli)
{
- thd->query_error = 0;
+ thd->is_slave_error = 0;
thd->clear_error();
rli->clear_error();
}
-/*
- Ignore error code specified on command line
+/**
+ Ignore error code specified on command line.
*/
inline int ignored_error_code(int err_code)
@@ -212,21 +304,20 @@ static char *pretty_print_str(char *packet, char *str, int len)
#endif /* !MYSQL_CLIENT */
-/*
- Creates a temporary name for load data infile:
+#if defined(HAVE_REPLICATION) && !defined(MYSQL_CLIENT)
- SYNOPSIS
- slave_load_file_stem()
- buf Store new filename here
- file_id File_id (part of file name)
- event_server_id Event_id (part of file name)
- ext Extension for file name
+/**
+ Creates a temporary name for load data infile:.
- RETURN
+ @param buf Store new filename here
+ @param file_id File_id (part of file name)
+ @param event_server_id Event_id (part of file name)
+ @param ext Extension for file name
+
+ @return
Pointer to start of extension
*/
-#if defined(HAVE_REPLICATION) && !defined(MYSQL_CLIENT)
static char *slave_load_file_stem(char *buf, uint file_id,
int event_server_id, const char *ext)
{
@@ -246,14 +337,12 @@ static char *slave_load_file_stem(char *buf, uint file_id,
#endif
-/*
- Delete all temporary files used for SQL_LOAD.
+#if defined(HAVE_REPLICATION) && !defined(MYSQL_CLIENT)
- SYNOPSIS
- cleanup_load_tmpdir()
+/**
+ Delete all temporary files used for SQL_LOAD.
*/
-#if defined(HAVE_REPLICATION) && !defined(MYSQL_CLIENT)
static void cleanup_load_tmpdir()
{
MY_DIR *dirp;
@@ -321,7 +410,7 @@ static inline int read_str(const char **buf, const char *buf_end,
}
-/*
+/**
Transforms a string into "" or its expression in 0x... form.
*/
@@ -338,12 +427,14 @@ char *str_to_hex(char *to, const char *from, uint len)
return to; // pointer to end 0 of 'to'
}
-/*
+#ifndef MYSQL_CLIENT
+
+/**
Append a version of the 'from' string suitable for use in a query to
the 'to' string. To generate a correct escaping, the character set
information in 'csinfo' is used.
- */
-#ifndef MYSQL_CLIENT
+*/
+
int
append_query_string(CHARSET_INFO *csinfo,
String const *from, String *to)
@@ -370,7 +461,7 @@ append_query_string(CHARSET_INFO *csinfo,
#endif
-/*
+/**
Prints a "session_var=value" string. Used by mysqlbinlog to print some SET
commands just before it prints a query.
*/
@@ -395,13 +486,14 @@ static void print_set_option(IO_CACHE* file, uint32 bits_changed,
Log_event methods (= the parent class of all events)
**************************************************************************/
-/*
- Log_event::get_type_str()
+/**
+ @return
+ returns the human readable name of the event's type
*/
-const char* Log_event::get_type_str()
+const char* Log_event::get_type_str(Log_event_type type)
{
- switch(get_type_code()) {
+ switch(type) {
case START_EVENT_V3: return "Start_v3";
case STOP_EVENT: return "Stop";
case QUERY_EVENT: return "Query";
@@ -419,6 +511,9 @@ const char* Log_event::get_type_str()
case USER_VAR_EVENT: return "User var";
case FORMAT_DESCRIPTION_EVENT: return "Format_desc";
case TABLE_MAP_EVENT: return "Table_map";
+ case PRE_GA_WRITE_ROWS_EVENT: return "Write_rows_event_old";
+ case PRE_GA_UPDATE_ROWS_EVENT: return "Update_rows_event_old";
+ case PRE_GA_DELETE_ROWS_EVENT: return "Delete_rows_event_old";
case WRITE_ROWS_EVENT: return "Write_rows";
case UPDATE_ROWS_EVENT: return "Update_rows";
case DELETE_ROWS_EVENT: return "Delete_rows";
@@ -429,6 +524,11 @@ const char* Log_event::get_type_str()
}
}
+const char* Log_event::get_type_str()
+{
+ return get_type_str(get_type_code());
+}
+
/*
Log_event::Log_event()
@@ -444,7 +544,7 @@ Log_event::Log_event(THD* thd_arg, uint16 flags_arg, bool using_trans)
}
-/*
+/**
This minimal constructor is for when you are not even sure that there
is a valid THD. For example in the server when we are shutting down or
flushing logs after receiving a SIGHUP (then we must write a Rotate to
@@ -555,8 +655,32 @@ int Log_event::do_update_pos(Relay_log_info *rli)
Matz: I don't think we will need this check with this refactoring.
*/
if (rli)
- rli->stmt_done(log_pos, when);
-
+ {
+ /*
+ bug#29309 simulation: resetting the flag to force
+ wrong behaviour of artificial event to update
+ rli->last_master_timestamp for only one time -
+ the first FLUSH LOGS in the test.
+ */
+ DBUG_EXECUTE_IF("let_first_flush_log_change_timestamp",
+ if (debug_not_change_ts_if_art_event == 1
+ && is_artificial_event())
+ {
+ debug_not_change_ts_if_art_event= 0;
+ });
+#ifndef DBUG_OFF
+ rli->stmt_done(log_pos,
+ is_artificial_event() &&
+ debug_not_change_ts_if_art_event > 0 ? 0 : when);
+#else
+ rli->stmt_done(log_pos, is_artificial_event()? 0 : when);
+#endif
+ DBUG_EXECUTE_IF("let_first_flush_log_change_timestamp",
+ if (debug_not_change_ts_if_art_event == 0)
+ {
+ debug_not_change_ts_if_art_event= 2;
+ });
+ }
return 0; // Cannot fail currently
}
@@ -570,7 +694,8 @@ Log_event::do_shall_skip(Relay_log_info *rli)
(ulong) server_id, (ulong) ::server_id,
rli->replicate_same_server_id,
rli->slave_skip_counter));
- if (server_id == ::server_id && !rli->replicate_same_server_id)
+ if (server_id == ::server_id && !rli->replicate_same_server_id ||
+ rli->slave_skip_counter == 1 && rli->is_in_group())
return EVENT_SKIP_IGNORE;
else if (rli->slave_skip_counter > 0)
return EVENT_SKIP_COUNT;
@@ -589,12 +714,9 @@ void Log_event::pack_info(Protocol *protocol)
}
-/*
- Log_event::net_send()
-
+/**
Only called by SHOW BINLOG EVENTS
*/
-
int Log_event::net_send(Protocol *protocol, const char* log_name, my_off_t pos)
{
const char *p= strrchr(log_name, FN_LIBCHAR);
@@ -615,8 +737,10 @@ int Log_event::net_send(Protocol *protocol, const char* log_name, my_off_t pos)
#endif /* HAVE_REPLICATION */
-/*
- Log_event::init_show_field_list()
+/**
+ init_show_field_list() prepares the column names and types for the
+ output of SHOW BINLOG EVENTS; it is used only by SHOW BINLOG
+ EVENTS.
*/
void Log_event::init_show_field_list(List<Item>* field_list)
@@ -712,12 +836,9 @@ bool Log_event::write_header(IO_CACHE* file, ulong event_data_length)
}
-/*
- Log_event::read_log_event()
-
+/**
This needn't be format-tolerant, because we only read
LOG_EVENT_MINIMAL_HEADER_LEN (we just want to read the event's length).
-
*/
int Log_event::read_log_event(IO_CACHE* file, String* packet,
@@ -800,14 +921,11 @@ end:
#define LOCK_MUTEX
#endif
-/*
- Log_event::read_log_event()
-
- NOTE:
+#ifndef MYSQL_CLIENT
+/**
+ @note
Allocates memory; The caller is responsible for clean-up.
*/
-
-#ifndef MYSQL_CLIENT
Log_event* Log_event::read_log_event(IO_CACHE* file,
pthread_mutex_t* log_lock,
const Format_description_log_event
@@ -905,8 +1023,7 @@ err:
}
-/*
- Log_event::read_log_event()
+/**
Binlog format tolerance is in (buf, event_len, description_event)
constructors.
*/
@@ -919,6 +1036,8 @@ Log_event* Log_event::read_log_event(const char* buf, uint event_len,
DBUG_ENTER("Log_event::read_log_event(char*,...)");
DBUG_ASSERT(description_event != 0);
DBUG_PRINT("info", ("binlog_version: %d", description_event->binlog_version));
+ DBUG_DUMP("data", (unsigned char*) buf, event_len);
+
/* Check the integrity */
if (event_len < EVENT_LEN_OFFSET ||
buf[EVENT_TYPE_OFFSET] >= ENUM_END_EVENT ||
@@ -928,94 +1047,134 @@ Log_event* Log_event::read_log_event(const char* buf, uint event_len,
DBUG_RETURN(NULL); // general sanity check - will fail on a partial read
}
- switch(buf[EVENT_TYPE_OFFSET]) {
- case QUERY_EVENT:
- ev = new Query_log_event(buf, event_len, description_event, QUERY_EVENT);
- break;
- case LOAD_EVENT:
- ev = new Load_log_event(buf, event_len, description_event);
- break;
- case NEW_LOAD_EVENT:
- ev = new Load_log_event(buf, event_len, description_event);
- break;
- case ROTATE_EVENT:
- ev = new Rotate_log_event(buf, event_len, description_event);
- break;
+ uint event_type= buf[EVENT_TYPE_OFFSET];
+ if (event_type > description_event->number_of_event_types &&
+ event_type != FORMAT_DESCRIPTION_EVENT)
+ {
+ /*
+ It is unsafe to use the description_event if its post_header_len
+ array does not include the event type.
+ */
+ DBUG_PRINT("error", ("event type %d found, but the current "
+ "Format_description_log_event supports only %d event "
+ "types", event_type,
+ description_event->number_of_event_types));
+ ev= NULL;
+ }
+ else
+ {
+ /*
+ In some previuos versions (see comment in
+ Format_description_log_event::Format_description_log_event(char*,...)),
+ event types were assigned different id numbers than in the
+ present version. In order to replicate from such versions to the
+ present version, we must map those event type id's to our event
+ type id's. The mapping is done with the event_type_permutation
+ array, which was set up when the Format_description_log_event
+ was read.
+ */
+ if (description_event->event_type_permutation)
+ {
+ IF_DBUG({
+ int new_event_type=
+ description_event->event_type_permutation[event_type];
+ DBUG_PRINT("info",
+ ("converting event type %d to %d (%s)",
+ event_type, new_event_type,
+ get_type_str((Log_event_type)new_event_type)));
+ });
+ event_type= description_event->event_type_permutation[event_type];
+ }
+
+ switch(event_type) {
+ case QUERY_EVENT:
+ ev = new Query_log_event(buf, event_len, description_event, QUERY_EVENT);
+ break;
+ case LOAD_EVENT:
+ ev = new Load_log_event(buf, event_len, description_event);
+ break;
+ case NEW_LOAD_EVENT:
+ ev = new Load_log_event(buf, event_len, description_event);
+ break;
+ case ROTATE_EVENT:
+ ev = new Rotate_log_event(buf, event_len, description_event);
+ break;
#ifdef HAVE_REPLICATION
- case SLAVE_EVENT: /* can never happen (unused event) */
- ev = new Slave_log_event(buf, event_len);
- break;
+ case SLAVE_EVENT: /* can never happen (unused event) */
+ ev = new Slave_log_event(buf, event_len);
+ break;
#endif /* HAVE_REPLICATION */
- case CREATE_FILE_EVENT:
- ev = new Create_file_log_event(buf, event_len, description_event);
- break;
- case APPEND_BLOCK_EVENT:
- ev = new Append_block_log_event(buf, event_len, description_event);
- break;
- case DELETE_FILE_EVENT:
- ev = new Delete_file_log_event(buf, event_len, description_event);
- break;
- case EXEC_LOAD_EVENT:
- ev = new Execute_load_log_event(buf, event_len, description_event);
- break;
- case START_EVENT_V3: /* this is sent only by MySQL <=4.x */
- ev = new Start_log_event_v3(buf, description_event);
- break;
- case STOP_EVENT:
- ev = new Stop_log_event(buf, description_event);
- break;
- case INTVAR_EVENT:
- ev = new Intvar_log_event(buf, description_event);
- break;
- case XID_EVENT:
- ev = new Xid_log_event(buf, description_event);
- break;
- case RAND_EVENT:
- ev = new Rand_log_event(buf, description_event);
- break;
- case USER_VAR_EVENT:
- ev = new User_var_log_event(buf, description_event);
- break;
- case FORMAT_DESCRIPTION_EVENT:
- ev = new Format_description_log_event(buf, event_len, description_event);
- break;
+ case CREATE_FILE_EVENT:
+ ev = new Create_file_log_event(buf, event_len, description_event);
+ break;
+ case APPEND_BLOCK_EVENT:
+ ev = new Append_block_log_event(buf, event_len, description_event);
+ break;
+ case DELETE_FILE_EVENT:
+ ev = new Delete_file_log_event(buf, event_len, description_event);
+ break;
+ case EXEC_LOAD_EVENT:
+ ev = new Execute_load_log_event(buf, event_len, description_event);
+ break;
+ case START_EVENT_V3: /* this is sent only by MySQL <=4.x */
+ ev = new Start_log_event_v3(buf, description_event);
+ break;
+ case STOP_EVENT:
+ ev = new Stop_log_event(buf, description_event);
+ break;
+ case INTVAR_EVENT:
+ ev = new Intvar_log_event(buf, description_event);
+ break;
+ case XID_EVENT:
+ ev = new Xid_log_event(buf, description_event);
+ break;
+ case RAND_EVENT:
+ ev = new Rand_log_event(buf, description_event);
+ break;
+ case USER_VAR_EVENT:
+ ev = new User_var_log_event(buf, description_event);
+ break;
+ case FORMAT_DESCRIPTION_EVENT:
+ ev = new Format_description_log_event(buf, event_len, description_event);
+ break;
#if defined(HAVE_REPLICATION)
- case PRE_GA_WRITE_ROWS_EVENT:
- ev = new Write_rows_log_event_old(buf, event_len, description_event);
- break;
- case PRE_GA_UPDATE_ROWS_EVENT:
- ev = new Update_rows_log_event_old(buf, event_len, description_event);
- break;
- case PRE_GA_DELETE_ROWS_EVENT:
- ev = new Delete_rows_log_event_old(buf, event_len, description_event);
- break;
- case WRITE_ROWS_EVENT:
- ev = new Write_rows_log_event(buf, event_len, description_event);
- break;
- case UPDATE_ROWS_EVENT:
- ev = new Update_rows_log_event(buf, event_len, description_event);
- break;
- case DELETE_ROWS_EVENT:
- ev = new Delete_rows_log_event(buf, event_len, description_event);
- break;
- case TABLE_MAP_EVENT:
- ev = new Table_map_log_event(buf, event_len, description_event);
- break;
+ case PRE_GA_WRITE_ROWS_EVENT:
+ ev = new Write_rows_log_event_old(buf, event_len, description_event);
+ break;
+ case PRE_GA_UPDATE_ROWS_EVENT:
+ ev = new Update_rows_log_event_old(buf, event_len, description_event);
+ break;
+ case PRE_GA_DELETE_ROWS_EVENT:
+ ev = new Delete_rows_log_event_old(buf, event_len, description_event);
+ break;
+ case WRITE_ROWS_EVENT:
+ ev = new Write_rows_log_event(buf, event_len, description_event);
+ break;
+ case UPDATE_ROWS_EVENT:
+ ev = new Update_rows_log_event(buf, event_len, description_event);
+ break;
+ case DELETE_ROWS_EVENT:
+ ev = new Delete_rows_log_event(buf, event_len, description_event);
+ break;
+ case TABLE_MAP_EVENT:
+ ev = new Table_map_log_event(buf, event_len, description_event);
+ break;
#endif
- case BEGIN_LOAD_QUERY_EVENT:
- ev = new Begin_load_query_log_event(buf, event_len, description_event);
- break;
- case EXECUTE_LOAD_QUERY_EVENT:
- ev= new Execute_load_query_log_event(buf, event_len, description_event);
- break;
- case INCIDENT_EVENT:
- ev = new Incident_log_event(buf, event_len, description_event);
- break;
- default:
- DBUG_PRINT("error",("Unknown event code: %d",
- (int) buf[EVENT_TYPE_OFFSET]));
- ev= NULL;
- break;
+ case BEGIN_LOAD_QUERY_EVENT:
+ ev = new Begin_load_query_log_event(buf, event_len, description_event);
+ break;
+ case EXECUTE_LOAD_QUERY_EVENT:
+ ev= new Execute_load_query_log_event(buf, event_len, description_event);
+ break;
+ case INCIDENT_EVENT:
+ ev = new Incident_log_event(buf, event_len, description_event);
+ break;
+ default:
+ DBUG_PRINT("error",("Unknown event code: %d",
+ (int) buf[EVENT_TYPE_OFFSET]));
+ ev= NULL;
+ break;
+ }
}
DBUG_PRINT("read_event", ("%s(type_code: %d; event_len: %d)",
@@ -1227,18 +1386,29 @@ void Log_event::print_timestamp(IO_CACHE* file, time_t* ts)
#endif /* MYSQL_CLIENT */
+#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION)
+inline Log_event::enum_skip_reason
+Log_event::continue_group(Relay_log_info *rli)
+{
+ if (rli->slave_skip_counter == 1)
+ return Log_event::EVENT_SKIP_IGNORE;
+ return Log_event::do_shall_skip(rli);
+}
+#endif
+
/**************************************************************************
Query_log_event methods
**************************************************************************/
#if defined(HAVE_REPLICATION) && !defined(MYSQL_CLIENT)
-/*
- Query_log_event::pack_info()
+/**
This (which is used only for SHOW BINLOG EVENTS) could be updated to
print SET @@session_var=. But this is not urgent, as SHOW BINLOG EVENTS is
only an information, it does not produce suitable queries to replay (for
example it does not print LOAD DATA INFILE).
+ @todo
+ show the catalog ??
*/
void Query_log_event::pack_info(Protocol *protocol)
@@ -1267,7 +1437,9 @@ void Query_log_event::pack_info(Protocol *protocol)
#ifndef MYSQL_CLIENT
-/* Utility function for the next method */
+/**
+ Utility function for the next method (Query_log_event::write()) .
+*/
static void write_str_with_code_and_len(char **dst, const char *src,
int len, uint code)
{
@@ -1279,10 +1451,10 @@ static void write_str_with_code_and_len(char **dst, const char *src,
}
-/*
- Query_log_event::write()
+/**
+ Query_log_event::write().
- NOTES:
+ @note
In this event we have to modify the header to have the correct
EVENT_LEN_OFFSET as we don't yet know how many status variables we
will print!
@@ -1290,6 +1462,11 @@ static void write_str_with_code_and_len(char **dst, const char *src,
bool Query_log_event::write(IO_CACHE* file)
{
+ /**
+ @todo if catalog can be of length FN_REFLEN==512, then we are not
+ replicating it correctly, since the length is stored in a byte
+ /sven
+ */
uchar buf[QUERY_HEADER_LEN+
1+4+ // code of flags2 and flags2
1+8+ // code of sql_mode and sql_mode
@@ -1454,9 +1631,7 @@ bool Query_log_event::write(IO_CACHE* file)
my_b_safe_write(file, (uchar*) query, q_len)) ? 1 : 0;
}
-/*
- Query_log_event::Query_log_event()
-
+/**
The simplest constructor that could possibly work. This is used for
creating static objects that have a special meaning and are invisible
to the log.
@@ -1510,12 +1685,17 @@ Query_log_event::Query_log_event(THD* thd_arg, const char* query_arg,
if (killed_status_arg == THD::KILLED_NO_VALUE)
killed_status_arg= thd_arg->killed;
error_code=
- (killed_status_arg == THD::NOT_KILLED) ? thd_arg->net.last_errno :
+ (killed_status_arg == THD::NOT_KILLED) ?
+ (thd_arg->is_error() ? thd_arg->main_da.sql_errno() : 0) :
((thd_arg->system_thread & SYSTEM_THREAD_DELAYED_INSERT) ? 0 :
thd_arg->killed_errno());
time(&end_time);
exec_time = (ulong) (end_time - thd_arg->start_time);
+ /**
+ @todo this means that if we have no catalog, then it is replicated
+ as an existing catalog of length zero. is that safe? /sven
+ */
catalog_len = (catalog) ? (uint32) strlen(catalog) : 0;
/* status_vars_len is set just before writing the event */
db_len = (db) ? (uint32) strlen(db) : 0;
@@ -1525,7 +1705,7 @@ Query_log_event::Query_log_event(THD* thd_arg, const char* query_arg,
/*
If we don't use flags2 for anything else than options contained in
thd_arg->options, it would be more efficient to flags2=thd_arg->options
- (OPTIONS_WRITTEN_TO_BINLOG would be used only at reading time).
+ (OPTIONS_WRITTEN_TO_BIN_LOG would be used only at reading time).
But it's likely that we don't want to use 32 bits for 3 bits; in the future
we will probably want to reclaim the 29 bits. So we need the &.
*/
@@ -1533,6 +1713,7 @@ Query_log_event::Query_log_event(THD* thd_arg, const char* query_arg,
DBUG_ASSERT(thd_arg->variables.character_set_client->number < 256*256);
DBUG_ASSERT(thd_arg->variables.collation_connection->number < 256*256);
DBUG_ASSERT(thd_arg->variables.collation_server->number < 256*256);
+ DBUG_ASSERT(thd_arg->variables.character_set_client->mbminlen == 1);
int2store(charset, thd_arg->variables.character_set_client->number);
int2store(charset+2, thd_arg->variables.collation_connection->number);
int2store(charset+4, thd_arg->variables.collation_server->number);
@@ -1556,18 +1737,48 @@ Query_log_event::Query_log_event(THD* thd_arg, const char* query_arg,
/* 2 utility functions for the next method */
-/*
- Get the pointer for a string (src) that contains the length in
- the first byte. Set the output string (dst) to the string value
- and place the length of the string in the byte after the string.
+/**
+ Read a string with length from memory.
+
+ This function reads the string-with-length stored at
+ <code>src</code> and extract the length into <code>*len</code> and
+ a pointer to the start of the string into <code>*dst</code>. The
+ string can then be copied using <code>memcpy()</code> with the
+ number of bytes given in <code>*len</code>.
+
+ @param src Pointer to variable holding a pointer to the memory to
+ read the string from.
+ @param dst Pointer to variable holding a pointer where the actual
+ string starts. Starting from this position, the string
+ can be copied using @c memcpy().
+ @param len Pointer to variable where the length will be stored.
+ @param end One-past-the-end of the memory where the string is
+ stored.
+
+ @return Zero if the entire string can be copied successfully,
+ @c UINT_MAX if the length could not be read from memory
+ (that is, if <code>*src >= end</code>), otherwise the
+ number of bytes that are missing to read the full
+ string, which happends <code>*dst + *len >= end</code>.
*/
-static void get_str_len_and_pointer(const Log_event::Byte **src,
- const char **dst,
- uint *len)
-{
- if ((*len= **src))
- *dst= (char *)*src + 1; // Will be copied later
- (*src)+= *len + 1;
+static int
+get_str_len_and_pointer(const Log_event::Byte **src,
+ const char **dst,
+ uint *len,
+ const Log_event::Byte *end)
+{
+ if (*src >= end)
+ return -1; // Will be UINT_MAX in two-complement arithmetics
+ uint length= **src;
+ if (length > 0)
+ {
+ if (*src + length >= end)
+ return *src + length - end + 1; // Number of bytes missing
+ *dst= (char *)*src + 1; // Will be copied later
+ }
+ *len= length;
+ *src+= length + 1;
+ return 0;
}
static void copy_str_and_move(const char **src,
@@ -1580,11 +1791,50 @@ static void copy_str_and_move(const char **src,
*(*dst)++= 0;
}
-/*
- Query_log_event::Query_log_event()
+
+#ifndef DBUG_OFF
+static char const *
+code_name(int code)
+{
+ static char buf[255];
+ switch (code) {
+ case Q_FLAGS2_CODE: return "Q_FLAGS2_CODE";
+ case Q_SQL_MODE_CODE: return "Q_SQL_MODE_CODE";
+ case Q_CATALOG_CODE: return "Q_CATALOG_CODE";
+ case Q_AUTO_INCREMENT: return "Q_AUTO_INCREMENT";
+ case Q_CHARSET_CODE: return "Q_CHARSET_CODE";
+ case Q_TIME_ZONE_CODE: return "Q_TIME_ZONE_CODE";
+ case Q_CATALOG_NZ_CODE: return "Q_CATALOG_NZ_CODE";
+ case Q_LC_TIME_NAMES_CODE: return "Q_LC_TIME_NAMES_CODE";
+ case Q_CHARSET_DATABASE_CODE: return "Q_CHARSET_DATABASE_CODE";
+ }
+ sprintf(buf, "CODE#%d", code);
+ return buf;
+}
+#endif
+
+/**
+ Macro to check that there is enough space to read from memory.
+
+ @param PTR Pointer to memory
+ @param END End of memory
+ @param CNT Number of bytes that should be read.
+ */
+#define CHECK_SPACE(PTR,END,CNT) \
+ do { \
+ DBUG_PRINT("info", ("Read %s", code_name(pos[-1]))); \
+ DBUG_ASSERT((PTR) + (CNT) <= (END)); \
+ if ((PTR) + (CNT) > (END)) { \
+ DBUG_PRINT("info", ("query= 0")); \
+ query= 0; \
+ DBUG_VOID_RETURN; \
+ } \
+ } while (0)
+
+
+/**
This is used by the SQL slave thread to prepare the event before execution.
*/
-
Query_log_event::Query_log_event(const char* buf, uint event_len,
const Format_description_log_event
*description_event,
@@ -1632,6 +1882,19 @@ Query_log_event::Query_log_event(const char* buf, uint event_len,
if (tmp)
{
status_vars_len= uint2korr(buf + Q_STATUS_VARS_LEN_OFFSET);
+ /*
+ Check if status variable length is corrupt and will lead to very
+ wrong data. We could be even more strict and require data_len to
+ be even bigger, but this will suffice to catch most corruption
+ errors that can lead to a crash.
+ */
+ if (status_vars_len > min(data_len, MAX_SIZE_LOG_EVENT_STATUS))
+ {
+ DBUG_PRINT("info", ("status_vars_len (%u) > data_len (%lu); query= 0",
+ status_vars_len, data_len));
+ query= 0;
+ DBUG_VOID_RETURN;
+ }
data_len-= status_vars_len;
DBUG_PRINT("info", ("Query_log_event has status_vars_len: %u",
(uint) status_vars_len));
@@ -1651,6 +1914,7 @@ Query_log_event::Query_log_event(const char* buf, uint event_len,
{
switch (*pos++) {
case Q_FLAGS2_CODE:
+ CHECK_SPACE(pos, end, 4);
flags2_inited= 1;
flags2= uint4korr(pos);
DBUG_PRINT("info",("In Query_log_event, read flags2: %lu", (ulong) flags2));
@@ -1661,6 +1925,7 @@ Query_log_event::Query_log_event(const char* buf, uint event_len,
#ifndef DBUG_OFF
char buff[22];
#endif
+ CHECK_SPACE(pos, end, 8);
sql_mode_inited= 1;
sql_mode= (ulong) uint8korr(pos); // QQ: Fix when sql_mode is ulonglong
DBUG_PRINT("info",("In Query_log_event, read sql_mode: %s",
@@ -1669,15 +1934,24 @@ Query_log_event::Query_log_event(const char* buf, uint event_len,
break;
}
case Q_CATALOG_NZ_CODE:
- get_str_len_and_pointer(&pos, &catalog, &catalog_len);
+ DBUG_PRINT("info", ("case Q_CATALOG_NZ_CODE; pos: 0x%lx; end: 0x%lx",
+ (ulong) pos, (ulong) end));
+ if (get_str_len_and_pointer(&pos, &catalog, &catalog_len, end))
+ {
+ DBUG_PRINT("info", ("query= 0"));
+ query= 0;
+ DBUG_VOID_RETURN;
+ }
break;
case Q_AUTO_INCREMENT:
+ CHECK_SPACE(pos, end, 4);
auto_increment_increment= uint2korr(pos);
auto_increment_offset= uint2korr(pos+2);
pos+= 4;
break;
case Q_CHARSET_CODE:
{
+ CHECK_SPACE(pos, end, 6);
charset_inited= 1;
memcpy(charset, pos, 6);
pos+= 6;
@@ -1685,20 +1959,29 @@ Query_log_event::Query_log_event(const char* buf, uint event_len,
}
case Q_TIME_ZONE_CODE:
{
- get_str_len_and_pointer(&pos, &time_zone_str, &time_zone_len);
+ if (get_str_len_and_pointer(&pos, &time_zone_str, &time_zone_len, end))
+ {
+ DBUG_PRINT("info", ("Q_TIME_ZONE_CODE: query= 0"));
+ query= 0;
+ DBUG_VOID_RETURN;
+ }
break;
}
case Q_CATALOG_CODE: /* for 5.0.x where 0<=x<=3 masters */
+ CHECK_SPACE(pos, end, 1);
if ((catalog_len= *pos))
catalog= (char*) pos+1; // Will be copied later
+ CHECK_SPACE(pos, end, catalog_len + 2);
pos+= catalog_len+2; // leap over end 0
catalog_nz= 0; // catalog has end 0 in event
break;
case Q_LC_TIME_NAMES_CODE:
+ CHECK_SPACE(pos, end, 2);
lc_time_names_number= uint2korr(pos);
pos+= 2;
break;
case Q_CHARSET_DATABASE_CODE:
+ CHECK_SPACE(pos, end, 2);
charset_database_number= uint2korr(pos);
pos+= 2;
break;
@@ -1726,6 +2009,11 @@ Query_log_event::Query_log_event(const char* buf, uint event_len,
DBUG_VOID_RETURN;
if (catalog_len) // If catalog is given
{
+ /**
+ @todo we should clean up and do only copy_str_and_move; it
+ works for both cases. Then we can remove the catalog_nz
+ flag. /sven
+ */
if (likely(catalog_nz)) // true except if event comes from 5.0.0|1|2|3.
copy_str_and_move(&catalog, &start, catalog_len);
else
@@ -1738,6 +2026,13 @@ Query_log_event::Query_log_event(const char* buf, uint event_len,
if (time_zone_len)
copy_str_and_move(&time_zone_str, &start, time_zone_len);
+ /**
+ if time_zone_len or catalog_len are 0, then time_zone and catalog
+ are uninitialized at this point. shouldn't they point to the
+ zero-length null-terminated strings we allocated space for in the
+ my_alloc call above? /sven
+ */
+
/* A 2nd variable part; this is common to all versions */
memcpy((char*) start, end, data_len); // Copy db and query
start[data_len]= '\0'; // End query with \0 (For safetly)
@@ -1748,11 +2043,13 @@ Query_log_event::Query_log_event(const char* buf, uint event_len,
}
-/*
- Query_log_event::print()
-*/
-
#ifdef MYSQL_CLIENT
+/**
+ Query_log_event::print().
+
+ @todo
+ print the catalog ??
+*/
void Query_log_event::print_query_header(IO_CACHE* file,
PRINT_EVENT_INFO* print_event_info)
{
@@ -1920,7 +2217,7 @@ void Query_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info)
print_query_header(&cache, print_event_info);
my_b_write(&cache, (uchar*) query, q_len);
- my_b_printf(&cache, "%s\n", print_event_info->delimiter);
+ my_b_printf(&cache, "\n%s\n", print_event_info->delimiter);
}
#endif /* MYSQL_CLIENT */
@@ -1937,6 +2234,23 @@ int Query_log_event::do_apply_event(Relay_log_info const *rli)
}
+/**
+ @todo
+ Compare the values of "affected rows" around here. Something
+ like:
+ @code
+ if ((uint32) affected_in_event != (uint32) affected_on_slave)
+ {
+ sql_print_error("Slave: did not get the expected number of affected \
+ rows running query from master - expected %d, got %d (this numbers \
+ should have matched modulo 4294967296).", 0, ...);
+ thd->query_error = 1;
+ }
+ @endcode
+ We may also want an option to tell the slave to ignore "affected"
+ mismatch. This mismatch could be implemented with a new ER_ code, and
+ to ignore it you would use --slave-skip-errors...
+*/
int Query_log_event::do_apply_event(Relay_log_info const *rli,
const char *query_arg, uint32 q_len_arg)
{
@@ -2106,13 +2420,13 @@ and was aborted. There is a chance that your master is inconsistent at this \
point. If you are sure that your master is ok, run this query manually on the \
slave and then restart the slave with SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; \
START SLAVE; . Query: '%s'", expected_error, thd->query);
- thd->query_error= 1;
+ thd->is_slave_error= 1;
}
goto end;
}
/* If the query was not ignored, it is printed to the general log */
- if (thd->net.last_errno != ER_SLAVE_IGNORED_TABLE)
+ if (!thd->is_error() || thd->main_da.sql_errno() != ER_SLAVE_IGNORED_TABLE)
general_log_write(thd, COM_QUERY, thd->query, thd->query_length);
compare_errors:
@@ -2121,9 +2435,10 @@ compare_errors:
If we expected a non-zero error code, and we don't get the same error
code, and none of them should be ignored.
*/
- DBUG_PRINT("info",("expected_error: %d last_errno: %d",
- expected_error, thd->net.last_errno));
- if ((expected_error != (actual_error= thd->net.last_errno)) &&
+ actual_error= thd->is_error() ? thd->main_da.sql_errno() : 0;
+ DBUG_PRINT("info",("expected_error: %d sql_errno: %d",
+ expected_error, actual_error));
+ if ((expected_error != actual_error) &&
expected_error &&
!ignored_error_code(actual_error) &&
!ignored_error_code(expected_error))
@@ -2135,10 +2450,10 @@ Error on master: '%s' (%d), Error on slave: '%s' (%d). \
Default database: '%s'. Query: '%s'",
ER_SAFE(expected_error),
expected_error,
- actual_error ? thd->net.last_error: "no error",
+ actual_error ? thd->main_da.message() : "no error",
actual_error,
print_slave_db_safe(db), query_arg);
- thd->query_error= 1;
+ thd->is_slave_error= 1;
}
/*
If we get the same error code as expected, or they should be ignored.
@@ -2153,14 +2468,14 @@ Default database: '%s'. Query: '%s'",
/*
Other cases: mostly we expected no error and get one.
*/
- else if (thd->query_error || thd->is_fatal_error)
+ else if (thd->is_slave_error || thd->is_fatal_error)
{
rli->report(ERROR_LEVEL, actual_error,
"Error '%s' on query. Default database: '%s'. Query: '%s'",
- (actual_error ? thd->net.last_error :
+ (actual_error ? thd->main_da.message() :
"unexpected success or fatal error"),
print_slave_db_safe(thd->db), query_arg);
- thd->query_error= 1;
+ thd->is_slave_error= 1;
}
/*
@@ -2171,7 +2486,7 @@ Default database: '%s'. Query: '%s'",
sql_print_error("Slave: did not get the expected number of affected \
rows running query from master - expected %d, got %d (this numbers \
should have matched modulo 4294967296).", 0, ...);
- thd->query_error = 1;
+ thd->is_slave_error = 1;
}
We may also want an option to tell the slave to ignore "affected"
mismatch. This mismatch could be implemented with a new ER_ code, and
@@ -2200,6 +2515,7 @@ end:
*/
thd->catalog= 0;
thd->set_db(NULL, 0); /* will free the current database */
+ DBUG_PRINT("info", ("end: query= 0"));
thd->query= 0; // just to be sure
thd->query_length= 0;
VOID(pthread_mutex_unlock(&LOCK_thread_count));
@@ -2215,7 +2531,7 @@ end:
thd->first_successful_insert_id_in_prev_stmt= 0;
thd->stmt_depends_on_first_successful_insert_id_in_prev_stmt= 0;
free_root(thd->mem_root,MYF(MY_KEEP_PREALLOC));
- return thd->query_error;
+ return thd->is_slave_error;
}
int Query_log_event::do_update_pos(Relay_log_info *rli)
@@ -2235,6 +2551,30 @@ int Query_log_event::do_update_pos(Relay_log_info *rli)
}
+Log_event::enum_skip_reason
+Query_log_event::do_shall_skip(Relay_log_info *rli)
+{
+ DBUG_ENTER("Query_log_event::do_shall_skip");
+ DBUG_PRINT("debug", ("query: %s; q_len: %d", query, q_len));
+ DBUG_ASSERT(query && q_len > 0);
+
+ if (rli->slave_skip_counter > 0)
+ {
+ if (strcmp("BEGIN", query) == 0)
+ {
+ thd->options|= OPTION_BEGIN;
+ DBUG_RETURN(Log_event::continue_group(rli));
+ }
+
+ if (strcmp("COMMIT", query) == 0 || strcmp("ROLLBACK", query) == 0)
+ {
+ thd->options&= ~OPTION_BEGIN;
+ DBUG_RETURN(Log_event::EVENT_SKIP_COUNT);
+ }
+ }
+ DBUG_RETURN(Log_event::do_shall_skip(rli));
+}
+
#endif
@@ -2322,6 +2662,14 @@ void Start_log_event_v3::print(FILE* file, PRINT_EVENT_INFO* print_event_info)
my_b_printf(&cache,"ROLLBACK%s\n", print_event_info->delimiter);
#endif
}
+ if (temp_buf &&
+ print_event_info->base64_output_mode != BASE64_OUTPUT_NEVER &&
+ !print_event_info->short_form)
+ {
+ my_b_printf(&cache, "BINLOG '\n");
+ print_base64(&cache, print_event_info, FALSE);
+ print_event_info->printed_fd_event= TRUE;
+ }
DBUG_VOID_RETURN;
}
#endif /* MYSQL_CLIENT */
@@ -2367,30 +2715,31 @@ bool Start_log_event_v3::write(IO_CACHE* file)
#endif
-/*
- Start_log_event_v3::do_apply_event()
+#if defined(HAVE_REPLICATION) && !defined(MYSQL_CLIENT)
+/**
+ Start_log_event_v3::do_apply_event() .
The master started
- IMPLEMENTATION
+ IMPLEMENTATION
- To handle the case where the master died without having time to write
- DROP TEMPORARY TABLE, DO RELEASE_LOCK (prepared statements' deletion is
- TODO), we clean up all temporary tables that we got, if we are sure we
- can (see below).
+ DROP TEMPORARY TABLE, DO RELEASE_LOCK (prepared statements' deletion is
+ TODO), we clean up all temporary tables that we got, if we are sure we
+ can (see below).
- TODO
+ @todo
- Remove all active user locks.
- Guilhem 2003-06: this is true but not urgent: the worst it can cause is
- the use of a bit of memory for a user lock which will not be used
- anymore. If the user lock is later used, the old one will be released. In
- other words, no deadlock problem.
+ Guilhem 2003-06: this is true but not urgent: the worst it can cause is
+ the use of a bit of memory for a user lock which will not be used
+ anymore. If the user lock is later used, the old one will be released. In
+ other words, no deadlock problem.
*/
-#if defined(HAVE_REPLICATION) && !defined(MYSQL_CLIENT)
int Start_log_event_v3::do_apply_event(Relay_log_info const *rli)
{
DBUG_ENTER("Start_log_event_v3::do_apply_event");
- switch (binlog_version) {
+ switch (binlog_version)
+ {
case 3:
case 4:
/*
@@ -2438,28 +2787,25 @@ int Start_log_event_v3::do_apply_event(Relay_log_info const *rli)
Format_description_log_event methods
****************************************************************************/
-/*
+/**
Format_description_log_event 1st ctor.
- SYNOPSIS
- Format_description_log_event::Format_description_log_event
- binlog_version the binlog version for which we want to build
- an event. Can be 1 (=MySQL 3.23), 3 (=4.0.x
- x>=2 and 4.1) or 4 (MySQL 5.0). Note that the
- old 4.0 (binlog version 2) is not supported;
- it should not be used for replication with
- 5.0.
-
- DESCRIPTION
Ctor. Can be used to create the event to write to the binary log (when the
server starts or when FLUSH LOGS), or to create artificial events to parse
binlogs from MySQL 3.23 or 4.x.
When in a client, only the 2nd use is possible.
+
+ @param binlog_version the binlog version for which we want to build
+ an event. Can be 1 (=MySQL 3.23), 3 (=4.0.x
+ x>=2 and 4.1) or 4 (MySQL 5.0). Note that the
+ old 4.0 (binlog version 2) is not supported;
+ it should not be used for replication with
+ 5.0.
*/
Format_description_log_event::
Format_description_log_event(uint8 binlog_ver, const char* server_ver)
- :Start_log_event_v3()
+ :Start_log_event_v3(), event_type_permutation(0)
{
binlog_version= binlog_ver;
switch (binlog_ver) {
@@ -2562,18 +2908,20 @@ Format_description_log_event(uint8 binlog_ver, const char* server_ver)
}
-/*
+/**
The problem with this constructor is that the fixed header may have a
length different from this version, but we don't know this length as we
have not read the Format_description_log_event which says it, yet. This
length is in the post-header of the event, but we don't know where the
post-header starts.
+
So this type of event HAS to:
- either have the header's length at the beginning (in the header, at a
fixed position which will never be changed), not in the post-header. That
would make the header be "shifted" compared to other events.
- or have a header of size LOG_EVENT_MINIMAL_HEADER_LEN (19), in all future
versions, so that we know for sure.
+
I (Guilhem) chose the 2nd solution. Rotate has the same constraint (because
it is sent before Format_description_log_event).
*/
@@ -2584,7 +2932,7 @@ Format_description_log_event(const char* buf,
const
Format_description_log_event*
description_event)
- :Start_log_event_v3(buf, description_event)
+ :Start_log_event_v3(buf, description_event), event_type_permutation(0)
{
DBUG_ENTER("Format_description_log_event::Format_description_log_event(char*,...)");
buf+= LOG_EVENT_MINIMAL_HEADER_LEN;
@@ -2599,6 +2947,65 @@ Format_description_log_event(const char* buf,
number_of_event_types*
sizeof(*post_header_len), MYF(0));
calc_server_version_split();
+
+ /*
+ In some previous versions, the events were given other event type
+ id numbers than in the present version. When replicating from such
+ a version, we therefore set up an array that maps those id numbers
+ to the id numbers of the present server.
+
+ If post_header_len is null, it means malloc failed, and is_valid
+ will fail, so there is no need to do anything.
+
+ The trees which have wrong event id's are:
+ mysql-5.1-wl2325-5.0-drop6p13-alpha, mysql-5.1-wl2325-5.0-drop6,
+ mysql-5.1-wl2325-5.0, mysql-5.1-wl2325-no-dd (`grep -C2
+ BEGIN_LOAD_QUERY_EVENT /home/bk/ * /sql/log_event.h`). The
+ corresponding version (`grep mysql, configure.in` in those trees)
+ strings are 5.2.2-a_drop6p13-alpha, 5.2.2-a_drop6p13c,
+ 5.1.5-a_drop5p20, 5.1.2-a_drop5p5.
+ */
+ if (post_header_len &&
+ (strncmp(server_version, "5.1.2-a_drop5", 13) == 0 ||
+ strncmp(server_version, "5.1.5-a_drop5", 13) == 0 ||
+ strncmp(server_version, "5.2.2-a_drop6", 13) == 0))
+ {
+ if (number_of_event_types != 22)
+ {
+ DBUG_PRINT("info", (" number_of_event_types=%d",
+ number_of_event_types));
+ /* this makes is_valid() return false. */
+ my_free(post_header_len, MYF(MY_ALLOW_ZERO_PTR));
+ post_header_len= NULL;
+ DBUG_VOID_RETURN;
+ }
+ static const uint8 perm[23]=
+ {
+ UNKNOWN_EVENT, START_EVENT_V3, QUERY_EVENT, STOP_EVENT, ROTATE_EVENT,
+ INTVAR_EVENT, LOAD_EVENT, SLAVE_EVENT, CREATE_FILE_EVENT,
+ APPEND_BLOCK_EVENT, EXEC_LOAD_EVENT, DELETE_FILE_EVENT,
+ NEW_LOAD_EVENT,
+ RAND_EVENT, USER_VAR_EVENT,
+ FORMAT_DESCRIPTION_EVENT,
+ TABLE_MAP_EVENT,
+ PRE_GA_WRITE_ROWS_EVENT,
+ PRE_GA_UPDATE_ROWS_EVENT,
+ PRE_GA_DELETE_ROWS_EVENT,
+ XID_EVENT,
+ BEGIN_LOAD_QUERY_EVENT,
+ EXECUTE_LOAD_QUERY_EVENT,
+ };
+ event_type_permutation= perm;
+ /*
+ Since we use (permuted) event id's to index the post_header_len
+ array, we need to permute the post_header_len array too.
+ */
+ uint8 post_header_len_temp[23];
+ for (int i= 1; i < 23; i++)
+ post_header_len_temp[perm[i] - 1]= post_header_len[i - 1];
+ for (int i= 0; i < 22; i++)
+ post_header_len[i] = post_header_len_temp[i];
+ }
DBUG_VOID_RETURN;
}
@@ -2774,7 +3181,7 @@ uint Load_log_event::get_query_buffer_length()
21 + sql_ex.field_term_len*4 + 2 + // " FIELDS TERMINATED BY 'str'"
23 + sql_ex.enclosed_len*4 + 2 + // " OPTIONALLY ENCLOSED BY 'str'"
12 + sql_ex.escaped_len*4 + 2 + // " ESCAPED BY 'str'"
- 21 + sql_ex.line_term_len*4 + 2 + // " FIELDS TERMINATED BY 'str'"
+ 21 + sql_ex.line_term_len*4 + 2 + // " LINES TERMINATED BY 'str'"
19 + sql_ex.line_start_len*4 + 2 + // " LINES STARTING BY 'str'"
15 + 22 + // " IGNORE xxx LINES"
3 + (num_fields-1)*2 + field_block_len; // " (field1, field2, ...)"
@@ -3008,14 +3415,11 @@ Load_log_event::Load_log_event(THD *thd_arg, sql_exchange *ex,
#endif /* !MYSQL_CLIENT */
-/*
- Load_log_event::Load_log_event()
-
- NOTE
+/**
+ @note
The caller must do buf[event_len] = 0 before he starts using the
constructed event.
*/
-
Load_log_event::Load_log_event(const char *buf, uint event_len,
const Format_description_log_event *description_event)
:Log_event(buf, description_event), num_fields(0), fields(0),
@@ -3190,17 +3594,18 @@ void Load_log_event::print(FILE* file_arg, PRINT_EVENT_INFO* print_event_info,
}
#endif /* MYSQL_CLIENT */
+#ifndef MYSQL_CLIENT
-/*
+/**
Load_log_event::set_fields()
- Note that this function can not use the member variable
- for the database, since LOAD DATA INFILE on the slave
- can be for a different database than the current one.
- This is the reason for the affected_db argument to this method.
+ @note
+ This function can not use the member variable
+ for the database, since LOAD DATA INFILE on the slave
+ can be for a different database than the current one.
+ This is the reason for the affected_db argument to this method.
*/
-#ifndef MYSQL_CLIENT
void Load_log_event::set_fields(const char* affected_db,
List<Item> &field_list,
Name_resolution_context *context)
@@ -3218,32 +3623,33 @@ void Load_log_event::set_fields(const char* affected_db,
#if defined(HAVE_REPLICATION) && !defined(MYSQL_CLIENT)
-/*
- Does the data loading job when executing a LOAD DATA on the slave
-
- SYNOPSIS
- Load_log_event::do_apply_event
- net
- rli
- use_rli_only_for_errors - if set to 1, rli is provided to
- Load_log_event::do_apply_event
- only for this function to have
- RPL_LOG_NAME and
- rli->last_slave_error, both being
- used by error reports. rli's
- position advancing is skipped (done
- by the caller which is
- Execute_load_log_event::do_apply_event).
- - if set to 0, rli is provided for
- full use, i.e. for error reports and
- position advancing.
-
- DESCRIPTION
- Does the data loading job when executing a LOAD DATA on the slave
-
- RETURN VALUE
+/**
+ Does the data loading job when executing a LOAD DATA on the slave.
+
+ @param net
+ @param rli
+ @param use_rli_only_for_errors If set to 1, rli is provided to
+ Load_log_event::exec_event only for this
+ function to have RPL_LOG_NAME and
+ rli->last_slave_error, both being used by
+ error reports. rli's position advancing
+ is skipped (done by the caller which is
+ Execute_load_log_event::exec_event).
+ If set to 0, rli is provided for full use,
+ i.e. for error reports and position
+ advancing.
+
+ @todo
+ fix this; this can be done by testing rules in
+ Create_file_log_event::exec_event() and then discarding Append_block and
+ al.
+ @todo
+ this is a bug - this needs to be moved to the I/O thread
+
+ @retval
0 Success
- 1 Failure
+ @retval
+ 1 Failure
*/
int Load_log_event::do_apply_event(NET* net, Relay_log_info const *rli,
@@ -3255,7 +3661,7 @@ int Load_log_event::do_apply_event(NET* net, Relay_log_info const *rli,
thd->set_db(new_db.str, new_db.length);
DBUG_ASSERT(thd->query == 0);
thd->query_length= 0; // Should not be needed
- thd->query_error= 0;
+ thd->is_slave_error= 0;
clear_all_errors(thd, const_cast<Relay_log_info*>(rli));
/* see Query_log_event::do_apply_event() and BUG#13360 */
@@ -3429,7 +3835,7 @@ int Load_log_event::do_apply_event(NET* net, Relay_log_info const *rli,
List<Item> tmp_list;
if (mysql_load(thd, &ex, &tables, field_list, tmp_list, tmp_list,
handle_dup, ignore, net != 0))
- thd->query_error= 1;
+ thd->is_slave_error= 1;
if (thd->cuted_fields)
{
/* log_pos is the position of the LOAD event in the master log */
@@ -3468,15 +3874,18 @@ error:
close_thread_tables(thd);
DBUG_EXECUTE_IF("LOAD_DATA_INFILE_has_fatal_error",
- thd->query_error= 0; thd->is_fatal_error= 1;);
+ thd->is_slave_error= 0; thd->is_fatal_error= 1;);
- if (thd->query_error)
+ if (thd->is_slave_error)
{
/* this err/sql_errno code is copy-paste from net_send_error() */
const char *err;
int sql_errno;
- if ((err=thd->net.last_error)[0])
- sql_errno=thd->net.last_errno;
+ if (thd->is_error())
+ {
+ err= thd->main_da.message();
+ sql_errno= thd->main_da.sql_errno();
+ }
else
{
sql_errno=ER_UNKNOWN_ERROR;
@@ -3619,24 +4028,21 @@ bool Rotate_log_event::write(IO_CACHE* file)
#endif
-/*
- Rotate_log_event::do_apply_event()
+#if defined(HAVE_REPLICATION) && !defined(MYSQL_CLIENT)
- Got a rotate log event from the master
+/*
+ Got a rotate log event from the master.
- IMPLEMENTATION
- This is mainly used so that we can later figure out the logname and
- position for the master.
+ This is mainly used so that we can later figure out the logname and
+ position for the master.
- We can't rotate the slave's BINlog as this will cause infinitive rotations
- in a A -> B -> A setup.
- The NOTES below is a wrong comment which will disappear when 4.1 is merged.
+ We can't rotate the slave's BINlog as this will cause infinitive rotations
+ in a A -> B -> A setup.
+ The NOTES below is a wrong comment which will disappear when 4.1 is merged.
- RETURN VALUES
+ @retval
0 ok
*/
-
-#if defined(HAVE_REPLICATION) && !defined(MYSQL_CLIENT)
int Rotate_log_event::do_update_pos(Relay_log_info *rli)
{
DBUG_ENTER("Rotate_log_event::do_update_pos");
@@ -3871,10 +4277,7 @@ Intvar_log_event::do_shall_skip(Relay_log_info *rli)
that we do not change the value of the slave skip counter since it
will be decreased by the following insert event.
*/
- if (rli->slave_skip_counter == 1)
- return Log_event::EVENT_SKIP_IGNORE;
- else
- return Log_event::do_shall_skip(rli);
+ return continue_group(rli);
}
#endif
@@ -3970,10 +4373,7 @@ Rand_log_event::do_shall_skip(Relay_log_info *rli)
that we do not change the value of the slave skip counter since it
will be decreased by the following insert event.
*/
- if (rli->slave_skip_counter == 1)
- return Log_event::EVENT_SKIP_IGNORE;
- else
- return Log_event::do_shall_skip(rli);
+ return continue_group(rli);
}
#endif /* !MYSQL_CLIENT */
@@ -3994,12 +4394,12 @@ void Xid_log_event::pack_info(Protocol *protocol)
}
#endif
-/*
- NOTE it's ok not to use int8store here,
+/**
+ @note
+ It's ok not to use int8store here,
as long as xid_t::set(ulonglong) and
- xid_t::get_my_xid doesn't do it either
-
- we don't care about actual values of xids as long as
+ xid_t::get_my_xid doesn't do it either.
+ We don't care about actual values of xids as long as
identical numbers compare identically
*/
@@ -4016,6 +4416,7 @@ Xid_log_event(const char* buf,
#ifndef MYSQL_CLIENT
bool Xid_log_event::write(IO_CACHE* file)
{
+ DBUG_EXECUTE_IF("do_not_write_xid", return 0;);
return write_header(file, sizeof(xid)) ||
my_b_safe_write(file, (uchar*) &xid, sizeof(xid));
}
@@ -4049,6 +4450,17 @@ int Xid_log_event::do_apply_event(Relay_log_info const *rli)
"COMMIT /* implicit, from Xid_log_event */");
return end_trans(thd, COMMIT);
}
+
+Log_event::enum_skip_reason
+Xid_log_event::do_shall_skip(Relay_log_info *rli)
+{
+ DBUG_ENTER("Xid_log_event::do_shall_skip");
+ if (rli->slave_skip_counter > 0) {
+ thd->options&= ~OPTION_BEGIN;
+ DBUG_RETURN(Log_event::EVENT_SKIP_COUNT);
+ }
+ DBUG_RETURN(Log_event::do_shall_skip(rli));
+}
#endif /* !MYSQL_CLIENT */
@@ -4258,8 +4670,10 @@ void User_var_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info)
switch (type) {
case REAL_RESULT:
double real_val;
+ char real_buf[FMT_G_BUFSIZE(14)];
float8get(real_val, val);
- my_b_printf(&cache, ":=%.14g%s\n", real_val, print_event_info->delimiter);
+ my_sprintf(real_buf, (real_buf, "%.14g", real_val));
+ my_b_printf(&cache, ":=%s%s\n", real_buf, print_event_info->delimiter);
break;
case INT_RESULT:
char int_buf[22];
@@ -4427,10 +4841,7 @@ User_var_log_event::do_shall_skip(Relay_log_info *rli)
that we do not change the value of the slave skip counter since it
will be decreased by the following insert event.
*/
- if (rli->slave_skip_counter == 1)
- return Log_event::EVENT_SKIP_IGNORE;
- else
- return Log_event::do_shall_skip(rli);
+ return continue_group(rli);
}
#endif /* !MYSQL_CLIENT */
@@ -4470,6 +4881,10 @@ void Slave_log_event::pack_info(Protocol *protocol)
#ifndef MYSQL_CLIENT
+/**
+ @todo
+ re-write this better without holding both locks at the same time
+*/
Slave_log_event::Slave_log_event(THD* thd_arg,
Relay_log_info* rli)
:Log_event(thd_arg, 0, 0) , mem_pool(0), master_host(0)
@@ -4565,7 +4980,7 @@ void Slave_log_event::init_from_mem_pool(int data_size)
}
-/* This code is not used, so has not been updated to be format-tolerant */
+/** This code is not used, so has not been updated to be format-tolerant. */
Slave_log_event::Slave_log_event(const char* buf, uint event_len)
:Log_event(buf,0) /*unused event*/ ,mem_pool(0),master_host(0)
{
@@ -4613,9 +5028,8 @@ void Stop_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info)
#endif /* MYSQL_CLIENT */
+#ifndef MYSQL_CLIENT
/*
- Stop_log_event::do_apply_event()
-
The master stopped. We used to clean up all temporary tables but
this is useless as, as the master has shut down properly, it has
written all DROP TEMPORARY TABLE (prepared statements' deletion is
@@ -4626,8 +5040,6 @@ void Stop_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info)
Start_log_event_v3::do_apply_event(), not here. Because if we come
here, the master was sane.
*/
-
-#ifndef MYSQL_CLIENT
int Stop_log_event::do_update_pos(Relay_log_info *rli)
{
/*
@@ -4665,7 +5077,7 @@ Create_file_log_event(THD* thd_arg, sql_exchange* ex,
const char* db_arg, const char* table_name_arg,
List<Item>& fields_arg, enum enum_duplicates handle_dup,
bool ignore,
- char* block_arg, uint block_len_arg, bool using_trans)
+ uchar* block_arg, uint block_len_arg, bool using_trans)
:Load_log_event(thd_arg,ex,db_arg,table_name_arg,fields_arg,handle_dup, ignore,
using_trans),
fake_base(0), block(block_arg), event_buf(0), block_len(block_len_arg),
@@ -4763,8 +5175,8 @@ Create_file_log_event::Create_file_log_event(const char* buf, uint len,
Load_log_event::get_data_size() +
create_file_header_len + 1);
if (len < block_offset)
- return;
- block = (char*)buf + block_offset;
+ DBUG_VOID_RETURN;
+ block = (uchar*)buf + block_offset;
block_len = len - block_offset;
}
else
@@ -4852,7 +5264,7 @@ int Create_file_log_event::do_apply_event(Relay_log_info const *rli)
bzero((char*)&file, sizeof(file));
fname_buf= strmov(proc_info, "Making temp file ");
ext= slave_load_file_stem(fname_buf, file_id, server_id, ".info");
- thd->proc_info= proc_info;
+ thd_proc_info(thd, proc_info);
my_delete(fname_buf, MYF(0)); // old copy may exist already
if ((fd= my_create(fname_buf, CREATE_MODE,
O_WRONLY | O_BINARY | O_EXCL | O_NOFOLLOW,
@@ -4905,7 +5317,7 @@ err:
end_io_cache(&file);
if (fd >= 0)
my_close(fd, MYF(0));
- thd->proc_info= 0;
+ thd_proc_info(thd, 0);
return error == 0;
}
#endif /* defined(HAVE_REPLICATION) && !defined(MYSQL_CLIENT) */
@@ -4922,7 +5334,7 @@ err:
#ifndef MYSQL_CLIENT
Append_block_log_event::Append_block_log_event(THD *thd_arg,
const char *db_arg,
- char *block_arg,
+ uchar *block_arg,
uint block_len_arg,
bool using_trans)
:Log_event(thd_arg,0, using_trans), block(block_arg),
@@ -4948,7 +5360,7 @@ Append_block_log_event::Append_block_log_event(const char* buf, uint len,
if (len < total_header_len)
DBUG_VOID_RETURN;
file_id= uint4korr(buf + common_header_len + AB_FILE_ID_OFFSET);
- block= (char*)buf + total_header_len;
+ block= (uchar*)buf + total_header_len;
block_len= len - total_header_len;
DBUG_VOID_RETURN;
}
@@ -5027,7 +5439,7 @@ int Append_block_log_event::do_apply_event(Relay_log_info const *rli)
fname= strmov(proc_info, "Making temp file ");
slave_load_file_stem(fname, file_id, server_id, ".data");
- thd->proc_info= proc_info;
+ thd_proc_info(thd, proc_info);
if (get_create_or_append())
{
my_delete(fname, MYF(0)); // old copy may exist already
@@ -5061,7 +5473,7 @@ int Append_block_log_event::do_apply_event(Relay_log_info const *rli)
err:
if (fd >= 0)
my_close(fd, MYF(0));
- thd->proc_info= 0;
+ thd_proc_info(thd, 0);
DBUG_RETURN(error);
}
#endif
@@ -5340,7 +5752,7 @@ err:
#ifndef MYSQL_CLIENT
Begin_load_query_log_event::
-Begin_load_query_log_event(THD* thd_arg, const char* db_arg, char* block_arg,
+Begin_load_query_log_event(THD* thd_arg, const char* db_arg, uchar* block_arg,
uint block_len_arg, bool using_trans)
:Append_block_log_event(thd_arg, db_arg, block_arg, block_len_arg,
using_trans)
@@ -5366,6 +5778,19 @@ int Begin_load_query_log_event::get_create_or_append() const
#endif /* defined( HAVE_REPLICATION) && !defined(MYSQL_CLIENT) */
+#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION)
+Log_event::enum_skip_reason
+Begin_load_query_log_event::do_shall_skip(Relay_log_info *rli)
+{
+ /*
+ If the slave skip counter is 1, then we should not start executing
+ on the next event.
+ */
+ return continue_group(rli);
+}
+#endif
+
+
/**************************************************************************
Execute_load_query_log_event methods
**************************************************************************/
@@ -5374,12 +5799,13 @@ int Begin_load_query_log_event::get_create_or_append() const
#ifndef MYSQL_CLIENT
Execute_load_query_log_event::
Execute_load_query_log_event(THD *thd_arg, const char* query_arg,
- ulong query_length_arg, uint fn_pos_start_arg,
- uint fn_pos_end_arg,
- enum_load_dup_handling dup_handling_arg,
- bool using_trans, bool suppress_use):
+ ulong query_length_arg, uint fn_pos_start_arg,
+ uint fn_pos_end_arg,
+ enum_load_dup_handling dup_handling_arg,
+ bool using_trans, bool suppress_use,
+ THD::killed_state killed_err_arg):
Query_log_event(thd_arg, query_arg, query_length_arg, using_trans,
- suppress_use),
+ suppress_use, killed_err_arg),
file_id(thd_arg->file_id), fn_pos_start(fn_pos_start_arg),
fn_pos_end(fn_pos_end_arg), dup_handling(dup_handling_arg)
{
@@ -5437,7 +5863,9 @@ void Execute_load_query_log_event::print(FILE* file,
print(file, print_event_info, 0);
}
-
+/**
+ Prints the query as LOAD DATA LOCAL and with rewritten filename.
+*/
void Execute_load_query_log_event::print(FILE* file,
PRINT_EVENT_INFO* print_event_info,
const char *local_fname)
@@ -5456,12 +5884,12 @@ void Execute_load_query_log_event::print(FILE* file,
my_b_printf(&cache, " REPLACE");
my_b_printf(&cache, " INTO");
my_b_write(&cache, (uchar*) query + fn_pos_end, q_len-fn_pos_end);
- my_b_printf(&cache, "%s\n", print_event_info->delimiter);
+ my_b_printf(&cache, "\n%s\n", print_event_info->delimiter);
}
else
{
my_b_write(&cache, (uchar*) query, q_len);
- my_b_printf(&cache, "%s\n", print_event_info->delimiter);
+ my_b_printf(&cache, "\n%s\n", print_event_info->delimiter);
}
if (!print_event_info->short_form)
@@ -5577,6 +6005,10 @@ bool sql_ex_info::write_data(IO_CACHE* file)
}
else
{
+ /**
+ @todo This is sensitive to field padding. We should write a
+ char[7], not an old_sql_ex. /sven
+ */
old_sql_ex old_ex;
old_ex.field_term= *field_term;
old_ex.enclosed= *enclosed;
@@ -5655,7 +6087,7 @@ Rows_log_event::Rows_log_event(THD *thd_arg, TABLE *tbl_arg, ulong tid,
m_width(tbl_arg ? tbl_arg->s->fields : 1),
m_rows_buf(0), m_rows_cur(0), m_rows_end(0), m_flags(0)
#ifdef HAVE_REPLICATION
- ,m_key(NULL), m_curr_row(NULL), m_curr_row_end(NULL)
+ , m_curr_row(NULL), m_curr_row_end(NULL), m_key(NULL)
#endif
{
/*
@@ -5703,7 +6135,7 @@ Rows_log_event::Rows_log_event(const char *buf, uint event_len,
#endif
m_table_id(0), m_rows_buf(0), m_rows_cur(0), m_rows_end(0)
#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION)
- ,m_key(NULL), m_curr_row(NULL), m_curr_row_end(NULL)
+ , m_curr_row(NULL), m_curr_row_end(NULL), m_key(NULL)
#endif
{
DBUG_ENTER("Rows_log_event::Rows_log_event(const char*,...)");
@@ -5900,7 +6332,6 @@ int Rows_log_event::do_apply_event(Relay_log_info const *rli)
{
DBUG_ENTER("Rows_log_event::do_apply_event(Relay_log_info*)");
int error= 0;
-
/*
If m_table_id == ~0UL, then we have a dummy event that does not
contain any data. In that case, we just remove all tables in the
@@ -5946,21 +6377,39 @@ int Rows_log_event::do_apply_event(Relay_log_info const *rli)
*/
lex_start(thd);
+ /*
+ There are a few flags that are replicated with each row event.
+ Make sure to set/clear them before executing the main body of
+ the event.
+ */
+ if (get_flags(NO_FOREIGN_KEY_CHECKS_F))
+ thd->options|= OPTION_NO_FOREIGN_KEY_CHECKS;
+ else
+ thd->options&= ~OPTION_NO_FOREIGN_KEY_CHECKS;
+
+ if (get_flags(RELAXED_UNIQUE_CHECKS_F))
+ thd->options|= OPTION_RELAXED_UNIQUE_CHECKS;
+ else
+ thd->options&= ~OPTION_RELAXED_UNIQUE_CHECKS;
+ /* A small test to verify that objects have consistent types */
+ DBUG_ASSERT(sizeof(thd->options) == sizeof(OPTION_RELAXED_UNIQUE_CHECKS));
+
+
while ((error= lock_tables(thd, rli->tables_to_lock,
rli->tables_to_lock_count, &need_reopen)))
{
if (!need_reopen)
{
- if (thd->query_error || thd->is_fatal_error)
+ if (thd->is_slave_error || thd->is_fatal_error)
{
/*
Error reporting borrowed from Query_log_event with many excessive
simplifications (we don't honour --slave-skip-errors)
*/
- uint actual_error= thd->net.last_errno;
+ uint actual_error= thd->main_da.sql_errno();
rli->report(ERROR_LEVEL, actual_error,
"Error '%s' in %s event: when locking tables",
- (actual_error ? thd->net.last_error :
+ (actual_error ? thd->main_da.message():
"unexpected success or fatal error"),
get_type_str());
thd->is_fatal_error= 1;
@@ -5995,18 +6444,18 @@ int Rows_log_event::do_apply_event(Relay_log_info const *rli)
uint tables_count= rli->tables_to_lock_count;
if ((error= open_tables(thd, &tables, &tables_count, 0)))
{
- if (thd->query_error || thd->is_fatal_error)
+ if (thd->is_slave_error || thd->is_fatal_error)
{
/*
Error reporting borrowed from Query_log_event with many excessive
simplifications (we don't honour --slave-skip-errors)
*/
- uint actual_error= thd->net.last_errno;
+ uint actual_error= thd->main_da.sql_errno();
rli->report(ERROR_LEVEL, actual_error,
"Error '%s' on reopening tables",
- (actual_error ? thd->net.last_error :
+ (actual_error ? thd->main_da.message() :
"unexpected success or fatal error"));
- thd->query_error= 1;
+ thd->is_slave_error= 1;
}
const_cast<Relay_log_info*>(rli)->clear_tables_to_lock();
DBUG_RETURN(error);
@@ -6029,7 +6478,7 @@ int Rows_log_event::do_apply_event(Relay_log_info const *rli)
{
mysql_unlock_tables(thd, thd->lock);
thd->lock= 0;
- thd->query_error= 1;
+ thd->is_slave_error= 1;
const_cast<Relay_log_info*>(rli)->clear_tables_to_lock();
DBUG_RETURN(ERR_BAD_TABLE_DEF);
}
@@ -6080,22 +6529,6 @@ int Rows_log_event::do_apply_event(Relay_log_info const *rli)
So we call set_time(), like in SBR. Presently it changes nothing.
*/
thd->set_time((time_t)when);
- /*
- There are a few flags that are replicated with each row event.
- Make sure to set/clear them before executing the main body of
- the event.
- */
- if (get_flags(NO_FOREIGN_KEY_CHECKS_F))
- thd->options|= OPTION_NO_FOREIGN_KEY_CHECKS;
- else
- thd->options&= ~OPTION_NO_FOREIGN_KEY_CHECKS;
-
- if (get_flags(RELAXED_UNIQUE_CHECKS_F))
- thd->options|= OPTION_RELAXED_UNIQUE_CHECKS;
- else
- thd->options&= ~OPTION_RELAXED_UNIQUE_CHECKS;
- /* A small test to verify that objects have consistent types */
- DBUG_ASSERT(sizeof(thd->options) == sizeof(OPTION_RELAXED_UNIQUE_CHECKS));
/*
Now we are in a statement and will stay in a statement until we
@@ -6128,8 +6561,9 @@ int Rows_log_event::do_apply_event(Relay_log_info const *rli)
if (!get_flags(COMPLETE_ROWS_F))
bitmap_intersect(table->write_set,&m_cols);
+ this->slave_exec_mode= slave_exec_mode_options; // fix the mode
+
// Do event specific preparations
-
error= do_before_row_operations(rli);
// row processing loop
@@ -6146,20 +6580,44 @@ int Rows_log_event::do_apply_event(Relay_log_info const *rli)
table->in_use = old_thd;
switch (error)
{
- /* Some recoverable errors */
- case HA_ERR_RECORD_CHANGED:
- case HA_ERR_KEY_NOT_FOUND: /* Idempotency support: OK if
- tuple does not exist */
- error= 0;
case 0:
break;
-
+ /*
+ The following list of "idempotent" errors
+ means that an error from the list might happen
+ because of idempotent (more than once)
+ applying of a binlog file.
+ Notice, that binlog has a ddl operation its
+ second applying may cause
+
+ case HA_ERR_TABLE_DEF_CHANGED:
+ case HA_ERR_CANNOT_ADD_FOREIGN:
+
+ which are not included into to the list.
+ */
+ case HA_ERR_RECORD_CHANGED:
+ case HA_ERR_RECORD_DELETED:
+ case HA_ERR_KEY_NOT_FOUND:
+ case HA_ERR_END_OF_FILE:
+ case HA_ERR_FOUND_DUPP_KEY:
+ case HA_ERR_FOUND_DUPP_UNIQUE:
+ case HA_ERR_FOREIGN_DUPLICATE_KEY:
+ case HA_ERR_NO_REFERENCED_ROW:
+ case HA_ERR_ROW_IS_REFERENCED:
+
+ DBUG_PRINT("info", ("error: %s", HA_ERR(error)));
+ if (bit_is_set(slave_exec_mode, SLAVE_EXEC_MODE_IDEMPOTENT) == 1)
+ {
+ if (global_system_variables.log_warnings)
+ slave_rows_error_report(WARNING_LEVEL, error, rli, thd, table,
+ get_type_str(),
+ RPL_LOG_NAME, (ulong) log_pos);
+ error= 0;
+ }
+ break;
+
default:
- rli->report(ERROR_LEVEL, thd->net.last_errno,
- "Error in %s event: row application failed. %s",
- get_type_str(),
- thd->net.last_error ? thd->net.last_error : "");
- thd->query_error= 1;
+ thd->is_slave_error= 1;
break;
}
@@ -6170,6 +6628,10 @@ int Rows_log_event::do_apply_event(Relay_log_info const *rli)
m_curr_row_end.
*/
+ DBUG_PRINT("info", ("error: %d", error));
+ DBUG_PRINT("info", ("curr_row: 0x%lu; curr_row_end: 0x%lu; rows_end: 0x%lu",
+ (ulong) m_curr_row, (ulong) m_curr_row_end, (ulong) m_rows_end));
+
if (!m_curr_row_end && !error)
unpack_current_row(rli);
@@ -6198,16 +6660,14 @@ int Rows_log_event::do_apply_event(Relay_log_info const *rli)
*/
if (rli->tables_to_lock && get_flags(STMT_END_F))
const_cast<Relay_log_info*>(rli)->clear_tables_to_lock();
-
+
if (error)
{ /* error has occured during the transaction */
- rli->report(ERROR_LEVEL, thd->net.last_errno,
- "Error in %s event: error during transaction execution "
- "on table %s.%s. %s",
- get_type_str(), table->s->db.str,
- table->s->table_name.str,
- thd->net.last_error ? thd->net.last_error : "");
-
+ slave_rows_error_report(ERROR_LEVEL, error, rli, thd, table,
+ get_type_str(), RPL_LOG_NAME, (ulong) log_pos);
+ }
+ if (error)
+ {
/*
If one day we honour --skip-slave-errors in row-based replication, and
the error should be skipped, then we would clear mappings, rollback,
@@ -6221,7 +6681,7 @@ int Rows_log_event::do_apply_event(Relay_log_info const *rli)
*/
thd->reset_current_stmt_binlog_row_based();
const_cast<Relay_log_info*>(rli)->cleanup_context(thd, error);
- thd->query_error= 1;
+ thd->is_slave_error= 1;
DBUG_RETURN(error);
}
@@ -6319,6 +6779,7 @@ Rows_log_event::do_update_pos(Relay_log_info *rli)
*/
thd->reset_current_stmt_binlog_row_based();
+
rli->cleanup_context(thd, 0);
if (error == 0)
{
@@ -6469,17 +6930,29 @@ void Rows_log_event::print_helper(FILE *file,
data) in the table map are initialized as zero (0). The array size is the
same as the columns for the table on the slave.
+ Additionally, values saved for field metadata on the master are saved as a
+ string of bytes (uchar) in the binlog. A field may require 1 or more bytes
+ to store the information. In cases where values require multiple bytes
+ (e.g. values > 255), the endian-safe methods are used to properly encode
+ the values on the master and decode them on the slave. When the field
+ metadata values are captured on the slave, they are stored in an array of
+ type uint16. This allows the least number of casts to prevent casting bugs
+ when the field metadata is used in comparisons of field attributes. When
+ the field metadata is used for calculating addresses in pointer math, the
+ type used is uint32.
*/
+#if !defined(MYSQL_CLIENT)
/**
Save the field metadata based on the real_type of the field.
The metadata saved depends on the type of the field. Some fields
store a single byte for pack_length() while others store two bytes
for field_length (max length).
- @retval 0 Ok.
+ @retval 0 Ok.
- TODO: We may want to consider changing the encoding of the information.
+ @todo
+ We may want to consider changing the encoding of the information.
Currently, the code attempts to minimize the number of bytes written to
the tablemap. There are at least two other alternatives; 1) using
net_store_length() to store the data allowing it to choose the number of
@@ -6494,7 +6967,6 @@ void Rows_log_event::print_helper(FILE *file,
is less wasteful for space but does waste 1 byte for every field that does
not encode 2 parts.
*/
-#if !defined(MYSQL_CLIENT)
int Table_map_log_event::save_field_metadata()
{
DBUG_ENTER("Table_map_log_event::save_field_metadata");
@@ -6519,9 +6991,15 @@ Table_map_log_event::Table_map_log_event(THD *thd, TABLE *tbl, ulong tid,
m_dblen(m_dbnam ? tbl->s->db.length : 0),
m_tblnam(tbl->s->table_name.str),
m_tbllen(tbl->s->table_name.length),
- m_colcnt(tbl->s->fields), m_field_metadata(0),
- m_field_metadata_size(0), m_memory(NULL), m_meta_memory(NULL), m_data_size(0),
- m_table_id(tid), m_null_bits(0), m_flags(flags)
+ m_colcnt(tbl->s->fields),
+ m_memory(NULL),
+ m_table_id(tid),
+ m_flags(flags),
+ m_data_size(0),
+ m_field_metadata(0),
+ m_field_metadata_size(0),
+ m_null_bits(0),
+ m_meta_memory(NULL)
{
DBUG_ASSERT(m_table_id != ~0UL);
/*
@@ -6798,19 +7276,19 @@ int Table_map_log_event::do_apply_event(Relay_log_info const *rli)
TABLE_LIST *tmp_table_list= table_list;
if ((error= open_tables(thd, &tmp_table_list, &count, 0)))
{
- if (thd->query_error || thd->is_fatal_error)
+ if (thd->is_slave_error || thd->is_fatal_error)
{
/*
Error reporting borrowed from Query_log_event with many excessive
simplifications (we don't honour --slave-skip-errors)
*/
- uint actual_error= thd->net.last_errno;
+ uint actual_error= thd->main_da.sql_errno();
rli->report(ERROR_LEVEL, actual_error,
"Error '%s' on opening table `%s`.`%s`",
- (actual_error ? thd->net.last_error :
+ (actual_error ? thd->main_da.message() :
"unexpected success or fatal error"),
table_list->db, table_list->table_name);
- thd->query_error= 1;
+ thd->is_slave_error= 1;
}
goto err;
}
@@ -6860,10 +7338,7 @@ Table_map_log_event::do_shall_skip(Relay_log_info *rli)
If the slave skip counter is 1, then we should not start executing
on the next event.
*/
- if (rli->slave_skip_counter == 1)
- return Log_event::EVENT_SKIP_IGNORE;
- else
- return Log_event::do_shall_skip(rli);
+ return continue_group(rli);
}
int Table_map_log_event::do_update_pos(Relay_log_info *rli)
@@ -6994,43 +7469,50 @@ Write_rows_log_event::do_before_row_operations(const Slave_reporting_capability
{
int error= 0;
- /*
- We are using REPLACE semantics and not INSERT IGNORE semantics
- when writing rows, that is: new rows replace old rows. We need to
- inform the storage engine that it should use this behaviour.
+ /**
+ todo: to introduce a property for the event (handler?) which forces
+ applying the event in the replace (idempotent) fashion.
*/
+ if (bit_is_set(slave_exec_mode, SLAVE_EXEC_MODE_IDEMPOTENT) == 1 ||
+ m_table->s->db_type()->db_type == DB_TYPE_NDBCLUSTER)
+ {
+ /*
+ We are using REPLACE semantics and not INSERT IGNORE semantics
+ when writing rows, that is: new rows replace old rows. We need to
+ inform the storage engine that it should use this behaviour.
+ */
+
+ /* Tell the storage engine that we are using REPLACE semantics. */
+ thd->lex->duplicates= DUP_REPLACE;
+
+ /*
+ Pretend we're executing a REPLACE command: this is needed for
+ InnoDB and NDB Cluster since they are not (properly) checking the
+ lex->duplicates flag.
+ */
+ thd->lex->sql_command= SQLCOM_REPLACE;
+ /*
+ Do not raise the error flag in case of hitting to an unique attribute
+ */
+ m_table->file->extra(HA_EXTRA_IGNORE_DUP_KEY);
+ /*
+ NDB specific: update from ndb master wrapped as Write_rows
+ so that the event should be applied to replace slave's row
+ */
+ m_table->file->extra(HA_EXTRA_WRITE_CAN_REPLACE);
+ /*
+ NDB specific: if update from ndb master wrapped as Write_rows
+ does not find the row it's assumed idempotent binlog applying
+ is taking place; don't raise the error.
+ */
+ m_table->file->extra(HA_EXTRA_IGNORE_NO_KEY);
+ /*
+ TODO: the cluster team (Tomas?) says that it's better if the engine knows
+ how many rows are going to be inserted, then it can allocate needed memory
+ from the start.
+ */
+ }
- /* Tell the storage engine that we are using REPLACE semantics. */
- thd->lex->duplicates= DUP_REPLACE;
-
- /*
- Pretend we're executing a REPLACE command: this is needed for
- InnoDB and NDB Cluster since they are not (properly) checking the
- lex->duplicates flag.
- */
- thd->lex->sql_command= SQLCOM_REPLACE;
- /*
- Do not raise the error flag in case of hitting to an unique attribute
- */
- m_table->file->extra(HA_EXTRA_IGNORE_DUP_KEY);
- /*
- NDB specific: update from ndb master wrapped as Write_rows
- */
- /*
- so that the event should be applied to replace slave's row
- */
- m_table->file->extra(HA_EXTRA_WRITE_CAN_REPLACE);
- /*
- NDB specific: if update from ndb master wrapped as Write_rows
- does not find the row it's assumed idempotent binlog applying
- is taking place; don't raise the error.
- */
- m_table->file->extra(HA_EXTRA_IGNORE_NO_KEY);
- /*
- TODO: the cluster team (Tomas?) says that it's better if the engine knows
- how many rows are going to be inserted, then it can allocate needed memory
- from the start.
- */
m_table->file->ha_start_bulk_insert(0);
/*
We need TIMESTAMP_NO_AUTO_SET otherwise ha_write_row() will not use fill
@@ -7052,18 +7534,23 @@ Write_rows_log_event::do_before_row_operations(const Slave_reporting_capability
}
int
-Write_rows_log_event::do_after_row_operations(const Slave_reporting_capability *const,
+Write_rows_log_event::do_after_row_operations(const Slave_reporting_capability *const,
int error)
{
int local_error= 0;
- m_table->file->extra(HA_EXTRA_NO_IGNORE_DUP_KEY);
- m_table->file->extra(HA_EXTRA_WRITE_CANNOT_REPLACE);
- /*
- reseting the extra with
- table->file->extra(HA_EXTRA_NO_IGNORE_NO_KEY);
- fires bug#27077
- todo: explain or fix
- */
+ if (bit_is_set(slave_exec_mode, SLAVE_EXEC_MODE_IDEMPOTENT) == 1 ||
+ m_table->s->db_type()->db_type == DB_TYPE_NDBCLUSTER)
+ {
+ m_table->file->extra(HA_EXTRA_NO_IGNORE_DUP_KEY);
+ m_table->file->extra(HA_EXTRA_WRITE_CANNOT_REPLACE);
+ /*
+ resetting the extra with
+ table->file->extra(HA_EXTRA_NO_IGNORE_NO_KEY);
+ fires bug#27077
+ explanation: file->reset() performs this duty
+ ultimately. Still todo: fix
+ */
+ }
if ((local_error= m_table->file->ha_end_bulk_insert()))
{
m_table->file->print_error(local_error, MYF(0));
@@ -7182,23 +7669,22 @@ Rows_log_event::write_row(const Relay_log_info *const rli,
while ((error= table->file->ha_write_row(table->record[0])))
{
- if (error == HA_ERR_LOCK_DEADLOCK || error == HA_ERR_LOCK_WAIT_TIMEOUT)
+ if (error == HA_ERR_LOCK_DEADLOCK ||
+ error == HA_ERR_LOCK_WAIT_TIMEOUT ||
+ (keynum= table->file->get_dup_key(error)) < 0 ||
+ !overwrite)
{
- table->file->print_error(error, MYF(0)); /* to check at exec_relay_log_event */
- DBUG_RETURN(error);
- }
- if ((keynum= table->file->get_dup_key(error)) < 0)
- {
- DBUG_PRINT("info",("Can't locate duplicate key (get_dup_key returns %d)",keynum));
- table->file->print_error(error, MYF(0));
+ DBUG_PRINT("info",("get_dup_key returns %d)", keynum));
/*
- We failed to retrieve the duplicate key
+ Deadlock, waiting for lock or just an error from the handler
+ such as HA_ERR_FOUND_DUPP_KEY when overwrite is false.
+ Retrieval of the duplicate key number may fail
- either because the error was not "duplicate key" error
- or because the information which key is not available
*/
+ table->file->print_error(error, MYF(0));
DBUG_RETURN(error);
}
-
/*
We need to retrieve the old row into record[1] to be able to
either update or delete the offending record. We either:
@@ -7336,11 +7822,16 @@ int
Write_rows_log_event::do_exec_row(const Relay_log_info *const rli)
{
DBUG_ASSERT(m_table != NULL);
- int error= write_row(rli, TRUE /* overwrite */);
+ int error=
+ write_row(rli, /* if 1 then overwrite */
+ bit_is_set(slave_exec_mode, SLAVE_EXEC_MODE_IDEMPOTENT) == 1);
+
+ if (error && !thd->is_error())
+ {
+ DBUG_ASSERT(0);
+ my_error(ER_UNKNOWN_ERROR, MYF(0));
+ }
- if (error && !thd->net.last_errno)
- thd->net.last_errno= error;
-
return error;
}
@@ -7377,6 +7868,9 @@ static bool record_compare(TABLE *table)
records. Check that the other engines also return correct records.
*/
+ DBUG_DUMP("record[0]", table->record[0], table->s->reclength);
+ DBUG_DUMP("record[1]", table->record[1], table->s->reclength);
+
bool result= FALSE;
uchar saved_x[2], saved_filler[2];
@@ -7465,7 +7959,7 @@ record_compare_exit:
int Rows_log_event::find_row(const Relay_log_info *rli)
{
- DBUG_ENTER("find_row");
+ DBUG_ENTER("Rows_log_event::find_row");
DBUG_ASSERT(m_table && m_table->in_use != NULL);
@@ -7694,7 +8188,7 @@ int Rows_log_event::find_row(const Relay_log_info *rli)
DBUG_DUMP("record found", table->record[0], table->s->reclength);
table->file->ha_rnd_end();
- DBUG_ASSERT(error == HA_ERR_END_OF_FILE || error == 0);
+ DBUG_ASSERT(error == HA_ERR_END_OF_FILE || error == HA_ERR_RECORD_DELETED || error == 0);
DBUG_RETURN(error);
}
@@ -7894,7 +8388,15 @@ Update_rows_log_event::do_exec_row(const Relay_log_info *const rli)
int error= find_row(rli);
if (error)
+ {
+ /*
+ We need to read the second image in the event of error to be
+ able to skip to the next pair of updates
+ */
+ m_curr_row= m_curr_row_end;
+ unpack_current_row(rli);
return error;
+ }
/*
This is the situation after locating BI:
diff --git a/sql/log_event.h b/sql/log_event.h
index 0c66d1b190f..efb8675780e 100644
--- a/sql/log_event.h
+++ b/sql/log_event.h
@@ -18,8 +18,10 @@
@{
@file
-
- Binary log event definitions.
+
+ @brief Binary log event definitions. This includes generic code
+ common to all types of log events, as well as specific code for each
+ type of log event.
*/
@@ -37,6 +39,23 @@
#include "rpl_reporting.h"
#endif
+/**
+ Either assert or return an error.
+
+ In debug build, the condition will be checked, but in non-debug
+ builds, the error code given will be returned instead.
+
+ @param COND Condition to check
+ @param ERRNO Error number to return in non-debug builds
+*/
+#ifdef DBUG_OFF
+#define ASSERT_OR_RETURN_ERROR(COND, ERRNO) \
+ do { if (!(COND)) return ERRNO; } while (0)
+#else
+#define ASSERT_OR_RETURN_ERROR(COND, ERRNO) \
+ DBUG_ASSERT(COND)
+#endif
+
#define LOG_READ_EOF -1
#define LOG_READ_BOGUS -2
#define LOG_READ_IO -3
@@ -394,15 +413,19 @@ struct sql_ex_info
#define LOG_EVENT_BINLOG_IN_USE_F 0x1
-/*
- If the query depends on the thread (for example: TEMPORARY TABLE).
- Currently this is used by mysqlbinlog to know it must print
- SET @@PSEUDO_THREAD_ID=xx; before the query (it would not hurt to print it
- for every query but this would be slow).
+/**
+ @def LOG_EVENT_THREAD_SPECIFIC_F
+
+ If the query depends on the thread (for example: TEMPORARY TABLE).
+ Currently this is used by mysqlbinlog to know it must print
+ SET @@PSEUDO_THREAD_ID=xx; before the query (it would not hurt to print it
+ for every query but this would be slow).
*/
#define LOG_EVENT_THREAD_SPECIFIC_F 0x4
-/*
+/**
+ @def LOG_EVENT_SUPPRESS_USE_F
+
Suppress the generation of 'USE' statements before the actual
statement. This flag should be set for any events that does not need
the current database set to function correctly. Most notable cases
@@ -421,23 +444,26 @@ struct sql_ex_info
*/
#define LOG_EVENT_UPDATE_TABLE_MAP_VERSION_F 0x10
-/*
- OPTIONS_WRITTEN_TO_BIN_LOG are the bits of thd->options which must be
- written to the binlog. OPTIONS_WRITTEN_TO_BINLOG could be written
- into the Format_description_log_event, so that if later we don't want
- to replicate a variable we did replicate, or the contrary, it's
- doable. But it should not be too hard to decide once for all of what
- we replicate and what we don't, among the fixed 32 bits of
- thd->options.
- I (Guilhem) have read through every option's usage, and it looks like
- OPTION_AUTO_IS_NULL and OPTION_NO_FOREIGN_KEYS are the only ones
- which alter how the query modifies the table. It's good to replicate
- OPTION_RELAXED_UNIQUE_CHECKS too because otherwise, the slave may
- insert data slower than the master, in InnoDB.
- OPTION_BIG_SELECTS is not needed (the slave thread runs with
- max_join_size=HA_POS_ERROR) and OPTION_BIG_TABLES is not needed
- either, as the manual says (because a too big in-memory temp table is
- automatically written to disk).
+/**
+ @def OPTIONS_WRITTEN_TO_BIN_LOG
+
+ OPTIONS_WRITTEN_TO_BIN_LOG are the bits of thd->options which must
+ be written to the binlog. OPTIONS_WRITTEN_TO_BIN_LOG could be
+ written into the Format_description_log_event, so that if later we
+ don't want to replicate a variable we did replicate, or the
+ contrary, it's doable. But it should not be too hard to decide once
+ for all of what we replicate and what we don't, among the fixed 32
+ bits of thd->options.
+
+ I (Guilhem) have read through every option's usage, and it looks
+ like OPTION_AUTO_IS_NULL and OPTION_NO_FOREIGN_KEYS are the only
+ ones which alter how the query modifies the table. It's good to
+ replicate OPTION_RELAXED_UNIQUE_CHECKS too because otherwise, the
+ slave may insert data slower than the master, in InnoDB.
+ OPTION_BIG_SELECTS is not needed (the slave thread runs with
+ max_join_size=HA_POS_ERROR) and OPTION_BIG_TABLES is not needed
+ either, as the manual says (because a too big in-memory temp table
+ is automatically written to disk).
*/
#define OPTIONS_WRITTEN_TO_BIN_LOG \
(OPTION_AUTO_IS_NULL | OPTION_NO_FOREIGN_KEY_CHECKS | \
@@ -452,6 +478,11 @@ struct sql_ex_info
#endif
#undef EXPECTED_OPTIONS /* You shouldn't use this one */
+/**
+ @enum Log_event_type
+
+ Enumeration type for the different types of log events.
+*/
enum Log_event_type
{
/*
@@ -536,6 +567,15 @@ class Format_description_log_event;
class Relay_log_info;
#ifdef MYSQL_CLIENT
+enum enum_base64_output_mode {
+ BASE64_OUTPUT_NEVER= 0,
+ BASE64_OUTPUT_AUTO= 1,
+ BASE64_OUTPUT_ALWAYS= 2,
+ BASE64_OUTPUT_UNSPEC= 3,
+ /* insert new output modes here */
+ BASE64_OUTPUT_MODE_COUNT
+};
+
/*
A structure for mysqlbinlog to know how to print events
@@ -569,7 +609,8 @@ typedef struct st_print_event_info
st_print_event_info()
:flags2_inited(0), sql_mode_inited(0),
auto_increment_increment(1),auto_increment_offset(1), charset_inited(0),
- lc_time_names_number(0), charset_database_number(0)
+ lc_time_names_number(0), charset_database_number(0),
+ base64_output_mode(BASE64_OUTPUT_UNSPEC), printed_fd_event(FALSE)
{
/*
Currently we only use static PRINT_EVENT_INFO objects, so zeroed at
@@ -596,7 +637,14 @@ typedef struct st_print_event_info
/* Settings on how to print the events */
bool short_form;
- bool base64_output;
+ enum_base64_output_mode base64_output_mode;
+ /*
+ This is set whenever a Format_description_event is printed.
+ Later, when an event is printed in base64, this flag is tested: if
+ no Format_description_event has been seen, it is unsafe to print
+ the base64 event, so an error message is generated.
+ */
+ bool printed_fd_event;
my_off_t hexdump_from;
uint8 common_header_len;
char delimiter[16];
@@ -612,13 +660,90 @@ typedef struct st_print_event_info
#endif
-/*****************************************************************************
-
- Log_event class
+/**
+ @class Log_event
This is the abstract base class for binary log events.
-
- ****************************************************************************/
+
+ @section Log_event_binary_format Binary Format
+
+ Any Log_event saved on disk consists of the following three
+ components.
+
+ @li Common-Header
+ @li Post-Header
+ @li Body
+
+ The Common-Header, documented below, always has the same form and
+ length within one version of MySQL. Each event type specifies a
+ form and length of the Post-Header common to all events of the type.
+ The Body may be of different form and length even for different
+ events of the same type. The binary formats of Post-Header and Body
+ are documented separately in each subclass. The binary format of
+ Common-Header is as follows.
+
+ <table>
+ <caption>Common-Header</caption>
+
+ <tr>
+ <th>Name</th>
+ <th>Format<br/></th>
+ <th>Description</th>
+ </tr>
+
+ <tr>
+ <td>timestamp</td>
+ <td>4 byte unsigned integer</td>
+ <td>The number of seconds since 1970.
+ </td>
+ </tr>
+
+ <tr>
+ <td>type</td>
+ <td>1 byte enumeration</td>
+ <td>See enum #Log_event_type.</td>
+ </tr>
+
+ <tr>
+ <td>master_id</td>
+ <td>4 byte integer</td>
+ <td>Server ID of the server that created the event.</td>
+ </tr>
+
+ <tr>
+ <td>total_size</td>
+ <td>4 byte integer</td>
+ <td>The total size of this event, in bytes. In other words, this
+ is the sum of the sizes of Common-Header, Post-Header, and Body.
+ </td>
+ </tr>
+
+ <tr>
+ <td>master_position</td>
+ <td>4 byte integer</td>
+ <td>The position of the next event in the master binary log, in
+ bytes from the beginning of the file.
+ </td>
+ </tr>
+
+ <tr>
+ <td>flags</td>
+ <td>2 byte bitfield</td>
+ <td>See Log_event::flags.</td>
+ </tr>
+ </table>
+
+ Summing up the numbers above, we see that the total size of the
+ common header is 19 bytes.
+
+ @subsection Log_event_endianness_and_string_formats Endianness and String Formats
+
+ All numbers, whether they are 16-, 32-, or 64-bit, are stored in
+ little endian, i.e., the least significant byte first.
+
+ Strings are stored in various formats. The format of each string is
+ documented separately.
+*/
class Log_event
{
public:
@@ -692,8 +817,8 @@ public:
*/
uint32 server_id;
- /*
- Some 16 flags. Look above for LOG_EVENT_TIME_F,
+ /**
+ Some 16 flags. See the definitions above for LOG_EVENT_TIME_F,
LOG_EVENT_FORCED_ROTATE_F, LOG_EVENT_THREAD_SPECIFIC_F, and
LOG_EVENT_SUPPRESS_USE_F for notes.
*/
@@ -701,6 +826,12 @@ public:
bool cache_stmt;
+ /**
+ A storage to cache the global system variable's value.
+ Handling of a separate event will be governed its member.
+ */
+ ulong slave_exec_mode;
+
#ifndef MYSQL_CLIENT
THD* thd;
@@ -822,7 +953,13 @@ public:
const char **error,
const Format_description_log_event
*description_event);
- /* returns the human readable name of the event's type */
+ /**
+ Returns the human readable name of the given event type.
+ */
+ static const char* get_type_str(Log_event_type type);
+ /**
+ Returns the human readable name of this event's type.
+ */
const char* get_type_str();
/* Return start of query time or current time */
@@ -871,6 +1008,25 @@ public:
protected:
/**
+ Helper function to ignore an event w.r.t. the slave skip counter.
+
+ This function can be used inside do_shall_skip() for functions
+ that cannot end a group. If the slave skip counter is 1 when
+ seeing such an event, the event shall be ignored, the counter
+ left intact, and processing continue with the next event.
+
+ A typical usage is:
+ @code
+ enum_skip_reason do_shall_skip(Relay_log_info *rli) {
+ return continue_group(rli);
+ }
+ @endcode
+
+ @return Skip reason
+ */
+ enum_skip_reason continue_group(Relay_log_info *rli);
+
+ /**
Primitive to apply an event to the database.
This is where the change to the database is made.
@@ -950,6 +1106,7 @@ protected:
#endif
};
+
/*
One class for each type of event.
Two constructors for each class:
@@ -963,13 +1120,332 @@ protected:
mysqlbinlog. This constructor must be format-tolerant.
*/
-/*****************************************************************************
-
- Query Log Event class
-
- Logs SQL queries
+/**
+ @class Query_log_event
+
+ Logs SQL queries.
+
+ @section Query_log_event_binary_format Binary format
+
+ The Post-Header has five components:
+
+ <table>
+ <caption>Post-Header for Query_log_event</caption>
+
+ <tr>
+ <th>Name</th>
+ <th>Size<br/></th>
+ <th>Description</th>
+ </tr>
+
+ <tr>
+ <td>slave_proxy_id</td>
+ <td>4 byte unsigned integer</td>
+ <td>An integer identifying the client thread, which is unique on
+ the server. (Note, however, that two threads on different servers
+ may have the same slave_proxy_id.) This is used when a client
+ thread creates a temporary table. Temporary tables are local to
+ the client, and the slave_proxy_id is used to distinguish
+ temporary tables belonging to different clients.
+ </td>
+ </tr>
+
+ <tr>
+ <td>exec_time</td>
+ <td>4 byte integer</td>
+ <td>???TODO</td>
+ </tr>
+
+ <tr>
+ <td>db_len</td>
+ <td>1 byte integer</td>
+ <td>The length of the name of the currently selected
+ database.
+ </td>
+ </tr>
+
+ <tr>
+ <td>error_code</td>
+ <td>2 byte integer</td>
+ <td>Error code generated by the master. If the master fails, the
+ slave will fail with the same error code, except for the error
+ codes ER_DB_CREATE_EXISTS==1007 and ER_DB_DROP_EXISTS==1008.
+ </td>
+ </tr>
+
+ <tr>
+ <td>status_vars_len</td>
+ <td>2 byte integer</td>
+ <td>The length of the status_vars block of the Body, in bytes. See
+ <a href="#query_log_event_status_vars">below</a>.
+ </td>
+ </tr>
+
+ <tr>
+ <td>Post-Header-For-Derived</td>
+ <td>0 bytes</td>
+ <td>This field is only written by the subclass
+ Execute_load_query_log_event. In this base class, it takes 0
+ bytes. See separate documentation for
+ Execute_load_query_log_event.
+ </td>
+ </tr>
+ </table>
+
+ The Body has the following components:
+
+ <table>
+ <caption>Body for Query_log_event</caption>
+
+ <tr>
+ <th>Name</th>
+ <th>Size<br/></th>
+ <th>Description</th>
+ </tr>
+
+ <tr>
+ <td><a name="query_log_event_status_vars" /> status_vars</td>
+ <td>variable length</td>
+ <td>Zero or more status variables. Each status variable consists
+ of one byte identifying the variable stored, followed by the value
+ of the variable. The possible variables are listed separately in
+ the table below. MySQL always writes events in the order defined
+ below; however, it is capable of reading them in any order.
+ </td>
+ </tr>
+
+ <tr>
+ <td>db</td>
+ <td>db_len+1</td>
+ <td>The currently selected database, as a null-terminated string.
+
+ (The trailing zero is redundant since the length is already known;
+ it is db_len from Post-Header.)
+ </td>
+ </tr>
+
+ <tr>
+ <td>query</td>
+ <td>variable length string without trailing zero, extending to the
+ end of the event (determined by the length field of the
+ Common-Header)
+ </td>
+ <td>The SQL query.</td>
+ </tr>
+ </table>
+
+ The following table lists the status variables that may appear in
+ the status_vars field.
+
+ <table>
+ <caption>Status variables for Query_log_event</caption>
+
+ <tr>
+ <th>Status variable</th>
+ <th>1-byte identifier</th>
+ <th>Size<br/></th>
+ <th>Description</th>
+ </tr>
+
+ <tr>
+ <td>flags2</td>
+ <td>Q_FLAGS2_CODE == 0</td>
+ <td>4 byte bitfield</td>
+ <td>The flags in thd->options, binary AND-ed with
+ OPTIONS_WRITTEN_TO_BIN_LOG. The thd->options bitfield contains
+ options for SELECT. OPTIONS_WRITTEN identifies those options that
+ need to be written to the binlog (not all do). Specifically,
+ OPTIONS_WRITTEN_TO_BIN_LOG equals (OPTION_AUTO_IS_NULL |
+ OPTION_NO_FOREIGN_KEY_CHECKS | OPTION_RELAXED_UNIQUE_CHECKS |
+ OPTION_NOT_AUTOCOMMIT), or 0x0c084000 in hex.
+
+ These flags correspond to the SQL variables SQL_AUTO_IS_NULL,
+ FOREIGN_KEY_CHECKS, UNIQUE_CHECKS, and AUTOCOMMIT, documented in
+ the "SET Syntax" section of the MySQL Manual.
+
+ This field is always written to the binlog in version >= 5.0, and
+ never written in version < 5.0.
+ </td>
+ </tr>
+
+ <tr>
+ <td>sql_mode</td>
+ <td>Q_SQL_MODE_CODE == 1</td>
+ <td>8 byte integer</td>
+ <td>The sql_mode variable. See the section "SQL Modes" in the
+ MySQL manual, and see mysql_priv.h for a list of the possible
+ flags. Currently (2007-10-04), the following flags are available:
+ <pre>
+ MODE_REAL_AS_FLOAT==0x1
+ MODE_PIPES_AS_CONCAT==0x2
+ MODE_ANSI_QUOTES==0x4
+ MODE_IGNORE_SPACE==0x8
+ MODE_NOT_USED==0x10
+ MODE_ONLY_FULL_GROUP_BY==0x20
+ MODE_NO_UNSIGNED_SUBTRACTION==0x40
+ MODE_NO_DIR_IN_CREATE==0x80
+ MODE_POSTGRESQL==0x100
+ MODE_ORACLE==0x200
+ MODE_MSSQL==0x400
+ MODE_DB2==0x800
+ MODE_MAXDB==0x1000
+ MODE_NO_KEY_OPTIONS==0x2000
+ MODE_NO_TABLE_OPTIONS==0x4000
+ MODE_NO_FIELD_OPTIONS==0x8000
+ MODE_MYSQL323==0x10000
+ MODE_MYSQL323==0x20000
+ MODE_MYSQL40==0x40000
+ MODE_ANSI==0x80000
+ MODE_NO_AUTO_VALUE_ON_ZERO==0x100000
+ MODE_NO_BACKSLASH_ESCAPES==0x200000
+ MODE_STRICT_TRANS_TABLES==0x400000
+ MODE_STRICT_ALL_TABLES==0x800000
+ MODE_NO_ZERO_IN_DATE==0x1000000
+ MODE_NO_ZERO_DATE==0x2000000
+ MODE_INVALID_DATES==0x4000000
+ MODE_ERROR_FOR_DIVISION_BY_ZERO==0x8000000
+ MODE_TRADITIONAL==0x10000000
+ MODE_NO_AUTO_CREATE_USER==0x20000000
+ MODE_HIGH_NOT_PRECEDENCE==0x40000000
+ MODE_PAD_CHAR_TO_FULL_LENGTH==0x80000000
+ </pre>
+ All these flags are replicated from the server. However, all
+ flags except MODE_NO_DIR_IN_CREATE are honored by the slave; the
+ slave always preserves its old value of MODE_NO_DIR_IN_CREATE.
+ For a rationale, see comment in Query_log_event::do_apply_event in
+ log_event.cc.
+
+ This field is always written to the binlog.
+ </td>
+ </tr>
+
+ <tr>
+ <td>catalog</td>
+ <td>Q_CATALOG_NZ_CODE == 6</td>
+ <td>Variable-length string: the length in bytes (1 byte) followed
+ by the characters (at most 255 bytes)
+ </td>
+ <td>Stores the client's current catalog. Every database belongs
+ to a catalog, the same way that every table belongs to a
+ database. Currently, there is only one catalog, 'std'.
+
+ This field is written if the length of the catalog is > 0;
+ otherwise it is not written.
+ </td>
+ </tr>
+
+ <tr>
+ <td>auto_increment</td>
+ <td>Q_AUTO_INCREMENT == 3</td>
+ <td>two 2 byte unsigned integers, totally 2+2=4 bytes</td>
+
+ <td>The two variables auto_increment_increment and
+ auto_increment_offset, in that order. For more information, see
+ "System variables" in the MySQL manual.
+
+ This field is written if auto_increment>1; otherwise it is not
+ written.
+ </td>
+ </tr>
+
+ <tr>
+ <td>charset</td>
+ <td>Q_CHARSET_CODE == 4</td>
+ <td>three 2-byte unsigned integers (i.e., 6 bytes)</td>
+ <td>The three variables character_set_client,
+ collation_connection, and collation_server, in that order.
+ `character_set_client' is a code identifying the character set and
+ collation used by the client to encode the query.
+ `collation_connection' identifies the character set and collation
+ that the master converts the query to when it receives it; this is
+ useful when comparing literal strings. `collation_server' is the
+ default character set and collation used when a new database is
+ created.
+
+ See also "Connection Character Sets and Collations" in the MySQL
+ 5.1 manual.
+
+ All three variables are codes identifying a (character set,
+ collation) pair. To see which codes map to which pairs, run the
+ query "SELECT id, character_set_name, collation_name FROM
+ COLLATIONS".
+
+ Cf. Q_CHARSET_DATABASE_NUMBER below.
+
+ This field is always written.
+ </td>
+ </tr>
+
+ <tr>
+ <td>time_zone</td>
+ <td>Q_TIME_ZONE_CODE == 5</td>
+ <td>Variable-length string: the length in bytes (1 byte) followed
+ by the characters (at most 255 bytes).
+ <td>The time_zone of the master.
+
+ See also "System Variables" and "MySQL Server Time Zone Support"
+ in the MySQL manual.
+
+ This field is written if the length of the time zone string is >
+ 0; otherwise, it is not written.
+ </td>
+ </tr>
+
+ <tr>
+ <td>lc_time_names_number</td>
+ <td>Q_LC_TIME_NAMES_CODE == 7</td>
+ <td>2 byte integer</td>
+ <td>A code identifying a table of month and day names. The
+ mapping from codes to languages is defined in sql_locale.cc.
+
+ This field is written if it is != 0, i.e., if the locale is not
+ en_US.
+ </td>
+ </tr>
+
+ <tr>
+ <td>charset_database_number</td>
+ <td>Q_CHARSET_DATABASE_NUMBER == 8</td>
+ <td>2 byte integer</td>
+
+ <td>The value of the collation_database system variable (in the
+ source code stored in thd->variables.collation_database), which
+ holds the code for a (character set, collation) pair as described
+ above (see Q_CHARSET_CODE).
+
+ `collation_database' was used in old versions (???WHEN). Its
+ value was loaded when issuing a "use db" command and could be
+ changed by issuing a "SET collation_database=xxx" command. It
+ used to affect the "LOAD DATA INFILE" and "CREATE TABLE" commands.
+
+ In newer versions, "CREATE TABLE" has been changed to take the
+ character set from the database of the created table, rather than
+ the database of the current database. This makes a difference
+ when creating a table in another database than the current one.
+ "LOAD DATA INFILE" has not yet changed to do this, but there are
+ plans to eventually do it, and to make collation_database
+ read-only.
+
+ This field is written if it is not 0.
+ </td>
+ </tr>
+ </table>
+
+ @subsection Query_log_event_notes_on_previous_versions Notes on Previous Versions
+
+ @li Status vars were introduced in version 5.0. To read earlier
+ versions correctly, check the length of the Post-Header.
+
+ @li The status variable Q_CATALOG_CODE == 2 existed in MySQL 5.0.x,
+ where 0<=x<=3. It was identical to Q_CATALOG_CODE, except that the
+ string had a trailing '\0'. The '\0' was removed in 5.0.4 since it
+ was redundant (the string length is stored before the string). The
+ Q_CATALOG_CODE will never be written by a new master, but can still
+ be understood by a new slave.
+
+ @li See Q_CHARSET_DATABASE_NUMBER in the table above.
- ****************************************************************************/
+*/
class Query_log_event: public Log_event
{
protected:
@@ -1027,7 +1503,7 @@ public:
/*
'flags2' is a second set of flags (on top of those in Log_event), for
session variables. These are thd->options which is & against a mask
- (OPTIONS_WRITTEN_TO_BINLOG).
+ (OPTIONS_WRITTEN_TO_BIN_LOG).
flags2_inited helps make a difference between flags2==0 (3.23 or 4.x
master, we don't know flags2, so use the slave server's global options) and
flags2==0 (5.0 master, we know this has a meaning of flags all down which
@@ -1086,6 +1562,7 @@ public:
public: /* !!! Public in this patch to allow old usage */
#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION)
+ virtual enum_skip_reason do_shall_skip(Relay_log_info *rli);
virtual int do_apply_event(Relay_log_info const *rli);
virtual int do_update_pos(Relay_log_info *rli);
@@ -1096,13 +1573,16 @@ public: /* !!! Public in this patch to allow old usage */
};
-/*****************************************************************************
+/**
+ @class Muted_query_log_event
- Muted Query Log Event class
+ Pretends to log SQL queries, but doesn't actually do so.
- Pretends to Log SQL queries, but doesn't actually do so.
+ @section Muted_query_log_event_binary_format Binary Format
- ****************************************************************************/
+ This log event is not stored, and thus the binary format is 0 bytes
+ long. Note that not even the Common-Header is stored.
+*/
class Muted_query_log_event: public Query_log_event
{
public:
@@ -1119,14 +1599,54 @@ public:
#ifdef HAVE_REPLICATION
-/*****************************************************************************
+/**
+ @class Slave_log_event
- Slave Log Event class
Note that this class is currently not used at all; no code writes a
- Slave_log_event (though some code in repl_failsafe.cc reads Slave_log_event).
- So it's not a problem if this code is not maintained.
-
- ****************************************************************************/
+ Slave_log_event (though some code in repl_failsafe.cc reads
+ Slave_log_event). So it's not a problem if this code is not
+ maintained.
+
+ @section Slave_log_event_binary_format Binary Format
+
+ This event type has no Post-Header. The Body has the following
+ four components.
+
+ <table>
+ <caption>Body for Slave_log_event</caption>
+
+ <tr>
+ <th>Name</th>
+ <th>Size<br/></th>
+ <th>Description</th>
+ </tr>
+
+ <tr>
+ <td>master_pos</td>
+ <td>8 byte integer</td>
+ <td>???TODO
+ </td>
+ </tr>
+
+ <tr>
+ <td>master_port</td>
+ <td>2 byte integer</td>
+ <td>???TODO</td>
+ </tr>
+
+ <tr>
+ <td>master_host</td>
+ <td>null-terminated string</td>
+ <td>???TODO</td>
+ </tr>
+
+ <tr>
+ <td>master_log</td>
+ <td>null-terminated string</td>
+ <td>???TODO</td>
+ </tr>
+ </table>
+*/
class Slave_log_event: public Log_event
{
protected:
@@ -1165,11 +1685,202 @@ private:
#endif /* HAVE_REPLICATION */
-/*****************************************************************************
-
- Load Log Event class
+/**
+ @class Load_log_event
+
+ This log event corresponds to a "LOAD DATA INFILE" SQL query on the
+ following form:
+
+ @verbatim
+ (1) USE db;
+ (2) LOAD DATA [LOCAL] INFILE 'file_name'
+ (3) [REPLACE | IGNORE]
+ (4) INTO TABLE 'table_name'
+ (5) [FIELDS
+ (6) [TERMINATED BY 'field_term']
+ (7) [[OPTIONALLY] ENCLOSED BY 'enclosed']
+ (8) [ESCAPED BY 'escaped']
+ (9) ]
+ (10) [LINES
+ (11) [TERMINATED BY 'line_term']
+ (12) [LINES STARTING BY 'line_start']
+ (13) ]
+ (14) [IGNORE skip_lines LINES]
+ (15) (field_1, field_2, ..., field_n)@endverbatim
+
+ @section Load_log_event_binary_format Binary Format
+
+ The Post-Header consists of the following six components.
+
+ <table>
+ <caption>Post-Header for Load_log_event</caption>
+
+ <tr>
+ <th>Name</th>
+ <th>Size<br/></th>
+ <th>Description</th>
+ </tr>
+
+ <tr>
+ <td>slave_proxy_id</td>
+ <td>4 byte unsigned integer</td>
+ <td>An integer identifying the client thread, which is unique on
+ the server. (Note, however, that the same slave_proxy_id may
+ appear on different servers.) This is used when a client thread
+ creates a temporary table. Temporary tables are local to the
+ client, and the slave_proxy_id is used to distinguish temporary
+ tables belonging to different clients.
+ </td>
+ </tr>
+
+ <tr>
+ <td>exec_time</td>
+ <td>4 byte unsigned integer</td>
+ <td>???TODO</td>
+ </tr>
+
+ <tr>
+ <td>skip_lines</td>
+ <td>4 byte unsigned integer</td>
+ <td>The number on line (14) above, if present, or 0 if line (14)
+ is left out.
+ </td>
+ </tr>
+
+ <tr>
+ <td>table_name_len</td>
+ <td>1 byte unsigned integer</td>
+ <td>The length of 'table_name' on line (4) above.</td>
+ </tr>
+
+ <tr>
+ <td>db_len</td>
+ <td>1 byte unsigned integer</td>
+ <td>The length of 'db' on line (1) above.</td>
+ </tr>
+
+ <tr>
+ <td>num_fields</td>
+ <td>4 byte unsigned integer</td>
+ <td>The number n of fields on line (15) above.</td>
+ </tr>
+ </table>
+
+ The Body contains the following components.
+
+ <table>
+ <caption>Body of Load_log_event</caption>
+
+ <tr>
+ <th>Name</th>
+ <th>Size<br/></th>
+ <th>Description</th>
+ </tr>
+
+ <tr>
+ <td>sql_ex</td>
+ <td>variable length</td>
+
+ <td>Describes the part of the query on lines (3) and
+ (5)&ndash;(13) above. More precisely, it stores the five strings
+ (on lines) field_term (6), enclosed (7), escaped (8), line_term
+ (11), and line_start (12); as well as a bitfield indicating the
+ presence of the keywords REPLACE (3), IGNORE (3), and OPTIONALLY
+ (7).
+
+ The data is stored in one of two formats, called "old" and "new".
+ The type field of Common-Header determines which of these two
+ formats is used: type LOAD_EVENT means that the old format is
+ used, and type NEW_LOAD_EVENT means that the new format is used.
+ When MySQL writes a Load_log_event, it uses the new format if at
+ least one of the five strings is two or more bytes long.
+ Otherwise (i.e., if all strings are 0 or 1 bytes long), the old
+ format is used.
+
+ The new and old format differ in the way the five strings are
+ stored.
+
+ <ul>
+ <li> In the new format, the strings are stored in the order
+ field_term, enclosed, escaped, line_term, line_start. Each string
+ consists of a length (1 byte), followed by a sequence of
+ characters (0-255 bytes). Finally, a boolean combination of the
+ following flags is stored in 1 byte: REPLACE_FLAG==0x4,
+ IGNORE_FLAG==0x8, and OPT_ENCLOSED_FLAG==0x2. If a flag is set,
+ it indicates the presence of the corresponding keyword in the SQL
+ query.
+
+ <li> In the old format, we know that each string has length 0 or
+ 1. Therefore, only the first byte of each string is stored. The
+ order of the strings is the same as in the new format. These five
+ bytes are followed by the same 1-byte bitfield as in the new
+ format. Finally, a 1 byte bitfield called empty_flags is stored.
+ The low 5 bits of empty_flags indicate which of the five strings
+ have length 0. For each of the following flags that is set, the
+ corresponding string has length 0; for the flags that are not set,
+ the string has length 1: FIELD_TERM_EMPTY==0x1,
+ ENCLOSED_EMPTY==0x2, LINE_TERM_EMPTY==0x4, LINE_START_EMPTY==0x8,
+ ESCAPED_EMPTY==0x10.
+ </ul>
+
+ Thus, the size of the new format is 6 bytes + the sum of the sizes
+ of the five strings. The size of the old format is always 7
+ bytes.
+ </td>
+ </tr>
+
+ <tr>
+ <td>field_lens</td>
+ <td>num_fields 1-byte unsigned integers</td>
+ <td>An array of num_fields integers representing the length of
+ each field in the query. (num_fields is from the Post-Header).
+ </td>
+ </tr>
+
+ <tr>
+ <td>fields</td>
+ <td>num_fields null-terminated strings</td>
+ <td>An array of num_fields null-terminated strings, each
+ representing a field in the query. (The trailing zero is
+ redundant, since the length are stored in the num_fields array.)
+ The total length of all strings equals to the sum of all
+ field_lens, plus num_fields bytes for all the trailing zeros.
+ </td>
+ </tr>
+
+ <tr>
+ <td>table_name</td>
+ <td>null-terminated string of length table_len+1 bytes</td>
+ <td>The 'table_name' from the query, as a null-terminated string.
+ (The trailing zero is actually redundant since the table_len is
+ known from Post-Header.)
+ </td>
+ </tr>
+
+ <tr>
+ <td>db</td>
+ <td>null-terminated string of length db_len+1 bytes</td>
+ <td>The 'db' from the query, as a null-terminated string.
+ (The trailing zero is actually redundant since the db_len is known
+ from Post-Header.)
+ </td>
+ </tr>
+
+ <tr>
+ <td>file_name</td>
+ <td>variable length string without trailing zero, extending to the
+ end of the event (determined by the length field of the
+ Common-Header)
+ </td>
+ <td>The 'file_name' from the query.
+ </td>
+ </tr>
+
+ </table>
+
+ @subsection Load_log_event_notes_on_previous_versions Notes on Previous Versions
- ****************************************************************************/
+*/
class Load_log_event: public Log_event
{
private:
@@ -1276,9 +1987,8 @@ public: /* !!! Public in this patch to allow old usage */
extern char server_version[SERVER_VERSION_LENGTH];
-/*****************************************************************************
-
- Start Log Event_v3 class
+/**
+ @class Start_log_event_v3
Start_log_event_v3 is the Start_log_event of binlog format 3 (MySQL 3.23 and
4.x).
@@ -1288,8 +1998,8 @@ extern char server_version[SERVER_VERSION_LENGTH];
MySQL 5.0 whenever it starts sending a new binlog if the requested position
is >4 (otherwise if ==4 the event will be sent naturally).
- ****************************************************************************/
-
+ @section Start_log_event_v3_binary_format Binary Format
+*/
class Start_log_event_v3: public Log_event
{
public:
@@ -1372,10 +2082,14 @@ protected:
};
-/*
- For binlog version 4.
- This event is saved by threads which read it, as they need it for future
- use (to decode the ordinary events).
+/**
+ @class Format_description_log_event
+
+ For binlog version 4.
+ This event is saved by threads which read it, as they need it for future
+ use (to decode the ordinary events).
+
+ @section Format_description_log_event_binary_format Binary Format
*/
class Format_description_log_event: public Start_log_event_v3
@@ -1392,12 +2106,16 @@ public:
/* The list of post-headers' lengthes */
uint8 *post_header_len;
uchar server_version_split[3];
+ const uint8 *event_type_permutation;
Format_description_log_event(uint8 binlog_ver, const char* server_ver=0);
Format_description_log_event(const char* buf, uint event_len,
const Format_description_log_event
*description_event);
- ~Format_description_log_event() { my_free((uchar*)post_header_len, MYF(0)); }
+ ~Format_description_log_event()
+ {
+ my_free((uchar*)post_header_len, MYF(MY_ALLOW_ZERO_PTR));
+ }
Log_event_type get_type_code() { return FORMAT_DESCRIPTION_EVENT;}
#ifndef MYSQL_CLIENT
bool write(IO_CACHE* file);
@@ -1429,13 +2147,41 @@ protected:
};
-/*****************************************************************************
+/**
+ @class Intvar_log_event
- Intvar Log Event class
+ Logs special variables related to auto_increment values.
- Logs special variables such as auto_increment values
+ @section Intvar_log_event_binary_format Binary Format
- ****************************************************************************/
+ The Post-Header has two components:
+
+ <table>
+ <caption>Post-Header for Intvar_log_event</caption>
+
+ <tr>
+ <th>Name</th>
+ <th>Size<br/></th>
+ <th>Description</th>
+ </tr>
+
+ <tr>
+ <td>Type</td>
+ <td>1 byte enumeration</td>
+ <td>One byte identifying the type of variable stored. Currently,
+ two identifiers are supported: LAST_INSERT_ID_EVENT==1 and
+ INSERT_ID_EVENT==2.
+ </td>
+ </tr>
+
+ <tr>
+ <td>value</td>
+ <td>8 byte unsigned integer</td>
+ <td>The value of the variable.</td>
+ </tr>
+
+ </table>
+*/
class Intvar_log_event: public Log_event
{
@@ -1474,16 +2220,24 @@ private:
};
-/*****************************************************************************
-
- Rand Log Event class
+/**
+ @class Rand_log_event
Logs random seed used by the next RAND(), and by PASSWORD() in 4.1.0.
4.1.1 does not need it (it's repeatable again) so this event needn't be
written in 4.1.1 for PASSWORD() (but the fact that it is written is just a
waste, it does not cause bugs).
- ****************************************************************************/
+ @section Rand_log_event_binary_format Binary Format
+ This event type has no Post-Header. The Body of this event type has
+ two components:
+
+ @li seed1 (8 bytes): 64 bit random seed1.
+ @li seed2 (8 bytes): 64 bit random seed2.
+
+ The state of the random number generation consists of 128 bits,
+ which are stored internally as two 64-bit numbers.
+*/
class Rand_log_event: public Log_event
{
@@ -1520,14 +2274,14 @@ private:
#endif
};
-/*****************************************************************************
-
- Xid Log Event class
+/**
+ @class Xid_log_event
Logs xid of the transaction-to-be-committed in the 2pc protocol.
Has no meaning in replication, slaves ignore it.
- ****************************************************************************/
+ @section Xid_log_event_binary_format Binary Format
+*/
#ifdef MYSQL_CLIENT
typedef ulonglong my_xid; // this line is the same as in handler.h
#endif
@@ -1559,17 +2313,18 @@ class Xid_log_event: public Log_event
private:
#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION)
virtual int do_apply_event(Relay_log_info const *rli);
+ enum_skip_reason do_shall_skip(Relay_log_info *rli);
#endif
};
-/*****************************************************************************
-
- User var Log Event class
+/**
+ @class User_var_log_event
Every time a query uses the value of a user variable, a User_var_log_event is
written before the Query_log_event, to set the user variable.
- ****************************************************************************/
+ @section User_var_log_event_binary_format Binary Format
+*/
class User_var_log_event: public Log_event
{
@@ -1611,11 +2366,14 @@ private:
};
-/*****************************************************************************
+/**
+ @class Stop_log_event
- Stop Log Event class
+ @section Stop_log_event_binary_format Binary Format
- ****************************************************************************/
+ The Post-Header and Body for this event type are empty; it only has
+ the Common-Header.
+*/
class Stop_log_event: public Log_event
{
public:
@@ -1651,13 +2409,54 @@ private:
#endif
};
-/*****************************************************************************
-
- Rotate Log Event class
+/**
+ @class Rotate_log_event
This will be deprecated when we move to using sequence ids.
- ****************************************************************************/
+ @section Rotate_log_event_binary_format Binary Format
+
+ The Post-Header has one component:
+
+ <table>
+ <caption>Post-Header for Rotate_log_event</caption>
+
+ <tr>
+ <th>Name</th>
+ <th>Size<br/></th>
+ <th>Description</th>
+ </tr>
+
+ <tr>
+ <td>pos</td>
+ <td>8 byte integer</td>
+ <td>???TODO</td>
+ </tr>
+
+ </table>
+
+ The Body has one component:
+
+ <table>
+ <caption>Body for Rotate_log_event</caption>
+
+ <tr>
+ <th>Name</th>
+ <th>Size<br/></th>
+ <th>Description</th>
+ </tr>
+
+ <tr>
+ <td>new_log_ident</td>
+ <td>variable length string without trailing zero, extending to the
+ end of the event (determined by the length field of the
+ Common-Header)
+ </td>
+ <td>???TODO</td>
+ </tr>
+
+ </table>
+*/
class Rotate_log_event: public Log_event
{
@@ -1704,9 +2503,11 @@ private:
/* the classes below are for the new LOAD DATA INFILE logging */
-/*****************************************************************************
- Create File Log Event class
- ****************************************************************************/
+/**
+ @class Create_file_log_event
+
+ @section Create_file_log_event_binary_format Binary Format
+*/
class Create_file_log_event: public Load_log_event
{
@@ -1718,7 +2519,7 @@ protected:
*/
bool fake_base;
public:
- char* block;
+ uchar* block;
const char *event_buf;
uint block_len;
uint file_id;
@@ -1729,7 +2530,7 @@ public:
const char* table_name_arg,
List<Item>& fields_arg,
enum enum_duplicates handle_dup, bool ignore,
- char* block_arg, uint block_len_arg,
+ uchar* block_arg, uint block_len_arg,
bool using_trans);
#ifdef HAVE_REPLICATION
void pack_info(Protocol* protocol);
@@ -1775,16 +2576,16 @@ private:
};
-/*****************************************************************************
-
- Append Block Log Event class
+/**
+ @class Append_block_log_event
- ****************************************************************************/
+ @section Append_block_log_event_binary_format Binary Format
+*/
class Append_block_log_event: public Log_event
{
public:
- char* block;
+ uchar* block;
uint block_len;
uint file_id;
/*
@@ -1801,7 +2602,7 @@ public:
const char* db;
#ifndef MYSQL_CLIENT
- Append_block_log_event(THD* thd, const char* db_arg, char* block_arg,
+ Append_block_log_event(THD* thd, const char* db_arg, uchar* block_arg,
uint block_len_arg, bool using_trans);
#ifdef HAVE_REPLICATION
void pack_info(Protocol* protocol);
@@ -1830,11 +2631,11 @@ private:
};
-/*****************************************************************************
-
- Delete File Log Event class
+/**
+ @class Delete_file_log_event
- ****************************************************************************/
+ @section Delete_file_log_event_binary_format Binary Format
+*/
class Delete_file_log_event: public Log_event
{
@@ -1871,11 +2672,11 @@ private:
};
-/*****************************************************************************
-
- Execute Load Log Event class
+/**
+ @class Execute_load_log_event
- ****************************************************************************/
+ @section Delete_file_log_event_binary_format Binary Format
+*/
class Execute_load_log_event: public Log_event
{
@@ -1911,21 +2712,21 @@ private:
};
-/***************************************************************************
-
- Begin load query Log Event class
+/**
+ @class Begin_load_query_log_event
Event for the first block of file to be loaded, its only difference from
Append_block event is that this event creates or truncates existing file
before writing data.
-****************************************************************************/
+ @section Begin_load_query_log_event_binary_format Binary Format
+*/
class Begin_load_query_log_event: public Append_block_log_event
{
public:
#ifndef MYSQL_CLIENT
Begin_load_query_log_event(THD* thd_arg, const char *db_arg,
- char* block_arg, uint block_len_arg,
+ uchar* block_arg, uint block_len_arg,
bool using_trans);
#ifdef HAVE_REPLICATION
Begin_load_query_log_event(THD* thd);
@@ -1937,6 +2738,10 @@ public:
*description_event);
~Begin_load_query_log_event() {}
Log_event_type get_type_code() { return BEGIN_LOAD_QUERY_EVENT; }
+private:
+#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION)
+ virtual enum_skip_reason do_shall_skip(Relay_log_info *rli);
+#endif
};
@@ -1946,15 +2751,15 @@ public:
enum enum_load_dup_handling { LOAD_DUP_ERROR= 0, LOAD_DUP_IGNORE,
LOAD_DUP_REPLACE };
-/****************************************************************************
-
- Execute load query Log Event class
+/**
+ @class Execute_load_query_log_event
Event responsible for LOAD DATA execution, it similar to Query_log_event
but before executing the query it substitutes original filename in LOAD DATA
query with name of temporary file.
-****************************************************************************/
+ @section Execute_load_query_log_event_binary_format Binary Format
+*/
class Execute_load_query_log_event: public Query_log_event
{
public:
@@ -1972,10 +2777,12 @@ public:
#ifndef MYSQL_CLIENT
Execute_load_query_log_event(THD* thd, const char* query_arg,
- ulong query_length, uint fn_pos_start_arg,
- uint fn_pos_end_arg,
- enum_load_dup_handling dup_handling_arg,
- bool using_trans, bool suppress_use);
+ ulong query_length, uint fn_pos_start_arg,
+ uint fn_pos_end_arg,
+ enum_load_dup_handling dup_handling_arg,
+ bool using_trans, bool suppress_use,
+ THD::killed_state
+ killed_err_arg= THD::KILLED_NO_VALUE);
#ifdef HAVE_REPLICATION
void pack_info(Protocol* protocol);
#endif /* HAVE_REPLICATION */
@@ -2006,6 +2813,11 @@ private:
#ifdef MYSQL_CLIENT
+/**
+ @class Unknown_log_event
+
+ @section Unknown_log_event_binary_format Binary Format
+*/
class Unknown_log_event: public Log_event
{
public:
@@ -2026,14 +2838,14 @@ public:
#endif
char *str_to_hex(char *to, const char *from, uint len);
-/*****************************************************************************
-
- Table map log event class
+/**
+ @class Table_map_log_event
Create a mapping from a (database name, table name) couple to a table
identifier (an integer number).
- ****************************************************************************/
+ @section Table_map_log_event_binary_format Binary Format
+*/
class Table_map_log_event : public Log_event
{
public:
@@ -2143,9 +2955,8 @@ private:
};
-/*****************************************************************************
-
- Row level log event class.
+/**
+ @class Rows_log_event
Common base class for all row-containing log events.
@@ -2155,7 +2966,8 @@ private:
- Write data header and data body to an IO_CACHE.
- Provide an interface for adding an individual row to the event.
- ****************************************************************************/
+ @section Rows_log_event_binary_format Binary Format
+*/
class Rows_log_event : public Log_event
@@ -2300,7 +3112,7 @@ protected:
uchar *m_rows_cur; /* One-after the end of the data */
uchar *m_rows_end; /* One-after the end of the allocated space */
- flag_set m_flags; /* Flags for row-level events */
+ flag_set m_flags; /* Flags for row-level events */
/* helper functions */
@@ -2316,8 +3128,11 @@ protected:
int unpack_current_row(const Relay_log_info *const rli)
{
DBUG_ASSERT(m_table);
- return ::unpack_row(rli, m_table, m_width, m_curr_row, &m_cols,
- &m_curr_row_end, &m_master_reclength);
+ ASSERT_OR_RETURN_ERROR(m_curr_row < m_rows_end, HA_ERR_CORRUPT_EVENT);
+ int const result= ::unpack_row(rli, m_table, m_width, m_curr_row, &m_cols,
+ &m_curr_row_end, &m_master_reclength);
+ ASSERT_OR_RETURN_ERROR(m_curr_row_end <= m_rows_end, HA_ERR_CORRUPT_EVENT);
+ return result;
}
#endif
@@ -2383,15 +3198,15 @@ private:
friend class Old_rows_log_event;
};
-/*****************************************************************************
-
- Write row log event class
+/**
+ @class Write_rows_log_event
Log row insertions and updates. The event contain several
insert/update rows for a table. Note that each event contains only
rows for one table.
- ****************************************************************************/
+ @section Write_rows_log_event_binary_format Binary Format
+*/
class Write_rows_log_event : public Rows_log_event
{
public:
@@ -2438,9 +3253,8 @@ private:
};
-/*****************************************************************************
-
- Update rows log event class
+/**
+ @class Update_rows_log_event
Log row updates with a before image. The event contain several
update rows for a table. Note that each event contains only rows for
@@ -2449,7 +3263,8 @@ private:
Also note that the row data consists of pairs of row data: one row
for the old data and one row for the new data.
- ****************************************************************************/
+ @section Update_rows_log_event_binary_format Binary Format
+*/
class Update_rows_log_event : public Rows_log_event
{
public:
@@ -2511,9 +3326,8 @@ protected:
#endif /* !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) */
};
-/*****************************************************************************
-
- Delete rows log event class.
+/**
+ @class Delete_rows_log_event
Log row deletions. The event contain several delete rows for a
table. Note that each event contains only rows for one table.
@@ -2530,7 +3344,8 @@ protected:
Row_reader
Extract the rows from the event.
- ****************************************************************************/
+ @section Delete_rows_log_event_binary_format Binary Format
+*/
class Delete_rows_log_event : public Rows_log_event
{
public:
@@ -2580,6 +3395,8 @@ protected:
#include "log_event_old.h"
/**
+ @class Incident_log_event
+
Class representing an incident, an occurance out of the ordinary,
that happened on the master.
@@ -2591,7 +3408,7 @@ protected:
<caption>Incident event format</caption>
<tr>
<th>Symbol</th>
- <th>Size<br>(bytes)</th>
+ <th>Size<br/>(bytes)</th>
<th>Description</th>
</tr>
<tr>
@@ -2610,7 +3427,9 @@ protected:
<td>The message, if present. Not null terminated.</td>
</tr>
</table>
- */
+
+ @section Delete_rows_log_event_binary_format Binary Format
+*/
class Incident_log_event : public Log_event {
public:
#ifndef MYSQL_CLIENT
diff --git a/sql/log_event_old.cc b/sql/log_event_old.cc
index 949179386ea..7621bdc6291 100644
--- a/sql/log_event_old.cc
+++ b/sql/log_event_old.cc
@@ -11,9 +11,9 @@
// 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(Old_rows_log_event *ev, const Relay_log_info *rli)
{
- DBUG_ENTER("Rows_log_event::do_apply_event(st_relay_log_info*)");
+ DBUG_ENTER("Old_rows_log_event::do_apply_event(st_relay_log_info*)");
int error= 0;
THD *thd= ev->thd;
uchar const *row_start= ev->m_rows_buf;
@@ -30,7 +30,7 @@ Old_rows_log_event::do_apply_event(Rows_log_event *ev, const Relay_log_info *rli
This one is supposed to be set: just an extra check so that
nothing strange has happened.
*/
- DBUG_ASSERT(ev->get_flags(Rows_log_event::STMT_END_F));
+ DBUG_ASSERT(ev->get_flags(Old_rows_log_event::STMT_END_F));
const_cast<Relay_log_info*>(rli)->clear_tables_to_lock();
close_thread_tables(thd);
@@ -68,16 +68,16 @@ Old_rows_log_event::do_apply_event(Rows_log_event *ev, const Relay_log_info *rli
{
if (!need_reopen)
{
- if (thd->query_error || thd->is_fatal_error)
+ if (thd->is_slave_error || thd->is_fatal_error)
{
/*
Error reporting borrowed from Query_log_event with many excessive
simplifications (we don't honour --slave-skip-errors)
*/
- uint actual_error= thd->net.last_errno;
+ uint actual_error= thd->main_da.sql_errno();
rli->report(ERROR_LEVEL, actual_error,
"Error '%s' in %s event: when locking tables",
- (actual_error ? thd->net.last_error :
+ (actual_error ? thd->main_da.message() :
"unexpected success or fatal error"),
ev->get_type_str());
thd->is_fatal_error= 1;
@@ -112,18 +112,18 @@ Old_rows_log_event::do_apply_event(Rows_log_event *ev, const Relay_log_info *rli
uint tables_count= rli->tables_to_lock_count;
if ((error= open_tables(thd, &tables, &tables_count, 0)))
{
- if (thd->query_error || thd->is_fatal_error)
+ if (thd->is_slave_error || thd->is_fatal_error)
{
/*
Error reporting borrowed from Query_log_event with many excessive
simplifications (we don't honour --slave-skip-errors)
*/
- uint actual_error= thd->net.last_errno;
+ uint actual_error= thd->main_da.sql_errno();
rli->report(ERROR_LEVEL, actual_error,
"Error '%s' on reopening tables",
- (actual_error ? thd->net.last_error :
+ (actual_error ? thd->main_da.message() :
"unexpected success or fatal error"));
- thd->query_error= 1;
+ thd->is_slave_error= 1;
}
const_cast<Relay_log_info*>(rli)->clear_tables_to_lock();
DBUG_RETURN(error);
@@ -146,9 +146,9 @@ 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;
+ thd->is_slave_error= 1;
const_cast<Relay_log_info*>(rli)->clear_tables_to_lock();
- DBUG_RETURN(Rows_log_event::ERR_BAD_TABLE_DEF);
+ DBUG_RETURN(Old_rows_log_event::ERR_BAD_TABLE_DEF);
}
}
}
@@ -163,8 +163,8 @@ Old_rows_log_event::do_apply_event(Rows_log_event *ev, const Relay_log_info *rli
TODO [/Matz]: Maybe the query cache should not be invalidated
here? It might be that a table is not changed, even though it
was locked for the statement. We do know that each
- Rows_log_event contain at least one row, so after processing one
- Rows_log_event, we can invalidate the query cache for the
+ Old_rows_log_event contain at least one row, so after processing one
+ Old_rows_log_event, we can invalidate the query cache for the
associated table.
*/
for (TABLE_LIST *ptr= rli->tables_to_lock ; ptr ; ptr= ptr->next_global)
@@ -200,12 +200,12 @@ Old_rows_log_event::do_apply_event(Rows_log_event *ev, const Relay_log_info *rli
Make sure to set/clear them before executing the main body of
the event.
*/
- if (ev->get_flags(Rows_log_event::NO_FOREIGN_KEY_CHECKS_F))
+ if (ev->get_flags(Old_rows_log_event::NO_FOREIGN_KEY_CHECKS_F))
thd->options|= OPTION_NO_FOREIGN_KEY_CHECKS;
else
thd->options&= ~OPTION_NO_FOREIGN_KEY_CHECKS;
- if (ev->get_flags(Rows_log_event::RELAXED_UNIQUE_CHECKS_F))
+ if (ev->get_flags(Old_rows_log_event::RELAXED_UNIQUE_CHECKS_F))
thd->options|= OPTION_RELAXED_UNIQUE_CHECKS;
else
thd->options&= ~OPTION_RELAXED_UNIQUE_CHECKS;
@@ -251,11 +251,11 @@ Old_rows_log_event::do_apply_event(Rows_log_event *ev, const Relay_log_info *rli
break;
default:
- rli->report(ERROR_LEVEL, thd->net.last_errno,
+ rli->report(ERROR_LEVEL, thd->main_da.sql_errno(),
"Error in %s event: row application failed. %s",
ev->get_type_str(),
- thd->net.last_error ? thd->net.last_error : "");
- thd->query_error= 1;
+ thd->is_error() ? thd->main_da.message() : "");
+ thd->is_slave_error= 1;
break;
}
@@ -275,17 +275,17 @@ Old_rows_log_event::do_apply_event(Rows_log_event *ev, const Relay_log_info *rli
We need to delay this clear until the table def is no longer needed.
The table def is needed in unpack_row().
*/
- if (rli->tables_to_lock && ev->get_flags(Rows_log_event::STMT_END_F))
+ if (rli->tables_to_lock && ev->get_flags(Old_rows_log_event::STMT_END_F))
const_cast<Relay_log_info*>(rli)->clear_tables_to_lock();
if (error)
{ /* error has occured during the transaction */
- rli->report(ERROR_LEVEL, thd->net.last_errno,
+ rli->report(ERROR_LEVEL, thd->main_da.sql_errno(),
"Error in %s event: error during transaction execution "
"on table %s.%s. %s",
ev->get_type_str(), table->s->db.str,
table->s->table_name.str,
- thd->net.last_error ? thd->net.last_error : "");
+ thd->is_error() ? thd->main_da.message() : "");
/*
If one day we honour --skip-slave-errors in row-based replication, and
@@ -300,7 +300,7 @@ Old_rows_log_event::do_apply_event(Rows_log_event *ev, const Relay_log_info *rli
*/
thd->reset_current_stmt_binlog_row_based();
const_cast<Relay_log_info*>(rli)->cleanup_context(thd, error);
- thd->query_error= 1;
+ thd->is_slave_error= 1;
DBUG_RETURN(error);
}
@@ -311,7 +311,7 @@ Old_rows_log_event::do_apply_event(Rows_log_event *ev, const Relay_log_info *rli
*/
if (table && (table->s->primary_key == MAX_KEY) &&
!ev->cache_stmt &&
- ev->get_flags(Rows_log_event::STMT_END_F) == Rows_log_event::RLE_NO_FLAGS)
+ ev->get_flags(Old_rows_log_event::STMT_END_F) == Old_rows_log_event::RLE_NO_FLAGS)
{
/*
------------ Temporary fix until WL#2975 is implemented ---------
@@ -323,7 +323,7 @@ Old_rows_log_event::do_apply_event(Rows_log_event *ev, const Relay_log_info *rli
present, and idempotency is not guaranteed (no PK) so we risk
that repeating leads to double insert. So we desperately try to
continue, hope we'll eventually leave this buggy situation (by
- executing the final Rows_log_event). If we are in a hopeless
+ executing the final Old_rows_log_event). If we are in a hopeless
wait (reached end of last relay log and nothing gets appended
there), we timeout after one minute, and notify DBA about the
problem. When WL#2975 is implemented, just remove the member
@@ -336,6 +336,7 @@ Old_rows_log_event::do_apply_event(Rows_log_event *ev, const Relay_log_info *rli
}
#endif
+
#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION)
/*
@@ -350,6 +351,7 @@ last_uniq_key(TABLE *table, uint keyno)
return 1;
}
+
/*
Compares table->record[0] and table->record[1]
@@ -428,6 +430,7 @@ record_compare_exit:
return result;
}
+
/*
Copy "extra" columns from record[1] to record[0].
@@ -516,6 +519,7 @@ copy_extra_record_fields(TABLE *table,
DBUG_RETURN(0); // All OK
}
+
/*
Replace the provided record in the database.
@@ -668,6 +672,7 @@ replace_record(THD *thd, TABLE *table,
DBUG_RETURN(error);
}
+
/**
Find the row given by 'key', if the table has keys, or else use a table scan
to find (and fetch) the row.
@@ -879,6 +884,7 @@ static int find_and_fetch_row(TABLE *table, uchar *key)
DBUG_RETURN(0);
}
+
/**********************************************************
Row handling primitives for Write_rows_log_event_old
**********************************************************/
@@ -944,6 +950,7 @@ int Write_rows_log_event_old::do_before_row_operations(TABLE *table)
return error;
}
+
int Write_rows_log_event_old::do_after_row_operations(TABLE *table, int error)
{
int local_error= 0;
@@ -962,6 +969,7 @@ int Write_rows_log_event_old::do_after_row_operations(TABLE *table, int error)
return error? error : local_error;
}
+
int
Write_rows_log_event_old::do_prepare_row(THD *thd_arg,
Relay_log_info const *rli,
@@ -981,6 +989,7 @@ Write_rows_log_event_old::do_prepare_row(THD *thd_arg,
return error;
}
+
int Write_rows_log_event_old::do_exec_row(TABLE *table)
{
DBUG_ASSERT(table != NULL);
@@ -988,6 +997,7 @@ int Write_rows_log_event_old::do_exec_row(TABLE *table)
return error;
}
+
/**********************************************************
Row handling primitives for Delete_rows_log_event_old
**********************************************************/
@@ -1029,6 +1039,7 @@ int Delete_rows_log_event_old::do_before_row_operations(TABLE *table)
return error;
}
+
int Delete_rows_log_event_old::do_after_row_operations(TABLE *table, int error)
{
/*error= ToDo:find out what this should really be, this triggers close_scan in nbd, returning error?*/
@@ -1041,6 +1052,7 @@ int Delete_rows_log_event_old::do_after_row_operations(TABLE *table, int error)
return error;
}
+
int
Delete_rows_log_event_old::do_prepare_row(THD *thd_arg,
Relay_log_info const *rli,
@@ -1074,6 +1086,7 @@ Delete_rows_log_event_old::do_prepare_row(THD *thd_arg,
return error;
}
+
int Delete_rows_log_event_old::do_exec_row(TABLE *table)
{
int error;
@@ -1091,6 +1104,7 @@ int Delete_rows_log_event_old::do_exec_row(TABLE *table)
return error;
}
+
/**********************************************************
Row handling primitives for Update_rows_log_event_old
**********************************************************/
@@ -1124,6 +1138,7 @@ int Update_rows_log_event_old::do_before_row_operations(TABLE *table)
return error;
}
+
int Update_rows_log_event_old::do_after_row_operations(TABLE *table, int error)
{
/*error= ToDo:find out what this should really be, this triggers close_scan in nbd, returning error?*/
@@ -1136,6 +1151,7 @@ int Update_rows_log_event_old::do_after_row_operations(TABLE *table, int error)
return error;
}
+
int Update_rows_log_event_old::do_prepare_row(THD *thd_arg,
Relay_log_info const *rli,
TABLE *table,
@@ -1179,6 +1195,7 @@ int Update_rows_log_event_old::do_prepare_row(THD *thd_arg,
return error;
}
+
int Update_rows_log_event_old::do_exec_row(TABLE *table)
{
DBUG_ASSERT(table != NULL);
@@ -1217,3 +1234,1676 @@ int Update_rows_log_event_old::do_exec_row(TABLE *table)
}
#endif
+
+
+/**************************************************************************
+ Rows_log_event member functions
+**************************************************************************/
+
+#ifndef MYSQL_CLIENT
+Old_rows_log_event::Old_rows_log_event(THD *thd_arg, TABLE *tbl_arg, ulong tid,
+ MY_BITMAP const *cols,
+ bool is_transactional)
+ : Log_event(thd_arg, 0, is_transactional),
+ m_row_count(0),
+ m_table(tbl_arg),
+ m_table_id(tid),
+ m_width(tbl_arg ? tbl_arg->s->fields : 1),
+ m_rows_buf(0), m_rows_cur(0), m_rows_end(0), m_flags(0)
+#ifdef HAVE_REPLICATION
+ , m_curr_row(NULL), m_curr_row_end(NULL), m_key(NULL)
+#endif
+{
+
+ // This constructor should not be reached.
+ assert(0);
+
+ /*
+ We allow a special form of dummy event when the table, and cols
+ are null and the table id is ~0UL. This is a temporary
+ solution, to be able to terminate a started statement in the
+ binary log: the extraneous events will be removed in the future.
+ */
+ DBUG_ASSERT(tbl_arg && tbl_arg->s && tid != ~0UL ||
+ !tbl_arg && !cols && tid == ~0UL);
+
+ if (thd_arg->options & OPTION_NO_FOREIGN_KEY_CHECKS)
+ set_flags(NO_FOREIGN_KEY_CHECKS_F);
+ if (thd_arg->options & OPTION_RELAXED_UNIQUE_CHECKS)
+ set_flags(RELAXED_UNIQUE_CHECKS_F);
+ /* if bitmap_init fails, caught in is_valid() */
+ if (likely(!bitmap_init(&m_cols,
+ m_width <= sizeof(m_bitbuf)*8 ? m_bitbuf : NULL,
+ m_width,
+ false)))
+ {
+ /* Cols can be zero if this is a dummy binrows event */
+ if (likely(cols != NULL))
+ {
+ memcpy(m_cols.bitmap, cols->bitmap, no_bytes_in_map(cols));
+ create_last_word_mask(&m_cols);
+ }
+ }
+ else
+ {
+ // Needed because bitmap_init() does not set it to null on failure
+ m_cols.bitmap= 0;
+ }
+}
+#endif
+
+
+Old_rows_log_event::Old_rows_log_event(const char *buf, uint event_len,
+ Log_event_type event_type,
+ const Format_description_log_event
+ *description_event)
+ : Log_event(buf, description_event),
+ m_row_count(0),
+#ifndef MYSQL_CLIENT
+ m_table(NULL),
+#endif
+ m_table_id(0), m_rows_buf(0), m_rows_cur(0), m_rows_end(0)
+#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION)
+ , m_curr_row(NULL), m_curr_row_end(NULL), m_key(NULL)
+#endif
+{
+ DBUG_ENTER("Old_rows_log_event::Old_Rows_log_event(const char*,...)");
+ uint8 const common_header_len= description_event->common_header_len;
+ uint8 const post_header_len= description_event->post_header_len[event_type-1];
+
+ DBUG_PRINT("enter",("event_len: %u common_header_len: %d "
+ "post_header_len: %d",
+ event_len, common_header_len,
+ post_header_len));
+
+ const char *post_start= buf + common_header_len;
+ DBUG_DUMP("post_header", (uchar*) post_start, post_header_len);
+ post_start+= RW_MAPID_OFFSET;
+ if (post_header_len == 6)
+ {
+ /* Master is of an intermediate source tree before 5.1.4. Id is 4 bytes */
+ m_table_id= uint4korr(post_start);
+ post_start+= 4;
+ }
+ else
+ {
+ m_table_id= (ulong) uint6korr(post_start);
+ post_start+= RW_FLAGS_OFFSET;
+ }
+
+ m_flags= uint2korr(post_start);
+
+ uchar const *const var_start=
+ (const uchar *)buf + common_header_len + post_header_len;
+ uchar const *const ptr_width= var_start;
+ uchar *ptr_after_width= (uchar*) ptr_width;
+ DBUG_PRINT("debug", ("Reading from %p", ptr_after_width));
+ m_width = net_field_length(&ptr_after_width);
+ DBUG_PRINT("debug", ("m_width=%lu", m_width));
+ /* if bitmap_init fails, catched in is_valid() */
+ if (likely(!bitmap_init(&m_cols,
+ m_width <= sizeof(m_bitbuf)*8 ? m_bitbuf : NULL,
+ m_width,
+ false)))
+ {
+ DBUG_PRINT("debug", ("Reading from %p", ptr_after_width));
+ memcpy(m_cols.bitmap, ptr_after_width, (m_width + 7) / 8);
+ create_last_word_mask(&m_cols);
+ ptr_after_width+= (m_width + 7) / 8;
+ DBUG_DUMP("m_cols", (uchar*) m_cols.bitmap, no_bytes_in_map(&m_cols));
+ }
+ else
+ {
+ // Needed because bitmap_init() does not set it to null on failure
+ m_cols.bitmap= NULL;
+ DBUG_VOID_RETURN;
+ }
+
+ const uchar* const ptr_rows_data= (const uchar*) ptr_after_width;
+ size_t const data_size= event_len - (ptr_rows_data - (const uchar *) buf);
+ DBUG_PRINT("info",("m_table_id: %lu m_flags: %d m_width: %lu data_size: %lu",
+ m_table_id, m_flags, m_width, (ulong) data_size));
+ DBUG_DUMP("rows_data", (uchar*) ptr_rows_data, data_size);
+
+ m_rows_buf= (uchar*) my_malloc(data_size, MYF(MY_WME));
+ if (likely((bool)m_rows_buf))
+ {
+#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION)
+ m_curr_row= m_rows_buf;
+#endif
+ m_rows_end= m_rows_buf + data_size;
+ m_rows_cur= m_rows_end;
+ memcpy(m_rows_buf, ptr_rows_data, data_size);
+ }
+ else
+ m_cols.bitmap= 0; // to not free it
+
+ DBUG_VOID_RETURN;
+}
+
+
+Old_rows_log_event::~Old_rows_log_event()
+{
+ if (m_cols.bitmap == m_bitbuf) // no my_malloc happened
+ m_cols.bitmap= 0; // so no my_free in bitmap_free
+ bitmap_free(&m_cols); // To pair with bitmap_init().
+ my_free((uchar*)m_rows_buf, MYF(MY_ALLOW_ZERO_PTR));
+}
+
+
+int Old_rows_log_event::get_data_size()
+{
+ uchar buf[sizeof(m_width)+1];
+ uchar *end= net_store_length(buf, (m_width + 7) / 8);
+
+ DBUG_EXECUTE_IF("old_row_based_repl_4_byte_map_id_master",
+ return 6 + no_bytes_in_map(&m_cols) + (end - buf) +
+ (m_rows_cur - m_rows_buf););
+ int data_size= ROWS_HEADER_LEN;
+ data_size+= no_bytes_in_map(&m_cols);
+ data_size+= end - buf;
+
+ data_size+= (m_rows_cur - m_rows_buf);
+ return data_size;
+}
+
+
+#ifndef MYSQL_CLIENT
+int Old_rows_log_event::do_add_row_data(uchar *row_data, size_t length)
+{
+ /*
+ When the table has a primary key, we would probably want, by default, to
+ log only the primary key value instead of the entire "before image". This
+ would save binlog space. TODO
+ */
+ DBUG_ENTER("Old_rows_log_event::do_add_row_data");
+ DBUG_PRINT("enter", ("row_data: 0x%lx length: %lu", (ulong) row_data,
+ (ulong) length));
+ /*
+ Don't print debug messages when running valgrind since they can
+ trigger false warnings.
+ */
+#ifndef HAVE_purify
+ DBUG_DUMP("row_data", row_data, min(length, 32));
+#endif
+
+ DBUG_ASSERT(m_rows_buf <= m_rows_cur);
+ DBUG_ASSERT(!m_rows_buf || m_rows_end && m_rows_buf < m_rows_end);
+ DBUG_ASSERT(m_rows_cur <= m_rows_end);
+
+ /* The cast will always work since m_rows_cur <= m_rows_end */
+ if (static_cast<size_t>(m_rows_end - m_rows_cur) <= length)
+ {
+ size_t const block_size= 1024;
+ my_ptrdiff_t const cur_size= m_rows_cur - m_rows_buf;
+ my_ptrdiff_t const new_alloc=
+ block_size * ((cur_size + length + block_size - 1) / block_size);
+
+ uchar* const new_buf= (uchar*)my_realloc((uchar*)m_rows_buf, (uint) new_alloc,
+ MYF(MY_ALLOW_ZERO_PTR|MY_WME));
+ if (unlikely(!new_buf))
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+
+ /* If the memory moved, we need to move the pointers */
+ if (new_buf != m_rows_buf)
+ {
+ m_rows_buf= new_buf;
+ m_rows_cur= m_rows_buf + cur_size;
+ }
+
+ /*
+ The end pointer should always be changed to point to the end of
+ the allocated memory.
+ */
+ m_rows_end= m_rows_buf + new_alloc;
+ }
+
+ DBUG_ASSERT(m_rows_cur + length <= m_rows_end);
+ memcpy(m_rows_cur, row_data, length);
+ m_rows_cur+= length;
+ m_row_count++;
+ DBUG_RETURN(0);
+}
+#endif
+
+
+#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION)
+int Old_rows_log_event::do_apply_event(Relay_log_info const *rli)
+{
+ DBUG_ENTER("Old_rows_log_event::do_apply_event(Relay_log_info*)");
+ int error= 0;
+
+ /*
+ If m_table_id == ~0UL, then we have a dummy event that does not
+ contain any data. In that case, we just remove all tables in the
+ tables_to_lock list, close the thread tables, and return with
+ success.
+ */
+ if (m_table_id == ~0UL)
+ {
+ /*
+ This one is supposed to be set: just an extra check so that
+ nothing strange has happened.
+ */
+ DBUG_ASSERT(get_flags(STMT_END_F));
+
+ const_cast<Relay_log_info*>(rli)->clear_tables_to_lock();
+ close_thread_tables(thd);
+ thd->clear_error();
+ DBUG_RETURN(0);
+ }
+
+ /*
+ 'thd' has been set by exec_relay_log_event(), just before calling
+ do_apply_event(). We still check here to prevent future coding
+ errors.
+ */
+ DBUG_ASSERT(rli->sql_thd == thd);
+
+ /*
+ If there is no locks taken, this is the first binrow event seen
+ after the table map events. We should then lock all the tables
+ used in the transaction and proceed with execution of the actual
+ event.
+ */
+ if (!thd->lock)
+ {
+ bool need_reopen= 1; /* To execute the first lap of the loop below */
+
+ /*
+ lock_tables() reads the contents of thd->lex, so they must be
+ initialized. Contrary to in
+ Table_map_log_event::do_apply_event() we don't call
+ mysql_init_query() as that may reset the binlog format.
+ */
+ lex_start(thd);
+
+ while ((error= lock_tables(thd, rli->tables_to_lock,
+ rli->tables_to_lock_count, &need_reopen)))
+ {
+ if (!need_reopen)
+ {
+ if (thd->is_slave_error || thd->is_fatal_error)
+ {
+ /*
+ Error reporting borrowed from Query_log_event with many excessive
+ simplifications (we don't honour --slave-skip-errors)
+ */
+ uint actual_error= thd->net.client_last_errno;
+ rli->report(ERROR_LEVEL, actual_error,
+ "Error '%s' in %s event: when locking tables",
+ (actual_error ? thd->net.client_last_error :
+ "unexpected success or fatal error"),
+ get_type_str());
+ thd->is_fatal_error= 1;
+ }
+ else
+ {
+ rli->report(ERROR_LEVEL, error,
+ "Error in %s event: when locking tables",
+ get_type_str());
+ }
+ const_cast<Relay_log_info*>(rli)->clear_tables_to_lock();
+ DBUG_RETURN(error);
+ }
+
+ /*
+ So we need to reopen the tables.
+
+ We need to flush the pending RBR event, since it keeps a
+ pointer to an open table.
+
+ ALTERNATIVE SOLUTION (not implemented): Extract a pointer to
+ the pending RBR event and reset the table pointer after the
+ tables has been reopened.
+
+ NOTE: For this new scheme there should be no pending event:
+ need to add code to assert that is the case.
+ */
+ thd->binlog_flush_pending_rows_event(false);
+ TABLE_LIST *tables= rli->tables_to_lock;
+ close_tables_for_reopen(thd, &tables);
+
+ uint tables_count= rli->tables_to_lock_count;
+ if ((error= open_tables(thd, &tables, &tables_count, 0)))
+ {
+ if (thd->is_slave_error || thd->is_fatal_error)
+ {
+ /*
+ Error reporting borrowed from Query_log_event with many excessive
+ simplifications (we don't honour --slave-skip-errors)
+ */
+ uint actual_error= thd->net.client_last_errno;
+ rli->report(ERROR_LEVEL, actual_error,
+ "Error '%s' on reopening tables",
+ (actual_error ? thd->net.client_last_error :
+ "unexpected success or fatal error"));
+ thd->is_slave_error= 1;
+ }
+ const_cast<Relay_log_info*>(rli)->clear_tables_to_lock();
+ DBUG_RETURN(error);
+ }
+ }
+
+ /*
+ When the open and locking succeeded, we check all tables to
+ ensure that they still have the correct type.
+
+ We can use a down cast here since we know that every table added
+ to the tables_to_lock is a RPL_TABLE_LIST.
+ */
+
+ {
+ RPL_TABLE_LIST *ptr= rli->tables_to_lock;
+ for ( ; ptr ; ptr= static_cast<RPL_TABLE_LIST*>(ptr->next_global))
+ {
+ if (ptr->m_tabledef.compatible_with(rli, ptr->table))
+ {
+ mysql_unlock_tables(thd, thd->lock);
+ thd->lock= 0;
+ thd->is_slave_error= 1;
+ const_cast<Relay_log_info*>(rli)->clear_tables_to_lock();
+ DBUG_RETURN(ERR_BAD_TABLE_DEF);
+ }
+ }
+ }
+
+ /*
+ ... and then we add all the tables to the table map and remove
+ them from tables to lock.
+
+ We also invalidate the query cache for all the tables, since
+ they will now be changed.
+
+ TODO [/Matz]: Maybe the query cache should not be invalidated
+ here? It might be that a table is not changed, even though it
+ was locked for the statement. We do know that each
+ Old_rows_log_event contain at least one row, so after processing one
+ Old_rows_log_event, we can invalidate the query cache for the
+ associated table.
+ */
+ for (TABLE_LIST *ptr= rli->tables_to_lock ; ptr ; ptr= ptr->next_global)
+ {
+ const_cast<Relay_log_info*>(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=
+ m_table= const_cast<Relay_log_info*>(rli)->m_table_map.get_table(m_table_id);
+
+ if (table)
+ {
+ /*
+ table == NULL means that this table should not be replicated
+ (this was set up by Table_map_log_event::do_apply_event()
+ which tested replicate-* rules).
+ */
+
+ /*
+ It's not needed to set_time() but
+ 1) it continues the property that "Time" in SHOW PROCESSLIST shows how
+ much slave is behind
+ 2) it will be needed when we allow replication from a table with no
+ TIMESTAMP column to a table with one.
+ So we call set_time(), like in SBR. Presently it changes nothing.
+ */
+ thd->set_time((time_t)when);
+ /*
+ There are a few flags that are replicated with each row event.
+ Make sure to set/clear them before executing the main body of
+ the event.
+ */
+ if (get_flags(NO_FOREIGN_KEY_CHECKS_F))
+ thd->options|= OPTION_NO_FOREIGN_KEY_CHECKS;
+ else
+ thd->options&= ~OPTION_NO_FOREIGN_KEY_CHECKS;
+
+ if (get_flags(RELAXED_UNIQUE_CHECKS_F))
+ thd->options|= OPTION_RELAXED_UNIQUE_CHECKS;
+ else
+ thd->options&= ~OPTION_RELAXED_UNIQUE_CHECKS;
+ /* A small test to verify that objects have consistent types */
+ DBUG_ASSERT(sizeof(thd->options) == sizeof(OPTION_RELAXED_UNIQUE_CHECKS));
+
+ /*
+ Now we are in a statement and will stay in a statement until we
+ see a STMT_END_F.
+
+ We set this flag here, before actually applying any rows, in
+ case the SQL thread is stopped and we need to detect that we're
+ inside a statement and halting abruptly might cause problems
+ when restarting.
+ */
+ const_cast<Relay_log_info*>(rli)->set_flag(Relay_log_info::IN_STMT);
+
+ if ( m_width == table->s->fields && bitmap_is_set_all(&m_cols))
+ set_flags(COMPLETE_ROWS_F);
+
+ /*
+ Set tables write and read sets.
+
+ Read_set contains all slave columns (in case we are going to fetch
+ a complete record from slave)
+
+ Write_set equals the m_cols bitmap sent from master but it can be
+ longer if slave has extra columns.
+ */
+
+ DBUG_PRINT_BITSET("debug", "Setting table's write_set from: %s", &m_cols);
+
+ bitmap_set_all(table->read_set);
+ bitmap_set_all(table->write_set);
+ if (!get_flags(COMPLETE_ROWS_F))
+ bitmap_intersect(table->write_set,&m_cols);
+
+ // Do event specific preparations
+
+ error= do_before_row_operations(rli);
+
+ // row processing loop
+
+ while (error == 0 && m_curr_row < m_rows_end)
+ {
+ /* in_use can have been set to NULL in close_tables_for_reopen */
+ THD* old_thd= table->in_use;
+ if (!table->in_use)
+ table->in_use= thd;
+
+ error= do_exec_row(rli);
+
+ table->in_use = old_thd;
+ switch (error)
+ {
+ case 0:
+ break;
+
+ /* Some recoverable errors */
+ case HA_ERR_RECORD_CHANGED:
+ case HA_ERR_KEY_NOT_FOUND: /* Idempotency support: OK if
+ tuple does not exist */
+ error= 0;
+ break;
+
+ default:
+ rli->report(ERROR_LEVEL, thd->net.client_last_errno,
+ "Error in %s event: row application failed. %s",
+ get_type_str(),
+ thd->net.client_last_error ? thd->net.client_last_error : "");
+ thd->is_slave_error= 1;
+ break;
+ }
+
+ /*
+ If m_curr_row_end was not set during event execution (e.g., because
+ of errors) we can't proceed to the next row. If the error is transient
+ (i.e., error==0 at this point) we must call unpack_current_row() to set
+ m_curr_row_end.
+ */
+
+ DBUG_PRINT("info", ("error: %d", error));
+ DBUG_PRINT("info", ("curr_row: 0x%lu; curr_row_end: 0x%lu; rows_end: 0x%lu",
+ (ulong) m_curr_row, (ulong) m_curr_row_end, (ulong) m_rows_end));
+
+ if (!m_curr_row_end && !error)
+ unpack_current_row(rli);
+
+ // at this moment m_curr_row_end should be set
+ DBUG_ASSERT(error || m_curr_row_end != NULL);
+ DBUG_ASSERT(error || m_curr_row < m_curr_row_end);
+ DBUG_ASSERT(error || m_curr_row_end <= m_rows_end);
+
+ m_curr_row= m_curr_row_end;
+
+ } // row processing loop
+
+ DBUG_EXECUTE_IF("STOP_SLAVE_after_first_Rows_event",
+ const_cast<Relay_log_info*>(rli)->abort_slave= 1;);
+ error= do_after_row_operations(rli, error);
+ if (!cache_stmt)
+ {
+ DBUG_PRINT("info", ("Marked that we need to keep log"));
+ thd->options|= OPTION_KEEP_LOG;
+ }
+ } // if (table)
+
+ /*
+ We need to delay this clear until here bacause unpack_current_row() uses
+ master-side table definitions stored in rli.
+ */
+ if (rli->tables_to_lock && get_flags(STMT_END_F))
+ const_cast<Relay_log_info*>(rli)->clear_tables_to_lock();
+
+ if (error)
+ { /* error has occured during the transaction */
+ rli->report(ERROR_LEVEL, thd->net.client_last_errno,
+ "Error in %s event: error during transaction execution "
+ "on table %s.%s. %s",
+ get_type_str(), table->s->db.str,
+ table->s->table_name.str,
+ thd->net.client_last_error ? thd->net.client_last_error : "");
+
+ /*
+ If one day we honour --skip-slave-errors in row-based replication, and
+ the error should be skipped, then we would clear mappings, rollback,
+ close tables, but the slave SQL thread would not stop and then may
+ assume the mapping is still available, the tables are still open...
+ So then we should clear mappings/rollback/close here only if this is a
+ STMT_END_F.
+ For now we code, knowing that error is not skippable and so slave SQL
+ thread is certainly going to stop.
+ rollback at the caller along with sbr.
+ */
+ thd->reset_current_stmt_binlog_row_based();
+ const_cast<Relay_log_info*>(rli)->cleanup_context(thd, error);
+ thd->is_slave_error= 1;
+ DBUG_RETURN(error);
+ }
+
+ /*
+ This code would ideally be placed in do_update_pos() instead, but
+ since we have no access to table there, we do the setting of
+ last_event_start_time here instead.
+ */
+ if (table && (table->s->primary_key == MAX_KEY) &&
+ !cache_stmt && get_flags(STMT_END_F) == RLE_NO_FLAGS)
+ {
+ /*
+ ------------ Temporary fix until WL#2975 is implemented ---------
+
+ This event is not the last one (no STMT_END_F). If we stop now
+ (in case of terminate_slave_thread()), how will we restart? We
+ have to restart from Table_map_log_event, but as this table is
+ not transactional, the rows already inserted will still be
+ present, and idempotency is not guaranteed (no PK) so we risk
+ that repeating leads to double insert. So we desperately try to
+ continue, hope we'll eventually leave this buggy situation (by
+ executing the final Old_rows_log_event). If we are in a hopeless
+ wait (reached end of last relay log and nothing gets appended
+ there), we timeout after one minute, and notify DBA about the
+ problem. When WL#2975 is implemented, just remove the member
+ Relay_log_info::last_event_start_time and all its occurrences.
+ */
+ const_cast<Relay_log_info*>(rli)->last_event_start_time= my_time(0);
+ }
+
+ DBUG_RETURN(0);
+}
+
+
+Log_event::enum_skip_reason
+Old_rows_log_event::do_shall_skip(Relay_log_info *rli)
+{
+ /*
+ If the slave skip counter is 1 and this event does not end a
+ statement, then we should not start executing on the next event.
+ Otherwise, we defer the decision to the normal skipping logic.
+ */
+ if (rli->slave_skip_counter == 1 && !get_flags(STMT_END_F))
+ return Log_event::EVENT_SKIP_IGNORE;
+ else
+ return Log_event::do_shall_skip(rli);
+}
+
+int
+Old_rows_log_event::do_update_pos(Relay_log_info *rli)
+{
+ DBUG_ENTER("Old_rows_log_event::do_update_pos");
+ int error= 0;
+
+ DBUG_PRINT("info", ("flags: %s",
+ get_flags(STMT_END_F) ? "STMT_END_F " : ""));
+
+ if (get_flags(STMT_END_F))
+ {
+ /*
+ This is the end of a statement or transaction, so close (and
+ unlock) the tables we opened when processing the
+ Table_map_log_event starting the statement.
+
+ OBSERVER. This will clear *all* mappings, not only those that
+ are open for the table. There is not good handle for on-close
+ actions for tables.
+
+ NOTE. Even if we have no table ('table' == 0) we still need to be
+ here, so that we increase the group relay log position. If we didn't, we
+ could have a group relay log position which lags behind "forever"
+ (assume the last master's transaction is ignored by the slave because of
+ replicate-ignore rules).
+ */
+ thd->binlog_flush_pending_rows_event(true);
+
+ /*
+ If this event is not in a transaction, the call below will, if some
+ transactional storage engines are involved, commit the statement into
+ them and flush the pending event to binlog.
+ If this event is in a transaction, the call will do nothing, but a
+ Xid_log_event will come next which will, if some transactional engines
+ are involved, commit the transaction and flush the pending event to the
+ binlog.
+ */
+ error= ha_autocommit_or_rollback(thd, 0);
+
+ /*
+ Now what if this is not a transactional engine? we still need to
+ flush the pending event to the binlog; we did it with
+ thd->binlog_flush_pending_rows_event(). Note that we imitate
+ what is done for real queries: a call to
+ ha_autocommit_or_rollback() (sometimes only if involves a
+ transactional engine), and a call to be sure to have the pending
+ event flushed.
+ */
+
+ thd->reset_current_stmt_binlog_row_based();
+ rli->cleanup_context(thd, 0);
+ if (error == 0)
+ {
+ /*
+ Indicate that a statement is finished.
+ Step the group log position if we are not in a transaction,
+ otherwise increase the event log position.
+ */
+ rli->stmt_done(log_pos, when);
+
+ /*
+ Clear any errors pushed in thd->net.client_last_err* if for
+ example "no key found" (as this is allowed). This is a safety
+ measure; apparently those errors (e.g. when executing a
+ Delete_rows_log_event_old of a non-existing row, like in
+ rpl_row_mystery22.test, thd->net.client_last_error = "Can't
+ find record in 't1'" and last_errno=1032) do not become
+ visible. We still prefer to wipe them out.
+ */
+ thd->clear_error();
+ }
+ else
+ rli->report(ERROR_LEVEL, error,
+ "Error in %s event: commit of row events failed, "
+ "table `%s`.`%s`",
+ get_type_str(), m_table->s->db.str,
+ m_table->s->table_name.str);
+ }
+ else
+ {
+ rli->inc_event_relay_log_pos();
+ }
+
+ DBUG_RETURN(error);
+}
+
+#endif /* !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) */
+
+
+#ifndef MYSQL_CLIENT
+bool Old_rows_log_event::write_data_header(IO_CACHE *file)
+{
+ uchar buf[ROWS_HEADER_LEN]; // No need to init the buffer
+
+ // This method should not be reached.
+ assert(0);
+
+ DBUG_ASSERT(m_table_id != ~0UL);
+ DBUG_EXECUTE_IF("old_row_based_repl_4_byte_map_id_master",
+ {
+ int4store(buf + 0, m_table_id);
+ int2store(buf + 4, m_flags);
+ return (my_b_safe_write(file, buf, 6));
+ });
+ int6store(buf + RW_MAPID_OFFSET, (ulonglong)m_table_id);
+ int2store(buf + RW_FLAGS_OFFSET, m_flags);
+ return (my_b_safe_write(file, buf, ROWS_HEADER_LEN));
+}
+
+
+bool Old_rows_log_event::write_data_body(IO_CACHE*file)
+{
+ /*
+ Note that this should be the number of *bits*, not the number of
+ bytes.
+ */
+ uchar sbuf[sizeof(m_width)];
+ my_ptrdiff_t const data_size= m_rows_cur - m_rows_buf;
+
+ // This method should not be reached.
+ assert(0);
+
+ bool res= false;
+ uchar *const sbuf_end= net_store_length(sbuf, (size_t) m_width);
+ DBUG_ASSERT(static_cast<size_t>(sbuf_end - sbuf) <= sizeof(sbuf));
+
+ DBUG_DUMP("m_width", sbuf, (size_t) (sbuf_end - sbuf));
+ res= res || my_b_safe_write(file, sbuf, (size_t) (sbuf_end - sbuf));
+
+ DBUG_DUMP("m_cols", (uchar*) m_cols.bitmap, no_bytes_in_map(&m_cols));
+ res= res || my_b_safe_write(file, (uchar*) m_cols.bitmap,
+ no_bytes_in_map(&m_cols));
+ DBUG_DUMP("rows", m_rows_buf, data_size);
+ res= res || my_b_safe_write(file, m_rows_buf, (size_t) data_size);
+
+ return res;
+
+}
+#endif
+
+
+#if defined(HAVE_REPLICATION) && !defined(MYSQL_CLIENT)
+void Old_rows_log_event::pack_info(Protocol *protocol)
+{
+ char buf[256];
+ char const *const flagstr=
+ get_flags(STMT_END_F) ? " flags: STMT_END_F" : "";
+ size_t bytes= my_snprintf(buf, sizeof(buf),
+ "table_id: %lu%s", m_table_id, flagstr);
+ protocol->store(buf, bytes, &my_charset_bin);
+}
+#endif
+
+
+#ifdef MYSQL_CLIENT
+void Old_rows_log_event::print_helper(FILE *file,
+ PRINT_EVENT_INFO *print_event_info,
+ char const *const name)
+{
+ IO_CACHE *const head= &print_event_info->head_cache;
+ IO_CACHE *const body= &print_event_info->body_cache;
+ if (!print_event_info->short_form)
+ {
+ bool const last_stmt_event= get_flags(STMT_END_F);
+ print_header(head, print_event_info, !last_stmt_event);
+ my_b_printf(head, "\t%s: table id %lu%s\n",
+ name, m_table_id,
+ last_stmt_event ? " flags: STMT_END_F" : "");
+ print_base64(body, print_event_info, !last_stmt_event);
+ }
+
+ if (get_flags(STMT_END_F))
+ {
+ copy_event_cache_to_file_and_reinit(head, file);
+ copy_event_cache_to_file_and_reinit(body, file);
+ }
+}
+#endif
+
+
+#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION)
+/**
+ Write the current row into event's table.
+
+ The row is located in the row buffer, pointed by @c m_curr_row member.
+ Number of columns of the row is stored in @c m_width member (it can be
+ different from the number of columns in the table to which we insert).
+ Bitmap @c m_cols indicates which columns are present in the row. It is assumed
+ that event's table is already open and pointed by @c m_table.
+
+ If the same record already exists in the table it can be either overwritten
+ or an error is reported depending on the value of @c overwrite flag
+ (error reporting not yet implemented). Note that the matching record can be
+ different from the row we insert if we use primary keys to identify records in
+ the table.
+
+ The row to be inserted can contain values only for selected columns. The
+ missing columns are filled with default values using @c prepare_record()
+ function. If a matching record is found in the table and @c overwritte is
+ true, the missing columns are taken from it.
+
+ @param rli Relay log info (needed for row unpacking).
+ @param overwrite
+ Shall we overwrite if the row already exists or signal
+ error (currently ignored).
+
+ @returns Error code on failure, 0 on success.
+
+ This method, if successful, sets @c m_curr_row_end pointer to point at the
+ next row in the rows buffer. This is done when unpacking the row to be
+ inserted.
+
+ @note If a matching record is found, it is either updated using
+ @c ha_update_row() or first deleted and then new record written.
+*/
+
+int
+Old_rows_log_event::write_row(const Relay_log_info *const rli,
+ const bool overwrite)
+{
+ DBUG_ENTER("write_row");
+ DBUG_ASSERT(m_table != NULL && thd != NULL);
+
+ TABLE *table= m_table; // pointer to event's table
+ int error;
+ int keynum;
+ auto_afree_ptr<char> key(NULL);
+
+ /* fill table->record[0] with default values */
+
+ if ((error= prepare_record(rli, table, m_width,
+ TRUE /* check if columns have def. values */)))
+ DBUG_RETURN(error);
+
+ /* unpack row into table->record[0] */
+ error= unpack_current_row(rli); // TODO: how to handle errors?
+
+#ifndef DBUG_OFF
+ DBUG_DUMP("record[0]", table->record[0], table->s->reclength);
+ DBUG_PRINT_BITSET("debug", "write_set = %s", table->write_set);
+ DBUG_PRINT_BITSET("debug", "read_set = %s", table->read_set);
+#endif
+
+ /*
+ Try to write record. If a corresponding record already exists in the table,
+ we try to change it using ha_update_row() if possible. Otherwise we delete
+ it and repeat the whole process again.
+
+ TODO: Add safety measures against infinite looping.
+ */
+
+ while ((error= table->file->ha_write_row(table->record[0])))
+ {
+ if (error == HA_ERR_LOCK_DEADLOCK || error == HA_ERR_LOCK_WAIT_TIMEOUT)
+ {
+ table->file->print_error(error, MYF(0)); /* to check at exec_relay_log_event */
+ DBUG_RETURN(error);
+ }
+ if ((keynum= table->file->get_dup_key(error)) < 0)
+ {
+ DBUG_PRINT("info",("Can't locate duplicate key (get_dup_key returns %d)",keynum));
+ table->file->print_error(error, MYF(0));
+ /*
+ We failed to retrieve the duplicate key
+ - either because the error was not "duplicate key" error
+ - or because the information which key is not available
+ */
+ DBUG_RETURN(error);
+ }
+
+ /*
+ We need to retrieve the old row into record[1] to be able to
+ either update or delete the offending record. We either:
+
+ - use rnd_pos() with a row-id (available as dupp_row) to the
+ offending row, if that is possible (MyISAM and Blackhole), or else
+
+ - use index_read_idx() with the key that is duplicated, to
+ retrieve the offending row.
+ */
+ if (table->file->ha_table_flags() & HA_DUPLICATE_POS)
+ {
+ DBUG_PRINT("info",("Locating offending record using rnd_pos()"));
+ error= table->file->rnd_pos(table->record[1], table->file->dup_ref);
+ if (error)
+ {
+ DBUG_PRINT("info",("rnd_pos() returns error %d",error));
+ table->file->print_error(error, MYF(0));
+ DBUG_RETURN(error);
+ }
+ }
+ else
+ {
+ DBUG_PRINT("info",("Locating offending record using index_read_idx()"));
+
+ if (table->file->extra(HA_EXTRA_FLUSH_CACHE))
+ {
+ DBUG_PRINT("info",("Error when setting HA_EXTRA_FLUSH_CACHE"));
+ DBUG_RETURN(my_errno);
+ }
+
+ if (key.get() == NULL)
+ {
+ key.assign(static_cast<char*>(my_alloca(table->s->max_unique_length)));
+ if (key.get() == NULL)
+ {
+ DBUG_PRINT("info",("Can't allocate key buffer"));
+ DBUG_RETURN(ENOMEM);
+ }
+ }
+
+ key_copy((uchar*)key.get(), table->record[0], table->key_info + keynum,
+ 0);
+ error= table->file->index_read_idx_map(table->record[1], keynum,
+ (const uchar*)key.get(),
+ HA_WHOLE_KEY,
+ HA_READ_KEY_EXACT);
+ if (error)
+ {
+ DBUG_PRINT("info",("index_read_idx() returns error %d",error));
+ table->file->print_error(error, MYF(0));
+ DBUG_RETURN(error);
+ }
+ }
+
+ /*
+ Now, record[1] should contain the offending row. That
+ will enable us to update it or, alternatively, delete it (so
+ that we can insert the new row afterwards).
+ */
+
+ /*
+ If row is incomplete we will use the record found to fill
+ missing columns.
+ */
+ if (!get_flags(COMPLETE_ROWS_F))
+ {
+ restore_record(table,record[1]);
+ error= unpack_current_row(rli);
+ }
+
+#ifndef DBUG_OFF
+ DBUG_PRINT("debug",("preparing for update: before and after image"));
+ DBUG_DUMP("record[1] (before)", table->record[1], table->s->reclength);
+ DBUG_DUMP("record[0] (after)", table->record[0], table->s->reclength);
+#endif
+
+ /*
+ REPLACE is defined as either INSERT or DELETE + INSERT. If
+ possible, we can replace it with an UPDATE, but that will not
+ work on InnoDB if FOREIGN KEY checks are necessary.
+
+ I (Matz) am not sure of the reason for the last_uniq_key()
+ check as, but I'm guessing that it's something along the
+ following lines.
+
+ Suppose that we got the duplicate key to be a key that is not
+ the last unique key for the table and we perform an update:
+ then there might be another key for which the unique check will
+ fail, so we're better off just deleting the row and inserting
+ the correct row.
+ */
+ if (last_uniq_key(table, keynum) &&
+ !table->file->referenced_by_foreign_key())
+ {
+ DBUG_PRINT("info",("Updating row using ha_update_row()"));
+ error=table->file->ha_update_row(table->record[1],
+ table->record[0]);
+ switch (error) {
+
+ case HA_ERR_RECORD_IS_THE_SAME:
+ DBUG_PRINT("info",("ignoring HA_ERR_RECORD_IS_THE_SAME error from"
+ " ha_update_row()"));
+ error= 0;
+
+ case 0:
+ break;
+
+ default:
+ DBUG_PRINT("info",("ha_update_row() returns error %d",error));
+ table->file->print_error(error, MYF(0));
+ }
+
+ DBUG_RETURN(error);
+ }
+ else
+ {
+ DBUG_PRINT("info",("Deleting offending row and trying to write new one again"));
+ if ((error= table->file->ha_delete_row(table->record[1])))
+ {
+ DBUG_PRINT("info",("ha_delete_row() returns error %d",error));
+ table->file->print_error(error, MYF(0));
+ DBUG_RETURN(error);
+ }
+ /* Will retry ha_write_row() with the offending row removed. */
+ }
+ }
+
+ DBUG_RETURN(error);
+}
+
+
+/**
+ Locate the current row in event's table.
+
+ The current row is pointed by @c m_curr_row. Member @c m_width tells how many
+ columns are there in the row (this can be differnet from the number of columns
+ in the table). It is assumed that event's table is already open and pointed
+ by @c m_table.
+
+ If a corresponding record is found in the table it is stored in
+ @c m_table->record[0]. Note that when record is located based on a primary
+ key, it is possible that the record found differs from the row being located.
+
+ If no key is specified or table does not have keys, a table scan is used to
+ find the row. In that case the row should be complete and contain values for
+ all columns. However, it can still be shorter than the table, i.e. the table
+ can contain extra columns not present in the row. It is also possible that
+ the table has fewer columns than the row being located.
+
+ @returns Error code on failure, 0 on success.
+
+ @post In case of success @c m_table->record[0] contains the record found.
+ Also, the internal "cursor" of the table is positioned at the record found.
+
+ @note If the engine allows random access of the records, a combination of
+ @c position() and @c rnd_pos() will be used.
+ */
+
+int Old_rows_log_event::find_row(const Relay_log_info *rli)
+{
+ DBUG_ENTER("find_row");
+
+ DBUG_ASSERT(m_table && m_table->in_use != NULL);
+
+ TABLE *table= m_table;
+ int error;
+
+ /* unpack row - missing fields get default values */
+
+ // TODO: shall we check and report errors here?
+ prepare_record(NULL,table,m_width,FALSE /* don't check errors */);
+ error= unpack_current_row(rli);
+
+#ifndef DBUG_OFF
+ DBUG_PRINT("info",("looking for the following record"));
+ DBUG_DUMP("record[0]", table->record[0], table->s->reclength);
+#endif
+
+ if ((table->file->ha_table_flags() & HA_PRIMARY_KEY_REQUIRED_FOR_POSITION) &&
+ table->s->primary_key < MAX_KEY)
+ {
+ /*
+ Use a more efficient method to fetch the record given by
+ table->record[0] if the engine allows it. We first compute a
+ row reference using the position() member function (it will be
+ stored in table->file->ref) and the use rnd_pos() to position
+ the "cursor" (i.e., record[0] in this case) at the correct row.
+
+ TODO: Add a check that the correct record has been fetched by
+ comparing with the original record. Take into account that the
+ record on the master and slave can be of different
+ length. Something along these lines should work:
+
+ ADD>>> store_record(table,record[1]);
+ int error= table->file->rnd_pos(table->record[0], table->file->ref);
+ ADD>>> DBUG_ASSERT(memcmp(table->record[1], table->record[0],
+ table->s->reclength) == 0);
+
+ */
+ DBUG_PRINT("info",("locating record using primary key (position)"));
+ int error= table->file->rnd_pos_by_record(table->record[0]);
+ if (error)
+ {
+ DBUG_PRINT("info",("rnd_pos returns error %d",error));
+ table->file->print_error(error, MYF(0));
+ }
+ DBUG_RETURN(error);
+ }
+
+ // We can't use position() - try other methods.
+
+ /*
+ We need to retrieve all fields
+ TODO: Move this out from this function to main loop
+ */
+ table->use_all_columns();
+
+ /*
+ Save copy of the record in table->record[1]. It might be needed
+ later if linear search is used to find exact match.
+ */
+ store_record(table,record[1]);
+
+ if (table->s->keys > 0)
+ {
+ DBUG_PRINT("info",("locating record using primary key (index_read)"));
+
+ /* We have a key: search the table using the index */
+ if (!table->file->inited && (error= table->file->ha_index_init(0, FALSE)))
+ {
+ DBUG_PRINT("info",("ha_index_init returns error %d",error));
+ table->file->print_error(error, MYF(0));
+ DBUG_RETURN(error);
+ }
+
+ /* Fill key data for the row */
+
+ DBUG_ASSERT(m_key);
+ key_copy(m_key, table->record[0], table->key_info, 0);
+
+ /*
+ Don't print debug messages when running valgrind since they can
+ trigger false warnings.
+ */
+#ifndef HAVE_purify
+ DBUG_DUMP("key data", m_key, table->key_info->key_length);
+#endif
+
+ /*
+ We need to set the null bytes to ensure that the filler bit are
+ all set when returning. There are storage engines that just set
+ the necessary bits on the bytes and don't set the filler bits
+ correctly.
+ */
+ my_ptrdiff_t const pos=
+ table->s->null_bytes > 0 ? table->s->null_bytes - 1 : 0;
+ table->record[0][pos]= 0xFF;
+
+ if ((error= table->file->index_read_map(table->record[0], m_key,
+ HA_WHOLE_KEY,
+ HA_READ_KEY_EXACT)))
+ {
+ DBUG_PRINT("info",("no record matching the key found in the table"));
+ table->file->print_error(error, MYF(0));
+ table->file->ha_index_end();
+ DBUG_RETURN(error);
+ }
+
+ /*
+ Don't print debug messages when running valgrind since they can
+ trigger false warnings.
+ */
+#ifndef HAVE_purify
+ DBUG_PRINT("info",("found first matching record"));
+ DBUG_DUMP("record[0]", table->record[0], table->s->reclength);
+#endif
+ /*
+ Below is a minor "optimization". If the key (i.e., key number
+ 0) has the HA_NOSAME flag set, we know that we have found the
+ correct record (since there can be no duplicates); otherwise, we
+ have to compare the record with the one found to see if it is
+ the correct one.
+
+ CAVEAT! This behaviour is essential for the replication of,
+ e.g., the mysql.proc table since the correct record *shall* be
+ found using the primary key *only*. There shall be no
+ comparison of non-PK columns to decide if the correct record is
+ found. I can see no scenario where it would be incorrect to
+ chose the row to change only using a PK or an UNNI.
+ */
+ if (table->key_info->flags & HA_NOSAME)
+ {
+ table->file->ha_index_end();
+ DBUG_RETURN(0);
+ }
+
+ /*
+ In case key is not unique, we still have to iterate over records found
+ and find the one which is identical to the row given. A copy of the
+ record we are looking for is stored in record[1].
+ */
+ DBUG_PRINT("info",("non-unique index, scanning it to find matching record"));
+
+ while (record_compare(table))
+ {
+ /*
+ We need to set the null bytes to ensure that the filler bit
+ are all set when returning. There are storage engines that
+ just set the necessary bits on the bytes and don't set the
+ filler bits correctly.
+
+ TODO[record format ndb]: Remove this code once NDB returns the
+ correct record format.
+ */
+ if (table->s->null_bytes > 0)
+ {
+ table->record[0][table->s->null_bytes - 1]|=
+ 256U - (1U << table->s->last_null_bit_pos);
+ }
+
+ if ((error= table->file->index_next(table->record[0])))
+ {
+ DBUG_PRINT("info",("no record matching the given row found"));
+ table->file->print_error(error, MYF(0));
+ table->file->ha_index_end();
+ DBUG_RETURN(error);
+ }
+ }
+
+ /*
+ Have to restart the scan to be able to fetch the next row.
+ */
+ table->file->ha_index_end();
+ }
+ else
+ {
+ DBUG_PRINT("info",("locating record using table scan (rnd_next)"));
+
+ int restart_count= 0; // Number of times scanning has restarted from top
+
+ /* We don't have a key: search the table using rnd_next() */
+ if ((error= table->file->ha_rnd_init(1)))
+ {
+ DBUG_PRINT("info",("error initializing table scan"
+ " (ha_rnd_init returns %d)",error));
+ table->file->print_error(error, MYF(0));
+ DBUG_RETURN(error);
+ }
+
+ /* Continue until we find the right record or have made a full loop */
+ do
+ {
+ error= table->file->rnd_next(table->record[0]);
+
+ switch (error) {
+
+ case 0:
+ case HA_ERR_RECORD_DELETED:
+ break;
+
+ case HA_ERR_END_OF_FILE:
+ if (++restart_count < 2)
+ table->file->ha_rnd_init(1);
+ break;
+
+ default:
+ DBUG_PRINT("info", ("Failed to get next record"
+ " (rnd_next returns %d)",error));
+ table->file->print_error(error, MYF(0));
+ table->file->ha_rnd_end();
+ DBUG_RETURN(error);
+ }
+ }
+ while (restart_count < 2 && record_compare(table));
+
+ /*
+ Note: above record_compare will take into accout all record fields
+ which might be incorrect in case a partial row was given in the event
+ */
+
+ /*
+ Have to restart the scan to be able to fetch the next row.
+ */
+ if (restart_count == 2)
+ DBUG_PRINT("info", ("Record not found"));
+ else
+ DBUG_DUMP("record found", table->record[0], table->s->reclength);
+ table->file->ha_rnd_end();
+
+ DBUG_ASSERT(error == HA_ERR_END_OF_FILE || error == 0);
+ DBUG_RETURN(error);
+ }
+
+ DBUG_RETURN(0);
+}
+
+#endif
+
+
+/**************************************************************************
+ Write_rows_log_event member functions
+**************************************************************************/
+
+/*
+ Constructor used to build an event for writing to the binary log.
+ */
+#if !defined(MYSQL_CLIENT)
+Write_rows_log_event_old::Write_rows_log_event_old(THD *thd_arg,
+ TABLE *tbl_arg,
+ ulong tid_arg,
+ MY_BITMAP const *cols,
+ bool is_transactional)
+ : Old_rows_log_event(thd_arg, tbl_arg, tid_arg, cols, is_transactional)
+{
+
+ // This constructor should not be reached.
+ assert(0);
+
+}
+#endif
+
+
+/*
+ Constructor used by slave to read the event from the binary log.
+ */
+#ifdef HAVE_REPLICATION
+Write_rows_log_event_old::Write_rows_log_event_old(const char *buf,
+ uint event_len,
+ const Format_description_log_event
+ *description_event)
+: Old_rows_log_event(buf, event_len, PRE_GA_WRITE_ROWS_EVENT,
+ description_event)
+{
+}
+#endif
+
+
+#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION)
+int
+Write_rows_log_event_old::do_before_row_operations(const Slave_reporting_capability *const)
+{
+ int error= 0;
+
+ /*
+ We are using REPLACE semantics and not INSERT IGNORE semantics
+ when writing rows, that is: new rows replace old rows. We need to
+ inform the storage engine that it should use this behaviour.
+ */
+
+ /* Tell the storage engine that we are using REPLACE semantics. */
+ thd->lex->duplicates= DUP_REPLACE;
+
+ /*
+ Pretend we're executing a REPLACE command: this is needed for
+ InnoDB and NDB Cluster since they are not (properly) checking the
+ lex->duplicates flag.
+ */
+ thd->lex->sql_command= SQLCOM_REPLACE;
+ /*
+ Do not raise the error flag in case of hitting to an unique attribute
+ */
+ m_table->file->extra(HA_EXTRA_IGNORE_DUP_KEY);
+ /*
+ NDB specific: update from ndb master wrapped as Write_rows
+ */
+ /*
+ so that the event should be applied to replace slave's row
+ */
+ m_table->file->extra(HA_EXTRA_WRITE_CAN_REPLACE);
+ /*
+ NDB specific: if update from ndb master wrapped as Write_rows
+ does not find the row it's assumed idempotent binlog applying
+ is taking place; don't raise the error.
+ */
+ m_table->file->extra(HA_EXTRA_IGNORE_NO_KEY);
+ /*
+ TODO: the cluster team (Tomas?) says that it's better if the engine knows
+ how many rows are going to be inserted, then it can allocate needed memory
+ from the start.
+ */
+ m_table->file->ha_start_bulk_insert(0);
+ /*
+ We need TIMESTAMP_NO_AUTO_SET otherwise ha_write_row() will not use fill
+ any TIMESTAMP column with data from the row but instead will use
+ the event's current time.
+ As we replicate from TIMESTAMP to TIMESTAMP and slave has no extra
+ columns, we know that all TIMESTAMP columns on slave will receive explicit
+ data from the row, so TIMESTAMP_NO_AUTO_SET is ok.
+ When we allow a table without TIMESTAMP to be replicated to a table having
+ more columns including a TIMESTAMP column, or when we allow a TIMESTAMP
+ column to be replicated into a BIGINT column and the slave's table has a
+ TIMESTAMP column, then the slave's TIMESTAMP column will take its value
+ from set_time() which we called earlier (consistent with SBR). And then in
+ some cases we won't want TIMESTAMP_NO_AUTO_SET (will require some code to
+ analyze if explicit data is provided for slave's TIMESTAMP columns).
+ */
+ m_table->timestamp_field_type= TIMESTAMP_NO_AUTO_SET;
+ return error;
+}
+
+
+int
+Write_rows_log_event_old::do_after_row_operations(const Slave_reporting_capability *const,
+ int error)
+{
+ int local_error= 0;
+ m_table->file->extra(HA_EXTRA_NO_IGNORE_DUP_KEY);
+ m_table->file->extra(HA_EXTRA_WRITE_CANNOT_REPLACE);
+ /*
+ reseting the extra with
+ table->file->extra(HA_EXTRA_NO_IGNORE_NO_KEY);
+ fires bug#27077
+ todo: explain or fix
+ */
+ if ((local_error= m_table->file->ha_end_bulk_insert()))
+ {
+ m_table->file->print_error(local_error, MYF(0));
+ }
+ return error? error : local_error;
+}
+
+
+int
+Write_rows_log_event_old::do_exec_row(const Relay_log_info *const rli)
+{
+ DBUG_ASSERT(m_table != NULL);
+ int error= write_row(rli, TRUE /* overwrite */);
+
+ if (error && !thd->net.client_last_errno)
+ thd->net.client_last_errno= error;
+
+ return error;
+}
+
+#endif /* !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) */
+
+
+#ifdef MYSQL_CLIENT
+void Write_rows_log_event_old::print(FILE *file,
+ PRINT_EVENT_INFO* print_event_info)
+{
+ Old_rows_log_event::print_helper(file, print_event_info, "Write_rows_old");
+}
+#endif
+
+
+/**************************************************************************
+ Delete_rows_log_event member functions
+**************************************************************************/
+
+/*
+ Constructor used to build an event for writing to the binary log.
+ */
+
+#ifndef MYSQL_CLIENT
+Delete_rows_log_event_old::Delete_rows_log_event_old(THD *thd_arg,
+ TABLE *tbl_arg,
+ ulong tid,
+ MY_BITMAP const *cols,
+ bool is_transactional)
+ : Old_rows_log_event(thd_arg, tbl_arg, tid, cols, is_transactional),
+ m_after_image(NULL), m_memory(NULL)
+{
+
+ // This constructor should not be reached.
+ assert(0);
+
+}
+#endif /* #if !defined(MYSQL_CLIENT) */
+
+
+/*
+ Constructor used by slave to read the event from the binary log.
+ */
+#ifdef HAVE_REPLICATION
+Delete_rows_log_event_old::Delete_rows_log_event_old(const char *buf,
+ uint event_len,
+ const Format_description_log_event
+ *description_event)
+ : Old_rows_log_event(buf, event_len, PRE_GA_DELETE_ROWS_EVENT,
+ description_event),
+ m_after_image(NULL), m_memory(NULL)
+{
+}
+#endif
+
+
+#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION)
+
+int
+Delete_rows_log_event_old::do_before_row_operations(const Slave_reporting_capability *const)
+{
+ if ((m_table->file->ha_table_flags() & HA_PRIMARY_KEY_REQUIRED_FOR_POSITION) &&
+ m_table->s->primary_key < MAX_KEY)
+ {
+ /*
+ We don't need to allocate any memory for m_key since it is not used.
+ */
+ return 0;
+ }
+
+ if (m_table->s->keys > 0)
+ {
+ // Allocate buffer for key searches
+ m_key= (uchar*)my_malloc(m_table->key_info->key_length, MYF(MY_WME));
+ if (!m_key)
+ return HA_ERR_OUT_OF_MEM;
+ }
+ return 0;
+}
+
+
+int
+Delete_rows_log_event_old::do_after_row_operations(const Slave_reporting_capability *const,
+ int error)
+{
+ /*error= ToDo:find out what this should really be, this triggers close_scan in nbd, returning error?*/
+ m_table->file->ha_index_or_rnd_end();
+ my_free(m_key, MYF(MY_ALLOW_ZERO_PTR));
+ m_key= NULL;
+
+ return error;
+}
+
+
+int Delete_rows_log_event_old::do_exec_row(const Relay_log_info *const rli)
+{
+ int error;
+ DBUG_ASSERT(m_table != NULL);
+
+ if (!(error= find_row(rli)))
+ {
+ /*
+ Delete the record found, located in record[0]
+ */
+ error= m_table->file->ha_delete_row(m_table->record[0]);
+ }
+ return error;
+}
+
+#endif /* !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) */
+
+
+#ifdef MYSQL_CLIENT
+void Delete_rows_log_event_old::print(FILE *file,
+ PRINT_EVENT_INFO* print_event_info)
+{
+ Old_rows_log_event::print_helper(file, print_event_info, "Delete_rows_old");
+}
+#endif
+
+
+/**************************************************************************
+ Update_rows_log_event member functions
+**************************************************************************/
+
+/*
+ Constructor used to build an event for writing to the binary log.
+ */
+#if !defined(MYSQL_CLIENT)
+Update_rows_log_event_old::Update_rows_log_event_old(THD *thd_arg,
+ TABLE *tbl_arg,
+ ulong tid,
+ MY_BITMAP const *cols,
+ bool is_transactional)
+ : Old_rows_log_event(thd_arg, tbl_arg, tid, cols, is_transactional),
+ m_after_image(NULL), m_memory(NULL)
+{
+
+ // This constructor should not be reached.
+ assert(0);
+}
+#endif /* !defined(MYSQL_CLIENT) */
+
+
+/*
+ Constructor used by slave to read the event from the binary log.
+ */
+#ifdef HAVE_REPLICATION
+Update_rows_log_event_old::Update_rows_log_event_old(const char *buf,
+ uint event_len,
+ const
+ Format_description_log_event
+ *description_event)
+ : Old_rows_log_event(buf, event_len, PRE_GA_UPDATE_ROWS_EVENT,
+ description_event),
+ m_after_image(NULL), m_memory(NULL)
+{
+}
+#endif
+
+
+#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION)
+
+int
+Update_rows_log_event_old::do_before_row_operations(const Slave_reporting_capability *const)
+{
+ if (m_table->s->keys > 0)
+ {
+ // Allocate buffer for key searches
+ m_key= (uchar*)my_malloc(m_table->key_info->key_length, MYF(MY_WME));
+ if (!m_key)
+ return HA_ERR_OUT_OF_MEM;
+ }
+
+ m_table->timestamp_field_type= TIMESTAMP_NO_AUTO_SET;
+
+ return 0;
+}
+
+
+int
+Update_rows_log_event_old::do_after_row_operations(const Slave_reporting_capability *const,
+ int error)
+{
+ /*error= ToDo:find out what this should really be, this triggers close_scan in nbd, returning error?*/
+ m_table->file->ha_index_or_rnd_end();
+ my_free(m_key, MYF(MY_ALLOW_ZERO_PTR)); // Free for multi_malloc
+ m_key= NULL;
+
+ return error;
+}
+
+
+int
+Update_rows_log_event_old::do_exec_row(const Relay_log_info *const rli)
+{
+ DBUG_ASSERT(m_table != NULL);
+
+ int error= find_row(rli);
+ if (error)
+ {
+ /*
+ We need to read the second image in the event of error to be
+ able to skip to the next pair of updates
+ */
+ m_curr_row= m_curr_row_end;
+ unpack_current_row(rli);
+ return error;
+ }
+
+ /*
+ This is the situation after locating BI:
+
+ ===|=== before image ====|=== after image ===|===
+ ^ ^
+ m_curr_row m_curr_row_end
+
+ BI found in the table is stored in record[0]. We copy it to record[1]
+ and unpack AI to record[0].
+ */
+
+ store_record(m_table,record[1]);
+
+ m_curr_row= m_curr_row_end;
+ error= unpack_current_row(rli); // this also updates m_curr_row_end
+
+ /*
+ Now we have the right row to update. The old row (the one we're
+ looking for) is in record[1] and the new row is in record[0].
+ */
+#ifndef HAVE_purify
+ /*
+ Don't print debug messages when running valgrind since they can
+ trigger false warnings.
+ */
+ DBUG_PRINT("info",("Updating row in table"));
+ DBUG_DUMP("old record", m_table->record[1], m_table->s->reclength);
+ DBUG_DUMP("new values", m_table->record[0], m_table->s->reclength);
+#endif
+
+ error= m_table->file->ha_update_row(m_table->record[1], m_table->record[0]);
+ if (error == HA_ERR_RECORD_IS_THE_SAME)
+ error= 0;
+
+ return error;
+}
+
+#endif /* !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) */
+
+
+#ifdef MYSQL_CLIENT
+void Update_rows_log_event_old::print(FILE *file,
+ PRINT_EVENT_INFO* print_event_info)
+{
+ Old_rows_log_event::print_helper(file, print_event_info, "Update_rows_old");
+}
+#endif
diff --git a/sql/log_event_old.h b/sql/log_event_old.h
index 81e55097905..719802a80fb 100644
--- a/sql/log_event_old.h
+++ b/sql/log_event_old.h
@@ -20,18 +20,261 @@
Need to include this file at the proper position of log_event.h
*/
+
+/**
+ @file
+
+ @brief This file contains classes handling old formats of row-based
+ binlog events.
+*/
+/*
+ Around 2007-10-31, I made these classes completely separated from
+ the new classes (before, there was a complex class hierarchy
+ involving multiple inheritance; see BUG#31581), by simply copying
+ and pasting the entire contents of Rows_log_event into
+ Old_rows_log_event and the entire contents of
+ {Write|Update|Delete}_rows_log_event into
+ {Write|Update|Delete}_rows_log_event_old. For clarity, I will keep
+ the comments marking which code was cut-and-pasted for some time.
+ With the classes collapsed into one, there is probably some
+ redundancy (maybe some methods can be simplified and/or removed),
+ but we keep them this way for now. /Sven
+*/
+
+
+/**
+ @class Old_rows_log_event
-class Old_rows_log_event
+ Base class for the three types of row-based events
+ {Write|Update|Delete}_row_log_event_old, with event type codes
+ PRE_GA_{WRITE|UPDATE|DELETE}_ROWS_EVENT. These events are never
+ created any more, except when reading a relay log created by an old
+ server.
+*/
+class Old_rows_log_event : public Log_event
{
- public:
-
- virtual ~Old_rows_log_event() {}
+ /********** BEGIN CUT & PASTE FROM Rows_log_event **********/
+public:
+ /**
+ Enumeration of the errors that can be returned.
+ */
+ enum enum_error
+ {
+ ERR_OPEN_FAILURE = -1, /**< Failure to open table */
+ ERR_OK = 0, /**< No error */
+ ERR_TABLE_LIMIT_EXCEEDED = 1, /**< No more room for tables */
+ ERR_OUT_OF_MEM = 2, /**< Out of memory */
+ ERR_BAD_TABLE_DEF = 3, /**< Table definition does not match */
+ ERR_RBR_TO_SBR = 4 /**< daisy-chanining RBR to SBR not allowed */
+ };
+
+ /*
+ These definitions allow you to combine the flags into an
+ appropriate flag set using the normal bitwise operators. The
+ implicit conversion from an enum-constant to an integer is
+ accepted by the compiler, which is then used to set the real set
+ of flags.
+ */
+ enum enum_flag
+ {
+ /* Last event of a statement */
+ STMT_END_F = (1U << 0),
+
+ /* Value of the OPTION_NO_FOREIGN_KEY_CHECKS flag in thd->options */
+ NO_FOREIGN_KEY_CHECKS_F = (1U << 1),
+
+ /* Value of the OPTION_RELAXED_UNIQUE_CHECKS flag in thd->options */
+ RELAXED_UNIQUE_CHECKS_F = (1U << 2),
+
+ /**
+ Indicates that rows in this event are complete, that is contain
+ values for all columns of the table.
+ */
+ COMPLETE_ROWS_F = (1U << 3)
+ };
+
+ typedef uint16 flag_set;
+
+ /* Special constants representing sets of flags */
+ enum
+ {
+ RLE_NO_FLAGS = 0U
+ };
+
+ virtual ~Old_rows_log_event();
+
+ void set_flags(flag_set flags_arg) { m_flags |= flags_arg; }
+ void clear_flags(flag_set flags_arg) { m_flags &= ~flags_arg; }
+ flag_set get_flags(flag_set flags_arg) const { return m_flags & flags_arg; }
+
+#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION)
+ virtual void pack_info(Protocol *protocol);
+#endif
+
+#ifdef MYSQL_CLIENT
+ /* not for direct call, each derived has its own ::print() */
+ virtual void print(FILE *file, PRINT_EVENT_INFO *print_event_info)= 0;
+#endif
+
+#ifndef MYSQL_CLIENT
+ int add_row_data(uchar *data, size_t length)
+ {
+ return do_add_row_data(data,length);
+ }
+#endif
+
+ /* Member functions to implement superclass interface */
+ virtual int get_data_size();
+
+ MY_BITMAP const *get_cols() const { return &m_cols; }
+ size_t get_width() const { return m_width; }
+ ulong get_table_id() const { return m_table_id; }
+
+#ifndef MYSQL_CLIENT
+ virtual bool write_data_header(IO_CACHE *file);
+ virtual bool write_data_body(IO_CACHE *file);
+ virtual const char *get_db() { return m_table->s->db.str; }
+#endif
+ /*
+ Check that malloc() succeeded in allocating memory for the rows
+ buffer and the COLS vector. Checking that an Update_rows_log_event_old
+ is valid is done in the Update_rows_log_event_old::is_valid()
+ function.
+ */
+ virtual bool is_valid() const
+ {
+ return m_rows_buf && m_cols.bitmap;
+ }
+
+ uint m_row_count; /* The number of rows added to the event */
+
+protected:
+ /*
+ The constructors are protected since you're supposed to inherit
+ this class, not create instances of this class.
+ */
+#ifndef MYSQL_CLIENT
+ Old_rows_log_event(THD*, TABLE*, ulong table_id,
+ MY_BITMAP const *cols, bool is_transactional);
+#endif
+ Old_rows_log_event(const char *row_data, uint event_len,
+ Log_event_type event_type,
+ const Format_description_log_event *description_event);
+
+#ifdef MYSQL_CLIENT
+ void print_helper(FILE *, PRINT_EVENT_INFO *, char const *const name);
+#endif
+
+#ifndef MYSQL_CLIENT
+ virtual int do_add_row_data(uchar *data, size_t length);
+#endif
+
+#ifndef MYSQL_CLIENT
+ TABLE *m_table; /* The table the rows belong to */
+#endif
+ ulong m_table_id; /* Table ID */
+ MY_BITMAP m_cols; /* Bitmap denoting columns available */
+ ulong m_width; /* The width of the columns bitmap */
+
+ ulong m_master_reclength; /* Length of record on master side */
+
+ /* Bit buffers in the same memory as the class */
+ uint32 m_bitbuf[128/(sizeof(uint32)*8)];
+ uint32 m_bitbuf_ai[128/(sizeof(uint32)*8)];
+
+ uchar *m_rows_buf; /* The rows in packed format */
+ uchar *m_rows_cur; /* One-after the end of the data */
+ uchar *m_rows_end; /* One-after the end of the allocated space */
+
+ flag_set m_flags; /* Flags for row-level events */
+
+ /* helper functions */
+
+#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION)
+ const uchar *m_curr_row; /* Start of the row being processed */
+ const uchar *m_curr_row_end; /* One-after the end of the current row */
+ uchar *m_key; /* Buffer to keep key value during searches */
+
+ int find_row(const Relay_log_info *const);
+ int write_row(const Relay_log_info *const, const bool);
+
+ // Unpack the current row into m_table->record[0]
+ int unpack_current_row(const Relay_log_info *const rli)
+ {
+ DBUG_ASSERT(m_table);
+ ASSERT_OR_RETURN_ERROR(m_curr_row < m_rows_end, HA_ERR_CORRUPT_EVENT);
+ int const result= ::unpack_row(rli, m_table, m_width, m_curr_row, &m_cols,
+ &m_curr_row_end, &m_master_reclength);
+ ASSERT_OR_RETURN_ERROR(m_curr_row_end <= m_rows_end, HA_ERR_CORRUPT_EVENT);
+ return result;
+ }
+#endif
+
+private:
+
+#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION)
+ virtual int do_apply_event(Relay_log_info const *rli);
+ virtual int do_update_pos(Relay_log_info *rli);
+ virtual enum_skip_reason do_shall_skip(Relay_log_info *rli);
+
+ /*
+ Primitive to prepare for a sequence of row executions.
+
+ DESCRIPTION
+
+ Before doing a sequence of do_prepare_row() and do_exec_row()
+ calls, this member function should be called to prepare for the
+ entire sequence. Typically, this member function will allocate
+ space for any buffers that are needed for the two member
+ functions mentioned above.
+
+ RETURN VALUE
+
+ The member function will return 0 if all went OK, or a non-zero
+ error code otherwise.
+ */
+ virtual
+ int do_before_row_operations(const Slave_reporting_capability *const log) = 0;
+
+ /*
+ Primitive to clean up after a sequence of row executions.
+
+ DESCRIPTION
+
+ After doing a sequence of do_prepare_row() and do_exec_row(),
+ this member function should be called to clean up and release
+ any allocated buffers.
+
+ The error argument, if non-zero, indicates an error which happened during
+ row processing before this function was called. In this case, even if
+ function is successful, it should return the error code given in the argument.
+ */
+ virtual
+ int do_after_row_operations(const Slave_reporting_capability *const log,
+ int error) = 0;
+
+ /*
+ Primitive to do the actual execution necessary for a row.
+
+ DESCRIPTION
+ The member function will do the actual execution needed to handle a row.
+ The row is located at m_curr_row. When the function returns,
+ m_curr_row_end should point at the next row (one byte after the end
+ of the current row).
+
+ RETURN VALUE
+ 0 if execution succeeded, 1 if execution failed.
+
+ */
+ virtual int do_exec_row(const Relay_log_info *const rli) = 0;
+#endif /* !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) */
+ /********** END OF CUT & PASTE FROM Rows_log_event **********/
protected:
#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION)
- int do_apply_event(Rows_log_event*,const Relay_log_info*);
+ int do_apply_event(Old_rows_log_event*,const Relay_log_info*);
/*
Primitive to prepare for a sequence of row executions.
@@ -100,33 +343,61 @@ class Old_rows_log_event
};
-class Write_rows_log_event_old
- : public Write_rows_log_event, public Old_rows_log_event
-{
+/**
+ @class Write_rows_log_event_old
+ Old class for binlog events that write new rows to a table (event
+ type code PRE_GA_WRITE_ROWS_EVENT). Such events are never produced
+ by this version of the server, but they may be read from a relay log
+ created by an old server. New servers create events of class
+ Write_rows_log_event (event type code WRITE_ROWS_EVENT) instead.
+*/
+class Write_rows_log_event_old : public Old_rows_log_event
+{
+ /********** BEGIN CUT & PASTE FROM Write_rows_log_event **********/
public:
- enum
- {
- /* Support interface to THD::binlog_prepare_pending_rows_event */
- TYPE_CODE = PRE_GA_WRITE_ROWS_EVENT
- };
-
#if !defined(MYSQL_CLIENT)
- Write_rows_log_event_old(THD *thd, TABLE *table, ulong table_id,
- MY_BITMAP const *cols, bool is_transactional)
- : Write_rows_log_event(thd, table, table_id, cols, is_transactional)
- {
- }
+ Write_rows_log_event_old(THD*, TABLE*, ulong table_id,
+ MY_BITMAP const *cols, bool is_transactional);
#endif
-#if defined(HAVE_REPLICATION)
+#ifdef HAVE_REPLICATION
Write_rows_log_event_old(const char *buf, uint event_len,
- const Format_description_log_event *descr)
- : Write_rows_log_event(buf, event_len, descr)
+ const Format_description_log_event *description_event);
+#endif
+#if !defined(MYSQL_CLIENT)
+ static bool binlog_row_logging_function(THD *thd, TABLE *table,
+ bool is_transactional,
+ MY_BITMAP *cols,
+ uint fields,
+ const uchar *before_record
+ __attribute__((unused)),
+ const uchar *after_record)
{
+ return thd->binlog_write_row(table, is_transactional,
+ cols, fields, after_record);
}
#endif
private:
+#ifdef MYSQL_CLIENT
+ void print(FILE *file, PRINT_EVENT_INFO *print_event_info);
+#endif
+
+#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION)
+ virtual int do_before_row_operations(const Slave_reporting_capability *const);
+ virtual int do_after_row_operations(const Slave_reporting_capability *const,int);
+ virtual int do_exec_row(const Relay_log_info *const);
+#endif
+ /********** END OF CUT & PASTE FROM Write_rows_log_event **********/
+
+public:
+ enum
+ {
+ /* Support interface to THD::binlog_prepare_pending_rows_event */
+ TYPE_CODE = PRE_GA_WRITE_ROWS_EVENT
+ };
+
+private:
virtual Log_event_type get_type_code() { return (Log_event_type)TYPE_CODE; }
#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION)
@@ -145,9 +416,56 @@ private:
};
-class Update_rows_log_event_old
- : public Update_rows_log_event, public Old_rows_log_event
+/**
+ @class Update_rows_log_event_old
+
+ Old class for binlog events that modify existing rows to a table
+ (event type code PRE_GA_UPDATE_ROWS_EVENT). Such events are never
+ produced by this version of the server, but they may be read from a
+ relay log created by an old server. New servers create events of
+ class Update_rows_log_event (event type code UPDATE_ROWS_EVENT)
+ instead.
+*/
+class Update_rows_log_event_old : public Old_rows_log_event
{
+ /********** BEGIN CUT & PASTE FROM Update_rows_log_event **********/
+public:
+#ifndef MYSQL_CLIENT
+ Update_rows_log_event_old(THD*, TABLE*, ulong table_id,
+ MY_BITMAP const *cols,
+ bool is_transactional);
+#endif
+
+#ifdef HAVE_REPLICATION
+ Update_rows_log_event_old(const char *buf, uint event_len,
+ const Format_description_log_event *description_event);
+#endif
+
+#if !defined(MYSQL_CLIENT)
+ static bool binlog_row_logging_function(THD *thd, TABLE *table,
+ bool is_transactional,
+ MY_BITMAP *cols,
+ uint fields,
+ const uchar *before_record,
+ const uchar *after_record)
+ {
+ return thd->binlog_update_row(table, is_transactional,
+ cols, fields, before_record, after_record);
+ }
+#endif
+
+protected:
+#ifdef MYSQL_CLIENT
+ void print(FILE *file, PRINT_EVENT_INFO *print_event_info);
+#endif
+
+#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION)
+ virtual int do_before_row_operations(const Slave_reporting_capability *const);
+ virtual int do_after_row_operations(const Slave_reporting_capability *const,int);
+ virtual int do_exec_row(const Relay_log_info *const);
+#endif /* !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) */
+ /********** END OF CUT & PASTE FROM Update_rows_log_event **********/
+
uchar *m_after_image, *m_memory;
public:
@@ -157,23 +475,6 @@ public:
TYPE_CODE = PRE_GA_UPDATE_ROWS_EVENT
};
-#if !defined(MYSQL_CLIENT)
- Update_rows_log_event_old(THD *thd, TABLE *table, ulong table_id,
- MY_BITMAP const *cols, bool is_transactional)
- : Update_rows_log_event(thd, table, table_id, cols, is_transactional),
- m_after_image(NULL), m_memory(NULL)
- {
- }
-#endif
-#if defined(HAVE_REPLICATION)
- Update_rows_log_event_old(const char *buf, uint event_len,
- const Format_description_log_event *descr)
- : Update_rows_log_event(buf, event_len, descr),
- m_after_image(NULL), m_memory(NULL)
- {
- }
-#endif
-
private:
virtual Log_event_type get_type_code() { return (Log_event_type)TYPE_CODE; }
@@ -192,9 +493,54 @@ private:
};
-class Delete_rows_log_event_old
- : public Delete_rows_log_event, public Old_rows_log_event
+/**
+ @class Delete_rows_log_event_old
+
+ Old class for binlog events that delete existing rows from a table
+ (event type code PRE_GA_DELETE_ROWS_EVENT). Such events are never
+ produced by this version of the server, but they may be read from a
+ relay log created by an old server. New servers create events of
+ class Delete_rows_log_event (event type code DELETE_ROWS_EVENT)
+ instead.
+*/
+class Delete_rows_log_event_old : public Old_rows_log_event
{
+ /********** BEGIN CUT & PASTE FROM Update_rows_log_event **********/
+public:
+#ifndef MYSQL_CLIENT
+ Delete_rows_log_event_old(THD*, TABLE*, ulong,
+ MY_BITMAP const *cols, bool is_transactional);
+#endif
+#ifdef HAVE_REPLICATION
+ Delete_rows_log_event_old(const char *buf, uint event_len,
+ const Format_description_log_event *description_event);
+#endif
+#if !defined(MYSQL_CLIENT)
+ static bool binlog_row_logging_function(THD *thd, TABLE *table,
+ bool is_transactional,
+ MY_BITMAP *cols,
+ uint fields,
+ const uchar *before_record,
+ const uchar *after_record
+ __attribute__((unused)))
+ {
+ return thd->binlog_delete_row(table, is_transactional,
+ cols, fields, before_record);
+ }
+#endif
+
+protected:
+#ifdef MYSQL_CLIENT
+ void print(FILE *file, PRINT_EVENT_INFO *print_event_info);
+#endif
+
+#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION)
+ virtual int do_before_row_operations(const Slave_reporting_capability *const);
+ virtual int do_after_row_operations(const Slave_reporting_capability *const,int);
+ virtual int do_exec_row(const Relay_log_info *const);
+#endif
+ /********** END CUT & PASTE FROM Delete_rows_log_event **********/
+
uchar *m_after_image, *m_memory;
public:
@@ -204,23 +550,6 @@ public:
TYPE_CODE = PRE_GA_DELETE_ROWS_EVENT
};
-#if !defined(MYSQL_CLIENT)
- Delete_rows_log_event_old(THD *thd, TABLE *table, ulong table_id,
- MY_BITMAP const *cols, bool is_transactional)
- : Delete_rows_log_event(thd, table, table_id, cols, is_transactional),
- m_after_image(NULL), m_memory(NULL)
- {
- }
-#endif
-#if defined(HAVE_REPLICATION)
- Delete_rows_log_event_old(const char *buf, uint event_len,
- const Format_description_log_event *descr)
- : Delete_rows_log_event(buf, event_len, descr),
- m_after_image(NULL), m_memory(NULL)
- {
- }
-#endif
-
private:
virtual Log_event_type get_type_code() { return (Log_event_type)TYPE_CODE; }
@@ -240,4 +569,3 @@ private:
#endif
-
diff --git a/sql/mf_iocache.cc b/sql/mf_iocache.cc
index 5d9d6d834b4..8c2d16c40b0 100644
--- a/sql/mf_iocache.cc
+++ b/sql/mf_iocache.cc
@@ -13,8 +13,11 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-/*
- Cashing of files with only does (sequential) read or writes of fixed-
+/**
+ @file
+
+ @details
+ Caching of files with only does (sequential) read or writes of fixed-
length records. A read isn't allowed to go over file-length. A read is ok
if it ends at file-length and next read can try to read after file-length
(and get a EOF-error).
@@ -34,11 +37,15 @@
extern "C" {
- /*
- ** Read buffered from the net.
- ** Returns 1 if can't read requested characters
- ** Returns 0 if record read
- */
+/**
+ Read buffered from the net.
+
+ @retval
+ 1 if can't read requested characters
+ @retval
+ 0 if record read
+*/
+
int _my_b_net_read(register IO_CACHE *info, uchar *Buffer,
size_t Count __attribute__((unused)))
diff --git a/sql/my_decimal.cc b/sql/my_decimal.cc
index 54cef6abdb5..651ff22d198 100644
--- a/sql/my_decimal.cc
+++ b/sql/my_decimal.cc
@@ -18,17 +18,15 @@
#ifndef MYSQL_CLIENT
-/*
- report result of decimal operation
+/**
+ report result of decimal operation.
- SYNOPSIS
- decimal_operation_results()
- result decimal library return code (E_DEC_* see include/decimal.h)
+ @param result decimal library return code (E_DEC_* see include/decimal.h)
- TODO
+ @todo
Fix error messages
- RETURN
+ @return
result
*/
diff --git a/sql/my_decimal.h b/sql/my_decimal.h
index 800ae23425b..1885036f42b 100644
--- a/sql/my_decimal.h
+++ b/sql/my_decimal.h
@@ -13,7 +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 */
-/*
+/**
+ @file
+
It is interface module to fixed precision decimals library.
Most functions use 'uint mask' as parameter, if during operation error
@@ -34,14 +36,14 @@ C_MODE_END
#define DECIMAL_LONG_DIGITS 10
#define DECIMAL_LONG3_DIGITS 8
-/* maximum length of buffer in our big digits (uint32) */
+/** maximum length of buffer in our big digits (uint32). */
#define DECIMAL_BUFF_LENGTH 9
/* the number of digits that my_decimal can possibly contain */
#define DECIMAL_MAX_POSSIBLE_PRECISION (DECIMAL_BUFF_LENGTH * 9)
-/*
+/**
maximum guaranteed precision of number in decimal digits (number of our
digits * number of decimal digits in one our big digit - number of decimal
digits in one our big digit decreased by 1 (because we always put decimal
@@ -51,13 +53,14 @@ C_MODE_END
#define DECIMAL_MAX_SCALE 30
#define DECIMAL_NOT_SPECIFIED 31
-/*
+/**
maximum length of string representation (number of maximum decimal
digits + 1 position for sign + 1 position for decimal point)
*/
#define DECIMAL_MAX_STR_LENGTH (DECIMAL_MAX_POSSIBLE_PRECISION + 2)
-/*
- maximum size of packet length
+
+/**
+ maximum size of packet length.
*/
#define DECIMAL_MAX_FIELD_SIZE DECIMAL_MAX_PRECISION
@@ -78,11 +81,12 @@ inline int my_decimal_int_part(uint precision, uint decimals)
}
-/*
- my_decimal class limits 'decimal_t' type to what we need in MySQL
+/**
+ my_decimal class limits 'decimal_t' type to what we need in MySQL.
+
It contains internally all necessary space needed by the instance so
no extra memory is needed. One should call fix_buffer_pointer() function
- when he moves my_decimal objects in memory
+ when he moves my_decimal objects in memory.
*/
class my_decimal :public decimal_t
@@ -384,7 +388,10 @@ int my_decimal_mod(uint mask, my_decimal *res, const my_decimal *a,
}
-/* Returns -1 if a<b, 1 if a>b and 0 if a==b */
+/**
+ @return
+ -1 if a<b, 1 if a>b and 0 if a==b
+*/
inline
int my_decimal_cmp(const my_decimal *a, const my_decimal *b)
{
diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h
index 49eb2ba0e36..f1a594351bc 100644
--- a/sql/mysql_priv.h
+++ b/sql/mysql_priv.h
@@ -13,10 +13,13 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-/*
+/**
+ @file
+
+ @details
Mostly this file is used in the server. But a little part of it is used in
mysqlbinlog too (definition of SELECT_DISTINCT and others).
- The consequence is that 90% of the file is wrapped in #ifndef MYSQL_CLIENT,
+ The consequence is that 90% of the file is wrapped in \#ifndef MYSQL_CLIENT,
except the part which must be in the server and in the client.
*/
@@ -253,12 +256,12 @@ protected:
Feel free to raise this by the smallest amount you can to get the
"execution_constants" test to pass.
*/
-#define STACK_MIN_SIZE 12000 // Abort if less stack during eval.
+#define STACK_MIN_SIZE 12000 ///< Abort if less stack during eval.
#define STACK_MIN_SIZE_FOR_OPEN 1024*80
-#define STACK_BUFF_ALLOC 352 // For stack overrun checks
+#define STACK_BUFF_ALLOC 352 ///< For stack overrun checks
#ifndef MYSQLD_NET_RETRY_COUNT
-#define MYSQLD_NET_RETRY_COUNT 10 // Abort read after this many int.
+#define MYSQLD_NET_RETRY_COUNT 10 ///< Abort read after this many int.
#endif
#define TEMP_POOL_SIZE 128
@@ -266,13 +269,15 @@ protected:
#define QUERY_ALLOC_PREALLOC_SIZE 8192
#define TRANS_ALLOC_BLOCK_SIZE 4096
#define TRANS_ALLOC_PREALLOC_SIZE 4096
-#define RANGE_ALLOC_BLOCK_SIZE 2048
+#define RANGE_ALLOC_BLOCK_SIZE 4096
#define ACL_ALLOC_BLOCK_SIZE 1024
#define UDF_ALLOC_BLOCK_SIZE 1024
#define TABLE_ALLOC_BLOCK_SIZE 1024
#define BDB_LOG_ALLOC_BLOCK_SIZE 1024
#define WARN_ALLOC_BLOCK_SIZE 2048
#define WARN_ALLOC_PREALLOC_SIZE 1024
+#define PROFILE_ALLOC_BLOCK_SIZE 2048
+#define PROFILE_ALLOC_PREALLOC_SIZE 1024
/*
The following parameters is to decide when to use an extra cache to
@@ -282,14 +287,14 @@ protected:
#define MIN_ROWS_TO_USE_TABLE_CACHE 100
#define MIN_ROWS_TO_USE_BULK_INSERT 100
-/*
+/**
The following is used to decide if MySQL should use table scanning
instead of reading with keys. The number says how many evaluation of the
WHERE clause is comparable to reading one extra row from a table.
*/
#define TIME_FOR_COMPARE 5 // 5 compares == one read
-/*
+/**
Number of comparisons of table rowids equivalent to reading one row from a
table.
*/
@@ -309,17 +314,17 @@ protected:
#define DISK_SEEK_PROP_COST ((double)0.5/BLOCKS_IN_AVG_SEEK)
-/*
+/**
Number of rows in a reference table when refereed through a not unique key.
This value is only used when we don't know anything about the key
distribution.
*/
#define MATCHING_ROWS_IN_OTHER_TABLE 10
-/* Don't pack string keys shorter than this (if PACK_KEYS=1 isn't used) */
+/** Don't pack string keys shorter than this (if PACK_KEYS=1 isn't used). */
#define KEY_DEFAULT_PACK_LENGTH 8
-/* Characters shown for the command in 'show processlist' */
+/** Characters shown for the command in 'show processlist'. */
#define PROCESS_LIST_WIDTH 100
/* Characters shown for the command in 'information_schema.processlist' */
#define PROCESS_LIST_INFO_WIDTH 65535
@@ -335,11 +340,11 @@ protected:
/* The following can also be changed from the command line */
#define DEFAULT_CONCURRENCY 10
-#define DELAYED_LIMIT 100 /* pause after xxx inserts */
+#define DELAYED_LIMIT 100 /**< pause after xxx inserts */
#define DELAYED_QUEUE_SIZE 1000
-#define DELAYED_WAIT_TIMEOUT 5*60 /* Wait for delayed insert */
-#define FLUSH_TIME 0 /* Don't flush tables */
-#define MAX_CONNECT_ERRORS 10 // errors before disabling host
+#define DELAYED_WAIT_TIMEOUT 5*60 /**< Wait for delayed insert */
+#define FLUSH_TIME 0 /**< Don't flush tables */
+#define MAX_CONNECT_ERRORS 10 ///< errors before disabling host
#ifdef __NETWARE__
#define IF_NETWARE(A,B) A
@@ -349,7 +354,7 @@ protected:
#if defined(__WIN__)
#undef FLUSH_TIME
-#define FLUSH_TIME 1800 /* Flush every half hour */
+#define FLUSH_TIME 1800 /**< Flush every half hour */
#define INTERRUPT_PRIOR -2
#define CONNECT_PRIOR -1
@@ -368,12 +373,12 @@ protected:
#define TEST_MIT_THREAD 4
#define TEST_BLOCKING 8
#define TEST_KEEP_TMP_TABLES 16
-#define TEST_READCHECK 64 /* Force use of readcheck */
+#define TEST_READCHECK 64 /**< Force use of readcheck */
#define TEST_NO_EXTRA 128
-#define TEST_CORE_ON_SIGNAL 256 /* Give core if signal */
+#define TEST_CORE_ON_SIGNAL 256 /**< Give core if signal */
#define TEST_NO_STACKTRACE 512
-#define TEST_SIGINT 1024 /* Allow sigint on threads */
-#define TEST_SYNCHRONIZATION 2048 /* get server to do sleep in
+#define TEST_SIGINT 1024 /**< Allow sigint on threads */
+#define TEST_SYNCHRONIZATION 2048 /**< get server to do sleep in
some places */
#endif
@@ -423,26 +428,28 @@ protected:
/* The following is used to detect a conflict with DISTINCT */
#define SELECT_ALL (ULL(1) << 24) // SELECT, user, parser
-/* The following can be set when importing tables in a 'wrong order'
+/** The following can be set when importing tables in a 'wrong order'
to suppress foreign key checks */
#define OPTION_NO_FOREIGN_KEY_CHECKS (ULL(1) << 26) // THD, user, binlog
-/* The following speeds up inserts to InnoDB tables by suppressing unique
+/** The following speeds up inserts to InnoDB tables by suppressing unique
key checks in some cases */
#define OPTION_RELAXED_UNIQUE_CHECKS (ULL(1) << 27) // THD, user, binlog
#define SELECT_NO_UNLOCK (ULL(1) << 28) // SELECT, intern
#define OPTION_SCHEMA_TABLE (ULL(1) << 29) // SELECT, intern
-/* Flag set if setup_tables already done */
+/** Flag set if setup_tables already done */
#define OPTION_SETUP_TABLES_DONE (ULL(1) << 30) // intern
-/* If not set then the thread will ignore all warnings with level notes. */
+/** If not set then the thread will ignore all warnings with level notes. */
#define OPTION_SQL_NOTES (ULL(1) << 31) // THD, user
-/*
+/**
Force the used temporary table to be a MyISAM table (because we will use
fulltext functions when reading from it.
*/
#define TMP_TABLE_FORCE_MYISAM (ULL(1) << 32)
+#define OPTION_PROFILING (ULL(1) << 33)
-/*
+
+/**
Maximum length of time zone name that we support
(Time zone name is char(64) in db). mysqlbinlog needs it.
*/
@@ -505,9 +512,9 @@ protected:
#define UNCACHEABLE_DEPENDENT 1
#define UNCACHEABLE_RAND 2
#define UNCACHEABLE_SIDEEFFECT 4
-// forcing to save JOIN for explain
+/// forcing to save JOIN for explain
#define UNCACHEABLE_EXPLAIN 8
-/* Don't evaluate subqueries in prepare even if they're not correlated */
+/** Don't evaluate subqueries in prepare even if they're not correlated */
#define UNCACHEABLE_PREPARE 16
/* For uncorrelated SELECT in an UNION with some correlated SELECTs */
#define UNCACHEABLE_UNITED 32
@@ -515,7 +522,7 @@ protected:
/* Used to check GROUP BY list in the MODE_ONLY_FULL_GROUP_BY mode */
#define UNDEF_POS (-1)
#ifdef EXTRA_DEBUG
-/*
+/**
Sync points allow us to force the server to reach a certain line of code
and block there until the client tells the server it is ok to go on.
The client tells the server to block with SELECT GET_LOCK()
@@ -551,7 +558,7 @@ void view_store_options(THD *thd, TABLE_LIST *table, String *buff);
#define portable_sizeof_char_ptr 8
-#define tmp_file_prefix "#sql" /* Prefix for tmp tables */
+#define tmp_file_prefix "#sql" /**< Prefix for tmp tables */
#define tmp_file_prefix_length 4
/* Flags for calc_week() function. */
@@ -578,6 +585,8 @@ enum enum_parsing_place
};
struct st_table;
+
+#define thd_proc_info(thd, msg) set_thd_proc_info(thd, msg, __func__, __FILE__, __LINE__)
class THD;
enum enum_check_fields
@@ -586,9 +595,9 @@ enum enum_check_fields
CHECK_FIELD_WARN,
CHECK_FIELD_ERROR_FOR_NULL
};
-
-/* Struct to handle simple linked lists */
+
+/** Struct to handle simple linked lists. */
typedef struct st_sql_list {
uint elements;
uchar *first;
@@ -638,6 +647,15 @@ inline THD *_current_thd(void)
}
#define current_thd _current_thd()
+/**
+ The meat of thd_proc_info(THD*, char*), a macro that packs the last
+ three calling-info parameters.
+*/
+extern "C"
+const char *set_thd_proc_info(THD *thd, const char *info,
+ const char *calling_func,
+ const char *calling_file,
+ const unsigned int calling_line);
/*
External variables
@@ -659,6 +677,7 @@ typedef my_bool (*qc_engine_callback)(THD *thd, char *table_key,
#include "field.h" /* Field definitions */
#include "protocol.h"
#include "sql_udf.h"
+#include "sql_profile.h"
#include "sql_partition.h"
class user_var_entry;
@@ -679,15 +698,34 @@ extern my_decimal decimal_zero;
void free_items(Item *item);
void cleanup_items(Item *item);
class THD;
-void close_thread_tables(THD *thd, bool locked=0, bool skip_derived=0);
+void close_thread_tables(THD *thd);
+
+#ifndef NO_EMBEDDED_ACCESS_CHECKS
bool check_one_table_access(THD *thd, ulong privilege, TABLE_LIST *tables);
bool check_single_table_access(THD *thd, ulong privilege,
TABLE_LIST *tables, bool no_errors);
bool check_routine_access(THD *thd,ulong want_access,char *db,char *name,
bool is_proc, bool no_errors);
bool check_some_access(THD *thd, ulong want_access, TABLE_LIST *table);
-bool check_merge_table_access(THD *thd, char *db, TABLE_LIST *table_list);
bool check_some_routine_access(THD *thd, const char *db, const char *name, bool is_proc);
+#else
+inline bool check_one_table_access(THD *thd, ulong privilege, TABLE_LIST *tables)
+{ return false; }
+inline bool check_single_table_access(THD *thd, ulong privilege,
+ TABLE_LIST *tables, bool no_errors)
+{ return false; }
+inline bool check_routine_access(THD *thd,ulong want_access,char *db,
+ char *name, bool is_proc, bool no_errors)
+{ return false; }
+inline bool check_some_access(THD *thd, ulong want_access, TABLE_LIST *table)
+{ return false; }
+inline bool check_merge_table_access(THD *thd, char *db, TABLE_LIST *table_list)
+{ return false; }
+inline bool check_some_routine_access(THD *thd, const char *db,
+ const char *name, bool is_proc)
+{ return false; }
+#endif /*NO_EMBEDDED_ACCESS_CHECKS*/
+
bool multi_update_precheck(THD *thd, TABLE_LIST *tables);
bool multi_delete_precheck(THD *thd, TABLE_LIST *tables);
bool mysql_multi_update_prepare(THD *thd);
@@ -920,7 +958,6 @@ bool init_new_connection_handler_thread();
void reset_mqh(LEX_USER *lu, bool get_them);
bool check_mqh(THD *thd, uint check_command);
void time_out_user_resource_limits(THD *thd, USER_CONN *uc);
-int check_for_max_user_connections(THD *thd, USER_CONN *uc);
void decrease_user_connections(USER_CONN *uc);
void thd_init_client_charset(THD *thd, uint cs_number);
bool setup_connection_thread_globals(THD *thd);
@@ -980,7 +1017,8 @@ bool check_dup(const char *db, const char *name, TABLE_LIST *tables);
bool compare_record(TABLE *table);
bool append_file_to_dir(THD *thd, const char **filename_ptr,
const char *table_name);
-
+void wait_while_table_is_used(THD *thd, TABLE *table,
+ enum ha_extra_function function);
bool table_cache_init(void);
void table_cache_free(void);
bool table_def_init(void);
@@ -992,11 +1030,27 @@ void kill_mysql(void);
void close_connection(THD *thd, uint errcode, bool lock);
bool reload_acl_and_cache(THD *thd, ulong options, TABLE_LIST *tables,
bool *write_to_binlog);
+#ifndef NO_EMBEDDED_ACCESS_CHECKS
bool check_access(THD *thd, ulong access, const char *db, ulong *save_priv,
bool no_grant, bool no_errors, bool schema_db);
bool check_table_access(THD *thd, ulong want_access, TABLE_LIST *tables,
bool no_errors);
bool check_global_access(THD *thd, ulong want_access);
+#else
+inline bool check_access(THD *thd, ulong access, const char *db,
+ ulong *save_priv, bool no_grant, bool no_errors,
+ bool schema_db)
+{
+ if (save_priv)
+ *save_priv= GLOBAL_ACLS;
+ return false;
+}
+inline bool check_table_access(THD *thd, ulong want_access, TABLE_LIST *tables,
+ bool no_errors)
+{ return false; }
+inline bool check_global_access(THD *thd, ulong want_access)
+{ return false; }
+#endif /*NO_EMBEDDED_ACCESS_CHECKS*/
/*
Support routine for SQL parser on partitioning syntax
@@ -1143,12 +1197,16 @@ TABLE *open_ltable(THD *thd, TABLE_LIST *table_list, thr_lock_type update,
uint lock_flags);
TABLE *open_table(THD *thd, TABLE_LIST *table_list, MEM_ROOT* mem,
bool *refresh, uint flags);
+bool name_lock_locked_table(THD *thd, TABLE_LIST *tables);
bool reopen_name_locked_table(THD* thd, TABLE_LIST* table_list, bool link_in);
TABLE *table_cache_insert_placeholder(THD *thd, const char *key,
uint key_length);
bool lock_table_name_if_not_cached(THD *thd, const char *db,
const char *table_name, TABLE **table);
TABLE *find_locked_table(THD *thd, const char *db,const char *table_name);
+void detach_merge_children(TABLE *table, bool clear_refs);
+bool fix_merge_after_open(TABLE_LIST *old_child_list, TABLE_LIST **old_last,
+ TABLE_LIST *new_child_list, TABLE_LIST **new_last);
bool reopen_table(TABLE *table);
bool reopen_tables(THD *thd,bool get_locks,bool in_refresh);
void close_data_files_and_morph_locks(THD *thd, const char *db,
@@ -1290,12 +1348,9 @@ bool mysql_ha_open(THD *thd, TABLE_LIST *tables, bool reopen);
bool mysql_ha_close(THD *thd, TABLE_LIST *tables);
bool mysql_ha_read(THD *, TABLE_LIST *,enum enum_ha_read_modes,char *,
List<Item> *,enum ha_rkey_function,Item *,ha_rows,ha_rows);
-int mysql_ha_flush(THD *thd, TABLE_LIST *tables, uint mode_flags,
- bool is_locked);
-/* mysql_ha_flush mode_flags bits */
-#define MYSQL_HA_CLOSE_FINAL 0x00
-#define MYSQL_HA_REOPEN_ON_USAGE 0x01
-#define MYSQL_HA_FLUSH_ALL 0x02
+void mysql_ha_flush(THD *thd);
+void mysql_ha_rm_tables(THD *thd, TABLE_LIST *tables, bool is_locked);
+void mysql_ha_cleanup(THD *thd);
/* sql_base.cc */
#define TMP_TABLE_KEY_EXTRA 8
@@ -1399,8 +1454,21 @@ int init_ftfuncs(THD *thd, SELECT_LEX* select, bool no_order);
void wait_for_condition(THD *thd, pthread_mutex_t *mutex,
pthread_cond_t *cond);
int open_tables(THD *thd, TABLE_LIST **tables, uint *counter, uint flags);
-int simple_open_n_lock_tables(THD *thd,TABLE_LIST *tables);
-bool open_and_lock_tables(THD *thd,TABLE_LIST *tables);
+/* open_and_lock_tables with optional derived handling */
+bool open_and_lock_tables_derived(THD *thd, TABLE_LIST *tables, bool derived);
+/* simple open_and_lock_tables without derived handling */
+inline bool simple_open_n_lock_tables(THD *thd, TABLE_LIST *tables)
+{
+ return open_and_lock_tables_derived(thd, tables, FALSE);
+}
+/* open_and_lock_tables with derived handling */
+inline bool open_and_lock_tables(THD *thd, TABLE_LIST *tables)
+{
+ return open_and_lock_tables_derived(thd, tables, TRUE);
+}
+/* simple open_and_lock_tables without derived handling for single table */
+TABLE *open_n_lock_single_table(THD *thd, TABLE_LIST *table_l,
+ thr_lock_type lock_type);
bool open_normal_and_derived_tables(THD *thd, TABLE_LIST *tables, uint flags);
int lock_tables(THD *thd, TABLE_LIST *tables, uint counter, bool *need_reopen);
int decide_logging_format(THD *thd, TABLE_LIST *tables);
@@ -1420,7 +1488,7 @@ TABLE_LIST *unique_table(THD *thd, TABLE_LIST *table, TABLE_LIST *table_list,
bool check_alias);
TABLE *find_temporary_table(THD *thd, const char *db, const char *table_name);
TABLE *find_temporary_table(THD *thd, TABLE_LIST *table_list);
-bool close_temporary_table(THD *thd, TABLE_LIST *table_list);
+int drop_temporary_table(THD *thd, TABLE_LIST *table_list);
void close_temporary_table(THD *thd, TABLE *table, bool free_share,
bool delete_table);
void close_temporary(TABLE *table, bool free_share, bool delete_table);
@@ -1582,7 +1650,8 @@ TABLE *open_performance_schema_table(THD *thd, TABLE_LIST *one_table,
Open_tables_state *backup);
void close_performance_schema_table(THD *thd, Open_tables_state *backup);
-bool close_cached_tables(THD *thd, bool wait_for_refresh, TABLE_LIST *tables, bool have_lock = FALSE);
+bool close_cached_tables(THD *thd, TABLE_LIST *tables, bool have_lock,
+ bool wait_for_refresh, bool wait_for_placeholders);
bool close_cached_connection_tables(THD *thd, bool wait_for_refresh,
LEX_STRING *connect_string,
bool have_lock = FALSE);
@@ -1680,6 +1749,7 @@ void flush_thread_cache();
/* item_func.cc */
extern bool check_reserved_words(LEX_STRING *name);
+extern enum_field_types agg_field_type(Item **items, uint nitems);
/* strfunc.cc */
ulonglong find_set(TYPELIB *lib, const char *x, uint length, CHARSET_INFO *cs,
@@ -1714,7 +1784,7 @@ extern int creating_table; // How many mysql_create_table() are running
External variables
*/
-extern time_t server_start_time;
+extern time_t server_start_time, flush_status_time;
#endif /* MYSQL_SERVER */
#if defined MYSQL_SERVER || defined INNODB_COMPATIBILITY_HOOKS
extern uint mysql_data_home_len;
@@ -1812,6 +1882,7 @@ extern uint volatile thread_count, thread_running, global_read_lock;
extern my_bool opt_sql_bin_update, opt_safe_user_create, opt_no_mix_types;
extern my_bool opt_safe_show_db, opt_local_infile, opt_myisam_use_mmap;
extern my_bool opt_slave_compressed_protocol, use_temp_pool;
+extern ulong slave_exec_mode_options;
extern my_bool opt_readonly, lower_case_file_system;
extern my_bool opt_enable_named_pipe, opt_sync_frm, opt_allow_suspicious_udfs;
extern my_bool opt_secure_auth;
@@ -1889,6 +1960,7 @@ extern uint sql_command_flags[];
extern TYPELIB log_output_typelib;
/* optional things, have_* variables */
+extern SHOW_COMP_OPTION have_community_features;
extern handlerton *partition_hton;
extern handlerton *myisam_hton;
@@ -1900,6 +1972,7 @@ extern SHOW_COMP_OPTION have_geometry, have_rtree_keys;
extern SHOW_COMP_OPTION have_crypt;
extern SHOW_COMP_OPTION have_compress;
+
#ifndef __WIN__
extern pthread_t signal_thread;
#endif
@@ -1976,7 +2049,8 @@ int format_number(uint inputflag,uint max_length,char * pos,uint length,
/* table.cc */
TABLE_SHARE *alloc_table_share(TABLE_LIST *table_list, char *key,
uint key_length);
-void init_tmp_table_share(TABLE_SHARE *share, const char *key, uint key_length,
+void init_tmp_table_share(THD *thd, TABLE_SHARE *share, const char *key,
+ uint key_length,
const char *table_name, const char *path);
void free_table_share(TABLE_SHARE *share);
int open_table_def(THD *thd, TABLE_SHARE *share, uint db_flags);
@@ -2194,16 +2268,15 @@ Item * all_any_subquery_creator(Item *left_expr,
bool all,
SELECT_LEX *select_lex);
-/*
- clean/setup table fields and map
+/**
+ clean/setup table fields and map.
- SYNOPSYS
- setup_table_map()
- table - TABLE structure pointer (which should be setup)
- table_list TABLE_LIST structure pointer (owner of TABLE)
- tablenr - table number
+ @param table TABLE structure pointer (which should be setup)
+ @param table_list TABLE_LIST structure pointer (owner of TABLE)
+ @param tablenr table number
*/
+
inline void setup_table_map(TABLE *table, TABLE_LIST *table_list, uint tablenr)
{
table->used_fields= 0;
@@ -2225,10 +2298,8 @@ inline void setup_table_map(TABLE *table, TABLE_LIST *table_list, uint tablenr)
}
-/*
- SYNOPSYS
- hexchar_to_int()
- convert a hex digit into number
+/**
+ convert a hex digit into number.
*/
inline int hexchar_to_int(char c)
@@ -2241,11 +2312,9 @@ inline int hexchar_to_int(char c)
return -1;
}
-/*
- is_user_table()
- return true if the table was created explicitly
+/**
+ return true if the table was created explicitly.
*/
-
inline bool is_user_table(TABLE * table)
{
const char *name= table->s->table_name.str;
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index a355c560996..61f3735fe62 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -170,11 +170,11 @@ int initgroups(const char *,unsigned int);
typedef fp_except fp_except_t;
#endif
- /* We can't handle floating point exceptions with threads, so disable
- this on freebsd
- */
-
-inline void reset_floating_point_exceptions()
+/**
+ We can't handle floating point exceptions with threads, so disable
+ this on freebsd.
+*/
+inline void set_proper_floating_point_mode()
{
/* Don't fall for overflow, underflow,divide-by-zero or loss of precision */
#if defined(__i386__)
@@ -185,8 +185,22 @@ inline void reset_floating_point_exceptions()
FP_X_IMP));
#endif
}
+#elif defined(__sgi)
+/* for IRIX to use set_fpc_csr() */
+#include <sys/fpu.h>
+
+inline void set_proper_floating_point_mode()
+{
+ /* Enable denormalized DOUBLE values support for IRIX */
+ {
+ union fpc_csr n;
+ n.fc_word = get_fpc_csr();
+ n.fc_struct.flush = 0;
+ set_fpc_csr(n.fc_word);
+ }
+}
#else
-#define reset_floating_point_exceptions()
+#define set_proper_floating_point_mode()
#endif /* __FreeBSD__ && HAVE_IEEEFP_H */
} /* cplusplus */
@@ -325,7 +339,7 @@ static my_bool opt_short_log_format= 0;
static uint kill_cached_threads, wake_thread;
static ulong killed_threads, thread_created;
static ulong max_used_connections;
-static ulong my_bind_addr; /* the address we bind to */
+static ulong my_bind_addr; /**< the address we bind to */
static volatile ulong cached_thread_count= 0;
static const char *sql_mode_str= "OFF";
static char *mysqld_user, *mysqld_chroot, *log_error_file_ptr;
@@ -366,7 +380,7 @@ bool volatile shutdown_in_progress;
*/
bool volatile grant_option;
-my_bool opt_skip_slave_start = 0; // If set, slave is not autostarted
+my_bool opt_skip_slave_start = 0; ///< If set, slave is not autostarted
my_bool opt_reckless_slave = 0;
my_bool opt_enable_named_pipe= 0;
my_bool opt_local_infile, opt_slave_compressed_protocol;
@@ -430,7 +444,7 @@ TYPELIB binlog_format_typelib=
ulong opt_binlog_format_id= (ulong) BINLOG_FORMAT_UNSPEC;
const char *opt_binlog_format= binlog_format_names[opt_binlog_format_id];
#ifdef HAVE_INITGROUPS
-static bool calling_initgroups= FALSE; /* Used in SIGSEGV handler. */
+static bool calling_initgroups= FALSE; /**< Used in SIGSEGV handler. */
#endif
uint mysqld_port, test_flags, select_errors, dropping_tables, ha_open_options;
uint mysqld_port_timeout;
@@ -445,6 +459,8 @@ ulong thread_stack, what_to_log;
ulong query_buff_size, slow_launch_time, slave_open_temp_tables;
ulong open_files_limit, max_binlog_size, max_relay_log_size;
ulong slave_net_timeout, slave_trans_retries;
+ulong slave_exec_mode_options;
+const char *slave_exec_mode_str= "STRICT";
ulong thread_cache_size=0, thread_pool_size= 0;
ulong binlog_cache_size=0, max_binlog_cache_size=0;
ulong query_cache_size=0;
@@ -458,12 +474,12 @@ ulong specialflag=0;
ulong binlog_cache_use= 0, binlog_cache_disk_use= 0;
ulong max_connections, max_connect_errors;
uint max_user_connections= 0;
-/*
+/**
Limit of the total number of prepared statements in the server.
Is necessary to protect the server against out-of-memory attacks.
*/
ulong max_prepared_stmt_count;
-/*
+/**
Current total number of prepared statements in the server. This number
is exact, and therefore may not be equal to the difference between
`com_stmt_prepare' and `com_stmt_close' (global status variables), as
@@ -478,9 +494,9 @@ ulong thread_id=1L,current_pid;
ulong slow_launch_threads = 0, sync_binlog_period;
ulong expire_logs_days = 0;
ulong rpl_recovery_rank=0;
-const char *log_output_str= "TABLE";
+const char *log_output_str= "FILE";
-time_t server_start_time;
+time_t server_start_time, flush_status_time;
char mysql_home[FN_REFLEN], pidfile_name[FN_REFLEN], system_time_zone[30];
char *default_tz_name;
@@ -499,13 +515,13 @@ uint mysql_data_home_len;
char mysql_data_home_buff[2], *mysql_data_home=mysql_real_data_home;
char server_version[SERVER_VERSION_LENGTH];
char *mysqld_unix_port, *opt_mysql_tmpdir;
-const char **errmesg; /* Error messages */
+const char **errmesg; /**< Error messages */
const char *myisam_recover_options_str="OFF";
const char *myisam_stats_method_str="nulls_unequal";
-/* name of reference on left espression in rewritten IN subquery */
+/** name of reference on left espression in rewritten IN subquery */
const char *in_left_expr_name= "<left expr>";
-/* name of additional condition */
+/** name of additional condition */
const char *in_additional_cond= "<IN COND>";
const char *in_having_cond= "<IN HAVING>";
@@ -543,6 +559,7 @@ MY_LOCALE *my_default_lc_time_names;
SHOW_COMP_OPTION have_ssl, have_symlink, have_dlopen, have_query_cache;
SHOW_COMP_OPTION have_geometry, have_rtree_keys;
SHOW_COMP_OPTION have_crypt, have_compress;
+SHOW_COMP_OPTION have_community_features;
/* Thread specific variables */
@@ -555,7 +572,7 @@ pthread_mutex_t LOCK_mysql_create_db, LOCK_Acl, LOCK_open, LOCK_thread_count,
LOCK_crypt, LOCK_bytes_sent, LOCK_bytes_received,
LOCK_global_system_variables,
LOCK_user_conn, LOCK_slave_list, LOCK_active_mi;
-/*
+/**
The below lock protects access to two global server variables:
max_prepared_stmt_count and prepared_stmt_count. These variables
set the limit and hold the current total number of prepared statements
@@ -593,7 +610,10 @@ char *opt_logname, *opt_slow_logname;
/* Static variables */
static bool kill_in_progress, segfaulted;
-static my_bool opt_do_pstack, opt_bootstrap, opt_myisam_log;
+#ifdef HAVE_STACK_TRACE_ON_SEGV
+static my_bool opt_do_pstack;
+#endif /* HAVE_STACK_TRACE_ON_SEGV */
+static my_bool opt_bootstrap, opt_myisam_log;
static int cleanup_done;
static ulong opt_specialflag, opt_myisam_block_size;
static char *opt_update_logname, *opt_binlog_index_name;
@@ -604,7 +624,7 @@ static char **defaults_argv;
static char *opt_bin_logname;
static my_socket unix_sock,ip_sock;
-struct rand_struct sql_rand; // used by sql_class.cc:THD::THD()
+struct rand_struct sql_rand; ///< used by sql_class.cc:THD::THD()
#ifndef EMBEDDED_LIBRARY
struct passwd *user_info;
@@ -628,7 +648,7 @@ static char **opt_argv;
static HANDLE hEventShutdown;
static char shutdown_event_name[40];
#include "nt_servc.h"
-static NTService Service; // Service object for WinNT
+static NTService Service; ///< Service object for WinNT
#endif /* EMBEDDED_LIBRARY */
#endif /* __WIN__ */
@@ -1009,19 +1029,15 @@ void kill_mysql(void)
DBUG_VOID_RETURN;
}
-/*
- Force server down. Kill all connections and threads and exit
-
- SYNOPSIS
- kill_server
+/**
+ Force server down. Kill all connections and threads and exit.
- sig_ptr Signal number that caused kill_server to be called.
+ @param sig_ptr Signal number that caused kill_server to be called.
- NOTE!
+ @note
A signal number of 0 mean that the function was not called
from a signal handler and there is thus no signal to block
or stop, we just want to kill the server.
-
*/
#if defined(__NETWARE__)
@@ -1114,21 +1130,18 @@ extern "C" sig_handler print_signal_warning(int sig)
#endif
}
-/*
- cleanup all memory and end program nicely
-
- SYNOPSIS
- unireg_end()
+#ifndef EMBEDDED_LIBRARY
- NOTES
- This function never returns.
+/**
+ cleanup all memory and end program nicely.
If SIGNALS_DONT_BREAK_READ is defined, this function is called
by the main thread. To get MySQL to shut down nicely in this case
(Mac OS X) we have to call exit() instead if pthread_exit().
-*/
-#ifndef EMBEDDED_LIBRARY
+ @note
+ This function never returns.
+*/
void unireg_end(void)
{
clean_up(1);
@@ -1164,6 +1177,8 @@ void clean_up(bool print_message)
if (cleanup_done++)
return; /* purecov: inspected */
+ release_ddl_log();
+
/*
make sure that handlers finish up
what they have that is dependent on the binlog
@@ -1275,11 +1290,10 @@ void clean_up(bool print_message)
#ifndef EMBEDDED_LIBRARY
-/*
+/**
This is mainly needed when running with purify, but it's still nice to
- know that all child threads have died when mysqld exits
+ know that all child threads have died when mysqld exits.
*/
-
static void wait_for_signal_thread_to_end()
{
#ifndef __NETWARE__
@@ -1359,7 +1373,6 @@ static void set_ports()
char *env;
if (!mysqld_port && !opt_disable_networking)
{ // Get port if not from commandline
- struct servent *serv_ptr;
mysqld_port= MYSQL_PORT;
/*
@@ -1373,6 +1386,7 @@ static void set_ports()
*/
#if MYSQL_PORT_DEFAULT == 0
+ struct servent *serv_ptr;
if ((serv_ptr= getservbyname("mysql", "tcp")))
mysqld_port= ntohs((u_short) serv_ptr->s_port); /* purecov: inspected */
#endif
@@ -1506,8 +1520,7 @@ static void set_effective_user(struct passwd *user_info_arg)
}
-/* Change root user if started with --chroot */
-
+/** Change root user if started with @c --chroot . */
static void set_root(const char *path)
{
#if !defined(__WIN__) && !defined(__NETWARE__)
@@ -1696,19 +1709,16 @@ static void network_init(void)
#ifndef EMBEDDED_LIBRARY
-/*
- Close a connection
+/**
+ Close a connection.
- SYNOPSIS
- close_connection()
- thd Thread handle
- errcode Error code to print to console
- lock 1 if we have have to lock LOCK_thread_count
+ @param thd Thread handle
+ @param errcode Error code to print to console
+ @param lock 1 if we have have to lock LOCK_thread_count
- NOTES
+ @note
For the connection that is doing shutdown, this is called twice
*/
-
void close_connection(THD *thd, uint errcode, bool lock)
{
st_vio *vio;
@@ -1733,9 +1743,8 @@ void close_connection(THD *thd, uint errcode, bool lock)
#endif /* EMBEDDED_LIBRARY */
- /* Called when a thread is aborted */
- /* ARGSUSED */
-
+/** Called when a thread is aborted. */
+/* ARGSUSED */
extern "C" sig_handler end_thread_signal(int sig __attribute__((unused)))
{
THD *thd=current_thd;
@@ -1877,13 +1886,13 @@ void flush_thread_cache()
}
-/*
- Aborts a thread nicely. Commes here on SIGPIPE
- TODO: One should have to fix that thr_alarm know about this
- thread too.
-*/
-
#ifdef THREAD_SPECIFIC_SIGPIPE
+/**
+ Aborts a thread nicely. Comes here on SIGPIPE.
+
+ @todo
+ One should have to fix that thr_alarm know about this thread too.
+*/
extern "C" sig_handler abort_thread(int sig __attribute__((unused)))
{
THD *thd=current_thd;
@@ -1931,7 +1940,7 @@ static void check_data_home(const char *path)
#elif defined(__NETWARE__)
-// down server event callback
+/// down server event callback.
void mysql_down_server_cb(void *, void *)
{
event_flag= TRUE;
@@ -1939,7 +1948,7 @@ void mysql_down_server_cb(void *, void *)
}
-// destroy callback resources
+/// destroy callback resources.
void mysql_cb_destroy(void *)
{
UnRegisterEventNotification(eh); // cleanup down event notification
@@ -1951,7 +1960,7 @@ void mysql_cb_destroy(void *)
}
-// initialize callbacks
+/// initialize callbacks.
void mysql_cb_init()
{
// register for down server event
@@ -1974,8 +1983,7 @@ void mysql_cb_init()
}
-/* To get the name of the NetWare volume having MySQL data folder */
-
+/** To get the name of the NetWare volume having MySQL data folder. */
static void getvolumename()
{
char *p;
@@ -1989,8 +1997,8 @@ static void getvolumename()
}
-/*
- Registering with NEB for NSS Volume Deactivation event
+/**
+ Registering with NEB for NSS Volume Deactivation event.
*/
static void registerwithneb()
@@ -2042,8 +2050,8 @@ static void registerwithneb()
}
-/*
- Callback for NSS Volume Deactivation event
+/**
+ Callback for NSS Volume Deactivation event.
*/
ulong neb_event_callback(struct EventBlock *eblock)
@@ -2075,12 +2083,11 @@ ulong neb_event_callback(struct EventBlock *eblock)
}
-/*
- Function to get NSS volume ID of the MySQL data
-*/
-
#define ADMIN_VOL_PATH "_ADMIN:/Volumes/"
+/**
+ Function to get NSS volume ID of the MySQL data.
+*/
static void getvolumeID(BYTE *volumeName)
{
char path[zMAX_FULL_NAME];
@@ -2155,10 +2162,10 @@ static void start_signal_handler(void)
}
-/*
- Warn if the data is on a Traditional volume
+/**
+ Warn if the data is on a Traditional volume.
- NOTE
+ @note
Already done by mysqld_safe
*/
@@ -2419,8 +2426,7 @@ static void start_signal_handler(void)
}
-/* This threads handles all signals and alarms */
-
+/** This threads handles all signals and alarms. */
/* ARGSUSED */
pthread_handler_t signal_hand(void *arg __attribute__((unused)))
{
@@ -2558,12 +2564,10 @@ static void check_data_home(const char *path)
#endif /* __WIN__*/
-/*
+/**
All global error messages are sent here where the first one is stored
- for the client
+ for the client.
*/
-
-
/* ARGSUSED */
extern "C" int my_message_sql(uint error, const char *str, myf MyFlags);
@@ -2583,20 +2587,12 @@ int my_message_sql(uint error, const char *str, myf MyFlags)
TODO: There are two exceptions mechanism (THD and sp_rcontext),
this could be improved by having a common stack of handlers.
*/
- if (thd->handle_error(error,
+ if (thd->handle_error(error, str,
MYSQL_ERROR::WARN_LEVEL_ERROR))
DBUG_RETURN(0);
- if (thd->spcont &&
- thd->spcont->handle_error(error, MYSQL_ERROR::WARN_LEVEL_ERROR, thd))
- {
- DBUG_RETURN(0);
- }
-
- thd->query_error= 1; // needed to catch query errors during replication
+ thd->is_slave_error= 1; // needed to catch query errors during replication
- if (!thd->no_warnings_for_error)
- push_warning(thd, MYSQL_ERROR::WARN_LEVEL_ERROR, error, str);
/*
thd->lex->current_select == 0 if lex structure is not inited
(not query command (COM_QUERY))
@@ -2613,14 +2609,39 @@ int my_message_sql(uint error, const char *str, myf MyFlags)
}
else
{
- NET *net= &thd->net;
- net->report_error= 1;
- query_cache_abort(net);
- if (!net->last_error[0]) // Return only first message
+ if (! thd->main_da.is_error()) // Return only first message
{
- strmake(net->last_error, str, sizeof(net->last_error)-1);
- net->last_errno= error ? error : ER_UNKNOWN_ERROR;
+ if (error == 0)
+ error= ER_UNKNOWN_ERROR;
+ if (str == NULL)
+ str= ER(error);
+ thd->main_da.set_error_status(thd, error, str);
}
+ query_cache_abort(&thd->net);
+ }
+ /*
+ If a continue handler is found, the error message will be cleared
+ by the stored procedures code.
+ */
+ if (thd->spcont &&
+ thd->spcont->handle_error(error, MYSQL_ERROR::WARN_LEVEL_ERROR, thd))
+ {
+ /*
+ Do not push any warnings, a handled error must be completely
+ silenced.
+ */
+ DBUG_RETURN(0);
+ }
+
+ if (!thd->no_warnings_for_error)
+ {
+ /*
+ Suppress infinite recursion if there a memory allocation error
+ inside push_warning.
+ */
+ thd->no_warnings_for_error= TRUE;
+ push_warning(thd, MYSQL_ERROR::WARN_LEVEL_ERROR, error, str);
+ thd->no_warnings_for_error= FALSE;
}
}
if (!thd || MyFlags & ME_NOREFRESH)
@@ -2689,20 +2710,19 @@ sizeof(load_default_groups)/sizeof(load_default_groups[0]);
#endif /*!EMBEDDED_LIBRARY*/
-/*
- Initialize one of the global date/time format variables
+/**
+ Initialize one of the global date/time format variables.
- SYNOPSIS
- init_global_datetime_format()
- format_type What kind of format should be supported
- var_ptr Pointer to variable that should be updated
+ @param format_type What kind of format should be supported
+ @param var_ptr Pointer to variable that should be updated
- NOTES
+ @note
The default value is taken from either opt_date_time_formats[] or
the ISO format (ANSI SQL)
- RETURN
+ @retval
0 ok
+ @retval
1 error
*/
@@ -2730,6 +2750,156 @@ static bool init_global_datetime_format(timestamp_type format_type,
return 0;
}
+SHOW_VAR com_status_vars[]= {
+ {"admin_commands", (char*) offsetof(STATUS_VAR, com_other), SHOW_LONG_STATUS},
+ {"assign_to_keycache", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_ASSIGN_TO_KEYCACHE]), SHOW_LONG_STATUS},
+ {"alter_db", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_ALTER_DB]), SHOW_LONG_STATUS},
+ {"alter_db_upgrade", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_ALTER_DB_UPGRADE]), SHOW_LONG_STATUS},
+ {"alter_event", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_ALTER_EVENT]), SHOW_LONG_STATUS},
+ {"alter_function", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_ALTER_FUNCTION]), SHOW_LONG_STATUS},
+ {"alter_procedure", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_ALTER_PROCEDURE]), SHOW_LONG_STATUS},
+ {"alter_server", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_ALTER_SERVER]), SHOW_LONG_STATUS},
+ {"alter_table", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_ALTER_TABLE]), SHOW_LONG_STATUS},
+ {"alter_tablespace", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_ALTER_TABLESPACE]), SHOW_LONG_STATUS},
+ {"analyze", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_ANALYZE]), SHOW_LONG_STATUS},
+ {"backup_table", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_BACKUP_TABLE]), SHOW_LONG_STATUS},
+ {"begin", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_BEGIN]), SHOW_LONG_STATUS},
+ {"binlog", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_BINLOG_BASE64_EVENT]), SHOW_LONG_STATUS},
+ {"call_procedure", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_CALL]), SHOW_LONG_STATUS},
+ {"change_db", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_CHANGE_DB]), SHOW_LONG_STATUS},
+ {"change_master", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_CHANGE_MASTER]), SHOW_LONG_STATUS},
+ {"check", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_CHECK]), SHOW_LONG_STATUS},
+ {"checksum", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_CHECKSUM]), SHOW_LONG_STATUS},
+ {"commit", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_COMMIT]), SHOW_LONG_STATUS},
+ {"create_db", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_CREATE_DB]), SHOW_LONG_STATUS},
+ {"create_event", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_CREATE_EVENT]), SHOW_LONG_STATUS},
+ {"create_function", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_CREATE_SPFUNCTION]), SHOW_LONG_STATUS},
+ {"create_index", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_CREATE_INDEX]), SHOW_LONG_STATUS},
+ {"create_procedure", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_CREATE_PROCEDURE]), SHOW_LONG_STATUS},
+ {"create_server", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_CREATE_SERVER]), SHOW_LONG_STATUS},
+ {"create_table", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_CREATE_TABLE]), SHOW_LONG_STATUS},
+ {"create_trigger", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_CREATE_TRIGGER]), SHOW_LONG_STATUS},
+ {"create_udf", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_CREATE_FUNCTION]), SHOW_LONG_STATUS},
+ {"create_user", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_CREATE_USER]), SHOW_LONG_STATUS},
+ {"create_view", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_CREATE_VIEW]), SHOW_LONG_STATUS},
+ {"dealloc_sql", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_DEALLOCATE_PREPARE]), SHOW_LONG_STATUS},
+ {"delete", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_DELETE]), SHOW_LONG_STATUS},
+ {"delete_multi", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_DELETE_MULTI]), SHOW_LONG_STATUS},
+ {"do", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_DO]), SHOW_LONG_STATUS},
+ {"drop_db", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_DROP_DB]), SHOW_LONG_STATUS},
+ {"drop_event", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_DROP_EVENT]), SHOW_LONG_STATUS},
+ {"drop_function", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_DROP_FUNCTION]), SHOW_LONG_STATUS},
+ {"drop_index", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_DROP_INDEX]), SHOW_LONG_STATUS},
+ {"drop_procedure", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_DROP_PROCEDURE]), SHOW_LONG_STATUS},
+ {"drop_server", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_DROP_SERVER]), SHOW_LONG_STATUS},
+ {"drop_table", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_DROP_TABLE]), SHOW_LONG_STATUS},
+ {"drop_trigger", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_DROP_TRIGGER]), SHOW_LONG_STATUS},
+ {"drop_user", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_DROP_USER]), SHOW_LONG_STATUS},
+ {"drop_view", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_DROP_VIEW]), SHOW_LONG_STATUS},
+ {"empty_query", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_EMPTY_QUERY]), SHOW_LONG_STATUS},
+ {"execute_sql", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_EXECUTE]), SHOW_LONG_STATUS},
+ {"flush", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_FLUSH]), SHOW_LONG_STATUS},
+ {"grant", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_GRANT]), SHOW_LONG_STATUS},
+ {"ha_close", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_HA_CLOSE]), SHOW_LONG_STATUS},
+ {"ha_open", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_HA_OPEN]), SHOW_LONG_STATUS},
+ {"ha_read", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_HA_READ]), SHOW_LONG_STATUS},
+ {"help", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_HELP]), SHOW_LONG_STATUS},
+ {"insert", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_INSERT]), SHOW_LONG_STATUS},
+ {"insert_select", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_INSERT_SELECT]), SHOW_LONG_STATUS},
+ {"install_plugin", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_INSTALL_PLUGIN]), SHOW_LONG_STATUS},
+ {"kill", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_KILL]), SHOW_LONG_STATUS},
+ {"load", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_LOAD]), SHOW_LONG_STATUS},
+ {"load_master_data", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_LOAD_MASTER_DATA]), SHOW_LONG_STATUS},
+ {"load_master_table", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_LOAD_MASTER_TABLE]), SHOW_LONG_STATUS},
+ {"lock_tables", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_LOCK_TABLES]), SHOW_LONG_STATUS},
+ {"optimize", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_OPTIMIZE]), SHOW_LONG_STATUS},
+ {"preload_keys", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_PRELOAD_KEYS]), SHOW_LONG_STATUS},
+ {"prepare_sql", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_PREPARE]), SHOW_LONG_STATUS},
+ {"purge", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_PURGE]), SHOW_LONG_STATUS},
+ {"purge_before_date", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_PURGE_BEFORE]), SHOW_LONG_STATUS},
+ {"release_savepoint", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_RELEASE_SAVEPOINT]), SHOW_LONG_STATUS},
+ {"rename_table", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_RENAME_TABLE]), SHOW_LONG_STATUS},
+ {"rename_user", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_RENAME_USER]), SHOW_LONG_STATUS},
+ {"repair", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_REPAIR]), SHOW_LONG_STATUS},
+ {"replace", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_REPLACE]), SHOW_LONG_STATUS},
+ {"replace_select", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_REPLACE_SELECT]), SHOW_LONG_STATUS},
+ {"reset", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_RESET]), SHOW_LONG_STATUS},
+ {"restore_table", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_RESTORE_TABLE]), SHOW_LONG_STATUS},
+ {"revoke", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_REVOKE]), SHOW_LONG_STATUS},
+ {"revoke_all", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_REVOKE_ALL]), SHOW_LONG_STATUS},
+ {"rollback", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_ROLLBACK]), SHOW_LONG_STATUS},
+ {"rollback_to_savepoint",(char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_ROLLBACK_TO_SAVEPOINT]), SHOW_LONG_STATUS},
+ {"savepoint", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SAVEPOINT]), SHOW_LONG_STATUS},
+ {"select", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SELECT]), SHOW_LONG_STATUS},
+ {"set_option", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SET_OPTION]), SHOW_LONG_STATUS},
+ {"show_authors", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_AUTHORS]), SHOW_LONG_STATUS},
+ {"show_binlog_events", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_BINLOG_EVENTS]), SHOW_LONG_STATUS},
+ {"show_binlogs", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_BINLOGS]), SHOW_LONG_STATUS},
+ {"show_charsets", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_CHARSETS]), SHOW_LONG_STATUS},
+ {"show_collations", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_COLLATIONS]), SHOW_LONG_STATUS},
+ {"show_column_types", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_COLUMN_TYPES]), SHOW_LONG_STATUS},
+ {"show_contributors", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_CONTRIBUTORS]), SHOW_LONG_STATUS},
+ {"show_create_db", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_CREATE_DB]), SHOW_LONG_STATUS},
+ {"show_create_event", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_CREATE_EVENT]), SHOW_LONG_STATUS},
+ {"show_create_func", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_CREATE_FUNC]), SHOW_LONG_STATUS},
+ {"show_create_proc", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_CREATE_PROC]), SHOW_LONG_STATUS},
+ {"show_create_table", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_CREATE]), SHOW_LONG_STATUS},
+ {"show_create_trigger", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_CREATE_TRIGGER]), SHOW_LONG_STATUS},
+ {"show_databases", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_DATABASES]), SHOW_LONG_STATUS},
+ {"show_engine_logs", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_ENGINE_LOGS]), SHOW_LONG_STATUS},
+ {"show_engine_mutex", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_ENGINE_MUTEX]), SHOW_LONG_STATUS},
+ {"show_engine_status", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_ENGINE_STATUS]), SHOW_LONG_STATUS},
+ {"show_events", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_EVENTS]), SHOW_LONG_STATUS},
+ {"show_errors", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_ERRORS]), SHOW_LONG_STATUS},
+ {"show_fields", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_FIELDS]), SHOW_LONG_STATUS},
+#ifndef DBUG_OFF
+ {"show_function_code", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_FUNC_CODE]), SHOW_LONG_STATUS},
+#endif
+ {"show_function_status", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_STATUS_FUNC]), SHOW_LONG_STATUS},
+ {"show_grants", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_GRANTS]), SHOW_LONG_STATUS},
+ {"show_keys", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_KEYS]), SHOW_LONG_STATUS},
+ {"show_master_status", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_MASTER_STAT]), SHOW_LONG_STATUS},
+ {"show_new_master", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_NEW_MASTER]), SHOW_LONG_STATUS},
+ {"show_open_tables", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_OPEN_TABLES]), SHOW_LONG_STATUS},
+ {"show_plugins", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_PLUGINS]), SHOW_LONG_STATUS},
+ {"show_privileges", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_PRIVILEGES]), SHOW_LONG_STATUS},
+#ifndef DBUG_OFF
+ {"show_procedure_code", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_PROC_CODE]), SHOW_LONG_STATUS},
+#endif
+ {"show_procedure_status",(char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_STATUS_PROC]), SHOW_LONG_STATUS},
+ {"show_processlist", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_PROCESSLIST]), SHOW_LONG_STATUS},
+ {"show_profile", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_PROFILE]), SHOW_LONG_STATUS},
+ {"show_profiles", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_PROFILES]), SHOW_LONG_STATUS},
+ {"show_slave_hosts", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_SLAVE_HOSTS]), SHOW_LONG_STATUS},
+ {"show_slave_status", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_SLAVE_STAT]), SHOW_LONG_STATUS},
+ {"show_status", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_STATUS]), SHOW_LONG_STATUS},
+ {"show_storage_engines", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_STORAGE_ENGINES]), SHOW_LONG_STATUS},
+ {"show_table_status", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_TABLE_STATUS]), SHOW_LONG_STATUS},
+ {"show_tables", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_TABLES]), SHOW_LONG_STATUS},
+ {"show_triggers", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_TRIGGERS]), SHOW_LONG_STATUS},
+ {"show_variables", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_VARIABLES]), SHOW_LONG_STATUS},
+ {"show_warnings", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_WARNS]), SHOW_LONG_STATUS},
+ {"slave_start", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SLAVE_START]), SHOW_LONG_STATUS},
+ {"slave_stop", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SLAVE_STOP]), SHOW_LONG_STATUS},
+ {"stmt_close", (char*) offsetof(STATUS_VAR, com_stmt_close), SHOW_LONG_STATUS},
+ {"stmt_execute", (char*) offsetof(STATUS_VAR, com_stmt_execute), SHOW_LONG_STATUS},
+ {"stmt_fetch", (char*) offsetof(STATUS_VAR, com_stmt_fetch), SHOW_LONG_STATUS},
+ {"stmt_prepare", (char*) offsetof(STATUS_VAR, com_stmt_prepare), SHOW_LONG_STATUS},
+ {"stmt_reset", (char*) offsetof(STATUS_VAR, com_stmt_reset), SHOW_LONG_STATUS},
+ {"stmt_send_long_data", (char*) offsetof(STATUS_VAR, com_stmt_send_long_data), SHOW_LONG_STATUS},
+ {"truncate", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_TRUNCATE]), SHOW_LONG_STATUS},
+ {"uninstall_plugin", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_UNINSTALL_PLUGIN]), SHOW_LONG_STATUS},
+ {"unlock_tables", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_UNLOCK_TABLES]), SHOW_LONG_STATUS},
+ {"update", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_UPDATE]), SHOW_LONG_STATUS},
+ {"update_multi", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_UPDATE_MULTI]), SHOW_LONG_STATUS},
+ {"xa_commit", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_XA_COMMIT]),SHOW_LONG_STATUS},
+ {"xa_end", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_XA_END]),SHOW_LONG_STATUS},
+ {"xa_prepare", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_XA_PREPARE]),SHOW_LONG_STATUS},
+ {"xa_recover", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_XA_RECOVER]),SHOW_LONG_STATUS},
+ {"xa_rollback", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_XA_ROLLBACK]),SHOW_LONG_STATUS},
+ {"xa_start", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_XA_START]),SHOW_LONG_STATUS},
+ {NullS, NullS, SHOW_LONG}
+};
static int init_common_variables(const char *conf_file_name, int argc,
char **argv, const char **groups)
@@ -2740,10 +2910,10 @@ static int init_common_variables(const char *conf_file_name, int argc,
tzset(); // Set tzname
max_system_variables.pseudo_thread_id= (ulong)~0;
- server_start_time= my_time(0);
+ server_start_time= flush_status_time= my_time(0);
rpl_filter= new Rpl_filter;
binlog_filter= new Rpl_filter;
- if (!rpl_filter || !binlog_filter)
+ if (!rpl_filter || !binlog_filter)
{
sql_perror("Could not allocate replication and binlog filters");
exit(1);
@@ -2763,13 +2933,13 @@ static int init_common_variables(const char *conf_file_name, int argc,
}
#endif
/*
- We set SYSTEM time zone as reasonable default and
+ We set SYSTEM time zone as reasonable default and
also for failure of my_tz_init() and bootstrap mode.
If user explicitly set time zone with --default-time-zone
option we will change this value in my_tz_init().
*/
global_system_variables.time_zone= my_tz_SYSTEM;
-
+
/*
Init mutexes for the global MYSQL_BIN_LOG objects.
As safe_mutex depends on what MY_INIT() does, we can't init the mutexes of
@@ -2798,6 +2968,31 @@ static int init_common_variables(const char *conf_file_name, int argc,
if (add_status_vars(status_vars))
return 1; // an error was already reported
+#ifndef DBUG_OFF
+ /*
+ We have few debug-only commands in com_status_vars, only visible in debug
+ builds. for simplicity we enable the assert only in debug builds
+
+ There are 7 Com_ variables which don't have corresponding SQLCOM_ values:
+ (TODO strictly speaking they shouldn't be here, should not have Com_ prefix
+ that is. Perhaps Stmt_ ? Comstmt_ ? Prepstmt_ ?)
+
+ Com_admin_commands => com_other
+ Com_stmt_close => com_stmt_close
+ Com_stmt_execute => com_stmt_execute
+ Com_stmt_fetch => com_stmt_fetch
+ Com_stmt_prepare => com_stmt_prepare
+ Com_stmt_reset => com_stmt_reset
+ Com_stmt_send_long_data => com_stmt_send_long_data
+
+ With this correction the number of Com_ variables (number of elements in
+ the array, excluding the last element - terminator) must match the number
+ of SQLCOM_ constants.
+ */
+ compile_time_assert(sizeof(com_status_vars)/sizeof(com_status_vars[0]) - 1 ==
+ SQLCOM_END + 7);
+#endif
+
load_defaults(conf_file_name, groups, &argc, &argv);
defaults_argv=argv;
defaults_argc=argc;
@@ -2854,7 +3049,7 @@ static int init_common_variables(const char *conf_file_name, int argc,
*/
table_cache_size= (ulong) min(max((files-10-max_connections)/2,
TABLE_OPEN_CACHE_MIN),
- table_cache_size);
+ table_cache_size);
DBUG_PRINT("warning",
("Changed limits: max_open_files: %u max_connections: %ld table_cache: %ld",
files, max_connections, table_cache_size));
@@ -2936,7 +3131,6 @@ static int init_common_variables(const char *conf_file_name, int argc,
global_system_variables.collation_connection= default_charset_info;
global_system_variables.character_set_results= default_charset_info;
global_system_variables.character_set_client= default_charset_info;
- global_system_variables.collation_connection= default_charset_info;
if (!(character_set_filesystem=
get_charset_by_csname(character_set_filesystem_name,
@@ -3242,7 +3436,7 @@ static int init_server_components()
query_cache_init();
query_cache_resize(query_cache_size);
randominit(&sql_rand,(ulong) server_start_time,(ulong) server_start_time/2);
- reset_floating_point_exceptions();
+ set_proper_floating_point_mode();
init_thr_lock();
#ifdef HAVE_REPLICATION
init_slave_list();
@@ -3995,7 +4189,6 @@ we force server id to 2, but this MySQL server will not act as a slave.");
pthread_cond_wait(&COND_thread_count,&LOCK_thread_count);
(void) pthread_mutex_unlock(&LOCK_thread_count);
- release_ddl_log();
#if defined(__WIN__) && !defined(EMBEDDED_LIBRARY)
if (Service.IsNT() && start_mode)
Service.Stop();
@@ -4046,21 +4239,20 @@ static char *add_quoted_string(char *to, const char *from, char *to_end)
}
-/*
- Handle basic handling of services, like installation and removal
+/**
+ Handle basic handling of services, like installation and removal.
- SYNOPSIS
- default_service_handling()
- argv Pointer to argument list
- servicename Internal name of service
- displayname Display name of service (in taskbar ?)
- file_path Path to this program
- startup_option Startup option to mysqld
-
- RETURN VALUES
+ @param argv Pointer to argument list
+ @param servicename Internal name of service
+ @param displayname Display name of service (in taskbar ?)
+ @param file_path Path to this program
+ @param startup_option Startup option to mysqld
+
+ @retval
0 option handled
+ @retval
1 Could not handle option
- */
+*/
static bool
default_service_handling(char **argv,
@@ -4209,7 +4401,7 @@ int main(int argc, char **argv)
#endif
-/*
+/**
Execute all commands from a file. Used by the mysql_install_db script to
create MySQL privilege tables without having to start a full MySQL server.
*/
@@ -4302,6 +4494,7 @@ void create_thread_to_handle_connection(THD *thd)
}
else
{
+ char error_message_buff[MYSQL_ERRMSG_SIZE];
/* Create new thread to handle connection */
int error;
thread_created++;
@@ -4320,7 +4513,10 @@ void create_thread_to_handle_connection(THD *thd)
thd->killed= THD::KILL_CONNECTION; // Safety
(void) pthread_mutex_unlock(&LOCK_thread_count);
statistic_increment(aborted_connects,&LOCK_status);
- net_printf_error(thd, ER_CANT_CREATE_THREAD, error);
+ /* Can't use my_error() since store_globals has not been called. */
+ my_snprintf(error_message_buff, sizeof(error_message_buff),
+ ER(ER_CANT_CREATE_THREAD), error);
+ net_send_error(thd, ER_CANT_CREATE_THREAD, error_message_buff);
(void) pthread_mutex_lock(&LOCK_thread_count);
close_connection(thd,0,0);
delete thd;
@@ -4334,23 +4530,17 @@ void create_thread_to_handle_connection(THD *thd)
}
-/*
+/**
Create new thread to handle incoming connection.
- SYNOPSIS
- create_new_thread()
- thd in/out Thread handle of future thread.
-
- DESCRIPTION
This function will create new thread to handle the incoming
connection. If there are idle cached threads one will be used.
'thd' will be pushed into 'threads'.
- In single-threaded mode (#define ONE_THREAD) connection will be
+ In single-threaded mode (\#define ONE_THREAD) connection will be
handled inside this function.
- RETURN VALUE
- none
+ @param[in,out] thd Thread handle of future thread.
*/
static void create_new_thread(THD *thd)
@@ -4595,8 +4785,13 @@ pthread_handler_t handle_connections_sockets(void *arg __attribute__((unused)))
sock == unix_sock ? VIO_LOCALHOST: 0)) ||
my_net_init(&thd->net,vio_tmp))
{
- if (vio_tmp)
- vio_delete(vio_tmp);
+ /*
+ Only delete the temporary vio if we didn't already attach it to the
+ NET object. The destructor in THD will delete any initialized net
+ structure.
+ */
+ if (vio_tmp && thd->net.vio != vio_tmp)
+ vio_delete(vio_tmp);
else
{
(void) shutdown(new_sock, SHUT_RDWR);
@@ -4699,15 +4894,13 @@ pthread_handler_t handle_connections_namedpipes(void *arg)
#endif /* __NT__ */
-/*
- Thread of shared memory's service
+#ifdef HAVE_SMEM
- SYNOPSIS
- handle_connections_shared_memory()
- arg Arguments of thread
-*/
+/**
+ Thread of shared memory's service.
-#ifdef HAVE_SMEM
+ @param arg Arguments of thread
+*/
pthread_handler_t handle_connections_shared_memory(void *arg)
{
/* file-mapping object, use for create shared memory */
@@ -5094,6 +5287,7 @@ enum options_mysqld
OPT_PLUGIN_DIR,
OPT_LOG_OUTPUT,
OPT_PORT_OPEN_TIMEOUT,
+ OPT_PROFILING,
OPT_KEEP_FILES_ON_CREATE,
OPT_GENERAL_LOG,
OPT_SLOW_LOG,
@@ -5102,7 +5296,8 @@ enum options_mysqld
OPT_SECURE_FILE_PRIV,
OPT_MIN_EXAMINED_ROW_LIMIT,
OPT_LOG_SLOW_SLAVE_STATEMENTS,
- OPT_OLD_MODE
+ OPT_OLD_MODE,
+ OPT_SLAVE_EXEC_MODE
};
@@ -5216,7 +5411,7 @@ struct my_option my_long_options[] =
{"concurrent-insert", OPT_CONCURRENT_INSERT,
"Use concurrent insert with MyISAM. Disable with --concurrent-insert=0",
(uchar**) &myisam_concurrent_insert, (uchar**) &myisam_concurrent_insert,
- 0, GET_LONG, OPT_ARG, 1, 0, 2, 0, 0, 0},
+ 0, GET_ULONG, OPT_ARG, 1, 0, 2, 0, 0, 0},
{"console", OPT_CONSOLE, "Write error output on screen; Don't remove the console window on windows.",
(uchar**) &opt_console, (uchar**) &opt_console, 0, GET_BOOL, NO_ARG, 0, 0, 0,
0, 0, 0},
@@ -5272,9 +5467,11 @@ struct my_option my_long_options[] =
(uchar**) &opt_enable_named_pipe, (uchar**) &opt_enable_named_pipe, 0, GET_BOOL,
NO_ARG, 0, 0, 0, 0, 0, 0},
#endif
+#ifdef HAVE_STACK_TRACE_ON_SEGV
{"enable-pstack", OPT_DO_PSTACK, "Print a symbolic stack trace on failure.",
(uchar**) &opt_do_pstack, (uchar**) &opt_do_pstack, 0, GET_BOOL, NO_ARG, 0, 0,
0, 0, 0, 0},
+#endif /* HAVE_STACK_TRACE_ON_SEGV */
{"engine-condition-pushdown",
OPT_ENGINE_CONDITION_PUSHDOWN,
"Push supported query conditions to the storage engine.",
@@ -5420,7 +5617,8 @@ Disable with --skip-large-pages.",
#ifdef HAVE_MMAP
{"log-tc-size", OPT_LOG_TC_SIZE, "Size of transaction coordinator log.",
(uchar**) &opt_tc_log_size, (uchar**) &opt_tc_log_size, 0, GET_ULONG,
- REQUIRED_ARG, TC_LOG_MIN_SIZE, TC_LOG_MIN_SIZE, ~0L, 0, TC_LOG_PAGE_SIZE, 0},
+ REQUIRED_ARG, TC_LOG_MIN_SIZE, TC_LOG_MIN_SIZE, ULONG_MAX, 0,
+ TC_LOG_PAGE_SIZE, 0},
#endif
{"log-update", OPT_UPDATE_LOG,
"The update log is deprecated since version 5.0, is replaced by the binary \
@@ -5521,13 +5719,8 @@ master-ssl",
{"ndb-autoincrement-prefetch-sz", OPT_NDB_AUTOINCREMENT_PREFETCH_SZ,
"Specify number of autoincrement values that are prefetched.",
(uchar**) &global_system_variables.ndb_autoincrement_prefetch_sz,
- (uchar**) &global_system_variables.ndb_autoincrement_prefetch_sz,
- 0, GET_ULONG, REQUIRED_ARG, 32, 1, 256, 0, 0, 0},
- {"ndb-distribution", OPT_NDB_DISTRIBUTION,
- "Default distribution for new tables in ndb",
- (uchar**) &opt_ndb_distribution,
- (uchar**) &opt_ndb_distribution,
- 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
+ (uchar**) &max_system_variables.ndb_autoincrement_prefetch_sz,
+ 0, GET_ULONG, REQUIRED_ARG, 1, 1, 256, 0, 0, 0},
{"ndb-force-send", OPT_NDB_FORCE_SEND,
"Force send of buffers to ndb immediately without waiting for "
"other threads.",
@@ -5650,6 +5843,12 @@ master-ssl",
"Maximum time in seconds to wait for the port to become free. "
"(Default: no wait)", (uchar**) &mysqld_port_timeout,
(uchar**) &mysqld_port_timeout, 0, GET_UINT, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
+#if defined(ENABLED_PROFILING) && defined(COMMUNITY_SERVER)
+ {"profiling_history_size", OPT_PROFILING, "Limit of query profiling memory",
+ (uchar**) &global_system_variables.profiling_history_size,
+ (uchar**) &max_system_variables.profiling_history_size,
+ 0, GET_ULONG, REQUIRED_ARG, 15, 0, 100, 0, 0, 0},
+#endif
{"relay-log", OPT_RELAY_LOG,
"The location and name to use for relay logs.",
(uchar**) &opt_relay_logname, (uchar**) &opt_relay_logname, 0,
@@ -5800,8 +5999,11 @@ replicating a LOAD DATA INFILE command.",
(uchar**) &slave_load_tmpdir, (uchar**) &slave_load_tmpdir, 0, GET_STR_ALLOC,
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"slave-skip-errors", OPT_SLAVE_SKIP_ERRORS,
- "Tells the slave thread to continue replication when a query returns an error from the provided list.",
+ "Tells the slave thread to continue replication when a query event returns an error from the provided list.",
0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
+ {"slave-exec-mode", OPT_SLAVE_EXEC_MODE,
+ "Modes for how replication events should be executed. Legal values are STRICT (default) and IDEMPOTENT. In IDEMPOTENT mode, replication will not stop for operations that are idempotent. In STRICT mode, replication will stop on any unexpected difference between the master and the slave.",
+ (uchar**) &slave_exec_mode_str, (uchar**) &slave_exec_mode_str, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
#endif
{"slow-query-log", OPT_SLOW_LOG,
"Enable|disable slow query log", (uchar**) &opt_slow_log,
@@ -5881,8 +6083,8 @@ log and this option does nothing anymore.",
NO_ARG, 0, 0, 0, 0, 0, 0},
{"warnings", 'W', "Deprecated; use --log-warnings instead.",
(uchar**) &global_system_variables.log_warnings,
- (uchar**) &max_system_variables.log_warnings, 0, GET_ULONG, OPT_ARG, 1, 0, ~0L,
- 0, 0, 0},
+ (uchar**) &max_system_variables.log_warnings, 0, GET_ULONG, OPT_ARG,
+ 1, 0, ULONG_MAX, 0, 0, 0},
{ "back_log", OPT_BACK_LOG,
"The number of outstanding connection requests MySQL can have. This comes into play when the main MySQL thread gets very many connection requests in a very short time.",
(uchar**) &back_log, (uchar**) &back_log, 0, GET_ULONG,
@@ -5890,12 +6092,12 @@ log and this option does nothing anymore.",
{"binlog_cache_size", OPT_BINLOG_CACHE_SIZE,
"The size of the cache to hold the SQL statements for the binary log during a transaction. If you often use big, multi-statement transactions you can increase this to get more performance.",
(uchar**) &binlog_cache_size, (uchar**) &binlog_cache_size, 0, GET_ULONG,
- REQUIRED_ARG, 32*1024L, IO_SIZE, ~0L, 0, IO_SIZE, 0},
+ REQUIRED_ARG, 32*1024L, IO_SIZE, ULONG_MAX, 0, IO_SIZE, 0},
{"bulk_insert_buffer_size", OPT_BULK_INSERT_BUFFER_SIZE,
"Size of tree cache used in bulk insert optimisation. Note that this is a limit per thread!",
(uchar**) &global_system_variables.bulk_insert_buff_size,
(uchar**) &max_system_variables.bulk_insert_buff_size,
- 0, GET_ULONG, REQUIRED_ARG, 8192*1024, 0, ~0L, 0, 1, 0},
+ 0, GET_ULONG, REQUIRED_ARG, 8192*1024, 0, ULONG_MAX, 0, 1, 0},
{"connect_timeout", OPT_CONNECT_TIMEOUT,
"The number of seconds the mysqld server is waiting for a connect packet before responding with 'Bad handshake'.",
(uchar**) &connect_timeout, (uchar**) &connect_timeout,
@@ -5918,7 +6120,7 @@ log and this option does nothing anymore.",
{"delayed_insert_limit", OPT_DELAYED_INSERT_LIMIT,
"After inserting delayed_insert_limit rows, the INSERT DELAYED handler will check if there are any SELECT statements pending. If so, it allows these to execute before continuing.",
(uchar**) &delayed_insert_limit, (uchar**) &delayed_insert_limit, 0, GET_ULONG,
- REQUIRED_ARG, DELAYED_LIMIT, 1, ~0L, 0, 1, 0},
+ REQUIRED_ARG, DELAYED_LIMIT, 1, ULONG_MAX, 0, 1, 0},
{"delayed_insert_timeout", OPT_DELAYED_INSERT_TIMEOUT,
"How long a INSERT DELAYED thread should wait for INSERT statements before terminating.",
(uchar**) &delayed_insert_timeout, (uchar**) &delayed_insert_timeout, 0,
@@ -5926,7 +6128,7 @@ log and this option does nothing anymore.",
{ "delayed_queue_size", OPT_DELAYED_QUEUE_SIZE,
"What size queue (in rows) should be allocated for handling INSERT DELAYED. If the queue becomes full, any client that does INSERT DELAYED will wait until there is room in the queue again.",
(uchar**) &delayed_queue_size, (uchar**) &delayed_queue_size, 0, GET_ULONG,
- REQUIRED_ARG, DELAYED_QUEUE_SIZE, 1, ~0L, 0, 1, 0},
+ REQUIRED_ARG, DELAYED_QUEUE_SIZE, 1, ULONG_MAX, 0, 1, 0},
{"div_precision_increment", OPT_DIV_PRECINCREMENT,
"Precision of the result of '/' operator will be increased on that value.",
(uchar**) &global_system_variables.div_precincrement,
@@ -5966,7 +6168,7 @@ log and this option does nothing anymore.",
"The maximum length of the result of function group_concat.",
(uchar**) &global_system_variables.group_concat_max_len,
(uchar**) &max_system_variables.group_concat_max_len, 0, GET_ULONG,
- REQUIRED_ARG, 1024, 4, (long) ~0, 0, 1, 0},
+ REQUIRED_ARG, 1024, 4, ULONG_MAX, 0, 1, 0},
{"interactive_timeout", OPT_INTERACTIVE_TIMEOUT,
"The number of seconds the server waits for activity on an interactive connection before closing it.",
(uchar**) &global_system_variables.net_interactive_timeout,
@@ -5976,8 +6178,8 @@ log and this option does nothing anymore.",
"The size of the buffer that is used for full joins.",
(uchar**) &global_system_variables.join_buff_size,
(uchar**) &max_system_variables.join_buff_size, 0, GET_ULONG,
- REQUIRED_ARG, 128*1024L, IO_SIZE*2+MALLOC_OVERHEAD, ~0L, MALLOC_OVERHEAD,
- IO_SIZE, 0},
+ REQUIRED_ARG, 128*1024L, IO_SIZE*2+MALLOC_OVERHEAD, ULONG_MAX,
+ 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.",
(uchar**) &global_system_variables.keep_files_on_create,
@@ -5995,7 +6197,7 @@ log and this option does nothing anymore.",
(uchar**) &dflt_key_cache_var.param_age_threshold,
(uchar**) 0,
0, (GET_ULONG | GET_ASK_ADDR), REQUIRED_ARG,
- 300, 100, ~0L, 0, 100, 0},
+ 300, 100, ULONG_MAX, 0, 100, 0},
{"key_cache_block_size", OPT_KEY_CACHE_BLOCK_SIZE,
"The default size of key cache blocks",
(uchar**) &dflt_key_cache_var.param_block_size,
@@ -6031,7 +6233,7 @@ log and this option does nothing anymore.",
{"max_binlog_cache_size", OPT_MAX_BINLOG_CACHE_SIZE,
"Can be used to restrict the total size used to cache a multi-transaction query.",
(uchar**) &max_binlog_cache_size, (uchar**) &max_binlog_cache_size, 0,
- GET_ULONG, REQUIRED_ARG, ~0L, IO_SIZE, ~0L, 0, IO_SIZE, 0},
+ GET_ULONG, REQUIRED_ARG, ULONG_MAX, IO_SIZE, ULONG_MAX, 0, IO_SIZE, 0},
{"max_binlog_size", OPT_MAX_BINLOG_SIZE,
"Binary log will be rotated automatically when the size exceeds this \
value. Will also apply to relay logs if max_relay_log_size is 0. \
@@ -6041,7 +6243,7 @@ The minimum value for this variable is 4096.",
{"max_connect_errors", OPT_MAX_CONNECT_ERRORS,
"If there is more than this number of interrupted connections from a host this host will be blocked from further connections.",
(uchar**) &max_connect_errors, (uchar**) &max_connect_errors, 0, GET_ULONG,
- REQUIRED_ARG, MAX_CONNECT_ERRORS, 1, ~0L, 0, 1, 0},
+ REQUIRED_ARG, MAX_CONNECT_ERRORS, 1, ULONG_MAX, 0, 1, 0},
// Default max_connections of 151 is larger than Apache's default max
// children, to avoid "too many connections" error in a common setup
{"max_connections", OPT_MAX_CONNECTIONS,
@@ -6086,7 +6288,7 @@ The minimum value for this variable is 4096.",
"Limit assumed max number of seeks when looking up rows based on a key",
(uchar**) &global_system_variables.max_seeks_for_key,
(uchar**) &max_system_variables.max_seeks_for_key, 0, GET_ULONG,
- REQUIRED_ARG, ~0L, 1, ~0L, 0, 1, 0 },
+ REQUIRED_ARG, ULONG_MAX, 1, ULONG_MAX, 0, 1, 0 },
{"max_sort_length", OPT_MAX_SORT_LENGTH,
"The number of bytes to use when sorting BLOB or TEXT values (only the first max_sort_length bytes of each value are used; the rest are ignored).",
(uchar**) &global_system_variables.max_sort_length,
@@ -6101,25 +6303,25 @@ The minimum value for this variable is 4096.",
"Maximum number of temporary tables a client can keep open at a time.",
(uchar**) &global_system_variables.max_tmp_tables,
(uchar**) &max_system_variables.max_tmp_tables, 0, GET_ULONG,
- REQUIRED_ARG, 32, 1, ~0L, 0, 1, 0},
+ REQUIRED_ARG, 32, 1, ULONG_MAX, 0, 1, 0},
{"max_user_connections", OPT_MAX_USER_CONNECTIONS,
"The maximum number of active connections for a single user (0 = no limit).",
(uchar**) &max_user_connections, (uchar**) &max_user_connections, 0, GET_UINT,
- REQUIRED_ARG, 0, 1, ~0, 0, 1, 0},
+ REQUIRED_ARG, 0, 1, UINT_MAX, 0, 1, 0},
{"max_write_lock_count", OPT_MAX_WRITE_LOCK_COUNT,
"After this many write locks, allow some read locks to run in between.",
(uchar**) &max_write_lock_count, (uchar**) &max_write_lock_count, 0, GET_ULONG,
- REQUIRED_ARG, ~0L, 1, ~0L, 0, 1, 0},
+ REQUIRED_ARG, ULONG_MAX, 1, ULONG_MAX, 0, 1, 0},
{"min_examined_row_limit", OPT_MIN_EXAMINED_ROW_LIMIT,
"Don't log queries which examine less than min_examined_row_limit rows to file.",
(uchar**) &global_system_variables.min_examined_row_limit,
(uchar**) &max_system_variables.min_examined_row_limit, 0, GET_ULONG,
- REQUIRED_ARG, 0, 0, ~0L, 0, 1L, 0},
+ REQUIRED_ARG, 0, 0, ULONG_MAX, 0, 1L, 0},
{"multi_range_count", OPT_MULTI_RANGE_COUNT,
"Number of key ranges to request at once.",
(uchar**) &global_system_variables.multi_range_count,
(uchar**) &max_system_variables.multi_range_count, 0,
- GET_ULONG, REQUIRED_ARG, 256, 1, ~0L, 0, 1, 0},
+ GET_ULONG, REQUIRED_ARG, 256, 1, ULONG_MAX, 0, 1, 0},
{"myisam_block_size", OPT_MYISAM_BLOCK_SIZE,
"Block size to be used for MyISAM index pages.",
(uchar**) &opt_myisam_block_size,
@@ -6147,7 +6349,7 @@ The minimum value for this variable is 4096.",
"Number of threads to use when repairing MyISAM tables. The value of 1 disables parallel repair.",
(uchar**) &global_system_variables.myisam_repair_threads,
(uchar**) &max_system_variables.myisam_repair_threads, 0,
- GET_ULONG, REQUIRED_ARG, 1, 1, ~0L, 0, 1, 0},
+ GET_ULONG, REQUIRED_ARG, 1, 1, ULONG_MAX, 0, 1, 0},
{"myisam_sort_buffer_size", OPT_MYISAM_SORT_BUFFER_SIZE,
"The buffer that is allocated when sorting the index when doing a REPAIR or when creating indexes with CREATE INDEX or ALTER TABLE.",
(uchar**) &global_system_variables.myisam_sort_buff_size,
@@ -6178,7 +6380,7 @@ The minimum value for this variable is 4096.",
"If a read on a communication port is interrupted, retry this many times before giving up.",
(uchar**) &global_system_variables.net_retry_count,
(uchar**) &max_system_variables.net_retry_count,0,
- GET_ULONG, REQUIRED_ARG, MYSQLD_NET_RETRY_COUNT, 1, ~0L, 0, 1, 0},
+ GET_ULONG, REQUIRED_ARG, MYSQLD_NET_RETRY_COUNT, 1, ULONG_MAX, 0, 1, 0},
{"net_write_timeout", OPT_NET_WRITE_TIMEOUT,
"Number of seconds to wait for a block to be written to a connection before aborting the write.",
(uchar**) &global_system_variables.net_write_timeout,
@@ -6220,17 +6422,17 @@ The minimum value for this variable is 4096.",
"Allocation block size for query parsing and execution",
(uchar**) &global_system_variables.query_alloc_block_size,
(uchar**) &max_system_variables.query_alloc_block_size, 0, GET_ULONG,
- REQUIRED_ARG, QUERY_ALLOC_BLOCK_SIZE, 1024, ~0L, 0, 1024, 0},
+ REQUIRED_ARG, QUERY_ALLOC_BLOCK_SIZE, 1024, ULONG_MAX, 0, 1024, 0},
#ifdef HAVE_QUERY_CACHE
{"query_cache_limit", OPT_QUERY_CACHE_LIMIT,
"Don't cache results that are bigger than this.",
(uchar**) &query_cache_limit, (uchar**) &query_cache_limit, 0, GET_ULONG,
- REQUIRED_ARG, 1024*1024L, 0, (longlong) ULONG_MAX, 0, 1, 0},
+ REQUIRED_ARG, 1024*1024L, 0, ULONG_MAX, 0, 1, 0},
{"query_cache_min_res_unit", OPT_QUERY_CACHE_MIN_RES_UNIT,
"minimal size of unit in wich space for results is allocated (last unit will be trimed after writing all result data.",
(uchar**) &query_cache_min_res_unit, (uchar**) &query_cache_min_res_unit,
0, GET_ULONG, REQUIRED_ARG, QUERY_CACHE_MIN_RESULT_DATA_SIZE,
- 0, (longlong) ULONG_MAX, 0, 1, 0},
+ 0, ULONG_MAX, 0, 1, 0},
#endif /*HAVE_QUERY_CACHE*/
{"query_cache_size", OPT_QUERY_CACHE_SIZE,
"The memory allocated to store results from old queries.",
@@ -6253,12 +6455,13 @@ The minimum value for this variable is 4096.",
(uchar**) &global_system_variables.query_prealloc_size,
(uchar**) &max_system_variables.query_prealloc_size, 0, GET_ULONG,
REQUIRED_ARG, QUERY_ALLOC_PREALLOC_SIZE, QUERY_ALLOC_PREALLOC_SIZE,
- ~0L, 0, 1024, 0},
+ ULONG_MAX, 0, 1024, 0},
{"range_alloc_block_size", OPT_RANGE_ALLOC_BLOCK_SIZE,
"Allocation block size for storing ranges during optimization",
(uchar**) &global_system_variables.range_alloc_block_size,
(uchar**) &max_system_variables.range_alloc_block_size, 0, GET_ULONG,
- REQUIRED_ARG, RANGE_ALLOC_BLOCK_SIZE, 4096, ~0L, 0, 1024, 0},
+ REQUIRED_ARG, RANGE_ALLOC_BLOCK_SIZE, RANGE_ALLOC_BLOCK_SIZE, ULONG_MAX,
+ 0, 1024, 0},
{"read_buffer_size", OPT_RECORD_BUFFER,
"Each thread that does a sequential scan allocates a buffer of this size for each table it scans. If you do many sequential scans, you may want to increase this value.",
(uchar**) &global_system_variables.read_buff_size,
@@ -6322,7 +6525,7 @@ The minimum value for this variable is 4096.",
"Synchronously flush binary log to disk after every #th event. "
"Use 0 (default) to disable synchronous flushing.",
(uchar**) &sync_binlog_period, (uchar**) &sync_binlog_period, 0, GET_ULONG,
- REQUIRED_ARG, 0, 0, ~0L, 0, 1, 0},
+ REQUIRED_ARG, 0, 0, ULONG_MAX, 0, 1, 0},
{"sync-frm", OPT_SYNC_FRM, "Sync .frm to disk on create. Enabled by default.",
(uchar**) &opt_sync_frm, (uchar**) &opt_sync_frm, 0, GET_BOOL, NO_ARG, 1, 0,
0, 0, 0, 0},
@@ -6360,7 +6563,7 @@ The minimum value for this variable is 4096.",
{"thread_stack", OPT_THREAD_STACK,
"The stack size for each thread.", (uchar**) &thread_stack,
(uchar**) &thread_stack, 0, GET_ULONG, REQUIRED_ARG,DEFAULT_THREAD_STACK,
- 1024L*128L, ~0L, 0, 1024, 0},
+ 1024L*128L, ULONG_MAX, 0, 1024, 0},
{ "time_format", OPT_TIME_FORMAT,
"The TIME format (for future).",
(uchar**) &opt_date_time_formats[MYSQL_TIMESTAMP_TIME],
@@ -6376,12 +6579,12 @@ The minimum value for this variable is 4096.",
"Allocation block size for various transaction-related structures",
(uchar**) &global_system_variables.trans_alloc_block_size,
(uchar**) &max_system_variables.trans_alloc_block_size, 0, GET_ULONG,
- REQUIRED_ARG, QUERY_ALLOC_BLOCK_SIZE, 1024, ~0L, 0, 1024, 0},
+ REQUIRED_ARG, QUERY_ALLOC_BLOCK_SIZE, 1024, ULONG_MAX, 0, 1024, 0},
{"transaction_prealloc_size", OPT_TRANS_PREALLOC_SIZE,
"Persistent buffer for various transaction-related structures",
(uchar**) &global_system_variables.trans_prealloc_size,
(uchar**) &max_system_variables.trans_prealloc_size, 0, GET_ULONG,
- REQUIRED_ARG, TRANS_ALLOC_PREALLOC_SIZE, 1024, ~0L, 0, 1024, 0},
+ REQUIRED_ARG, TRANS_ALLOC_PREALLOC_SIZE, 1024, ULONG_MAX, 0, 1024, 0},
{"thread_handling", OPT_THREAD_HANDLING,
"Define threads usage for handling queries: "
"one-thread-per-connection or no-threads", 0, 0,
@@ -6422,6 +6625,16 @@ static int show_starttime(THD *thd, SHOW_VAR *var, char *buff)
return 0;
}
+#ifdef COMMUNITY_SERVER
+static int show_flushstatustime(THD *thd, SHOW_VAR *var, char *buff)
+{
+ var->type= SHOW_LONG;
+ var->value= buff;
+ *((long *)buff)= (long) (thd->query_start() - flush_status_time);
+ return 0;
+}
+#endif
+
#ifdef HAVE_REPLICATION
static int show_rpl_status(THD *thd, SHOW_VAR *var, char *buff)
{
@@ -6759,115 +6972,7 @@ SHOW_VAR status_vars[]= {
{"Binlog_cache_use", (char*) &binlog_cache_use, SHOW_LONG},
{"Bytes_received", (char*) offsetof(STATUS_VAR, bytes_received), SHOW_LONGLONG_STATUS},
{"Bytes_sent", (char*) offsetof(STATUS_VAR, bytes_sent), SHOW_LONGLONG_STATUS},
- {"Com_admin_commands", (char*) offsetof(STATUS_VAR, com_other), SHOW_LONG_STATUS},
- {"Com_alter_db", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_ALTER_DB]), SHOW_LONG_STATUS},
- {"Com_alter_event", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_ALTER_EVENT]), SHOW_LONG_STATUS},
- {"Com_alter_table", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_ALTER_TABLE]), SHOW_LONG_STATUS},
- {"Com_analyze", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_ANALYZE]), SHOW_LONG_STATUS},
- {"Com_backup_table", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_BACKUP_TABLE]), SHOW_LONG_STATUS},
- {"Com_begin", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_BEGIN]), SHOW_LONG_STATUS},
- {"Com_call_procedure", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_CALL]), SHOW_LONG_STATUS},
- {"Com_change_db", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_CHANGE_DB]), SHOW_LONG_STATUS},
- {"Com_change_master", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_CHANGE_MASTER]), SHOW_LONG_STATUS},
- {"Com_check", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_CHECK]), SHOW_LONG_STATUS},
- {"Com_checksum", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_CHECKSUM]), SHOW_LONG_STATUS},
- {"Com_commit", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_COMMIT]), SHOW_LONG_STATUS},
- {"Com_create_db", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_CREATE_DB]), SHOW_LONG_STATUS},
- {"Com_create_event", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_CREATE_EVENT]), SHOW_LONG_STATUS},
- {"Com_create_function", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_CREATE_FUNCTION]), SHOW_LONG_STATUS},
- {"Com_create_index", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_CREATE_INDEX]), SHOW_LONG_STATUS},
- {"Com_create_table", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_CREATE_TABLE]), SHOW_LONG_STATUS},
- {"Com_create_user", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_CREATE_USER]), SHOW_LONG_STATUS},
- {"Com_dealloc_sql", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_DEALLOCATE_PREPARE]), SHOW_LONG_STATUS},
- {"Com_delete", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_DELETE]), SHOW_LONG_STATUS},
- {"Com_delete_multi", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_DELETE_MULTI]), SHOW_LONG_STATUS},
- {"Com_do", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_DO]), SHOW_LONG_STATUS},
- {"Com_drop_db", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_DROP_DB]), SHOW_LONG_STATUS},
- {"Com_drop_event", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_DROP_EVENT]), SHOW_LONG_STATUS},
- {"Com_drop_function", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_DROP_FUNCTION]), SHOW_LONG_STATUS},
- {"Com_drop_index", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_DROP_INDEX]), SHOW_LONG_STATUS},
- {"Com_drop_table", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_DROP_TABLE]), SHOW_LONG_STATUS},
- {"Com_drop_user", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_DROP_USER]), SHOW_LONG_STATUS},
- {"Com_execute_sql", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_EXECUTE]), SHOW_LONG_STATUS},
- {"Com_flush", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_FLUSH]), SHOW_LONG_STATUS},
- {"Com_grant", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_GRANT]), SHOW_LONG_STATUS},
- {"Com_ha_close", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_HA_CLOSE]), SHOW_LONG_STATUS},
- {"Com_ha_open", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_HA_OPEN]), SHOW_LONG_STATUS},
- {"Com_ha_read", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_HA_READ]), SHOW_LONG_STATUS},
- {"Com_help", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_HELP]), SHOW_LONG_STATUS},
- {"Com_insert", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_INSERT]), SHOW_LONG_STATUS},
- {"Com_insert_select", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_INSERT_SELECT]), SHOW_LONG_STATUS},
- {"Com_kill", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_KILL]), SHOW_LONG_STATUS},
- {"Com_load", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_LOAD]), SHOW_LONG_STATUS},
- {"Com_load_master_data", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_LOAD_MASTER_DATA]), SHOW_LONG_STATUS},
- {"Com_load_master_table", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_LOAD_MASTER_TABLE]), SHOW_LONG_STATUS},
- {"Com_lock_tables", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_LOCK_TABLES]), SHOW_LONG_STATUS},
- {"Com_optimize", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_OPTIMIZE]), SHOW_LONG_STATUS},
- {"Com_preload_keys", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_PRELOAD_KEYS]), SHOW_LONG_STATUS},
- {"Com_prepare_sql", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_PREPARE]), SHOW_LONG_STATUS},
- {"Com_purge", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_PURGE]), SHOW_LONG_STATUS},
- {"Com_purge_before_date", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_PURGE_BEFORE]), SHOW_LONG_STATUS},
- {"Com_rename_table", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_RENAME_TABLE]), SHOW_LONG_STATUS},
- {"Com_repair", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_REPAIR]), SHOW_LONG_STATUS},
- {"Com_replace", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_REPLACE]), SHOW_LONG_STATUS},
- {"Com_replace_select", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_REPLACE_SELECT]), SHOW_LONG_STATUS},
- {"Com_reset", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_RESET]), SHOW_LONG_STATUS},
- {"Com_restore_table", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_RESTORE_TABLE]), SHOW_LONG_STATUS},
- {"Com_revoke", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_REVOKE]), SHOW_LONG_STATUS},
- {"Com_revoke_all", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_REVOKE_ALL]), SHOW_LONG_STATUS},
- {"Com_rollback", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_ROLLBACK]), SHOW_LONG_STATUS},
- {"Com_savepoint", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SAVEPOINT]), SHOW_LONG_STATUS},
- {"Com_select", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SELECT]), SHOW_LONG_STATUS},
- {"Com_set_option", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SET_OPTION]), SHOW_LONG_STATUS},
- {"Com_show_binlog_events", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_BINLOG_EVENTS]), SHOW_LONG_STATUS},
- {"Com_show_binlogs", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_BINLOGS]), SHOW_LONG_STATUS},
- {"Com_show_charsets", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_CHARSETS]), SHOW_LONG_STATUS},
- {"Com_show_collations", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_COLLATIONS]), SHOW_LONG_STATUS},
- {"Com_show_column_types", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_COLUMN_TYPES]), SHOW_LONG_STATUS},
- {"Com_show_create_db", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_CREATE_DB]), SHOW_LONG_STATUS},
- {"Com_show_create_event", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_CREATE_EVENT]), SHOW_LONG_STATUS},
- {"Com_show_create_table", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_CREATE]), SHOW_LONG_STATUS},
- {"Com_show_databases", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_DATABASES]), SHOW_LONG_STATUS},
- {"Com_show_engine_logs", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_ENGINE_LOGS]), SHOW_LONG_STATUS},
- {"Com_show_engine_mutex", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_ENGINE_MUTEX]), SHOW_LONG_STATUS},
- {"Com_show_engine_status", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_ENGINE_STATUS]), SHOW_LONG_STATUS},
- {"Com_show_events", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_EVENTS]), SHOW_LONG_STATUS},
- {"Com_show_errors", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_ERRORS]), SHOW_LONG_STATUS},
- {"Com_show_fields", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_FIELDS]), SHOW_LONG_STATUS},
- {"Com_show_grants", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_GRANTS]), SHOW_LONG_STATUS},
- {"Com_show_keys", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_KEYS]), SHOW_LONG_STATUS},
- {"Com_show_master_status", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_MASTER_STAT]), SHOW_LONG_STATUS},
- {"Com_show_new_master", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_NEW_MASTER]), SHOW_LONG_STATUS},
- {"Com_show_open_tables", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_OPEN_TABLES]), SHOW_LONG_STATUS},
- {"Com_show_plugins", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_PLUGINS]), SHOW_LONG_STATUS},
- {"Com_show_privileges", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_PRIVILEGES]), SHOW_LONG_STATUS},
- {"Com_show_processlist", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_PROCESSLIST]), SHOW_LONG_STATUS},
- {"Com_show_slave_hosts", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_SLAVE_HOSTS]), SHOW_LONG_STATUS},
- {"Com_show_slave_status", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_SLAVE_STAT]), SHOW_LONG_STATUS},
- {"Com_show_status", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_STATUS]), SHOW_LONG_STATUS},
- {"Com_show_storage_engines", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_STORAGE_ENGINES]), SHOW_LONG_STATUS},
- {"Com_show_tables", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_TABLES]), SHOW_LONG_STATUS},
- {"Com_show_triggers", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_TRIGGERS]), SHOW_LONG_STATUS},
- {"Com_show_variables", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_VARIABLES]), SHOW_LONG_STATUS},
- {"Com_show_warnings", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_WARNS]), SHOW_LONG_STATUS},
- {"Com_slave_start", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SLAVE_START]), SHOW_LONG_STATUS},
- {"Com_slave_stop", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SLAVE_STOP]), SHOW_LONG_STATUS},
- {"Com_stmt_close", (char*) offsetof(STATUS_VAR, com_stmt_close), SHOW_LONG_STATUS},
- {"Com_stmt_execute", (char*) offsetof(STATUS_VAR, com_stmt_execute), SHOW_LONG_STATUS},
- {"Com_stmt_fetch", (char*) offsetof(STATUS_VAR, com_stmt_fetch), SHOW_LONG_STATUS},
- {"Com_stmt_prepare", (char*) offsetof(STATUS_VAR, com_stmt_prepare), SHOW_LONG_STATUS},
- {"Com_stmt_reset", (char*) offsetof(STATUS_VAR, com_stmt_reset), SHOW_LONG_STATUS},
- {"Com_stmt_send_long_data", (char*) offsetof(STATUS_VAR, com_stmt_send_long_data), SHOW_LONG_STATUS},
- {"Com_truncate", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_TRUNCATE]), SHOW_LONG_STATUS},
- {"Com_unlock_tables", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_UNLOCK_TABLES]), SHOW_LONG_STATUS},
- {"Com_update", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_UPDATE]), SHOW_LONG_STATUS},
- {"Com_update_multi", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_UPDATE_MULTI]), SHOW_LONG_STATUS},
- {"Com_xa_commit", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_XA_COMMIT]),SHOW_LONG_STATUS},
- {"Com_xa_end", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_XA_END]),SHOW_LONG_STATUS},
- {"Com_xa_prepare", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_XA_PREPARE]),SHOW_LONG_STATUS},
- {"Com_xa_recover", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_XA_RECOVER]),SHOW_LONG_STATUS},
- {"Com_xa_rollback", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_XA_ROLLBACK]),SHOW_LONG_STATUS},
- {"Com_xa_start", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_XA_START]),SHOW_LONG_STATUS},
+ {"Com", (char*) com_status_vars, SHOW_ARRAY},
{"Compression", (char*) &show_net_compression, SHOW_FUNC},
{"Connections", (char*) &thread_id, SHOW_LONG_NOFLUSH},
{"Created_tmp_disk_tables", (char*) offsetof(STATUS_VAR, created_tmp_disk_tables), SHOW_LONG_STATUS},
@@ -6976,6 +7081,9 @@ SHOW_VAR status_vars[]= {
{"Threads_created", (char*) &thread_created, SHOW_LONG_NOFLUSH},
{"Threads_running", (char*) &thread_running, SHOW_INT},
{"Uptime", (char*) &show_starttime, SHOW_FUNC},
+#ifdef COMMUNITY_SERVER
+ {"Uptime_since_flush_status",(char*) &show_flushstatustime, SHOW_FUNC},
+#endif
{NullS, NullS, SHOW_LONG}
};
@@ -7039,13 +7147,13 @@ To see what values a running MySQL server is using, type\n\
#endif /*!EMBEDDED_LIBRARY*/
-/*
- Initialize all MySQL global variables to default values
+/**
+ Initialize all MySQL global variables to default values.
- SYNOPSIS
- mysql_init_variables()
+ We don't need to set numeric variables refered to in my_long_options
+ as these are initialized by my_getopt.
- NOTES
+ @note
The reason to set a lot of global variables to zero is to allow one to
restart the embedded server with a clean environment
It's also needed on some exotic platforms where global variables are
@@ -7110,6 +7218,9 @@ static void mysql_init_variables(void)
/* Things with default values that are not zero */
delay_key_write_options= (uint) DELAY_KEY_WRITE_ON;
+ slave_exec_mode_options= 0;
+ slave_exec_mode_options= (uint)
+ find_bit_type_or_exit(slave_exec_mode_str, &slave_exec_mode_typelib, NULL);
opt_specialflag= SPECIAL_ENGLISH;
unix_sock= ip_sock= INVALID_SOCKET;
mysql_home_ptr= mysql_home;
@@ -7183,7 +7294,10 @@ static void mysql_init_variables(void)
"d:t:i:o,/tmp/mysqld.trace");
#endif
opt_error_log= IF_WIN(1,0);
-#ifdef WITH_NDBCLUSTER_STORAGE_ENGINE
+#ifdef COMMUNITY_SERVER
+ have_community_features = SHOW_OPTION_YES;
+#else
+ have_community_features = SHOW_OPTION_NO;
global_system_variables.ndb_index_stat_enable=FALSE;
max_system_variables.ndb_index_stat_enable=TRUE;
global_system_variables.ndb_index_stat_cache_entries=32;
@@ -7319,6 +7433,10 @@ mysqld_get_one_option(int optid,
case OPT_SLAVE_SKIP_ERRORS:
init_slave_skip_errors(argument);
break;
+ case OPT_SLAVE_EXEC_MODE:
+ slave_exec_mode_options= (uint)
+ find_bit_type_or_exit(argument, &slave_exec_mode_typelib, "");
+ break;
#endif
case OPT_SAFEMALLOC_MEM_LIMIT:
#if !defined(DBUG_OFF) && defined(SAFEMALLOC)
@@ -7470,7 +7588,7 @@ mysqld_get_one_option(int optid,
{
if (!argument || !argument[0])
{
- log_output_options= LOG_TABLE;
+ log_output_options= LOG_FILE;
log_output_str= log_output_typelib.type_names[1];
}
else
@@ -7741,12 +7859,13 @@ mysqld_get_one_option(int optid,
break;
}
case OPT_ONE_THREAD:
- global_system_variables.thread_handling= 2;
+ global_system_variables.thread_handling=
+ SCHEDULER_ONE_THREAD_PER_CONNECTION;
break;
case OPT_THREAD_HANDLING:
{
global_system_variables.thread_handling=
- find_type_or_exit(argument, &thread_handling_typelib, opt->name);
+ find_type_or_exit(argument, &thread_handling_typelib, opt->name)-1;
break;
}
case OPT_FT_BOOLEAN_SYNTAX:
@@ -7771,7 +7890,7 @@ mysqld_get_one_option(int optid,
}
-/* Handle arguments for multiple key caches */
+/** Handle arguments for multiple key caches. */
extern "C" uchar **mysql_getopt_value(const char *keyname, uint key_length,
const struct my_option *option);
@@ -7822,6 +7941,10 @@ void option_error_reporter(enum loglevel level, const char *format, ...)
}
+/**
+ @todo
+ - FIXME add EXIT_TOO_MANY_ARGUMENTS to "mysys_err.h" and return that code?
+*/
static void get_options(int *argc,char **argv)
{
int ho_error;
@@ -7864,6 +7987,8 @@ static void get_options(int *argc,char **argv)
}
/* Set global MyISAM variables from delay_key_write_options */
fix_delay_key_write((THD*) 0, OPT_GLOBAL);
+ /* Set global slave_exec_mode from its option */
+ fix_slave_exec_mode(OPT_GLOBAL);
#ifndef EMBEDDED_LIBRARY
if (mysqld_chroot)
@@ -7953,10 +8078,11 @@ static char *get_relative_path(const char *path)
}
-/*
+/**
Fix filename and replace extension where 'dir' is relative to
mysql_real_data_home.
- Return 1 if len(path) > FN_REFLEN
+ @return
+ 1 if len(path) > FN_REFLEN
*/
bool
@@ -8061,9 +8187,11 @@ static ulong find_bit_type_or_exit(const char *x, TYPELIB *bit_lib,
}
-/*
- Return a bitfield from a string of substrings separated by ','
- returns ~(ulong) 0 on error.
+/**
+ @return
+ a bitfield from a string of substrings separated by ','
+ or
+ ~(ulong) 0 on error.
*/
static ulong find_bit_type(const char *x, TYPELIB *bit_lib)
@@ -8122,16 +8250,16 @@ skip: ;
} /* find_bit_type */
-/*
- Check if file system used for databases is case insensitive
+/**
+ Check if file system used for databases is case insensitive.
- SYNOPSIS
- test_if_case_sensitive()
- dir_name Directory to test
+ @param dir_name Directory to test
- RETURN
+ @retval
-1 Don't know (Test failed)
+ @retval
0 File system is case sensitive
+ @retval
1 File system is case insensitive
*/
@@ -8162,10 +8290,11 @@ static int test_if_case_insensitive(const char *dir_name)
}
-/* Create file to store pid number */
-
#ifndef EMBEDDED_LIBRARY
+/**
+ Create file to store pid number.
+*/
static void create_pid_file()
{
File file;
@@ -8187,7 +8316,7 @@ static void create_pid_file()
}
#endif /* EMBEDDED_LIBRARY */
-/* Clear most status variables */
+/** Clear most status variables. */
void refresh_status(THD *thd)
{
pthread_mutex_lock(&LOCK_status);
@@ -8203,6 +8332,9 @@ void refresh_status(THD *thd)
/* Reset the counters of all key caches (default and named). */
process_key_caches(reset_key_cache_counters);
+#ifdef COMMUNITY_SERVER
+ flush_status_time= time((time_t*) 0);
+#endif
pthread_mutex_unlock(&LOCK_status);
/*
diff --git a/sql/mysqld_suffix.h b/sql/mysqld_suffix.h
index b348f272db1..654d7cf88c1 100644
--- a/sql/mysqld_suffix.h
+++ b/sql/mysqld_suffix.h
@@ -13,8 +13,11 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-/*
- Set MYSQL_SERVER_SUFFIX_STR
+/**
+ @file
+
+ Set MYSQL_SERVER_SUFFIX_STR.
+
The following code is quite ugly as there is no portable way to easily set a
string to the value of a macro
*/
diff --git a/sql/net_serv.cc b/sql/net_serv.cc
index 18cf1ebae5b..ad653a2267d 100644
--- a/sql/net_serv.cc
+++ b/sql/net_serv.cc
@@ -13,15 +13,16 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-/*
+/**
+ @file
+
This file is the net layer API for the MySQL client/server protocol,
which is a tightly coupled, proprietary protocol owned by MySQL AB.
+ @note
Any re-implementations of this protocol must also be under GPL
unless one has got an license from MySQL AB stating otherwise.
-*/
-/*
- Write and read of logical packets to/from socket
+ Write and read of logical packets to/from socket.
Writes are cached into net_buffer_length big packets.
Read packets are reallocated dynamicly when reading big packets.
@@ -111,7 +112,7 @@ extern void query_cache_insert(NET *net, const char *packet, ulong length);
static my_bool net_write_buff(NET *net,const uchar *packet,ulong len);
- /* Init with packet info */
+/** Init with packet info. */
my_bool my_net_init(NET *net, Vio* vio)
{
@@ -123,20 +124,18 @@ my_bool my_net_init(NET *net, Vio* vio)
MYF(MY_WME))))
DBUG_RETURN(1);
net->buff_end=net->buff+net->max_packet;
- net->no_send_ok= net->no_send_error= 0;
net->error=0; net->return_errno=0; net->return_status=0;
net->pkt_nr=net->compress_pkt_nr=0;
net->write_pos=net->read_pos = net->buff;
- net->last_error[0]=0;
+ net->client_last_error[0]=0;
net->compress=0; net->reading_or_writing=0;
net->where_b = net->remain_in_buf=0;
- net->last_errno=0;
+ net->client_last_errno=0;
#ifdef USE_QUERY_CACHE
query_cache_init_query(net);
#else
net->query_cache_query= 0;
#endif
- net->report_error= 0;
if (vio != 0) /* If real connection */
{
@@ -163,7 +162,7 @@ void net_end(NET *net)
}
-/* Realloc the packet buffer */
+/** Realloc the packet buffer. */
my_bool net_realloc(NET *net, size_t length)
{
@@ -176,9 +175,12 @@ my_bool net_realloc(NET *net, size_t length)
{
DBUG_PRINT("error", ("Packet too large. Max size: %lu",
net->max_packet_size));
+ /* @todo: 1 and 2 codes are identical. */
net->error= 1;
- net->report_error= 1;
- net->last_errno= ER_NET_PACKET_TOO_LARGE;
+ net->client_last_errno= ER_NET_PACKET_TOO_LARGE;
+#ifdef MYSQL_SERVER
+ my_error(ER_NET_PACKET_TOO_LARGE, MYF(0));
+#endif
DBUG_RETURN(1);
}
pkt_length = (length+IO_SIZE-1) & ~(IO_SIZE-1);
@@ -190,9 +192,10 @@ my_bool net_realloc(NET *net, size_t length)
NET_HEADER_SIZE + COMP_HEADER_SIZE,
MYF(MY_WME))))
{
+ /* @todo: 1 and 2 codes are identical. */
net->error= 1;
- net->report_error= 1;
- net->last_errno= ER_OUT_OF_RESOURCES;
+ net->client_last_errno= ER_OUT_OF_RESOURCES;
+ /* In the server the error is reported by MY_WME flag. */
DBUG_RETURN(1);
}
net->buff=net->write_pos=buff;
@@ -201,20 +204,17 @@ my_bool net_realloc(NET *net, size_t length)
}
-/*
- Check if there is any data to be read from the socket
-
- SYNOPSIS
- net_data_is_ready()
- sd socket descriptor
+/**
+ Check if there is any data to be read from the socket.
- DESCRIPTION
- Check if there is any data to be read from the socket.
+ @param sd socket descriptor
- RETURN VALUES
- 0 No data to read
- 1 Data or EOF to read
- -1 Don't know if data is ready or not
+ @retval
+ 0 No data to read
+ @retval
+ 1 Data or EOF to read
+ @retval
+ -1 Don't know if data is ready or not
*/
#if !defined(EMBEDDED_LIBRARY)
@@ -258,16 +258,10 @@ static int net_data_is_ready(my_socket sd)
#endif /* EMBEDDED_LIBRARY */
-/*
+/**
Remove unwanted characters from connection
- and check if disconnected
+ and check if disconnected.
- SYNOPSIS
- net_clear()
- net NET handler
- clear_buffer If <> 0, then clear all data from communication buffer
-
- DESCRIPTION
Read from socket until there is nothing more to read. Discard
what is read.
@@ -278,6 +272,8 @@ static int net_data_is_ready(my_socket sd)
a FIN packet), then select() considers a socket "ready to read",
in the sense that there's EOF to read, but read() returns 0.
+ @param net NET handler
+ @param clear_buffer if <> 0, then clear all data from comm buff
*/
void net_clear(NET *net, my_bool clear_buffer)
@@ -335,7 +331,7 @@ void net_clear(NET *net, my_bool clear_buffer)
}
- /* Flush write_buffer if not empty. */
+/** Flush write_buffer if not empty. */
my_bool net_flush(NET *net)
{
@@ -358,12 +354,13 @@ my_bool net_flush(NET *net)
** Write something to server/client buffer
*****************************************************************************/
-/*
- Write a logical packet with packet header
+/**
+ Write a logical packet with packet header.
+
Format: Packet length (3 bytes), packet number(1 byte)
When compression is used a 3 byte compression length is added
- NOTE
+ @note
If compression is used the original package is modified!
*/
@@ -400,19 +397,9 @@ my_net_write(NET *net,const uchar *packet,size_t len)
return test(net_write_buff(net,packet,len));
}
-/*
+/**
Send a command to the server.
- SYNOPSIS
- net_write_command()
- net NET handler
- command Command in MySQL server (enum enum_server_command)
- header Header to write after command
- head_len Length of header
- packet Query or parameter to query
- len Length of packet
-
- DESCRIPTION
The reason for having both header and packet is so that libmysql
can easy add a header to a special command (like prepared statements)
without having to re-alloc the string.
@@ -420,11 +407,20 @@ my_net_write(NET *net,const uchar *packet,size_t len)
As the command is part of the first data packet, we have to do some data
juggling to put the command in there, without having to create a new
packet.
+
This function will split big packets into sub-packets if needed.
(Each sub packet can only be 2^24 bytes)
- RETURN VALUES
+ @param net NET handler
+ @param command Command in MySQL server (enum enum_server_command)
+ @param header Header to write after command
+ @param head_len Length of header
+ @param packet Query or parameter to query
+ @param len Length of packet
+
+ @retval
0 ok
+ @retval
1 error
*/
@@ -468,33 +464,30 @@ net_write_command(NET *net,uchar command,
net_write_buff(net, packet, len) || net_flush(net)));
}
-/*
+/**
Caching the data in a local buffer before sending it.
- SYNOPSIS
- net_write_buff()
- net Network handler
- packet Packet to send
- len Length of packet
-
- DESCRIPTION
- Fill up net->buffer and send it to the client when full.
+ Fill up net->buffer and send it to the client when full.
If the rest of the to-be-sent-packet is bigger than buffer,
send it in one big block (to avoid copying to internal buffer).
If not, copy the rest of the data to the buffer and return without
sending data.
- NOTES
- The cached buffer can be sent as it is with 'net_flush()'.
+ @param net Network handler
+ @param packet Packet to send
+ @param len Length of packet
+ @note
+ The cached buffer can be sent as it is with 'net_flush()'.
In this code we have to be careful to not send a packet longer than
MAX_PACKET_LENGTH to net_real_write() if we are using the compressed
protocol as we store the length of the compressed packet in 3 bytes.
- RETURN
- 0 ok
- 1
+ @retval
+ 0 ok
+ @retval
+ 1
*/
static my_bool
@@ -547,9 +540,12 @@ net_write_buff(NET *net, const uchar *packet, ulong len)
}
-/*
+/**
Read and write one packet using timeouts.
If needed, the packet is compressed before sending.
+
+ @todo
+ - TODO is it needed to set this variable if we have no socket
*/
int
@@ -582,12 +578,9 @@ net_real_write(NET *net,const uchar *packet, size_t len)
if (!(b= (uchar*) my_malloc(len + NET_HEADER_SIZE +
COMP_HEADER_SIZE, MYF(MY_WME))))
{
-#ifdef MYSQL_SERVER
- net->last_errno= ER_OUT_OF_RESOURCES;
net->error= 2;
- /* TODO is it needed to set this variable if we have no socket */
- net->report_error= 1;
-#endif
+ net->client_last_errno= ER_OUT_OF_RESOURCES;
+ /* In the server, the error is reported by MY_WME flag. */
net->reading_or_writing= 0;
DBUG_RETURN(1);
}
@@ -638,11 +631,11 @@ net_real_write(NET *net,const uchar *packet, size_t len)
"%s: my_net_write: fcntl returned error %d, aborting thread\n",
my_progname,vio_errno(net->vio));
#endif /* EXTRA_DEBUG */
-#ifdef MYSQL_SERVER
- net->last_errno= ER_NET_ERROR_ON_WRITE;
-#endif
net->error= 2; /* Close socket */
- net->report_error= 1;
+ net->client_last_errno= ER_NET_PACKET_TOO_LARGE;
+#ifdef MYSQL_SERVER
+ my_error(ER_NET_PACKET_TOO_LARGE, MYF(0));
+#endif
goto end;
}
retry_count=0;
@@ -669,10 +662,10 @@ net_real_write(NET *net,const uchar *packet, size_t len)
}
#endif /* defined(THREAD_SAFE_CLIENT) && !defined(MYSQL_SERVER) */
net->error= 2; /* Close socket */
- net->report_error= 1;
+ net->client_last_errno= (interrupted ? ER_NET_WRITE_INTERRUPTED :
+ ER_NET_ERROR_ON_WRITE);
#ifdef MYSQL_SERVER
- net->last_errno= (interrupted ? ER_NET_WRITE_INTERRUPTED :
- ER_NET_ERROR_ON_WRITE);
+ my_error(net->client_last_errno, MYF(0));
#endif /* MYSQL_SERVER */
break;
}
@@ -726,18 +719,17 @@ static my_bool net_safe_read(NET *net, uchar *buff, size_t length,
return 0;
}
-/*
+/**
Help function to clear the commuication buffer when we get a too big packet.
- SYNOPSIS
- my_net_skip_rest()
- net Communication handle
- remain Bytes to read
- alarmed Parameter for thr_alarm()
- alarm_buff Parameter for thr_alarm()
+ @param net Communication handle
+ @param remain Bytes to read
+ @param alarmed Parameter for thr_alarm()
+ @param alarm_buff Parameter for thr_alarm()
- RETURN VALUES
+ @retval
0 Was able to read the whole packet
+ @retval
1 Got mailformed packet from client
*/
@@ -780,10 +772,13 @@ static my_bool my_net_skip_rest(NET *net, uint32 remain, thr_alarm_t *alarmed,
#endif /* NO_ALARM */
-/*
- Reads one packet to net->buff + net->where_b
- Returns length of packet. Long packets are handled by my_net_read().
+/**
+ Reads one packet to net->buff + net->where_b.
+ Long packets are handled by my_net_read().
This function reallocates the net->buff buffer if necessary.
+
+ @return
+ Returns length of packet.
*/
static ulong
@@ -849,9 +844,9 @@ my_real_read(NET *net, size_t *complen)
#endif /* EXTRA_DEBUG */
len= packet_error;
net->error= 2; /* Close socket */
- net->report_error= 1;
+ net->client_last_errno= ER_NET_FCNTL_ERROR;
#ifdef MYSQL_SERVER
- net->last_errno= ER_NET_FCNTL_ERROR;
+ my_error(ER_NET_FCNTL_ERROR, MYF(0));
#endif
goto end;
}
@@ -881,10 +876,11 @@ my_real_read(NET *net, size_t *complen)
remain, vio_errno(net->vio), (long) length));
len= packet_error;
net->error= 2; /* Close socket */
- net->report_error= 1;
+ net->client_last_errno= (vio_was_interrupted(net->vio) ?
+ ER_NET_READ_INTERRUPTED :
+ ER_NET_READ_ERROR);
#ifdef MYSQL_SERVER
- net->last_errno= (vio_was_interrupted(net->vio) ? ER_NET_READ_INTERRUPTED :
- ER_NET_READ_ERROR);
+ my_error(net->client_last_errno, MYF(0));
#endif
goto end;
}
@@ -915,9 +911,9 @@ my_real_read(NET *net, size_t *complen)
#endif
}
len= packet_error;
- net->report_error= 1;
+ /* Not a NET error on the client. XXX: why? */
#ifdef MYSQL_SERVER
- net->last_errno=ER_NET_PACKETS_OUT_OF_ORDER;
+ my_error(ER_NET_PACKETS_OUT_OF_ORDER, MYF(0));
#endif
goto end;
}
@@ -972,15 +968,18 @@ end:
}
-/*
+/**
Read a packet from the client/server and return it without the internal
package header.
+
If the packet is the first packet of a multi-packet packet
(which is indicated by the length of the packet = 0xffffff) then
all sub packets are read and concatenated.
+
If the packet was compressed, its uncompressed and the length of the
uncompressed packet is returned.
+ @return
The function returns the length of the found packet or packet_error.
net->read_pos points to the read data.
*/
@@ -1101,9 +1100,9 @@ my_net_read(NET *net)
&complen))
{
net->error= 2; /* caller will close socket */
- net->report_error= 1;
+ net->client_last_errno= ER_NET_UNCOMPRESS_ERROR;
#ifdef MYSQL_SERVER
- net->last_errno=ER_NET_UNCOMPRESS_ERROR;
+ my_error(ER_NET_UNCOMPRESS_ERROR, MYF(0));
#endif
return packet_error;
}
diff --git a/sql/nt_servc.cc b/sql/nt_servc.cc
index a04f284a3de..7ff06d5bdf5 100644
--- a/sql/nt_servc.cc
+++ b/sql/nt_servc.cc
@@ -1,8 +1,12 @@
-/* ------------------------------------------------------------------------
- Windows NT Service class library
- Copyright Abandoned 1998 Irena Pancirov - Irnet Snc
- This file is public domain and comes with NO WARRANTY of any kind
- -------------------------------------------------------------------------- */
+/**
+ @file
+
+ @brief
+ Windows NT Service class library.
+
+ Copyright Abandoned 1998 Irena Pancirov - Irnet Snc
+ This file is public domain and comes with NO WARRANTY of any kind
+*/
#include <windows.h>
#include <process.h>
#include <stdio.h>
@@ -73,12 +77,13 @@ BOOL NTService::GetOS()
}
-/* ------------------------------------------------------------------------
- Init() Registers the main service thread with the service manager
+/**
+ Registers the main service thread with the service manager.
+
+ @param ServiceThread pointer to the main programs entry function
+ when the service is started
+*/
- ServiceThread - pointer to the main programs entry function
- when the service is started
- -------------------------------------------------------------------------- */
long NTService::Init(LPCSTR szInternName,void *ServiceThread)
{
@@ -99,13 +104,15 @@ long NTService::Init(LPCSTR szInternName,void *ServiceThread)
}
-/* ------------------------------------------------------------------------
- Install() - Installs the service with Service manager
+/**
+ Installs the service with Service manager.
+
nError values:
- 0 success
- 1 Can't open the Service manager
- 2 Failed to create service
- -------------------------------------------------------------------------- */
+ - 0 success
+ - 1 Can't open the Service manager
+ - 2 Failed to create service.
+*/
+
BOOL NTService::Install(int startType, LPCSTR szInternName,
LPCSTR szDisplayName,
@@ -155,14 +162,16 @@ BOOL NTService::Install(int startType, LPCSTR szInternName,
}
-/* ------------------------------------------------------------------------
- Remove() - Removes the service
+/**
+ Removes the service.
+
nError values:
- 0 success
- 1 Can't open the Service manager
- 2 Failed to locate service
- 3 Failed to delete service
- -------------------------------------------------------------------------- */
+ - 0 success
+ - 1 Can't open the Service manager
+ - 2 Failed to locate service
+ - 3 Failed to delete service.
+*/
+
BOOL NTService::Remove(LPCSTR szInternName)
{
@@ -199,10 +208,10 @@ BOOL NTService::Remove(LPCSTR szInternName)
return ret_value;
}
-/* ------------------------------------------------------------------------
- Stop() - this function should be called before the app. exits to stop
- the service
- -------------------------------------------------------------------------- */
+/**
+ this function should be called before the app. exits to stop
+ the service
+*/
void NTService::Stop(void)
{
SetStatus(SERVICE_STOP_PENDING,NO_ERROR, 0, 1, 60000);
@@ -210,10 +219,11 @@ void NTService::Stop(void)
SetStatus(SERVICE_STOPPED, NO_ERROR, 0, 1, 1000);
}
-/* ------------------------------------------------------------------------
- ServiceMain() - This is the function that is called from the
- service manager to start the service
- -------------------------------------------------------------------------- */
+/**
+ This is the function that is called from the
+ service manager to start the service.
+*/
+
void NTService::ServiceMain(DWORD argc, LPTSTR *argv)
{
@@ -264,9 +274,9 @@ error:
return;
}
-/* ------------------------------------------------------------------------
- StartService() - starts the appliaction thread
- -------------------------------------------------------------------------- */
+/**
+ starts the appliaction thread.
+*/
BOOL NTService::StartService()
{
diff --git a/sql/nt_servc.h b/sql/nt_servc.h
index a3c12569114..525f709388b 100644
--- a/sql/nt_servc.h
+++ b/sql/nt_servc.h
@@ -1,8 +1,12 @@
-/* ------------------------------------------------------------------------
- Windows NT Service class library
- Copyright Abandoned 1998 Irena Pancirov - Irnet Snc
- This file is public domain and comes with NO WARRANTY of any kind
- -------------------------------------------------------------------------- */
+/**
+ @file
+
+ @brief
+ Windows NT Service class library
+
+ Copyright Abandoned 1998 Irena Pancirov - Irnet Snc
+ This file is public domain and comes with NO WARRANTY of any kind
+*/
// main application thread
typedef void (*THREAD_FC)(void *);
@@ -13,7 +17,7 @@ class NTService
NTService();
~NTService();
- BOOL bOsNT; // true if OS is NT, false for Win95
+ BOOL bOsNT; ///< true if OS is NT, false for Win95
//install optinos
DWORD dwDesiredAccess;
DWORD dwServiceType;
diff --git a/sql/opt_range.cc b/sql/opt_range.cc
index 78861d7a301..b8bdb604eea 100644
--- a/sql/opt_range.cc
+++ b/sql/opt_range.cc
@@ -276,6 +276,9 @@ public:
Field *field;
uchar *min_value,*max_value; // Pointer to range
+ /*
+ eq_tree() requires that left == right == 0 if the type is MAYBE_KEY.
+ */
SEL_ARG *left,*right; /* R-B tree children */
SEL_ARG *next,*prev; /* Links for bi-directional interval list */
SEL_ARG *parent; /* R-B tree parent */
@@ -291,7 +294,7 @@ public:
SEL_ARG(Field *field, uint8 part, uchar *min_value, uchar *max_value,
uint8 min_flag, uint8 max_flag, uint8 maybe_flag);
SEL_ARG(enum Type type_arg)
- :min_flag(0),elements(1),use_count(1),left(0),next_key_part(0),
+ :min_flag(0),elements(1),use_count(1),left(0),right(0),next_key_part(0),
color(BLACK), type(type_arg)
{}
inline bool is_same(SEL_ARG *arg)
@@ -1271,7 +1274,7 @@ int QUICK_RANGE_SELECT::init_ror_merged_scan(bool reuse_handler)
the storage engine calls in question happen to never fail with the
existing storage engines.
*/
- thd->net.report_error= 1; /* purecov: inspected */
+ my_error(ER_OUT_OF_RESOURCES, MYF(0)); /* purecov: inspected */
/* Caller will free the memory */
goto failure; /* purecov: inspected */
}
@@ -2161,12 +2164,18 @@ int SQL_SELECT::test_quick_select(THD *thd, key_map keys_to_use,
keys_to_use.intersect(head->keys_in_use_for_query);
if (!keys_to_use.is_clear_all())
{
+#ifndef EMBEDDED_LIBRARY // Avoid compiler warning
+ uchar buff[STACK_BUFF_ALLOC];
+#endif
MEM_ROOT alloc;
SEL_TREE *tree= NULL;
KEY_PART *key_parts;
KEY *key_info;
PARAM param;
+ if (check_stack_overrun(thd, 2*STACK_MIN_SIZE, buff))
+ DBUG_RETURN(0); // Fatal error flag is set
+
/* set up parameter that is passed to all functions */
param.thd= thd;
param.baseflag= head->file->ha_table_flags();
@@ -3344,18 +3353,16 @@ static bool create_partition_index_description(PART_PRUNE_PARAM *ppar)
{
key_part->key= 0;
key_part->part= part;
- key_part->length= (uint16) (*field)->pack_length_in_rec();
- /*
- psergey-todo: check yet again if this is correct for tricky field types,
- e.g. see "Fix a fatal error in decimal key handling" in open_binary_frm()
- */
- key_part->store_length= (uint16) (*field)->pack_length();
+ key_part->store_length= key_part->length= (uint16) (*field)->key_length();
if ((*field)->real_maybe_null())
key_part->store_length+= HA_KEY_NULL_LENGTH;
if ((*field)->type() == MYSQL_TYPE_BLOB ||
(*field)->real_type() == MYSQL_TYPE_VARCHAR)
key_part->store_length+= HA_KEY_BLOB_LENGTH;
+ DBUG_PRINT("info", ("part %u length %u store_length %u", part,
+ key_part->length, key_part->store_length));
+
key_part->field= (*field);
key_part->image_type = Field::itRAW;
/*
@@ -5053,7 +5060,7 @@ static SEL_TREE *get_func_mm_tree(RANGE_OPT_PARAM *param, Item_func *cond_func,
if (inv)
{
- if (func->array->result_type() != ROW_RESULT)
+ if (func->array && func->array->result_type() != ROW_RESULT)
{
/*
We get here for conditions in form "t.key NOT IN (c1, c2, ...)",
@@ -5728,6 +5735,7 @@ get_mm_leaf(RANGE_OPT_PARAM *param, COND *conf_func, Field *field,
{
tree= new (alloc) SEL_ARG(field, 0, 0);
tree->type= SEL_ARG::IMPOSSIBLE;
+ goto end;
}
else
{
@@ -5736,8 +5744,32 @@ get_mm_leaf(RANGE_OPT_PARAM *param, COND *conf_func, Field *field,
for the cases like int_field > 999999999999999999999999 as well.
*/
tree= 0;
+ if (err == 3 && field->type() == FIELD_TYPE_DATE &&
+ (type == Item_func::GT_FUNC || type == Item_func::GE_FUNC ||
+ type == Item_func::LT_FUNC || type == Item_func::LE_FUNC) )
+ {
+ /*
+ We were saving DATETIME into a DATE column, the conversion went ok
+ but a non-zero time part was cut off.
+
+ In MySQL's SQL dialect, DATE and DATETIME are compared as datetime
+ values. Index over a DATE column uses DATE comparison. Changing
+ from one comparison to the other is possible:
+
+ datetime(date_col)< '2007-12-10 12:34:55' -> date_col<='2007-12-10'
+ datetime(date_col)<='2007-12-10 12:34:55' -> date_col<='2007-12-10'
+
+ datetime(date_col)> '2007-12-10 12:34:55' -> date_col>='2007-12-10'
+ datetime(date_col)>='2007-12-10 12:34:55' -> date_col>='2007-12-10'
+
+ but we'll need to convert '>' to '>=' and '<' to '<='. This will
+ be done together with other types at the end of this function
+ (grep for field_is_equal_to_item)
+ */
+ }
+ else
+ goto end;
}
- goto end;
}
if (err < 0)
{
@@ -7352,6 +7384,9 @@ check_quick_keys(PARAM *param, uint idx, SEL_ARG *key_tree,
tmp_max_flag= max_key_flag | key_tree->max_flag;
}
+ if (unlikely(param->thd->killed != 0))
+ return HA_POS_ERROR;
+
keynr=param->real_keynr[idx];
param->range_count++;
if (!tmp_min_flag && ! tmp_max_flag &&
diff --git a/sql/opt_range.h b/sql/opt_range.h
index dd219129167..4f5cce28bf2 100644
--- a/sql/opt_range.h
+++ b/sql/opt_range.h
@@ -24,9 +24,14 @@
#endif
typedef struct st_key_part {
- uint16 key,part, store_length, length;
+ uint16 key,part;
+ /* See KEY_PART_INFO for meaning of the next two: */
+ uint16 store_length, length;
uint8 null_bit;
- /* Keypart flags (0 if partition pruning is used) */
+ /*
+ Keypart flags (0 when this structure is used by partition pruning code
+ for fake partitioning index description)
+ */
uint8 flag;
Field *field;
Field::imagetype image_type;
diff --git a/sql/opt_sum.cc b/sql/opt_sum.cc
index 6836c53db4e..42d36756845 100644
--- a/sql/opt_sum.cc
+++ b/sql/opt_sum.cc
@@ -14,7 +14,9 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-/*
+/**
+ @file
+
Optimising of MIN(), MAX() and COUNT(*) queries without 'group by' clause
by replacing the aggregate expression with a constant.
@@ -22,6 +24,7 @@
types of queries are optimised (assuming the table handler supports
the required methods)
+ @verbatim
SELECT COUNT(*) FROM t1[,t2,t3,...]
SELECT MIN(b) FROM t1 WHERE a=const
SELECT MAX(c) FROM t1 WHERE a=const AND b=const
@@ -29,6 +32,7 @@
SELECT MIN(b) FROM t1 WHERE a=const AND b>const
SELECT MIN(b) FROM t1 WHERE a=const AND b BETWEEN const AND const
SELECT MAX(b) FROM t1 WHERE a=const AND b BETWEEN const AND const
+ @endverbatim
Instead of '<' one can use '<=', '>', '>=' and '=' as well.
Instead of 'a=const' the condition 'a IS NULL' can be used.
@@ -36,10 +40,11 @@
If all selected fields are replaced then we will also remove all
involved tables and return the answer without any join. Thus, the
following query will be replaced with a row of two constants:
+ @verbatim
SELECT MAX(b), MIN(d) FROM t1,t2
WHERE a=const AND b<const AND d>const
+ @endverbatim
(assuming a index for column d of table t2 is defined)
-
*/
#include "mysql_priv.h"
@@ -83,25 +88,25 @@ static ulonglong get_exact_record_count(TABLE_LIST *tables)
}
-/*
+/**
Substitutes constants for some COUNT(), MIN() and MAX() functions.
- SYNOPSIS
- opt_sum_query()
- tables list of leaves of join table tree
- all_fields All fields to be returned
- conds WHERE clause
+ @param tables list of leaves of join table tree
+ @param all_fields All fields to be returned
+ @param conds WHERE clause
- NOTE:
+ @note
This function is only called for queries with sum functions and no
GROUP BY part.
- RETURN VALUES
+ @retval
0 no errors
+ @retval
1 if all items were resolved
+ @retval
HA_ERR_KEY_NOT_FOUND on impossible conditions
- OR an error number from my_base.h HA_ERR_... if a deadlock or a lock
- wait timeout happens, for example
+ @retval
+ HA_ERR_... if a deadlock or a lock wait timeout happens, for example
*/
int opt_sum_query(TABLE_LIST *tables, List<Item> &all_fields,COND *conds)
@@ -170,6 +175,7 @@ int opt_sum_query(TABLE_LIST *tables, List<Item> &all_fields,COND *conds)
if(error)
{
tl->table->file->print_error(error, MYF(0));
+ tl->table->in_use->fatal_error();
return error;
}
count*= tl->table->file->stats.records;
@@ -295,14 +301,15 @@ int opt_sum_query(TABLE_LIST *tables, List<Item> &all_fields,COND *conds)
Check if case 1 from above holds. If it does, we should read
the skipped tuple.
*/
- if (ref.key_buff[prefix_len] == 1 &&
- /*
+ if (item_field->field->real_maybe_null() &&
+ ref.key_buff[prefix_len] == 1 &&
+ /*
Last keypart (i.e. the argument to MIN) is set to NULL by
find_key_for_maxmin only if all other keyparts are bound
to constants in a conjunction of equalities. Hence, we
can detect this by checking only if the last keypart is
NULL.
- */
+ */
(error == HA_ERR_KEY_NOT_FOUND ||
key_cmp_if_same(table, ref.key_buff, ref.key, prefix_len)))
{
@@ -417,6 +424,7 @@ int opt_sum_query(TABLE_LIST *tables, List<Item> &all_fields,COND *conds)
return HA_ERR_KEY_NOT_FOUND; // No rows matching WHERE
/* HA_ERR_LOCK_DEADLOCK or some other error */
table->file->print_error(error, MYF(0));
+ table->in_use->fatal_error();
return(error);
}
removed_tables|= table->map;
@@ -472,19 +480,18 @@ int opt_sum_query(TABLE_LIST *tables, List<Item> &all_fields,COND *conds)
}
-/*
- Test if the predicate compares a field with constants
+/**
+ Test if the predicate compares a field with constants.
- SYNOPSIS
- simple_pred()
- func_item Predicate item
- args out: Here we store the field followed by constants
- inv_order out: Is set to 1 if the predicate is of the form
- 'const op field'
+ @param func_item Predicate item
+ @param[out] args Here we store the field followed by constants
+ @param[out] inv_order Is set to 1 if the predicate is of the form
+ 'const op field'
- RETURN
+ @retval
0 func_item is a simple predicate: a field is compared with
- constants
+ constants
+ @retval
1 Otherwise
*/
@@ -556,34 +563,33 @@ bool simple_pred(Item_func *func_item, Item **args, bool *inv_order)
}
-/*
- Check whether a condition matches a key to get {MAX|MIN}(field):
-
- SYNOPSIS
- matching_cond()
- max_fl in: Set to 1 if we are optimising MAX()
- ref in/out: Reference to the structure we store the key value
- keyinfo in Reference to the key info
- field_part in: Pointer to the key part for the field
- cond in WHERE condition
- key_part_used in/out: Map of matchings parts
- range_fl in/out: Says whether including key will be used
- prefix_len out: Length of common key part for the range
- where MAX/MIN is searched for
+/**
+ Check whether a condition matches a key to get {MAX|MIN}(field):.
- DESCRIPTION
For the index specified by the keyinfo parameter, index that
contains field as its component (field_part), the function
checks whether the condition cond is a conjunction and all its
conjuncts referring to the columns of the same table as column
field are one of the following forms:
- f_i= const_i or const_i= f_i or f_i is null,
- where f_i is part of the index
+ where f_i is part of the index
- field {<|<=|>=|>|=} const or const {<|<=|>=|>|=} field
- field between const1 and const2
- RETURN
+ @param[in] max_fl Set to 1 if we are optimising MAX()
+ @param[in,out] ref Reference to the structure we store the key
+ value
+ @param[in] keyinfo Reference to the key info
+ @param[in] field_part Pointer to the key part for the field
+ @param[in] cond WHERE condition
+ @param[in,out] key_part_used Map of matchings parts
+ @param[in,out] range_fl Says whether including key will be used
+ @param[out] prefix_len Length of common key part for the range
+ where MAX/MIN is searched for
+
+ @retval
0 Index can't be used.
+ @retval
1 We can use index to get MIN/MAX value
*/
@@ -748,31 +754,21 @@ static bool matching_cond(bool max_fl, TABLE_REF *ref, KEY *keyinfo,
}
-/*
+/**
Check whether we can get value for {max|min}(field) by using a key.
- SYNOPSIS
- find_key_for_maxmin()
- max_fl in: 0 for MIN(field) / 1 for MAX(field)
- ref in/out Reference to the structure we store the key value
- field in: Field used inside MIN() / MAX()
- cond in: WHERE condition
- range_fl out: Bit flags for how to search if key is ok
- prefix_len out: Length of prefix for the search range
-
- DESCRIPTION
- If where condition is not a conjunction of 0 or more conjuct the
- function returns false, otherwise it checks whether there is an
- index including field as its k-th component/part such that:
-
- 1. for each previous component f_i there is one and only one conjunct
+ If where-condition is not a conjunction of 0 or more conjuct the
+ function returns false, otherwise it checks whether there is an
+ index including field as its k-th component/part such that:
+
+ -# for each previous component f_i there is one and only one conjunct
of the form: f_i= const_i or const_i= f_i or f_i is null
- 2. references to field occur only in conjucts of the form:
+ -# references to field occur only in conjucts of the form:
field {<|<=|>=|>|=} const or const {<|<=|>=|>|=} field or
field BETWEEN const1 AND const2
- 3. all references to the columns from the same table as column field
+ -# all references to the columns from the same table as column field
occur only in conjucts mentioned above.
- 4. each of k first components the index is not partial, i.e. is not
+ -# each of k first components the index is not partial, i.e. is not
defined on a fixed length proper prefix of the field.
If such an index exists the function through the ref parameter
@@ -780,17 +776,26 @@ static bool matching_cond(bool max_fl, TABLE_REF *ref, KEY *keyinfo,
the length of first (k-1) components of the key and flags saying
how to apply the key for the search max/min value.
(if we have a condition field = const, prefix_len contains the length
- of the whole search key)
+ of the whole search key)
+
+ @param[in] max_fl 0 for MIN(field) / 1 for MAX(field)
+ @param[in,out] ref Reference to the structure we store the key value
+ @param[in] field Field used inside MIN() / MAX()
+ @param[in] cond WHERE condition
+ @param[out] range_fl Bit flags for how to search if key is ok
+ @param[out] prefix_len Length of prefix for the search range
- NOTE
+ @note
This function may set table->key_read to 1, which must be reset after
index is used! (This can only happen when function returns 1)
- RETURN
+ @retval
0 Index can not be used to optimize MIN(field)/MAX(field)
- 1 Can use key to optimize MIN()/MAX()
- In this case ref, range_fl and prefix_len are updated
-*/
+ @retval
+ 1 Can use key to optimize MIN()/MAX().
+ In this case ref, range_fl and prefix_len are updated
+*/
+
static bool find_key_for_maxmin(bool max_fl, TABLE_REF *ref,
Field* field, COND *cond,
@@ -883,20 +888,19 @@ static bool find_key_for_maxmin(bool max_fl, TABLE_REF *ref,
}
-/*
- Check whether found key is in range specified by conditions
+/**
+ Check whether found key is in range specified by conditions.
- SYNOPSIS
- reckey_in_range()
- max_fl in: 0 for MIN(field) / 1 for MAX(field)
- ref in: Reference to the key value and info
- field in: Field used the MIN/MAX expression
- cond in: WHERE condition
- range_fl in: Says whether there is a condition to to be checked
- prefix_len in: Length of the constant part of the key
+ @param[in] max_fl 0 for MIN(field) / 1 for MAX(field)
+ @param[in] ref Reference to the key value and info
+ @param[in] field Field used the MIN/MAX expression
+ @param[in] cond WHERE condition
+ @param[in] range_fl Says whether there is a condition to to be checked
+ @param[in] prefix_len Length of the constant part of the key
- RETURN
+ @retval
0 ok
+ @retval
1 WHERE was not true for the found row
*/
@@ -911,16 +915,16 @@ static int reckey_in_range(bool max_fl, TABLE_REF *ref, Field* field,
}
-/*
- Check whether {MAX|MIN}(field) is in range specified by conditions
- SYNOPSIS
- maxmin_in_range()
- max_fl in: 0 for MIN(field) / 1 for MAX(field)
- field in: Field used the MIN/MAX expression
- cond in: WHERE condition
+/**
+ Check whether {MAX|MIN}(field) is in range specified by conditions.
- RETURN
+ @param[in] max_fl 0 for MIN(field) / 1 for MAX(field)
+ @param[in] field Field used the MIN/MAX expression
+ @param[in] cond WHERE condition
+
+ @retval
0 ok
+ @retval
1 WHERE was not true for the found row
*/
diff --git a/sql/parse_file.cc b/sql/parse_file.cc
index 19fb11ac0cc..1f0a45edd5e 100644
--- a/sql/parse_file.cc
+++ b/sql/parse_file.cc
@@ -13,7 +13,12 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-// Text .frm files management routines
+/**
+ @file
+
+ @brief
+ Text .frm files management routines
+*/
#include "mysql_priv.h"
#include <errno.h>
@@ -22,17 +27,16 @@
#include <my_dir.h>
-/*
- write string with escaping
+/**
+ Write string with escaping.
- SYNOPSIS
- write_escaped_string()
- file - IO_CACHE for record
- val_s - string for writing
+ @param file IO_CACHE for record
+ @param val_s string for writing
- RETURN
- FALSE - OK
- TRUE - error
+ @retval
+ FALSE OK
+ @retval
+ TRUE error
*/
static my_bool
@@ -77,21 +81,21 @@ write_escaped_string(IO_CACHE *file, LEX_STRING *val_s)
}
-/*
- write parameter value to IO_CACHE
+/**
+ Write parameter value to IO_CACHE.
- SYNOPSIS
- write_parameter()
- file pointer to IO_CACHE structure for writing
- base pointer to data structure
- parameter pointer to parameter descriptor
- old_version for returning back old version number value
+ @param file pointer to IO_CACHE structure for writing
+ @param base pointer to data structure
+ @param parameter pointer to parameter descriptor
+ @param old_version for returning back old version number value
- RETURN
- FALSE - OK
- TRUE - error
+ @retval
+ FALSE OK
+ @retval
+ TRUE error
*/
+
static my_bool
write_parameter(IO_CACHE *file, uchar* base, File_option *parameter,
ulonglong *old_version)
@@ -191,24 +195,24 @@ write_parameter(IO_CACHE *file, uchar* base, File_option *parameter,
}
-/*
- write new .frm
+/**
+ Write new .frm.
- SYNOPSIS
- sql_create_definition_file()
- dir directory where put .frm
- file .frm file name
- type .frm type string (VIEW, TABLE)
- base base address for parameter reading (structure like
- TABLE)
- parameters parameters description
- max_versions number of versions to save
+ @param dir directory where put .frm
+ @param file_name .frm file name
+ @param type .frm type string (VIEW, TABLE)
+ @param base base address for parameter reading (structure like
+ TABLE)
+ @param parameters parameters description
+ @param max_versions number of versions to save
- RETURN
- FALSE - OK
- TRUE - error
+ @retval
+ FALSE OK
+ @retval
+ TRUE error
*/
+
my_bool
sql_create_definition_file(const LEX_STRING *dir, const LEX_STRING *file_name,
const LEX_STRING *type,
@@ -345,21 +349,19 @@ err_w_file:
DBUG_RETURN(TRUE);
}
-/*
- Renames a frm file (including backups) in same schema
-
- SYNOPSIS
- rename_in_schema_file
- schema name of given schema
- old_name original file name
- new_name new file name
- revision revision number
- num_view_backups number of backups
+/**
+ Renames a frm file (including backups) in same schema.
- RETURN
- 0 - OK
- 1 - Error (only if renaming of frm failed)
+ @param schema name of given schema
+ @param old_name original file name
+ @param new_name new file name
+ @param revision revision number
+ @param num_view_backups number of backups
+ @retval
+ 0 OK
+ @retval
+ 1 Error (only if renaming of frm failed)
*/
my_bool rename_in_schema_file(const char *schema, const char *old_name,
const char *new_name, ulonglong revision,
@@ -401,21 +403,20 @@ my_bool rename_in_schema_file(const char *schema, const char *old_name,
return 0;
}
-/*
- Prepare frm to parse (read to memory)
+/**
+ Prepare frm to parse (read to memory).
+
+ @param file_name path & filename to .frm file
+ @param mem_root MEM_ROOT for buffer allocation
+ @param bad_format_errors send errors on bad content
- SYNOPSIS
- sql_parse_prepare()
- file_name - path & filename to .frm file
- mem_root - MEM_ROOT for buffer allocation
- bad_format_errors - send errors on bad content
+ @note
+ returned pointer + 1 will be type of .frm
- RETURN
+ @return
0 - error
+ @return
parser object
-
- NOTE
- returned pointer + 1 will be type of .frm
*/
File_parser *
@@ -506,22 +507,22 @@ frm_error:
}
-/*
- parse LEX_STRING
+/**
+ parse LEX_STRING.
- SYNOPSIS
- parse_string()
- ptr - pointer on string beginning
- end - pointer on symbol after parsed string end (still owned
- by buffer and can be accessed
- mem_root - MEM_ROOT for parameter allocation
- str - pointer on string, where results should be stored
+ @param ptr pointer on string beginning
+ @param end pointer on symbol after parsed string end (still owned
+ by buffer and can be accessed
+ @param mem_root MEM_ROOT for parameter allocation
+ @param str pointer on string, where results should be stored
- RETURN
- 0 - error
- # - pointer on symbol after string
+ @retval
+ 0 error
+ @retval
+ \# pointer on symbol after string
*/
+
static char *
parse_string(char *ptr, char *end, MEM_ROOT *mem_root, LEX_STRING *str)
{
@@ -539,18 +540,17 @@ parse_string(char *ptr, char *end, MEM_ROOT *mem_root, LEX_STRING *str)
}
-/*
- read escaped string from ptr to eol in already allocated str
+/**
+ read escaped string from ptr to eol in already allocated str.
- SYNOPSIS
- read_escaped_string()
- ptr - pointer on string beginning
- eol - pointer on character after end of string
- str - target string
+ @param ptr pointer on string beginning
+ @param eol pointer on character after end of string
+ @param str target string
- RETURN
- FALSE - OK
- TRUE - error
+ @retval
+ FALSE OK
+ @retval
+ TRUE error
*/
my_bool
@@ -598,22 +598,22 @@ read_escaped_string(char *ptr, char *eol, LEX_STRING *str)
}
-/*
- parse \n delimited escaped string
+/**
+ parse \\n delimited escaped string.
- SYNOPSIS
- parse_escaped_string()
- ptr - pointer on string beginning
- end - pointer on symbol after parsed string end (still owned
- by buffer and can be accessed
- mem_root - MEM_ROOT for parameter allocation
- str - pointer on string, where results should be stored
+ @param ptr pointer on string beginning
+ @param end pointer on symbol after parsed string end (still owned
+ by buffer and can be accessed
+ @param mem_root MEM_ROOT for parameter allocation
+ @param str pointer on string, where results should be stored
- RETURN
- 0 - error
- # - pointer on symbol after string
+ @retval
+ 0 error
+ @retval
+ \# pointer on symbol after string
*/
+
char *
parse_escaped_string(char *ptr, char *end, MEM_ROOT *mem_root, LEX_STRING *str)
{
@@ -628,20 +628,19 @@ parse_escaped_string(char *ptr, char *end, MEM_ROOT *mem_root, LEX_STRING *str)
}
-/*
- parse '' delimited escaped string
+/**
+ parse '' delimited escaped string.
- SYNOPSIS
- parse_quoted_escaped_string()
- ptr - pointer on string beginning
- end - pointer on symbol after parsed string end (still owned
- by buffer and can be accessed
- mem_root - MEM_ROOT for parameter allocation
- str - pointer on string, where results should be stored
+ @param ptr pointer on string beginning
+ @param end pointer on symbol after parsed string end (still owned
+ by buffer and can be accessed
+ @param mem_root MEM_ROOT for parameter allocation
+ @param str pointer on string, where results should be stored
- RETURN
- 0 - error
- # - pointer on symbol after string
+ @retval
+ 0 error
+ @retval
+ \# pointer on symbol after string
*/
static char *
@@ -673,18 +672,16 @@ parse_quoted_escaped_string(char *ptr, char *end,
}
-/*
+/**
Parser for FILE_OPTIONS_ULLLIST type value.
- SYNOPSIS
- get_file_options_ulllist()
- ptr [in/out] pointer to parameter
- end [in] end of the configuration
- line [in] pointer to the line begining
- base [in] base address for parameter writing (structure
- like TABLE)
- parameter [in] description
- mem_root [in] MEM_ROOT for parameters allocation
+ @param[in,out] ptr pointer to parameter
+ @param[in] end end of the configuration
+ @param[in] line pointer to the line begining
+ @param[in] base base address for parameter writing (structure
+ like TABLE)
+ @param[in] parameter description
+ @param[in] mem_root MEM_ROOT for parameters allocation
*/
bool get_file_options_ulllist(char *&ptr, char *end, char *line,
@@ -728,28 +725,28 @@ nlist_err:
}
-/*
- parse parameters
-
- SYNOPSIS
- File_parser::parse()
- base base address for parameter writing (structure like
- TABLE)
- mem_root MEM_ROOT for parameters allocation
- parameters parameters description
- required number of parameters in the above list. If the file
- contains more parameters than "required", they will
- be ignored. If the file contains less parameters
- then "required", non-existing parameters will
- remain their values.
- hook hook called for unknown keys
- hook_data some data specific for the hook
-
- RETURN
- FALSE - OK
- TRUE - error
+/**
+ parse parameters.
+
+ @param base base address for parameter writing (structure like
+ TABLE)
+ @param mem_root MEM_ROOT for parameters allocation
+ @param parameters parameters description
+ @param required number of required parameters in above list. If the file
+ contains more parameters than "required", they will
+ be ignored. If the file contains less parameters
+ then "required", non-existing parameters will
+ remain their values.
+ @param hook hook called for unknown keys
+ @param hook_data some data specific for the hook
+
+ @retval
+ FALSE OK
+ @retval
+ TRUE error
*/
+
my_bool
File_parser::parse(uchar* base, MEM_ROOT *mem_root,
struct File_option *parameters, uint required,
@@ -935,26 +932,25 @@ list_err:
}
-/*
- Dummy unknown key hook
+/**
+ Dummy unknown key hook.
- SYNOPSIS
- File_parser_dummy_hook::process_unknown_string()
- unknown_key [in/out] reference on the line with unknown
- parameter and the parsing point
- base [in] base address for parameter writing (structure like
- TABLE)
- mem_root [in] MEM_ROOT for parameters allocation
- end [in] the end of the configuration
+ @param[in,out] unknown_key reference on the line with unknown
+ parameter and the parsing point
+ @param[in] base base address for parameter writing
+ (structure like TABLE)
+ @param[in] mem_root MEM_ROOT for parameters allocation
+ @param[in] end the end of the configuration
- NOTE
+ @note
This hook used to catch no longer supported keys and process them for
backward compatibility, but it will not slow down processing of modern
format files.
This hook does nothing except debug output.
- RETURN
+ @retval
FALSE OK
+ @retval
TRUE Error
*/
diff --git a/sql/parse_file.h b/sql/parse_file.h
index 91700959681..30c902478b8 100644
--- a/sql/parse_file.h
+++ b/sql/parse_file.h
@@ -20,27 +20,27 @@
#define PARSE_FILE_TIMESTAMPLENGTH 19
enum file_opt_type {
- FILE_OPTIONS_STRING, /* String (LEX_STRING) */
- FILE_OPTIONS_ESTRING, /* Escaped string (LEX_STRING) */
- FILE_OPTIONS_ULONGLONG, /* ulonglong parameter (ulonglong) */
- FILE_OPTIONS_REV, /* Revision version number (ulonglong) */
- FILE_OPTIONS_TIMESTAMP, /* timestamp (LEX_STRING have to be
+ FILE_OPTIONS_STRING, /**< String (LEX_STRING) */
+ FILE_OPTIONS_ESTRING, /**< Escaped string (LEX_STRING) */
+ FILE_OPTIONS_ULONGLONG, /**< ulonglong parameter (ulonglong) */
+ FILE_OPTIONS_REV, /**< Revision version number (ulonglong) */
+ FILE_OPTIONS_TIMESTAMP, /**< timestamp (LEX_STRING have to be
allocated with length 20 (19+1) */
- FILE_OPTIONS_STRLIST, /* list of escaped strings
+ FILE_OPTIONS_STRLIST, /**< list of escaped strings
(List<LEX_STRING>) */
- FILE_OPTIONS_ULLLIST /* list of ulonglong values
+ FILE_OPTIONS_ULLLIST /**< list of ulonglong values
(List<ulonglong>) */
};
struct File_option
{
- LEX_STRING name; /* Name of the option */
- int offset; /* offset to base address of value */
- file_opt_type type; /* Option type */
+ LEX_STRING name; /**< Name of the option */
+ int offset; /**< offset to base address of value */
+ file_opt_type type; /**< Option type */
};
-/*
+/**
This hook used to catch no longer supported keys and process them for
backward compatibility.
*/
@@ -55,7 +55,7 @@ public:
};
-/* Dummy hook for parsers which do not need hook for unknown keys */
+/** Dummy hook for parsers which do not need hook for unknown keys. */
class File_parser_dummy_hook: public Unknown_key_hook
{
diff --git a/sql/partition_info.cc b/sql/partition_info.cc
index 86d50cdf524..3b580422da1 100644
--- a/sql/partition_info.cc
+++ b/sql/partition_info.cc
@@ -524,6 +524,13 @@ bool partition_info::check_range_constants()
current_largest= part_range_value;
range_int_array[i]= part_range_value;
}
+ else if (defined_max_value &&
+ current_largest == part_range_value &&
+ part_range_value == LONGLONG_MAX &&
+ i == (no_parts - 1))
+ {
+ range_int_array[i]= part_range_value;
+ }
else
{
my_error(ER_RANGE_NOT_INCREASING_ERROR, MYF(0));
diff --git a/sql/procedure.cc b/sql/procedure.cc
index bbfabc46608..c993ba976ac 100644
--- a/sql/procedure.cc
+++ b/sql/procedure.cc
@@ -68,10 +68,13 @@ my_decimal *Item_proc_real::val_decimal(my_decimal *decimal_value)
}
-/*****************************************************************************
-** Setup handling of procedure
-** Return 0 if everything is ok
-*****************************************************************************/
+/**
+ Setup handling of procedure.
+
+ @return
+ Return 0 if everything is ok
+*/
+
Procedure *
setup_procedure(THD *thd,ORDER *param,select_result *result,
diff --git a/sql/procedure.h b/sql/procedure.h
index 6a731766046..4578fcb87f1 100644
--- a/sql/procedure.h
+++ b/sql/procedure.h
@@ -20,8 +20,8 @@
#pragma interface /* gcc class implementation */
#endif
-#define PROC_NO_SORT 1 /* Bits in flags */
-#define PROC_GROUP 2 /* proc must have group */
+#define PROC_NO_SORT 1 /**< Bits in flags */
+#define PROC_GROUP 2 /**< proc must have group */
/* Procedure items used by procedures to store values for send_fields */
diff --git a/sql/protocol.cc b/sql/protocol.cc
index 9d473912ba3..9e1b3c65538 100644
--- a/sql/protocol.cc
+++ b/sql/protocol.cc
@@ -13,8 +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 */
-/*
- Low level functions for storing data to be send to the MySQL client
+/**
+ @file
+
+ Low level functions for storing data to be send to the MySQL client.
The actual communction is handled by the net_xxx functions in net_serv.cc
*/
@@ -23,13 +25,16 @@
#endif
#include "mysql_priv.h"
-#include "sp_rcontext.h"
#include <stdarg.h>
static const unsigned int PACKET_BUFFER_EXTRA_ALLOC= 1024;
+/* Declared non-static only because of the embedded library. */
void net_send_error_packet(THD *thd, uint sql_errno, const char *err);
+void net_send_ok(THD *, uint, uint, ha_rows, ulonglong, const char *);
+void net_send_eof(THD *thd, uint server_status, uint total_warn_count);
#ifndef EMBEDDED_LIBRARY
-static void write_eof_packet(THD *thd, NET *net);
+static void write_eof_packet(THD *thd, NET *net,
+ uint server_status, uint total_warn_count);
#endif
#ifndef EMBEDDED_LIBRARY
@@ -53,231 +58,81 @@ bool Protocol_binary::net_store_data(const uchar *from, size_t length)
}
-/*
- Send a error string to client
+/**
+ Send a error string to client.
+
+ Design note:
- Design note:
+ net_printf_error and net_send_error are low-level functions
+ that shall be used only when a new connection is being
+ established or at server startup.
- net_printf_error and net_send_error are low-level functions
- that shall be used only when a new connection is being
- established or at server startup.
- For SIGNAL/RESIGNAL and GET DIAGNOSTICS functionality it's
- critical that every error that can be intercepted is issued in one
- place only, my_message_sql.
+ For SIGNAL/RESIGNAL and GET DIAGNOSTICS functionality it's
+ critical that every error that can be intercepted is issued in one
+ place only, my_message_sql.
*/
void net_send_error(THD *thd, uint sql_errno, const char *err)
{
- NET *net= &thd->net;
- bool generate_warning= thd->killed != THD::KILL_CONNECTION;
DBUG_ENTER("net_send_error");
- DBUG_PRINT("enter",("sql_errno: %d err: %s", sql_errno,
- err ? err : net->last_error[0] ?
- net->last_error : "NULL"));
DBUG_ASSERT(!thd->spcont);
+ DBUG_ASSERT(sql_errno);
+ DBUG_ASSERT(err && err[0]);
- if (net && net->no_send_error)
- {
- thd->clear_error();
- thd->is_fatal_error= 0; // Error message is given
- DBUG_PRINT("info", ("sending error messages prohibited"));
- DBUG_VOID_RETURN;
- }
+ DBUG_PRINT("enter",("sql_errno: %d err: %s", sql_errno, err));
- thd->query_error= 1; // needed to catch query errors during replication
- if (!err)
- {
- if (sql_errno)
- err=ER(sql_errno);
- else
- {
- if ((err=net->last_error)[0])
- {
- sql_errno=net->last_errno;
- generate_warning= 0; // This warning has already been given
- }
- else
- {
- sql_errno=ER_UNKNOWN_ERROR;
- err=ER(sql_errno); /* purecov: inspected */
- }
- }
- }
+ /*
+ It's one case when we can push an error even though there
+ is an OK or EOF already.
+ */
+ thd->main_da.can_overwrite_status= TRUE;
- if (generate_warning)
- {
- /* Error that we have not got with my_error() */
- push_warning(thd, MYSQL_ERROR::WARN_LEVEL_ERROR, sql_errno, err);
- }
+ /* Abort multi-result sets */
+ thd->server_status&= ~SERVER_MORE_RESULTS_EXISTS;
net_send_error_packet(thd, sql_errno, err);
- thd->is_fatal_error= 0; // Error message is given
- thd->net.report_error= 0;
+ thd->main_da.can_overwrite_status= FALSE;
- /* Abort multi-result sets */
- thd->server_status&= ~SERVER_MORE_RESULTS_EXISTS;
DBUG_VOID_RETURN;
}
-/*
- Write error package and flush to client
- It's a little too low level, but I don't want to use another buffer for
- this
-
- Design note:
-
- net_printf_error and net_send_error are low-level functions
- that shall be used only when a new connection is being
- established or at server startup.
- For SIGNAL/RESIGNAL and GET DIAGNOSTICS functionality it's
- critical that every error that can be intercepted is issued in one
- place only, my_message_sql.
-*/
-
-void
-net_printf_error(THD *thd, uint errcode, ...)
-{
- va_list args;
- uint length,offset;
- const char *format;
-#ifndef EMBEDDED_LIBRARY
- const char *text_pos;
- int head_length= NET_HEADER_SIZE;
-#else
- char text_pos[1024];
-#endif
- NET *net= &thd->net;
-
- DBUG_ENTER("net_printf_error");
- DBUG_PRINT("enter",("message: %u",errcode));
-
- DBUG_ASSERT(!thd->spcont);
-
- if (net && net->no_send_error)
- {
- thd->clear_error();
- thd->is_fatal_error= 0; // Error message is given
- DBUG_PRINT("info", ("sending error messages prohibited"));
- DBUG_VOID_RETURN;
- }
-
- thd->query_error= 1; // needed to catch query errors during replication
-#ifndef EMBEDDED_LIBRARY
- query_cache_abort(net); // Safety
-#endif
- va_start(args,errcode);
- /*
- The following is needed to make net_printf_error() work with 0 argument
- for errorcode and use the argument after that as the format string. This
- is useful for rare errors that are not worth the hassle to put in
- errmsg.sys, but at the same time, the message is not fixed text
- */
- if (errcode)
- format= ER(errcode);
- else
- {
- format=va_arg(args,char*);
- errcode= ER_UNKNOWN_ERROR;
- }
- offset= (net->return_errno ?
- ((thd->client_capabilities & CLIENT_PROTOCOL_41) ?
- 2+SQLSTATE_LENGTH+1 : 2) : 0);
-#ifndef EMBEDDED_LIBRARY
- text_pos=(char*) net->buff + head_length + offset + 1;
- length= (uint) ((char*)net->buff_end - text_pos);
-#else
- length=sizeof(text_pos)-1;
-#endif
- length=my_vsnprintf(my_const_cast(char*) (text_pos),
- min(length, sizeof(net->last_error)),
- format,args);
- va_end(args);
-
- /* Replication slave relies on net->last_* to see if there was error */
- net->last_errno= errcode;
- strmake(net->last_error, text_pos, sizeof(net->last_error)-1);
+/**
+ Return ok to the client.
-#ifndef EMBEDDED_LIBRARY
- if (net->vio == 0)
- {
- if (thd->bootstrap)
- {
- /*
- In bootstrap it's ok to print on stderr
- This may also happen when we get an error from a slave thread
- */
- fprintf(stderr,"ERROR: %d %s\n",errcode,text_pos);
- thd->fatal_error();
- }
- DBUG_VOID_RETURN;
- }
+ The ok packet has the following structure:
- int3store(net->buff,length+1+offset);
- net->buff[3]= (net->compress) ? 0 : (uchar) (net->pkt_nr++);
- net->buff[head_length]=(uchar) 255; // Error package
- if (offset)
- {
- uchar *pos= net->buff+head_length+1;
- int2store(pos, errcode);
- if (thd->client_capabilities & CLIENT_PROTOCOL_41)
- {
- pos[2]= '#'; /* To make the protocol backward compatible */
- memcpy(pos+3, mysql_errno_to_sqlstate(errcode), SQLSTATE_LENGTH);
- }
- }
- VOID(net_real_write(net, net->buff, length+head_length+1+offset));
-#else
- net->last_errno= errcode;
- strmake(net->last_error, text_pos, length);
- strmake(net->sqlstate, mysql_errno_to_sqlstate(errcode), SQLSTATE_LENGTH);
-#endif
- if (thd->killed != THD::KILL_CONNECTION)
- push_warning(thd, MYSQL_ERROR::WARN_LEVEL_ERROR, errcode,
- text_pos ? text_pos : ER(errcode));
- thd->is_fatal_error=0; // Error message is given
- DBUG_VOID_RETURN;
-}
+ - 0 : Marker (1 byte)
+ - affected_rows : Stored in 1-9 bytes
+ - id : Stored in 1-9 bytes
+ - server_status : Copy of thd->server_status; Can be used by client
+ to check if we are inside an transaction.
+ New in 4.0 protocol
+ - warning_count : Stored in 2 bytes; New in 4.1 protocol
+ - message : Stored as packed length (1-9 bytes) + message.
+ Is not stored if no message.
-/*
- Return ok to the client.
+ If net->no_send_ok return without sending packet.
- SYNOPSIS
- send_ok()
- thd Thread handler
- affected_rows Number of rows changed by statement
- id Auto_increment id for first row (if used)
- message Message to send to the client (Used by mysql_status)
-
- DESCRIPTION
- The ok packet has the following structure
-
- 0 Marker (1 byte)
- affected_rows Stored in 1-9 bytes
- id Stored in 1-9 bytes
- server_status Copy of thd->server_status; Can be used by client
- to check if we are inside an transaction
- New in 4.0 protocol
- warning_count Stored in 2 bytes; New in 4.1 protocol
- message Stored as packed length (1-9 bytes) + message
- Is not stored if no message
-
- If net->no_send_ok return without sending packet
-*/
+ @param thd Thread handler
+ @param affected_rows Number of rows changed by statement
+ @param id Auto_increment id for first row (if used)
+ @param message Message to send to the client (Used by mysql_status)
+*/
#ifndef EMBEDDED_LIBRARY
void
-send_ok(THD *thd, ha_rows affected_rows, ulonglong id, const char *message)
+net_send_ok(THD *thd,
+ uint server_status, uint total_warn_count,
+ ha_rows affected_rows, ulonglong id, const char *message)
{
NET *net= &thd->net;
uchar buff[MYSQL_ERRMSG_SIZE+10],*pos;
DBUG_ENTER("send_ok");
- if (net->no_send_ok || !net->vio) // hack for re-parsing queries
+ if (! net->vio) // hack for re-parsing queries
{
- DBUG_PRINT("info", ("no send ok: %s, vio present: %s",
- (net->no_send_ok ? "YES" : "NO"),
- (net->vio ? "YES" : "NO")));
+ DBUG_PRINT("info", ("vio present: NO"));
DBUG_VOID_RETURN;
}
@@ -290,28 +145,29 @@ send_ok(THD *thd, ha_rows affected_rows, ulonglong id, const char *message)
("affected_rows: %lu id: %lu status: %u warning_count: %u",
(ulong) affected_rows,
(ulong) id,
- (uint) (thd->server_status & 0xffff),
- (uint) thd->total_warn_count));
- int2store(pos,thd->server_status);
+ (uint) (server_status & 0xffff),
+ (uint) total_warn_count));
+ int2store(pos, server_status);
pos+=2;
/* We can only return up to 65535 warnings in two bytes */
- uint tmp= min(thd->total_warn_count, 65535);
+ uint tmp= min(total_warn_count, 65535);
int2store(pos, tmp);
pos+= 2;
}
else if (net->return_status) // For 4.0 protocol
{
- int2store(pos,thd->server_status);
+ int2store(pos, server_status);
pos+=2;
}
- if (message)
+ thd->main_da.can_overwrite_status= TRUE;
+
+ if (message && message[0])
pos= net_store_data(pos, (uchar*) message, strlen(message));
VOID(my_net_write(net, buff, (size_t) (pos-buff)));
VOID(net_flush(net));
- /* We can't anymore send an error to the client */
- thd->net.report_error= 0;
- thd->net.no_send_error= 1;
+
+ thd->main_da.can_overwrite_status= FALSE;
DBUG_PRINT("info", ("OK sent, so no more error sending allowed"));
DBUG_VOID_RETURN;
@@ -319,50 +175,51 @@ send_ok(THD *thd, ha_rows affected_rows, ulonglong id, const char *message)
static uchar eof_buff[1]= { (uchar) 254 }; /* Marker for end of fields */
-/*
- Send eof (= end of result set) to the client
+/**
+ Send eof (= end of result set) to the client.
- SYNOPSIS
- send_eof()
- thd Thread handler
- no_flush Set to 1 if there will be more data to the client,
- like in send_fields().
+ The eof packet has the following structure:
- DESCRIPTION
- The eof packet has the following structure
+ - 254 : Marker (1 byte)
+ - warning_count : Stored in 2 bytes; New in 4.1 protocol
+ - status_flag : Stored in 2 bytes;
+ For flags like SERVER_MORE_RESULTS_EXISTS.
- 254 Marker (1 byte)
- warning_count Stored in 2 bytes; New in 4.1 protocol
- status_flag Stored in 2 bytes;
- For flags like SERVER_MORE_RESULTS_EXISTS
+ Note that the warning count will not be sent if 'no_flush' is set as
+ we don't want to report the warning count until all data is sent to the
+ client.
- Note that the warning count will not be sent if 'no_flush' is set as
- we don't want to report the warning count until all data is sent to the
- client.
+ @param thd Thread handler
+ @param no_flush Set to 1 if there will be more data to the client,
+ like in send_fields().
*/
void
-send_eof(THD *thd)
+net_send_eof(THD *thd, uint server_status, uint total_warn_count)
{
NET *net= &thd->net;
- DBUG_ENTER("send_eof");
+ DBUG_ENTER("net_send_eof");
+ /* Set to TRUE if no active vio, to work well in case of --init-file */
if (net->vio != 0)
{
- write_eof_packet(thd, net);
+ thd->main_da.can_overwrite_status= TRUE;
+ write_eof_packet(thd, net, server_status, total_warn_count);
VOID(net_flush(net));
- thd->net.no_send_error= 1;
+ thd->main_da.can_overwrite_status= FALSE;
DBUG_PRINT("info", ("EOF sent, so no more error sending allowed"));
}
DBUG_VOID_RETURN;
}
-/*
+/**
Format EOF packet according to the current protocol and
write it to the network output buffer.
*/
-static void write_eof_packet(THD *thd, NET *net)
+static void write_eof_packet(THD *thd, NET *net,
+ uint server_status,
+ uint total_warn_count)
{
if (thd->client_capabilities & CLIENT_PROTOCOL_41)
{
@@ -371,7 +228,7 @@ static void write_eof_packet(THD *thd, NET *net)
Don't send warn count during SP execution, as the warn_list
is cleared between substatements, and mysqltest gets confused
*/
- uint tmp= (thd->spcont ? 0 : min(thd->total_warn_count, 65535));
+ uint tmp= min(total_warn_count, 65535);
buff[0]= 254;
int2store(buff+1, tmp);
/*
@@ -380,22 +237,22 @@ static void write_eof_packet(THD *thd, NET *net)
other queries (see the if test in dispatch_command / COM_QUERY)
*/
if (thd->is_fatal_error)
- thd->server_status&= ~SERVER_MORE_RESULTS_EXISTS;
- int2store(buff+3, thd->server_status);
+ server_status&= ~SERVER_MORE_RESULTS_EXISTS;
+ int2store(buff + 3, server_status);
VOID(my_net_write(net, buff, 5));
}
else
VOID(my_net_write(net, eof_buff, 1));
}
-/*
- Please client to send scrambled_password in old format.
- SYNOPSYS
- send_old_password_request()
- thd thread handle
+/**
+ Please client to send scrambled_password in old format.
- RETURN VALUE
+ @param thd thread handle
+
+ @retval
0 ok
+ @retval
!0 error
*/
@@ -410,7 +267,10 @@ void net_send_error_packet(THD *thd, uint sql_errno, const char *err)
{
NET *net= &thd->net;
uint length;
- uchar buff[MYSQL_ERRMSG_SIZE+2], *pos;
+ /*
+ buff[]: sql_errno:2 + ('#':1 + SQLSTATE_LENGTH:5) + MYSQL_ERRMSG_SIZE:512
+ */
+ uchar buff[2+1+SQLSTATE_LENGTH+MYSQL_ERRMSG_SIZE], *pos;
DBUG_ENTER("send_error_packet");
@@ -450,14 +310,15 @@ void net_send_error_packet(THD *thd, uint sql_errno, const char *err)
#endif /* EMBEDDED_LIBRARY */
-/*
+/**
Faster net_store_length when we know that length is less than 65536.
We keep a separate version for that range because it's widely used in
libmysql.
+
uint is used as agrument type because of MySQL type conventions:
- uint for 0..65536
- ulong for 0..4294967296
- ulonglong for bigger numbers.
+ - uint for 0..65536
+ - ulong for 0..4294967296
+ - ulonglong for bigger numbers.
*/
static uchar *net_store_length_fast(uchar *packet, uint length)
@@ -472,6 +333,96 @@ static uchar *net_store_length_fast(uchar *packet, uint length)
return packet+2;
}
+/**
+ Send the status of the current statement execution over network.
+
+ @param thd in fact, carries two parameters, NET for the transport and
+ Diagnostics_area as the source of status information.
+
+ In MySQL, there are two types of SQL statements: those that return
+ a result set and those that return status information only.
+
+ If a statement returns a result set, it consists of 3 parts:
+ - result set meta-data
+ - variable number of result set rows (can be 0)
+ - followed and terminated by EOF or ERROR packet
+
+ Once the client has seen the meta-data information, it always
+ expects an EOF or ERROR to terminate the result set. If ERROR is
+ received, the result set rows are normally discarded (this is up
+ to the client implementation, libmysql at least does discard them).
+ EOF, on the contrary, means "successfully evaluated the entire
+ result set". Since we don't know how many rows belong to a result
+ set until it's evaluated, EOF/ERROR is the indicator of the end
+ of the row stream. Note, that we can not buffer result set rows
+ on the server -- there may be an arbitrary number of rows. But
+ we do buffer the last packet (EOF/ERROR) in the Diagnostics_area and
+ delay sending it till the very end of execution (here), to be able to
+ change EOF to an ERROR if commit failed or some other error occurred
+ during the last cleanup steps taken after execution.
+
+ A statement that does not return a result set doesn't send result
+ set meta-data either. Instead it returns one of:
+ - OK packet
+ - ERROR packet.
+ Similarly to the EOF/ERROR of the previous statement type, OK/ERROR
+ packet is "buffered" in the diagnostics area and sent to the client
+ in the end of statement.
+
+ @pre The diagnostics area is assigned or disabled. It can not be empty
+ -- we assume that every SQL statement or COM_* command
+ generates OK, ERROR, or EOF status.
+
+ @post The status information is encoded to protocol format and sent to the
+ client.
+
+ @return We conventionally return void, since the only type of error
+ that can happen here is a NET (transport) error, and that one
+ will become visible when we attempt to read from the NET the
+ next command.
+ Diagnostics_area::is_sent is set for debugging purposes only.
+*/
+
+void net_end_statement(THD *thd)
+{
+ DBUG_ASSERT(! thd->main_da.is_sent);
+
+ /* Can not be true, but do not take chances in production. */
+ if (thd->main_da.is_sent)
+ return;
+
+ switch (thd->main_da.status()) {
+ case Diagnostics_area::DA_ERROR:
+ /* The query failed, send error to log and abort bootstrap. */
+ net_send_error(thd,
+ thd->main_da.sql_errno(),
+ thd->main_da.message());
+ break;
+ case Diagnostics_area::DA_EOF:
+ net_send_eof(thd,
+ thd->main_da.server_status(),
+ thd->main_da.total_warn_count());
+ break;
+ case Diagnostics_area::DA_OK:
+ net_send_ok(thd,
+ thd->main_da.server_status(),
+ thd->main_da.total_warn_count(),
+ thd->main_da.affected_rows(),
+ thd->main_da.last_insert_id(),
+ thd->main_da.message());
+ break;
+ case Diagnostics_area::DA_DISABLED:
+ break;
+ case Diagnostics_area::DA_EMPTY:
+ default:
+ DBUG_ASSERT(0);
+ net_send_ok(thd, thd->server_status, thd->total_warn_count,
+ 0, 0, NULL);
+ break;
+ }
+ thd->main_da.is_sent= TRUE;
+}
+
/****************************************************************************
Functions used by the protocol functions (like send_ok) to store strings
@@ -520,6 +471,17 @@ void Protocol::init(THD *thd_arg)
#endif
}
+/**
+ Finish the result set with EOF packet, as is expected by the client,
+ if there is an error evaluating the next row and a continue handler
+ for the error.
+*/
+
+void Protocol::end_partial_result_set(THD *thd)
+{
+ net_send_eof(thd, thd->server_status, 0 /* no warnings, we're inside SP */);
+}
+
bool Protocol::flush()
{
@@ -530,27 +492,26 @@ bool Protocol::flush()
#endif
}
-/*
+#ifndef EMBEDDED_LIBRARY
+
+/**
Send name and type of result to client.
- SYNOPSIS
- send_fields()
- THD Thread data object
- list List of items to send to client
- flag Bit mask with the following functions:
- 1 send number of rows
- 2 send default values
- 4 don't write eof packet
+ Sum fields has table name empty and field_name.
- DESCRIPTION
- Sum fields has table name empty and field_name.
+ @param THD Thread data object
+ @param list List of items to send to client
+ @param flag Bit mask with the following functions:
+ - 1 send number of rows
+ - 2 send default values
+ - 4 don't write eof packet
- RETURN VALUES
+ @retval
0 ok
- 1 Error (Note that in this case the error is not sent to the client)
+ @retval
+ 1 Error (Note that in this case the error is not sent to the
+ client)
*/
-
-#ifndef EMBEDDED_LIBRARY
bool Protocol::send_fields(List<Item> *list, uint flags)
{
List_iterator_fast<Item> it(*list);
@@ -685,7 +646,14 @@ bool Protocol::send_fields(List<Item> *list, uint flags)
}
if (flags & SEND_EOF)
- write_eof_packet(thd, &thd->net);
+ {
+ /*
+ Mark the end of meta-data result set, and store thd->server_status,
+ to show that there is no cursor.
+ Send no warning information, as it will be sent at statement end.
+ */
+ write_eof_packet(thd, &thd->net, thd->server_status, thd->total_warn_count);
+ }
DBUG_RETURN(prepare_for_send(list));
err:
@@ -704,18 +672,17 @@ bool Protocol::write()
#endif /* EMBEDDED_LIBRARY */
-/*
- Send \0 end terminated string
+/**
+ Send \\0 end terminated string.
- SYNOPSIS
- store()
- from NullS or \0 terminated string
+ @param from NullS or \\0 terminated string
- NOTES
+ @note
In most cases one should use store(from, length) instead of this function
- RETURN VALUES
+ @retval
0 ok
+ @retval
1 error
*/
@@ -728,8 +695,8 @@ bool Protocol::store(const char *from, CHARSET_INFO *cs)
}
-/*
- Send a set of strings as one long string with ',' in between
+/**
+ Send a set of strings as one long string with ',' in between.
*/
bool Protocol::store(I_List<i_string>* str_list)
@@ -781,7 +748,7 @@ bool Protocol_text::store_null()
#endif
-/*
+/**
Auxilary function to convert string to the given character set
and store in network buffer.
*/
@@ -827,6 +794,7 @@ bool Protocol_text::store(const char *from, size_t length,
field_types[field_pos] == MYSQL_TYPE_DECIMAL ||
field_types[field_pos] == MYSQL_TYPE_BIT ||
field_types[field_pos] == MYSQL_TYPE_NEWDECIMAL ||
+ field_types[field_pos] == MYSQL_TYPE_NEWDATE ||
(field_types[field_pos] >= MYSQL_TYPE_ENUM &&
field_types[field_pos] <= MYSQL_TYPE_GEOMETRY));
field_pos++;
@@ -957,13 +925,12 @@ bool Protocol_text::store(Field *field)
}
-/*
- TODO:
- Second_part format ("%06") needs to change when
- we support 0-6 decimals for time.
+/**
+ @todo
+ Second_part format ("%06") needs to change when
+ we support 0-6 decimals for time.
*/
-
bool Protocol_text::store(MYSQL_TIME *tm)
{
#ifndef DBUG_OFF
@@ -1001,10 +968,10 @@ bool Protocol_text::store_date(MYSQL_TIME *tm)
}
-/*
- TODO:
- Second_part format ("%06") needs to change when
- we support 0-6 decimals for time.
+/**
+ @todo
+ Second_part format ("%06") needs to change when
+ we support 0-6 decimals for time.
*/
bool Protocol_text::store_time(MYSQL_TIME *tm)
diff --git a/sql/protocol.h b/sql/protocol.h
index 46a2b6d36b6..a4770e9b6e3 100644
--- a/sql/protocol.h
+++ b/sql/protocol.h
@@ -75,6 +75,7 @@ public:
return 0;
}
virtual bool flush();
+ virtual void end_partial_result_set(THD *thd);
virtual void prepare_for_resend()=0;
virtual bool store_null()=0;
@@ -110,7 +111,7 @@ public:
};
-/* Class used for the old (MySQL 4.0 protocol) */
+/** Class used for the old (MySQL 4.0 protocol). */
class Protocol_text :public Protocol
{
@@ -172,11 +173,8 @@ public:
};
void send_warning(THD *thd, uint sql_errno, const char *err=0);
-void net_printf_error(THD *thd, uint sql_errno, ...);
void net_send_error(THD *thd, uint sql_errno=0, const char *err=0);
-void send_ok(THD *thd, ha_rows affected_rows=0L, ulonglong id=0L,
- const char *info=0);
-void send_eof(THD *thd);
+void net_end_statement(THD *thd);
bool send_old_password_request(THD *thd);
uchar *net_store_data(uchar *to,const uchar *from, size_t length);
uchar *net_store_data(uchar *to,int32 from);
diff --git a/sql/records.cc b/sql/records.cc
index 49c209cd7e6..cfcaf9df8e6 100644
--- a/sql/records.cc
+++ b/sql/records.cc
@@ -14,7 +14,12 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-/* Functions for easy reading of records, possible through a cache */
+/**
+ @file
+
+ @brief
+ Functions for easy reading of records, possible through a cache
+*/
#include "mysql_priv.h"
@@ -31,30 +36,26 @@ static int rr_index_first(READ_RECORD *info);
static int rr_index(READ_RECORD *info);
-/*
- Initialize READ_RECORD structure to perform full index scan
-
- SYNOPSIS
- init_read_record_idx()
- info READ_RECORD structure to initialize.
- thd Thread handle
- table Table to be accessed
- print_error If true, call table->file->print_error() if an error
- occurs (except for end-of-records error)
- idx index to scan
-
- DESCRIPTION
- Initialize READ_RECORD structure to perform full index scan (in forward
- direction) using read_record.read_record() interface.
-
+/**
+ Initialize READ_RECORD structure to perform full index scan (in forward
+ direction) using read_record.read_record() interface.
+
This function has been added at late stage and is used only by
UPDATE/DELETE. Other statements perform index scans using
join_read_first/next functions.
+
+ @param info READ_RECORD structure to initialize.
+ @param thd Thread handle
+ @param table Table to be accessed
+ @param print_error If true, call table->file->print_error() if an error
+ occurs (except for end-of-records error)
+ @param idx index to scan
*/
void init_read_record_idx(READ_RECORD *info, THD *thd, TABLE *table,
bool print_error, uint idx)
{
+ empty_record(table);
bzero((char*) info,sizeof(*info));
info->table= table;
info->file= table->file;
@@ -161,6 +162,7 @@ void init_read_record(READ_RECORD *info,THD *thd, TABLE *table,
}
else
{
+ empty_record(table);
info->record= table->record[0];
info->ref_length= table->file->ref_length;
}
@@ -284,7 +286,7 @@ static int rr_handle_error(READ_RECORD *info, int error)
}
- /* Read a record from head-database */
+/** Read a record from head-database. */
static int rr_quick(READ_RECORD *info)
{
@@ -306,20 +308,19 @@ static int rr_quick(READ_RECORD *info)
}
-/*
- Reads first row in an index scan
+/**
+ Reads first row in an index scan.
- SYNOPSIS
- rr_index_first()
- info Scan info
-
- RETURN
+ @param info Scan info
+
+ @retval
0 Ok
- -1 End of records
- 1 Error
+ @retval
+ -1 End of records
+ @retval
+ 1 Error
*/
-
static int rr_index_first(READ_RECORD *info)
{
int tmp= info->file->index_first(info->record);
@@ -330,24 +331,22 @@ static int rr_index_first(READ_RECORD *info)
}
-/*
- Reads index sequentially after first row
+/**
+ Reads index sequentially after first row.
- SYNOPSIS
- rr_index()
- info Scan info
-
- DESCRIPTION
- Read the next index record (in forward direction) and translate return
- value.
-
- RETURN
+ Read the next index record (in forward direction) and translate return
+ value.
+
+ @param info Scan info
+
+ @retval
0 Ok
- -1 End of records
- 1 Error
+ @retval
+ -1 End of records
+ @retval
+ 1 Error
*/
-
static int rr_index(READ_RECORD *info)
{
int tmp= info->file->index_next(info->record);
@@ -401,22 +400,20 @@ static int rr_from_tempfile(READ_RECORD *info)
} /* rr_from_tempfile */
-/*
- Read a result set record from a temporary file after sorting
+/**
+ Read a result set record from a temporary file after sorting.
- SYNOPSIS
- rr_unpack_from_tempfile()
- info Reference to the context including record descriptors
+ The function first reads the next sorted record from the temporary file.
+ into a buffer. If a success it calls a callback function that unpacks
+ the fields values use in the result set from this buffer into their
+ positions in the regular record buffer.
- DESCRIPTION
- The function first reads the next sorted record from the temporary file.
- into a buffer. If a success it calls a callback function that unpacks
- the fields values use in the result set from this buffer into their
- positions in the regular record buffer.
+ @param info Reference to the context including record descriptors
- RETURN
- 0 - Record successfully read.
- -1 - There is no record to be read anymore.
+ @retval
+ 0 Record successfully read.
+ @retval
+ -1 There is no record to be read anymore.
*/
static int rr_unpack_from_tempfile(READ_RECORD *info)
@@ -454,22 +451,20 @@ static int rr_from_pointers(READ_RECORD *info)
return tmp;
}
-/*
- Read a result set record from a buffer after sorting
+/**
+ Read a result set record from a buffer after sorting.
- SYNOPSIS
- rr_unpack_from_buffer()
- info Reference to the context including record descriptors
+ The function first reads the next sorted record from the sort buffer.
+ If a success it calls a callback function that unpacks
+ the fields values use in the result set from this buffer into their
+ positions in the regular record buffer.
- DESCRIPTION
- The function first reads the next sorted record from the sort buffer.
- If a success it calls a callback function that unpacks
- the fields values use in the result set from this buffer into their
- positions in the regular record buffer.
+ @param info Reference to the context including record descriptors
- RETURN
- 0 - Record successfully read.
- -1 - There is no record to be read anymore.
+ @retval
+ 0 Record successfully read.
+ @retval
+ -1 There is no record to be read anymore.
*/
static int rr_unpack_from_buffer(READ_RECORD *info)
diff --git a/sql/repl_failsafe.cc b/sql/repl_failsafe.cc
index 834d87532af..589ee8b2605 100644
--- a/sql/repl_failsafe.cc
+++ b/sql/repl_failsafe.cc
@@ -13,6 +13,16 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+/**
+ @file
+
+ All of the functions defined in this file which are not used (the ones to
+ handle failsafe) are not used; their code has not been updated for more
+ than one year now so should be considered as BADLY BROKEN. Do not enable
+ it. The used functions (to handle LOAD DATA FROM MASTER, plus some small
+ functions like register_slave()) are working.
+*/
+
#include "mysql_priv.h"
#ifdef HAVE_REPLICATION
@@ -91,7 +101,7 @@ static int init_failsafe_rpl_thread(THD* thd)
if (thd->variables.max_join_size == HA_POS_ERROR)
thd->options|= OPTION_BIG_SELECTS;
- thd->proc_info="Thread initialized";
+ thd_proc_info(thd, "Thread initialized");
thd->version=refresh_version;
thd->set_time();
DBUG_RETURN(0);
@@ -144,12 +154,13 @@ void unregister_slave(THD* thd, bool only_mine, bool need_mutex)
}
-/*
- Register slave in 'slave_list' hash table
+/**
+ Register slave in 'slave_list' hash table.
- RETURN VALUES
- 0 ok
- 1 Error. Error message sent to client
+ @return
+ 0 ok
+ @return
+ 1 Error. Error message sent to client
*/
int register_slave(THD* thd, uchar* packet, uint packet_length)
@@ -252,7 +263,8 @@ static int find_target_pos(LEX_MASTER_INFO *mi, IO_CACHE *log, char *errmsg)
/* Impossible */
}
-/*
+/**
+ @details
Before 4.0.15 we had a member of THD called log_pos, it was meant for
failsafe replication code in repl_failsafe.cc which is disabled until
it is reworked. Event's log_pos used to be preserved through
@@ -388,8 +400,8 @@ err:
}
-/*
- Caller must delete result when done
+/**
+ Caller must delete result when done.
*/
static Slave_log_event* find_slave_event(IO_CACHE* log,
@@ -428,9 +440,11 @@ static Slave_log_event* find_slave_event(IO_CACHE* log,
return (Slave_log_event*)ev;
}
-/*
- This function is broken now. See comment for translate_master().
- */
+/**
+ This function is broken now.
+
+ @seealso translate_master()
+*/
bool show_new_master(THD* thd)
{
@@ -466,20 +480,19 @@ bool show_new_master(THD* thd)
}
}
-/*
+/**
Asks the master for the list of its other connected slaves.
- This is for failsafe replication:
+
+ This is for failsafe replication:
in order for failsafe replication to work, the servers involved in
replication must know of each other. We accomplish this by having each
slave report to the master how to reach it, and on connection, each
slave receives information about where the other slaves are.
- SYNOPSIS
- update_slave_list()
- mysql pre-existing connection to the master
- mi master info
+ @param mysql pre-existing connection to the master
+ @param mi master info
- NOTES
+ @note
mi is used only to give detailed error messages which include the
hostname/port of the master, the username used by the slave to connect to
the master.
@@ -487,10 +500,11 @@ bool show_new_master(THD* thd)
REPLICATION SLAVE privilege, it will pop in this function because
SHOW SLAVE HOSTS will fail on the master.
- RETURN VALUES
+ @retval
1 error
+ @retval
0 success
- */
+*/
int update_slave_list(MYSQL* mysql, Master_info* mi)
{
@@ -599,7 +613,7 @@ pthread_handler_t handle_failsafe_rpl(void *arg)
{
bool break_req_chain = 0;
pthread_cond_wait(&COND_rpl_status, &LOCK_rpl_status);
- thd->proc_info="Processing request";
+ thd_proc_info(thd, "Processing request");
while (!break_req_chain)
{
switch (rpl_status) {
@@ -685,7 +699,7 @@ int connect_to_master(THD *thd, MYSQL* mysql, Master_info* mi)
if (!mi->host || !*mi->host) /* empty host */
{
- strmov(mysql->net.last_error, "Master is not configured");
+ strmov(mysql->net.client_last_error, "Master is not configured");
DBUG_RETURN(1);
}
mysql_options(mysql, MYSQL_OPT_CONNECT_TIMEOUT, (char *) &slave_net_timeout);
@@ -754,11 +768,16 @@ static int fetch_db_tables(THD *thd, MYSQL *mysql, const char *db,
return 0;
}
-/*
+/**
Load all MyISAM tables from master to this slave.
REQUIREMENTS
- - No active transaction (flush_relay_log_info would not work in this case)
+ - No active transaction (flush_relay_log_info would not work in this case).
+
+ @todo
+ - add special option, not enabled
+ by default, to allow inclusion of mysql database into load
+ data from master
*/
bool load_master_data(THD* thd)
@@ -880,6 +899,8 @@ bool load_master_data(THD* thd)
cleanup_mysql_results(db_res, cur_table_res - 1, table_res);
goto err;
}
+ /* Clear the result of mysql_create_db(). */
+ thd->main_da.reset_diagnostics_area();
if (mysql_select_db(&mysql, db) ||
mysql_real_query(&mysql, STRING_WITH_LEN("SHOW TABLES")) ||
@@ -925,7 +946,7 @@ bool load_master_data(THD* thd)
0, (SLAVE_IO | SLAVE_SQL)))
my_message(ER_MASTER_INFO, ER(ER_MASTER_INFO), MYF(0));
strmake(active_mi->master_log_name, row[0],
- sizeof(active_mi->master_log_name));
+ sizeof(active_mi->master_log_name) -1);
active_mi->master_log_pos= my_strtoll10(row[1], (char**) 0, &error_2);
/* at least in recent versions, the condition below should be false */
if (active_mi->master_log_pos < BIN_LOG_HEADER_SIZE)
@@ -947,7 +968,7 @@ bool load_master_data(THD* thd)
goto err;
}
}
- thd->proc_info="purging old relay logs";
+ thd_proc_info(thd, "purging old relay logs");
if (purge_relay_logs(&active_mi->rli,thd,
0 /* not only reset, but also reinit */,
&errmsg))
@@ -974,7 +995,7 @@ bool load_master_data(THD* thd)
flush_relay_log_info(&active_mi->rli);
pthread_cond_broadcast(&active_mi->rli.data_cond);
pthread_mutex_unlock(&active_mi->rli.data_lock);
- thd->proc_info = "starting slave";
+ thd_proc_info(thd, "starting slave");
if (restart_thread_mask)
{
error=start_slave_threads(0 /* mutex not needed */,
@@ -986,7 +1007,7 @@ bool load_master_data(THD* thd)
err:
unlock_slave_threads(active_mi);
pthread_mutex_unlock(&LOCK_active_mi);
- thd->proc_info = 0;
+ thd_proc_info(thd, 0);
mysql_close(&mysql); // safe to call since we always do mysql_init()
if (!error)
diff --git a/sql/rpl_record.cc b/sql/rpl_record.cc
index 65c8e106112..eb32897f937 100644
--- a/sql/rpl_record.cc
+++ b/sql/rpl_record.cc
@@ -65,6 +65,8 @@ pack_row(TABLE *table, MY_BITMAP const* cols,
my_ptrdiff_t const rec_offset= record - table->record[0];
my_ptrdiff_t const def_offset= table->s->default_values - table->record[0];
+ DBUG_ENTER("pack_row");
+
/*
We write the null bits and the packed records using one pass
through all the fields. The null bytes are written little-endian,
@@ -96,26 +98,17 @@ pack_row(TABLE *table, MY_BITMAP const* cols,
For big-endian machines, we have to make sure that the
length is stored in little-endian format, since this is the
format used for the binlog.
-
- We do this by setting the db_low_byte_first, which is used
- inside some store_length() to decide what order to write the
- bytes in.
-
- In reality, db_log_byte_first is only set for legacy table
- type Isam, but in the event of a bug, we need to guarantee
- the endianess when writing to the binlog.
-
- This is currently broken for NDB due to BUG#29549, so we
- will fix it when NDB has fixed their way of handling BLOBs.
*/
-#if 0
- bool save= table->s->db_low_byte_first;
- table->s->db_low_byte_first= TRUE;
-#endif
- pack_ptr= field->pack(pack_ptr, field->ptr + offset);
-#if 0
- table->s->db_low_byte_first= save;
+#ifndef DBUG_OFF
+ const uchar *old_pack_ptr= pack_ptr;
#endif
+ pack_ptr= field->pack(pack_ptr, field->ptr + offset,
+ field->max_data_length(), TRUE);
+ DBUG_PRINT("debug", ("field: %s; pack_ptr: 0x%lx;"
+ " pack_ptr':0x%lx; bytes: %d",
+ field->field_name, (ulong) old_pack_ptr,
+ (ulong) pack_ptr,
+ (int) (pack_ptr - old_pack_ptr)));
}
null_mask <<= 1;
@@ -143,8 +136,8 @@ pack_row(TABLE *table, MY_BITMAP const* cols,
packed data. If it doesn't, something is very wrong.
*/
DBUG_ASSERT(null_ptr == row_data + null_byte_count);
-
- return static_cast<size_t>(pack_ptr - row_data);
+ DBUG_DUMP("row_data", row_data, pack_ptr - row_data);
+ DBUG_RETURN(static_cast<size_t>(pack_ptr - row_data));
}
#endif
@@ -242,18 +235,16 @@ unpack_row(Relay_log_info const *rli,
Use the master's size information if available else call
normal unpack operation.
*/
-#if 0
- bool save= table->s->db_low_byte_first;
- table->s->db_low_byte_first= TRUE;
-#endif
uint16 const metadata= tabledef->field_metadata(i);
- if (tabledef && metadata)
- pack_ptr= f->unpack(f->ptr, pack_ptr, metadata);
- else
- pack_ptr= f->unpack(f->ptr, pack_ptr);
-#if 0
- table->s->db_low_byte_first= save;
+#ifndef DBUG_OFF
+ uchar const *const old_pack_ptr= pack_ptr;
#endif
+ pack_ptr= f->unpack(f->ptr, pack_ptr, metadata, TRUE);
+ DBUG_PRINT("debug", ("field: %s; metadata: 0x%x;"
+ " pack_ptr: 0x%lx; pack_ptr': 0x%lx; bytes: %d",
+ f->field_name, metadata,
+ (ulong) old_pack_ptr, (ulong) pack_ptr,
+ (int) (pack_ptr - old_pack_ptr)));
}
null_mask <<= 1;
@@ -289,6 +280,8 @@ unpack_row(Relay_log_info const *rli,
*/
DBUG_ASSERT(null_ptr == row_data + master_null_byte_count);
+ DBUG_DUMP("row_data", row_data, pack_ptr - row_data);
+
*row_end = pack_ptr;
if (master_reclength)
{
@@ -345,12 +338,13 @@ int prepare_record(const Slave_reporting_capability *const log,
if (check && ((f->flags & mask) == mask))
{
DBUG_ASSERT(log);
- log->report(ERROR_LEVEL, ER_NO_DEFAULT_FOR_FIELD,
+ error= ER_NO_DEFAULT_FOR_FIELD;
+ log->report(ERROR_LEVEL, error,
"Field `%s` of table `%s`.`%s` "
"has no default value and cannot be NULL",
f->field_name, table->s->db.str,
table->s->table_name.str);
- error = ER_NO_DEFAULT_FOR_FIELD;
+ my_error(error, MYF(0), f->field_name);
}
else
f->set_default();
diff --git a/sql/rpl_rli.cc b/sql/rpl_rli.cc
index 867d55a60a3..3e9a484126a 100644
--- a/sql/rpl_rli.cc
+++ b/sql/rpl_rli.cc
@@ -33,6 +33,7 @@ Relay_log_info::Relay_log_info()
:Slave_reporting_capability("SQL"),
no_storage(FALSE), replicate_same_server_id(::replicate_same_server_id),
info_fd(-1), cur_log_fd(-1), save_temporary_tables(0),
+ group_relay_log_pos(0),
cur_log_old_open_count(0), group_master_log_pos(0), log_space_total(0),
ignore_log_space_limit(0), last_master_timestamp(0), slave_skip_counter(0),
abort_pos_wait(0), slave_run_id(0), sql_thd(0),
@@ -166,7 +167,7 @@ int init_relay_log_info(Relay_log_info* rli,
{
sql_print_error("Failed to create a new relay log info file (\
file '%s', errno %d)", fname, my_errno);
- msg= current_thd->net.last_error;
+ msg= current_thd->main_da.message();
goto err;
}
if (init_io_cache(&rli->info_file, info_fd, IO_SIZE*2, READ_CACHE, 0L,0,
@@ -174,7 +175,7 @@ file '%s', errno %d)", fname, my_errno);
{
sql_print_error("Failed to create a cache on relay log info file '%s'",
fname);
- msg= current_thd->net.last_error;
+ msg= current_thd->main_da.message();
goto err;
}
@@ -1082,6 +1083,9 @@ bool Relay_log_info::cached_charset_compare(char *charset) const
void Relay_log_info::stmt_done(my_off_t event_master_log_pos,
time_t event_creation_time)
{
+#ifndef DBUG_OFF
+ extern uint debug_not_change_ts_if_art_event;
+#endif
clear_flag(IN_STMT);
/*
@@ -1121,7 +1125,12 @@ void Relay_log_info::stmt_done(my_off_t event_master_log_pos,
is that value may take some time to display in
Seconds_Behind_Master - not critical).
*/
- last_master_timestamp= event_creation_time;
+#ifndef DBUG_OFF
+ if (!(event_creation_time == 0 && debug_not_change_ts_if_art_event > 0))
+#else
+ if (event_creation_time != 0)
+#endif
+ last_master_timestamp= event_creation_time;
}
}
@@ -1152,6 +1161,11 @@ void Relay_log_info::cleanup_context(THD *thd, bool error)
close_thread_tables(thd);
clear_tables_to_lock();
clear_flag(IN_STMT);
+ /*
+ Cleanup for the flags that have been set at do_apply_event.
+ */
+ thd->options&= ~OPTION_NO_FOREIGN_KEY_CHECKS;
+ thd->options&= ~OPTION_RELAXED_UNIQUE_CHECKS;
last_event_start_time= 0;
DBUG_VOID_RETURN;
}
diff --git a/sql/rpl_rli.h b/sql/rpl_rli.h
index 10ecf1a43d4..a3a57ad4ce9 100644
--- a/sql/rpl_rli.h
+++ b/sql/rpl_rli.h
@@ -366,6 +366,18 @@ public:
}
/**
+ Get the value of a replication state flag.
+
+ @param flag Flag to get value of
+
+ @return @c true if the flag was set, @c false otherwise.
+ */
+ bool get_flag(enum_state_flag flag)
+ {
+ return m_flags & (1UL << flag);
+ }
+
+ /**
Clear the value of a replication state flag.
@param flag Flag to clear
diff --git a/sql/rpl_utility.cc b/sql/rpl_utility.cc
index d1ce5bf3b7b..4f4083d9b8f 100644
--- a/sql/rpl_utility.cc
+++ b/sql/rpl_utility.cc
@@ -31,31 +31,34 @@ uint32 table_def::calc_field_size(uint col, uchar *master_data) const
switch (type(col)) {
case MYSQL_TYPE_NEWDECIMAL:
length= my_decimal_get_binary_size(m_field_metadata[col] >> 8,
- m_field_metadata[col] - ((m_field_metadata[col] >> 8) << 8));
+ m_field_metadata[col] & 0xff);
break;
case MYSQL_TYPE_DECIMAL:
case MYSQL_TYPE_FLOAT:
case MYSQL_TYPE_DOUBLE:
length= m_field_metadata[col];
break;
+ /*
+ The cases for SET and ENUM are include for completeness, however
+ both are mapped to type MYSQL_TYPE_STRING and their real types
+ are encoded in the field metadata.
+ */
case MYSQL_TYPE_SET:
case MYSQL_TYPE_ENUM:
case MYSQL_TYPE_STRING:
{
- if (((m_field_metadata[col] & 0xff00) == (MYSQL_TYPE_SET << 8)) ||
- ((m_field_metadata[col] & 0xff00) == (MYSQL_TYPE_ENUM << 8)))
+ uchar type= m_field_metadata[col] >> 8U;
+ if ((type == MYSQL_TYPE_SET) || (type == MYSQL_TYPE_ENUM))
length= m_field_metadata[col] & 0x00ff;
else
{
- length= m_field_metadata[col] & 0x00ff;
- DBUG_ASSERT(length > 0);
- if (length > 255)
- {
- DBUG_ASSERT(uint2korr(master_data) > 0);
- length= uint2korr(master_data) + 2;
- }
- else
- length= (uint) *master_data + 1;
+ /*
+ We are reading the actual size from the master_data record
+ because this field has the actual lengh stored in the first
+ byte.
+ */
+ length= (uint) *master_data + 1;
+ DBUG_ASSERT(length != 0);
}
break;
}
@@ -95,6 +98,13 @@ uint32 table_def::calc_field_size(uint col, uchar *master_data) const
break;
case MYSQL_TYPE_BIT:
{
+ /*
+ Decode the size of the bit field from the master.
+ from_len is the length in bytes from the master
+ from_bit_len is the number of extra bits stored in the master record
+ If from_bit_len is not 0, add 1 to the length to account for accurate
+ number of bytes needed.
+ */
uint from_len= (m_field_metadata[col] >> 8U) & 0x00ff;
uint from_bit_len= m_field_metadata[col] & 0x00ff;
DBUG_ASSERT(from_bit_len <= 7);
@@ -136,7 +146,7 @@ uint32 table_def::calc_field_size(uint col, uchar *master_data) const
length= *master_data;
break;
case 2:
- length= sint2korr(master_data);
+ length= uint2korr(master_data);
break;
case 3:
length= uint3korr(master_data);
@@ -154,7 +164,7 @@ uint32 table_def::calc_field_size(uint col, uchar *master_data) const
break;
}
default:
- length= -1;
+ length= ~(uint32) 0;
}
return length;
}
diff --git a/sql/rpl_utility.h b/sql/rpl_utility.h
index 26edbdd1405..375715c7858 100644
--- a/sql/rpl_utility.h
+++ b/sql/rpl_utility.h
@@ -99,7 +99,7 @@ public:
/*
These types store a single byte.
*/
- m_field_metadata[i]= (uchar)field_metadata[index];
+ m_field_metadata[i]= field_metadata[index];
index++;
break;
}
@@ -107,14 +107,14 @@ public:
case MYSQL_TYPE_ENUM:
case MYSQL_TYPE_STRING:
{
- short int x= field_metadata[index++] << 8U; // real_type
- x = x + field_metadata[index++]; // pack or field length
+ uint16 x= field_metadata[index++] << 8U; // real_type
+ x+= field_metadata[index++]; // pack or field length
m_field_metadata[i]= x;
break;
}
case MYSQL_TYPE_BIT:
{
- short int x= field_metadata[index++];
+ uint16 x= field_metadata[index++];
x = x + (field_metadata[index++] << 8U);
m_field_metadata[i]= x;
break;
@@ -125,14 +125,14 @@ public:
These types store two bytes.
*/
char *ptr= (char *)&field_metadata[index];
- m_field_metadata[i]= sint2korr(ptr);
+ m_field_metadata[i]= uint2korr(ptr);
index= index + 2;
break;
}
case MYSQL_TYPE_NEWDECIMAL:
{
- short int x= field_metadata[index++] << 8U; // precision
- x = x + field_metadata[index++]; // decimals
+ uint16 x= field_metadata[index++] << 8U; // precision
+ x+= field_metadata[index++]; // decimals
m_field_metadata[i]= x;
break;
}
diff --git a/sql/scheduler.h b/sql/scheduler.h
index 8351cefda4c..46bbd300cbb 100644
--- a/sql/scheduler.h
+++ b/sql/scheduler.h
@@ -40,7 +40,7 @@ public:
enum scheduler_types
{
- SCHEDULER_ONE_THREAD_PER_CONNECTION=1,
+ SCHEDULER_ONE_THREAD_PER_CONNECTION=0,
SCHEDULER_NO_THREADS,
SCHEDULER_POOL_OF_THREADS
};
diff --git a/sql/set_var.cc b/sql/set_var.cc
index b6b102aa4d0..410608f154f 100644
--- a/sql/set_var.cc
+++ b/sql/set_var.cc
@@ -13,9 +13,13 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-/*
+/**
+ @file
+
+ @brief
Handling of MySQL SQL variables
+ @details
To add a new variable, one has to do the following:
- Use one of the 'sys_var... classes from set_var.h or write a specific
@@ -28,18 +32,19 @@
- Don't forget to initialize new fields in global_system_variables and
max_system_variables!
- NOTES:
- - Be careful with var->save_result: sys_var::check() only updates
+ @todo
+ Add full support for the variable character_set (for 4.1)
+
+ @todo
+ When updating myisam_delay_key_write, we should do a 'flush tables'
+ of all MyISAM tables to ensure that they are reopen with the
+ new attribute.
+
+ @note
+ Be careful with var->save_result: sys_var::check() only updates
ulonglong_value; so other members of the union are garbage then; to use
them you must first assign a value to them (in specific ::check() for
example).
-
- TODO:
- - Add full support for the variable character_set (for 4.1)
-
- - When updating myisam_delay_key_write, we should do a 'flush tables'
- of all MyISAM tables to ensure that they are reopen with the
- new attribute.
*/
#ifdef USE_PRAGMA_IMPLEMENTATION
@@ -88,6 +93,16 @@ TYPELIB delay_key_write_typelib=
delay_key_write_type_names, NULL
};
+const char *slave_exec_mode_names[]=
+{ "STRICT", "IDEMPOTENT", NullS };
+static const unsigned int slave_exec_mode_names_len[]=
+{ sizeof("STRICT") - 1, sizeof("IDEMPOTENT") - 1, 0 };
+TYPELIB slave_exec_mode_typelib=
+{
+ array_elements(slave_exec_mode_names)-1, "",
+ slave_exec_mode_names, (unsigned int *) slave_exec_mode_names_len
+};
+
static int sys_check_ftb_syntax(THD *thd, set_var *var);
static bool sys_update_ftb_syntax(THD *thd, set_var * var);
static void sys_default_ftb_syntax(THD *thd, enum_var_type type);
@@ -120,6 +135,9 @@ static int check_max_delayed_threads(THD *thd, set_var *var);
static void fix_thd_mem_root(THD *thd, enum_var_type type);
static void fix_trans_mem_root(THD *thd, enum_var_type type);
static void fix_server_id(THD *thd, enum_var_type type);
+static ulonglong fix_unsigned(THD *, ulonglong, const struct my_option *);
+static bool get_unsigned(THD *thd, set_var *var);
+static void throw_bounds_warning(THD *thd, const char *name, ulonglong num);
static KEY_CACHE *create_key_cache(const char *name, uint length);
void fix_sql_mode_var(THD *thd, enum_var_type type);
static uchar *get_error_count(THD *thd);
@@ -164,7 +182,8 @@ static sys_var_character_set_sv sys_character_set_server(&vars, "character_set_s
sys_var_const_str sys_charset_system(&vars, "character_set_system",
(char *)my_charset_utf8_general_ci.name);
static sys_var_character_set_database sys_character_set_database(&vars, "character_set_database");
-static sys_var_character_set_sv sys_character_set_client(&vars, "character_set_client",
+static sys_var_character_set_client sys_character_set_client(&vars,
+ "character_set_client",
&SV::character_set_client,
&default_charset_info);
static sys_var_character_set_sv sys_character_set_connection(&vars, "character_set_connection",
@@ -384,7 +403,7 @@ static sys_var_thd_ulong sys_trans_alloc_block_size(&vars, "transaction_alloc_bl
static sys_var_thd_ulong sys_trans_prealloc_size(&vars, "transaction_prealloc_size",
&SV::trans_prealloc_size,
0, fix_trans_mem_root);
-sys_var_thd_enum sys_thread_handling(&vars, "thread_handling",
+sys_var_enum_const sys_thread_handling(&vars, "thread_handling",
&SV::thread_handling,
&thread_handling_typelib,
NULL);
@@ -408,6 +427,11 @@ static sys_var_const_str_ptr sys_secure_file_priv(&vars, "secure_file_priv",
static sys_var_long_ptr sys_server_id(&vars, "server_id", &server_id, fix_server_id);
static sys_var_bool_ptr sys_slave_compressed_protocol(&vars, "slave_compressed_protocol",
&opt_slave_compressed_protocol);
+static sys_var_set_slave_mode slave_exec_mode(&vars,
+ "slave_exec_mode",
+ &slave_exec_mode_options,
+ &slave_exec_mode_typelib,
+ 0);
static sys_var_long_ptr sys_slow_launch_time(&vars, "slow_launch_time",
&slow_launch_time);
static sys_var_thd_ulong sys_sort_buffer(&vars, "sort_buffer_size",
@@ -582,6 +606,13 @@ static sys_var_thd_bit sys_unique_checks(&vars, "unique_checks", 0,
set_option_bit,
OPTION_RELAXED_UNIQUE_CHECKS,
1);
+#if defined(ENABLED_PROFILING) && defined(COMMUNITY_SERVER)
+static sys_var_thd_bit sys_profiling(&vars, "profiling", NULL,
+ set_option_bit,
+ ulonglong(OPTION_PROFILING));
+static sys_var_thd_ulong sys_profiling_history_size(&vars, "profiling_history_size",
+ &SV::profiling_history_size);
+#endif
/* Local state variables */
@@ -634,6 +665,7 @@ static sys_var_have_variable sys_have_ssl(&vars, "have_ssl", &have_ssl);
static sys_var_have_plugin sys_have_partition_db(&vars, "have_partitioning", C_STRING_WITH_LEN("partition"), MYSQL_STORAGE_ENGINE_PLUGIN);
static sys_var_have_variable sys_have_query_cache(&vars, "have_query_cache",
&have_query_cache);
+static sys_var_have_variable sys_have_community_features(&vars, "have_community_features", &have_community_features);
static sys_var_have_variable sys_have_rtree_keys(&vars, "have_rtree_keys", &have_rtree_keys);
static sys_var_have_variable sys_have_symlink(&vars, "have_symlink", &have_symlink);
/* Global read-only variable describing server license */
@@ -641,8 +673,14 @@ static sys_var_const_str sys_license(&vars, "license", STRINGIFY_ARG(LICENSE));
/* Global variables which enable|disable logging */
static sys_var_log_state sys_var_general_log(&vars, "general_log", &opt_log,
QUERY_LOG_GENERAL);
+/* Synonym of "general_log" for consistency with SHOW VARIABLES output */
+static sys_var_log_state sys_var_log(&vars, "log", &opt_log,
+ QUERY_LOG_GENERAL);
static sys_var_log_state sys_var_slow_query_log(&vars, "slow_query_log", &opt_slow_log,
QUERY_LOG_SLOW);
+/* Synonym of "slow_query_log" for consistency with SHOW VARIABLES output */
+static sys_var_log_state sys_var_log_slow(&vars, "log_slow_queries",
+ &opt_slow_log, QUERY_LOG_SLOW);
sys_var_str sys_var_general_log_path(&vars, "general_log_file", sys_check_log_path,
sys_update_general_log_path,
sys_default_general_log_path,
@@ -678,10 +716,8 @@ static SHOW_VAR fixed_vars[]= {
#ifdef HAVE_MLOCKALL
{"locked_in_memory", (char*) &locked_in_memory, SHOW_MY_BOOL},
#endif
- {"log", (char*) &opt_log, SHOW_MY_BOOL},
{"log_bin", (char*) &opt_bin_log, SHOW_BOOL},
{"log_error", (char*) log_error_file, SHOW_CHAR},
- {"log_slow_queries", (char*) &opt_slow_log, SHOW_MY_BOOL},
{"lower_case_file_system", (char*) &lower_case_file_system, SHOW_MY_BOOL},
{"lower_case_table_names", (char*) &lower_case_table_names, SHOW_INT},
{"myisam_recover_options", (char*) &myisam_recover_options_str, SHOW_CHAR_PTR},
@@ -819,9 +855,9 @@ static void sys_default_ftb_syntax(THD *thd, enum_var_type type)
}
-/*
+/**
If one sets the LOW_PRIORIY UPDATES flag, we also must change the
- used lock type
+ used lock type.
*/
static void fix_low_priority_updates(THD *thd, enum_var_type type)
@@ -843,8 +879,8 @@ fix_myisam_max_sort_file_size(THD *thd, enum_var_type type)
(my_off_t) global_system_variables.myisam_max_sort_file_size;
}
-/*
- Set the OPTION_BIG_SELECTS flag if max_join_size == HA_POS_ERROR
+/**
+ Set the OPTION_BIG_SELECTS flag if max_join_size == HA_POS_ERROR.
*/
static void fix_max_join_size(THD *thd, enum_var_type type)
@@ -859,7 +895,7 @@ static void fix_max_join_size(THD *thd, enum_var_type type)
}
-/*
+/**
Can't change the 'next' tx_isolation while we are already in
a transaction
*/
@@ -875,7 +911,7 @@ static int check_tx_isolation(THD *thd, set_var *var)
/*
If one doesn't use the SESSION modifier, the isolation level
- is only active for the next command
+ is only active for the next command.
*/
static void fix_tx_isolation(THD *thd, enum_var_type type)
{
@@ -981,6 +1017,79 @@ extern void fix_delay_key_write(THD *thd, enum_var_type type)
}
}
+bool sys_var_set::update(THD *thd, set_var *var)
+{
+ *value= var->save_result.ulong_value;
+ return 0;
+};
+
+uchar *sys_var_set::value_ptr(THD *thd, enum_var_type type,
+ LEX_STRING *base)
+{
+ char buff[256];
+ String tmp(buff, sizeof(buff), &my_charset_latin1);
+ ulong length;
+ ulong val= *value;
+
+ tmp.length(0);
+ for (uint i= 0; val; val>>= 1, i++)
+ {
+ if (val & 1)
+ {
+ tmp.append(enum_names->type_names[i],
+ enum_names->type_lengths[i]);
+ tmp.append(',');
+ }
+ }
+
+ if ((length= tmp.length()))
+ length--;
+ return (uchar*) thd->strmake(tmp.ptr(), length);
+}
+
+void sys_var_set_slave_mode::set_default(THD *thd, enum_var_type type)
+{
+ slave_exec_mode_options= 0;
+ bit_do_set(slave_exec_mode_options, SLAVE_EXEC_MODE_STRICT);
+}
+
+bool sys_var_set_slave_mode::check(THD *thd, set_var *var)
+{
+ bool rc= sys_var_set::check(thd, var);
+ if (!rc &&
+ bit_is_set(var->save_result.ulong_value, SLAVE_EXEC_MODE_STRICT) == 1 &&
+ bit_is_set(var->save_result.ulong_value, SLAVE_EXEC_MODE_IDEMPOTENT) == 1)
+ {
+ rc= true;
+ my_error(ER_SLAVE_AMBIGOUS_EXEC_MODE, MYF(0), "");
+ }
+ return rc;
+}
+
+bool sys_var_set_slave_mode::update(THD *thd, set_var *var)
+{
+ bool rc;
+ pthread_mutex_lock(&LOCK_global_system_variables);
+ rc= sys_var_set::update(thd, var);
+ pthread_mutex_unlock(&LOCK_global_system_variables);
+ return rc;
+}
+
+void fix_slave_exec_mode(enum_var_type type)
+{
+ DBUG_ENTER("fix_slave_exec_mode");
+ compile_time_assert(sizeof(slave_exec_mode_options) * CHAR_BIT
+ > SLAVE_EXEC_MODE_LAST_BIT - 1);
+ if (bit_is_set(slave_exec_mode_options, SLAVE_EXEC_MODE_STRICT) == 1 &&
+ bit_is_set(slave_exec_mode_options, SLAVE_EXEC_MODE_IDEMPOTENT) == 1)
+ {
+ sql_print_error("Ambiguous slave modes combination."
+ " STRICT will be used");
+ bit_do_clear(slave_exec_mode_options, SLAVE_EXEC_MODE_IDEMPOTENT);
+ }
+ if (bit_is_set(slave_exec_mode_options, SLAVE_EXEC_MODE_IDEMPOTENT) == 0)
+ bit_do_set(slave_exec_mode_options, SLAVE_EXEC_MODE_STRICT);
+}
bool sys_var_thd_binlog_format::is_readonly() const
{
@@ -1094,6 +1203,40 @@ static void fix_trans_mem_root(THD *thd, enum_var_type type)
static void fix_server_id(THD *thd, enum_var_type type)
{
server_id_supplied = 1;
+ thd->server_id= server_id;
+}
+
+
+static void throw_bounds_warning(THD *thd, const char *name, ulonglong num)
+{
+ char buf[22];
+ push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
+ ER_TRUNCATED_WRONG_VALUE,
+ ER(ER_TRUNCATED_WRONG_VALUE), name,
+ ullstr(num, buf));
+}
+
+static ulonglong fix_unsigned(THD *thd, ulonglong num,
+ const struct my_option *option_limits)
+{
+ bool fixed= FALSE;
+ ulonglong out= getopt_ull_limit_value(num, option_limits, &fixed);
+
+ if (fixed)
+ throw_bounds_warning(thd, option_limits->name, num);
+ return out;
+}
+
+static bool get_unsigned(THD *thd, set_var *var)
+{
+ if (var->value->unsigned_flag)
+ var->save_result.ulonglong_value= (ulonglong) var->value->val_int();
+ else
+ {
+ longlong v= var->value->val_int();
+ var->save_result.ulonglong_value= (ulonglong) ((v < 0) ? 0 : v);
+ }
+ return 0;
}
@@ -1107,9 +1250,7 @@ sys_var_long_ptr(sys_var_chain *chain, const char *name_arg, ulong *value_ptr_ar
bool sys_var_long_ptr_global::check(THD *thd, set_var *var)
{
- longlong v= var->value->val_int();
- var->save_result.ulonglong_value= v < 0 ? 0 : v;
- return 0;
+ return get_unsigned(thd, var);
}
bool sys_var_long_ptr_global::update(THD *thd, set_var *var)
@@ -1117,9 +1258,20 @@ bool sys_var_long_ptr_global::update(THD *thd, set_var *var)
ulonglong tmp= var->save_result.ulonglong_value;
pthread_mutex_lock(guard);
if (option_limits)
- *value= (ulong) getopt_ull_limit_value(tmp, option_limits);
+ *value= (ulong) fix_unsigned(thd, tmp, option_limits);
else
+ {
+#if SIZEOF_LONG < SIZEOF_LONG_LONG
+ /* Avoid overflows on 32 bit systems */
+ if (tmp > ULONG_MAX)
+ {
+ tmp= ULONG_MAX;
+ throw_bounds_warning(thd, name, var->save_result.ulonglong_value);
+ }
+#endif
*value= (ulong) tmp;
+ }
+
pthread_mutex_unlock(guard);
return 0;
}
@@ -1127,8 +1279,10 @@ bool sys_var_long_ptr_global::update(THD *thd, set_var *var)
void sys_var_long_ptr_global::set_default(THD *thd, enum_var_type type)
{
+ bool not_used;
pthread_mutex_lock(guard);
- *value= (ulong) option_limits->def_value;
+ *value= (ulong) getopt_ull_limit_value((ulong) option_limits->def_value,
+ option_limits, &not_used);
pthread_mutex_unlock(guard);
}
@@ -1138,7 +1292,7 @@ bool sys_var_ulonglong_ptr::update(THD *thd, set_var *var)
ulonglong tmp= var->save_result.ulonglong_value;
pthread_mutex_lock(&LOCK_global_system_variables);
if (option_limits)
- *value= (ulonglong) getopt_ull_limit_value(tmp, option_limits);
+ *value= (ulonglong) fix_unsigned(thd, tmp, option_limits);
else
*value= (ulonglong) tmp;
pthread_mutex_unlock(&LOCK_global_system_variables);
@@ -1148,8 +1302,10 @@ bool sys_var_ulonglong_ptr::update(THD *thd, set_var *var)
void sys_var_ulonglong_ptr::set_default(THD *thd, enum_var_type type)
{
+ bool not_used;
pthread_mutex_lock(&LOCK_global_system_variables);
- *value= (ulonglong) option_limits->def_value;
+ *value= getopt_ull_limit_value((ulonglong) option_limits->def_value,
+ option_limits, &not_used);
pthread_mutex_unlock(&LOCK_global_system_variables);
}
@@ -1179,47 +1335,45 @@ uchar *sys_var_enum::value_ptr(THD *thd, enum_var_type type, LEX_STRING *base)
return (uchar*) enum_names->type_names[*value];
}
+
+uchar *sys_var_enum_const::value_ptr(THD *thd, enum_var_type type,
+ LEX_STRING *base)
+{
+ return (uchar*) enum_names->type_names[global_system_variables.*offset];
+}
+
bool sys_var_thd_ulong::check(THD *thd, set_var *var)
{
- return (sys_var_thd::check(thd, var) ||
+ return (get_unsigned(thd, var) ||
(check_func && (*check_func)(thd, var)));
}
bool sys_var_thd_ulong::update(THD *thd, set_var *var)
{
ulonglong tmp= var->save_result.ulonglong_value;
- char buf[22];
- bool truncated= false;
/* Don't use bigger value than given with --maximum-variable-name=.. */
if ((ulong) tmp > max_system_variables.*offset)
{
- truncated= true;
- llstr(tmp, buf);
+ throw_bounds_warning(thd, name, tmp);
tmp= max_system_variables.*offset;
}
-#if SIZEOF_LONG == 4
- /* Avoid overflows on 32 bit systems */
- if (tmp > (ulonglong) ~(ulong) 0)
+ if (option_limits)
+ tmp= (ulong) fix_unsigned(thd, tmp, option_limits);
+#if SIZEOF_LONG < SIZEOF_LONG_LONG
+ else if (tmp > ULONG_MAX)
{
- truncated= true;
- llstr(tmp, buf);
- tmp= ((ulonglong) ~(ulong) 0);
+ tmp= ULONG_MAX;
+ throw_bounds_warning(thd, name, var->save_result.ulonglong_value);
}
#endif
- if (truncated)
- push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
- ER_TRUNCATED_WRONG_VALUE,
- ER(ER_TRUNCATED_WRONG_VALUE), name,
- buf);
- if (option_limits)
- tmp= (ulong) getopt_ull_limit_value(tmp, option_limits);
if (var->type == OPT_GLOBAL)
global_system_variables.*offset= (ulong) tmp;
else
thd->variables.*offset= (ulong) tmp;
+
return 0;
}
@@ -1228,8 +1382,11 @@ void sys_var_thd_ulong::set_default(THD *thd, enum_var_type type)
{
if (type == OPT_GLOBAL)
{
+ bool not_used;
/* We will not come here if option_limits is not set */
- global_system_variables.*offset= (ulong) option_limits->def_value;
+ global_system_variables.*offset=
+ (ulong) getopt_ull_limit_value((ulong) option_limits->def_value,
+ option_limits, &not_used);
}
else
thd->variables.*offset= global_system_variables.*offset;
@@ -1254,7 +1411,7 @@ bool sys_var_thd_ha_rows::update(THD *thd, set_var *var)
tmp= max_system_variables.*offset;
if (option_limits)
- tmp= (ha_rows) getopt_ull_limit_value(tmp, option_limits);
+ tmp= (ha_rows) fix_unsigned(thd, tmp, option_limits);
if (var->type == OPT_GLOBAL)
{
/* Lock is needed to make things safe on 32 bit systems */
@@ -1272,9 +1429,12 @@ void sys_var_thd_ha_rows::set_default(THD *thd, enum_var_type type)
{
if (type == OPT_GLOBAL)
{
+ bool not_used;
/* We will not come here if option_limits is not set */
pthread_mutex_lock(&LOCK_global_system_variables);
- global_system_variables.*offset= (ha_rows) option_limits->def_value;
+ global_system_variables.*offset=
+ (ha_rows) getopt_ull_limit_value((ha_rows) option_limits->def_value,
+ option_limits, &not_used);
pthread_mutex_unlock(&LOCK_global_system_variables);
}
else
@@ -1290,6 +1450,11 @@ uchar *sys_var_thd_ha_rows::value_ptr(THD *thd, enum_var_type type,
return (uchar*) &(thd->variables.*offset);
}
+bool sys_var_thd_ulonglong::check(THD *thd, set_var *var)
+{
+ return get_unsigned(thd, var);
+}
+
bool sys_var_thd_ulonglong::update(THD *thd, set_var *var)
{
ulonglong tmp= var->save_result.ulonglong_value;
@@ -1298,7 +1463,7 @@ bool sys_var_thd_ulonglong::update(THD *thd, set_var *var)
tmp= max_system_variables.*offset;
if (option_limits)
- tmp= getopt_ull_limit_value(tmp, option_limits);
+ tmp= fix_unsigned(thd, tmp, option_limits);
if (var->type == OPT_GLOBAL)
{
/* Lock is needed to make things safe on 32 bit systems */
@@ -1316,8 +1481,11 @@ void sys_var_thd_ulonglong::set_default(THD *thd, enum_var_type type)
{
if (type == OPT_GLOBAL)
{
+ bool not_used;
pthread_mutex_lock(&LOCK_global_system_variables);
- global_system_variables.*offset= (ulonglong) option_limits->def_value;
+ global_system_variables.*offset=
+ getopt_ull_limit_value((ulonglong) option_limits->def_value,
+ option_limits, &not_used);
pthread_mutex_unlock(&LOCK_global_system_variables);
}
else
@@ -1420,7 +1588,7 @@ bool sys_var::check_set(THD *thd, set_var *var, TYPELIB *enum_names)
&not_used));
if (error_len)
{
- strmake(buff, error, min(sizeof(buff), error_len));
+ strmake(buff, error, min(sizeof(buff) - 1, error_len));
goto err;
}
}
@@ -1447,9 +1615,12 @@ err:
}
-/*
- Return an Item for a variable. Used with @@[global.]variable_name
- If type is not given, return local value if exists, else global
+/**
+ Return an Item for a variable.
+
+ Used with @@[global.]variable_name.
+
+ If type is not given, return local value if exists, else global.
*/
Item *sys_var::item(THD *thd, enum_var_type var_type, LEX_STRING *base)
@@ -1505,7 +1676,7 @@ Item *sys_var::item(THD *thd, enum_var_type var_type, LEX_STRING *base)
pthread_mutex_lock(&LOCK_global_system_variables);
value= *(ha_rows*) value_ptr(thd, var_type, base);
pthread_mutex_unlock(&LOCK_global_system_variables);
- return new Item_int((longlong) value);
+ return new Item_int((ulonglong) value);
}
case SHOW_MY_BOOL:
{
@@ -1611,7 +1782,7 @@ uchar *sys_var_thd_bit::value_ptr(THD *thd, enum_var_type type,
}
-/* Update a date_time format variable based on given value */
+/** Update a date_time format variable based on given value. */
void sys_var_thd_date_time_format::update2(THD *thd, enum_var_type type,
DATE_TIME_FORMAT *new_value)
@@ -1861,6 +2032,21 @@ CHARSET_INFO **sys_var_character_set_sv::ci_ptr(THD *thd, enum_var_type type)
}
+bool sys_var_character_set_client::check(THD *thd, set_var *var)
+{
+ if (sys_var_character_set_sv::check(thd, var))
+ return 1;
+ /* Currently, UCS-2 cannot be used as a client character set */
+ if (var->save_result.charset->mbminlen > 1)
+ {
+ my_error(ER_WRONG_VALUE_FOR_VAR, MYF(0), name,
+ var->save_result.charset->csname);
+ return 1;
+ }
+ return 0;
+}
+
+
CHARSET_INFO ** sys_var_character_set_database::ci_ptr(THD *thd,
enum_var_type type)
{
@@ -2008,7 +2194,7 @@ bool sys_var_key_buffer_size::update(THD *thd, set_var *var)
}
key_cache->param_buff_size=
- (ulonglong) getopt_ull_limit_value(tmp, option_limits);
+ (ulonglong) fix_unsigned(thd, tmp, option_limits);
/* If key cache didn't existed initialize it, else resize it */
key_cache->in_init= 1;
@@ -2028,6 +2214,12 @@ end:
}
+/**
+ @todo
+ Abort if some other thread is changing the key cache.
+ This should be changed so that we wait until the previous
+ assignment is done and then do the new assign
+*/
bool sys_var_key_cache_long::update(THD *thd, set_var *var)
{
ulong tmp= (ulong) var->value->val_int();
@@ -2056,7 +2248,7 @@ bool sys_var_key_cache_long::update(THD *thd, set_var *var)
goto end;
*((ulong*) (((char*) key_cache) + offset))=
- (ulong) getopt_ull_limit_value(tmp, option_limits);
+ (ulong) fix_unsigned(thd, tmp, option_limits);
/*
Don't create a new key cache if it didn't exist
@@ -2290,6 +2482,13 @@ uchar *sys_var_log_output::value_ptr(THD *thd, enum_var_type type,
int set_var_collation_client::check(THD *thd)
{
+ /* Currently, UCS-2 cannot be used as a client character set */
+ if (character_set_client->mbminlen > 1)
+ {
+ my_error(ER_WRONG_VALUE_FOR_VAR, MYF(0), "character_set_client",
+ character_set_client->csname);
+ return 1;
+ }
return 0;
}
@@ -2731,23 +2930,20 @@ static uchar *get_error_count(THD *thd)
}
-/*
- Get the tmpdir that was specified or chosen by default
+/**
+ Get the tmpdir that was specified or chosen by default.
- SYNOPSIS
- get_tmpdir()
- thd thread handle
+ This is necessary because if the user does not specify a temporary
+ directory via the command line, one is chosen based on the environment
+ or system defaults. But we can't just always use mysql_tmpdir, because
+ that is actually a call to my_tmpdir() which cycles among possible
+ temporary directories.
- DESCRIPTION
- This is necessary because if the user does not specify a temporary
- directory via the command line, one is chosen based on the environment
- or system defaults. But we can't just always use mysql_tmpdir, because
- that is actually a call to my_tmpdir() which cycles among possible
- temporary directories.
+ @param thd thread handle
- RETURN VALUES
+ @retval
ptr pointer to NUL-terminated string
- */
+*/
static uchar *get_tmpdir(THD *thd)
{
if (opt_mysql_tmpdir)
@@ -2762,16 +2958,16 @@ static uchar *get_tmpdir(THD *thd)
- Update loop
****************************************************************************/
-/*
- Find variable name in option my_getopt structure used for command line args
+/**
+ Find variable name in option my_getopt structure used for
+ command line args.
- SYNOPSIS
- find_option()
- opt option structure array to search in
- name variable name
+ @param opt option structure array to search in
+ @param name variable name
- RETURN VALUES
+ @retval
0 Error
+ @retval
ptr pointer to option structure
*/
@@ -2794,8 +2990,8 @@ static struct my_option *find_option(struct my_option *opt, const char *name)
}
-/*
- Return variable name and length for hashing of variables
+/**
+ Return variable name and length for hashing of variables.
*/
static uchar *get_sys_var_length(const sys_var *var, size_t *length,
@@ -2998,17 +3194,17 @@ int mysql_append_static_vars(const SHOW_VAR *show_vars, uint count)
}
-/*
- Find a user set-table variable
+/**
+ Find a user set-table variable.
- SYNOPSIS
- intern_find_sys_var()
- str Name of system variable to find
- length Length of variable. zero means that we should use strlen()
- on the variable
+ @param str Name of system variable to find
+ @param length Length of variable. zero means that we should use strlen()
+ on the variable
+ @param no_error Refuse to emit an error, even if one occurred.
- RETURN VALUES
+ @retval
pointer pointer to variable definitions
+ @retval
0 Unknown variable (error message is given)
*/
@@ -3029,25 +3225,23 @@ sys_var *intern_find_sys_var(const char *str, uint length, bool no_error)
}
-/*
- Execute update of all variables
-
- SYNOPSIS
+/**
+ Execute update of all variables.
- sql_set
- THD Thread id
- set_var List of variables to update
+ First run a check of all variables that all updates will go ok.
+ If yes, then execute all updates, returning an error if any one failed.
- DESCRIPTION
- First run a check of all variables that all updates will go ok.
- If yes, then execute all updates, returning an error if any one failed.
+ This should ensure that in all normal cases none all or variables are
+ updated.
- This should ensure that in all normal cases none all or variables are
- updated
+ @param THD Thread id
+ @param var_list List of variables to update
- RETURN VALUE
+ @retval
0 ok
+ @retval
1 ERROR, message sent (normally no variables was updated)
+ @retval
-1 ERROR, message not sent
*/
@@ -3063,7 +3257,7 @@ int sql_set_variables(THD *thd, List<set_var_base> *var_list)
if ((error= var->check(thd)))
goto err;
}
- if (!(error= test(thd->net.report_error)))
+ if (!(error= test(thd->is_error())))
{
it.rewind();
while ((var= it++))
@@ -3076,20 +3270,19 @@ err:
}
-/*
- Say if all variables set by a SET support the ONE_SHOT keyword (currently,
- only character set and collation do; later timezones will).
-
- SYNOPSIS
+/**
+ Say if all variables set by a SET support the ONE_SHOT keyword
+ (currently, only character set and collation do; later timezones
+ will).
- not_all_support_one_shot
- set_var List of variables to update
+ @param var_list List of variables to update
- NOTES
+ @note
It has a "not_" because it makes faster tests (no need to "!")
- RETURN VALUE
+ @retval
0 all variables of the list support ONE_SHOT
+ @retval
1 at least one does not support ONE_SHOT
*/
@@ -3148,17 +3341,17 @@ int set_var::check(THD *thd)
}
-/*
- Check variable, but without assigning value (used by PS)
+/**
+ Check variable, but without assigning value (used by PS).
- SYNOPSIS
- set_var::light_check()
- thd thread handler
+ @param thd thread handler
- RETURN VALUE
+ @retval
0 ok
+ @retval
1 ERROR, message sent (normally no variables was updated)
- -1 ERROR, message not sent
+ @retval
+ -1 ERROR, message not sent
*/
int set_var::light_check(THD *thd)
{
@@ -3177,7 +3370,18 @@ int set_var::light_check(THD *thd)
return 0;
}
+/**
+ Update variable
+ @param thd thread handler
+ @returns 0|1 ok or ERROR
+
+ @note ERROR can be only due to abnormal operations involving
+ the server's execution evironment such as
+ out of memory, hard disk failure or the computer blows up.
+ Consider set_var::check() method if there is a need to return
+ an error due to logics.
+*/
int set_var::update(THD *thd)
{
if (!value)
@@ -3205,17 +3409,17 @@ int set_var_user::check(THD *thd)
}
-/*
- Check variable, but without assigning value (used by PS)
+/**
+ Check variable, but without assigning value (used by PS).
- SYNOPSIS
- set_var_user::light_check()
- thd thread handler
+ @param thd thread handler
- RETURN VALUE
+ @retval
0 ok
+ @retval
1 ERROR, message sent (normally no variables was updated)
- -1 ERROR, message not sent
+ @retval
+ -1 ERROR, message not sent
*/
int set_var_user::light_check(THD *thd)
{
@@ -3389,13 +3593,15 @@ bool sys_var_thd_table_type::update(THD *thd, set_var *var)
Functions to handle sql_mode
****************************************************************************/
-/*
- Make string representation of mode
+/**
+ Make string representation of mode.
- SYNOPSIS
- thd in thread handler
- val in sql_mode value
- rep out pointer pointer to string with sql_mode representation
+ @param[in] thd thread handler
+ @param[in] val sql_mode value
+ @param[out] len pointer on length of string
+
+ @return
+ pointer to string with sql_mode representation
*/
bool
@@ -3466,7 +3672,7 @@ void fix_sql_mode_var(THD *thd, enum_var_type type)
}
}
-/* Map database specific bits to function bits */
+/** Map database specific bits to function bits. */
ulong fix_sql_mode(ulong sql_mode)
{
@@ -3693,7 +3899,7 @@ bool sys_var_opt_readonly::update(THD *thd, set_var *var)
can cause to wait on a read lock, it's required for the client application
to unlock everything, and acceptable for the server to wait on all locks.
*/
- if (result= close_cached_tables(thd, true, NULL, false))
+ if (result= close_cached_tables(thd, NULL, FALSE, TRUE, TRUE))
goto end_with_read_lock;
if (result= make_global_read_lock_block_commit(thd))
diff --git a/sql/set_var.h b/sql/set_var.h
index eb2c893c89e..171158fcf1e 100644
--- a/sql/set_var.h
+++ b/sql/set_var.h
@@ -30,7 +30,8 @@ class sys_var_pluginvar; /* opaque */
typedef struct system_variables SV;
typedef struct my_locale_st MY_LOCALE;
-extern TYPELIB bool_typelib, delay_key_write_typelib, sql_mode_typelib;
+extern TYPELIB bool_typelib, delay_key_write_typelib, sql_mode_typelib,
+ slave_exec_mode_typelib;
typedef int (*sys_check_func)(THD *, set_var *);
typedef bool (*sys_update_func)(THD *, set_var *);
@@ -305,6 +306,24 @@ public:
};
+class sys_var_enum_const :public sys_var
+{
+ ulong SV::*offset;
+ TYPELIB *enum_names;
+public:
+ sys_var_enum_const(sys_var_chain *chain, const char *name_arg, ulong SV::*offset_arg,
+ TYPELIB *typelib, sys_after_update_func func)
+ :sys_var(name_arg,func), offset(offset_arg), enum_names(typelib)
+ { chain_sys_var(chain); }
+ bool check(THD *thd, set_var *var) { return 1; }
+ bool update(THD *thd, set_var *var) { return 1; }
+ SHOW_TYPE show_type() { return SHOW_CHAR; }
+ bool check_update_type(Item_result type) { return 1; }
+ bool is_readonly() const { return 1; }
+ uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
+};
+
+
class sys_var_thd :public sys_var
{
public:
@@ -379,6 +398,7 @@ public:
void set_default(THD *thd, enum_var_type type);
SHOW_TYPE show_type() { return SHOW_LONGLONG; }
uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
+ bool check(THD *thd, set_var *var);
bool check_default(enum_var_type type)
{
return type == OPT_GLOBAL && !option_limits;
@@ -667,6 +687,20 @@ public:
};
+class sys_var_character_set_client: public sys_var_character_set_sv
+{
+public:
+ sys_var_character_set_client(sys_var_chain *chain, const char *name_arg,
+ CHARSET_INFO *SV::*offset_arg,
+ CHARSET_INFO **global_default_arg,
+ bool is_nullable= 0)
+ : sys_var_character_set_sv(chain, name_arg, offset_arg, global_default_arg,
+ is_nullable)
+ { }
+ bool check(THD *thd, set_var *var);
+};
+
+
class sys_var_character_set_database :public sys_var_character_set
{
public:
@@ -771,6 +805,42 @@ public:
};
+class sys_var_set :public sys_var
+{
+protected:
+ ulong *value;
+ TYPELIB *enum_names;
+public:
+ sys_var_set(sys_var_chain *chain, const char *name_arg, ulong *value_arg,
+ TYPELIB *typelib, sys_after_update_func func)
+ :sys_var(name_arg, func), value(value_arg), enum_names(typelib)
+ { chain_sys_var(chain); }
+ virtual bool check(THD *thd, set_var *var)
+ {
+ return check_set(thd, var, enum_names);
+ }
+ virtual void set_default(THD *thd, enum_var_type type)
+ {
+ *value= 0;
+ }
+ bool update(THD *thd, set_var *var);
+ uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
+ bool check_update_type(Item_result type) { return 0; }
+ SHOW_TYPE show_type() { return SHOW_CHAR; }
+};
+
+class sys_var_set_slave_mode :public sys_var_set
+{
+public:
+ sys_var_set_slave_mode(sys_var_chain *chain, const char *name_arg,
+ ulong *value_arg,
+ TYPELIB *typelib, sys_after_update_func func) :
+ sys_var_set(chain, name_arg, value_arg, typelib, func) {}
+ void set_default(THD *thd, enum_var_type type);
+ bool check(THD *thd, set_var *var);
+ bool update(THD *thd, set_var *var);
+};
+
class sys_var_log_output :public sys_var
{
ulong *value;
@@ -1189,6 +1259,7 @@ sys_var *find_sys_var(THD *thd, const char *str, uint length=0);
int sql_set_variables(THD *thd, List<set_var_base> *var_list);
bool not_all_support_one_shot(List<set_var_base> *var_list);
void fix_delay_key_write(THD *thd, enum_var_type type);
+void fix_slave_exec_mode(enum_var_type type);
ulong fix_sql_mode(ulong sql_mode);
extern sys_var_const_str sys_charset_system;
extern sys_var_str sys_init_connect;
diff --git a/sql/share/errmsg.txt b/sql/share/errmsg.txt
index 8fad09eb221..026a0023660 100644
--- a/sql/share/errmsg.txt
+++ b/sql/share/errmsg.txt
@@ -5658,6 +5658,8 @@ ER_TOO_HIGH_LEVEL_OF_NESTING_FOR_SELECT
eng "Too high level of nesting for select"
ER_NAME_BECOMES_EMPTY
eng "Name '%-.64s' has become ''"
+ER_AMBIGUOUS_FIELD_TERM
+ eng "First character of the FIELDS TERMINATED string is ambiguous; please use non-optional and non-empty FIELDS ENCLOSED BY"
ER_FOREIGN_SERVER_EXISTS
eng "The foreign server, %s, you are trying to create already exists."
ER_FOREIGN_SERVER_DOESNT_EXIST
@@ -5667,9 +5669,9 @@ ER_ILLEGAL_HA_CREATE_OPTION
eng "Table storage engine '%-.64s' does not support the create option '%.64s'"
ger "Speicher-Engine '%-.64s' der Tabelle unterstützt die Option '%.64s' nicht"
ER_PARTITION_REQUIRES_VALUES_ERROR
- eng "%-.64s PARTITIONING requires definition of VALUES %-.64s for each partition"
- ger "%-.64s-PARTITIONierung erfordert Definition von VALUES %-.64s für jede Partition"
- swe "%-.64s PARTITIONering kräver definition av VALUES %-.64s för varje partition"
+ eng "Syntax error: %-.64s PARTITIONING requires definition of VALUES %-.64s for each partition"
+ ger "Fehler in der SQL-Syntax: %-.64s-PARTITIONierung erfordert Definition von VALUES %-.64s für jede Partition"
+ swe "Syntaxfel: %-.64s PARTITIONering kräver definition av VALUES %-.64s för varje partition"
ER_PARTITION_WRONG_VALUES_ERROR
eng "Only %-.64s PARTITIONING can use VALUES %-.64s in partition definition"
ger "Nur %-.64s-PARTITIONierung kann VALUES %-.64s in der Partitionsdefinition verwenden"
@@ -6112,3 +6114,8 @@ ER_TRG_CANT_OPEN_TABLE
ER_CANT_CREATE_SROUTINE
eng "Cannot create stored routine `%-.64s`. Check warnings"
+ER_SLAVE_AMBIGOUS_EXEC_MODE
+ eng "Ambiguous slave modes combination. %s"
+
+ER_NO_FORMAT_DESCRIPTION_EVENT_BEFORE_BINLOG_STATEMENT
+ eng "The BINLOG statement of type `%s` was not preceded by a format description BINLOG statement."
diff --git a/sql/slave.cc b/sql/slave.cc
index fcbd4eb841b..4ffc2023e85 100644
--- a/sql/slave.cc
+++ b/sql/slave.cc
@@ -13,6 +13,17 @@
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
+
+ @brief Code to run the io thread and the sql thread on the
+ replication slave.
+*/
+
#include "mysql_priv.h"
#include <mysql.h>
@@ -33,10 +44,6 @@
#include "rpl_tblmap.h"
-int queue_event(Master_info* mi,const char* buf,ulong event_len);
-static Log_event* next_event(Relay_log_info* rli);
-
-
#define FLAGSTR(V,F) ((V)&(F)?#F" ":"")
#define MAX_SLAVE_RETRY_PAUSE 5
@@ -132,11 +139,13 @@ static int create_table_from_dump(THD* thd, MYSQL *mysql, const char* db,
const char* table_name, bool overwrite);
static int get_master_version_and_clock(MYSQL* mysql, Master_info* mi);
static Log_event* next_event(Relay_log_info* rli);
+static int queue_event(Master_info* mi,const char* buf,ulong event_len);
static int terminate_slave_thread(THD *thd,
pthread_mutex_t* term_lock,
pthread_cond_t* term_cond,
volatile uint *slave_running,
bool skip_lock);
+static bool check_io_slave_killed(THD *thd, Master_info *mi, const char *info);
/*
Find out which replications threads are running
@@ -821,7 +830,7 @@ static int get_master_version_and_clock(MYSQL* mysql, Master_info* mi)
mi->clock_diff_with_master=
(long) (time((time_t*) 0) - strtoul(master_row[0], 0, 10));
}
- else
+ else if (!check_io_slave_killed(mi->io_thd, mi, NULL))
{
mi->clock_diff_with_master= 0; /* The "most sensible" value */
sql_print_warning("\"SELECT UNIX_TIMESTAMP()\" failed on master, "
@@ -980,24 +989,31 @@ static int create_table_from_dump(THD* thd, MYSQL *mysql, const char* db,
DBUG_RETURN(1);
}
thd->query= query;
- thd->query_error = 0;
- thd->net.no_send_ok = 1;
+ thd->is_slave_error = 0;
bzero((char*) &tables,sizeof(tables));
tables.db = (char*)db;
tables.alias= tables.table_name= (char*)table_name;
/* Drop the table if 'overwrite' is true */
- if (overwrite && mysql_rm_table(thd,&tables,1,0)) /* drop if exists */
+ if (overwrite)
{
- sql_print_error("create_table_from_dump: failed to drop the table");
- goto err;
+ if (mysql_rm_table(thd,&tables,1,0)) /* drop if exists */
+ {
+ sql_print_error("create_table_from_dump: failed to drop the table");
+ goto err;
+ }
+ else
+ {
+ /* Clear the OK result of mysql_rm_table(). */
+ thd->main_da.reset_diagnostics_area();
+ }
}
/* Create the table. We do not want to log the "create table" statement */
save_options = thd->options;
- thd->options &= ~(ulong) (OPTION_BIN_LOG);
- thd->proc_info = "Creating table from master dump";
+ thd->options &= ~ (OPTION_BIN_LOG);
+ thd_proc_info(thd, "Creating table from master dump");
// save old db in case we are creating in a different database
save_db = thd->db;
save_db_length= thd->db_length;
@@ -1009,10 +1025,17 @@ static int create_table_from_dump(THD* thd, MYSQL *mysql, const char* db,
thd->db_length= save_db_length;
thd->options = save_options;
- if (thd->query_error)
+ if (thd->is_slave_error)
goto err; // mysql_parse took care of the error send
- thd->proc_info = "Opening master dump table";
+ thd_proc_info(thd, "Opening master dump table");
+ thd->main_da.reset_diagnostics_area(); /* cleanup from CREATE_TABLE */
+ /*
+ Note: If this function starts to fail for MERGE tables,
+ change the next two lines to these:
+ tables.table= NULL; // was set by mysql_rm_table()
+ if (!open_n_lock_single_table(thd, &tables, TL_WRITE))
+ */
tables.lock_type = TL_WRITE;
if (!open_ltable(thd, &tables, TL_WRITE, 0))
{
@@ -1021,7 +1044,7 @@ static int create_table_from_dump(THD* thd, MYSQL *mysql, const char* db,
}
file = tables.table->file;
- thd->proc_info = "Reading master dump table data";
+ thd_proc_info(thd, "Reading master dump table data");
/* Copy the data file */
if (file->net_read_dump(net))
{
@@ -1033,7 +1056,7 @@ static int create_table_from_dump(THD* thd, MYSQL *mysql, const char* db,
check_opt.init();
check_opt.flags|= T_VERY_SILENT | T_CALC_CHECKSUM | T_QUICK;
- thd->proc_info = "Rebuilding the index on master dump table";
+ thd_proc_info(thd, "Rebuilding the index on master dump table");
/*
We do not want repair() to spam us with messages
just send them to the error log, and report the failure in case of
@@ -1049,7 +1072,6 @@ static int create_table_from_dump(THD* thd, MYSQL *mysql, const char* db,
err:
close_thread_tables(thd);
- thd->net.no_send_ok = 0;
DBUG_RETURN(error);
}
@@ -1101,7 +1123,6 @@ int fetch_master_table(THD *thd, const char *db_name, const char *table_name,
error = 0;
err:
- thd->net.no_send_ok = 0; // Clear up garbage after create_table_from_dump
if (!called_connected)
mysql_close(mysql);
if (errmsg && thd->vio_ok())
@@ -1223,7 +1244,7 @@ int register_slave_on_master(MYSQL* mysql, Master_info *mi,
{
*suppress_warnings= TRUE; // Suppress reconnect warning
}
- else
+ else if (!check_io_slave_killed(mi->io_thd, mi, NULL))
{
char buf[256];
my_snprintf(buf, sizeof(buf), "%s (Errno: %d)", mysql_error(mysql),
@@ -1510,11 +1531,12 @@ static int init_slave_thread(THD* thd, SLAVE_THD_TYPE thd_type)
delete thd;
DBUG_RETURN(-1);
}
+ lex_start(thd);
if (thd_type == SLAVE_THD_SQL)
- thd->proc_info= "Waiting for the next event in relay log";
+ thd_proc_info(thd, "Waiting for the next event in relay log");
else
- thd->proc_info= "Waiting for master update";
+ thd_proc_info(thd, "Waiting for master update");
thd->version=refresh_version;
thd->set_time();
DBUG_RETURN(0);
@@ -1716,13 +1738,28 @@ static int has_temporary_error(THD *thd)
if (thd->is_fatal_error)
DBUG_RETURN(0);
+ DBUG_EXECUTE_IF("all_errors_are_temporary_errors",
+ if (thd->main_da.is_error())
+ {
+ thd->clear_error();
+ my_error(ER_LOCK_DEADLOCK, MYF(0));
+ });
+
+ /*
+ If there is no message in THD, we can't say if it's a temporary
+ error or not. This is currently the case for Incident_log_event,
+ which sets no message. Return FALSE.
+ */
+ if (!thd->is_error())
+ DBUG_RETURN(0);
+
/*
Temporary error codes:
currently, InnoDB deadlock detected by InnoDB or lock
wait timeout (innodb_lock_wait_timeout exceeded
*/
- if (thd->net.last_errno == ER_LOCK_DEADLOCK ||
- thd->net.last_errno == ER_LOCK_WAIT_TIMEOUT)
+ if (thd->main_da.sql_errno() == ER_LOCK_DEADLOCK ||
+ thd->main_da.sql_errno() == ER_LOCK_WAIT_TIMEOUT)
DBUG_RETURN(1);
#ifdef HAVE_NDB_BINLOG
@@ -1746,6 +1783,175 @@ static int has_temporary_error(THD *thd)
DBUG_RETURN(0);
}
+
+/**
+ Applies the given event and advances the relay log position.
+
+ In essence, this function does:
+
+ @code
+ ev->apply_event(rli);
+ ev->update_pos(rli);
+ @endcode
+
+ But it also does some maintainance, such as skipping events if
+ needed and reporting errors.
+
+ If the @c skip flag is set, then it is tested whether the event
+ should be skipped, by looking at the slave_skip_counter and the
+ server id. The skip flag should be set when calling this from a
+ replication thread but not set when executing an explicit BINLOG
+ statement.
+
+ @retval 0 OK.
+
+ @retval 1 Error calling ev->apply_event().
+
+ @retval 2 No error calling ev->apply_event(), but error calling
+ ev->update_pos().
+*/
+int apply_event_and_update_pos(Log_event* ev, THD* thd, Relay_log_info* rli,
+ bool skip)
+{
+ int exec_res= 0;
+
+ DBUG_ENTER("apply_event_and_update_pos");
+
+ DBUG_PRINT("exec_event",("%s(type_code: %d; server_id: %d)",
+ ev->get_type_str(), ev->get_type_code(),
+ ev->server_id));
+ DBUG_PRINT("info", ("thd->options: %s%s; rli->last_event_start_time: %lu",
+ FLAGSTR(thd->options, OPTION_NOT_AUTOCOMMIT),
+ FLAGSTR(thd->options, OPTION_BEGIN),
+ rli->last_event_start_time));
+
+ /*
+ Execute the event to change the database and update the binary
+ log coordinates, but first we set some data that is needed for
+ the thread.
+
+ The event will be executed unless it is supposed to be skipped.
+
+ Queries originating from this server must be skipped. Low-level
+ events (Format_description_log_event, Rotate_log_event,
+ Stop_log_event) from this server must also be skipped. But for
+ those we don't want to modify 'group_master_log_pos', because
+ these events did not exist on the master.
+ Format_description_log_event is not completely skipped.
+
+ Skip queries specified by the user in 'slave_skip_counter'. We
+ can't however skip events that has something to do with the log
+ files themselves.
+
+ Filtering on own server id is extremely important, to ignore
+ execution of events created by the creation/rotation of the relay
+ log (remember that now the relay log starts with its Format_desc,
+ has a Rotate etc).
+ */
+
+ thd->server_id = ev->server_id; // use the original server id for logging
+ thd->set_time(); // time the query
+ thd->lex->current_select= 0;
+ if (!ev->when)
+ ev->when= my_time(0);
+ ev->thd = thd; // because up to this point, ev->thd == 0
+
+ if (skip)
+ {
+ int reason= ev->shall_skip(rli);
+ if (reason == Log_event::EVENT_SKIP_COUNT)
+ --rli->slave_skip_counter;
+ pthread_mutex_unlock(&rli->data_lock);
+ if (reason == Log_event::EVENT_SKIP_NOT)
+ exec_res= ev->apply_event(rli);
+#ifndef DBUG_OFF
+ /*
+ This only prints information to the debug trace.
+
+ TODO: Print an informational message to the error log?
+ */
+ static const char *const explain[] = {
+ // EVENT_SKIP_NOT,
+ "not skipped",
+ // EVENT_SKIP_IGNORE,
+ "skipped because event should be ignored",
+ // EVENT_SKIP_COUNT
+ "skipped because event skip counter was non-zero"
+ };
+ DBUG_PRINT("info", ("OPTION_BEGIN: %d; IN_STMT: %d",
+ thd->options & OPTION_BEGIN ? 1 : 0,
+ rli->get_flag(Relay_log_info::IN_STMT)));
+ DBUG_PRINT("skip_event", ("%s event was %s",
+ ev->get_type_str(), explain[reason]));
+#endif
+ }
+ else
+ exec_res= ev->apply_event(rli);
+
+ DBUG_PRINT("info", ("apply_event error = %d", exec_res));
+ if (exec_res == 0)
+ {
+ int error= ev->update_pos(rli);
+ char buf[22];
+ DBUG_PRINT("info", ("update_pos error = %d", error));
+ DBUG_PRINT("info", ("group %s %s",
+ llstr(rli->group_relay_log_pos, buf),
+ rli->group_relay_log_name));
+ DBUG_PRINT("info", ("event %s %s",
+ llstr(rli->event_relay_log_pos, buf),
+ rli->event_relay_log_name));
+ /*
+ The update should not fail, so print an error message and
+ return an error code.
+
+ TODO: Replace this with a decent error message when merged
+ with BUG#24954 (which adds several new error message).
+ */
+ if (error)
+ {
+ rli->report(ERROR_LEVEL, ER_UNKNOWN_ERROR,
+ "It was not possible to update the positions"
+ " of the relay log information: the slave may"
+ " be in an inconsistent state."
+ " Stopped in %s position %s",
+ rli->group_relay_log_name,
+ llstr(rli->group_relay_log_pos, buf));
+ DBUG_RETURN(2);
+ }
+ }
+
+ DBUG_RETURN(exec_res ? 1 : 0);
+}
+
+
+/**
+ Top-level function for executing the next event from the relay log.
+
+ This function reads the event from the relay log, executes it, and
+ advances the relay log position. It also handles errors, etc.
+
+ This function may fail to apply the event for the following reasons:
+
+ - The position specfied by the UNTIL condition of the START SLAVE
+ command is reached.
+
+ - It was not possible to read the event from the log.
+
+ - The slave is killed.
+
+ - An error occurred when applying the event, and the event has been
+ tried slave_trans_retries times. If the event has been retried
+ fewer times, 0 is returned.
+
+ - init_master_info or init_relay_log_pos failed. (These are called
+ if a failure occurs when applying the event.)</li>
+
+ - An error occurred when updating the binlog position.
+
+ @retval 0 The event was applied.
+
+ @retval 1 The event was not applied.
+*/
static int exec_relay_log_event(THD* thd, Relay_log_info* rli)
{
DBUG_ENTER("exec_relay_log_event");
@@ -1791,121 +1997,30 @@ static int exec_relay_log_event(THD* thd, Relay_log_info* rli)
}
if (ev)
{
- int const type_code= ev->get_type_code();
- int exec_res= 0;
+ int exec_res= apply_event_and_update_pos(ev, thd, rli, TRUE);
/*
+ Format_description_log_event should not be deleted because it will be
+ used to read info about the relay log's format; it will be deleted when
+ the SQL thread does not need it, i.e. when this thread terminates.
*/
-
- DBUG_PRINT("exec_event",("%s(type_code: %d; server_id: %d)",
- ev->get_type_str(), type_code, ev->server_id));
- DBUG_PRINT("info", ("thd->options: %s%s; rli->last_event_start_time: %lu",
- FLAGSTR(thd->options, OPTION_NOT_AUTOCOMMIT),
- FLAGSTR(thd->options, OPTION_BEGIN),
- rli->last_event_start_time));
-
-
-
- /*
- Execute the event to change the database and update the binary
- log coordinates, but first we set some data that is needed for
- the thread.
-
- The event will be executed unless it is supposed to be skipped.
-
- Queries originating from this server must be skipped. Low-level
- events (Format_description_log_event, Rotate_log_event,
- Stop_log_event) from this server must also be skipped. But for
- those we don't want to modify 'group_master_log_pos', because
- these events did not exist on the master.
- Format_description_log_event is not completely skipped.
-
- Skip queries specified by the user in 'slave_skip_counter'. We
- can't however skip events that has something to do with the log
- files themselves.
-
- Filtering on own server id is extremely important, to ignore
- execution of events created by the creation/rotation of the relay
- log (remember that now the relay log starts with its Format_desc,
- has a Rotate etc).
- */
-
- thd->server_id = ev->server_id; // use the original server id for logging
- thd->set_time(); // time the query
- thd->lex->current_select= 0;
- if (!ev->when)
- ev->when= my_time(0);
- ev->thd = thd; // because up to this point, ev->thd == 0
-
- int reason= ev->shall_skip(rli);
- if (reason == Log_event::EVENT_SKIP_COUNT)
- --rli->slave_skip_counter;
- pthread_mutex_unlock(&rli->data_lock);
- if (reason == Log_event::EVENT_SKIP_NOT)
- exec_res= ev->apply_event(rli);
-#ifndef DBUG_OFF
- /*
- This only prints information to the debug trace.
-
- TODO: Print an informational message to the error log?
- */
- static const char *const explain[] = {
- // EVENT_SKIP_NOT,
- "not skipped",
- // EVENT_SKIP_IGNORE,
- "skipped because event originated from this server",
- // EVENT_SKIP_COUNT
- "skipped because event skip counter was non-zero"
- };
- DBUG_PRINT("skip_event", ("%s event was %s",
- ev->get_type_str(), explain[reason]));
-#endif
-
- DBUG_PRINT("info", ("apply_event error = %d", exec_res));
- if (exec_res == 0)
+ if (ev->get_type_code() != FORMAT_DESCRIPTION_EVENT)
{
- int error= ev->update_pos(rli);
- char buf[22];
- DBUG_PRINT("info", ("update_pos error = %d", error));
- DBUG_PRINT("info", ("group %s %s",
- llstr(rli->group_relay_log_pos, buf),
- rli->group_relay_log_name));
- DBUG_PRINT("info", ("event %s %s",
- llstr(rli->event_relay_log_pos, buf),
- rli->event_relay_log_name));
- /*
- The update should not fail, so print an error message and
- return an error code.
-
- TODO: Replace this with a decent error message when merged
- with BUG#24954 (which adds several new error message).
- */
- if (error)
- {
- rli->report(ERROR_LEVEL, ER_UNKNOWN_ERROR,
- "It was not possible to update the positions"
- " of the relay log information: the slave may"
- " be in an inconsistent state."
- " Stopped in %s position %s",
- rli->group_relay_log_name,
- llstr(rli->group_relay_log_pos, buf));
- DBUG_RETURN(1);
- }
+ DBUG_PRINT("info", ("Deleting the event after it has been executed"));
+ delete ev;
}
/*
- Format_description_log_event should not be deleted because it will be
- used to read info about the relay log's format; it will be deleted when
- the SQL thread does not need it, i.e. when this thread terminates.
+ update_log_pos failed: this should not happen, so we don't
+ retry.
*/
- if (type_code != FORMAT_DESCRIPTION_EVENT)
- {
- DBUG_PRINT("info", ("Deleting the event after it has been executed"));
- delete ev;
- }
+ if (exec_res == 2)
+ DBUG_RETURN(1);
+
if (slave_trans_retries)
{
- if (exec_res && has_temporary_error(thd))
+ int temp_err;
+ if (exec_res && (temp_err= has_temporary_error(thd)))
{
const char *errmsg;
/*
@@ -1953,15 +2068,19 @@ static int exec_relay_log_event(THD* thd, Relay_log_info* rli)
"the slave_transaction_retries variable.",
slave_trans_retries);
}
- else if (!((thd->options & OPTION_BEGIN) && opt_using_transactions))
+ else if (exec_res && !temp_err ||
+ (opt_using_transactions &&
+ rli->group_relay_log_pos == rli->event_relay_log_pos))
{
/*
- Only reset the retry counter if the event succeeded or
- failed with a non-transient error. On a successful event,
- the execution will proceed as usual; in the case of a
+ Only reset the retry counter if the entire group succeeded
+ or failed with a non-transient error. On a successful
+ event, the execution will proceed as usual; in the case of a
non-transient error, the slave will stop with an error.
*/
rli->trans_retries= 0; // restart from fresh
+ DBUG_PRINT("info", ("Resetting retry counter, rli->trans_retries: %lu",
+ rli->trans_retries));
}
}
DBUG_RETURN(exec_res);
@@ -1985,7 +2104,7 @@ static bool check_io_slave_killed(THD *thd, Master_info *mi, const char *info)
{
if (io_slave_killed(thd, mi))
{
- if (global_system_variables.log_warnings)
+ if (info && global_system_variables.log_warnings)
sql_print_information(info);
return TRUE;
}
@@ -2131,7 +2250,7 @@ pthread_handler_t handle_slave_io(void *arg)
goto err;
}
- thd->proc_info = "Connecting to master";
+ thd_proc_info(thd, "Connecting to master");
// we can get killed during safe_connect
if (!safe_connect(thd, mysql, mi))
{
@@ -2158,7 +2277,7 @@ connected:
// TODO: the assignment below should be under mutex (5.0)
mi->slave_running= MYSQL_SLAVE_RUN_CONNECT;
thd->slave_net = &mysql->net;
- thd->proc_info = "Checking master version";
+ thd_proc_info(thd, "Checking master version");
if (get_master_version_and_clock(mysql, mi))
goto err;
@@ -2167,14 +2286,18 @@ connected:
/*
Register ourselves with the master.
*/
- thd->proc_info = "Registering slave on master";
+ thd_proc_info(thd, "Registering slave on master");
if (register_slave_on_master(mysql, mi, &suppress_warnings))
{
- sql_print_error("Slave I/O thread couldn't register on master");
- if (check_io_slave_killed(thd, mi, "Slave I/O thread killed while \
-registering slave on master") ||
- try_to_reconnect(thd, mysql, mi, &retry_count, suppress_warnings,
- reconnect_messages[SLAVE_RECON_ACT_REG]))
+ if (!check_io_slave_killed(thd, mi, "Slave I/O thread killed "
+ "while registering slave on master"))
+ {
+ sql_print_error("Slave I/O thread couldn't register on master");
+ if (try_to_reconnect(thd, mysql, mi, &retry_count, suppress_warnings,
+ reconnect_messages[SLAVE_RECON_ACT_REG]))
+ goto err;
+ }
+ else
goto err;
goto connected;
}
@@ -2193,7 +2316,7 @@ registering slave on master") ||
DBUG_PRINT("info",("Starting reading binary log from master"));
while (!io_slave_killed(thd,mi))
{
- thd->proc_info = "Requesting binlog dump";
+ thd_proc_info(thd, "Requesting binlog dump");
if (request_dump(mysql, mi, &suppress_warnings))
{
sql_print_error("Failed on request_dump()");
@@ -2224,7 +2347,7 @@ requesting master dump") ||
important thing is to not confuse users by saying "reading" whereas
we're in fact receiving nothing.
*/
- thd->proc_info= "Waiting for master to send event";
+ thd_proc_info(thd, "Waiting for master to send event");
event_len= read_event(mysql, mi, &suppress_warnings);
if (check_io_slave_killed(thd, mi, "Slave I/O thread killed while \
reading event"))
@@ -2268,7 +2391,7 @@ Stopping slave I/O thread due to out-of-memory error from master");
} // if (event_len == packet_error)
retry_count=0; // ok event, reset retry counter
- thd->proc_info = "Queueing master event to the relay log";
+ thd_proc_info(thd, "Queueing master event to the relay log");
if (queue_event(mi,(const char*)mysql->net.read_pos + 1,
event_len))
{
@@ -2343,7 +2466,7 @@ err:
mi->mysql=0;
}
write_ignored_events_info_to_relay_log(thd, mi);
- thd->proc_info = "Waiting for slave mutex on exit";
+ thd_proc_info(thd, "Waiting for slave mutex on exit");
pthread_mutex_lock(&mi->run_lock);
/* Forget the relay log's format */
@@ -2353,7 +2476,7 @@ err:
change_rpl_status(RPL_ACTIVE_SLAVE,RPL_IDLE_SLAVE);
DBUG_ASSERT(thd->net.buff != 0);
net_end(&thd->net); // destructor will not free it, because net.vio is 0
- close_thread_tables(thd, 0);
+ close_thread_tables(thd);
pthread_mutex_lock(&LOCK_thread_count);
THD_CHECK_SENTRY(thd);
delete thd;
@@ -2450,6 +2573,7 @@ pthread_handler_t handle_slave_sql(void *arg)
rli->ignore_log_space_limit= 0;
pthread_mutex_unlock(&rli->log_space_lock);
rli->trans_retries= 0; // start from "no error"
+ DBUG_PRINT("info", ("rli->trans_retries: %lu", rli->trans_retries));
if (init_relay_log_pos(rli,
rli->group_relay_log_name,
@@ -2501,7 +2625,7 @@ log '%s' at position %s, relay log '%s' position: %s", RPL_LOG_NAME,
if (sys_init_slave.value_length)
{
execute_init_command(thd, &sys_init_slave, &LOCK_sys_init_slave);
- if (thd->query_error)
+ if (thd->is_slave_error)
{
sql_print_error("\
Slave SQL thread aborted. Can't execute init_slave query");
@@ -2513,7 +2637,7 @@ Slave SQL thread aborted. Can't execute init_slave query");
while (!sql_slave_killed(thd,rli))
{
- thd->proc_info = "Reading event from the relay log";
+ thd_proc_info(thd, "Reading event from the relay log");
DBUG_ASSERT(rli->sql_thd == thd);
THD_CHECK_SENTRY(thd);
if (exec_relay_log_event(thd,rli))
@@ -2529,20 +2653,21 @@ Slave SQL thread aborted. Can't execute init_slave query");
*/
uint32 const last_errno= rli->last_error().number;
- DBUG_PRINT("info", ("thd->net.last_errno=%d; rli->last_error.number=%d",
- thd->net.last_errno, last_errno));
- if (thd->net.last_errno != 0)
+ if (thd->is_error())
{
- char const *const errmsg=
- thd->net.last_error ? thd->net.last_error : "<no message>";
+ char const *const errmsg= thd->main_da.message();
+
+ DBUG_PRINT("info",
+ ("thd->main_da.sql_errno()=%d; rli->last_error.number=%d",
+ thd->main_da.sql_errno(), last_errno));
if (last_errno == 0)
{
- rli->report(ERROR_LEVEL, thd->net.last_errno, errmsg);
+ rli->report(ERROR_LEVEL, thd->main_da.sql_errno(), errmsg);
}
- else if (last_errno != thd->net.last_errno)
+ else if (last_errno != thd->main_da.sql_errno())
{
sql_print_error("Slave (additional info): %s Error_code: %d",
- errmsg, thd->net.last_errno);
+ errmsg, thd->main_da.sql_errno());
}
}
@@ -2599,7 +2724,7 @@ the slave SQL thread with \"SLAVE START\". We stopped at log \
thd->query= thd->db= thd->catalog= 0;
thd->query_length= thd->db_length= 0;
VOID(pthread_mutex_unlock(&LOCK_thread_count));
- thd->proc_info = "Waiting for slave mutex on exit";
+ thd_proc_info(thd, "Waiting for slave mutex on exit");
pthread_mutex_lock(&rli->run_lock);
/* We need data_lock, at least to wake up any waiting master_pos_wait() */
pthread_mutex_lock(&rli->data_lock);
@@ -2721,7 +2846,7 @@ static int process_io_create_file(Master_info* mi, Create_file_log_event* cev)
}
if (unlikely(cev_not_written))
{
- cev->block = (char*)net->read_pos;
+ cev->block = net->read_pos;
cev->block_len = num_bytes;
if (unlikely(mi->rli.relay_log.append(cev)))
{
@@ -2735,7 +2860,7 @@ static int process_io_create_file(Master_info* mi, Create_file_log_event* cev)
}
else
{
- aev.block = (char*)net->read_pos;
+ aev.block = net->read_pos;
aev.block_len = num_bytes;
aev.log_pos = cev->log_pos;
if (unlikely(mi->rli.relay_log.append(&aev)))
@@ -3035,7 +3160,7 @@ static int queue_old_event(Master_info *mi, const char *buf,
any >=5.0.0 format.
*/
-int queue_event(Master_info* mi,const char* buf, ulong event_len)
+static int queue_event(Master_info* mi,const char* buf, ulong event_len)
{
int error= 0;
ulong inc_pos;
@@ -3581,7 +3706,16 @@ static Log_event* next_event(Relay_log_info* rli)
a new event and is queuing it; the false "0" will exist until SQL
finishes executing the new event; it will be look abnormal only if
the events have old timestamps (then you get "many", 0, "many").
- Transient phases like this can't really be fixed.
+
+ Transient phases like this can be fixed with implemeting
+ Heartbeat event which provides the slave the status of the
+ master at time the master does not have any new update to send.
+ Seconds_Behind_Master would be zero only when master has no
+ more updates in binlog for slave. The heartbeat can be sent
+ in a (small) fraction of slave_net_timeout. Until it's done
+ rli->last_master_timestamp is temporarely (for time of
+ waiting for the following event) reset whenever EOF is
+ reached.
*/
time_t save_timestamp= rli->last_master_timestamp;
rli->last_master_timestamp= 0;
@@ -3912,4 +4046,8 @@ template class I_List_iterator<i_string>;
template class I_List_iterator<i_string_pair>;
#endif
+/**
+ @} (end of group Replication)
+*/
+
#endif /* HAVE_REPLICATION */
diff --git a/sql/slave.h b/sql/slave.h
index 2cd9ea352ba..f1772bbc1fc 100644
--- a/sql/slave.h
+++ b/sql/slave.h
@@ -187,6 +187,8 @@ int purge_relay_logs(Relay_log_info* rli, THD *thd, bool just_reset,
void set_slave_thread_options(THD* thd);
void set_slave_thread_default_charset(THD *thd, Relay_log_info const *rli);
void rotate_relay_log(Master_info* mi);
+int apply_event_and_update_pos(Log_event* ev, THD* thd, Relay_log_info* rli,
+ bool skip);
pthread_handler_t handle_slave_io(void *arg);
pthread_handler_t handle_slave_sql(void *arg);
diff --git a/sql/sp.cc b/sql/sp.cc
index 1b5d8ca87b8..99ffc18deea 100644
--- a/sql/sp.cc
+++ b/sql/sp.cc
@@ -249,19 +249,18 @@ Stored_routine_creation_ctx::load_from_db(THD *thd,
/*************************************************************************/
-/*
+/**
Open the mysql.proc table for read.
- SYNOPSIS
- open_proc_table_for_read()
- thd Thread context
- backup Pointer to Open_tables_state instance where information about
- currently open tables will be saved, and from which will be
- restored when we will end work with mysql.proc.
+ @param thd Thread context
+ @param backup Pointer to Open_tables_state instance where information about
+ currently open tables will be saved, and from which will be
+ restored when we will end work with mysql.proc.
- RETURN
+ @retval
0 Error
- # Pointer to TABLE object of mysql.proc
+ @retval
+ \# Pointer to TABLE object of mysql.proc
*/
TABLE *open_proc_table_for_read(THD *thd, Open_tables_state *backup)
@@ -281,19 +280,18 @@ TABLE *open_proc_table_for_read(THD *thd, Open_tables_state *backup)
}
-/*
+/**
Open the mysql.proc table for update.
- SYNOPSIS
- open_proc_table_for_update()
- thd Thread context
+ @param thd Thread context
- NOTES
+ @note
Table opened with this call should closed using close_thread_tables().
- RETURN
+ @retval
0 Error
- # Pointer to TABLE object of mysql.proc
+ @retval
+ \# Pointer to TABLE object of mysql.proc
*/
static TABLE *open_proc_table_for_update(THD *thd)
@@ -310,19 +308,18 @@ static TABLE *open_proc_table_for_update(THD *thd)
}
-/*
+/**
Find row in open mysql.proc table representing stored routine.
- SYNOPSIS
- db_find_routine_aux()
- thd Thread context
- type Type of routine to find (function or procedure)
- name Name of routine
- table TABLE object for open mysql.proc table.
+ @param thd Thread context
+ @param type Type of routine to find (function or procedure)
+ @param name Name of routine
+ @param table TABLE object for open mysql.proc table.
- RETURN VALUE
- SP_OK - Routine found
- SP_KEY_NOT_FOUND- No routine with given name
+ @retval
+ SP_OK Routine found
+ @retval
+ SP_KEY_NOT_FOUND No routine with given name
*/
static int
@@ -357,25 +354,24 @@ db_find_routine_aux(THD *thd, int type, sp_name *name, TABLE *table)
}
-/*
+/**
Find routine definition in mysql.proc table and create corresponding
sp_head object for it.
- SYNOPSIS
- db_find_routine()
- thd Thread context
- type Type of routine (TYPE_ENUM_PROCEDURE/...)
- name Name of routine
- sphp Out parameter in which pointer to created sp_head
- object is returned (0 in case of error).
+ @param thd Thread context
+ @param type Type of routine (TYPE_ENUM_PROCEDURE/...)
+ @param name Name of routine
+ @param sphp Out parameter in which pointer to created sp_head
+ object is returned (0 in case of error).
- NOTE
+ @note
This function may damage current LEX during execution, so it is good
idea to create temporary LEX and make it active before calling it.
- RETURN VALUE
- 0 - Success
- non-0 - Error (may be one of special codes like SP_KEY_NOT_FOUND)
+ @retval
+ 0 Success
+ @retval
+ non-0 Error (may be one of special codes like SP_KEY_NOT_FOUND)
*/
static int
@@ -1337,22 +1333,21 @@ sp_show_create_routine(THD *thd, int type, sp_name *name)
}
-/*
+/**
Obtain object representing stored procedure/function by its name from
stored procedures cache and looking into mysql.proc if needed.
- SYNOPSIS
- sp_find_routine()
- thd - thread context
- type - type of object (TYPE_ENUM_FUNCTION or TYPE_ENUM_PROCEDURE)
- name - name of procedure
- cp - hash to look routine in
- cache_only - if true perform cache-only lookup
- (Don't look in mysql.proc).
-
- RETURN VALUE
- Non-0 pointer to sp_head object for the procedure, or
- 0 - in case of error.
+ @param thd thread context
+ @param type type of object (TYPE_ENUM_FUNCTION or TYPE_ENUM_PROCEDURE)
+ @param name name of procedure
+ @param cp hash to look routine in
+ @param cache_only if true perform cache-only lookup
+ (Don't look in mysql.proc).
+
+ @retval
+ NonNULL pointer to sp_head object for the procedure
+ @retval
+ NULL in case of error.
*/
sp_head *
@@ -1448,7 +1443,7 @@ sp_find_routine(THD *thd, int type, sp_name *name, sp_cache **cp,
}
-/*
+/**
This is used by sql_acl.cc:mysql_routine_grant() and is used to find
the routines in 'routines'.
*/
@@ -1497,18 +1492,17 @@ sp_exist_routines(THD *thd, TABLE_LIST *routines, bool any, bool no_error)
}
-/*
+/**
Check if a routine exists in the mysql.proc table, without actually
- parsing the definition. (Used for dropping)
+ parsing the definition. (Used for dropping).
- SYNOPSIS
- sp_routine_exists_in_table()
- thd - thread context
- name - name of procedure
+ @param thd thread context
+ @param name name of procedure
- RETURN VALUE
- 0 - Success
- non-0 - Error; SP_OPEN_TABLE_FAILED or SP_KEY_NOT_FOUND
+ @retval
+ 0 Success
+ @retval
+ non-0 Error; SP_OPEN_TABLE_FAILED or SP_KEY_NOT_FOUND
*/
int
@@ -1530,7 +1524,7 @@ sp_routine_exists_in_table(THD *thd, int type, sp_name *name)
}
-/*
+/**
Structure that represents element in the set of stored routines
used by statement or routine.
*/
@@ -1538,14 +1532,16 @@ struct Sroutine_hash_entry;
struct Sroutine_hash_entry
{
- /* Set key consisting of one-byte routine type and quoted routine name. */
+ /**
+ Set key consisting of one-byte routine type and quoted routine name.
+ */
LEX_STRING key;
- /*
+ /**
Next element in list linking all routines in set. See also comments
for LEX::sroutine/sroutine_list and sp_head::m_sroutines.
*/
Sroutine_hash_entry *next;
- /*
+ /**
Uppermost view which directly or indirectly uses this routine.
0 if routine is not used in view. Note that it also can be 0 if
statement uses routine both via view and directly.
@@ -1563,24 +1559,22 @@ extern "C" uchar* sp_sroutine_key(const uchar *ptr, size_t *plen,
}
-/*
+/**
Check if
- current statement (the one in thd->lex) needs table prelocking
- first routine in thd->lex->sroutines_list needs to execute its body in
prelocked mode.
- SYNOPSIS
- sp_get_prelocking_info()
- thd Current thread, thd->lex is the statement to be
- checked.
- need_prelocking OUT TRUE - prelocked mode should be activated
- before executing the statement
- FALSE - Don't activate prelocking
- first_no_prelocking OUT TRUE - Tables used by first routine in
- thd->lex->sroutines_list should be
- prelocked.
- FALSE - Otherwise.
- NOTES
+ @param thd Current thread, thd->lex is the statement to be
+ checked.
+ @param[out] need_prelocking TRUE - prelocked mode should be activated
+ before executing the statement;
+ FALSE - Don't activate prelocking
+ @param[out] first_no_prelocking TRUE - Tables used by first routine in
+ thd->lex->sroutines_list should be
+ prelocked. FALSE - Otherwise.
+
+ @note
This function assumes that for any "CALL proc(...)" statement routines_list
will have 'proc' as first element (it may have several, consider e.g.
"proc(sp_func(...)))". This property is currently guaranted by the parser.
@@ -1600,36 +1594,37 @@ void sp_get_prelocking_info(THD *thd, bool *need_prelocking,
}
-/*
+/**
Auxilary function that adds new element to the set of stored routines
used by statement.
- SYNOPSIS
- add_used_routine()
- lex LEX representing statement
- arena Arena in which memory for new element will be allocated
- key Key for the hash representing set
- belong_to_view Uppermost view which uses this routine
- (0 if routine is not used by view)
+ In case when statement uses stored routines but does not need
+ prelocking (i.e. it does not use any tables) we will access the
+ elements of LEX::sroutines set on prepared statement re-execution.
+ Because of this we have to allocate memory for both hash element
+ and copy of its key in persistent arena.
- NOTES
- Will also add element to end of 'LEX::sroutines_list' list.
+ @param lex LEX representing statement
+ @param arena Arena in which memory for new element will be
+ allocated
+ @param key Key for the hash representing set
+ @param belong_to_view Uppermost view which uses this routine
+ (0 if routine is not used by view)
- In case when statement uses stored routines but does not need
- prelocking (i.e. it does not use any tables) we will access the
- elements of LEX::sroutines set on prepared statement re-execution.
- Because of this we have to allocate memory for both hash element
- and copy of its key in persistent arena.
+ @note
+ Will also add element to end of 'LEX::sroutines_list' list.
- TODO
+ @todo
When we will got rid of these accesses on re-executions we will be
able to allocate memory for hash elements in non-persitent arena
and directly use key values from sp_head::m_sroutines sets instead
of making their copies.
- RETURN VALUE
- TRUE - new element was added.
- FALSE - element was not added (because it is already present in the set).
+ @retval
+ TRUE new element was added.
+ @retval
+ FALSE element was not added (because it is already present in
+ the set).
*/
static bool add_used_routine(LEX *lex, Query_arena *arena,
@@ -1659,24 +1654,22 @@ static bool add_used_routine(LEX *lex, Query_arena *arena,
}
-/*
+/**
Add routine which is explicitly used by statement to the set of stored
routines used by this statement.
- SYNOPSIS
- sp_add_used_routine()
- lex - LEX representing statement
- arena - arena in which memory for new element of the set
- will be allocated
- rt - routine name
- rt_type - routine type (one of TYPE_ENUM_PROCEDURE/...)
+ To be friendly towards prepared statements one should pass
+ persistent arena as second argument.
+
+ @param lex LEX representing statement
+ @param arena arena in which memory for new element of the set
+ will be allocated
+ @param rt routine name
+ @param rt_type routine type (one of TYPE_ENUM_PROCEDURE/...)
- NOTES
+ @note
Will also add element to end of 'LEX::sroutines_list' list (and will
take into account that this is explicitly used routine).
-
- To be friendly towards prepared statements one should pass
- persistent arena as second argument.
*/
void sp_add_used_routine(LEX *lex, Query_arena *arena,
@@ -1689,13 +1682,11 @@ void sp_add_used_routine(LEX *lex, Query_arena *arena,
}
-/*
+/**
Remove routines which are only indirectly used by statement from
the set of routines used by this statement.
- SYNOPSIS
- sp_remove_not_own_routines()
- lex LEX representing statement
+ @param lex LEX representing statement
*/
void sp_remove_not_own_routines(LEX *lex)
@@ -1718,16 +1709,14 @@ void sp_remove_not_own_routines(LEX *lex)
}
-/*
+/**
Merge contents of two hashes representing sets of routines used
by statements or by other routines.
- SYNOPSIS
- sp_update_sp_used_routines()
- dst - hash to which elements should be added
- src - hash from which elements merged
+ @param dst hash to which elements should be added
+ @param src hash from which elements merged
- NOTE
+ @note
This procedure won't create new Sroutine_hash_entry objects,
instead it will simply add elements from source to destination
hash. Thus time of life of elements in destination hash becomes
@@ -1747,18 +1736,17 @@ void sp_update_sp_used_routines(HASH *dst, HASH *src)
}
-/*
+/**
Add contents of hash representing set of routines to the set of
routines used by statement.
- SYNOPSIS
- sp_update_stmt_used_routines()
- thd Thread context
- lex LEX representing statement
- src Hash representing set from which routines will be added
- belong_to_view Uppermost view which uses these routines, 0 if none
+ @param thd Thread context
+ @param lex LEX representing statement
+ @param src Hash representing set from which routines will
+ be added
+ @param belong_to_view Uppermost view which uses these routines, 0 if none
- NOTE
+ @note
It will also add elements to end of 'LEX::sroutines_list' list.
*/
@@ -1774,18 +1762,17 @@ sp_update_stmt_used_routines(THD *thd, LEX *lex, HASH *src,
}
-/*
+/**
Add contents of list representing set of routines to the set of
routines used by statement.
- SYNOPSIS
- sp_update_stmt_used_routines()
- thd Thread context
- lex LEX representing statement
- src List representing set from which routines will be added
- belong_to_view Uppermost view which uses these routines, 0 if none
+ @param thd Thread context
+ @param lex LEX representing statement
+ @param src List representing set from which routines will
+ be added
+ @param belong_to_view Uppermost view which uses these routines, 0 if none
- NOTE
+ @note
It will also add elements to end of 'LEX::sroutines_list' list.
*/
@@ -1798,27 +1785,28 @@ static void sp_update_stmt_used_routines(THD *thd, LEX *lex, SQL_LIST *src,
}
-/*
+/**
Cache sub-set of routines used by statement, add tables used by these
routines to statement table list. Do the same for all routines used
by these routines.
- SYNOPSIS
- sp_cache_routines_and_add_tables_aux()
- thd - thread context
- lex - LEX representing statement
- start - first routine from the list of routines to be cached
- (this list defines mentioned sub-set).
- first_no_prelock - If true, don't add tables or cache routines used by
- the body of the first routine (i.e. *start)
- will be executed in non-prelocked mode.
- NOTE
+ @param thd thread context
+ @param lex LEX representing statement
+ @param start first routine from the list of routines to be cached
+ (this list defines mentioned sub-set).
+ @param first_no_prelock If true, don't add tables or cache routines used by
+ the body of the first routine (i.e. *start)
+ will be executed in non-prelocked mode.
+ @param tabs_changed Set to TRUE some tables were added, FALSE otherwise
+
+ @note
If some function is missing this won't be reported here.
Instead this fact will be discovered during query execution.
- RETURN VALUE
- 0 - success
- non-0 - failure
+ @retval
+ 0 success
+ @retval
+ non-0 failure
*/
static int
@@ -1866,7 +1854,7 @@ sp_cache_routines_and_add_tables_aux(THD *thd, LEX *lex,
an error with it's return value without calling my_error(), we
set the generic "mysql.proc table corrupt" error here.
*/
- if (!thd->net.report_error)
+ if (! thd->is_error())
{
/*
SP allows full NAME_LEN chars thus he have to allocate enough
@@ -1903,21 +1891,20 @@ sp_cache_routines_and_add_tables_aux(THD *thd, LEX *lex,
}
-/*
+/**
Cache all routines from the set of used by statement, add tables used
by those routines to statement table list. Do the same for all routines
used by those routines.
- SYNOPSIS
- sp_cache_routines_and_add_tables()
- thd - thread context
- lex - LEX representing statement
- first_no_prelock - If true, don't add tables or cache routines used by
- the body of the first routine (i.e. *start)
+ @param thd thread context
+ @param lex LEX representing statement
+ @param first_no_prelock If true, don't add tables or cache routines used by
+ the body of the first routine (i.e. *start)
- RETURN VALUE
- 0 - success
- non-0 - failure
+ @retval
+ 0 success
+ @retval
+ non-0 failure
*/
int
@@ -1929,20 +1916,21 @@ sp_cache_routines_and_add_tables(THD *thd, LEX *lex, bool first_no_prelock)
}
-/*
- Add all routines used by view to the set of routines used by statement.
+/**
+ Add all routines used by view to the set of routines used by
+ statement.
+
Add tables used by those routines to statement table list. Do the same
for all routines used by these routines.
- SYNOPSIS
- sp_cache_routines_and_add_tables_for_view()
- thd Thread context
- lex LEX representing statement
- view Table list element representing view
+ @param thd Thread context
+ @param lex LEX representing statement
+ @param view Table list element representing view
- RETURN VALUE
- 0 - success
- non-0 - failure
+ @retval
+ 0 success
+ @retval
+ non-0 failure
*/
int
@@ -1957,20 +1945,19 @@ sp_cache_routines_and_add_tables_for_view(THD *thd, LEX *lex, TABLE_LIST *view)
}
-/*
+/**
Add triggers for table to the set of routines used by statement.
Add tables used by them to statement table list. Do the same for
all implicitly used routines.
- SYNOPSIS
- sp_cache_routines_and_add_tables_for_triggers()
- thd thread context
- lex LEX respresenting statement
- table Table list element for table with trigger
+ @param thd thread context
+ @param lex LEX respresenting statement
+ @param table Table list element for table with trigger
- RETURN VALUE
- 0 - success
- non-0 - failure
+ @retval
+ 0 success
+ @retval
+ non-0 failure
*/
int
@@ -2016,10 +2003,12 @@ sp_cache_routines_and_add_tables_for_triggers(THD *thd, LEX *lex,
}
-/*
- * Generates the CREATE... string from the table information.
- * Returns TRUE on success, FALSE on (alloc) failure.
- */
+/**
+ Generates the CREATE... string from the table information.
+
+ @return
+ Returns TRUE on success, FALSE on (alloc) failure.
+*/
static bool
create_string(THD *thd, String *buf,
int type,
diff --git a/sql/sp_head.cc b/sql/sp_head.cc
index 093544cdd0a..0edb566ed9f 100644
--- a/sql/sp_head.cc
+++ b/sql/sp_head.cc
@@ -80,19 +80,20 @@ sp_map_item_type(enum enum_field_types type)
}
-/*
+/**
Return a string representation of the Item value.
- NOTE: If the item has a string result type, the string is escaped
- according to its character set.
+ @param thd thread handle
+ @param str string buffer for representation of the value
- SYNOPSIS
- item a pointer to the Item
- str string buffer for representation of the value
+ @note
+ If the item has a string result type, the string is escaped
+ according to its character set.
- RETURN
- NULL on error
- a pointer to valid a valid string on success
+ @retval
+ NULL on error
+ @retval
+ non-NULL a pointer to valid a valid string on success
*/
static String *
@@ -102,8 +103,9 @@ sp_get_item_value(THD *thd, Item *item, String *str)
case REAL_RESULT:
case INT_RESULT:
case DECIMAL_RESULT:
- return item->val_str(str);
-
+ if (item->field_type() != MYSQL_TYPE_BIT)
+ return item->val_str(str);
+ else {/* Bit type is handled as binary string */}
case STRING_RESULT:
{
String *result= item->val_str(str);
@@ -137,16 +139,12 @@ sp_get_item_value(THD *thd, Item *item, String *str)
}
-/*
- SYNOPSIS
- sp_get_flags_for_command()
-
- DESCRIPTION
- Returns a combination of:
- * sp_head::MULTI_RESULTS: added if the 'cmd' is a command that might
- result in multiple result sets being sent back.
- * sp_head::CONTAINS_DYNAMIC_SQL: added if 'cmd' is one of PREPARE,
- EXECUTE, DEALLOCATE.
+/**
+ Returns a combination of:
+ - sp_head::MULTI_RESULTS: added if the 'cmd' is a command that might
+ result in multiple result sets being sent back.
+ - sp_head::CONTAINS_DYNAMIC_SQL: added if 'cmd' is one of PREPARE,
+ EXECUTE, DEALLOCATE.
*/
uint
@@ -286,17 +284,16 @@ sp_get_flags_for_command(LEX *lex)
return flags;
}
-/*
+/**
Prepare an Item for evaluation (call of fix_fields).
- SYNOPSIS
- sp_prepare_func_item()
- thd thread handler
- it_addr pointer on item refernce
+ @param thd thread handler
+ @param it_addr pointer on item refernce
- RETURN
- NULL error
- prepared item
+ @retval
+ NULL error
+ @retval
+ non-NULL prepared item
*/
Item *
@@ -316,17 +313,16 @@ sp_prepare_func_item(THD* thd, Item **it_addr)
}
-/*
+/**
Evaluate an expression and store the result in the field.
- SYNOPSIS
- sp_eval_expr()
- thd - current thread object
- expr_item - the root item of the expression
- result_field - the field to store the result
+ @param thd current thread object
+ @param result_field the field to store the result
+ @param expr_item_ptr the root item of the expression
- RETURN VALUES
+ @retval
FALSE on success
+ @retval
TRUE on error
*/
@@ -370,7 +366,7 @@ sp_eval_expr(THD *thd, Field *result_field, Item **expr_item_ptr)
thd->abort_on_warning= save_abort_on_warning;
thd->transaction.stmt.modified_non_trans_table= save_stmt_modified_non_trans_table;
- if (thd->net.report_error)
+ if (thd->is_error())
{
/* Return error status if something went wrong. */
err_status= TRUE;
@@ -409,6 +405,10 @@ sp_name::sp_name(THD *thd, char *key, uint key_len)
m_explicit_name= false;
}
+
+/**
+ Init the qualified name from the db and name.
+*/
void
sp_name::init_qname(THD *thd)
{
@@ -426,16 +426,17 @@ sp_name::init_qname(THD *thd)
}
-/*
- Check that the name 'ident' is ok. It's assumed to be an 'ident'
+/**
+ Check that the name 'ident' is ok. It's assumed to be an 'ident'
from the parser, so we only have to check length and trailing spaces.
The former is a standard requirement (and 'show status' assumes a
non-empty name), the latter is a mysql:ism as trailing spaces are
removed by get_field().
-
- RETURN
- TRUE - bad name
- FALSE - name is ok
+
+ @retval
+ TRUE bad name
+ @retval
+ FALSE name is ok
*/
bool
@@ -443,7 +444,7 @@ check_routine_name(LEX_STRING *ident)
{
if (!ident || !ident->str || !ident->str[0] ||
ident->str[ident->length-1] == ' ')
- {
+ {
my_error(ER_SP_WRONG_NAME, MYF(0), ident->str);
return TRUE;
}
@@ -465,24 +466,30 @@ check_routine_name(LEX_STRING *ident)
*/
void *
-sp_head::operator new(size_t size)
+sp_head::operator new(size_t size) throw()
{
DBUG_ENTER("sp_head::operator new");
MEM_ROOT own_root;
sp_head *sp;
- init_alloc_root(&own_root, MEM_ROOT_BLOCK_SIZE, MEM_ROOT_PREALLOC);
+ init_sql_alloc(&own_root, MEM_ROOT_BLOCK_SIZE, MEM_ROOT_PREALLOC);
sp= (sp_head *) alloc_root(&own_root, size);
+ if (sp == NULL)
+ return NULL;
sp->main_mem_root= own_root;
DBUG_PRINT("info", ("mem_root 0x%lx", (ulong) &sp->mem_root));
DBUG_RETURN(sp);
}
void
-sp_head::operator delete(void *ptr, size_t size)
+sp_head::operator delete(void *ptr, size_t size) throw()
{
DBUG_ENTER("sp_head::operator delete");
MEM_ROOT own_root;
+
+ if (ptr == NULL)
+ DBUG_VOID_RETURN;
+
sp_head *sp= (sp_head *) ptr;
/* Make a copy of main_mem_root as free_root will free the sp */
@@ -536,6 +543,9 @@ sp_head::init(LEX *lex)
lex->spcont= m_pcont= new sp_pcontext();
+ if (!lex->spcont)
+ DBUG_VOID_RETURN;
+
/*
Altough trg_table_fields list is used only in triggers we init for all
types of stored procedures to simplify reset_lex()/restore_lex() code.
@@ -768,7 +778,7 @@ sp_head::destroy()
}
-/*
+/**
This is only used for result fields from functions (both during
fix_length_and_dec() and evaluation).
*/
@@ -887,29 +897,23 @@ int cmp_splocal_locations(Item_splocal * const *a, Item_splocal * const *b)
*/
-/*
- Replace thd->query{_length} with a string that one can write to the binlog
- or the query cache.
-
- SYNOPSIS
- subst_spvars()
- thd Current thread.
- instr Instruction (we look for Item_splocal instances in
- instr->free_list)
- query_str Original query string
-
- DESCRIPTION
+/**
+ Replace thd->query{_length} with a string that one can write to
+ the binlog.
The binlog-suitable string is produced by replacing references to SP local
- variables with NAME_CONST('sp_var_name', value) calls. To make this string
- suitable for the query cache this function allocates some additional space
- for the query cache flags.
-
- RETURN
- FALSE on success
- thd->query{_length} either has been appropriately replaced or there
- is no need for replacements.
- TRUE out of memory error.
+ variables with NAME_CONST('sp_var_name', value) calls.
+
+ @param thd Current thread.
+ @param instr Instruction (we look for Item_splocal instances in
+ instr->free_list)
+ @param query_str Original query string
+
+ @return
+ - FALSE on success.
+ thd->query{_length} either has been appropriately replaced or there
+ is no need for replacements.
+ - TRUE out of memory error.
*/
static bool
@@ -1028,14 +1032,17 @@ void sp_head::recursion_level_error(THD *thd)
}
-/*
- Execute the routine. The main instruction jump loop is there
+/**
+ Execute the routine. The main instruction jump loop is there.
Assume the parameters already set.
-
- RETURN
+ @todo
+ - Will write this SP statement into binlog separately
+ (TODO: consider changing the condition to "not inside event union")
+
+ @retval
FALSE on success
+ @retval
TRUE on error
-
*/
bool
@@ -1069,7 +1076,7 @@ sp_head::execute(THD *thd)
DBUG_RETURN(TRUE);
/* init per-instruction memroot */
- init_alloc_root(&execute_mem_root, MEM_ROOT_BLOCK_SIZE, 0);
+ init_sql_alloc(&execute_mem_root, MEM_ROOT_BLOCK_SIZE, 0);
DBUG_ASSERT(!(m_flags & IS_INVOKED));
m_flags|= IS_INVOKED;
@@ -1108,7 +1115,7 @@ sp_head::execute(THD *thd)
if ((ctx= thd->spcont))
ctx->clear_handler();
- thd->query_error= 0;
+ thd->is_slave_error= 0;
old_arena= thd->stmt_arena;
/*
@@ -1162,15 +1169,36 @@ sp_head::execute(THD *thd)
*/
thd->spcont->callers_arena= &backup_arena;
+#if defined(ENABLED_PROFILING) && defined(COMMUNITY_SERVER)
+ /* Discard the initial part of executing routines. */
+ thd->profiling.discard_current_query();
+#endif
do
{
sp_instr *i;
uint hip; // Handler ip
+#if defined(ENABLED_PROFILING) && defined(COMMUNITY_SERVER)
+ /*
+ Treat each "instr" of a routine as discrete unit that could be profiled.
+ Profiling only records information for segments of code that set the
+ source of the query, and almost all kinds of instructions in s-p do not.
+ */
+ thd->profiling.finish_current_query();
+ thd->profiling.start_new_query("continuing inside routine");
+#endif
+
i = get_instr(ip); // Returns NULL when we're done.
if (i == NULL)
+ {
+#if defined(ENABLED_PROFILING) && defined(COMMUNITY_SERVER)
+ thd->profiling.discard_current_query();
+#endif
break;
+ }
+
DBUG_PRINT("execute", ("Instruction %u", ip));
+
/* Don't change NOW() in FUNCTION or TRIGGER */
if (!thd->in_sub_stmt)
thd->set_time(); // Make current_time() et al work
@@ -1192,12 +1220,6 @@ sp_head::execute(THD *thd)
err_status= i->execute(thd, &ip);
- /*
- If this SP instruction have sent eof, it has caused no_send_error to be
- set. Clear it back to allow the next instruction to send error. (multi-
- statement execution code clears no_send_error between statements too)
- */
- thd->net.no_send_error= 0;
if (i->free_list)
cleanup_items(i->free_list);
@@ -1248,6 +1270,11 @@ sp_head::execute(THD *thd)
}
} while (!err_status && !thd->killed);
+#if defined(ENABLED_PROFILING) && defined(COMMUNITY_SERVER)
+ thd->profiling.finish_current_query();
+ thd->profiling.start_new_query("tail end of routine");
+#endif
+
/* Restore query context. */
m_creation_ctx->restore_env(thd, saved_creation_ctx);
@@ -1275,9 +1302,9 @@ sp_head::execute(THD *thd)
state= EXECUTED;
done:
- DBUG_PRINT("info", ("err_status: %d killed: %d query_error: %d report_error: %d",
- err_status, thd->killed, thd->query_error,
- thd->net.report_error));
+ DBUG_PRINT("info", ("err_status: %d killed: %d is_slave_error: %d report_error: %d",
+ err_status, thd->killed, thd->is_slave_error,
+ thd->is_error()));
if (thd->killed)
err_status= TRUE;
@@ -1325,22 +1352,26 @@ sp_head::execute(THD *thd)
#ifndef NO_EMBEDDED_ACCESS_CHECKS
-/*
+/**
set_routine_security_ctx() changes routine security context, and
checks if there is an EXECUTE privilege in new context. If there is
no EXECUTE privilege, it changes the context back and returns a
error.
- SYNOPSIS
- set_routine_security_ctx()
- thd thread handle
- sp stored routine to change the context for
- is_proc TRUE is procedure, FALSE if function
- save_ctx pointer to an old security context
-
- RETURN
- TRUE if there was a error, and the context wasn't changed.
- FALSE if the context was changed.
+ @param thd thread handle
+ @param sp stored routine to change the context for
+ @param is_proc TRUE is procedure, FALSE if function
+ @param save_ctx pointer to an old security context
+
+ @todo
+ - Cache if the definer has the right to use the object on the
+ first usage and only reset the cache if someone does a GRANT
+ statement that 'may' affect this.
+
+ @retval
+ TRUE if there was a error, and the context wasn't changed.
+ @retval
+ FALSE if the context was changed.
*/
bool
@@ -1382,22 +1413,27 @@ set_routine_security_ctx(THD *thd, sp_head *sp, bool is_proc,
/**
Execute trigger stored program.
- Execute a trigger:
- - changes security context for triggers;
- - switch to new memroot;
- - call sp_head::execute;
- - restore old memroot;
- - restores security context.
-
- @param thd Thread context.
- @param db_name Database name.
- @param table_name Table name.
- @param grant_info GRANT_INFO structure to be filled with information
- about definer's privileges on subject table.
+ - changes security context for triggers
+ - switch to new memroot
+ - call sp_head::execute
+ - restore old memroot
+ - restores security context
+
+ @param thd Thread handle
+ @param db database name
+ @param table table name
+ @param grant_info GRANT_INFO structure to be filled with
+ information about definer's privileges
+ on subject table
+
+ @todo
+ - TODO: we should create sp_rcontext once per command and reuse it
+ on subsequent executions of a trigger.
- @return Error status.
- @retval FALSE on success.
- @retval TRUE on error.
+ @retval
+ FALSE on success
+ @retval
+ TRUE on error
*/
bool
@@ -1505,8 +1541,9 @@ err_with_cleanup:
}
-/*
- Execute a function:
+/**
+ Execute a function.
+
- evaluate parameters
- changes security context for SUID routines
- switch to new memroot
@@ -1515,17 +1552,25 @@ err_with_cleanup:
- evaluate the return value
- restores security context
- SYNOPSIS
- sp_head::execute_function()
- thd Thread handle
- argp Passed arguments (these are items from containing
- statement?)
- argcount Number of passed arguments. We need to check if this is
- correct.
- return_value_fld Save result here.
-
- RETURN
+ @param thd Thread handle
+ @param argp Passed arguments (these are items from containing
+ statement?)
+ @param argcount Number of passed arguments. We need to check if
+ this is correct.
+ @param return_value_fld Save result here.
+
+ @todo
+ We should create sp_rcontext once per command and reuse
+ it on subsequent executions of a function/trigger.
+
+ @todo
+ In future we should associate call arena/mem_root with
+ sp_rcontext and allocate all these objects (and sp_rcontext
+ itself) on it directly rather than juggle with arenas.
+
+ @retval
FALSE on success
+ @retval
TRUE on error
*/
@@ -1742,14 +1787,8 @@ err_with_cleanup:
}
-/*
+/**
Execute a procedure.
- SYNOPSIS
- sp_head::execute_procedure()
- thd Thread handle
- args List of values passed as arguments.
-
- DESCRIPTION
The function does the following steps:
- Set all parameters
@@ -1758,8 +1797,12 @@ err_with_cleanup:
- copy back values of INOUT and OUT parameters
- restores security context
- RETURN
+ @param thd Thread handle
+ @param args List of values passed as arguments.
+
+ @retval
FALSE on success
+ @retval
TRUE on error
*/
@@ -1872,7 +1915,7 @@ sp_head::execute_procedure(THD *thd, List<Item> *args)
we'll leave it here.
*/
if (!thd->in_sub_stmt)
- close_thread_tables(thd, 0, 0);
+ close_thread_tables(thd);
DBUG_PRINT("info",(" %.*s: eval args done",
(int) m_name.length, m_name.str));
@@ -1961,16 +2004,29 @@ sp_head::execute_procedure(THD *thd, List<Item> *args)
}
-// Reset lex during parsing, before we parse a sub statement.
-void
+/**
+ Reset lex during parsing, before we parse a sub statement.
+
+ @param thd Thread handler.
+
+ @return Error state
+ @retval true An error occurred.
+ @retval false Success.
+*/
+
+bool
sp_head::reset_lex(THD *thd)
{
DBUG_ENTER("sp_head::reset_lex");
LEX *sublex;
LEX *oldlex= thd->lex;
+ sublex= new (thd->mem_root)st_lex_local;
+ if (sublex == 0)
+ DBUG_RETURN(TRUE);
+
+ thd->lex= sublex;
(void)m_lex.push_front(oldlex);
- thd->lex= sublex= new st_lex;
/* Reset most stuff. */
lex_start(thd);
@@ -1991,10 +2047,10 @@ sp_head::reset_lex(THD *thd)
sublex->interval_list.empty();
sublex->type= 0;
- DBUG_VOID_RETURN;
+ DBUG_RETURN(FALSE);
}
-// Restore lex during parsing, after we have parsed a sub statement.
+/// Restore lex during parsing, after we have parsed a sub statement.
void
sp_head::restore_lex(THD *thd)
{
@@ -2037,6 +2093,9 @@ sp_head::restore_lex(THD *thd)
DBUG_VOID_RETURN;
}
+/**
+ Put the instruction on the backpatch list, associated with the label.
+*/
void
sp_head::push_backpatch(sp_instr *i, sp_label_t *lab)
{
@@ -2050,6 +2109,10 @@ sp_head::push_backpatch(sp_instr *i, sp_label_t *lab)
}
}
+/**
+ Update all instruction with this label in the backpatch list to
+ the current position.
+*/
void
sp_head::backpatch(sp_label_t *lab)
{
@@ -2057,26 +2120,31 @@ sp_head::backpatch(sp_label_t *lab)
uint dest= instructions();
List_iterator_fast<bp_t> li(m_backpatch);
+ DBUG_ENTER("sp_head::backpatch");
while ((bp= li++))
{
if (bp->lab == lab)
+ {
+ DBUG_PRINT("info", ("backpatch: (m_ip %d, label 0x%lx <%s>) to dest %d",
+ bp->instr->m_ip, (ulong) lab, lab->name, dest));
bp->instr->backpatch(dest, lab->ctx);
+ }
}
+ DBUG_VOID_RETURN;
}
-/*
+/**
Prepare an instance of Create_field for field creation (fill all necessary
attributes).
- SYNOPSIS
- sp_head::fill_field_definition()
- thd [IN] Thread handle
- lex [IN] Yacc parsing context
- field_type [IN] Field type
- field_def [OUT] An instance of Create_field to be filled
+ @param[in] thd Thread handle
+ @param[in] lex Yacc parsing context
+ @param[in] field_type Field type
+ @param[out] field_def An instance of create_field to be filled
- RETURN
+ @retval
FALSE on success
+ @retval
TRUE on error
*/
@@ -2222,18 +2290,17 @@ sp_head::restore_thd_mem_root(THD *thd)
}
-/*
- Check if a user has access right to a routine
-
- SYNOPSIS
- check_show_routine_access()
- thd Thread handler
- sp SP
- full_access Set to 1 if the user has SELECT right to the
- 'mysql.proc' able or is the owner of the routine
- RETURN
- 0 ok
- 1 error
+/**
+ Check if a user has access right to a routine.
+
+ @param thd Thread handler
+ @param sp SP
+ @param full_access Set to 1 if the user has SELECT right to the
+ 'mysql.proc' able or is the owner of the routine
+ @retval
+ false ok
+ @retval
+ true error
*/
bool check_show_routine_access(THD *thd, sp_head *sp, bool *full_access)
@@ -2360,12 +2427,10 @@ sp_head::show_create_routine(THD *thd, int type)
-/*
- Add instruction to SP
+/**
+ Add instruction to SP.
- SYNOPSIS
- sp_head::add_instr()
- instr Instruction
+ @param instr Instruction
*/
void sp_head::add_instr(sp_instr *instr)
@@ -2383,20 +2448,20 @@ void sp_head::add_instr(sp_instr *instr)
}
-/*
+/**
Do some minimal optimization of the code:
- 1) Mark used instructions
- 1.1) While doing this, shortcut jumps to jump instructions
- 2) Compact the code, removing unused instructions
+ -# Mark used instructions
+ -# While doing this, shortcut jumps to jump instructions
+ -# Compact the code, removing unused instructions.
This is the main mark and move loop; it relies on the following methods
in sp_instr and its subclasses:
- opt_mark() Mark instruction as reachable
- opt_shortcut_jump() Shortcut jumps to the final destination;
- used by opt_mark().
- opt_move() Update moved instruction
- set_destination() Set the new destination (jump instructions only)
+ - opt_mark() : Mark instruction as reachable
+ - opt_shortcut_jump(): Shortcut jumps to the final destination;
+ used by opt_mark().
+ - opt_move() : Update moved instruction
+ - set_destination() : Set the new destination (jump instructions only)
*/
void sp_head::optimize()
@@ -2487,9 +2552,10 @@ sp_head::opt_mark()
#ifndef DBUG_OFF
-/*
+/**
Return the routine instructions as a result set.
- Returns 0 if ok, !=0 on error.
+ @return
+ 0 if ok, !=0 on error.
*/
int
sp_head::show_routine_code(THD *thd)
@@ -2552,27 +2618,25 @@ sp_head::show_routine_code(THD *thd)
#endif // ifndef DBUG_OFF
-/*
+/**
Prepare LEX and thread for execution of instruction, if requested open
and lock LEX's tables, execute instruction's core function, perform
cleanup afterwards.
- SYNOPSIS
- reset_lex_and_exec_core()
- thd - thread context
- nextp - out - next instruction
- open_tables - if TRUE then check read access to tables in LEX's table
- list and open and lock them (used in instructions which
- need to calculate some expression and don't execute
- complete statement).
- sp_instr - instruction for which we prepare context, and which core
- function execute by calling its exec_core() method.
+ @param thd thread context
+ @param nextp out - next instruction
+ @param open_tables if TRUE then check read access to tables in LEX's table
+ list and open and lock them (used in instructions which
+ need to calculate some expression and don't execute
+ complete statement).
+ @param sp_instr instruction for which we prepare context, and which core
+ function execute by calling its exec_core() method.
- NOTE
+ @note
We are not saving/restoring some parts of THD which may need this because
we do this once for whole routine execution in sp_head::execute().
- RETURN VALUE
+ @return
0/non-0 - Success/Failure
*/
@@ -2635,9 +2699,9 @@ sp_lex_keeper::reset_lex_and_exec_core(THD *thd, uint *nextp,
m_lex->unit.cleanup();
- thd->proc_info="closing tables";
+ thd_proc_info(thd, "closing tables");
close_thread_tables(thd);
- thd->proc_info= 0;
+ thd_proc_info(thd, 0);
if (m_lex->query_tables_own_last)
{
@@ -2673,7 +2737,7 @@ sp_lex_keeper::reset_lex_and_exec_core(THD *thd, uint *nextp,
cleanup_items() is called in sp_head::execute()
*/
- DBUG_RETURN(res || thd->net.report_error);
+ DBUG_RETURN(res || thd->is_error());
}
@@ -2725,6 +2789,10 @@ sp_instr_stmt::execute(THD *thd, uint *nextp)
query= thd->query;
query_length= thd->query_length;
+#if defined(ENABLED_PROFILING) && defined(COMMUNITY_SERVER)
+ /* This s-p instr is profilable and will be captured. */
+ thd->profiling.set_query_source(m_query.str, m_query.length);
+#endif
if (!(res= alloc_query(thd, m_query.str, m_query.length)) &&
!(res=subst_spvars(thd, this, &m_query)))
{
@@ -2739,14 +2807,22 @@ sp_instr_stmt::execute(THD *thd, uint *nextp)
thd->query, thd->query_length) <= 0)
{
res= m_lex_keeper.reset_lex_and_exec_core(thd, nextp, FALSE, this);
+
+ if (thd->main_da.is_eof())
+ net_end_statement(thd);
+
+ query_cache_end_of_result(thd);
+
if (!res && unlikely(thd->enable_slow_log))
log_slow_statement(thd);
- query_cache_end_of_result(thd);
}
else
*nextp= m_ip+1;
thd->query= query;
thd->query_length= query_length;
+
+ if (!thd->is_error())
+ thd->main_da.reset_diagnostics_area();
}
DBUG_RETURN(res);
}
@@ -3326,6 +3402,11 @@ sp_instr_cpop::print(String *str)
sp_instr_copen class functions
*/
+/**
+ @todo
+ Assert that we either have an error or a cursor
+*/
+
int
sp_instr_copen::execute(THD *thd, uint *nextp)
{
@@ -3647,24 +3728,23 @@ uchar *sp_table_key(const uchar *ptr, size_t *plen, my_bool first)
}
-/*
+/**
Merge the list of tables used by some query into the multi-set of
tables used by routine.
- SYNOPSIS
- merge_table_list()
- thd - thread context
- table - table list
- lex_for_tmp_check - LEX of the query for which we are merging
- table list.
+ @param thd thread context
+ @param table table list
+ @param lex_for_tmp_check LEX of the query for which we are merging
+ table list.
- NOTE
+ @note
This method will use LEX provided to check whenever we are creating
temporary table and mark it as such in target multi-set.
- RETURN VALUE
- TRUE - Success
- FALSE - Error
+ @retval
+ TRUE Success
+ @retval
+ FALSE Error
*/
bool
@@ -3752,27 +3832,26 @@ sp_head::merge_table_list(THD *thd, TABLE_LIST *table, LEX *lex_for_tmp_check)
}
-/*
+/**
Add tables used by routine to the table list.
- SYNOPSIS
- add_used_tables_to_table_list()
- thd [in] Thread context
- query_tables_last_ptr [in/out] Pointer to the next_global member of
- last element of the list where tables
- will be added (or to its root).
- belong_to_view [in] Uppermost view which uses this routine,
- 0 if none.
-
- DESCRIPTION
Converts multi-set of tables used by this routine to table list and adds
this list to the end of table list specified by 'query_tables_last_ptr'.
Elements of list will be allocated in PS memroot, so this list will be
persistent between PS executions.
- RETURN VALUE
- TRUE - if some elements were added, FALSE - otherwise.
+ @param[in] thd Thread context
+ @param[in,out] query_tables_last_ptr Pointer to the next_global member of
+ last element of the list where tables
+ will be added (or to its root).
+ @param[in] belong_to_view Uppermost view which uses this routine,
+ 0 if none.
+
+ @retval
+ TRUE if some elements were added
+ @retval
+ FALSE otherwise.
*/
bool
@@ -3842,7 +3921,7 @@ sp_head::add_used_tables_to_table_list(THD *thd,
}
-/*
+/**
Simple function for adding an explicetly named (systems) table to
the global table list, e.g. "mysql", "proc".
*/
@@ -3856,7 +3935,7 @@ sp_add_to_query_tables(THD *thd, LEX *lex,
if (!(table= (TABLE_LIST *)thd->calloc(sizeof(TABLE_LIST))))
{
- my_error(ER_OUTOFMEMORY, MYF(0), sizeof(TABLE_LIST));
+ thd->fatal_error();
return NULL;
}
table->db_length= strlen(db);
diff --git a/sql/sp_head.h b/sql/sp_head.h
index d74170534bd..8d7062740c8 100644
--- a/sql/sp_head.h
+++ b/sql/sp_head.h
@@ -109,7 +109,7 @@ public:
LEX_STRING m_db;
LEX_STRING m_name;
LEX_STRING m_qname;
- /*
+ /**
Key representing routine in the set of stored routines used by statement.
Consists of 1-byte routine type and m_qname (which usually refences to
same buffer). Note that one must complete initialization of the key by
@@ -125,7 +125,7 @@ public:
m_qname.length= m_sroutines_key.length= 0;
}
- /*
+ /**
Creates temporary sp_name object from key, used mainly
for SP-cache lookups.
*/
@@ -149,12 +149,12 @@ check_routine_name(LEX_STRING *ident);
class sp_head :private Query_arena
{
- sp_head(const sp_head &); /* Prevent use of these */
+ sp_head(const sp_head &); /**< Prevent use of these */
void operator=(sp_head &);
MEM_ROOT main_mem_root;
public:
- /* Possible values of m_flags */
+ /** Possible values of m_flags */
enum {
HAS_RETURN= 1, // For FUNCTIONs only: is set if has RETURN
MULTI_RESULTS= 8, // Is set if a procedure with SELECT(s)
@@ -170,16 +170,16 @@ public:
HAS_SQLCOM_FLUSH= 4096
};
- /* TYPE_ENUM_FUNCTION, TYPE_ENUM_PROCEDURE or TYPE_ENUM_TRIGGER */
+ /** TYPE_ENUM_FUNCTION, TYPE_ENUM_PROCEDURE or TYPE_ENUM_TRIGGER */
int m_type;
uint m_flags; // Boolean attributes of a stored routine
- Create_field m_return_field_def; /* This is used for FUNCTIONs only. */
+ Create_field m_return_field_def; /**< This is used for FUNCTIONs only. */
- const char *m_tmp_query; // Temporary pointer to sub query string
+ const char *m_tmp_query; ///< Temporary pointer to sub query string
st_sp_chistics *m_chistics;
- ulong m_sql_mode; // For SHOW CREATE and execution
- LEX_STRING m_qname; // db.name
+ ulong m_sql_mode; ///< For SHOW CREATE and execution
+ LEX_STRING m_qname; ///< db.name
/**
Key representing routine in the set of stored routines used by statement.
[routine_type]db.name
@@ -211,20 +211,20 @@ public:
longlong m_created;
longlong m_modified;
- /* Recursion level of the current SP instance. The levels are numbered from 0 */
+ /** Recursion level of the current SP instance. The levels are numbered from 0 */
ulong m_recursion_level;
- /*
+ /**
A list of diferent recursion level instances for the same procedure.
For every recursion level we have a sp_head instance. This instances
connected in the list. The list ordered by increasing recursion level
(m_recursion_level).
*/
sp_head *m_next_cached_sp;
- /*
+ /**
Pointer to the first element of the above list
*/
sp_head *m_first_instance;
- /*
+ /**
Pointer to the first free (non-INVOKED) routine in the list of
cached instances for this SP. This pointer is set only for the first
SP in the list of instences (see above m_first_cached_sp pointer).
@@ -232,12 +232,12 @@ public:
For non-first instance value of this pointer meanless (point to itself);
*/
sp_head *m_first_free_instance;
- /*
+ /**
Pointer to the last element in the list of instances of the SP.
For non-first instance value of this pointer meanless (point to itself);
*/
sp_head *m_last_cached_sp;
- /*
+ /**
Set containing names of stored routines used by this routine.
Note that unlike elements of similar set for statement elements of this
set are not linked in one list. Because of this we are able save memory
@@ -260,18 +260,18 @@ public:
Security_context m_security_ctx;
static void *
- operator new(size_t size);
+ operator new(size_t size) throw ();
static void
- operator delete(void *ptr, size_t size);
+ operator delete(void *ptr, size_t size) throw ();
sp_head();
- // Initialize after we have reset mem_root
+ /// Initialize after we have reset mem_root
void
init(LEX *lex);
- /* Copy sp name from parser. */
+ /** Copy sp name from parser. */
void
init_sp_name(THD *thd, sp_name *spname);
@@ -288,7 +288,7 @@ public:
virtual ~sp_head();
- // Free memory
+ /// Free memory
void
destroy();
@@ -325,33 +325,41 @@ public:
return i;
}
- // Resets lex in 'thd' and keeps a copy of the old one.
- void
+ /*
+ Resets lex in 'thd' and keeps a copy of the old one.
+
+ @todo Conflicting comment in sp_head.cc
+ */
+ bool
reset_lex(THD *thd);
- // Restores lex in 'thd' from our copy, but keeps some status from the
- // one in 'thd', like ptr, tables, fields, etc.
+ /**
+ Restores lex in 'thd' from our copy, but keeps some status from the
+ one in 'thd', like ptr, tables, fields, etc.
+
+ @todo Conflicting comment in sp_head.cc
+ */
void
restore_lex(THD *thd);
- // Put the instruction on the backpatch list, associated with the label.
+ /// Put the instruction on the backpatch list, associated with the label.
void
push_backpatch(sp_instr *, struct sp_label *);
- // Update all instruction with this label in the backpatch list to
- // the current position.
+ /// Update all instruction with this label in the backpatch list to
+ /// the current position.
void
backpatch(struct sp_label *);
- // Start a new cont. backpatch level. If 'i' is NULL, the level is just incr.
+ /// Start a new cont. backpatch level. If 'i' is NULL, the level is just incr.
void
new_cont_backpatch(sp_instr_opt_meta *i);
- // Add an instruction to the current level
+ /// Add an instruction to the current level
void
add_cont_backpatch(sp_instr_opt_meta *i);
- // Backpatch (and pop) the current level to the current position.
+ /// Backpatch (and pop) the current level to the current position.
void
do_cont_backpatch();
@@ -414,7 +422,7 @@ public:
TABLE_LIST ***query_tables_last_ptr,
TABLE_LIST *belong_to_view);
- /*
+ /**
Check if this stored routine contains statements disallowed
in a stored function or trigger, and set an appropriate error message
if this is the case.
@@ -463,19 +471,19 @@ public:
private:
- MEM_ROOT *m_thd_root; // Temp. store for thd's mem_root
- THD *m_thd; // Set if we have reset mem_root
+ MEM_ROOT *m_thd_root; ///< Temp. store for thd's mem_root
+ THD *m_thd; ///< Set if we have reset mem_root
- sp_pcontext *m_pcont; // Parse context
- List<LEX> m_lex; // Temp. store for the other lex
- DYNAMIC_ARRAY m_instr; // The "instructions"
+ sp_pcontext *m_pcont; ///< Parse context
+ List<LEX> m_lex; ///< Temp. store for the other lex
+ DYNAMIC_ARRAY m_instr; ///< The "instructions"
typedef struct
{
struct sp_label *lab;
sp_instr *instr;
} bp_t;
- List<bp_t> m_backpatch; // Instructions needing backpatching
- /*
+ List<bp_t> m_backpatch; ///< Instructions needing backpatching
+ /**
We need a special list for backpatching of instructions with a continue
destination (in the case of a continue handler catching an error in
the test), since it would otherwise interfere with the normal backpatch
@@ -483,15 +491,16 @@ private:
which are to be patched differently.
Since these occur in a more restricted way (always the same "level" in
the code), we don't need the label.
- */
+ */
List<sp_instr_opt_meta> m_cont_backpatch;
uint m_cont_level; // The current cont. backpatch level
- /*
+ /**
Multi-set representing optimized list of tables to be locked by this
routine. Does not include tables which are used by invoked routines.
- Note: for prelocking-free SPs this multiset is constructed too.
+ @note
+ For prelocking-free SPs this multiset is constructed too.
We do so because the same instance of sp_head may be called both
in prelocked mode and in non-prelocked mode.
*/
@@ -506,7 +515,7 @@ private:
*/
void opt_mark();
- /*
+ /**
Merge the list of tables used by query into the multi-set of tables used
by routine.
*/
@@ -520,16 +529,16 @@ private:
class sp_instr :public Query_arena, public Sql_alloc
{
- sp_instr(const sp_instr &); /* Prevent use of these */
+ sp_instr(const sp_instr &); /**< Prevent use of these */
void operator=(sp_instr &);
public:
uint marked;
- uint m_ip; // My index
- sp_pcontext *m_ctx; // My parse context
+ uint m_ip; ///< My index
+ sp_pcontext *m_ctx; ///< My parse context
- // Should give each a name or type code for debugging purposes?
+ /// Should give each a name or type code for debugging purposes?
sp_instr(uint ip, sp_pcontext *ctx)
:Query_arena(0, INITIALIZED_FOR_SP), marked(0), m_ip(ip), m_ctx(ctx)
{}
@@ -538,21 +547,19 @@ public:
{ free_items(); }
- /*
+ /**
Execute this instruction
- SYNOPSIS
- execute()
- thd Thread handle
- nextp OUT index of the next instruction to execute. (For most
- instructions this will be the instruction following this
- one). Note that this parameter is undefined in case of
- errors, use get_cont_dest() to find the continuation
- instruction for CONTINUE error handlers.
-
- RETURN
- 0 on success,
- other if some error occurred
+
+ @param thd Thread handle
+ @param[out] nextp index of the next instruction to execute. (For most
+ instructions this will be the instruction following this
+ one). Note that this parameter is undefined in case of
+ errors, use get_cont_dest() to find the continuation
+ instruction for CONTINUE error handlers.
+
+ @retval 0 on success,
+ @retval other if some error occured
*/
virtual int execute(THD *thd, uint *nextp) = 0;
@@ -590,7 +597,7 @@ public:
virtual void backpatch(uint dest, sp_pcontext *dst_ctx)
{}
- /*
+ /**
Mark this instruction as reachable during optimization and return the
index to the next instruction. Jump instruction will add their
destination to the leads list.
@@ -601,7 +608,7 @@ public:
return m_ip+1;
}
- /*
+ /**
Short-cut jumps to jumps during optimization. This is used by the
jump instructions' opt_mark() methods. 'start' is the starting point,
used to prevent the mark sweep from looping for ever. Return the
@@ -612,7 +619,7 @@ public:
return m_ip;
}
- /*
+ /**
Inform the instruction that it has been moved during optimization.
Most instructions will simply update its index, but jump instructions
must also take care of their destination pointers. Forward jumps get
@@ -626,7 +633,7 @@ public:
}; // class sp_instr : public Sql_alloc
-/*
+/**
Auxilary class to which instructions delegate responsibility
for handling LEX and preparations before executing statement
or calculating complex expression.
@@ -634,13 +641,14 @@ public:
Exist mainly to avoid having double hierarchy between instruction
classes.
- TODO: Add ability to not store LEX and do any preparations if
- expression used is simple.
+ @todo
+ Add ability to not store LEX and do any preparations if
+ expression used is simple.
*/
class sp_lex_keeper
{
- /* Prevent use of these */
+ /** Prevent use of these */
sp_lex_keeper(const sp_lex_keeper &);
void operator=(sp_lex_keeper &);
public:
@@ -660,10 +668,12 @@ public:
}
}
- /*
+ /**
Prepare execution of instruction using LEX, if requested check whenever
we have read access to tables used and open/lock them, call instruction's
exec_core() method, perform cleanup afterwards.
+
+ @todo Conflicting comment in sp_head.cc
*/
int reset_lex_and_exec_core(THD *thd, uint *nextp, bool open_tables,
sp_instr* instr);
@@ -680,7 +690,7 @@ public:
private:
LEX *m_lex;
- /*
+ /**
Indicates whenever this sp_lex_keeper instance responsible
for LEX deletion.
*/
@@ -693,13 +703,13 @@ private:
prelocked mode itself.
*/
- /*
+ /**
List of additional tables this statement needs to lock when it
enters/leaves prelocked mode on its own.
*/
TABLE_LIST *prelocking_tables;
- /*
+ /**
The value m_lex->query_tables_own_last should be set to this when the
statement enters/leaves prelocked mode on its own.
*/
@@ -707,17 +717,17 @@ private:
};
-//
-// Call out to some prepared SQL statement.
-//
+/**
+ Call out to some prepared SQL statement.
+*/
class sp_instr_stmt : public sp_instr
{
- sp_instr_stmt(const sp_instr_stmt &); /* Prevent use of these */
+ sp_instr_stmt(const sp_instr_stmt &); /**< Prevent use of these */
void operator=(sp_instr_stmt &);
public:
- LEX_STRING m_query; // For thd->query
+ LEX_STRING m_query; ///< For thd->query
sp_instr_stmt(uint ip, sp_pcontext *ctx, LEX *lex)
: sp_instr(ip, ctx), m_lex_keeper(lex, TRUE)
@@ -744,7 +754,7 @@ private:
class sp_instr_set : public sp_instr
{
- sp_instr_set(const sp_instr_set &); /* Prevent use of these */
+ sp_instr_set(const sp_instr_set &); /**< Prevent use of these */
void operator=(sp_instr_set &);
public:
@@ -767,15 +777,15 @@ public:
private:
- uint m_offset; // Frame offset
+ uint m_offset; ///< Frame offset
Item *m_value;
- enum enum_field_types m_type; // The declared type
+ enum enum_field_types m_type; ///< The declared type
sp_lex_keeper m_lex_keeper;
}; // class sp_instr_set : public sp_instr
-/*
+/**
Set NEW/OLD row field value instruction. Used in triggers.
*/
class sp_instr_set_trigger_field : public sp_instr
@@ -809,18 +819,19 @@ private:
}; // class sp_instr_trigger_field : public sp_instr
-/*
+/**
An abstract class for all instructions with destinations that
needs to be updated by the optimizer.
+
Even if not all subclasses will use both the normal destination and
the continuation destination, we put them both here for simplicity.
- */
+*/
class sp_instr_opt_meta : public sp_instr
{
public:
- uint m_dest; // Where we will go
- uint m_cont_dest; // Where continue handlers will go
+ uint m_dest; ///< Where we will go
+ uint m_cont_dest; ///< Where continue handlers will go
sp_instr_opt_meta(uint ip, sp_pcontext *ctx)
: sp_instr(ip, ctx),
@@ -842,14 +853,14 @@ public:
protected:
- sp_instr *m_optdest; // Used during optimization
- sp_instr *m_cont_optdest; // Used during optimization
+ sp_instr *m_optdest; ///< Used during optimization
+ sp_instr *m_cont_optdest; ///< Used during optimization
}; // class sp_instr_opt_meta : public sp_instr
class sp_instr_jump : public sp_instr_opt_meta
{
- sp_instr_jump(const sp_instr_jump &); /* Prevent use of these */
+ sp_instr_jump(const sp_instr_jump &); /**< Prevent use of these */
void operator=(sp_instr_jump &);
public:
@@ -877,11 +888,12 @@ public:
virtual void backpatch(uint dest, sp_pcontext *dst_ctx)
{
- if (m_dest == 0) // Don't reset
- m_dest= dest;
+ /* Calling backpatch twice is a logic flaw in jump resolution. */
+ DBUG_ASSERT(m_dest == 0);
+ m_dest= dest;
}
- /*
+ /**
Update the destination; used by the optimizer.
*/
virtual void set_destination(uint old_dest, uint new_dest)
@@ -895,7 +907,7 @@ public:
class sp_instr_jump_if_not : public sp_instr_jump
{
- sp_instr_jump_if_not(const sp_instr_jump_if_not &); /* Prevent use of these */
+ sp_instr_jump_if_not(const sp_instr_jump_if_not &); /**< Prevent use of these */
void operator=(sp_instr_jump_if_not &);
public:
@@ -921,7 +933,7 @@ public:
virtual uint opt_mark(sp_head *sp, List<sp_instr> *leads);
- /* Override sp_instr_jump's shortcut; we stop here */
+ /** Override sp_instr_jump's shortcut; we stop here */
virtual uint opt_shortcut_jump(sp_head *sp, sp_instr *start)
{
return m_ip;
@@ -938,7 +950,7 @@ public:
private:
- Item *m_expr; // The condition
+ Item *m_expr; ///< The condition
sp_lex_keeper m_lex_keeper;
}; // class sp_instr_jump_if_not : public sp_instr_jump
@@ -946,7 +958,7 @@ private:
class sp_instr_freturn : public sp_instr
{
- sp_instr_freturn(const sp_instr_freturn &); /* Prevent use of these */
+ sp_instr_freturn(const sp_instr_freturn &); /**< Prevent use of these */
void operator=(sp_instr_freturn &);
public:
@@ -983,7 +995,7 @@ protected:
class sp_instr_hpush_jump : public sp_instr_jump
{
- sp_instr_hpush_jump(const sp_instr_hpush_jump &); /* Prevent use of these */
+ sp_instr_hpush_jump(const sp_instr_hpush_jump &); /**< Prevent use of these */
void operator=(sp_instr_hpush_jump &);
public:
@@ -1005,7 +1017,7 @@ public:
virtual uint opt_mark(sp_head *sp, List<sp_instr> *leads);
- /* Override sp_instr_jump's shortcut; we stop here. */
+ /** Override sp_instr_jump's shortcut; we stop here. */
virtual uint opt_shortcut_jump(sp_head *sp, sp_instr *start)
{
return m_ip;
@@ -1018,7 +1030,7 @@ public:
private:
- int m_type; // Handler type
+ int m_type; ///< Handler type
uint m_frame;
List<struct sp_cond_type> m_cond;
@@ -1027,7 +1039,7 @@ private:
class sp_instr_hpop : public sp_instr
{
- sp_instr_hpop(const sp_instr_hpop &); /* Prevent use of these */
+ sp_instr_hpop(const sp_instr_hpop &); /**< Prevent use of these */
void operator=(sp_instr_hpop &);
public:
@@ -1052,7 +1064,7 @@ private:
class sp_instr_hreturn : public sp_instr_jump
{
- sp_instr_hreturn(const sp_instr_hreturn &); /* Prevent use of these */
+ sp_instr_hreturn(const sp_instr_hreturn &); /**< Prevent use of these */
void operator=(sp_instr_hreturn &);
public:
@@ -1083,10 +1095,10 @@ private:
}; // class sp_instr_hreturn : public sp_instr_jump
-/* This is DECLARE CURSOR */
+/** This is DECLARE CURSOR */
class sp_instr_cpush : public sp_instr
{
- sp_instr_cpush(const sp_instr_cpush &); /* Prevent use of these */
+ sp_instr_cpush(const sp_instr_cpush &); /**< Prevent use of these */
void operator=(sp_instr_cpush &);
public:
@@ -1102,7 +1114,7 @@ public:
virtual void print(String *str);
- /*
+ /**
This call is used to cleanup the instruction when a sensitive
cursor is closed. For now stored procedures always use materialized
cursors and the call is not used.
@@ -1111,14 +1123,14 @@ public:
private:
sp_lex_keeper m_lex_keeper;
- uint m_cursor; /* Frame offset (for debugging) */
+ uint m_cursor; /**< Frame offset (for debugging) */
}; // class sp_instr_cpush : public sp_instr
class sp_instr_cpop : public sp_instr
{
- sp_instr_cpop(const sp_instr_cpop &); /* Prevent use of these */
+ sp_instr_cpop(const sp_instr_cpop &); /**< Prevent use of these */
void operator=(sp_instr_cpop &);
public:
@@ -1143,7 +1155,7 @@ private:
class sp_instr_copen : public sp_instr
{
- sp_instr_copen(const sp_instr_copen &); /* Prevent use of these */
+ sp_instr_copen(const sp_instr_copen &); /**< Prevent use of these */
void operator=(sp_instr_copen &);
public:
@@ -1163,14 +1175,14 @@ public:
private:
- uint m_cursor; // Stack index
+ uint m_cursor; ///< Stack index
}; // class sp_instr_copen : public sp_instr_stmt
class sp_instr_cclose : public sp_instr
{
- sp_instr_cclose(const sp_instr_cclose &); /* Prevent use of these */
+ sp_instr_cclose(const sp_instr_cclose &); /**< Prevent use of these */
void operator=(sp_instr_cclose &);
public:
@@ -1195,7 +1207,7 @@ private:
class sp_instr_cfetch : public sp_instr
{
- sp_instr_cfetch(const sp_instr_cfetch &); /* Prevent use of these */
+ sp_instr_cfetch(const sp_instr_cfetch &); /**< Prevent use of these */
void operator=(sp_instr_cfetch &);
public:
@@ -1228,7 +1240,7 @@ private:
class sp_instr_error : public sp_instr
{
- sp_instr_error(const sp_instr_error &); /* Prevent use of these */
+ sp_instr_error(const sp_instr_error &); /**< Prevent use of these */
void operator=(sp_instr_error &);
public:
diff --git a/sql/sp_rcontext.cc b/sql/sp_rcontext.cc
index 60a0c962c28..9b237b3e7cc 100644
--- a/sql/sp_rcontext.cc
+++ b/sql/sp_rcontext.cc
@@ -287,7 +287,6 @@ sp_rcontext::find_handler(THD *thd, uint sql_errno,
sql_errno The error code
level Warning level
thd The current thread
- - thd->net.report_error is an optional output.
RETURN
TRUE if a handler was found.
@@ -298,7 +297,6 @@ sp_rcontext::handle_error(uint sql_errno,
MYSQL_ERROR::enum_warning_level level,
THD *thd)
{
- bool handled= FALSE;
MYSQL_ERROR::enum_warning_level elevated_level= level;
@@ -310,41 +308,97 @@ sp_rcontext::handle_error(uint sql_errno,
elevated_level= MYSQL_ERROR::WARN_LEVEL_ERROR;
}
- if (find_handler(thd, sql_errno, elevated_level))
- {
- if (elevated_level == MYSQL_ERROR::WARN_LEVEL_ERROR)
- {
- /*
- Forces to abort the current instruction execution.
- NOTE: This code is altering the original meaning of
- the net.report_error flag (send an error to the client).
- In the context of stored procedures with error handlers,
- the flag is reused to cause error propagation,
- until the error handler is reached.
- No messages will be sent to the client in that context.
- */
- thd->net.report_error= 1;
- }
- handled= TRUE;
- }
-
- return handled;
+ return find_handler(thd, sql_errno, elevated_level);
}
void
sp_rcontext::push_cursor(sp_lex_keeper *lex_keeper, sp_instr_cpush *i)
{
+ DBUG_ENTER("sp_rcontext::push_cursor");
+ DBUG_ASSERT(m_ccount < m_root_parsing_ctx->max_cursor_index());
m_cstack[m_ccount++]= new sp_cursor(lex_keeper, i);
+ DBUG_PRINT("info", ("m_ccount: %d", m_ccount));
+ DBUG_VOID_RETURN;
}
-
void
sp_rcontext::pop_cursors(uint count)
{
+ DBUG_ENTER("sp_rcontext::pop_cursors");
+ DBUG_ASSERT(m_ccount >= count);
while (count--)
{
delete m_cstack[--m_ccount];
}
+ DBUG_PRINT("info", ("m_ccount: %d", m_ccount));
+ DBUG_VOID_RETURN;
+}
+
+void
+sp_rcontext::push_handler(struct sp_cond_type *cond, uint h, int type, uint f)
+{
+ DBUG_ENTER("sp_rcontext::push_handler");
+ DBUG_ASSERT(m_hcount < m_root_parsing_ctx->max_handler_index());
+
+ m_handler[m_hcount].cond= cond;
+ m_handler[m_hcount].handler= h;
+ m_handler[m_hcount].type= type;
+ m_handler[m_hcount].foffset= f;
+ m_hcount+= 1;
+
+ DBUG_PRINT("info", ("m_hcount: %d", m_hcount));
+ DBUG_VOID_RETURN;
+}
+
+void
+sp_rcontext::pop_handlers(uint count)
+{
+ DBUG_ENTER("sp_rcontext::pop_handlers");
+ DBUG_ASSERT(m_hcount >= count);
+ m_hcount-= count;
+ DBUG_PRINT("info", ("m_hcount: %d", m_hcount));
+ DBUG_VOID_RETURN;
+}
+
+void
+sp_rcontext::push_hstack(uint h)
+{
+ DBUG_ENTER("sp_rcontext::push_hstack");
+ DBUG_ASSERT(m_hsp < m_root_parsing_ctx->max_handler_index());
+ m_hstack[m_hsp++]= h;
+ DBUG_PRINT("info", ("m_hsp: %d", m_hsp));
+ DBUG_VOID_RETURN;
+}
+
+uint
+sp_rcontext::pop_hstack()
+{
+ uint handler;
+ DBUG_ENTER("sp_rcontext::pop_hstack");
+ DBUG_ASSERT(m_hsp);
+ handler= m_hstack[--m_hsp];
+ DBUG_PRINT("info", ("m_hsp: %d", m_hsp));
+ DBUG_RETURN(handler);
+}
+
+void
+sp_rcontext::enter_handler(int hid)
+{
+ DBUG_ENTER("sp_rcontext::enter_handler");
+ DBUG_ASSERT(m_ihsp < m_root_parsing_ctx->max_handler_index());
+ m_in_handler[m_ihsp++]= hid;
+ DBUG_PRINT("info", ("m_ihsp: %d", m_ihsp));
+ DBUG_VOID_RETURN;
+}
+
+void
+sp_rcontext::exit_handler()
+{
+ DBUG_ENTER("sp_rcontext::exit_handler");
+ DBUG_ASSERT(m_ihsp);
+ m_ihsp-= 1;
+ DBUG_PRINT("info", ("m_ihsp: %d", m_ihsp));
+ DBUG_VOID_RETURN;
}
@@ -503,14 +557,14 @@ sp_cursor::fetch(THD *thd, List<struct sp_variable> *vars)
*/
Item_cache *
-sp_rcontext::create_case_expr_holder(THD *thd, Item_result result_type)
+sp_rcontext::create_case_expr_holder(THD *thd, const Item *item)
{
Item_cache *holder;
Query_arena current_arena;
thd->set_n_backup_active_arena(thd->spcont->callers_arena, &current_arena);
- holder= Item_cache::get_cache(result_type);
+ holder= Item_cache::get_cache(item);
thd->restore_active_arena(thd->spcont->callers_arena, &current_arena);
@@ -559,7 +613,7 @@ sp_rcontext::set_case_expr(THD *thd, int case_expr_id, Item **case_expr_item_ptr
case_expr_item->result_type())
{
m_case_expr_holders[case_expr_id]=
- create_case_expr_holder(thd, case_expr_item->result_type());
+ create_case_expr_holder(thd, case_expr_item);
}
m_case_expr_holders[case_expr_id]->store(case_expr_item);
diff --git a/sql/sp_rcontext.h b/sql/sp_rcontext.h
index 0104b71a648..368a017da21 100644
--- a/sql/sp_rcontext.h
+++ b/sql/sp_rcontext.h
@@ -107,21 +107,9 @@ class sp_rcontext : public Sql_alloc
return m_return_value_set;
}
- inline void
- push_handler(struct sp_cond_type *cond, uint h, int type, uint f)
- {
- m_handler[m_hcount].cond= cond;
- m_handler[m_hcount].handler= h;
- m_handler[m_hcount].type= type;
- m_handler[m_hcount].foffset= f;
- m_hcount+= 1;
- }
+ void push_handler(struct sp_cond_type *cond, uint h, int type, uint f);
- inline void
- pop_handlers(uint count)
- {
- m_hcount-= count;
- }
+ void pop_handlers(uint count);
// Returns 1 if a handler was found, 0 otherwise.
bool
@@ -158,29 +146,13 @@ class sp_rcontext : public Sql_alloc
m_hfound= -1;
}
- inline void
- push_hstack(uint h)
- {
- m_hstack[m_hsp++]= h;
- }
+ void push_hstack(uint h);
- inline uint
- pop_hstack()
- {
- return m_hstack[--m_hsp];
- }
+ uint pop_hstack();
- inline void
- enter_handler(int hid)
- {
- m_in_handler[m_ihsp++]= hid;
- }
+ void enter_handler(int hid);
- inline void
- exit_handler()
- {
- m_ihsp-= 1;
- }
+ void exit_handler();
void
push_cursor(sp_lex_keeper *lex_keeper, sp_instr_cpush *i);
@@ -261,7 +233,7 @@ private:
bool init_var_table(THD *thd);
bool init_var_items();
- Item_cache *create_case_expr_holder(THD *thd, Item_result result_type);
+ Item_cache *create_case_expr_holder(THD *thd, const Item *item);
int set_variable(THD *thd, Field *field, Item **value);
}; // class sp_rcontext : public Sql_alloc
diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc
index 3809dbd86c0..0d563ab9051 100644
--- a/sql/sql_acl.cc
+++ b/sql/sql_acl.cc
@@ -277,6 +277,7 @@ my_bool acl_init(bool dont_read_acl_tables)
DBUG_RETURN(1); /* purecov: inspected */
thd->thread_stack= (char*) &thd;
thd->store_globals();
+ lex_start(thd);
/*
It is safe to call acl_reload() since acl_* arrays and hashes which
will be freed there are global static objects and thus are initialized
@@ -428,7 +429,7 @@ static my_bool acl_load(THD *thd, TABLE_LIST *tables)
continue;
}
- const char *password= get_field(&mem, table->field[2]);
+ const char *password= get_field(thd->mem_root, table->field[2]);
uint password_len= password ? strlen(password) : 0;
set_user_salt(&user, password, password_len);
if (user.salt_len == 0 && password_len != 0)
@@ -495,7 +496,7 @@ static my_bool acl_load(THD *thd, TABLE_LIST *tables)
/* Starting from 4.0.2 we have more fields */
if (table->s->fields >= 31)
{
- char *ssl_type=get_field(&mem, table->field[next_field++]);
+ char *ssl_type=get_field(thd->mem_root, table->field[next_field++]);
if (!ssl_type)
user.ssl_type=SSL_TYPE_NONE;
else if (!strcmp(ssl_type, "ANY"))
@@ -509,11 +510,11 @@ static my_bool acl_load(THD *thd, TABLE_LIST *tables)
user.x509_issuer= get_field(&mem, table->field[next_field++]);
user.x509_subject= get_field(&mem, table->field[next_field++]);
- char *ptr = get_field(&mem, table->field[next_field++]);
+ char *ptr = get_field(thd->mem_root, table->field[next_field++]);
user.user_resource.questions=ptr ? atoi(ptr) : 0;
- ptr = get_field(&mem, table->field[next_field++]);
+ ptr = get_field(thd->mem_root, table->field[next_field++]);
user.user_resource.updates=ptr ? atoi(ptr) : 0;
- ptr = get_field(&mem, table->field[next_field++]);
+ ptr = get_field(thd->mem_root, table->field[next_field++]);
user.user_resource.conn_per_hour= ptr ? atoi(ptr) : 0;
if (user.user_resource.questions || user.user_resource.updates ||
user.user_resource.conn_per_hour)
@@ -522,7 +523,7 @@ static my_bool acl_load(THD *thd, TABLE_LIST *tables)
if (table->s->fields >= 36)
{
/* Starting from 5.0.3 we have max_user_connections field */
- ptr= get_field(&mem, table->field[next_field++]);
+ ptr= get_field(thd->mem_root, table->field[next_field++]);
user.user_resource.user_conn= ptr ? atoi(ptr) : 0;
}
else
@@ -694,7 +695,7 @@ my_bool acl_reload(THD *thd)
if (simple_open_n_lock_tables(thd, tables))
{
sql_print_error("Fatal error: Can't open and lock privilege tables: %s",
- thd->net.last_error);
+ thd->main_da.message());
goto end;
}
@@ -3471,16 +3472,13 @@ void grant_free(void)
}
-/*
- Initialize structures responsible for table/column-level privilege checking
- and load information for them from tables in the 'mysql' database.
-
- SYNOPSIS
- grant_init()
+/**
+ @brief Initialize structures responsible for table/column-level privilege
+ checking and load information for them from tables in the 'mysql' database.
- RETURN VALUES
- 0 ok
- 1 Could not initialize grant's
+ @return Error status
+ @retval 0 OK
+ @retval 1 Could not initialize grant subsystem.
*/
my_bool grant_init()
@@ -3493,6 +3491,7 @@ my_bool grant_init()
DBUG_RETURN(1); /* purecov: deadcode */
thd->thread_stack= (char*) &thd;
thd->store_globals();
+ lex_start(thd);
return_val= grant_reload(thd);
delete thd;
/* Remember that we don't have a THD */
@@ -3501,96 +3500,144 @@ my_bool grant_init()
}
-/*
- Initialize structures responsible for table/column-level privilege
- checking and load information about grants from open privilege tables.
+/**
+ @brief Helper function to grant_reload_procs_priv
- SYNOPSIS
- grant_load()
- thd Current thread
- tables List containing open "mysql.tables_priv" and
- "mysql.columns_priv" tables.
+ Reads the procs_priv table into memory hash.
- RETURN VALUES
- FALSE - success
- TRUE - error
+ @param table A pointer to the procs_priv table structure.
+
+ @see grant_reload
+ @see grant_reload_procs_priv
+
+ @return Error state
+ @retval TRUE An error occurred
+ @retval FALSE Success
*/
-static my_bool grant_load(TABLE_LIST *tables)
+static my_bool grant_load_procs_priv(TABLE *p_table)
{
MEM_ROOT *memex_ptr;
my_bool return_val= 1;
- TABLE *t_table, *c_table, *p_table;
bool check_no_resolve= specialflag & SPECIAL_NO_RESOLVE;
MEM_ROOT **save_mem_root_ptr= my_pthread_getspecific_ptr(MEM_ROOT**,
THR_MALLOC);
DBUG_ENTER("grant_load");
-
- (void) hash_init(&column_priv_hash,system_charset_info,
- 0,0,0, (hash_get_key) get_grant_table,
- (hash_free_key) free_grant_table,0);
(void) hash_init(&proc_priv_hash,system_charset_info,
- 0,0,0, (hash_get_key) get_grant_table,
- 0,0);
+ 0,0,0, (hash_get_key) get_grant_table,
+ 0,0);
(void) hash_init(&func_priv_hash,system_charset_info,
- 0,0,0, (hash_get_key) get_grant_table,
- 0,0);
- init_sql_alloc(&memex, ACL_ALLOC_BLOCK_SIZE, 0);
-
- t_table = tables[0].table;
- c_table = tables[1].table;
- p_table= tables[2].table;
- t_table->file->ha_index_init(0, 1);
+ 0,0,0, (hash_get_key) get_grant_table,
+ 0,0);
p_table->file->ha_index_init(0, 1);
- t_table->use_all_columns();
- c_table->use_all_columns();
p_table->use_all_columns();
- if (!t_table->file->index_first(t_table->record[0]))
+
+ if (!p_table->file->index_first(p_table->record[0]))
{
memex_ptr= &memex;
my_pthread_setspecific_ptr(THR_MALLOC, &memex_ptr);
do
{
- GRANT_TABLE *mem_check;
- if (!(mem_check=new (memex_ptr) GRANT_TABLE(t_table,c_table)))
+ GRANT_NAME *mem_check;
+ HASH *hash;
+ if (!(mem_check=new (memex_ptr) GRANT_NAME(p_table)))
{
- /* This could only happen if we are out memory */
- goto end_unlock;
+ /* This could only happen if we are out memory */
+ goto end_unlock;
}
if (check_no_resolve)
{
if (hostname_requires_resolving(mem_check->host.hostname))
{
- sql_print_warning("'tables_priv' entry '%s %s@%s' "
+ sql_print_warning("'procs_priv' entry '%s %s@%s' "
"ignored in --skip-name-resolve mode.",
- mem_check->tname,
- mem_check->user ? mem_check->user : "",
+ mem_check->tname, mem_check->user,
mem_check->host.hostname ?
mem_check->host.hostname : "");
- continue;
- }
+ continue;
+ }
+ }
+ if (p_table->field[4]->val_int() == TYPE_ENUM_PROCEDURE)
+ {
+ hash= &proc_priv_hash;
+ }
+ else
+ if (p_table->field[4]->val_int() == TYPE_ENUM_FUNCTION)
+ {
+ hash= &func_priv_hash;
+ }
+ else
+ {
+ sql_print_warning("'procs_priv' entry '%s' "
+ "ignored, bad routine type",
+ mem_check->tname);
+ continue;
}
+ mem_check->privs= fix_rights_for_procedure(mem_check->privs);
if (! mem_check->ok())
- delete mem_check;
- else if (my_hash_insert(&column_priv_hash,(uchar*) mem_check))
+ delete mem_check;
+ else if (my_hash_insert(hash, (uchar*) mem_check))
{
- delete mem_check;
- goto end_unlock;
+ delete mem_check;
+ goto end_unlock;
}
}
- while (!t_table->file->index_next(t_table->record[0]));
+ while (!p_table->file->index_next(p_table->record[0]));
}
- if (!p_table->file->index_first(p_table->record[0]))
+ /* Return ok */
+ return_val= 0;
+
+end_unlock:
+ p_table->file->ha_index_end();
+ my_pthread_setspecific_ptr(THR_MALLOC, save_mem_root_ptr);
+ DBUG_RETURN(return_val);
+}
+
+
+/**
+ @brief Initialize structures responsible for table/column-level privilege
+ checking and load information about grants from open privilege tables.
+
+ @param thd Current thread
+ @param tables List containing open "mysql.tables_priv" and
+ "mysql.columns_priv" tables.
+
+ @see grant_reload
+
+ @return Error state
+ @retval FALSE Success
+ @retval TRUE Error
+*/
+
+static my_bool grant_load(TABLE_LIST *tables)
+{
+ MEM_ROOT *memex_ptr;
+ my_bool return_val= 1;
+ TABLE *t_table= 0, *c_table= 0;
+ bool check_no_resolve= specialflag & SPECIAL_NO_RESOLVE;
+ MEM_ROOT **save_mem_root_ptr= my_pthread_getspecific_ptr(MEM_ROOT**,
+ THR_MALLOC);
+ DBUG_ENTER("grant_load");
+ (void) hash_init(&column_priv_hash,system_charset_info,
+ 0,0,0, (hash_get_key) get_grant_table,
+ (hash_free_key) free_grant_table,0);
+
+ t_table = tables[0].table;
+ c_table = tables[1].table;
+ t_table->file->ha_index_init(0, 1);
+ t_table->use_all_columns();
+ c_table->use_all_columns();
+
+ if (!t_table->file->index_first(t_table->record[0]))
{
memex_ptr= &memex;
my_pthread_setspecific_ptr(THR_MALLOC, &memex_ptr);
do
{
- GRANT_NAME *mem_check;
- HASH *hash;
- if (!(mem_check=new (&memex) GRANT_NAME(p_table)))
+ GRANT_TABLE *mem_check;
+ if (!(mem_check=new (memex_ptr) GRANT_TABLE(t_table,c_table)))
{
/* This could only happen if we are out memory */
goto end_unlock;
@@ -3600,74 +3647,111 @@ static my_bool grant_load(TABLE_LIST *tables)
{
if (hostname_requires_resolving(mem_check->host.hostname))
{
- sql_print_warning("'procs_priv' entry '%s %s@%s' "
+ sql_print_warning("'tables_priv' entry '%s %s@%s' "
"ignored in --skip-name-resolve mode.",
- mem_check->tname, mem_check->user,
+ mem_check->tname,
+ mem_check->user ? mem_check->user : "",
mem_check->host.hostname ?
mem_check->host.hostname : "");
continue;
}
}
- if (p_table->field[4]->val_int() == TYPE_ENUM_PROCEDURE)
- {
- hash= &proc_priv_hash;
- }
- else
- if (p_table->field[4]->val_int() == TYPE_ENUM_FUNCTION)
- {
- hash= &func_priv_hash;
- }
- else
- {
- sql_print_warning("'procs_priv' entry '%s' "
- "ignored, bad routine type",
- mem_check->tname);
- continue;
- }
- mem_check->privs= fix_rights_for_procedure(mem_check->privs);
if (! mem_check->ok())
delete mem_check;
- else if (my_hash_insert(hash, (uchar*) mem_check))
+ else if (my_hash_insert(&column_priv_hash,(uchar*) mem_check))
{
delete mem_check;
goto end_unlock;
}
}
- while (!p_table->file->index_next(p_table->record[0]));
+ while (!t_table->file->index_next(t_table->record[0]));
}
+
return_val=0; // Return ok
end_unlock:
t_table->file->ha_index_end();
- p_table->file->ha_index_end();
my_pthread_setspecific_ptr(THR_MALLOC, save_mem_root_ptr);
DBUG_RETURN(return_val);
}
-/*
- Reload information about table and column level privileges if possible.
+/**
+ @brief Helper function to grant_reload. Reloads procs_priv table is it
+ exists.
- SYNOPSIS
- grant_reload()
- thd Current thread
+ @param thd A pointer to the thread handler object.
- NOTES
- Locked tables are checked by acl_reload() and doesn't have to be checked
- in this call.
- This function is also used for initialization of structures responsible
- for table/column-level privilege checking.
+ @see grant_reload
- RETURN VALUE
- FALSE Success
- TRUE Error
+ @return Error state
+ @retval FALSE Success
+ @retval TRUE An error has occurred.
+*/
+
+static my_bool grant_reload_procs_priv(THD *thd)
+{
+ HASH old_proc_priv_hash, old_func_priv_hash;
+ TABLE_LIST table;
+ my_bool return_val= FALSE;
+ DBUG_ENTER("grant_reload_procs_priv");
+
+ bzero((char*) &table, sizeof(table));
+ table.alias= table.table_name= (char*) "procs_priv";
+ table.db= (char *) "mysql";
+ table.lock_type= TL_READ;
+
+ if (simple_open_n_lock_tables(thd, &table))
+ {
+ close_thread_tables(thd);
+ DBUG_RETURN(TRUE);
+ }
+
+ /* Save a copy of the current hash if we need to undo the grant load */
+ old_proc_priv_hash= proc_priv_hash;
+ old_func_priv_hash= func_priv_hash;
+
+ rw_wrlock(&LOCK_grant);
+ if ((return_val= grant_load_procs_priv(table.table)))
+ {
+ /* Error; Reverting to old hash */
+ DBUG_PRINT("error",("Reverting to old privileges"));
+ grant_free();
+ proc_priv_hash= old_proc_priv_hash;
+ func_priv_hash= old_func_priv_hash;
+ }
+ else
+ {
+ hash_free(&old_proc_priv_hash);
+ hash_free(&old_func_priv_hash);
+ }
+ rw_unlock(&LOCK_grant);
+
+ close_thread_tables(thd);
+ DBUG_RETURN(return_val);
+}
+
+
+/**
+ @brief Reload information about table and column level privileges if possible
+
+ @param thd Current thread
+
+ Locked tables are checked by acl_reload() and doesn't have to be checked
+ in this call.
+ This function is also used for initialization of structures responsible
+ for table/column-level privilege checking.
+
+ @return Error state
+ @retval FALSE Success
+ @retval TRUE Error
*/
my_bool grant_reload(THD *thd)
{
- TABLE_LIST tables[3];
- HASH old_column_priv_hash, old_proc_priv_hash, old_func_priv_hash;
+ TABLE_LIST tables[2];
+ HASH old_column_priv_hash;
MEM_ROOT old_mem;
my_bool return_val= 1;
DBUG_ENTER("grant_reload");
@@ -3679,11 +3763,9 @@ my_bool grant_reload(THD *thd)
bzero((char*) tables, sizeof(tables));
tables[0].alias= tables[0].table_name= (char*) "tables_priv";
tables[1].alias= tables[1].table_name= (char*) "columns_priv";
- tables[2].alias= tables[2].table_name= (char*) "procs_priv";
- tables[0].db= tables[1].db= tables[2].db= (char *) "mysql";
+ tables[0].db= tables[1].db= (char *) "mysql";
tables[0].next_local= tables[0].next_global= tables+1;
- tables[1].next_local= tables[1].next_global= tables+2;
- tables[0].lock_type= tables[1].lock_type= tables[2].lock_type= TL_READ;
+ tables[0].lock_type= tables[1].lock_type= TL_READ;
/*
To avoid deadlocks we should obtain table locks before
@@ -3693,35 +3775,45 @@ my_bool grant_reload(THD *thd)
goto end;
rw_wrlock(&LOCK_grant);
- grant_version++;
old_column_priv_hash= column_priv_hash;
- old_proc_priv_hash= proc_priv_hash;
- old_func_priv_hash= func_priv_hash;
+
+ /*
+ Create a new memory pool but save the current memory pool to make an undo
+ opertion possible in case of failure.
+ */
old_mem= memex;
+ init_sql_alloc(&memex, ACL_ALLOC_BLOCK_SIZE, 0);
if ((return_val= grant_load(tables)))
{ // Error. Revert to old hash
DBUG_PRINT("error",("Reverting to old privileges"));
grant_free(); /* purecov: deadcode */
column_priv_hash= old_column_priv_hash; /* purecov: deadcode */
- proc_priv_hash= old_proc_priv_hash;
- func_priv_hash= old_func_priv_hash;
memex= old_mem; /* purecov: deadcode */
}
else
{
hash_free(&old_column_priv_hash);
- hash_free(&old_proc_priv_hash);
- hash_free(&old_func_priv_hash);
free_root(&old_mem,MYF(0));
}
rw_unlock(&LOCK_grant);
-end:
close_thread_tables(thd);
+
+ /*
+ It is OK failing to load procs_priv table because we may be
+ working with 4.1 privilege tables.
+ */
+ if (grant_reload_procs_priv(thd))
+ return_val= 1;
+
+ rw_wrlock(&LOCK_grant);
+ grant_version++;
+ rw_unlock(&LOCK_grant);
+
+end:
DBUG_RETURN(return_val);
}
-
/****************************************************************************
Check table level grants
@@ -3991,47 +4083,78 @@ bool check_column_grant_in_table_ref(THD *thd, TABLE_LIST * table_ref,
}
-bool check_grant_all_columns(THD *thd, ulong want_access, GRANT_INFO *grant,
- const char* db_name, const char *table_name,
- Field_iterator *fields)
+/**
+ @brief check if a query can access a set of columns
+
+ @param thd the current thread
+ @param want_access_arg the privileges requested
+ @param fields an iterator over the fields of a table reference.
+ @return Operation status
+ @retval 0 Success
+ @retval 1 Falure
+ @details This function walks over the columns of a table reference
+ The columns may originate from different tables, depending on the kind of
+ table reference, e.g. join.
+ For each table it will retrieve the grant information and will use it
+ to check the required access privileges for the fields requested from it.
+*/
+bool check_grant_all_columns(THD *thd, ulong want_access_arg,
+ Field_iterator_table_ref *fields)
{
Security_context *sctx= thd->security_ctx;
- GRANT_TABLE *grant_table;
- GRANT_COLUMN *grant_column;
+ ulong want_access= want_access_arg;
+ const char *table_name= NULL;
- want_access &= ~grant->privilege;
- if (!want_access)
- return 0; // Already checked
+ const char* db_name;
+ GRANT_INFO *grant;
+ /* Initialized only to make gcc happy */
+ GRANT_TABLE *grant_table= NULL;
rw_rdlock(&LOCK_grant);
- /* reload table if someone has modified any grants */
-
- if (grant->version != grant_version)
- {
- grant->grant_table=
- table_hash_search(sctx->host, sctx->ip, db_name,
- sctx->priv_user,
- table_name, 0); /* purecov: inspected */
- grant->version= grant_version; /* purecov: inspected */
- }
- /* The following should always be true */
- if (!(grant_table= grant->grant_table))
- goto err; /* purecov: inspected */
-
for (; !fields->end_of_fields(); fields->next())
{
const char *field_name= fields->name();
- grant_column= column_hash_search(grant_table, field_name,
- (uint) strlen(field_name));
- if (!grant_column || (~grant_column->rights & want_access))
- goto err;
+
+ if (table_name != fields->table_name())
+ {
+ table_name= fields->table_name();
+ db_name= fields->db_name();
+ grant= fields->grant();
+ /* get a fresh one for each table */
+ want_access= want_access_arg & ~grant->privilege;
+ if (want_access)
+ {
+ /* reload table if someone has modified any grants */
+ if (grant->version != grant_version)
+ {
+ grant->grant_table=
+ table_hash_search(sctx->host, sctx->ip, db_name,
+ sctx->priv_user,
+ table_name, 0); /* purecov: inspected */
+ grant->version= grant_version; /* purecov: inspected */
+ }
+
+ grant_table= grant->grant_table;
+ DBUG_ASSERT (grant_table);
+ }
+ }
+
+ if (want_access)
+ {
+ GRANT_COLUMN *grant_column=
+ column_hash_search(grant_table, field_name,
+ (uint) strlen(field_name));
+ if (!grant_column || (~grant_column->rights & want_access))
+ goto err;
+ }
}
rw_unlock(&LOCK_grant);
return 0;
err:
rw_unlock(&LOCK_grant);
+
char command[128];
get_privilege_desc(command, sizeof(command), want_access);
my_error(ER_COLUMNACCESS_DENIED_ERROR, MYF(0),
@@ -5019,6 +5142,7 @@ static int handle_grant_table(TABLE_LIST *tables, uint table_no, bool drop,
uchar user_key[MAX_KEY_LENGTH];
uint key_prefix_length;
DBUG_ENTER("handle_grant_table");
+ THD *thd= current_thd;
table->use_all_columns();
if (! table_no) // mysql.user table
@@ -5087,17 +5211,18 @@ static int handle_grant_table(TABLE_LIST *tables, uint table_no, bool drop,
DBUG_PRINT("info",("scan error: %d", error));
continue;
}
- if (! (host= get_field(&mem, host_field)))
+ if (! (host= get_field(thd->mem_root, host_field)))
host= "";
- if (! (user= get_field(&mem, user_field)))
+ if (! (user= get_field(thd->mem_root, user_field)))
user= "";
#ifdef EXTRA_DEBUG
DBUG_PRINT("loop",("scan fields: '%s'@'%s' '%s' '%s' '%s'",
user, host,
- get_field(&mem, table->field[1]) /*db*/,
- get_field(&mem, table->field[3]) /*table*/,
- get_field(&mem, table->field[4]) /*column*/));
+ get_field(thd->mem_root, table->field[1]) /*db*/,
+ get_field(thd->mem_root, table->field[3]) /*table*/,
+ get_field(thd->mem_root,
+ table->field[4]) /*column*/));
#endif
if (strcmp(user_str, user) ||
my_strcasecmp(system_charset_info, host_str, host))
@@ -5454,6 +5579,7 @@ bool mysql_create_user(THD *thd, List <LEX_USER> &list)
LEX_USER *user_name, *tmp_user_name;
List_iterator <LEX_USER> user_list(list);
TABLE_LIST tables[GRANT_TABLES];
+ bool some_users_created= FALSE;
DBUG_ENTER("mysql_create_user");
/*
@@ -5489,6 +5615,7 @@ bool mysql_create_user(THD *thd, List <LEX_USER> &list)
continue;
}
+ some_users_created= TRUE;
sql_mode= thd->variables.sql_mode;
if (replace_user_table(thd, tables[0].table, *user_name, 0, 0, 1, 0))
{
@@ -5499,12 +5626,14 @@ bool mysql_create_user(THD *thd, List <LEX_USER> &list)
VOID(pthread_mutex_unlock(&acl_cache->lock));
- write_bin_log(thd, FALSE, thd->query, thd->query_length);
+ if (result)
+ my_error(ER_CANNOT_USER, MYF(0), "CREATE USER", wrong_users.c_ptr_safe());
+
+ if (some_users_created)
+ write_bin_log(thd, FALSE, thd->query, thd->query_length);
rw_unlock(&LOCK_grant);
close_thread_tables(thd);
- if (result)
- my_error(ER_CANNOT_USER, MYF(0), "CREATE USER", wrong_users.c_ptr_safe());
DBUG_RETURN(result);
}
@@ -5529,6 +5658,7 @@ bool mysql_drop_user(THD *thd, List <LEX_USER> &list)
LEX_USER *user_name, *tmp_user_name;
List_iterator <LEX_USER> user_list(list);
TABLE_LIST tables[GRANT_TABLES];
+ bool some_users_deleted= FALSE;
DBUG_ENTER("mysql_drop_user");
/*
@@ -5557,7 +5687,9 @@ bool mysql_drop_user(THD *thd, List <LEX_USER> &list)
{
append_user(&wrong_users, user_name);
result= TRUE;
+ continue;
}
+ some_users_deleted= TRUE;
}
/* Rebuild 'acl_check_hosts' since 'acl_users' has been modified */
@@ -5568,10 +5700,8 @@ bool mysql_drop_user(THD *thd, List <LEX_USER> &list)
if (result)
my_error(ER_CANNOT_USER, MYF(0), "DROP USER", wrong_users.c_ptr_safe());
- DBUG_PRINT("info", ("thd->net.last_errno: %d", thd->net.last_errno));
- DBUG_PRINT("info", ("thd->net.last_error: %s", thd->net.last_error));
-
- write_bin_log(thd, FALSE, thd->query, thd->query_length);
+ if (some_users_deleted)
+ write_bin_log(thd, FALSE, thd->query, thd->query_length);
rw_unlock(&LOCK_grant);
close_thread_tables(thd);
@@ -5600,6 +5730,7 @@ bool mysql_rename_user(THD *thd, List <LEX_USER> &list)
LEX_USER *user_to, *tmp_user_to;
List_iterator <LEX_USER> user_list(list);
TABLE_LIST tables[GRANT_TABLES];
+ bool some_users_renamed= FALSE;
DBUG_ENTER("mysql_rename_user");
/*
@@ -5640,7 +5771,9 @@ bool mysql_rename_user(THD *thd, List <LEX_USER> &list)
{
append_user(&wrong_users, user_from);
result= TRUE;
+ continue;
}
+ some_users_renamed= TRUE;
}
/* Rebuild 'acl_check_hosts' since 'acl_users' has been modified */
@@ -5648,12 +5781,14 @@ bool mysql_rename_user(THD *thd, List <LEX_USER> &list)
VOID(pthread_mutex_unlock(&acl_cache->lock));
- write_bin_log(thd, FALSE, thd->query, thd->query_length);
+ if (result)
+ my_error(ER_CANNOT_USER, MYF(0), "RENAME USER", wrong_users.c_ptr_safe());
+
+ if (some_users_renamed && mysql_bin_log.is_open())
+ write_bin_log(thd, FALSE, thd->query, thd->query_length);
rw_unlock(&LOCK_grant);
close_thread_tables(thd);
- if (result)
- my_error(ER_CANNOT_USER, MYF(0), "RENAME USER", wrong_users.c_ptr_safe());
DBUG_RETURN(result);
}
diff --git a/sql/sql_acl.h b/sql/sql_acl.h
index cba283ec65b..a279c26c2e4 100644
--- a/sql/sql_acl.h
+++ b/sql/sql_acl.h
@@ -244,9 +244,8 @@ bool check_grant_column (THD *thd, GRANT_INFO *grant,
const char *name, uint length, Security_context *sctx);
bool check_column_grant_in_table_ref(THD *thd, TABLE_LIST * table_ref,
const char *name, uint length);
-bool check_grant_all_columns(THD *thd, ulong want_access, GRANT_INFO *grant,
- const char* db_name, const char *table_name,
- Field_iterator *fields);
+bool check_grant_all_columns(THD *thd, ulong want_access,
+ Field_iterator_table_ref *fields);
bool check_grant_routine(THD *thd, ulong want_access,
TABLE_LIST *procs, bool is_proc, bool no_error);
bool check_grant_db(THD *thd,const char *db);
diff --git a/sql/sql_base.cc b/sql/sql_base.cc
index 3a959d30a5d..799cb673a0e 100644
--- a/sql/sql_base.cc
+++ b/sql/sql_base.cc
@@ -44,7 +44,7 @@ public:
virtual ~Prelock_error_handler() {}
- virtual bool handle_error(uint sql_errno,
+ virtual bool handle_error(uint sql_errno, const char *message,
MYSQL_ERROR::enum_warning_level level,
THD *thd);
@@ -58,6 +58,7 @@ private:
bool
Prelock_error_handler::handle_error(uint sql_errno,
+ const char * /* message */,
MYSQL_ERROR::enum_warning_level /* level */,
THD * /* thd */)
{
@@ -86,7 +87,6 @@ bool Prelock_error_handler::safely_trapped_errors()
@defgroup Data_Dictionary Data Dictionary
@{
*/
-
TABLE *unused_tables; /* Used by mysql_test */
HASH open_cache; /* Used by mysql_test */
static HASH table_def_cache;
@@ -130,7 +130,7 @@ void table_cache_free(void)
DBUG_ENTER("table_cache_free");
if (table_def_inited)
{
- close_cached_tables((THD*) 0,0,(TABLE_LIST*) 0);
+ close_cached_tables(NULL, NULL, FALSE, FALSE, FALSE);
if (!open_cache.records) // Safety first
hash_free(&open_cache);
}
@@ -491,9 +491,28 @@ static TABLE_SHARE
int tmp;
DBUG_ENTER("get_table_share_with_create");
- if ((share= get_table_share(thd, table_list, key, key_length,
- db_flags, error)) ||
- thd->net.last_errno != ER_NO_SUCH_TABLE)
+ share= get_table_share(thd, table_list, key, key_length, db_flags, error);
+ /*
+ If share is not NULL, we found an existing share.
+
+ If share is NULL, and there is no error, we're inside
+ pre-locking, which silences 'ER_NO_SUCH_TABLE' errors
+ with the intention to silently drop non-existing tables
+ from the pre-locking list. In this case we still need to try
+ auto-discover before returning a NULL share.
+
+ If share is NULL and the error is ER_NO_SUCH_TABLE, this is
+ the same as above, only that the error was not silenced by
+ pre-locking. Once again, we need to try to auto-discover
+ the share.
+
+ Finally, if share is still NULL, it's a real error and we need
+ to abort.
+
+ @todo Rework alternative ways to deal with ER_NO_SUCH TABLE.
+ */
+ if (share || thd->is_error() && thd->main_da.sql_errno() != ER_NO_SUCH_TABLE)
+
DBUG_RETURN(share);
/* Table didn't exist. Check if some engine can provide it */
@@ -502,9 +521,13 @@ static TABLE_SHARE
{
/*
No such table in any engine.
- Hide "Table doesn't exist" errors if table belong to view
+ Hide "Table doesn't exist" errors if the table belongs to a view.
+ The check for thd->is_error() is necessary to not push an
+ unwanted error in case of pre-locking, which silences
+ "no such table" errors.
+ @todo Rework the alternative ways to deal with ER_NO_SUCH TABLE.
*/
- if (table_list->belong_to_view)
+ if (thd->is_error() && table_list->belong_to_view)
{
TABLE_LIST *view= table_list->belong_to_view;
thd->clear_error();
@@ -683,6 +706,9 @@ TABLE_SHARE *get_cached_table_share(const char *db, const char *table_name)
to open the table
thd->killed will be set if we run out of memory
+
+ If closing a MERGE child, the calling function has to take care for
+ closing the parent too, if necessary.
*/
@@ -711,6 +737,12 @@ void close_handle_and_leave_table_as_lock(TABLE *table)
share->tmp_table= INTERNAL_TMP_TABLE; // for intern_close_table()
}
+ /*
+ When closing a MERGE parent or child table, detach the children first.
+ Do not clear child table references to allow for reopen.
+ */
+ if (table->child_l || table->parent)
+ detach_merge_children(table, FALSE);
table->file->close();
table->db_stat= 0; // Mark file closed
release_table_share(table->s, RELEASE_NORMAL);
@@ -811,6 +843,10 @@ OPEN_TABLE_LIST *list_open_tables(THD *thd, const char *db, const char *wild)
void intern_close_table(TABLE *table)
{ // Free all structures
DBUG_ENTER("intern_close_table");
+ DBUG_PRINT("tcache", ("table: '%s'.'%s' 0x%lx",
+ table->s ? table->s->db.str : "?",
+ table->s ? table->s->table_name.str : "?",
+ (long) table));
free_io_cache(table);
delete table->triggers;
@@ -834,6 +870,9 @@ static void free_cache_entry(TABLE *table)
{
DBUG_ENTER("free_cache_entry");
+ /* Assert that MERGE children are not attached before final close. */
+ DBUG_ASSERT(!table->is_children_attached());
+
intern_close_table(table);
if (!table->in_use)
{
@@ -869,16 +908,24 @@ void free_io_cache(TABLE *table)
/*
Close all tables which aren't in use by any thread
- THD can be NULL, but then if_wait_for_refresh must be FALSE
- and tables must be NULL.
+ @param thd Thread context
+ @param tables List of tables to remove from the cache
+ @param have_lock If LOCK_open is locked
+ @param wait_for_refresh Wait for a impending flush
+ @param wait_for_placeholders Wait for tables being reopened so that the GRL
+ won't proceed while write-locked tables are being reopened by other
+ threads.
+
+ @remark THD can be NULL, but then wait_for_refresh must be FALSE
+ and tables must be NULL.
*/
-bool close_cached_tables(THD *thd, bool if_wait_for_refresh,
- TABLE_LIST *tables, bool have_lock)
+bool close_cached_tables(THD *thd, TABLE_LIST *tables, bool have_lock,
+ bool wait_for_refresh, bool wait_for_placeholders)
{
bool result=0;
DBUG_ENTER("close_cached_tables");
- DBUG_ASSERT(thd || (!if_wait_for_refresh && !tables));
+ DBUG_ASSERT(thd || (!wait_for_refresh && !tables));
if (!have_lock)
VOID(pthread_mutex_lock(&LOCK_open));
@@ -900,6 +947,54 @@ bool close_cached_tables(THD *thd, bool if_wait_for_refresh,
pthread_mutex_lock(&oldest_unused_share->mutex);
VOID(hash_delete(&table_def_cache, (uchar*) oldest_unused_share));
}
+ DBUG_PRINT("tcache", ("incremented global refresh_version to: %lu",
+ refresh_version));
+ if (wait_for_refresh)
+ {
+ /*
+ Other threads could wait in a loop in open_and_lock_tables(),
+ trying to lock one or more of our tables.
+
+ If they wait for the locks in thr_multi_lock(), their lock
+ request is aborted. They loop in open_and_lock_tables() and
+ enter open_table(). Here they notice the table is refreshed and
+ wait for COND_refresh. Then they loop again in
+ open_and_lock_tables() and this time open_table() succeeds. At
+ this moment, if we (the FLUSH TABLES thread) are scheduled and
+ on another FLUSH TABLES enter close_cached_tables(), they could
+ awake while we sleep below, waiting for others threads (us) to
+ close their open tables. If this happens, the other threads
+ would find the tables unlocked. They would get the locks, one
+ after the other, and could do their destructive work. This is an
+ issue if we have LOCK TABLES in effect.
+
+ The problem is that the other threads passed all checks in
+ open_table() before we refresh the table.
+
+ The fix for this problem is to set some_tables_deleted for all
+ threads with open tables. These threads can still get their
+ locks, but will immediately release them again after checking
+ this variable. They will then loop in open_and_lock_tables()
+ again. There they will wait until we update all tables version
+ below.
+
+ Setting some_tables_deleted is done by remove_table_from_cache()
+ in the other branch.
+
+ In other words (reviewer suggestion): You need this setting of
+ some_tables_deleted for the case when table was opened and all
+ related checks were passed before incrementing refresh_version
+ (which you already have) but attempt to lock the table happened
+ after the call to close_old_data_files() i.e. after removal of
+ current thread locks.
+ */
+ for (uint idx=0 ; idx < open_cache.records ; idx++)
+ {
+ TABLE *table=(TABLE*) hash_element(&open_cache,idx);
+ if (table->in_use)
+ table->in_use->some_tables_deleted= 1;
+ }
+ }
}
else
{
@@ -911,13 +1006,13 @@ bool close_cached_tables(THD *thd, bool if_wait_for_refresh,
found=1;
}
if (!found)
- if_wait_for_refresh=0; // Nothing to wait for
+ wait_for_refresh=0; // Nothing to wait for
}
#ifndef EMBEDDED_LIBRARY
if (!tables)
kill_delayed_threads();
#endif
- if (if_wait_for_refresh)
+ if (wait_for_refresh)
{
/*
If there is any table that has a lower refresh_version, wait until
@@ -925,11 +1020,11 @@ bool close_cached_tables(THD *thd, bool if_wait_for_refresh,
*/
thd->mysys_var->current_mutex= &LOCK_open;
thd->mysys_var->current_cond= &COND_refresh;
- thd->proc_info="Flushing tables";
+ thd_proc_info(thd, "Flushing tables");
close_old_data_files(thd,thd->open_tables,1,1);
- mysql_ha_flush(thd, tables, MYSQL_HA_REOPEN_ON_USAGE | MYSQL_HA_FLUSH_ALL,
- TRUE);
+ mysql_ha_flush(thd);
+
bool found=1;
/* Wait until all threads has closed all the tables we had locked */
DBUG_PRINT("info",
@@ -940,6 +1035,9 @@ bool close_cached_tables(THD *thd, bool if_wait_for_refresh,
for (uint idx=0 ; idx < open_cache.records ; idx++)
{
TABLE *table=(TABLE*) hash_element(&open_cache,idx);
+ /* Avoid a self-deadlock. */
+ if (table->in_use == thd)
+ continue;
/*
Note that we wait here only for tables which are actually open, and
not for placeholders with TABLE::open_placeholder set. Waiting for
@@ -954,7 +1052,8 @@ bool close_cached_tables(THD *thd, bool if_wait_for_refresh,
are employed by CREATE TABLE as in this case table simply does not
exist yet.
*/
- if (table->needs_reopen_or_name_lock() && table->db_stat)
+ if (table->needs_reopen_or_name_lock() && (table->db_stat ||
+ (table->open_placeholder && wait_for_placeholders)))
{
found=1;
DBUG_PRINT("signal", ("Waiting for COND_refresh"));
@@ -973,16 +1072,23 @@ bool close_cached_tables(THD *thd, bool if_wait_for_refresh,
thd->in_lock_tables=0;
/* Set version for table */
for (TABLE *table=thd->open_tables; table ; table= table->next)
- table->s->version= refresh_version;
+ {
+ /*
+ Preserve the version (0) of write locked tables so that a impending
+ global read lock won't sneak in.
+ */
+ if (table->reginfo.lock_type < TL_WRITE_ALLOW_WRITE)
+ table->s->version= refresh_version;
+ }
}
if (!have_lock)
VOID(pthread_mutex_unlock(&LOCK_open));
- if (if_wait_for_refresh)
+ if (wait_for_refresh)
{
pthread_mutex_lock(&thd->mysys_var->mutex);
thd->mysys_var->current_mutex= 0;
thd->mysys_var->current_cond= 0;
- thd->proc_info=0;
+ thd_proc_info(thd, 0);
pthread_mutex_unlock(&thd->mysys_var->mutex);
}
DBUG_RETURN(result);
@@ -1004,10 +1110,10 @@ bool close_cached_connection_tables(THD *thd, bool if_wait_for_refresh,
DBUG_ASSERT(thd);
bzero(&tmp, sizeof(TABLE_LIST));
-
+
if (!have_lock)
VOID(pthread_mutex_lock(&LOCK_open));
-
+
for (idx= 0; idx < table_def_cache.records; idx++)
{
TABLE_SHARE *share= (TABLE_SHARE *) hash_element(&table_def_cache, idx);
@@ -1036,11 +1142,11 @@ bool close_cached_connection_tables(THD *thd, bool if_wait_for_refresh,
}
if (tables)
- result= close_cached_tables(thd, FALSE, tables, TRUE);
-
+ result= close_cached_tables(thd, tables, TRUE, FALSE, FALSE);
+
if (!have_lock)
VOID(pthread_mutex_unlock(&LOCK_open));
-
+
if (if_wait_for_refresh)
{
pthread_mutex_lock(&thd->mysys_var->mutex);
@@ -1054,6 +1160,37 @@ bool close_cached_connection_tables(THD *thd, bool if_wait_for_refresh,
}
+/**
+ Mark all temporary tables which were used by the current statement or
+ substatement as free for reuse, but only if the query_id can be cleared.
+
+ @param thd thread context
+
+ @remark For temp tables associated with a open SQL HANDLER the query_id
+ is not reset until the HANDLER is closed.
+*/
+
+static void mark_temp_tables_as_free_for_reuse(THD *thd)
+{
+ for (TABLE *table= thd->temporary_tables ; table ; table= table->next)
+ {
+ if ((table->query_id == thd->query_id) && ! table->open_by_handler)
+ {
+ table->query_id= 0;
+ table->file->ha_reset();
+ /*
+ Detach temporary MERGE children from temporary parent to allow new
+ attach at next open. Do not do the detach, if close_thread_tables()
+ is called from a sub-statement. The temporary table might still be
+ used in the top-level statement.
+ */
+ if (table->child_l || table->parent)
+ detach_merge_children(table, TRUE);
+ }
+ }
+}
+
+
/*
Mark all tables in the list which were used by current substatement
as free for reuse.
@@ -1090,6 +1227,42 @@ static void mark_used_tables_as_free_for_reuse(THD *thd, TABLE *table)
}
+/**
+ Auxiliary function to close all tables in the open_tables list.
+
+ @param thd Thread context.
+
+ @remark It should not ordinarily be called directly.
+*/
+
+static void close_open_tables(THD *thd)
+{
+ bool found_old_table= 0;
+
+ safe_mutex_assert_not_owner(&LOCK_open);
+
+ VOID(pthread_mutex_lock(&LOCK_open));
+
+ DBUG_PRINT("info", ("thd->open_tables: 0x%lx", (long) thd->open_tables));
+
+ while (thd->open_tables)
+ found_old_table|= close_thread_table(thd, &thd->open_tables);
+ thd->some_tables_deleted= 0;
+
+ /* Free tables to hold down open files */
+ while (open_cache.records > table_cache_size && unused_tables)
+ VOID(hash_delete(&open_cache,(uchar*) unused_tables)); /* purecov: tested */
+ check_unused();
+ if (found_old_table)
+ {
+ /* Tell threads waiting for refresh that something has happened */
+ broadcast_refresh();
+ }
+
+ VOID(pthread_mutex_unlock(&LOCK_open));
+}
+
+
/*
Close all tables used by the current substatement, or all tables
used by this thread if we are on the upper level.
@@ -1097,29 +1270,30 @@ static void mark_used_tables_as_free_for_reuse(THD *thd, TABLE *table)
SYNOPSIS
close_thread_tables()
thd Thread handler
- lock_in_use Set to 1 (0 = default) if caller has a lock on
- LOCK_open
- skip_derived Set to 1 (0 = default) if we should not free derived
- tables.
- stopper When closing tables from thd->open_tables(->next)*,
- don't close/remove tables starting from stopper.
IMPLEMENTATION
Unlocks tables and frees derived tables.
Put all normal tables used by thread in free list.
- When in prelocked mode it will only close/mark as free for reuse
- tables opened by this substatement, it will also check if we are
- closing tables after execution of complete query (i.e. we are on
- upper level) and will leave prelocked mode if needed.
+ It will only close/mark as free for reuse tables opened by this
+ substatement, it will also check if we are closing tables after
+ execution of complete query (i.e. we are on upper level) and will
+ leave prelocked mode if needed.
*/
-void close_thread_tables(THD *thd, bool lock_in_use, bool skip_derived)
+void close_thread_tables(THD *thd)
{
- bool found_old_table;
+ TABLE *table;
prelocked_mode_type prelocked_mode= thd->prelocked_mode;
DBUG_ENTER("close_thread_tables");
+#ifdef EXTRA_DEBUG
+ DBUG_PRINT("tcache", ("open tables:"));
+ for (table= thd->open_tables; table; table= table->next)
+ DBUG_PRINT("tcache", ("table: '%s'.'%s' 0x%lx", table->s->db.str,
+ table->s->table_name.str, (long) table));
+#endif
+
/*
We are assuming here that thd->derived_tables contains ONLY derived
tables for this substatement. i.e. instead of approach which uses
@@ -1131,9 +1305,9 @@ void close_thread_tables(THD *thd, bool lock_in_use, bool skip_derived)
derived tables with (sub-)statement instead of thread and destroy
them at the end of its execution.
*/
- if (thd->derived_tables && !skip_derived)
+ if (thd->derived_tables)
{
- TABLE *table, *next;
+ TABLE *next;
/*
Close all derived tables generated in queries like
SELECT * FROM (SELECT * FROM t1)
@@ -1146,13 +1320,10 @@ void close_thread_tables(THD *thd, bool lock_in_use, bool skip_derived)
thd->derived_tables= 0;
}
- if (prelocked_mode)
- {
- /*
- Mark all temporary tables used by this substatement as free for reuse.
- */
- mark_used_tables_as_free_for_reuse(thd, thd->temporary_tables);
- }
+ /*
+ Mark all temporary tables used by this statement as free for reuse.
+ */
+ mark_temp_tables_as_free_for_reuse(thd);
if (thd->locked_tables || prelocked_mode)
{
@@ -1216,28 +1387,15 @@ void close_thread_tables(THD *thd, bool lock_in_use, bool skip_derived)
if (!thd->active_transaction())
thd->transaction.xid_state.xid.null();
- if (!lock_in_use)
- VOID(pthread_mutex_lock(&LOCK_open));
-
- DBUG_PRINT("info", ("thd->open_tables: 0x%lx", (long) thd->open_tables));
-
- found_old_table= 0;
- while (thd->open_tables)
- found_old_table|= close_thread_table(thd, &thd->open_tables);
- thd->some_tables_deleted=0;
-
- /* Free tables to hold down open files */
- while (open_cache.records > table_cache_size && unused_tables)
- VOID(hash_delete(&open_cache,(uchar*) unused_tables)); /* purecov: tested */
- check_unused();
- if (found_old_table)
- {
- /* Tell threads waiting for refresh that something has happened */
- broadcast_refresh();
- }
- if (!lock_in_use)
- VOID(pthread_mutex_unlock(&LOCK_open));
- /* VOID(pthread_sigmask(SIG_SETMASK,&thd->signals,NULL)); */
+ /*
+ Note that we need to hold LOCK_open while changing the
+ open_tables list. Another thread may work on it.
+ (See: remove_table_from_cache(), mysql_wait_completed_table())
+ Closing a MERGE child before the parent would be fatal if the
+ other thread tries to abort the MERGE lock in between.
+ */
+ if (thd->open_tables)
+ close_open_tables(thd);
if (prelocked_mode == PRELOCKED)
{
@@ -1246,7 +1404,7 @@ void close_thread_tables(THD *thd, bool lock_in_use, bool skip_derived)
good idea to turn off OPTION_TABLE_LOCK flag.
*/
DBUG_ASSERT(thd->lex->requires_prelocking());
- thd->options&= ~(ulong) (OPTION_TABLE_LOCK);
+ thd->options&= ~(OPTION_TABLE_LOCK);
}
DBUG_VOID_RETURN;
@@ -1262,8 +1420,17 @@ bool close_thread_table(THD *thd, TABLE **table_ptr)
DBUG_ENTER("close_thread_table");
DBUG_ASSERT(table->key_read == 0);
DBUG_ASSERT(!table->file || table->file->inited == handler::NONE);
+ DBUG_PRINT("tcache", ("table: '%s'.'%s' 0x%lx", table->s->db.str,
+ table->s->table_name.str, (long) table));
*table_ptr=table->next;
+ /*
+ When closing a MERGE parent or child table, detach the children first.
+ Clear child table references to force new assignment at next open.
+ */
+ if (table->child_l || table->parent)
+ detach_merge_children(table, TRUE);
+
if (table->needs_reopen_or_name_lock() ||
thd->version != refresh_version || !table->db_stat)
{
@@ -1278,6 +1445,9 @@ bool close_thread_table(THD *thd, TABLE **table_ptr)
*/
DBUG_ASSERT(!table->open_placeholder);
+ /* Assert that MERGE children are not attached in unused_tables. */
+ DBUG_ASSERT(!table->is_children_attached());
+
/* Free memory and reset for next loop */
table->file->ha_reset();
table->in_use=0;
@@ -1674,6 +1844,7 @@ TABLE *find_temporary_table(THD *thd, TABLE_LIST *table_list)
Try to locate the table in the list of thd->temporary_tables.
If the table is found:
+ - if the table is being used by some outer statement, fail.
- if the table is in thd->locked_tables, unlock it and
remove it from the list of locked tables. Currently only transactional
temporary tables are present in the locked_tables list.
@@ -1688,24 +1859,36 @@ TABLE *find_temporary_table(THD *thd, TABLE_LIST *table_list)
thd->temporary_tables list, it's impossible to tell here whether
we're dealing with an internal or a user temporary table.
- @retval TRUE the table was not found in the list of temporary tables
- of this thread
- @retval FALSE the table was found and dropped successfully.
+ @retval 0 the table was found and dropped successfully.
+ @retval 1 the table was not found in the list of temporary tables
+ of this thread
+ @retval -1 the table is in use by a outer query
*/
-bool close_temporary_table(THD *thd, TABLE_LIST *table_list)
+int drop_temporary_table(THD *thd, TABLE_LIST *table_list)
{
TABLE *table;
+ DBUG_ENTER("drop_temporary_table");
+ DBUG_PRINT("tmptable", ("closing table: '%s'.'%s'",
+ table_list->db, table_list->table_name));
if (!(table= find_temporary_table(thd, table_list)))
- return 1;
+ DBUG_RETURN(1);
+
+ /* Table might be in use by some outer statement. */
+ if (table->query_id && table->query_id != thd->query_id)
+ {
+ my_error(ER_CANT_REOPEN_TABLE, MYF(0), table->alias);
+ DBUG_RETURN(-1);
+ }
+
/*
If LOCK TABLES list is not empty and contains this table,
unlock the table and remove the table from this list.
*/
mysql_lock_remove(thd, thd->locked_tables, table, FALSE);
close_temporary_table(thd, table, 1, 1);
- return 0;
+ DBUG_RETURN(0);
}
/*
@@ -1715,6 +1898,24 @@ bool close_temporary_table(THD *thd, TABLE_LIST *table_list)
void close_temporary_table(THD *thd, TABLE *table,
bool free_share, bool delete_table)
{
+ DBUG_ENTER("close_temporary_table");
+ DBUG_PRINT("tmptable", ("closing table: '%s'.'%s' 0x%lx alias: '%s'",
+ table->s->db.str, table->s->table_name.str,
+ (long) table, table->alias));
+
+ /*
+ When closing a MERGE parent or child table, detach the children
+ first. Clear child table references as MERGE table cannot be
+ reopened after final close of one of its tables.
+
+ This is necessary here because it is sometimes called with attached
+ tables and without prior close_thread_tables(). E.g. in
+ mysql_alter_table(), mysql_rm_table_part2(), mysql_truncate(),
+ drop_open_table().
+ */
+ if (table->child_l || table->parent)
+ detach_merge_children(table, TRUE);
+
if (table->prev)
{
table->prev->next= table->next;
@@ -1741,6 +1942,7 @@ void close_temporary_table(THD *thd, TABLE *table,
slave_open_temp_tables--;
}
close_temporary(table, free_share, delete_table);
+ DBUG_VOID_RETURN;
}
@@ -1756,6 +1958,8 @@ void close_temporary(TABLE *table, bool free_share, bool delete_table)
{
handlerton *table_type= table->s->db_type();
DBUG_ENTER("close_temporary");
+ DBUG_PRINT("tmptable", ("closing table: '%s'.'%s'",
+ table->s->db.str, table->s->table_name.str));
free_io_cache(table);
closefrm(table, 0);
@@ -1802,6 +2006,9 @@ bool rename_temporary_table(THD* thd, TABLE *table, const char *db,
static void relink_unused(TABLE *table)
{
+ /* Assert that MERGE children are not attached in unused_tables. */
+ DBUG_ASSERT(!table->is_children_attached());
+
if (table != unused_tables)
{
table->prev->next=table->next; /* Remove from unused list */
@@ -1817,8 +2024,79 @@ static void relink_unused(TABLE *table)
/**
- @brief Remove all instances of table from thread's open list and
- table cache.
+ Prepare an open merge table for close.
+
+ @param[in] thd thread context
+ @param[in] table table to prepare
+ @param[in,out] prev_pp pointer to pointer of previous table
+
+ @detail
+ If the table is a MERGE parent, just detach the children.
+ If the table is a MERGE child, close the parent (incl. detach).
+*/
+
+static void unlink_open_merge(THD *thd, TABLE *table, TABLE ***prev_pp)
+{
+ DBUG_ENTER("unlink_open_merge");
+
+ if (table->parent)
+ {
+ /*
+ If MERGE child, close parent too. Closing includes detaching.
+
+ This is used for example in ALTER TABLE t1 RENAME TO t5 under
+ LOCK TABLES where t1 is a MERGE child:
+ CREATE TABLE t1 (c1 INT);
+ CREATE TABLE t2 (c1 INT) ENGINE=MRG_MYISAM UNION=(t1);
+ LOCK TABLES t1 WRITE, t2 WRITE;
+ ALTER TABLE t1 RENAME TO t5;
+ */
+ TABLE *parent= table->parent;
+ TABLE **prv_p;
+
+ /* Find parent in open_tables list. */
+ for (prv_p= &thd->open_tables;
+ *prv_p && (*prv_p != parent);
+ prv_p= &(*prv_p)->next) {}
+ if (*prv_p)
+ {
+ /* Special treatment required if child follows parent in list. */
+ if (*prev_pp == &parent->next)
+ *prev_pp= prv_p;
+ /*
+ Remove parent from open_tables list and close it.
+ This includes detaching and hence clearing parent references.
+ */
+ close_thread_table(thd, prv_p);
+ }
+ }
+ else if (table->child_l)
+ {
+ /*
+ When closing a MERGE parent, detach the children first. It is
+ not necessary to clear the child or parent table reference of
+ this table because the TABLE is freed. But we need to clear
+ the child or parent references of the other belonging tables
+ so that they cannot be moved into the unused_tables chain with
+ these pointers set.
+
+ This is used for example in ALTER TABLE t2 RENAME TO t5 under
+ LOCK TABLES where t2 is a MERGE parent:
+ CREATE TABLE t1 (c1 INT);
+ CREATE TABLE t2 (c1 INT) ENGINE=MRG_MYISAM UNION=(t1);
+ LOCK TABLES t1 WRITE, t2 WRITE;
+ ALTER TABLE t2 RENAME TO t5;
+ */
+ detach_merge_children(table, TRUE);
+ }
+
+ DBUG_VOID_RETURN;
+}
+
+
+/**
+ Remove all instances of table from thread's open list and
+ table cache.
@param thd Thread context
@param find Table to remove
@@ -1827,7 +2105,7 @@ static void relink_unused(TABLE *table)
FALSE - otherwise
@note When unlock parameter is FALSE or current thread doesn't have
- any tables locked with LOCK TABLES tables are assumed to be
+ any tables locked with LOCK TABLES, tables are assumed to be
not locked (for example already unlocked).
*/
@@ -1835,31 +2113,45 @@ void unlink_open_table(THD *thd, TABLE *find, bool unlock)
{
char key[MAX_DBKEY_LENGTH];
uint key_length= find->s->table_cache_key.length;
- TABLE *list, **prev, *next;
+ TABLE *list, **prev;
DBUG_ENTER("unlink_open_table");
safe_mutex_assert_owner(&LOCK_open);
- list= thd->open_tables;
- prev= &thd->open_tables;
memcpy(key, find->s->table_cache_key.str, key_length);
- for (; list ; list=next)
+ /*
+ Note that we need to hold LOCK_open while changing the
+ open_tables list. Another thread may work on it.
+ (See: remove_table_from_cache(), mysql_wait_completed_table())
+ Closing a MERGE child before the parent would be fatal if the
+ other thread tries to abort the MERGE lock in between.
+ */
+ for (prev= &thd->open_tables; *prev; )
{
- next=list->next;
+ list= *prev;
+
if (list->s->table_cache_key.length == key_length &&
!memcmp(list->s->table_cache_key.str, key, key_length))
{
if (unlock && thd->locked_tables)
- mysql_lock_remove(thd, thd->locked_tables, list, TRUE);
+ mysql_lock_remove(thd, thd->locked_tables,
+ list->parent ? list->parent : list, TRUE);
+
+ /* Prepare MERGE table for close. Close parent if necessary. */
+ unlink_open_merge(thd, list, &prev);
+
+ /* Remove table from open_tables list. */
+ *prev= list->next;
+ /* Close table. */
VOID(hash_delete(&open_cache,(uchar*) list)); // Close table
}
else
{
- *prev=list; // put in use list
+ /* Step to next entry in open_tables list. */
prev= &list->next;
}
}
- *prev=0;
+
// Notify any 'refresh' threads
broadcast_refresh();
DBUG_VOID_RETURN;
@@ -1867,7 +2159,7 @@ void unlink_open_table(THD *thd, TABLE *find, bool unlock)
/**
- @brief Auxiliary routine which closes and drops open table.
+ Auxiliary routine which closes and drops open table.
@param thd Thread handle
@param table TABLE object for table to be dropped
@@ -1923,7 +2215,7 @@ void wait_for_condition(THD *thd, pthread_mutex_t *mutex, pthread_cond_t *cond)
thd->mysys_var->current_mutex= mutex;
thd->mysys_var->current_cond= cond;
proc_info=thd->proc_info;
- thd->proc_info="Waiting for table";
+ thd_proc_info(thd, "Waiting for table");
DBUG_ENTER("wait_for_condition");
if (!thd->killed)
(void) pthread_cond_wait(cond, mutex);
@@ -1943,12 +2235,47 @@ void wait_for_condition(THD *thd, pthread_mutex_t *mutex, pthread_cond_t *cond)
pthread_mutex_lock(&thd->mysys_var->mutex);
thd->mysys_var->current_mutex= 0;
thd->mysys_var->current_cond= 0;
- thd->proc_info= proc_info;
+ thd_proc_info(thd, proc_info);
pthread_mutex_unlock(&thd->mysys_var->mutex);
DBUG_VOID_RETURN;
}
+/**
+ Exclusively name-lock a table that is already write-locked by the
+ current thread.
+
+ @param thd current thread context
+ @param tables table list containing one table to open.
+
+ @return FALSE on success, TRUE otherwise.
+*/
+
+bool name_lock_locked_table(THD *thd, TABLE_LIST *tables)
+{
+ DBUG_ENTER("name_lock_locked_table");
+
+ /* Under LOCK TABLES we must only accept write locked tables. */
+ tables->table= find_locked_table(thd, tables->db, tables->table_name);
+
+ if (!tables->table)
+ my_error(ER_TABLE_NOT_LOCKED, MYF(0), tables->alias);
+ else if (tables->table->reginfo.lock_type < TL_WRITE_LOW_PRIORITY)
+ my_error(ER_TABLE_NOT_LOCKED_FOR_WRITE, MYF(0), tables->alias);
+ else
+ {
+ /*
+ Ensures that table is opened only by this thread and that no
+ other statement will open this table.
+ */
+ wait_while_table_is_used(thd, tables->table, HA_EXTRA_FORCE_REOPEN);
+ DBUG_RETURN(FALSE);
+ }
+
+ DBUG_RETURN(TRUE);
+}
+
+
/*
Open table which is already name-locked by this thread.
@@ -2039,9 +2366,9 @@ bool reopen_name_locked_table(THD* thd, TABLE_LIST* table_list, bool link_in)
/**
- @brief Create and insert into table cache placeholder for table
- which will prevent its opening (or creation) (a.k.a lock
- table name).
+ Create and insert into table cache placeholder for table
+ which will prevent its opening (or creation) (a.k.a lock
+ table name).
@param thd Thread context
@param key Table cache key for name to be locked
@@ -2090,8 +2417,8 @@ TABLE *table_cache_insert_placeholder(THD *thd, const char *key,
/**
- @brief Obtain an exclusive name lock on the table if it is not cached
- in the table cache.
+ Obtain an exclusive name lock on the table if it is not cached
+ in the table cache.
@param thd Thread context
@param db Name of database
@@ -2142,8 +2469,8 @@ 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.
+ Check that table exists in table definition cache, on disk
+ or in some storage engine.
@param thd Thread context
@param table Table list element
@@ -2248,6 +2575,9 @@ TABLE *open_table(THD *thd, TABLE_LIST *table_list, MEM_ROOT *mem_root,
HASH_SEARCH_STATE state;
DBUG_ENTER("open_table");
+ /* Parsing of partitioning information from .frm needs thd->lex set up. */
+ DBUG_ASSERT(thd->lex->is_lex_started);
+
/* find a unused table in the open table cache */
if (refresh)
*refresh=0;
@@ -2284,8 +2614,7 @@ TABLE *open_table(THD *thd, TABLE_LIST *table_list, MEM_ROOT *mem_root,
is always represented by only one TABLE object in THD, and
it can not be cloned. Emit an error for an unsupported behaviour.
*/
- if (table->query_id == thd->query_id ||
- thd->prelocked_mode && table->query_id)
+ if (table->query_id)
{
DBUG_PRINT("error",
("query_id: %lu server_id: %u pseudo_thread_id: %lu",
@@ -2295,7 +2624,6 @@ TABLE *open_table(THD *thd, TABLE_LIST *table_list, MEM_ROOT *mem_root,
DBUG_RETURN(0);
}
table->query_id= thd->query_id;
- table->clear_query_id= 1;
thd->thread_specific_used= TRUE;
DBUG_PRINT("info",("Using temporary table"));
goto reset;
@@ -2341,9 +2669,14 @@ TABLE *open_table(THD *thd, TABLE_LIST *table_list, MEM_ROOT *mem_root,
table->s->table_name.str);
DBUG_RETURN(0);
}
+ /*
+ When looking for a usable TABLE, ignore MERGE children, as they
+ belong to their parent and cannot be used explicitly.
+ */
if (!my_strcasecmp(system_charset_info, table->alias, alias) &&
table->query_id != thd->query_id && /* skip tables already used */
- !(thd->prelocked_mode && table->query_id))
+ !(thd->prelocked_mode && table->query_id) &&
+ !table->parent)
{
int distance= ((int) table->reginfo.lock_type -
(int) table_list->lock_type);
@@ -2474,7 +2807,7 @@ TABLE *open_table(THD *thd, TABLE_LIST *table_list, MEM_ROOT *mem_root,
deadlock may occur.
*/
if (thd->handler_tables)
- mysql_ha_flush(thd, (TABLE_LIST*) NULL, MYSQL_HA_REOPEN_ON_USAGE, TRUE);
+ mysql_ha_flush(thd);
/*
Actually try to find the table in the open_cache.
@@ -2492,6 +2825,8 @@ TABLE *open_table(THD *thd, TABLE_LIST *table_list, MEM_ROOT *mem_root,
table= (TABLE*) hash_next(&open_cache, (uchar*) key, key_length,
&state))
{
+ DBUG_PRINT("tcache", ("in_use table: '%s'.'%s' 0x%lx", table->s->db.str,
+ table->s->table_name.str, (long) table));
/*
Here we flush tables marked for flush.
Normally, table->s->version contains the value of
@@ -2580,6 +2915,8 @@ TABLE *open_table(THD *thd, TABLE_LIST *table_list, MEM_ROOT *mem_root,
}
if (table)
{
+ DBUG_PRINT("tcache", ("unused table: '%s'.'%s' 0x%lx", table->s->db.str,
+ table->s->table_name.str, (long) table));
/* Unlink the table from "unused_tables" list. */
if (table == unused_tables)
{ // First unused
@@ -2595,6 +2932,7 @@ TABLE *open_table(THD *thd, TABLE_LIST *table_list, MEM_ROOT *mem_root,
{
/* Insert a new TABLE instance into the open cache */
int error;
+ DBUG_PRINT("tcache", ("opening new table"));
/* Free cache if too big */
while (open_cache.records > table_cache_size && unused_tables)
VOID(hash_delete(&open_cache,(uchar*) unused_tables)); /* purecov: tested */
@@ -2661,7 +2999,9 @@ TABLE *open_table(THD *thd, TABLE_LIST *table_list, MEM_ROOT *mem_root,
VOID(pthread_mutex_unlock(&LOCK_open));
DBUG_RETURN(0); // VIEW
}
- DBUG_PRINT("info", ("inserting table 0x%lx into the cache", (long) table));
+ DBUG_PRINT("info", ("inserting table '%s'.'%s' 0x%lx into the cache",
+ table->s->db.str, table->s->table_name.str,
+ (long) table));
VOID(my_hash_insert(&open_cache,(uchar*) table));
}
@@ -2751,9 +3091,12 @@ bool reopen_table(TABLE *table)
TABLE_LIST table_list;
THD *thd= table->in_use;
DBUG_ENTER("reopen_table");
+ DBUG_PRINT("tcache", ("table: '%s'.'%s' 0x%lx", table->s->db.str,
+ table->s->table_name.str, (long) table));
DBUG_ASSERT(table->s->ref_count == 0);
DBUG_ASSERT(!table->sort.io_cache);
+ DBUG_ASSERT(!table->children_attached);
#ifdef EXTRA_DEBUG
if (table->db_stat)
@@ -2794,6 +3137,17 @@ bool reopen_table(TABLE *table)
tmp.next= table->next;
tmp.prev= table->prev;
+ /* Preserve MERGE parent. */
+ tmp.parent= table->parent;
+ /* Fix MERGE child list and check for unchanged union. */
+ if ((table->child_l || tmp.child_l) &&
+ fix_merge_after_open(table->child_l, table->child_last_l,
+ tmp.child_l, tmp.child_last_l))
+ {
+ VOID(closefrm(&tmp, 1)); // close file, free everything
+ goto end;
+ }
+
delete table->triggers;
if (table->file)
VOID(closefrm(table, 1)); // close file, free everything
@@ -2815,6 +3169,11 @@ bool reopen_table(TABLE *table)
}
if (table->triggers)
table->triggers->set_table(table);
+ /*
+ Do not attach MERGE children here. The children might be reopened
+ after the parent. Attach children after reopening all tables that
+ require reopen. See for example reopen_tables().
+ */
broadcast_refresh();
error=0;
@@ -2825,8 +3184,8 @@ bool reopen_table(TABLE *table)
/**
- @brief Close all instances of a table open by this thread and replace
- them with exclusive name-locks.
+ Close all instances of a table open by this thread and replace
+ them with exclusive name-locks.
@param thd Thread context
@param db Database name for the table to be closed
@@ -2836,6 +3195,9 @@ bool reopen_table(TABLE *table)
then there is only one table open and locked. This means that
the function probably has to be adjusted before it can be used
anywhere outside ALTER TABLE.
+
+ @note Must not use TABLE_SHARE::table_name/db of the table being closed,
+ the strings are used in a loop even after the share may be freed.
*/
void close_data_files_and_morph_locks(THD *thd, const char *db,
@@ -2867,7 +3229,22 @@ void close_data_files_and_morph_locks(THD *thd, const char *db,
!strcmp(table->s->db.str, db))
{
if (thd->locked_tables)
- mysql_lock_remove(thd, thd->locked_tables, table, TRUE);
+ {
+ if (table->parent)
+ {
+ /*
+ If MERGE child, need to reopen parent too. This means that
+ the first child to be closed will detach all children from
+ the parent and close it. OTOH in most cases a MERGE table
+ won't have multiple children with the same db.table_name.
+ */
+ mysql_lock_remove(thd, thd->locked_tables, table->parent, TRUE);
+ table->parent->open_placeholder= 1;
+ close_handle_and_leave_table_as_lock(table->parent);
+ }
+ else
+ mysql_lock_remove(thd, thd->locked_tables, table, TRUE);
+ }
table->open_placeholder= 1;
close_handle_and_leave_table_as_lock(table);
}
@@ -2877,12 +3254,68 @@ void close_data_files_and_morph_locks(THD *thd, const char *db,
/**
- @brief Reopen all tables with closed data files.
+ Reattach MERGE children after reopen.
+
+ @param[in] thd thread context
+ @param[in,out] err_tables_p pointer to pointer of tables in error
+
+ @return status
+ @retval FALSE OK, err_tables_p unchanged
+ @retval TRUE Error, err_tables_p contains table(s)
+*/
+
+static bool reattach_merge(THD *thd, TABLE **err_tables_p)
+{
+ TABLE *table;
+ TABLE *next;
+ TABLE **prv_p= &thd->open_tables;
+ bool error= FALSE;
+ DBUG_ENTER("reattach_merge");
+
+ for (table= thd->open_tables; table; table= next)
+ {
+ next= table->next;
+ DBUG_PRINT("tcache", ("check table: '%s'.'%s' 0x%lx next: 0x%lx",
+ table->s->db.str, table->s->table_name.str,
+ (long) table, (long) next));
+ /* Reattach children for MERGE tables with "closed data files" only. */
+ if (table->child_l && !table->children_attached)
+ {
+ DBUG_PRINT("tcache", ("MERGE parent, attach children"));
+ if(table->file->extra(HA_EXTRA_ATTACH_CHILDREN))
+ {
+ my_error(ER_CANT_REOPEN_TABLE, MYF(0), table->alias);
+ error= TRUE;
+ /* Remove table from open_tables. */
+ *prv_p= next;
+ if (next)
+ prv_p= &next->next;
+ /* Stack table on error list. */
+ table->next= *err_tables_p;
+ *err_tables_p= table;
+ continue;
+ }
+ else
+ {
+ table->children_attached= TRUE;
+ DBUG_PRINT("myrg", ("attached parent: '%s'.'%s' 0x%lx",
+ table->s->db.str,
+ table->s->table_name.str, (long) table));
+ }
+ }
+ prv_p= &table->next;
+ }
+ DBUG_RETURN(error);
+}
+
+
+/**
+ Reopen all tables with closed data files.
@param thd Thread context
@param get_locks Should we get locks after reopening tables ?
- @param in_refresh Are we in FLUSH TABLES ? TODO: It seems that
- we can remove this parameter.
+ @param mark_share_as_old Mark share as old to protect from a impending
+ global read lock.
@note Since this function can't properly handle prelocking and
create placeholders it should be used in very special
@@ -2896,11 +3329,17 @@ void close_data_files_and_morph_locks(THD *thd, const char *db,
@return FALSE in case of success, TRUE - otherwise.
*/
-bool reopen_tables(THD *thd,bool get_locks,bool in_refresh)
+bool reopen_tables(THD *thd, bool get_locks, bool mark_share_as_old)
{
TABLE *table,*next,**prev;
TABLE **tables,**tables_ptr; // For locks
+ TABLE *err_tables= NULL;
bool error=0, not_used;
+ bool merge_table_found= FALSE;
+ const uint flags= MYSQL_LOCK_NOTIFY_IF_NEED_REOPEN |
+ MYSQL_LOCK_IGNORE_GLOBAL_READ_LOCK |
+ MYSQL_LOCK_IGNORE_FLUSH;
+
DBUG_ENTER("reopen_tables");
if (!thd->open_tables)
@@ -2909,10 +3348,15 @@ bool reopen_tables(THD *thd,bool get_locks,bool in_refresh)
safe_mutex_assert_owner(&LOCK_open);
if (get_locks)
{
- /* The ptr is checked later */
+ /*
+ The ptr is checked later
+ Do not handle locks of MERGE children.
+ */
uint opens=0;
for (table= thd->open_tables; table ; table=table->next)
- opens++;
+ if (!table->parent)
+ opens++;
+ DBUG_PRINT("tcache", ("open tables to lock: %u", opens));
tables= (TABLE**) my_alloca(sizeof(TABLE*)*opens);
}
else
@@ -2924,51 +3368,98 @@ bool reopen_tables(THD *thd,bool get_locks,bool in_refresh)
{
uint db_stat=table->db_stat;
next=table->next;
+ DBUG_PRINT("tcache", ("open table: '%s'.'%s' 0x%lx "
+ "parent: 0x%lx db_stat: %u",
+ table->s->db.str, table->s->table_name.str,
+ (long) table, (long) table->parent, db_stat));
+ if (table->child_l && !db_stat)
+ merge_table_found= TRUE;
if (!tables || (!db_stat && reopen_table(table)))
{
my_error(ER_CANT_REOPEN_TABLE, MYF(0), table->alias);
+ /*
+ If we could not allocate 'tables', we may close open tables
+ here. If a MERGE table is affected, detach the children first.
+ It is not necessary to clear the child or parent table reference
+ of this table because the TABLE is freed. But we need to clear
+ the child or parent references of the other belonging tables so
+ that they cannot be moved into the unused_tables chain with
+ these pointers set.
+ */
+ if (table->child_l || table->parent)
+ detach_merge_children(table, TRUE);
VOID(hash_delete(&open_cache,(uchar*) table));
error=1;
}
else
{
+ DBUG_PRINT("tcache", ("opened. need lock: %d",
+ get_locks && !db_stat && !table->parent));
*prev= table;
prev= &table->next;
- if (get_locks && !db_stat)
+ /* Do not handle locks of MERGE children. */
+ if (get_locks && !db_stat && !table->parent)
*tables_ptr++= table; // need new lock on this
- if (in_refresh)
+ if (mark_share_as_old)
{
table->s->version=0;
table->open_placeholder= 0;
}
}
}
+ *prev=0;
+ /*
+ When all tables are open again, we can re-attach MERGE children to
+ their parents. All TABLE objects are still present.
+ */
+ DBUG_PRINT("tcache", ("re-attaching MERGE tables: %d", merge_table_found));
+ if (!error && merge_table_found && reattach_merge(thd, &err_tables))
+ {
+ while (err_tables)
+ {
+ VOID(hash_delete(&open_cache, (uchar*) err_tables));
+ err_tables= err_tables->next;
+ }
+ }
+ DBUG_PRINT("tcache", ("open tables to lock: %u",
+ (uint) (tables_ptr - tables)));
if (tables != tables_ptr) // Should we get back old locks
{
MYSQL_LOCK *lock;
- /* We should always get these locks */
+ /*
+ We should always get these locks. Anyway, we must not go into
+ wait_for_tables() as it tries to acquire LOCK_open, which is
+ already locked.
+ */
thd->some_tables_deleted=0;
if ((lock= mysql_lock_tables(thd, tables, (uint) (tables_ptr - tables),
- 0, &not_used)))
+ flags, &not_used)))
{
thd->locked_tables=mysql_lock_merge(thd->locked_tables,lock);
}
else
+ {
+ /*
+ This case should only happen if there is a bug in the reopen logic.
+ Need to issue error message to have a reply for the application.
+ Not exactly what happened though, but close enough.
+ */
+ my_error(ER_LOCK_DEADLOCK, MYF(0));
error=1;
+ }
}
if (get_locks && tables)
{
my_afree((uchar*) tables);
}
broadcast_refresh();
- *prev=0;
DBUG_RETURN(error);
}
/**
- @brief Close handlers for tables in list, but leave the TABLE structure
- intact so that we can re-open these quickly.
+ Close handlers for tables in list, but leave the TABLE structure
+ intact so that we can re-open these quickly.
@param thd Thread context
@param table Head of the list of TABLE objects
@@ -2980,14 +3471,19 @@ bool reopen_tables(THD *thd,bool get_locks,bool in_refresh)
@param send_refresh Should we awake waiters even if we didn't close any tables?
*/
-void close_old_data_files(THD *thd, TABLE *table, bool morph_locks,
- bool send_refresh)
+static void close_old_data_files(THD *thd, TABLE *table, bool morph_locks,
+ bool send_refresh)
{
bool found= send_refresh;
DBUG_ENTER("close_old_data_files");
for (; table ; table=table->next)
{
+ DBUG_PRINT("tcache", ("checking table: '%s'.'%s' 0x%lx",
+ table->s->db.str, table->s->table_name.str,
+ (long) table));
+ DBUG_PRINT("tcache", ("needs refresh: %d is open: %u",
+ table->needs_reopen_or_name_lock(), table->db_stat));
/*
Reopen marked for flush.
*/
@@ -2999,13 +3495,33 @@ void close_old_data_files(THD *thd, TABLE *table, bool morph_locks,
if (morph_locks)
{
/*
- Wake up threads waiting for table-level lock on this table
- so they won't sneak in when we will temporarily remove our
- lock on it. This will also give them a chance to close their
- instances of this table.
+ Forward lock handling to MERGE parent. But unlock parent
+ once only.
*/
- mysql_lock_abort(thd, table, TRUE);
- mysql_lock_remove(thd, thd->locked_tables, table, TRUE);
+ TABLE *ulcktbl= table->parent ? table->parent : table;
+ if (ulcktbl->lock_count)
+ {
+ /*
+ Wake up threads waiting for table-level lock on this table
+ so they won't sneak in when we will temporarily remove our
+ lock on it. This will also give them a chance to close their
+ instances of this table.
+ */
+ mysql_lock_abort(thd, ulcktbl, TRUE);
+ mysql_lock_remove(thd, thd->locked_tables, ulcktbl, TRUE);
+ ulcktbl->lock_count= 0;
+ }
+ if ((ulcktbl != table) && ulcktbl->db_stat)
+ {
+ /*
+ Close the parent too. Note that parent can come later in
+ the list of tables. It will then be noticed as closed and
+ as a placeholder. When this happens, do not clear the
+ placeholder flag. See the branch below ("***").
+ */
+ ulcktbl->open_placeholder= 1;
+ close_handle_and_leave_table_as_lock(ulcktbl);
+ }
/*
We want to protect the table from concurrent DDL operations
(like RENAME TABLE) until we will re-open and re-lock it.
@@ -3014,7 +3530,7 @@ void close_old_data_files(THD *thd, TABLE *table, bool morph_locks,
}
close_handle_and_leave_table_as_lock(table);
}
- else if (table->open_placeholder)
+ else if (table->open_placeholder && !morph_locks)
{
/*
We come here only in close-for-back-off scenario. So we have to
@@ -3022,8 +3538,11 @@ void close_old_data_files(THD *thd, TABLE *table, bool morph_locks,
in case of concurrent execution of CREATE TABLE t1 SELECT * FROM t2
and RENAME TABLE t2 TO t1). In close-for-re-open scenario we will
probably want to let it stay.
+
+ Note "***": We must not enter this branch if the placeholder
+ flag has been set because of a former close through a child.
+ See above the comment that refers to this note.
*/
- DBUG_ASSERT(!morph_locks);
table->open_placeholder= 0;
}
}
@@ -3088,13 +3607,13 @@ bool wait_for_tables(THD *thd)
bool result;
DBUG_ENTER("wait_for_tables");
- thd->proc_info="Waiting for tables";
+ thd_proc_info(thd, "Waiting for tables");
pthread_mutex_lock(&LOCK_open);
while (!thd->killed)
{
thd->some_tables_deleted=0;
close_old_data_files(thd,thd->open_tables,0,dropping_tables != 0);
- mysql_ha_flush(thd, (TABLE_LIST*) NULL, MYSQL_HA_REOPEN_ON_USAGE, TRUE);
+ mysql_ha_flush(thd);
if (!table_is_used(thd->open_tables,1))
break;
(void) pthread_cond_wait(&COND_refresh,&LOCK_open);
@@ -3104,12 +3623,12 @@ bool wait_for_tables(THD *thd)
else
{
/* Now we can open all tables without any interference */
- thd->proc_info="Reopen tables";
+ thd_proc_info(thd, "Reopen tables");
thd->version= refresh_version;
result=reopen_tables(thd,0,0);
}
pthread_mutex_unlock(&LOCK_open);
- thd->proc_info=0;
+ thd_proc_info(thd, 0);
DBUG_RETURN(result);
}
@@ -3144,13 +3663,29 @@ TABLE *drop_locked_tables(THD *thd,const char *db, const char *table_name)
prev= &thd->open_tables;
DBUG_ENTER("drop_locked_tables");
+ /*
+ Note that we need to hold LOCK_open while changing the
+ open_tables list. Another thread may work on it.
+ (See: remove_table_from_cache(), mysql_wait_completed_table())
+ Closing a MERGE child before the parent would be fatal if the
+ other thread tries to abort the MERGE lock in between.
+ */
for (table= thd->open_tables; table ; table=next)
{
next=table->next;
if (!strcmp(table->s->table_name.str, table_name) &&
!strcmp(table->s->db.str, db))
{
- mysql_lock_remove(thd, thd->locked_tables, table, TRUE);
+ /* If MERGE child, forward lock handling to parent. */
+ mysql_lock_remove(thd, thd->locked_tables,
+ table->parent ? table->parent : table, TRUE);
+ /*
+ When closing a MERGE parent or child table, detach the children first.
+ Clear child table references in case this object is opened again.
+ */
+ if (table->child_l || table->parent)
+ detach_merge_children(table, TRUE);
+
if (!found)
{
found= table;
@@ -3199,7 +3734,8 @@ void abort_locked_tables(THD *thd,const char *db, const char *table_name)
if (!strcmp(table->s->table_name.str, table_name) &&
!strcmp(table->s->db.str, db))
{
- mysql_lock_abort(thd,table, TRUE);
+ /* If MERGE child, forward lock handling to parent. */
+ mysql_lock_abort(thd, table->parent ? table->parent : table, TRUE);
break;
}
}
@@ -3230,7 +3766,8 @@ void abort_locked_tables(THD *thd,const char *db, const char *table_name)
share->table_map_id is given a value that with a high certainty is
not used by any other table (the only case where a table id can be
reused is on wrap-around, which means more than 4 billion table
- shares open at the same time).
+ share opens have been executed while one table was open all the
+ time).
share->table_map_id is not ~0UL.
*/
@@ -3397,7 +3934,7 @@ retry:
READ_KEYINFO | COMPUTE_TYPES | EXTRA_RECORD,
ha_open_options | HA_OPEN_FOR_REPAIR,
entry, FALSE) || ! entry->file ||
- (entry->file->is_crashed() && entry->file->check_and_repair(thd)))
+ (entry->file->is_crashed() && entry->file->ha_check_and_repair(thd)))
{
/* Give right error message */
thd->clear_error();
@@ -3469,6 +4006,340 @@ err:
}
+/**
+ @brief Add list of MERGE children to a TABLE_LIST list.
+
+ @param[in] tlist the parent TABLE_LIST object just opened
+
+ @return status
+ @retval 0 OK
+ @retval != 0 Error
+
+ @detail
+ When a MERGE parent table has just been opened, insert the
+ TABLE_LIST chain from the MERGE handle into the table list used for
+ opening tables for this statement. This lets the children be opened
+ too.
+*/
+
+static int add_merge_table_list(TABLE_LIST *tlist)
+{
+ TABLE *parent= tlist->table;
+ TABLE_LIST *child_l;
+ DBUG_ENTER("add_merge_table_list");
+ DBUG_PRINT("myrg", ("table: '%s'.'%s' 0x%lx", parent->s->db.str,
+ parent->s->table_name.str, (long) parent));
+
+ /* Must not call this with attached children. */
+ DBUG_ASSERT(!parent->children_attached);
+ /* Must not call this with children list in place. */
+ DBUG_ASSERT(tlist->next_global != parent->child_l);
+ /* Prevent inclusion of another MERGE table. Could make infinite recursion. */
+ if (tlist->parent_l)
+ {
+ my_error(ER_ADMIN_WRONG_MRG_TABLE, MYF(0), tlist->alias);
+ DBUG_RETURN(1);
+ }
+
+ /* Fix children.*/
+ for (child_l= parent->child_l; ; child_l= child_l->next_global)
+ {
+ /*
+ Note: child_l->table may still be set if this parent was taken
+ from the unused_tables chain. Ignore this fact here. The
+ reference will be replaced by the handler in
+ ::extra(HA_EXTRA_ATTACH_CHILDREN).
+ */
+
+ /* Set lock type. */
+ child_l->lock_type= tlist->lock_type;
+
+ /* Set parent reference. */
+ child_l->parent_l= tlist;
+
+ /* Break when this was the last child. */
+ if (&child_l->next_global == parent->child_last_l)
+ break;
+ }
+
+ /* Insert children into the table list. */
+ *parent->child_last_l= tlist->next_global;
+ tlist->next_global= parent->child_l;
+
+ /*
+ Do not fix the prev_global pointers. We will remove the
+ chain soon anyway.
+ */
+
+ DBUG_RETURN(0);
+}
+
+
+/**
+ @brief Attach MERGE children to the parent.
+
+ @param[in] tlist the child TABLE_LIST object just opened
+
+ @return status
+ @retval 0 OK
+ @retval != 0 Error
+
+ @note
+ This is called when the last MERGE child has just been opened, let
+ the handler attach the MyISAM tables to the MERGE table. Remove
+ MERGE TABLE_LIST chain from the statement list so that it cannot be
+ changed or freed.
+*/
+
+static int attach_merge_children(TABLE_LIST *tlist)
+{
+ TABLE *parent= tlist->parent_l->table;
+ int error;
+ DBUG_ENTER("attach_merge_children");
+ DBUG_PRINT("myrg", ("table: '%s'.'%s' 0x%lx", parent->s->db.str,
+ parent->s->table_name.str, (long) parent));
+
+ /* Must not call this with attached children. */
+ DBUG_ASSERT(!parent->children_attached);
+ /* Must call this with children list in place. */
+ DBUG_ASSERT(tlist->parent_l->next_global == parent->child_l);
+
+ /* Attach MyISAM tables to MERGE table. */
+ error= parent->file->extra(HA_EXTRA_ATTACH_CHILDREN);
+
+ /*
+ Remove children from the table list. Even in case of an error.
+ This should prevent tampering with them.
+ */
+ tlist->parent_l->next_global= *parent->child_last_l;
+
+ /*
+ Do not fix the last childs next_global pointer. It is needed for
+ stepping to the next table in the enclosing loop in open_tables().
+ Do not fix prev_global pointers. We did not set them.
+ */
+
+ if (error)
+ {
+ DBUG_PRINT("error", ("attaching MERGE children failed: %d", my_errno));
+ parent->file->print_error(error, MYF(0));
+ DBUG_RETURN(1);
+ }
+
+ parent->children_attached= TRUE;
+ DBUG_PRINT("myrg", ("attached parent: '%s'.'%s' 0x%lx", parent->s->db.str,
+ parent->s->table_name.str, (long) parent));
+
+ /*
+ Note that we have the cildren in the thd->open_tables list at this
+ point.
+ */
+
+ DBUG_RETURN(0);
+}
+
+
+/**
+ @brief Detach MERGE children from the parent.
+
+ @note
+ Call this before the first table of a MERGE table (parent or child)
+ is closed.
+
+ When closing thread tables at end of statement, both parent and
+ children are in thd->open_tables and will be closed. In most cases
+ the children will be closed before the parent. They are opened after
+ the parent and thus stacked into thd->open_tables before it.
+
+ To avoid that we touch a closed children in any way, we must detach
+ the children from the parent when the first belonging table is
+ closed (parent or child).
+
+ All references to the children should be removed on handler level
+ and optionally on table level.
+
+ @note
+ Assure that you call it for a MERGE parent or child only.
+ Either table->child_l or table->parent must be set.
+
+ @param[in] table the TABLE object of the parent
+ @param[in] clear_refs if to clear TABLE references
+ this must be true when called from
+ close_thread_tables() to enable fresh
+ open in open_tables()
+ it must be false when called in preparation
+ for reopen_tables()
+*/
+
+void detach_merge_children(TABLE *table, bool clear_refs)
+{
+ TABLE_LIST *child_l;
+ TABLE *parent= table->child_l ? table : table->parent;
+ bool first_detach;
+ DBUG_ENTER("detach_merge_children");
+ /*
+ Either table->child_l or table->parent must be set. Parent must have
+ child_l set.
+ */
+ DBUG_ASSERT(parent && parent->child_l);
+ DBUG_PRINT("myrg", ("table: '%s'.'%s' 0x%lx clear_refs: %d",
+ table->s->db.str, table->s->table_name.str,
+ (long) table, clear_refs));
+ DBUG_PRINT("myrg", ("parent: '%s'.'%s' 0x%lx", parent->s->db.str,
+ parent->s->table_name.str, (long) parent));
+
+ /*
+ In a open_tables() loop it can happen that not all tables have their
+ children attached yet. Also this is called for every child and the
+ parent from close_thread_tables().
+ */
+ if ((first_detach= parent->children_attached))
+ {
+ VOID(parent->file->extra(HA_EXTRA_DETACH_CHILDREN));
+ parent->children_attached= FALSE;
+ DBUG_PRINT("myrg", ("detached parent: '%s'.'%s' 0x%lx", parent->s->db.str,
+ parent->s->table_name.str, (long) parent));
+ }
+ else
+ DBUG_PRINT("myrg", ("parent is already detached"));
+
+ if (clear_refs)
+ {
+ /* In any case clear the own parent reference. (***) */
+ table->parent= NULL;
+
+ /*
+ On the first detach, clear all references. If this table is the
+ parent, we still may need to clear the child references. The first
+ detach might not have done this.
+ */
+ if (first_detach || (table == parent))
+ {
+ /* Clear TABLE references to force new assignment at next open. */
+ for (child_l= parent->child_l; ; child_l= child_l->next_global)
+ {
+ /*
+ Do not DBUG_ASSERT(child_l->table); open_tables might be
+ incomplete.
+
+ Clear the parent reference of the children only on the first
+ detach. The children might already be closed. They will clear
+ it themseves when this function is called for them with
+ 'clear_refs' true. See above "(***)".
+ */
+ if (first_detach && child_l->table)
+ child_l->table->parent= NULL;
+
+ /* Clear the table reference to force new assignment at next open. */
+ child_l->table= NULL;
+
+ /* Break when this was the last child. */
+ if (&child_l->next_global == parent->child_last_l)
+ break;
+ }
+ }
+ }
+
+ DBUG_VOID_RETURN;
+}
+
+
+/**
+ @brief Fix MERGE children after open.
+
+ @param[in] old_child_list first list member from original table
+ @param[in] old_last pointer to &next_global of last list member
+ @param[in] new_child_list first list member from freshly opened table
+ @param[in] new_last pointer to &next_global of last list member
+
+ @return mismatch
+ @retval FALSE OK, no mismatch
+ @retval TRUE Error, lists mismatch
+
+ @detail
+ Main action is to copy TABLE reference for each member of original
+ child list to new child list. After a fresh open these references
+ are NULL. Assign the old children to the new table. Some of them
+ might also be reopened or will be reopened soon.
+
+ Other action is to verify that the table definition with respect to
+ the UNION list did not change.
+
+ @note
+ This function terminates the child list if the respective '*_last'
+ pointer is non-NULL. Do not call it from a place where the list is
+ embedded in another list and this would break it.
+
+ Terminating the list is required for example in the first
+ reopen_table() after open_tables(). open_tables() requires the end
+ of the list not to be terminated because other tables could follow
+ behind the child list.
+
+ If a '*_last' pointer is NULL, the respective list is assumed to be
+ NULL terminated.
+*/
+
+bool fix_merge_after_open(TABLE_LIST *old_child_list, TABLE_LIST **old_last,
+ TABLE_LIST *new_child_list, TABLE_LIST **new_last)
+{
+ bool mismatch= FALSE;
+ DBUG_ENTER("fix_merge_after_open");
+ DBUG_PRINT("myrg", ("old last addr: 0x%lx new last addr: 0x%lx",
+ (long) old_last, (long) new_last));
+
+ /* Terminate the lists for easier check of list end. */
+ if (old_last)
+ *old_last= NULL;
+ if (new_last)
+ *new_last= NULL;
+
+ for (;;)
+ {
+ DBUG_PRINT("myrg", ("old list item: 0x%lx new list item: 0x%lx",
+ (long) old_child_list, (long) new_child_list));
+ /* Break if one of the list is at its end. */
+ if (!old_child_list || !new_child_list)
+ break;
+ /* Old table has references to child TABLEs. */
+ DBUG_ASSERT(old_child_list->table);
+ /* New table does not yet have references to child TABLEs. */
+ DBUG_ASSERT(!new_child_list->table);
+ DBUG_PRINT("myrg", ("old table: '%s'.'%s' new table: '%s'.'%s'",
+ old_child_list->db, old_child_list->table_name,
+ new_child_list->db, new_child_list->table_name));
+ /* Child db.table names must match. */
+ if (strcmp(old_child_list->table_name, new_child_list->table_name) ||
+ strcmp(old_child_list->db, new_child_list->db))
+ break;
+ /*
+ Copy TABLE reference. Child TABLE objects are still in place
+ though not necessarily open yet.
+ */
+ DBUG_PRINT("myrg", ("old table ref: 0x%lx replaces new table ref: 0x%lx",
+ (long) old_child_list->table,
+ (long) new_child_list->table));
+ new_child_list->table= old_child_list->table;
+ /* Step both lists. */
+ old_child_list= old_child_list->next_global;
+ new_child_list= new_child_list->next_global;
+ }
+ DBUG_PRINT("myrg", ("end of list, mismatch: %d", mismatch));
+ /*
+ If the list pointers are not both NULL after the loop, then the
+ lists differ. If the are both identical, but not NULL, then they
+ have at least one table in common and hence the rest of the list
+ would be identical too. But in this case the loop woul run until the
+ list end, where both pointers would become NULL.
+ */
+ if (old_child_list != new_child_list)
+ mismatch= TRUE;
+ if (mismatch)
+ my_error(ER_TABLE_DEF_CHANGED, MYF(0));
+
+ DBUG_RETURN(mismatch);
+}
+
+
/*
Open all tables in list
@@ -3499,7 +4370,7 @@ err:
int open_tables(THD *thd, TABLE_LIST **start, uint *counter, uint flags)
{
- TABLE_LIST *tables;
+ TABLE_LIST *tables= NULL;
bool refresh;
int result=0;
MEM_ROOT new_frm_mem;
@@ -3512,13 +4383,13 @@ int open_tables(THD *thd, TABLE_LIST **start, uint *counter, uint flags)
temporary mem_root for new .frm parsing.
TODO: variables for size
*/
- init_alloc_root(&new_frm_mem, 8024, 8024);
+ init_sql_alloc(&new_frm_mem, 8024, 8024);
thd->current_tablenr= 0;
restart:
*counter= 0;
query_tables_last_own= 0;
- thd->proc_info="Opening tables";
+ thd_proc_info(thd, "Opening tables");
/*
If we are not already executing prelocked statement and don't have
@@ -3559,6 +4430,9 @@ int open_tables(THD *thd, TABLE_LIST **start, uint *counter, uint flags)
*/
for (tables= *start; tables ;tables= tables->next_global)
{
+ DBUG_PRINT("tcache", ("opening table: '%s'.'%s' item: 0x%lx",
+ tables->db, tables->table_name, (long) tables));
+
safe_to_ignore_table= FALSE;
/*
@@ -3610,6 +4484,10 @@ int open_tables(THD *thd, TABLE_LIST **start, uint *counter, uint flags)
else
tables->table= open_table(thd, tables, &new_frm_mem, &refresh, flags);
}
+ else
+ DBUG_PRINT("tcache", ("referenced table: '%s'.'%s' 0x%lx",
+ tables->db, tables->table_name,
+ (long) tables->table));
if (!tables->table)
{
@@ -3641,6 +4519,19 @@ int open_tables(THD *thd, TABLE_LIST **start, uint *counter, uint flags)
goto process_view_routines;
}
+ /*
+ If in a MERGE table open, we need to remove the children list
+ from statement table list before restarting. Otherwise the list
+ will be inserted another time.
+ */
+ if (tables->parent_l)
+ {
+ TABLE_LIST *parent_l= tables->parent_l;
+ /* The parent table should be correctly open at this point. */
+ DBUG_ASSERT(parent_l->table);
+ parent_l->next_global= *parent_l->table->child_last_l;
+ }
+
if (refresh) // Refresh in progress
{
/*
@@ -3709,6 +4600,24 @@ int open_tables(THD *thd, TABLE_LIST **start, uint *counter, uint flags)
thd->update_lock_default : tables->lock_type;
tables->table->grant= tables->grant;
+ /* Attach MERGE children if not locked already. */
+ DBUG_PRINT("tcache", ("is parent: %d is child: %d",
+ test(tables->table->child_l),
+ test(tables->parent_l)));
+ DBUG_PRINT("tcache", ("in lock tables: %d in prelock mode: %d",
+ test(thd->locked_tables), test(thd->prelocked_mode)));
+ if (((!thd->locked_tables && !thd->prelocked_mode) ||
+ tables->table->s->tmp_table) &&
+ ((tables->table->child_l &&
+ add_merge_table_list(tables)) ||
+ (tables->parent_l &&
+ (&tables->next_global == tables->parent_l->table->child_last_l) &&
+ attach_merge_children(tables))))
+ {
+ result= -1;
+ goto err;
+ }
+
process_view_routines:
/*
Again we may need cache all routines used by this view and add
@@ -3735,12 +4644,24 @@ process_view_routines:
}
err:
- thd->proc_info=0;
+ thd_proc_info(thd, 0);
free_root(&new_frm_mem, MYF(0)); // Free pre-alloced block
if (query_tables_last_own)
thd->lex->mark_as_requiring_prelocking(query_tables_last_own);
+ if (result && tables)
+ {
+ /*
+ Some functions determine success as (tables->table != NULL).
+ tables->table is in thd->open_tables. It won't go lost. If the
+ error happens on a MERGE child, clear the parents TABLE reference.
+ */
+ if (tables->parent_l)
+ tables->parent_l->table= NULL;
+ tables->table= NULL;
+ }
+ DBUG_PRINT("tcache", ("returning: %d", result));
DBUG_RETURN(result);
}
@@ -3780,6 +4701,63 @@ static bool check_lock_and_start_stmt(THD *thd, TABLE *table,
}
+/**
+ @brief Open and lock one table
+
+ @param[in] thd thread handle
+ @param[in] table_l table to open is first table in this list
+ @param[in] lock_type lock to use for table
+
+ @return table
+ @retval != NULL OK, opened table returned
+ @retval NULL Error
+
+ @note
+ If ok, the following are also set:
+ table_list->lock_type lock_type
+ table_list->table table
+
+ @note
+ If table_l is a list, not a single table, the list is temporarily
+ broken.
+
+ @detail
+ This function is meant as a replacement for open_ltable() when
+ MERGE tables can be opened. open_ltable() cannot open MERGE tables.
+
+ There may be more differences between open_n_lock_single_table() and
+ open_ltable(). One known difference is that open_ltable() does
+ neither call decide_logging_format() nor handle some other logging
+ and locking issues because it does not call lock_tables().
+*/
+
+TABLE *open_n_lock_single_table(THD *thd, TABLE_LIST *table_l,
+ thr_lock_type lock_type)
+{
+ TABLE_LIST *save_next_global;
+ DBUG_ENTER("open_n_lock_single_table");
+
+ /* Remember old 'next' pointer. */
+ save_next_global= table_l->next_global;
+ /* Break list. */
+ table_l->next_global= NULL;
+
+ /* Set requested lock type. */
+ table_l->lock_type= lock_type;
+ /* Allow to open real tables only. */
+ table_l->required_type= FRMTYPE_TABLE;
+
+ /* Open the table. */
+ if (simple_open_n_lock_tables(thd, table_l))
+ table_l->table= NULL; /* Just to be sure. */
+
+ /* Restore list. */
+ table_l->next_global= save_next_global;
+
+ DBUG_RETURN(table_l->table);
+}
+
+
/*
Open and lock one table
@@ -3811,7 +4789,7 @@ TABLE *open_ltable(THD *thd, TABLE_LIST *table_list, thr_lock_type lock_type,
bool refresh;
DBUG_ENTER("open_ltable");
- thd->proc_info="Opening table";
+ thd_proc_info(thd, "Opening table");
thd->current_tablenr= 0;
/* open_ltable can be used only for BASIC TABLEs */
table_list->required_type= FRMTYPE_TABLE;
@@ -3821,6 +4799,17 @@ TABLE *open_ltable(THD *thd, TABLE_LIST *table_list, thr_lock_type lock_type,
if (table)
{
+ if (table->child_l)
+ {
+ /* A MERGE table must not come here. */
+ /* purecov: begin tested */
+ my_error(ER_WRONG_OBJECT, MYF(0), table->s->db.str,
+ table->s->table_name.str, "BASE TABLE");
+ table= 0;
+ goto end;
+ /* purecov: end */
+ }
+
table_list->lock_type= lock_type;
table_list->table= table;
table->grant= table_list->grant;
@@ -3838,56 +4827,21 @@ TABLE *open_ltable(THD *thd, TABLE_LIST *table_list, thr_lock_type lock_type,
table= 0;
}
}
- thd->proc_info=0;
- DBUG_RETURN(table);
-}
-
-
-/*
- Open all tables in list and locks them for read without derived
- tables processing.
-
- SYNOPSIS
- simple_open_n_lock_tables()
- thd - thread handler
- tables - list of tables for open&locking
-
- RETURN
- 0 - ok
- -1 - error
- NOTE
- The lock will automaticaly be freed by close_thread_tables()
-*/
-
-int simple_open_n_lock_tables(THD *thd, TABLE_LIST *tables)
-{
- uint counter;
- bool need_reopen;
- DBUG_ENTER("simple_open_n_lock_tables");
-
- for ( ; ; )
- {
- if (open_tables(thd, &tables, &counter, 0))
- DBUG_RETURN(-1);
- if (!lock_tables(thd, tables, counter, &need_reopen))
- break;
- if (!need_reopen)
- DBUG_RETURN(-1);
- close_tables_for_reopen(thd, &tables);
- }
- DBUG_RETURN(0);
+ end:
+ thd_proc_info(thd, 0);
+ DBUG_RETURN(table);
}
/*
- Open all tables in list, locks them and process derived tables
- tables processing.
+ Open all tables in list, locks them and optionally process derived tables.
SYNOPSIS
- open_and_lock_tables()
+ open_and_lock_tables_derived()
thd - thread handler
tables - list of tables for open&locking
+ derived - if to handle derived tables
RETURN
FALSE - ok
@@ -3895,27 +4849,43 @@ int simple_open_n_lock_tables(THD *thd, TABLE_LIST *tables)
NOTE
The lock will automaticaly be freed by close_thread_tables()
+
+ NOTE
+ There are two convenience functions:
+ - simple_open_n_lock_tables(thd, tables) without derived handling
+ - open_and_lock_tables(thd, tables) with derived handling
+ Both inline functions call open_and_lock_tables_derived() with
+ the third argument set appropriately.
*/
-bool open_and_lock_tables(THD *thd, TABLE_LIST *tables)
+bool open_and_lock_tables_derived(THD *thd, TABLE_LIST *tables, bool derived)
{
uint counter;
bool need_reopen;
- DBUG_ENTER("open_and_lock_tables");
+ DBUG_ENTER("open_and_lock_tables_derived");
+ DBUG_PRINT("enter", ("derived handling: %d", derived));
for ( ; ; )
{
if (open_tables(thd, &tables, &counter, 0))
DBUG_RETURN(-1);
+
+ DBUG_EXECUTE_IF("sleep_open_and_lock_after_open", {
+ const char *old_proc_info= thd->proc_info;
+ thd->proc_info= "DBUG sleep";
+ my_sleep(6000000);
+ thd->proc_info= old_proc_info;});
+
if (!lock_tables(thd, tables, counter, &need_reopen))
break;
if (!need_reopen)
DBUG_RETURN(-1);
close_tables_for_reopen(thd, &tables);
}
- if (mysql_handle_derived(thd->lex, &mysql_derived_prepare) ||
- (thd->fill_derived_tables() &&
- mysql_handle_derived(thd->lex, &mysql_derived_filling)))
+ if (derived &&
+ (mysql_handle_derived(thd->lex, &mysql_derived_prepare) ||
+ (thd->fill_derived_tables() &&
+ mysql_handle_derived(thd->lex, &mysql_derived_filling))))
DBUG_RETURN(TRUE); /* purecov: inspected */
DBUG_RETURN(0);
}
@@ -4205,7 +5175,7 @@ int lock_tables(THD *thd, TABLE_LIST *tables, uint count, bool *need_reopen)
{
if (thd->lex->requires_prelocking())
{
- thd->options&= ~(ulong) (OPTION_TABLE_LOCK);
+ thd->options&= ~(OPTION_TABLE_LOCK);
thd->in_lock_tables=0;
}
DBUG_RETURN(-1);
@@ -4229,7 +5199,17 @@ int lock_tables(THD *thd, TABLE_LIST *tables, uint count, bool *need_reopen)
thd->lock= 0;
thd->in_lock_tables=0;
- for (table= tables; table != first_not_own; table= table->next_global)
+ /*
+ When open_and_lock_tables() is called for a single table out of
+ a table list, the 'next_global' chain is temporarily broken. We
+ may not find 'first_not_own' before the end of the "list".
+ Look for example at those places where open_n_lock_single_table()
+ is called. That function implements the temporary breaking of
+ a table list for opening a single table.
+ */
+ for (table= tables;
+ table && table != first_not_own;
+ table= table->next_global)
{
if (!table->placeholder())
{
@@ -4239,7 +5219,7 @@ int lock_tables(THD *thd, TABLE_LIST *tables, uint count, bool *need_reopen)
ha_rollback_stmt(thd);
mysql_unlock_tables(thd, thd->locked_tables);
thd->locked_tables= 0;
- thd->options&= ~(ulong) (OPTION_TABLE_LOCK);
+ thd->options&= ~(OPTION_TABLE_LOCK);
DBUG_RETURN(-1);
}
}
@@ -4256,7 +5236,17 @@ int lock_tables(THD *thd, TABLE_LIST *tables, uint count, bool *need_reopen)
else
{
TABLE_LIST *first_not_own= thd->lex->first_not_own_table();
- for (table= tables; table != first_not_own; table= table->next_global)
+ /*
+ When open_and_lock_tables() is called for a single table out of
+ a table list, the 'next_global' chain is temporarily broken. We
+ may not find 'first_not_own' before the end of the "list".
+ Look for example at those places where open_n_lock_single_table()
+ is called. That function implements the temporary breaking of
+ a table list for opening a single table.
+ */
+ for (table= tables;
+ table && table != first_not_own;
+ table= table->next_global)
{
if (!table->placeholder() &&
check_lock_and_start_stmt(thd, table->table, table->lock_type))
@@ -4305,7 +5295,6 @@ void close_tables_for_reopen(THD *thd, TABLE_LIST **tables)
sp_remove_not_own_routines(thd->lex);
for (TABLE_LIST *tmp= *tables; tmp; tmp= tmp->next_global)
tmp->table= 0;
- mark_used_tables_as_free_for_reuse(thd, thd->temporary_tables);
close_thread_tables(thd);
}
@@ -4360,7 +5349,7 @@ TABLE *open_temporary_table(THD *thd, const char *path, const char *db,
saved_cache_key= strmov(tmp_path, path)+1;
memcpy(saved_cache_key, cache_key, key_length);
- init_tmp_table_share(share, saved_cache_key, key_length,
+ init_tmp_table_share(thd, share, saved_cache_key, key_length,
strend(saved_cache_key)+1, tmp_path);
if (open_table_def(thd, share, 0) ||
@@ -4393,6 +5382,8 @@ TABLE *open_temporary_table(THD *thd, const char *path, const char *db,
slave_open_temp_tables++;
}
tmp_table->pos_in_table_list= 0;
+ DBUG_PRINT("tmptable", ("opened table: '%s'.'%s' 0x%lx", tmp_table->s->db.str,
+ tmp_table->s->table_name.str, (long) tmp_table));
DBUG_RETURN(tmp_table);
}
@@ -4409,7 +5400,7 @@ bool rm_temporary_table(handlerton *base, char *path)
error=1; /* purecov: inspected */
*ext= 0; // remove extension
file= get_new_handler((TABLE_SHARE*) 0, current_thd->mem_root, base);
- if (file && file->delete_table(path))
+ if (file && file->ha_delete_table(path))
{
error=1;
sql_print_warning("Could not remove temporary table: '%s', error: %d",
@@ -5122,7 +6113,9 @@ find_field_in_tables(THD *thd, Item_ident *item,
{
Field *cur_field= find_field_in_table_ref(thd, cur_table, name, length,
item->name, db, table_name, ref,
- check_privileges,
+ (thd->lex->sql_command ==
+ SQLCOM_SHOW_FIELDS)
+ ? false : check_privileges,
allow_rowid,
&(item->cached_field_index),
register_tree_change,
@@ -5316,7 +6309,8 @@ find_item_in_list(Item *find, List<Item> &items, uint *counter,
if (item_field->field_name && item_field->table_name &&
!my_strcasecmp(system_charset_info, item_field->field_name,
field_name) &&
- !strcmp(item_field->table_name, table_name) &&
+ !my_strcasecmp(table_alias_charset, item_field->table_name,
+ table_name) &&
(!db_name || (item_field->db_name &&
!strcmp(item_field->db_name, db_name))))
{
@@ -5406,7 +6400,36 @@ find_item_in_list(Item *find, List<Item> &items, uint *counter,
*resolution= RESOLVED_IGNORING_ALIAS;
break;
}
- }
+ }
+ else if (table_name && item->type() == Item::REF_ITEM &&
+ ((Item_ref *)item)->ref_type() == Item_ref::VIEW_REF)
+ {
+ /*
+ TODO:Here we process prefixed view references only. What we should
+ really do is process all types of Item_refs. But this will currently
+ lead to a clash with the way references to outer SELECTs (from the
+ HAVING clause) are handled in e.g. :
+ SELECT 1 FROM t1 AS t1_o GROUP BY a
+ HAVING (SELECT t1_o.a FROM t1 AS t1_i GROUP BY t1_i.a LIMIT 1).
+ Processing all Item_refs here will cause t1_o.a to resolve to itself.
+ We still need to process the special case of Item_direct_view_ref
+ because in the context of views they have the same meaning as
+ Item_field for tables.
+ */
+ Item_ident *item_ref= (Item_ident *) item;
+ if (item_ref->name && item_ref->table_name &&
+ !my_strcasecmp(system_charset_info, item_ref->name, field_name) &&
+ !my_strcasecmp(table_alias_charset, item_ref->table_name,
+ table_name) &&
+ (!db_name || (item_ref->db_name &&
+ !strcmp (item_ref->db_name, db_name))))
+ {
+ found= li.ref();
+ *counter= i;
+ *resolution= RESOLVED_IGNORING_ALIAS;
+ break;
+ }
+ }
}
if (!found)
{
@@ -6260,7 +7283,7 @@ bool setup_fields(THD *thd, Item **ref_pointer_array,
thd->lex->allow_sum_func= save_allow_sum_func;
thd->mark_used_columns= save_mark_used_columns;
DBUG_PRINT("info", ("thd->mark_used_columns: %d", thd->mark_used_columns));
- DBUG_RETURN(test(thd->net.report_error));
+ DBUG_RETURN(test(thd->is_error()));
}
@@ -6563,10 +7586,7 @@ insert_fields(THD *thd, Name_resolution_context *context, const char *db_name,
!any_privileges)
{
field_iterator.set(tables);
- if (check_grant_all_columns(thd, SELECT_ACL, field_iterator.grant(),
- field_iterator.db_name(),
- field_iterator.table_name(),
- &field_iterator))
+ if (check_grant_all_columns(thd, SELECT_ACL, &field_iterator))
DBUG_RETURN(TRUE);
}
#endif
@@ -6807,7 +7827,7 @@ int setup_conds(THD *thd, TABLE_LIST *tables, TABLE_LIST *leaves,
select_lex->conds_processed_with_permanent_arena= 1;
}
thd->lex->current_select->is_item_list_lookup= save_is_item_list_lookup;
- DBUG_RETURN(test(thd->net.report_error));
+ DBUG_RETURN(test(thd->is_error()));
err_no_arena:
select_lex->is_item_list_lookup= save_is_item_list_lookup;
@@ -6889,7 +7909,7 @@ fill_record(THD * thd, List<Item> &fields, List<Item> &values,
goto err;
}
}
- DBUG_RETURN(thd->net.report_error);
+ DBUG_RETURN(thd->is_error());
err:
if (table)
table->auto_increment_field_not_null= FALSE;
@@ -6974,7 +7994,7 @@ fill_record(THD *thd, Field **ptr, List<Item> &values, bool ignore_errors)
table= (*ptr)->table;
table->auto_increment_field_not_null= FALSE;
}
- while ((field = *ptr++) && !thd->net.report_error)
+ while ((field = *ptr++) && ! thd->is_error())
{
value=v++;
table= field->table;
@@ -6983,7 +8003,7 @@ fill_record(THD *thd, Field **ptr, List<Item> &values, bool ignore_errors)
if (value->save_in_field(field, 0) < 0)
goto err;
}
- DBUG_RETURN(thd->net.report_error);
+ DBUG_RETURN(thd->is_error());
err:
if (table)
@@ -7074,12 +8094,12 @@ my_bool mysql_rm_tmp_tables(void)
/* We should cut file extention before deleting of table */
memcpy(filePathCopy, filePath, filePath_len - ext_len);
filePathCopy[filePath_len - ext_len]= 0;
- init_tmp_table_share(&share, "", 0, "", filePathCopy);
+ init_tmp_table_share(thd, &share, "", 0, "", filePathCopy);
if (!open_table_def(thd, &share, 0) &&
((handler_file= get_new_handler(&share, thd->mem_root,
share.db_type()))))
{
- handler_file->delete_table(filePathCopy);
+ handler_file->ha_delete_table(filePathCopy);
delete handler_file;
}
free_table_share(&share);
@@ -7176,7 +8196,7 @@ bool remove_table_from_cache(THD *thd, const char *db, const char *table_name,
TABLE_SHARE *share;
bool result= 0, signalled= 0;
DBUG_ENTER("remove_table_from_cache");
- DBUG_PRINT("enter", ("Table: '%s.%s' flags: %u", db, table_name, flags));
+ DBUG_PRINT("enter", ("table: '%s'.'%s' flags: %u", db, table_name, flags));
key_length=(uint) (strmov(strmov(key,db)+1,table_name)-key)+1;
for (;;)
@@ -7191,6 +8211,8 @@ bool remove_table_from_cache(THD *thd, const char *db, const char *table_name,
&state))
{
THD *in_use;
+ DBUG_PRINT("tcache", ("found table: '%s'.'%s' 0x%lx", table->s->db.str,
+ table->s->table_name.str, (long) table));
table->s->version=0L; /* Free when thread is ready */
if (!(in_use=table->in_use))
@@ -7229,13 +8251,19 @@ bool remove_table_from_cache(THD *thd, const char *db, const char *table_name,
}
/*
Now we must abort all tables locks used by this thread
- as the thread may be waiting to get a lock for another table
+ as the thread may be waiting to get a lock for another table.
+ Note that we need to hold LOCK_open while going through the
+ list. So that the other thread cannot change it. The other
+ thread must also hold LOCK_open whenever changing the
+ open_tables list. Aborting the MERGE lock after a child was
+ closed and before the parent is closed would be fatal.
*/
for (TABLE *thd_table= in_use->open_tables;
thd_table ;
thd_table= thd_table->next)
{
- if (thd_table->db_stat) // If table is open
+ /* Do not handle locks of MERGE children. */
+ if (thd_table->db_stat && !thd_table->parent) // If table is open
signalled|= mysql_lock_abort_for_thread(thd, thd_table);
}
}
@@ -7332,7 +8360,7 @@ int init_ftfuncs(THD *thd, SELECT_LEX *select_lex, bool no_order)
List_iterator<Item_func_match> li(*(select_lex->ftfunc_list));
Item_func_match *ifm;
DBUG_PRINT("info",("Performing FULLTEXT search"));
- thd->proc_info="FULLTEXT initialization";
+ thd_proc_info(thd, "FULLTEXT initialization");
while ((ifm=li++))
ifm->init_search(no_order);
@@ -7393,7 +8421,7 @@ open_new_frm(THD *thd, TABLE_SHARE *share, const char *alias,
else
{
/* only VIEWs are supported now */
- my_error(ER_FRM_UNKNOWN_TYPE, MYF(0), share->path, parser->type()->str);
+ my_error(ER_FRM_UNKNOWN_TYPE, MYF(0), share->path.str, parser->type()->str);
goto err;
}
DBUG_RETURN(0);
@@ -7438,7 +8466,9 @@ int abort_and_upgrade_lock(ALTER_PARTITION_PARAM_TYPE *lpt)
lpt->old_lock_type= lpt->table->reginfo.lock_type;
VOID(pthread_mutex_lock(&LOCK_open));
- mysql_lock_abort(lpt->thd, lpt->table, TRUE);
+ /* If MERGE child, forward lock handling to parent. */
+ mysql_lock_abort(lpt->thd, lpt->table->parent ? lpt->table->parent :
+ lpt->table, TRUE);
VOID(remove_table_from_cache(lpt->thd, lpt->db, lpt->table_name, flags));
VOID(pthread_mutex_unlock(&LOCK_open));
DBUG_RETURN(0);
@@ -7459,14 +8489,18 @@ int abort_and_upgrade_lock(ALTER_PARTITION_PARAM_TYPE *lpt)
We also downgrade locks after the upgrade to WRITE_ONLY
*/
+/* purecov: begin deadcode */
void close_open_tables_and_downgrade(ALTER_PARTITION_PARAM_TYPE *lpt)
{
VOID(pthread_mutex_lock(&LOCK_open));
remove_table_from_cache(lpt->thd, lpt->db, lpt->table_name,
RTFC_WAIT_OTHER_THREAD_FLAG);
VOID(pthread_mutex_unlock(&LOCK_open));
- mysql_lock_downgrade_write(lpt->thd, lpt->table, lpt->old_lock_type);
+ /* If MERGE child, forward lock handling to parent. */
+ mysql_lock_downgrade_write(lpt->thd, lpt->table->parent ? lpt->table->parent :
+ lpt->table, lpt->old_lock_type);
}
+/* purecov: end */
/*
@@ -7532,13 +8566,19 @@ void mysql_wait_completed_table(ALTER_PARTITION_PARAM_TYPE *lpt, TABLE *my_table
}
/*
Now we must abort all tables locks used by this thread
- as the thread may be waiting to get a lock for another table
+ as the thread may be waiting to get a lock for another table.
+ Note that we need to hold LOCK_open while going through the
+ list. So that the other thread cannot change it. The other
+ thread must also hold LOCK_open whenever changing the
+ open_tables list. Aborting the MERGE lock after a child was
+ closed and before the parent is closed would be fatal.
*/
for (TABLE *thd_table= in_use->open_tables;
thd_table ;
thd_table= thd_table->next)
{
- if (thd_table->db_stat) // If table is open
+ /* Do not handle locks of MERGE children. */
+ if (thd_table->db_stat && !thd_table->parent) // If table is open
mysql_lock_abort_for_thread(lpt->thd, thd_table);
}
}
@@ -7548,8 +8588,10 @@ void mysql_wait_completed_table(ALTER_PARTITION_PARAM_TYPE *lpt, TABLE *my_table
those in use for removal after completion. Now we also need to abort
all that are locked and are not progressing due to being locked
by our lock. We don't upgrade our lock here.
+ If MERGE child, forward lock handling to parent.
*/
- mysql_lock_abort(lpt->thd, my_table, FALSE);
+ mysql_lock_abort(lpt->thd, my_table->parent ? my_table->parent : my_table,
+ FALSE);
VOID(pthread_mutex_unlock(&LOCK_open));
DBUG_VOID_RETURN;
}
@@ -7808,6 +8850,13 @@ void close_performance_schema_table(THD *thd, Open_tables_state *backup)
pthread_mutex_lock(&LOCK_open);
found_old_table= false;
+ /*
+ Note that we need to hold LOCK_open while changing the
+ open_tables list. Another thread may work on it.
+ (See: remove_table_from_cache(), mysql_wait_completed_table())
+ Closing a MERGE child before the parent would be fatal if the
+ other thread tries to abort the MERGE lock in between.
+ */
while (thd->open_tables)
found_old_table|= close_thread_table(thd, &thd->open_tables);
diff --git a/sql/sql_binlog.cc b/sql/sql_binlog.cc
index a3a804db8f0..04f408453ea 100644
--- a/sql/sql_binlog.cc
+++ b/sql/sql_binlog.cc
@@ -17,15 +17,14 @@
#include "rpl_rli.h"
#include "base64.h"
-/*
+/**
Execute a BINLOG statement
- TODO: This currently assumes a MySQL 5.x binlog.
- When we'll have binlog with a different format, to execute the
- BINLOG command properly the server will need to know which format
- the BINLOG command's event is in. mysqlbinlog should then send
- the Format_description_log_event of the binlog it reads and the
- server thread should cache this format into
+ To execute the BINLOG command properly the server needs to know
+ which format the BINLOG command's event is in. Therefore, the first
+ BINLOG statement seen must be a base64 encoding of the
+ Format_description_log_event, as outputted by mysqlbinlog. This
+ Format_description_log_event is cached in
rli->description_event_for_exec.
*/
@@ -37,12 +36,8 @@ void mysql_client_binlog_statement(THD* thd)
thd->lex->comment.length : 2048),
thd->lex->comment.str));
- /*
- Temporarily turn off send_ok, since different events handle this
- differently
- */
- my_bool nsok= thd->net.no_send_ok;
- thd->net.no_send_ok= TRUE;
+ if (check_global_access(thd, SUPER_ACL))
+ DBUG_VOID_RETURN;
size_t coded_len= thd->lex->comment.length + 1;
size_t decoded_len= base64_needed_decoded_length(coded_len);
@@ -51,11 +46,24 @@ void mysql_client_binlog_statement(THD* thd)
/*
Allocation
*/
+
+ /*
+ If we do not have a Format_description_event, we create a dummy
+ one here. In this case, the first event we read must be a
+ Format_description_event.
+ */
+ my_bool have_fd_event= TRUE;
if (!thd->rli_fake)
+ {
thd->rli_fake= new Relay_log_info;
-
- const Format_description_log_event *desc=
- new Format_description_log_event(4);
+ have_fd_event= FALSE;
+ }
+ if (thd->rli_fake && !thd->rli_fake->relay_log.description_event_for_exec)
+ {
+ thd->rli_fake->relay_log.description_event_for_exec=
+ new Format_description_log_event(4);
+ have_fd_event= FALSE;
+ }
const char *error= 0;
char *buf= (char *) my_malloc(decoded_len, MYF(MY_WME));
@@ -64,7 +72,9 @@ void mysql_client_binlog_statement(THD* thd)
/*
Out of memory check
*/
- if (!(thd->rli_fake && desc && buf))
+ if (!(thd->rli_fake &&
+ thd->rli_fake->relay_log.description_event_for_exec &&
+ buf))
{
my_error(ER_OUTOFMEMORY, MYF(0), 1); /* needed 1 bytes */
goto end;
@@ -135,7 +145,28 @@ void mysql_client_binlog_statement(THD* thd)
goto end;
}
- ev= Log_event::read_log_event(bufptr, event_len, &error, desc);
+ /*
+ If we have not seen any Format_description_event, then we must
+ see one; it is the only statement that can be read in base64
+ without a prior Format_description_event.
+ */
+ if (!have_fd_event)
+ {
+ if (bufptr[EVENT_TYPE_OFFSET] == FORMAT_DESCRIPTION_EVENT)
+ have_fd_event= TRUE;
+ else
+ {
+ my_error(ER_NO_FORMAT_DESCRIPTION_EVENT_BEFORE_BINLOG_STATEMENT,
+ MYF(0),
+ Log_event::get_type_str(
+ (Log_event_type)bufptr[EVENT_TYPE_OFFSET]));
+ goto end;
+ }
+ }
+
+ ev= Log_event::read_log_event(bufptr, event_len, &error,
+ thd->rli_fake->relay_log.
+ description_event_for_exec);
DBUG_PRINT("info",("binlog base64 err=%s", error));
if (!ev)
@@ -171,11 +202,10 @@ void mysql_client_binlog_statement(THD* thd)
Neither do we have to update the log positions, since that is
not used at all: the rli_fake instance is used only for error
reporting.
- */
+ */
#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION)
- if (IF_DBUG(int err= ) ev->apply_event(thd->rli_fake))
+ if (apply_event_and_update_pos(ev, thd, thd->rli_fake, FALSE))
{
- DBUG_PRINT("info", ("apply_event() returned: %d", err));
/*
TODO: Maybe a better error message since the BINLOG statement
now contains several events.
@@ -185,26 +215,23 @@ void mysql_client_binlog_statement(THD* thd)
}
#endif
- delete ev;
+ /*
+ Format_description_log_event should not be deleted because it
+ will be used to read info about the relay log's format; it
+ will be deleted when the SQL thread does not need it,
+ i.e. when this thread terminates.
+ */
+ if (ev->get_type_code() != FORMAT_DESCRIPTION_EVENT)
+ delete ev;
ev= 0;
}
}
- /*
- Restore setting of no_send_ok
- */
- thd->net.no_send_ok= nsok;
DBUG_PRINT("info",("binlog base64 execution finished successfully"));
send_ok(thd);
end:
- /*
- Restore setting of no_send_ok
- */
- thd->net.no_send_ok= nsok;
-
- delete desc;
my_free(buf, MYF(MY_ALLOW_ZERO_PTR));
DBUG_VOID_RETURN;
}
diff --git a/sql/sql_cache.cc b/sql/sql_cache.cc
index 56b048a4f9d..7e54f87fe14 100644
--- a/sql/sql_cache.cc
+++ b/sql/sql_cache.cc
@@ -371,6 +371,32 @@ TODO list:
__LINE__,(ulong)(B)));B->query()->unlock_reading();}
#define DUMP(C) DBUG_EXECUTE("qcache", {\
(C)->cache_dump(); (C)->queries_dump();(C)->tables_dump();})
+
+
+/**
+ Causes the thread to wait in a spin lock for a query kill signal.
+ This function is used by the test frame work to identify race conditions.
+
+ The signal is caught and ignored and the thread is not killed.
+*/
+
+static void debug_wait_for_kill(const char *info)
+{
+ DBUG_ENTER("debug_wait_for_kill");
+ const char *prev_info;
+ THD *thd;
+ thd= current_thd;
+ prev_info= thd->proc_info;
+ thd->proc_info= info;
+ sql_print_information(info);
+ while(!thd->killed)
+ my_sleep(1000);
+ thd->killed= THD::NOT_KILLED;
+ sql_print_information("Exit debug_wait_for_kill");
+ thd->proc_info= prev_info;
+ DBUG_VOID_RETURN;
+}
+
#else
#define MUTEX_LOCK(M) pthread_mutex_lock(M)
#define MUTEX_UNLOCK(M) pthread_mutex_unlock(M)
@@ -647,13 +673,16 @@ void query_cache_insert(NET *net, const char *packet, ulong length)
if (net->query_cache_query == 0)
DBUG_VOID_RETURN;
+ DBUG_EXECUTE_IF("wait_in_query_cache_insert",
+ debug_wait_for_kill("wait_in_query_cache_insert"); );
+
STRUCT_LOCK(&query_cache.structure_guard_mutex);
bool interrupt;
query_cache.wait_while_table_flush_is_in_progress(&interrupt);
if (interrupt)
{
STRUCT_UNLOCK(&query_cache.structure_guard_mutex);
- return;
+ DBUG_VOID_RETURN;
}
Query_cache_block *query_block= (Query_cache_block*)net->query_cache_query;
@@ -667,11 +696,11 @@ void query_cache_insert(NET *net, const char *packet, ulong length)
DBUG_VOID_RETURN;
}
+ BLOCK_LOCK_WR(query_block);
Query_cache_query *header= query_block->query();
Query_cache_block *result= header->result();
DUMP(&query_cache);
- BLOCK_LOCK_WR(query_block);
DBUG_PRINT("qcache", ("insert packet %lu bytes long",length));
/*
@@ -687,6 +716,7 @@ void query_cache_insert(NET *net, const char *packet, ulong length)
DBUG_PRINT("qcache", ("free query 0x%lx", (ulong) query_block));
// The following call will remove the lock on query_block
query_cache.free_query(query_block);
+ query_cache.refused++;
// append_result_data no success => we need unlock
STRUCT_UNLOCK(&query_cache.structure_guard_mutex);
DBUG_VOID_RETURN;
@@ -704,6 +734,7 @@ void query_cache_insert(NET *net, const char *packet, ulong length)
void query_cache_abort(NET *net)
{
DBUG_ENTER("query_cache_abort");
+ THD *thd= current_thd;
/* See the comment on double-check locking usage above. */
if (net->query_cache_query == 0)
@@ -726,6 +757,7 @@ void query_cache_abort(NET *net)
net->query_cache_query);
if (query_block)
{
+ thd_proc_info(thd, "storing result in query cache");
DUMP(&query_cache);
BLOCK_LOCK_WR(query_block);
// The following call will remove the lock on query_block
@@ -778,6 +810,7 @@ void query_cache_end_of_result(THD *thd)
suitable size if needed and setting block type. Since this is the last
block, the writer should be dropped.
*/
+ thd_proc_info(thd, "storing result in query cache");
DUMP(&query_cache);
BLOCK_LOCK_WR(query_block);
Query_cache_query *header= query_block->query();
@@ -883,6 +916,31 @@ ulong Query_cache::resize(ulong query_cache_size_arg)
m_cache_status= Query_cache::FLUSH_IN_PROGRESS;
STRUCT_UNLOCK(&structure_guard_mutex);
+ /*
+ Wait for all readers and writers to exit. When the list of all queries
+ is iterated over with a block level lock, we are done.
+ */
+ Query_cache_block *block= queries_blocks;
+ if (block)
+ {
+ do
+ {
+ BLOCK_LOCK_WR(block);
+ Query_cache_query *query= block->query();
+ if (query && query->writer())
+ {
+ /*
+ Drop the writer; this will cancel any attempts to store
+ the processed statement associated with this writer.
+ */
+ query->writer()->query_cache_query= 0;
+ query->writer(0);
+ refused++;
+ }
+ BLOCK_UNLOCK_WR(block);
+ block= block->next;
+ } while (block != queries_blocks);
+ }
free_cache();
query_cache_size= query_cache_size_arg;
@@ -1201,6 +1259,8 @@ Query_cache::send_result_to_client(THD *thd, char *sql, uint query_length)
DBUG_PRINT("qcache", ("No active database"));
}
+ thd_proc_info(thd, "checking query cache for query");
+
// fill all gaps between fields with 0 to get repeatable key
bzero(&flags, QUERY_CACHE_FLAGS_SIZE);
flags.client_long_flag= test(thd->client_capabilities & CLIENT_LONG_FLAG);
@@ -1283,6 +1343,7 @@ def_week_frmt: %lu",
}
// Check access;
+ thd_proc_info(thd, "checking privileges on cached query");
block_table= query_block->table(0);
block_table_end= block_table+query_block->n_tables;
for (; block_table != block_table_end; block_table++)
@@ -1377,6 +1438,7 @@ def_week_frmt: %lu",
Send cached result to client
*/
#ifndef EMBEDDED_LIBRARY
+ thd_proc_info(thd, "sending cached result to client");
do
{
DBUG_PRINT("qcache", ("Results (len: %lu used: %lu headers: %lu)",
@@ -1403,6 +1465,7 @@ def_week_frmt: %lu",
thd->limit_found_rows = query->found_rows();
thd->status_var.last_query_cost= 0.0;
+ thd->main_da.disable_status();
BLOCK_UNLOCK_RD(query_block);
DBUG_RETURN(1); // Result sent to client
@@ -1452,6 +1515,7 @@ void Query_cache::invalidate(CHANGED_TABLE_LIST *tables_used)
THD *thd= current_thd;
for (; tables_used; tables_used= tables_used->next)
{
+ thd_proc_info(thd, "invalidating query cache entries (table list)");
invalidate_table(thd, (uchar*) tables_used->key, tables_used->key_length);
DBUG_PRINT("qcache", ("db: %s table: %s", tables_used->key,
tables_used->key+
@@ -1473,9 +1537,11 @@ void Query_cache::invalidate(CHANGED_TABLE_LIST *tables_used)
*/
void Query_cache::invalidate_locked_for_write(TABLE_LIST *tables_used)
{
+ THD *thd= current_thd;
DBUG_ENTER("Query_cache::invalidate_locked_for_write");
for (; tables_used; tables_used= tables_used->next_local)
{
+ thd_proc_info(thd, "invalidating query cache entries (table)");
if (tables_used->lock_type & (TL_WRITE_LOW_PRIORITY | TL_WRITE) &&
tables_used->table)
{
@@ -1524,7 +1590,7 @@ void Query_cache::invalidate(THD *thd, const char *key, uint32 key_length,
/**
- @brief Synchronize the thread with any flushing operations.
+ Synchronize the thread with any flushing operations.
This helper function is called whenever a thread needs to operate on the
query cache structure (example: during invalidation). If a table flush is in
@@ -1565,7 +1631,7 @@ void Query_cache::wait_while_table_flush_is_in_progress(bool *interrupt)
/**
- @brief Remove all cached queries that uses the given database
+ Remove all cached queries that uses the given database.
*/
void Query_cache::invalidate(char *db)
@@ -1675,8 +1741,8 @@ void Query_cache::flush()
/**
- @brief Rearrange the memory blocks and join result in cache in 1 block (if
- result length > join_limit)
+ Rearrange the memory blocks and join result in cache in 1 block (if
+ result length > join_limit)
@param[in] join_limit If the minimum length of a result block to be joined.
@param[in] iteration_limit The maximum number of packing and joining
@@ -1946,7 +2012,7 @@ void Query_cache::make_disabled()
/**
@class Query_cache
- @brief Free all resources allocated by the cache.
+ Free all resources allocated by the cache.
This function frees all resources allocated by the cache. You
have to call init_cache() before using the cache again. This function
@@ -1970,7 +2036,7 @@ void Query_cache::free_cache()
/**
- @brief Flush the cache.
+ Flush the cache.
This function will flush cache contents. It assumes we have
'structure_guard_mutex' locked. The function sets the m_cache_status flag and
@@ -2516,7 +2582,7 @@ Query_cache::invalidate_table_internal(THD *thd, uchar *key, uint32 key_length)
}
/**
- @brief Invalidate a linked list of query cache blocks.
+ Invalidate a linked list of query cache blocks.
Each block tries to aquire a block level lock before
free_query is a called. This function will in turn affect
@@ -2684,7 +2750,7 @@ my_bool Query_cache::register_all_tables(Query_cache_block *block,
/**
- @brief Insert used table name into the cache.
+ Insert used table name into the cache.
@return Error status
@retval FALSE On error
@@ -3413,8 +3479,8 @@ my_bool Query_cache::ask_handler_allowance(THD *thd,
/**
- @brief Rearrange all memory blocks so that free memory joins at the
- 'bottom' of the allocated memory block containing all cache data.
+ Rearrange all memory blocks so that free memory joins at the
+ 'bottom' of the allocated memory block containing all cache data.
@see Query_cache::pack(ulong join_limit, uint iteration_limit)
*/
@@ -4028,7 +4094,7 @@ void Query_cache::tables_dump()
/**
- @brief Checks integrity of the various linked lists
+ Checks integrity of the various linked lists
@return Error status code
@retval FALSE Query cache is operational.
diff --git a/sql/sql_cache.h b/sql/sql_cache.h
index b47e2e9a43b..f2c33eff614 100644
--- a/sql/sql_cache.h
+++ b/sql/sql_cache.h
@@ -66,8 +66,8 @@ struct Query_cache_result;
class Query_cache;
/**
- @brief This class represents a node in the linked chain of queries
- belonging to one table.
+ This class represents a node in the linked chain of queries
+ belonging to one table.
@note The root of this linked list is not a query-type block, but the table-
type block which all queries has in common.
diff --git a/sql/sql_class.cc b/sql/sql_class.cc
index ffbf0649961..75376c53f68 100644
--- a/sql/sql_class.cc
+++ b/sql/sql_class.cc
@@ -247,9 +247,16 @@ int thd_tablespace_op(const THD *thd)
extern "C"
-const char *thd_proc_info(THD *thd, const char *info)
+const char *set_thd_proc_info(THD *thd, const char *info,
+ const char *calling_function,
+ const char *calling_file,
+ const unsigned int calling_line)
{
const char *old_info= thd->proc_info;
+ DBUG_PRINT("proc_info", ("%s:%d %s", calling_file, calling_line, info));
+#if defined(ENABLED_PROFILING) && defined(COMMUNITY_SERVER)
+ thd->profiling.status_change(info, calling_function, calling_file, calling_line);
+#endif
thd->proc_info= info;
return old_info;
}
@@ -351,6 +358,124 @@ char *thd_security_context(THD *thd, char *buffer, unsigned int length,
return thd->strmake(str.ptr(), str.length());
}
+/**
+ Clear this diagnostics area.
+
+ Normally called at the end of a statement.
+*/
+
+void
+Diagnostics_area::reset_diagnostics_area()
+{
+#ifdef DBUG_OFF
+ can_overwrite_status= FALSE;
+ /** Don't take chances in production */
+ m_message[0]= '\0';
+ m_sql_errno= 0;
+ m_server_status= 0;
+ m_affected_rows= 0;
+ m_last_insert_id= 0;
+ m_total_warn_count= 0;
+#endif
+ is_sent= FALSE;
+ /** Tiny reset in debug mode to see garbage right away */
+ m_status= DA_EMPTY;
+}
+
+
+/**
+ Set OK status -- ends commands that do not return a
+ result set, e.g. INSERT/UPDATE/DELETE.
+*/
+
+void
+Diagnostics_area::set_ok_status(THD *thd, ha_rows affected_rows_arg,
+ ulonglong last_insert_id_arg,
+ const char *message_arg)
+{
+ DBUG_ASSERT(! is_set());
+#ifdef DBUG_OFF
+ /* In production, refuse to overwrite an error with an OK packet. */
+ if (is_error())
+ return;
+#endif
+ /** Only allowed to report success if has not yet reported an error */
+
+ m_server_status= thd->server_status;
+ m_total_warn_count= thd->total_warn_count;
+ m_affected_rows= affected_rows_arg;
+ m_last_insert_id= last_insert_id_arg;
+ if (message_arg)
+ strmake(m_message, message_arg, sizeof(m_message));
+ else
+ m_message[0]= '\0';
+ m_status= DA_OK;
+}
+
+
+/**
+ Set EOF status.
+*/
+
+void
+Diagnostics_area::set_eof_status(THD *thd)
+{
+ /** Only allowed to report eof if has not yet reported an error */
+
+ DBUG_ASSERT(! is_set());
+#ifdef DBUG_OFF
+ /* In production, refuse to overwrite an error with an EOF packet. */
+ if (is_error())
+ return;
+#endif
+
+ m_server_status= thd->server_status;
+ /*
+ If inside a stored procedure, do not return the total
+ number of warnings, since they are not available to the client
+ anyway.
+ */
+ m_total_warn_count= thd->spcont ? 0 : thd->total_warn_count;
+
+ m_status= DA_EOF;
+}
+
+/**
+ Set ERROR status.
+*/
+
+void
+Diagnostics_area::set_error_status(THD *thd, uint sql_errno_arg,
+ const char *message_arg)
+{
+ /*
+ Only allowed to report error if has not yet reported a success
+ The only exception is when we flush the message to the client,
+ an error can happen during the flush.
+ */
+ DBUG_ASSERT(! is_set() || can_overwrite_status);
+
+ m_sql_errno= sql_errno_arg;
+ strmake(m_message, message_arg, sizeof(m_message));
+
+ m_status= DA_ERROR;
+}
+
+
+/**
+ Mark the diagnostics area as 'DISABLED'.
+
+ This is used in rare cases when the COM_ command at hand sends a response
+ in a custom format. One example is the query cache, another is
+ COM_STMT_PREPARE.
+*/
+
+void
+Diagnostics_area::disable_status()
+{
+ DBUG_ASSERT(! is_set());
+ m_status= DA_DISABLED;
+}
THD::THD()
@@ -395,7 +520,7 @@ THD::THD()
count_cuted_fields= CHECK_FIELD_IGNORE;
killed= NOT_KILLED;
col_access=0;
- query_error= thread_specific_used= FALSE;
+ is_slave_error= thread_specific_used= FALSE;
hash_clear(&handler_tables_hash);
tmp_table=0;
used_tables=0;
@@ -431,7 +556,6 @@ THD::THD()
net.vio=0;
#endif
client_capabilities= 0; // minimalistic client
- net.last_error[0]=0; // If error on boot
#ifdef HAVE_QUERY_CACHE
query_cache_init_query(&net); // If error on boot
#endif
@@ -456,6 +580,9 @@ THD::THD()
init();
/* Initialize sub structures */
init_sql_alloc(&warn_root, WARN_ALLOC_BLOCK_SIZE, WARN_ALLOC_PREALLOC_SIZE);
+#if defined(ENABLED_PROFILING) && defined(COMMUNITY_SERVER)
+ profiling.set_thd(this);
+#endif
user_connect=(USER_CONN *)0;
hash_init(&user_vars, system_charset_info, USER_VARS_HASH_SIZE, 0, 0,
(hash_get_key) get_var_key,
@@ -498,12 +625,12 @@ void THD::push_internal_handler(Internal_error_handler *handler)
}
-bool THD::handle_error(uint sql_errno,
+bool THD::handle_error(uint sql_errno, const char *message,
MYSQL_ERROR::enum_warning_level level)
{
if (m_internal_handler)
{
- return m_internal_handler->handle_error(sql_errno, level, this);
+ return m_internal_handler->handle_error(sql_errno, message, level, this);
}
return FALSE; // 'FALSE', as per coding style
@@ -678,9 +805,7 @@ void THD::cleanup(void)
lock=locked_tables; locked_tables=0;
close_thread_tables(this);
}
- mysql_ha_flush(this, (TABLE_LIST*) 0,
- MYSQL_HA_CLOSE_FINAL | MYSQL_HA_FLUSH_ALL, FALSE);
- hash_free(&handler_tables_hash);
+ mysql_ha_cleanup(this);
delete_dynamic(&user_var_events);
hash_free(&user_vars);
close_temporary_tables(this);
@@ -818,7 +943,20 @@ void THD::awake(THD::killed_state state_to_set)
if (!slave_thread)
thread_scheduler.post_kill_notification(this);
#ifdef SIGNAL_WITH_VIO_CLOSE
- close_active_vio();
+ if (this != current_thd)
+ {
+ /*
+ In addition to a signal, let's close the socket of the thread that
+ is being killed. This is to make sure it does not block if the
+ signal is lost. This needs to be done only on platforms where
+ signals are not a reliable interruption mechanism.
+
+ If we're killing ourselves, we know that we're not blocked, so this
+ hack is not used.
+ */
+
+ close_active_vio();
+ }
#endif
}
if (mysys_var)
@@ -941,7 +1079,7 @@ void THD::cleanup_after_query()
/**
- Create a LEX_STRING in this connection
+ Create a LEX_STRING in this connection.
@param lex_str pointer to LEX_STRING object to be initialized
@param str initializer to be copied into lex_str
@@ -1305,32 +1443,44 @@ bool select_send::send_fields(List<Item> &list, uint flags)
{
bool res;
if (!(res= thd->protocol->send_fields(&list, flags)))
- status= 1;
+ is_result_set_started= 1;
return res;
}
void select_send::abort()
{
DBUG_ENTER("select_send::abort");
- if (status && thd->spcont &&
- thd->spcont->find_handler(thd, thd->net.last_errno,
+ if (is_result_set_started && thd->spcont &&
+ thd->spcont->find_handler(thd, thd->main_da.sql_errno(),
MYSQL_ERROR::WARN_LEVEL_ERROR))
{
/*
- Executing stored procedure without a handler.
- Here we should actually send an error to the client,
- but as an error will break a multiple result set, the only thing we
- can do for now is to nicely end the current data set and remembering
- the error so that the calling routine will abort
+ We're executing a stored procedure, have an open result
+ set, an SQL exception condition and a handler for it.
+ In this situation we must abort the current statement,
+ silence the error and start executing the continue/exit
+ handler.
+ Before aborting the statement, let's end the open result set, as
+ otherwise the client will hang due to the violation of the
+ client/server protocol.
*/
- thd->net.report_error= 0;
- send_eof();
- thd->net.report_error= 1; // Abort SP
+ thd->protocol->end_partial_result_set(thd);
}
DBUG_VOID_RETURN;
}
+/**
+ Cleanup an instance of this class for re-use
+ at next execution of a prepared statement/
+ stored procedure statement.
+*/
+
+void select_send::cleanup()
+{
+ is_result_set_started= FALSE;
+}
+
/* Send data to client. Returns 0 if ok */
bool select_send::send_data(List<Item> &items)
@@ -1366,12 +1516,14 @@ bool select_send::send_data(List<Item> &items)
}
}
thd->sent_row_count++;
- if (!thd->vio_ok())
- DBUG_RETURN(0);
- if (!thd->net.report_error)
+ if (thd->is_error())
+ {
+ protocol->remove_last_row();
+ DBUG_RETURN(1);
+ }
+ if (thd->vio_ok())
DBUG_RETURN(protocol->write());
- protocol->remove_last_row();
- DBUG_RETURN(1);
+ DBUG_RETURN(0);
}
bool select_send::send_eof()
@@ -1389,14 +1541,9 @@ bool select_send::send_eof()
mysql_unlock_tables(thd, thd->lock);
thd->lock=0;
}
- if (!thd->net.report_error)
- {
- ::send_eof(thd);
- status= 0;
- return 0;
- }
- else
- return 1;
+ ::send_eof(thd);
+ is_result_set_started= 0;
+ return FALSE;
}
@@ -1540,6 +1687,7 @@ int
select_export::prepare(List<Item> &list, SELECT_LEX_UNIT *u)
{
bool blob_flag=0;
+ bool string_results= FALSE, non_string_results= FALSE;
unit= u;
if ((uint) strlen(exchange->file_name) + NAME_LEN >= FN_REFLEN)
strmake(path,exchange->file_name,FN_REFLEN-1);
@@ -1557,30 +1705,50 @@ select_export::prepare(List<Item> &list, SELECT_LEX_UNIT *u)
blob_flag=1;
break;
}
+ if (item->result_type() == STRING_RESULT)
+ string_results= TRUE;
+ else
+ non_string_results= TRUE;
}
}
field_term_length=exchange->field_term->length();
+ field_term_char= field_term_length ?
+ (int) (uchar) (*exchange->field_term)[0] : INT_MAX;
if (!exchange->line_term->length())
exchange->line_term=exchange->field_term; // Use this if it exists
- field_sep_char= (exchange->enclosed->length() ? (*exchange->enclosed)[0] :
- field_term_length ? (*exchange->field_term)[0] : INT_MAX);
- escape_char= (exchange->escaped->length() ? (*exchange->escaped)[0] : -1);
+ field_sep_char= (exchange->enclosed->length() ?
+ (int) (uchar) (*exchange->enclosed)[0] : field_term_char);
+ escape_char= (exchange->escaped->length() ?
+ (int) (uchar) (*exchange->escaped)[0] : -1);
is_ambiguous_field_sep= test(strchr(ESCAPE_CHARS, field_sep_char));
is_unsafe_field_sep= test(strchr(NUMERIC_CHARS, field_sep_char));
line_sep_char= (exchange->line_term->length() ?
- (*exchange->line_term)[0] : INT_MAX);
+ (int) (uchar) (*exchange->line_term)[0] : INT_MAX);
if (!field_term_length)
exchange->opt_enclosed=0;
if (!exchange->enclosed->length())
exchange->opt_enclosed=1; // A little quicker loop
fixed_row_size= (!field_term_length && !exchange->enclosed->length() &&
!blob_flag);
+ if ((is_ambiguous_field_sep && exchange->enclosed->is_empty() &&
+ (string_results || is_unsafe_field_sep)) ||
+ (exchange->opt_enclosed && non_string_results &&
+ field_term_length && strchr(NUMERIC_CHARS, field_term_char)))
+ {
+ push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
+ ER_AMBIGUOUS_FIELD_TERM, ER(ER_AMBIGUOUS_FIELD_TERM));
+ is_ambiguous_field_term= TRUE;
+ }
+ else
+ is_ambiguous_field_term= FALSE;
+
return 0;
}
#define NEED_ESCAPING(x) ((int) (uchar) (x) == escape_char || \
- (int) (uchar) (x) == field_sep_char || \
+ (enclosed ? (int) (uchar) (x) == field_sep_char \
+ : (int) (uchar) (x) == field_term_char) || \
(int) (uchar) (x) == line_sep_char || \
!(x))
@@ -1609,8 +1777,10 @@ bool select_export::send_data(List<Item> &items)
while ((item=li++))
{
Item_result result_type=item->result_type();
+ bool enclosed = (exchange->enclosed->length() &&
+ (!exchange->opt_enclosed || result_type == STRING_RESULT));
res=item->str_result(&tmp);
- if (res && (!exchange->opt_enclosed || result_type == STRING_RESULT))
+ if (res && enclosed)
{
if (my_b_write(&cache,(uchar*) exchange->enclosed->ptr(),
exchange->enclosed->length()))
@@ -1701,14 +1871,20 @@ bool select_export::send_data(List<Item> &items)
DBUG_ASSERT before the loop makes that sure.
*/
- if (NEED_ESCAPING(*pos) ||
- (check_second_byte &&
- my_mbcharlen(character_set_client, (uchar) *pos) == 2 &&
- pos + 1 < end &&
- NEED_ESCAPING(pos[1])))
+ if ((NEED_ESCAPING(*pos) ||
+ (check_second_byte &&
+ my_mbcharlen(character_set_client, (uchar) *pos) == 2 &&
+ pos + 1 < end &&
+ NEED_ESCAPING(pos[1]))) &&
+ /*
+ Don't escape field_term_char by doubling - doubling is only
+ valid for ENCLOSED BY characters:
+ */
+ (enclosed || !is_ambiguous_field_term ||
+ (int) (uchar) *pos != field_term_char))
{
char tmp_buff[2];
- tmp_buff[0]= ((int) *pos == field_sep_char &&
+ tmp_buff[0]= ((int) (uchar) *pos == field_sep_char &&
is_ambiguous_field_sep) ?
field_sep_char : escape_char;
tmp_buff[1]= *pos ? *pos : '0';
@@ -1744,7 +1920,7 @@ bool select_export::send_data(List<Item> &items)
goto err;
}
}
- if (res && (!exchange->opt_enclosed || result_type == STRING_RESULT))
+ if (res && enclosed)
{
if (my_b_write(&cache, (uchar*) exchange->enclosed->ptr(),
exchange->enclosed->length()))
@@ -1873,7 +2049,7 @@ bool select_max_min_finder_subselect::send_data(List<Item> &items)
{
if (!cache)
{
- cache= Item_cache::get_cache(val_item->result_type());
+ cache= Item_cache::get_cache(val_item);
switch (val_item->result_type())
{
case REAL_RESULT:
@@ -2404,6 +2580,7 @@ void Security_context::init()
host= user= priv_user= ip= 0;
host_or_ip= "connecting host";
priv_host[0]= '\0';
+ master_access= 0;
#ifndef NO_EMBEDDED_ACCESS_CHECKS
db_access= NO_ACCESS;
#endif
@@ -2649,7 +2826,6 @@ void THD::reset_sub_statement_state(Sub_statement_state *backup,
{
backup->options= options;
backup->in_sub_stmt= in_sub_stmt;
- backup->no_send_ok= net.no_send_ok;
backup->enable_slow_log= enable_slow_log;
backup->limit_found_rows= limit_found_rows;
backup->examined_row_count= examined_row_count;
@@ -2680,9 +2856,6 @@ void THD::reset_sub_statement_state(Sub_statement_state *backup,
cuted_fields= 0;
transaction.savepoints= 0;
first_successful_insert_id_in_cur_stmt= 0;
-
- /* Surpress OK packets in case if we will execute statements */
- net.no_send_ok= TRUE;
}
@@ -2705,7 +2878,6 @@ void THD::restore_sub_statement_state(Sub_statement_state *backup)
transaction.savepoints= backup->savepoints;
options= backup->options;
in_sub_stmt= backup->in_sub_stmt;
- net.no_send_ok= backup->no_send_ok;
enable_slow_log= backup->enable_slow_log;
first_successful_insert_id_in_prev_stmt=
backup->first_successful_insert_id_in_prev_stmt;
diff --git a/sql/sql_class.h b/sql/sql_class.h
index 97a63ed9448..5f2b50f48b8 100644
--- a/sql/sql_class.h
+++ b/sql/sql_class.h
@@ -38,6 +38,9 @@ enum enum_ha_read_modes { RFIRST, RNEXT, RPREV, RLAST, RKEY, RNEXT_SAME };
enum enum_duplicates { DUP_ERROR, DUP_REPLACE, DUP_UPDATE };
enum enum_delay_key_write { DELAY_KEY_WRITE_NONE, DELAY_KEY_WRITE_ON,
DELAY_KEY_WRITE_ALL };
+enum enum_slave_exec_mode { SLAVE_EXEC_MODE_STRICT,
+ SLAVE_EXEC_MODE_IDEMPOTENT,
+ SLAVE_EXEC_MODE_LAST_BIT};
enum enum_mark_columns
{ MARK_COLUMNS_NONE, MARK_COLUMNS_READ, MARK_COLUMNS_WRITE};
@@ -77,10 +80,10 @@ typedef struct st_user_var_events
was actually changed or not.
*/
typedef struct st_copy_info {
- ha_rows records; /* Number of processed records */
- ha_rows deleted; /* Number of deleted records */
- ha_rows updated; /* Number of updated records */
- ha_rows copied; /* Number of copied records */
+ ha_rows records; /**< Number of processed records */
+ ha_rows deleted; /**< Number of deleted records */
+ ha_rows updated; /**< Number of updated records */
+ ha_rows copied; /**< Number of copied records */
ha_rows error_count;
ha_rows touched; /* Number of touched records */
enum enum_duplicates handle_duplicates;
@@ -274,6 +277,7 @@ struct system_variables
ulong optimizer_prune_level;
ulong optimizer_search_depth;
ulong preload_buff_size;
+ ulong profiling_history_size;
ulong query_cache_type;
ulong read_buff_size;
ulong read_rnd_buff_size;
@@ -913,7 +917,6 @@ public:
uint in_sub_stmt;
bool enable_slow_log;
bool last_insert_id_used;
- my_bool no_send_ok;
SAVEPOINT *savepoints;
};
@@ -969,12 +972,130 @@ public:
@return true if the error is handled
*/
virtual bool handle_error(uint sql_errno,
+ const char *message,
MYSQL_ERROR::enum_warning_level level,
THD *thd) = 0;
};
/**
+ Stores status of the currently executed statement.
+ Cleared at the beginning of the statement, and then
+ can hold either OK, ERROR, or EOF status.
+ Can not be assigned twice per statement.
+*/
+
+class Diagnostics_area
+{
+public:
+ enum enum_diagnostics_status
+ {
+ /** The area is cleared at start of a statement. */
+ DA_EMPTY= 0,
+ /** Set whenever one calls send_ok(). */
+ DA_OK,
+ /** Set whenever one calls send_eof(). */
+ DA_EOF,
+ /** Set whenever one calls my_error() or my_message(). */
+ DA_ERROR,
+ /** Set in case of a custom response, such as one from COM_STMT_PREPARE. */
+ DA_DISABLED
+ };
+ /** True if status information is sent to the client. */
+ bool is_sent;
+ /** Set to make set_error_status after set_{ok,eof}_status possible. */
+ bool can_overwrite_status;
+
+ void set_ok_status(THD *thd, ha_rows affected_rows_arg,
+ ulonglong last_insert_id_arg,
+ const char *message);
+ void set_eof_status(THD *thd);
+ void set_error_status(THD *thd, uint sql_errno_arg, const char *message_arg);
+
+ void disable_status();
+
+ void reset_diagnostics_area();
+
+ bool is_set() const { return m_status != DA_EMPTY; }
+ bool is_error() const { return m_status == DA_ERROR; }
+ bool is_eof() const { return m_status == DA_EOF; }
+ bool is_ok() const { return m_status == DA_OK; }
+ bool is_disabled() const { return m_status == DA_DISABLED; }
+ enum_diagnostics_status status() const { return m_status; }
+
+ const char *message() const
+ { DBUG_ASSERT(m_status == DA_ERROR || m_status == DA_OK); return m_message; }
+
+ uint sql_errno() const
+ { DBUG_ASSERT(m_status == DA_ERROR); return m_sql_errno; }
+
+ uint server_status() const
+ {
+ DBUG_ASSERT(m_status == DA_OK || m_status == DA_EOF);
+ return m_server_status;
+ }
+
+ ha_rows affected_rows() const
+ { DBUG_ASSERT(m_status == DA_OK); return m_affected_rows; }
+
+ ulonglong last_insert_id() const
+ { DBUG_ASSERT(m_status == DA_OK); return m_last_insert_id; }
+
+ uint total_warn_count() const
+ {
+ DBUG_ASSERT(m_status == DA_OK || m_status == DA_EOF);
+ return m_total_warn_count;
+ }
+
+ Diagnostics_area() { reset_diagnostics_area(); }
+
+private:
+ /** Message buffer. Can be used by OK or ERROR status. */
+ char m_message[MYSQL_ERRMSG_SIZE];
+ /**
+ SQL error number. One of ER_ codes from share/errmsg.txt.
+ Set by set_error_status.
+ */
+ uint m_sql_errno;
+
+ /**
+ Copied from thd->server_status when the diagnostics area is assigned.
+ We need this member as some places in the code use the following pattern:
+ thd->server_status|= ...
+ send_eof(thd);
+ thd->server_status&= ~...
+ Assigned by OK, EOF or ERROR.
+ */
+ uint m_server_status;
+ /**
+ The number of rows affected by the last statement. This is
+ semantically close to thd->row_count_func, but has a different
+ life cycle. thd->row_count_func stores the value returned by
+ function ROW_COUNT() and is cleared only by statements that
+ update its value, such as INSERT, UPDATE, DELETE and few others.
+ This member is cleared at the beginning of the next statement.
+
+ We could possibly merge the two, but life cycle of thd->row_count_func
+ can not be changed.
+ */
+ ha_rows m_affected_rows;
+ /**
+ Similarly to the previous member, this is a replacement of
+ thd->first_successful_insert_id_in_prev_stmt, which is used
+ to implement LAST_INSERT_ID().
+ */
+ ulonglong m_last_insert_id;
+ /** The total number of warnings. */
+ uint m_total_warn_count;
+ enum_diagnostics_status m_status;
+ /**
+ @todo: the following THD members belong here:
+ - warn_list, warn_count,
+ */
+};
+
+
+/**
@class THD
For each client connection we create a separate thread with THD serving as
a thread/connection descriptor
@@ -1045,14 +1166,17 @@ public:
*/
char *catalog;
- /*
- WARNING: some members of THD (currently 'Statement::db',
+ /**
+ @note
+ 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.
+
+ @see handle_slave_sql
*/
Security_context main_security_ctx;
@@ -1062,6 +1186,9 @@ public:
Points to info-string that we show in SHOW PROCESSLIST
You are supposed to update thd->proc_info only if you have coded
a time-consuming piece that MySQL can get stuck in for a long time.
+
+ Set it using the thd_proc_info(THD *thread, const char *message)
+ macro/function.
*/
const char *proc_info;
@@ -1171,8 +1298,6 @@ public:
THD_TRANS all; // Trans since BEGIN WORK
THD_TRANS stmt; // Trans for current statement
bool on; // see ha_enable_transaction()
- XID xid; // transaction identifier
- enum xa_states xa_state; // used by external XA only
XID_STATE xid_state;
Rows_log_event *m_pending_rows_event;
@@ -1263,14 +1388,16 @@ public:
We follow this logic:
- when stmt starts, first_successful_insert_id_in_prev_stmt contains the
first insert id successfully inserted by the previous stmt.
- - as stmt makes progress, handler::insert_id_for_cur_row changes; every
- time get_auto_increment() is called, auto_inc_intervals_for_binlog is
- augmented with the reserved interval (if statement-based binlogging).
+ - as stmt makes progress, handler::insert_id_for_cur_row changes;
+ every time get_auto_increment() is called,
+ auto_inc_intervals_in_cur_stmt_for_binlog is augmented with the
+ reserved interval (if statement-based binlogging).
- at first successful insertion of an autogenerated value,
first_successful_insert_id_in_cur_stmt is set to
handler::insert_id_for_cur_row.
- - when stmt goes to binlog, auto_inc_intervals_for_binlog is
- binlogged if non-empty.
+ - when stmt goes to binlog,
+ auto_inc_intervals_in_cur_stmt_for_binlog is binlogged if
+ non-empty.
- when stmt ends, first_successful_insert_id_in_prev_stmt is set to
first_successful_insert_id_in_cur_stmt.
*/
@@ -1365,9 +1492,20 @@ public:
ulonglong limit_found_rows;
ulonglong options; /* Bitmap of states */
- longlong row_count_func; /* For the ROW_COUNT() function */
- ha_rows cuted_fields,
- sent_row_count, examined_row_count;
+ longlong row_count_func; /* For the ROW_COUNT() function */
+ ha_rows cuted_fields;
+
+ /*
+ number of rows we actually sent to the client, including "synthetic"
+ rows in ROLLUP etc.
+ */
+ ha_rows sent_row_count;
+
+ /*
+ number of rows we read, sent or not, including in create_sort_index()
+ */
+ ha_rows examined_row_count;
+
/*
The set of those tables whose fields are referenced in all subqueries
of the query.
@@ -1386,6 +1524,11 @@ public:
List <MYSQL_ERROR> warn_list;
uint warn_count[(uint) MYSQL_ERROR::WARN_LEVEL_END];
uint total_warn_count;
+ Diagnostics_area main_da;
+#if defined(ENABLED_PROFILING) && defined(COMMUNITY_SERVER)
+ PROFILING profiling;
+#endif
+
/*
Id of current query. Statement can be reused to execute several queries
query_id is global in context of the whole MySQL server.
@@ -1403,7 +1546,11 @@ public:
/* Statement id is thread-wide. This counter is used to generate ids */
ulong statement_id_counter;
ulong rand_saved_seed1, rand_saved_seed2;
- ulong row_count; // Row counter, mainly for errors and warnings
+ /*
+ Row counter, mainly for errors and warnings. Not increased in
+ create_sort_index(); may differ from examined_row_count.
+ */
+ ulong row_count;
pthread_t real_id; /* For debugging */
my_thread_id thread_id;
uint tmp_table, global_read_lock;
@@ -1466,7 +1613,14 @@ public:
/* for IS NULL => = last_insert_id() fix in remove_eq_conds() */
bool substitute_null_with_insert_id;
bool in_lock_tables;
- bool query_error, bootstrap, cleanup_done;
+ /**
+ True if a slave error. Causes the slave to stop. Not the same
+ as the statement execution error (is_error()), since
+ a statement may be expected to return an error, e.g. because
+ it returned an error on master, and this is OK on the slave.
+ */
+ bool is_slave_error;
+ bool bootstrap, cleanup_done;
/** is set if some thread specific value(s) used in a statement. */
bool thread_specific_used;
@@ -1689,13 +1843,19 @@ public:
CHANGED_TABLE_LIST * changed_table_dup(const char *key, long key_length);
int send_explain_fields(select_result *result);
#ifndef EMBEDDED_LIBRARY
+ /**
+ Clear the current error, if any.
+ We do not clear is_fatal_error or is_fatal_sub_stmt_error since we
+ assume this is never called if the fatal error is set.
+ @todo: To silence an error, one should use Internal_error_handler
+ mechanism. In future this function will be removed.
+ */
inline void clear_error()
{
DBUG_ENTER("clear_error");
- net.last_error[0]= 0;
- net.last_errno= 0;
- net.report_error= 0;
- query_error= 0;
+ if (main_da.is_error())
+ main_da.reset_diagnostics_area();
+ is_slave_error= 0;
DBUG_VOID_RETURN;
}
inline bool vio_ok() const { return net.vio != 0; }
@@ -1703,12 +1863,30 @@ public:
void clear_error();
inline bool vio_ok() const { return true; }
#endif
+ /**
+ Mark the current error as fatal. Warning: this does not
+ set any error, it sets a property of the error, so must be
+ followed or prefixed with my_error().
+ */
inline void fatal_error()
{
is_fatal_error= 1;
- net.report_error= 1;
DBUG_PRINT("error",("Fatal error set"));
}
+ /**
+ TRUE if there is an error in the error stack.
+
+ Please use this method instead of direct access to
+ net.report_error.
+
+ If TRUE, the current (sub)-statement should be aborted.
+ The main difference between this member and is_fatal_error
+ is that a fatal error can not be handled by a stored
+ procedure continue handler, whereas a normal error can.
+
+ To raise this flag, use my_error().
+ */
+ inline bool is_error() const { return main_da.is_error(); }
inline CHARSET_INFO *charset() { return variables.character_set_client; }
void update_charset();
@@ -1902,7 +2080,7 @@ public:
@param level the error level
@return true if the error is handled
*/
- virtual bool handle_error(uint sql_errno,
+ virtual bool handle_error(uint sql_errno, const char *message,
MYSQL_ERROR::enum_warning_level level);
/**
@@ -1932,6 +2110,24 @@ private:
};
+/** A short cut for thd->main_da.set_ok_status(). */
+
+inline void
+send_ok(THD *thd, ha_rows affected_rows= 0, ulonglong id= 0,
+ const char *message= NULL)
+{
+ thd->main_da.set_ok_status(thd, affected_rows, id, message);
+}
+
+
+/** A short cut for thd->main_da.set_eof_status(). */
+
+inline void
+send_eof(THD *thd)
+{
+ thd->main_da.set_eof_status(thd);
+}
+
#define tmp_disable_binlog(A) \
{ulonglong tmp_disable_binlog__save_options= (A)->options; \
(A)->options&= ~OPTION_BIN_LOG
@@ -2029,14 +2225,20 @@ public:
class select_send :public select_result {
- int status;
+ /**
+ True if we have sent result set metadata to the client.
+ In this case the client always expects us to end the result
+ set with an eof or error packet
+ */
+ bool is_result_set_started;
public:
- select_send() :status(0) {}
+ select_send() :is_result_set_started(FALSE) {}
bool send_fields(List<Item> &list, uint flags);
bool send_data(List<Item> &items);
bool send_eof();
virtual bool check_simple_select() const { return FALSE; }
void abort();
+ virtual void cleanup();
};
@@ -2070,6 +2272,7 @@ public:
class select_export :public select_to_file {
uint field_term_length;
int field_sep_char,escape_char,line_sep_char;
+ int field_term_char; // first char of FIELDS TERMINATED BY or MAX_INT
/*
The is_ambiguous_field_sep field is true if a value of the field_sep_char
field is one of the 'n', 't', 'r' etc characters
@@ -2077,6 +2280,12 @@ class select_export :public select_to_file {
*/
bool is_ambiguous_field_sep;
/*
+ The is_ambiguous_field_term is true if field_sep_char contains the first
+ char of the FIELDS TERMINATED BY (ENCLOSED BY is empty), and items can
+ contain this character.
+ */
+ bool is_ambiguous_field_term;
+ /*
The is_unsafe_field_sep field is true if a value of the field_sep_char
field is one of the '0'..'9', '+', '-', '.' and 'e' characters
(see the NUMERIC_CHARS constant value).
@@ -2107,14 +2316,13 @@ class select_insert :public select_result_interceptor {
ulonglong autoinc_value_of_last_inserted_row; // autogenerated or not
COPY_INFO info;
bool insert_into_view;
-
select_insert(TABLE_LIST *table_list_par,
TABLE *table_par, List<Item> *fields_par,
List<Item> *update_fields, List<Item> *update_values,
enum_duplicates duplic, bool ignore);
~select_insert();
int prepare(List<Item> &list, SELECT_LEX_UNIT *u);
- int prepare2(void);
+ virtual int prepare2(void);
bool send_data(List<Item> &items);
virtual void store_values(List<Item> &values);
virtual bool can_rollback_data() { return 0; }
@@ -2162,6 +2370,7 @@ public:
// Needed for access from local class MY_HOOKS in prepare(), since thd is proteted.
const THD *get_thd(void) { return thd; }
const HA_CREATE_INFO *get_create_info() { return create_info; };
+ int prepare2(void) { return 0; }
};
#include <myisam.h>
@@ -2441,6 +2650,11 @@ class multi_delete :public select_result_interceptor
/* True if at least one table we delete from is not transactional */
bool normal_tables;
bool delete_while_scanning;
+ /*
+ error handling (rollback and binlogging) can happen in send_eof()
+ so that afterward send_error() needs to find out that.
+ */
+ bool error_handled;
public:
multi_delete(TABLE_LIST *dt, uint num_of_tables);
@@ -2451,6 +2665,7 @@ public:
void send_error(uint errcode,const char *err);
int do_deletes();
bool send_eof();
+ virtual void abort();
};
@@ -2476,6 +2691,11 @@ class multi_update :public select_result_interceptor
/* True if the update operation has made a change in a transactional table */
bool transactional_tables;
bool ignore;
+ /*
+ error handling (rollback and binlogging) can happen in send_eof()
+ so that afterward send_error() needs to find out that.
+ */
+ bool error_handled;
public:
multi_update(TABLE_LIST *ut, TABLE_LIST *leaves_list,
@@ -2486,8 +2706,9 @@ public:
bool send_data(List<Item> &items);
bool initialize_tables (JOIN *join);
void send_error(uint errcode,const char *err);
- int do_updates (bool from_send_error);
+ int do_updates();
bool send_eof();
+ virtual void abort();
};
class my_var : public Sql_alloc {
diff --git a/sql/sql_connect.cc b/sql/sql_connect.cc
index 094bef9324e..309a1c7ab5d 100644
--- a/sql/sql_connect.cc
+++ b/sql/sql_connect.cc
@@ -87,7 +87,7 @@ static int get_or_create_user_conn(THD *thd, const char *user,
my_malloc(sizeof(struct user_conn) + temp_len+1,
MYF(MY_WME)))))
{
- net_send_error(thd, 0, NullS); // Out of memory
+ /* MY_WME ensures an error is set in THD. */
return_val= 1;
goto end;
}
@@ -100,8 +100,8 @@ static int get_or_create_user_conn(THD *thd, const char *user,
uc->reset_utime= thd->thr_create_utime;
if (my_hash_insert(&hash_user_connections, (uchar*) uc))
{
+ /* The only possible error is out of memory, MY_WME sets an error. */
my_free((char*) uc,0);
- net_send_error(thd, 0, NullS); // Out of memory
return_val= 1;
goto end;
}
@@ -132,6 +132,7 @@ end:
1 error
*/
+static
int check_for_max_user_connections(THD *thd, USER_CONN *uc)
{
int error=0;
@@ -141,7 +142,7 @@ int check_for_max_user_connections(THD *thd, USER_CONN *uc)
if (max_user_connections && !uc->user_resources.user_conn &&
max_user_connections < (uint) uc->connections)
{
- net_printf_error(thd, ER_TOO_MANY_USER_CONNECTIONS, uc->user);
+ my_error(ER_TOO_MANY_USER_CONNECTIONS, MYF(0), uc->user);
error=1;
goto end;
}
@@ -149,24 +150,24 @@ int check_for_max_user_connections(THD *thd, USER_CONN *uc)
if (uc->user_resources.user_conn &&
uc->user_resources.user_conn < uc->connections)
{
- net_printf_error(thd, ER_USER_LIMIT_REACHED, uc->user,
- "max_user_connections",
- (long) uc->user_resources.user_conn);
+ my_error(ER_USER_LIMIT_REACHED, MYF(0), uc->user,
+ "max_user_connections",
+ (long) uc->user_resources.user_conn);
error= 1;
goto end;
}
if (uc->user_resources.conn_per_hour &&
uc->user_resources.conn_per_hour <= uc->conn_per_hour)
{
- net_printf_error(thd, ER_USER_LIMIT_REACHED, uc->user,
- "max_connections_per_hour",
- (long) uc->user_resources.conn_per_hour);
+ my_error(ER_USER_LIMIT_REACHED, MYF(0), uc->user,
+ "max_connections_per_hour",
+ (long) uc->user_resources.conn_per_hour);
error=1;
goto end;
}
uc->conn_per_hour++;
- end:
+end:
if (error)
uc->connections--; // no need for decrease_user_connections() here
(void) pthread_mutex_unlock(&LOCK_user_conn);
@@ -258,8 +259,8 @@ bool check_mqh(THD *thd, uint check_command)
if (uc->user_resources.questions &&
uc->questions++ >= uc->user_resources.questions)
{
- net_printf_error(thd, ER_USER_LIMIT_REACHED, uc->user, "max_questions",
- (long) uc->user_resources.questions);
+ my_error(ER_USER_LIMIT_REACHED, MYF(0), uc->user, "max_questions",
+ (long) uc->user_resources.questions);
error=1;
goto end;
}
@@ -270,8 +271,8 @@ bool check_mqh(THD *thd, uint check_command)
(sql_command_flags[check_command] & CF_CHANGES_DATA) &&
uc->updates++ >= uc->user_resources.updates)
{
- net_printf_error(thd, ER_USER_LIMIT_REACHED, uc->user, "max_updates",
- (long) uc->user_resources.updates);
+ my_error(ER_USER_LIMIT_REACHED, MYF(0), uc->user, "max_updates",
+ (long) uc->user_resources.updates);
error=1;
goto end;
}
@@ -284,55 +285,54 @@ end:
#endif /* NO_EMBEDDED_ACCESS_CHECKS */
-/*
- Check if user exist and password supplied is correct.
-
- SYNOPSIS
- check_user()
- thd thread handle, thd->security_ctx->{host,user,ip} are used
- command originator of the check: now check_user is called
- during connect and change user procedures; used for
- logging.
- passwd scrambled password received from client
- passwd_len length of scrambled password
- db database name to connect to, may be NULL
- check_count dont know exactly
-
- Note, that host, user and passwd may point to communication buffer.
- Current implementation does not depend on that, but future changes
- should be done with this in mind; 'thd' is INOUT, all other params
- are 'IN'.
-
- RETURN VALUE
- 0 OK; thd->security_ctx->user/master_access/priv_user/db_access and
- thd->db are updated; OK is sent to client;
- -1 access denied or handshake error; error is sent to client;
- >0 error, not sent to client
+/**
+ Check if user exist and password supplied is correct.
+
+ @param thd thread handle, thd->security_ctx->{host,user,ip} are used
+ @param command originator of the check: now check_user is called
+ during connect and change user procedures; used for
+ logging.
+ @param passwd scrambled password received from client
+ @param passwd_len length of scrambled password
+ @param db database name to connect to, may be NULL
+ @param check_count TRUE if establishing a new connection. In this case
+ check that we have not exceeded the global
+ max_connections limist
+
+ @note Host, user and passwd may point to communication buffer.
+ Current implementation does not depend on that, but future changes
+ should be done with this in mind; 'thd' is INOUT, all other params
+ are 'IN'.
+
+ @retval 0 OK; thd->security_ctx->user/master_access/priv_user/db_access and
+ thd->db are updated; OK is sent to the client.
+ @retval 1 error, e.g. access denied or handshake error, not sent to
+ the client. A message is pushed into the error stack.
*/
-int check_user(THD *thd, enum enum_server_command command,
+int
+check_user(THD *thd, enum enum_server_command command,
const char *passwd, uint passwd_len, const char *db,
bool check_count)
{
DBUG_ENTER("check_user");
LEX_STRING db_str= { (char *) db, db ? strlen(db) : 0 };
-
+
+ /*
+ Clear thd->db as it points to something, that will be freed when
+ connection is closed. We don't want to accidentally free a wrong
+ pointer if connect failed. Also in case of 'CHANGE USER' failure,
+ current database will be switched to 'no database selected'.
+ */
+ thd->reset_db(NULL, 0);
+
#ifdef NO_EMBEDDED_ACCESS_CHECKS
thd->main_security_ctx.master_access= GLOBAL_ACLS; // Full rights
/* Change database if necessary */
if (db && db[0])
{
- /*
- thd->db is saved in caller and needs to be freed by caller if this
- function returns 0
- */
- thd->reset_db(NULL, 0);
if (mysql_change_db(thd, &db_str, FALSE))
- {
- /* Send the error to the client */
- net_send_error(thd);
- DBUG_RETURN(-1);
- }
+ DBUG_RETURN(1);
}
send_ok(thd);
DBUG_RETURN(0);
@@ -349,22 +349,17 @@ int check_user(THD *thd, enum enum_server_command command,
*/
if (opt_secure_auth_local && passwd_len == SCRAMBLE_LENGTH_323)
{
- net_printf_error(thd, ER_NOT_SUPPORTED_AUTH_MODE);
+ my_error(ER_NOT_SUPPORTED_AUTH_MODE, MYF(0));
general_log_print(thd, COM_CONNECT, ER(ER_NOT_SUPPORTED_AUTH_MODE));
- DBUG_RETURN(-1);
+ DBUG_RETURN(1);
}
if (passwd_len != 0 &&
passwd_len != SCRAMBLE_LENGTH &&
passwd_len != SCRAMBLE_LENGTH_323)
- DBUG_RETURN(ER_HANDSHAKE_ERROR);
-
- /*
- Clear thd->db as it points to something, that will be freed when
- connection is closed. We don't want to accidentally free a wrong pointer
- if connect failed. Also in case of 'CHANGE USER' failure, current
- database will be switched to 'no database selected'.
- */
- thd->reset_db(NULL, 0);
+ {
+ my_error(ER_HANDSHAKE_ERROR, MYF(0), thd->main_security_ctx.host_or_ip);
+ DBUG_RETURN(1);
+ }
USER_RESOURCES ur;
int res= acl_getroot(thd, &ur, passwd, passwd_len);
@@ -380,20 +375,21 @@ int check_user(THD *thd, enum enum_server_command command,
NET *net= &thd->net;
if (opt_secure_auth_local)
{
- net_printf_error(thd, ER_SERVER_IS_IN_SECURE_AUTH_MODE,
- thd->main_security_ctx.user,
- thd->main_security_ctx.host_or_ip);
+ my_error(ER_SERVER_IS_IN_SECURE_AUTH_MODE, MYF(0),
+ thd->main_security_ctx.user,
+ thd->main_security_ctx.host_or_ip);
general_log_print(thd, COM_CONNECT, ER(ER_SERVER_IS_IN_SECURE_AUTH_MODE),
thd->main_security_ctx.user,
thd->main_security_ctx.host_or_ip);
- DBUG_RETURN(-1);
+ DBUG_RETURN(1);
}
/* We have to read very specific packet size */
if (send_old_password_request(thd) ||
my_net_read(net) != SCRAMBLE_LENGTH_323 + 1)
{
inc_host_errors(&thd->remote.sin_addr);
- DBUG_RETURN(ER_HANDSHAKE_ERROR);
+ my_error(ER_HANDSHAKE_ERROR, MYF(0), thd->main_security_ctx.host_or_ip);
+ DBUG_RETURN(1);
}
/* Final attempt to check the user based on reply */
/* So as passwd is short, errcode is always >= 0 */
@@ -427,8 +423,8 @@ int check_user(THD *thd, enum enum_server_command command,
VOID(pthread_mutex_unlock(&LOCK_thread_count));
if (!count_ok)
{ // too many connections
- net_send_error(thd, ER_CON_COUNT_ERROR);
- DBUG_RETURN(-1);
+ my_error(ER_CON_COUNT_ERROR, MYF(0));
+ DBUG_RETURN(1);
}
}
@@ -462,24 +458,29 @@ int check_user(THD *thd, enum enum_server_command command,
(opt_old_style_user_limits ? thd->main_security_ctx.host_or_ip :
thd->main_security_ctx.priv_host),
&ur))
- DBUG_RETURN(-1);
+ {
+ /* The error is set by get_or_create_user_conn(). */
+ DBUG_RETURN(1);
+ }
if (thd->user_connect &&
(thd->user_connect->user_resources.conn_per_hour ||
thd->user_connect->user_resources.user_conn ||
max_user_connections) &&
check_for_max_user_connections(thd, thd->user_connect))
- DBUG_RETURN(-1);
+ {
+ /* The error is set in check_for_max_user_connections(). */
+ DBUG_RETURN(1);
+ }
/* Change database if necessary */
if (db && db[0])
{
if (mysql_change_db(thd, &db_str, FALSE))
{
- /* Send error to the client */
- net_send_error(thd);
+ /* mysql_change_db() has pushed the error message. */
if (thd->user_connect)
decrease_user_connections(thd->user_connect);
- DBUG_RETURN(-1);
+ DBUG_RETURN(1);
}
}
send_ok(thd);
@@ -490,19 +491,19 @@ int check_user(THD *thd, enum enum_server_command command,
}
else if (res == 2) // client gave short hash, server has long hash
{
- net_printf_error(thd, ER_NOT_SUPPORTED_AUTH_MODE);
+ my_error(ER_NOT_SUPPORTED_AUTH_MODE, MYF(0));
general_log_print(thd, COM_CONNECT, ER(ER_NOT_SUPPORTED_AUTH_MODE));
- DBUG_RETURN(-1);
+ DBUG_RETURN(1);
}
- net_printf_error(thd, ER_ACCESS_DENIED_ERROR,
- thd->main_security_ctx.user,
- thd->main_security_ctx.host_or_ip,
- passwd_len ? ER(ER_YES) : ER(ER_NO));
+ my_error(ER_ACCESS_DENIED_ERROR, MYF(0),
+ thd->main_security_ctx.user,
+ thd->main_security_ctx.host_or_ip,
+ passwd_len ? ER(ER_YES) : ER(ER_NO));
general_log_print(thd, COM_CONNECT, ER(ER_ACCESS_DENIED_ERROR),
thd->main_security_ctx.user,
thd->main_security_ctx.host_or_ip,
passwd_len ? ER(ER_YES) : ER(ER_NO));
- DBUG_RETURN(-1);
+ DBUG_RETURN(1);
#endif /* NO_EMBEDDED_ACCESS_CHECKS */
}
@@ -666,9 +667,12 @@ static int check_connection(THD *thd)
char ip[30];
if (vio_peer_addr(net->vio, ip, &thd->peer_port))
- return (ER_BAD_HOST_ERROR);
- if (!(thd->main_security_ctx.ip= my_strdup(ip,MYF(0))))
- return (ER_OUT_OF_RESOURCES);
+ {
+ my_error(ER_BAD_HOST_ERROR, MYF(0), thd->main_security_ctx.host_or_ip);
+ return 1;
+ }
+ if (!(thd->main_security_ctx.ip= my_strdup(ip,MYF(MY_WME))))
+ return 1; /* The error is set by my_strdup(). */
thd->main_security_ctx.host_or_ip= thd->main_security_ctx.ip;
vio_in_addr(net->vio,&thd->remote.sin_addr);
if (!(specialflag & SPECIAL_NO_RESOLVE))
@@ -685,7 +689,10 @@ static int check_connection(THD *thd)
thd->main_security_ctx.host_or_ip= thd->main_security_ctx.host;
}
if (connect_errors > max_connect_errors)
- return(ER_HOST_IS_BLOCKED);
+ {
+ my_error(ER_HOST_IS_BLOCKED, MYF(0), thd->main_security_ctx.host_or_ip);
+ return 1;
+ }
}
DBUG_PRINT("info",("Host: %s ip: %s",
(thd->main_security_ctx.host ?
@@ -693,7 +700,11 @@ static int check_connection(THD *thd)
(thd->main_security_ctx.ip ?
thd->main_security_ctx.ip : "unknown ip")));
if (acl_check_host(thd->main_security_ctx.host, thd->main_security_ctx.ip))
- return(ER_HOST_NOT_PRIVILEGED);
+ {
+ my_error(ER_HOST_NOT_PRIVILEGED, MYF(0),
+ thd->main_security_ctx.host_or_ip);
+ return 1;
+ }
}
else /* Hostname given means that the connection was on a socket */
{
@@ -753,7 +764,9 @@ static int check_connection(THD *thd)
pkt_len < MIN_HANDSHAKE_SIZE)
{
inc_host_errors(&thd->remote.sin_addr);
- return(ER_HANDSHAKE_ERROR);
+ my_error(ER_HANDSHAKE_ERROR, MYF(0),
+ thd->main_security_ctx.host_or_ip);
+ return 1;
}
}
#ifdef _CUSTOMCONFIG_
@@ -762,7 +775,7 @@ static int check_connection(THD *thd)
if (connect_errors)
reset_host_errors(&thd->remote.sin_addr);
if (thd->packet.alloc(thd->variables.net_buffer_length))
- return(ER_OUT_OF_RESOURCES);
+ return 1; /* The error is set by alloc(). */
thd->client_capabilities=uint2korr(net->read_pos);
if (thd->client_capabilities & CLIENT_PROTOCOL_41)
@@ -790,14 +803,16 @@ static int check_connection(THD *thd)
if (!ssl_acceptor_fd)
{
inc_host_errors(&thd->remote.sin_addr);
- return(ER_HANDSHAKE_ERROR);
+ my_error(ER_HANDSHAKE_ERROR, MYF(0), thd->main_security_ctx.host_or_ip);
+ return 1;
}
DBUG_PRINT("info", ("IO layer change in progress..."));
if (sslaccept(ssl_acceptor_fd, net->vio, net->read_timeout))
{
DBUG_PRINT("error", ("Failed to accept new SSL connection"));
inc_host_errors(&thd->remote.sin_addr);
- return(ER_HANDSHAKE_ERROR);
+ my_error(ER_HANDSHAKE_ERROR, MYF(0), thd->main_security_ctx.host_or_ip);
+ return 1;
}
DBUG_PRINT("info", ("Reading user information over SSL layer"));
if ((pkt_len= my_net_read(net)) == packet_error ||
@@ -806,7 +821,8 @@ static int check_connection(THD *thd)
DBUG_PRINT("error", ("Failed to read user information (pkt_len= %lu)",
pkt_len));
inc_host_errors(&thd->remote.sin_addr);
- return(ER_HANDSHAKE_ERROR);
+ my_error(ER_HANDSHAKE_ERROR, MYF(0), thd->main_security_ctx.host_or_ip);
+ return 1;
}
}
#endif /* HAVE_OPENSSL */
@@ -814,7 +830,8 @@ static int check_connection(THD *thd)
if (end >= (char*) net->read_pos+ pkt_len +2)
{
inc_host_errors(&thd->remote.sin_addr);
- return(ER_HANDSHAKE_ERROR);
+ my_error(ER_HANDSHAKE_ERROR, MYF(0), thd->main_security_ctx.host_or_ip);
+ return 1;
}
if (thd->client_capabilities & CLIENT_INTERACTIVE)
@@ -851,7 +868,8 @@ static int check_connection(THD *thd)
if (passwd + passwd_len + db_len > (char *)net->read_pos + pkt_len)
{
inc_host_errors(&thd->remote.sin_addr);
- return ER_HANDSHAKE_ERROR;
+ my_error(ER_HANDSHAKE_ERROR, MYF(0), thd->main_security_ctx.host_or_ip);
+ return 1;
}
/* Since 4.1 all database names are stored in utf8 */
@@ -879,8 +897,8 @@ static int check_connection(THD *thd)
if (thd->main_security_ctx.user)
x_free(thd->main_security_ctx.user);
- if (!(thd->main_security_ctx.user= my_strdup(user, MYF(0))))
- return (ER_OUT_OF_RESOURCES);
+ if (!(thd->main_security_ctx.user= my_strdup(user, MYF(MY_WME))))
+ return 1; /* The error is set by my_strdup(). */
return check_user(thd, COM_CONNECT, passwd, passwd_len, db, TRUE);
}
@@ -929,23 +947,21 @@ bool setup_connection_thread_globals(THD *thd)
bool login_connection(THD *thd)
{
- int error;
NET *net= &thd->net;
- Security_context *sctx= thd->security_ctx;
+ int error;
DBUG_ENTER("login_connection");
DBUG_PRINT("info", ("login_connection called by thread %lu",
thd->thread_id));
- net->no_send_error= 0;
-
/* Use "connect_timeout" value during connection phase */
my_net_set_read_timeout(net, connect_timeout);
my_net_set_write_timeout(net, connect_timeout);
- if ((error=check_connection(thd)))
+ error= check_connection(thd);
+ net_end_statement(thd);
+
+ if (error)
{ // Wrong permissions
- if (error > 0)
- net_printf_error(thd, error, sctx->host_or_ip);
#ifdef __NT__
if (vio_type(net->vio) == VIO_TYPE_NAMEDPIPE)
my_sleep(1000); /* must wait after eof() */
@@ -974,13 +990,12 @@ void end_connection(THD *thd)
if (thd->user_connect)
decrease_user_connections(thd->user_connect);
- if (thd->killed ||
- net->error && net->vio != 0 && net->report_error)
+ if (thd->killed || net->error && net->vio != 0)
{
statistic_increment(aborted_threads,&LOCK_status);
}
- if (net->error && net->vio != 0 && net->report_error)
+ if (net->error && net->vio != 0)
{
if (!thd->killed && thd->variables.log_warnings > 1)
{
@@ -990,11 +1005,9 @@ void end_connection(THD *thd)
thd->thread_id,(thd->db ? thd->db : "unconnected"),
sctx->user ? sctx->user : "unauthenticated",
sctx->host_or_ip,
- (net->last_errno ? ER(net->last_errno) :
+ (thd->main_da.is_error() ? thd->main_da.message() :
ER(ER_UNKNOWN_ERROR)));
}
-
- net_send_error(thd, net->last_errno, NullS);
}
}
@@ -1030,14 +1043,14 @@ static void prepare_new_connection_state(THD* thd)
if (sys_init_connect.value_length && !(sctx->master_access & SUPER_ACL))
{
execute_init_command(thd, &sys_init_connect, &LOCK_sys_init_connect);
- if (thd->query_error)
+ if (thd->is_error())
{
thd->killed= THD::KILL_CONNECTION;
sql_print_warning(ER(ER_NEW_ABORTING_CONNECTION),
thd->thread_id,(thd->db ? thd->db : "unconnected"),
sctx->user ? sctx->user : "unauthenticated",
sctx->host_or_ip, "init_connect command failed");
- sql_print_warning("%s", thd->net.last_error);
+ sql_print_warning("%s", thd->main_da.message());
}
thd->proc_info=0;
thd->set_time();
@@ -1095,6 +1108,7 @@ pthread_handler_t handle_one_connection(void *arg)
{
NET *net= &thd->net;
+ lex_start(thd);
if (login_connection(thd))
goto end_thread;
@@ -1103,7 +1117,6 @@ pthread_handler_t handle_one_connection(void *arg)
while (!net->error && net->vio != 0 &&
!(thd->killed == THD::KILL_CONNECTION))
{
- net->no_send_error= 0;
if (do_command(thd))
break;
}
diff --git a/sql/sql_cursor.cc b/sql/sql_cursor.cc
index d31c0af1163..2301b561797 100644
--- a/sql/sql_cursor.cc
+++ b/sql/sql_cursor.cc
@@ -24,9 +24,9 @@
Declarations.
****************************************************************************/
-/*
+/**
Sensitive_cursor -- a sensitive non-materialized server side
- cursor An instance of this class cursor has its own runtime
+ cursor. An instance of this class cursor has its own runtime
state -- list of used items and memory root for runtime memory,
open and locked tables, change list for the changes of the
parsed tree. This state is freed when the cursor is closed.
@@ -69,7 +69,7 @@ public:
};
-/*
+/**
Materialized_cursor -- an insensitive materialized server-side
cursor. The result set of this cursor is saved in a temporary
table at open. The cursor itself is simply an interface for the
@@ -96,7 +96,7 @@ public:
};
-/*
+/**
Select_materialize -- a mediator between a cursor query and the
protocol. In case we were not able to open a non-materialzed
cursor, it creates an internal temporary HEAP table, and insert
@@ -107,7 +107,7 @@ public:
class Select_materialize: public select_union
{
- select_result *result; /* the result object of the caller (PS or SP) */
+ select_result *result; /**< the result object of the caller (PS or SP) */
public:
Select_materialize(select_result *result_arg) :result(result_arg) {}
virtual bool send_fields(List<Item> &list, uint flags);
@@ -116,22 +116,21 @@ public:
/**************************************************************************/
-/*
+/**
Attempt to open a materialized or non-materialized cursor.
- SYNOPSIS
- mysql_open_cursor()
- thd thread handle
- flags [in] create a materialized cursor or not
- result [in] result class of the caller used as a destination
- for the rows fetched from the cursor
- pcursor [out] a pointer to store a pointer to cursor in
-
- RETURN VALUE
- 0 the query has been successfully executed; in this
- case pcursor may or may not contain
- a pointer to an open cursor.
- non-zero an error, 'pcursor' has been left intact.
+ @param thd thread handle
+ @param[in] flags create a materialized cursor or not
+ @param[in] result result class of the caller used as a destination
+ for the rows fetched from the cursor
+ @param[out] pcursor a pointer to store a pointer to cursor in
+
+ @retval
+ 0 the query has been successfully executed; in this
+ case pcursor may or may not contain
+ a pointer to an open cursor.
+ @retval
+ non-zero an error, 'pcursor' has been left intact.
*/
int mysql_open_cursor(THD *thd, uint flags, select_result *result,
@@ -279,6 +278,14 @@ Sensitive_cursor::Sensitive_cursor(THD *thd, select_result *result_arg)
}
+/**
+ Save THD state into cursor.
+
+ @todo
+ - XXX: thd->locked_tables is not changed.
+ - What problems can we have with it if cursor is open?
+ - TODO: must be fixed because of the prelocked mode.
+*/
void
Sensitive_cursor::post_open(THD *thd)
{
@@ -334,6 +341,10 @@ Sensitive_cursor::post_open(THD *thd)
}
+/**
+ bzero cursor state in THD.
+*/
+
void
Sensitive_cursor::reset_thd(THD *thd)
{
@@ -393,20 +404,13 @@ Sensitive_cursor::open(JOIN *join_arg)
}
-/*
- SYNOPSIS
- Sensitive_cursor::fetch()
- num_rows fetch up to this number of rows (maybe less)
-
- DESCRIPTION
- Fetch next num_rows rows from the cursor and send them to the client
+/**
+ Fetch next num_rows rows from the cursor and send them to the client.
- Precondition:
- Sensitive_cursor is open
+ Precondition:
+ - Sensitive_cursor is open
- RETURN VALUES:
- none, this function will send OK to the clinet or set an error
- message in THD
+ @param num_rows fetch up to this number of rows (maybe less)
*/
void
@@ -478,6 +482,11 @@ Sensitive_cursor::fetch(ulong num_rows)
}
+/**
+ @todo
+ Another hack: we need to set THD state as if in a fetch to be
+ able to call stmt close.
+*/
void
Sensitive_cursor::close()
{
@@ -579,10 +588,9 @@ int Materialized_cursor::open(JOIN *join __attribute__((unused)))
}
-/*
+/**
Fetch up to the given number of rows from a materialized cursor.
- DESCRIPTION
Precondition: the cursor is open.
If the cursor points after the last row, the fetch will automatically
@@ -590,10 +598,6 @@ int Materialized_cursor::open(JOIN *join __attribute__((unused)))
with SERVER_STATUS_LAST_ROW_SENT). This is an extra round trip
and probably should be improved to return
SERVER_STATUS_LAST_ROW_SENT along with the last row.
-
- RETURN VALUE
- none, in case of success the row is sent to the client, otherwise
- an error message is set in THD
*/
void Materialized_cursor::fetch(ulong num_rows)
diff --git a/sql/sql_cursor.h b/sql/sql_cursor.h
index 6edd6b24b36..1f19cbfdbcf 100644
--- a/sql/sql_cursor.h
+++ b/sql/sql_cursor.h
@@ -20,12 +20,14 @@
#pragma interface /* gcc class interface */
#endif
-/*
+/**
+ @file
+
Declarations for implementation of server side cursors. Only
read-only non-scrollable cursors are currently implemented.
*/
-/*
+/**
Server_side_cursor -- an interface for materialized and
sensitive (non-materialized) implementation of cursors. All
cursors are self-contained (created in their own memory root).
@@ -36,7 +38,7 @@
class Server_side_cursor: protected Query_arena, public Sql_alloc
{
protected:
- /* Row destination used for fetch */
+ /** Row destination used for fetch */
select_result *result;
public:
Server_side_cursor(MEM_ROOT *mem_root_arg, select_result *result_arg)
@@ -58,8 +60,7 @@ int mysql_open_cursor(THD *thd, uint flags,
select_result *result,
Server_side_cursor **res);
-/* Possible values for flags */
-
+/** Possible values for flags */
enum { ANY_CURSOR= 1, ALWAYS_MATERIALIZED_CURSOR= 2 };
#endif /* _sql_cusor_h_ */
diff --git a/sql/sql_db.cc b/sql/sql_db.cc
index abbf2131957..b5f49b97ec9 100644
--- a/sql/sql_db.cc
+++ b/sql/sql_db.cc
@@ -883,6 +883,13 @@ bool mysql_rm_db(THD *thd,char *db,bool if_exists, bool silent)
VOID(pthread_mutex_lock(&LOCK_mysql_create_db));
+ /*
+ This statement will be replicated as a statement, even when using
+ row-based replication. The flag will be reset at the end of the
+ statement.
+ */
+ thd->clear_current_stmt_binlog_row_based();
+
length= build_table_filename(path, sizeof(path), db, "", "", 0);
strmov(path+length, MY_DB_OPT_FILE); // Append db option file name
del_dbopt(path); // Remove dboption hash entry
@@ -914,6 +921,8 @@ bool mysql_rm_db(THD *thd,char *db,bool if_exists, bool silent)
{
ha_drop_database(path);
query_cache_invalidate1(db);
+ (void) sp_drop_db_routines(thd, db); /* @todo Do not ignore errors */
+ Events::drop_schema_events(thd, db);
error = 0;
}
}
@@ -949,6 +958,7 @@ bool mysql_rm_db(THD *thd,char *db,bool if_exists, bool silent)
/* These DDL methods and logging protected with LOCK_mysql_create_db */
mysql_bin_log.write(&qinfo);
}
+ thd->clear_error();
thd->server_status|= SERVER_STATUS_DB_DROPPED;
send_ok(thd, (ulong) deleted);
thd->server_status&= ~SERVER_STATUS_DB_DROPPED;
@@ -992,8 +1002,6 @@ bool mysql_rm_db(THD *thd,char *db,bool if_exists, bool silent)
}
exit:
- (void)sp_drop_db_routines(thd, db); /* QQ Ignore errors for now */
- Events::drop_schema_events(thd, db);
/*
If this database was the client's selected database, we silently
change the client's selected database to nothing (to have an empty
@@ -1111,6 +1119,7 @@ static long mysql_rm_known_files(THD *thd, MY_DIR *dirp, const char *db,
VOID(filename_to_tablename(file->name, table_list->table_name,
strlen(file->name) + 1));
table_list->alias= table_list->table_name; // If lower_case_table_names=2
+ table_list->internal_tmp_table= is_prefix(file->name, tmp_file_prefix);
/* Link into list */
(*tot_list_next)= table_list;
tot_list_next= &table_list->next_local;
@@ -1387,7 +1396,7 @@ static void backup_current_db_name(THD *thd,
}
else
{
- strmake(saved_db_name->str, thd->db, saved_db_name->length);
+ strmake(saved_db_name->str, thd->db, saved_db_name->length - 1);
saved_db_name->length= thd->db_length;
}
}
diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc
index 4c57fad8d87..c6435387f44 100644
--- a/sql/sql_delete.cc
+++ b/sql/sql_delete.cc
@@ -35,9 +35,11 @@ bool mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds,
READ_RECORD info;
bool using_limit=limit != HA_POS_ERROR;
bool transactional_table, safe_update, const_cond;
+ bool const_cond_result;
ha_rows deleted= 0;
uint usable_index= MAX_KEY;
SELECT_LEX *select_lex= &thd->lex->select_lex;
+ THD::killed_state killed_status= THD::NOT_KILLED;
DBUG_ENTER("mysql_delete");
if (open_and_lock_tables(thd, table_list))
@@ -48,7 +50,7 @@ bool mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds,
table_list->view_db.str, table_list->view_name.str);
DBUG_RETURN(TRUE);
}
- thd->proc_info="init";
+ thd_proc_info(thd, "init");
table->map=1;
if (mysql_prepare_delete(thd, table_list, &conds))
@@ -86,6 +88,12 @@ bool mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds,
select_lex->no_error= thd->lex->ignore;
+ const_cond_result= const_cond && (!conds || conds->val_int());
+ if (thd->is_error())
+ {
+ /* Error evaluating val_int(). */
+ DBUG_RETURN(TRUE);
+ }
/*
Test if the user wants to delete all rows and deletion doesn't have
any side-effects (because of triggers), so we can use optimized
@@ -105,7 +113,7 @@ bool mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds,
- We should not be binlogging this statement row-based, and
- there should be no delete triggers associated with the table.
*/
- if (!using_limit && const_cond && (!conds || conds->val_int()) &&
+ if (!using_limit && const_cond_result &&
!(specialflag & (SPECIAL_NO_NEW_FUNC | SPECIAL_SAFE_MODE)) &&
(thd->lex->sql_command == SQLCOM_TRUNCATE ||
(!thd->current_stmt_binlog_row_based &&
@@ -115,7 +123,7 @@ bool mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds,
table->file->info(HA_STATUS_VARIABLE | HA_STATUS_NO_LOCK);
ha_rows const maybe_deleted= table->file->stats.records;
DBUG_PRINT("debug", ("Trying to use delete_all_rows()"));
- if (!(error=table->file->delete_all_rows()))
+ if (!(error=table->file->ha_delete_all_rows()))
{
error= -1; // ok
deleted= maybe_deleted;
@@ -232,7 +240,7 @@ bool mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds,
init_read_record_idx(&info, thd, table, 1, usable_index);
init_ftfuncs(thd, select_lex, 1);
- thd->proc_info="updating";
+ thd_proc_info(thd, "updating");
if (table->triggers &&
table->triggers->has_triggers(TRG_EVENT_DELETE,
TRG_ACTION_AFTER))
@@ -252,10 +260,10 @@ bool mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds,
table->mark_columns_needed_for_delete();
while (!(error=info.read_record(&info)) && !thd->killed &&
- !thd->net.report_error)
+ ! thd->is_error())
{
- // thd->net.report_error is tested to disallow delete row on error
- if (!(select && select->skip_record())&& !thd->net.report_error )
+ // thd->is_error() is tested to disallow delete row on error
+ if (!(select && select->skip_record())&& ! thd->is_error() )
{
if (table->triggers &&
@@ -300,7 +308,8 @@ bool mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds,
else
table->file->unlock_row(); // Row failed selection, release lock on it
}
- if (thd->killed && !error)
+ killed_status= thd->killed;
+ if (killed_status != THD::NOT_KILLED || thd->is_error())
error= 1; // Aborted
if (will_batch && (loc_error= table->file->end_bulk_delete()))
{
@@ -308,7 +317,7 @@ bool mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds,
table->file->print_error(loc_error,MYF(0));
error=1;
}
- thd->proc_info= "end";
+ thd_proc_info(thd, "end");
end_read_record(&info);
if (options & OPTION_QUICK)
(void) table->file->extra(HA_EXTRA_NORMAL);
@@ -319,7 +328,7 @@ bool mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds,
We're really doing a truncate and need to reset the table's
auto-increment counter.
*/
- int error2= table->file->reset_auto_increment(0);
+ int error2= table->file->ha_reset_auto_increment(0);
if (error2 && (error2 != HA_ERR_WRONG_COMMAND))
{
@@ -345,13 +354,12 @@ cleanup:
thd->transaction.stmt.modified_non_trans_table= TRUE;
/* See similar binlogging code in sql_update.cc, for comments */
- if ((error < 0) || (deleted && !transactional_table))
+ if ((error < 0) || thd->transaction.stmt.modified_non_trans_table)
{
if (mysql_bin_log.is_open())
{
if (error < 0)
thd->clear_error();
-
/*
[binlog]: If 'handler::delete_all_rows()' was called and the
storage engine does not inject the rows itself, we replicate
@@ -360,7 +368,7 @@ cleanup:
*/
int log_result= thd->binlog_query(THD::ROW_QUERY_TYPE,
thd->query, thd->query_length,
- transactional_table, FALSE);
+ transactional_table, FALSE, killed_status);
if (log_result && transactional_table)
{
@@ -389,7 +397,7 @@ cleanup:
send_ok(thd, (ha_rows) thd->row_count_func);
DBUG_PRINT("info",("%ld records deleted",(long) deleted));
}
- DBUG_RETURN(error >= 0 || thd->net.report_error);
+ DBUG_RETURN(error >= 0 || thd->is_error());
}
@@ -541,7 +549,7 @@ bool mysql_multi_delete_prepare(THD *thd)
multi_delete::multi_delete(TABLE_LIST *dt, uint num_of_tables_arg)
: delete_tables(dt), deleted(0), found(0),
num_of_tables(num_of_tables_arg), error(0),
- do_delete(0), transactional_tables(0), normal_tables(0)
+ do_delete(0), transactional_tables(0), normal_tables(0), error_handled(0)
{
tempfiles= (Unique **) sql_calloc(sizeof(Unique *) * num_of_tables);
}
@@ -553,7 +561,7 @@ multi_delete::prepare(List<Item> &values, SELECT_LEX_UNIT *u)
DBUG_ENTER("multi_delete::prepare");
unit= u;
do_delete= 1;
- thd->proc_info="deleting from main table";
+ thd_proc_info(thd, "deleting from main table");
DBUG_RETURN(0);
}
@@ -720,12 +728,22 @@ void multi_delete::send_error(uint errcode,const char *err)
/* First send error what ever it is ... */
my_message(errcode, err, MYF(0));
- /* If nothing deleted return */
- if (!deleted)
+ DBUG_VOID_RETURN;
+}
+
+
+void multi_delete::abort()
+{
+ DBUG_ENTER("multi_delete::abort");
+
+ /* the error was handled or nothing deleted and no side effects return */
+ if (error_handled ||
+ !thd->transaction.stmt.modified_non_trans_table && !deleted)
DBUG_VOID_RETURN;
/* Something already deleted so we have to invalidate cache */
- query_cache_invalidate3(thd, delete_tables, 1);
+ if (deleted)
+ query_cache_invalidate3(thd, delete_tables, 1);
/*
If rows from the first table only has been deleted and it is
@@ -745,12 +763,30 @@ void multi_delete::send_error(uint errcode,const char *err)
*/
error= 1;
send_eof();
+ DBUG_ASSERT(error_handled);
+ DBUG_VOID_RETURN;
}
- DBUG_ASSERT(!normal_tables || !deleted || thd->transaction.stmt.modified_non_trans_table);
+
+ if (thd->transaction.stmt.modified_non_trans_table)
+ {
+ /*
+ there is only side effects; to binlog with the error
+ */
+ if (mysql_bin_log.is_open())
+ {
+ thd->binlog_query(THD::ROW_QUERY_TYPE,
+ thd->query, thd->query_length,
+ transactional_tables, FALSE);
+ }
+ thd->transaction.all.modified_non_trans_table= true;
+ }
+ DBUG_ASSERT(!normal_tables || !deleted ||
+ thd->transaction.stmt.modified_non_trans_table);
DBUG_VOID_RETURN;
}
+
/*
Do delete from other tables.
Returns values:
@@ -843,16 +879,17 @@ int multi_delete::do_deletes()
bool multi_delete::send_eof()
{
- thd->proc_info="deleting from reference tables";
+ THD::killed_state killed_status= THD::NOT_KILLED;
+ thd_proc_info(thd, "deleting from reference tables");
/* Does deletes for the last n - 1 tables, returns 0 if ok */
int local_error= do_deletes(); // returns 0 if success
/* compute a total error to know if something failed */
local_error= local_error || error;
-
+ killed_status= (local_error == 0)? THD::NOT_KILLED : thd->killed;
/* reset used flags */
- thd->proc_info="end";
+ thd_proc_info(thd, "end");
/*
We must invalidate the query cache before binlog writing and
@@ -862,7 +899,9 @@ bool multi_delete::send_eof()
{
query_cache_invalidate3(thd, delete_tables, 1);
}
- if ((local_error == 0) || (deleted && normal_tables))
+ DBUG_ASSERT(!normal_tables || !deleted ||
+ thd->transaction.stmt.modified_non_trans_table);
+ if ((local_error == 0) || thd->transaction.stmt.modified_non_trans_table)
{
if (mysql_bin_log.is_open())
{
@@ -870,7 +909,7 @@ bool multi_delete::send_eof()
thd->clear_error();
if (thd->binlog_query(THD::ROW_QUERY_TYPE,
thd->query, thd->query_length,
- transactional_tables, FALSE) &&
+ transactional_tables, FALSE, killed_status) &&
!normal_tables)
{
local_error=1; // Log write failed: roll back the SQL statement
@@ -879,7 +918,8 @@ bool multi_delete::send_eof()
if (thd->transaction.stmt.modified_non_trans_table)
thd->transaction.all.modified_non_trans_table= TRUE;
}
- DBUG_ASSERT(!normal_tables || !deleted || thd->transaction.stmt.modified_non_trans_table);
+ if (local_error != 0)
+ error_handled= TRUE; // to force early leave from ::send_error()
/* Commit or rollback the current SQL statement */
if (transactional_tables)
@@ -1007,7 +1047,7 @@ trunc_by_del:
/* Probably InnoDB table */
ulonglong save_options= thd->options;
table_list->lock_type= TL_WRITE;
- thd->options&= ~(ulong) (OPTION_BEGIN | OPTION_NOT_AUTOCOMMIT);
+ thd->options&= ~(OPTION_BEGIN | OPTION_NOT_AUTOCOMMIT);
ha_enable_transaction(thd, FALSE);
mysql_init_select(thd->lex);
bool save_binlog_row_based= thd->current_stmt_binlog_row_based;
diff --git a/sql/sql_derived.cc b/sql/sql_derived.cc
index ea7545fe5cb..10b42e11b26 100644
--- a/sql/sql_derived.cc
+++ b/sql/sql_derived.cc
@@ -147,8 +147,9 @@ exit:
/* Hide "Unknown column" or "Unknown function" error */
if (orig_table_list->view)
{
- if (thd->net.last_errno == ER_BAD_FIELD_ERROR ||
- thd->net.last_errno == ER_SP_DOES_NOT_EXIST)
+ if (thd->is_error() &&
+ (thd->main_da.sql_errno() == ER_BAD_FIELD_ERROR ||
+ thd->main_da.sql_errno() == ER_SP_DOES_NOT_EXIST))
{
thd->clear_error();
my_error(ER_VIEW_INVALID, MYF(0), orig_table_list->db,
diff --git a/sql/sql_error.cc b/sql/sql_error.cc
index 8bdb2e59ed5..89cff73d153 100644
--- a/sql/sql_error.cc
+++ b/sql/sql_error.cc
@@ -137,7 +137,7 @@ MYSQL_ERROR *push_warning(THD *thd, MYSQL_ERROR::enum_warning_level level,
level= MYSQL_ERROR::WARN_LEVEL_ERROR;
}
- if (thd->handle_error(code, level))
+ if (thd->handle_error(code, msg, level))
DBUG_RETURN(NULL);
if (thd->spcont &&
diff --git a/sql/sql_handler.cc b/sql/sql_handler.cc
index ed7e30c1fef..a4ba6f1140b 100644
--- a/sql/sql_handler.cc
+++ b/sql/sql_handler.cc
@@ -65,9 +65,6 @@
static enum enum_ha_read_modes rkey_to_rnext[]=
{ RNEXT_SAME, RNEXT, RPREV, RNEXT, RPREV, RNEXT, RPREV, RPREV };
-static int mysql_ha_flush_table(THD *thd, TABLE **table_ptr, uint mode_flags);
-
-
/*
Get hash key and hash key length.
@@ -119,13 +116,15 @@ static void mysql_ha_hash_free(TABLE_LIST *tables)
@param thd Thread identifier.
@param tables A list of tables with the first entry to close.
+ @param is_locked If LOCK_open is locked.
@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.
+ @note Broadcasts refresh if it closed a table with old version.
*/
-static void mysql_ha_close_table(THD *thd, TABLE_LIST *tables)
+static void mysql_ha_close_table(THD *thd, TABLE_LIST *tables,
+ bool is_locked)
{
TABLE **table_ptr;
@@ -143,13 +142,23 @@ static void mysql_ha_close_table(THD *thd, TABLE_LIST *tables)
if (*table_ptr)
{
(*table_ptr)->file->ha_index_or_rnd_end();
- VOID(pthread_mutex_lock(&LOCK_open));
+ if (! is_locked)
+ 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));
+ if (! is_locked)
+ VOID(pthread_mutex_unlock(&LOCK_open));
+ }
+ else if (tables->table)
+ {
+ /* Must be a temporary table */
+ TABLE *table= tables->table;
+ table->file->ha_index_or_rnd_end();
+ table->query_id= thd->query_id;
+ table->open_by_handler= 0;
}
}
@@ -282,6 +291,12 @@ bool mysql_ha_open(THD *thd, TABLE_LIST *tables, bool reopen)
goto err;
}
+ /*
+ If it's a temp table, don't reset table->query_id as the table is
+ being used by this handler. Otherwise, no meaning at all.
+ */
+ tables->table->open_by_handler= 1;
+
if (! reopen)
send_ok(thd);
DBUG_PRINT("exit",("OK"));
@@ -291,7 +306,7 @@ err:
if (hash_tables)
my_free((char*) hash_tables, MYF(0));
if (tables->table)
- mysql_ha_close_table(thd, tables);
+ mysql_ha_close_table(thd, tables, FALSE);
DBUG_PRINT("exit",("ERROR"));
DBUG_RETURN(TRUE);
}
@@ -325,7 +340,7 @@ bool mysql_ha_close(THD *thd, TABLE_LIST *tables)
(uchar*) tables->alias,
strlen(tables->alias) + 1)))
{
- mysql_ha_close_table(thd, hash_tables);
+ mysql_ha_close_table(thd, hash_tables, FALSE);
hash_delete(&thd->handler_tables_hash, (uchar*) hash_tables);
}
else
@@ -464,7 +479,7 @@ retry:
if (need_reopen)
{
- mysql_ha_close_table(thd, tables);
+ mysql_ha_close_table(thd, tables, FALSE);
hash_tables->table= NULL;
/*
The lock might have been aborted, we need to manually reset
@@ -655,163 +670,130 @@ err0:
}
-/*
- Flush (close) a list of HANDLER tables.
-
- SYNOPSIS
- mysql_ha_flush()
- thd Thread identifier.
- tables The list of tables to close. If NULL,
- close all HANDLER tables [marked as flushed].
- mode_flags MYSQL_HA_CLOSE_FINAL finally close the table.
- MYSQL_HA_REOPEN_ON_USAGE mark for reopen.
- MYSQL_HA_FLUSH_ALL flush all tables, not only
- those marked for flush.
- is_locked If LOCK_open is locked.
-
- DESCRIPTION
- The list of HANDLER tables may be NULL, in which case all HANDLER
- tables are closed (if MYSQL_HA_FLUSH_ALL) is set.
- If 'tables' is NULL and MYSQL_HA_FLUSH_ALL is not set,
- all HANDLER tables marked for flush are closed.
- Broadcasts refresh for every table closed.
+/**
+ Scan the handler tables hash for matching tables.
- NOTE
- Since mysql_ha_flush() is called when the base table has to be closed,
- we compare real table names, not aliases. Hence, database names matter.
+ @param thd Thread identifier.
+ @param tables The list of tables to remove.
- RETURN
- 0 ok
+ @return Pointer to head of linked list (TABLE_LIST::next_local) of matching
+ TABLE_LIST elements from handler_tables_hash. Otherwise, NULL if no
+ table was matched.
*/
-int mysql_ha_flush(THD *thd, TABLE_LIST *tables, uint mode_flags,
- bool is_locked)
+static TABLE_LIST *mysql_ha_find(THD *thd, TABLE_LIST *tables)
{
- TABLE_LIST *tmp_tables;
- TABLE **table_ptr;
- bool did_lock= FALSE;
- DBUG_ENTER("mysql_ha_flush");
- DBUG_PRINT("enter", ("tables: 0x%lx mode_flags: 0x%02x",
- (long) tables, mode_flags));
+ TABLE_LIST *hash_tables, *head= NULL, *first= tables;
+ DBUG_ENTER("mysql_ha_find");
- if (tables)
+ /* search for all handlers with matching table names */
+ for (uint i= 0; i < thd->handler_tables_hash.records; i++)
{
- /* Close all tables in the list. */
- for (tmp_tables= tables ; tmp_tables; tmp_tables= tmp_tables->next_local)
+ hash_tables= (TABLE_LIST*) hash_element(&thd->handler_tables_hash, i);
+ for (tables= first; tables; tables= tables->next_local)
{
- DBUG_PRINT("info-in-tables-list",("'%s'.'%s' as '%s'",
- tmp_tables->db, tmp_tables->table_name,
- tmp_tables->alias));
- /* Close all currently open handler tables with the same base table. */
- table_ptr= &(thd->handler_tables);
- while (*table_ptr)
- {
- if ((!*tmp_tables->db ||
- !my_strcasecmp(&my_charset_latin1, (*table_ptr)->s->db.str,
- tmp_tables->db)) &&
- ! my_strcasecmp(&my_charset_latin1,
- (*table_ptr)->s->table_name.str,
- tmp_tables->table_name))
- {
- DBUG_PRINT("info",("*table_ptr '%s'.'%s' as '%s'",
- (*table_ptr)->s->db.str,
- (*table_ptr)->s->table_name.str,
- (*table_ptr)->alias));
- /* The first time it is required, lock for close_thread_table(). */
- if (! did_lock && ! is_locked)
- {
- VOID(pthread_mutex_lock(&LOCK_open));
- did_lock= TRUE;
- }
- mysql_ha_flush_table(thd, table_ptr, mode_flags);
- continue;
- }
- table_ptr= &(*table_ptr)->next;
- }
- /* end of handler_tables list */
+ if ((! *tables->db ||
+ ! my_strcasecmp(&my_charset_latin1, hash_tables->db, tables->db)) &&
+ ! my_strcasecmp(&my_charset_latin1, hash_tables->table_name,
+ tables->table_name))
+ break;
}
- /* end of flush tables list */
- }
- else
- {
- /* Close all currently open tables [which are marked for flush]. */
- table_ptr= &(thd->handler_tables);
- while (*table_ptr)
+ if (tables)
{
- if ((mode_flags & MYSQL_HA_FLUSH_ALL) ||
- (*table_ptr)->needs_reopen_or_name_lock())
- {
- /* The first time it is required, lock for close_thread_table(). */
- if (! did_lock && ! is_locked)
- {
- VOID(pthread_mutex_lock(&LOCK_open));
- did_lock= TRUE;
- }
- mysql_ha_flush_table(thd, table_ptr, mode_flags);
- continue;
- }
- table_ptr= &(*table_ptr)->next;
+ hash_tables->next_local= head;
+ head= hash_tables;
}
}
- /* Release the lock if it was taken by this function. */
- if (did_lock)
- VOID(pthread_mutex_unlock(&LOCK_open));
+ DBUG_RETURN(head);
+}
+
+
+/**
+ Remove matching tables from the HANDLER's hash table.
+
+ @param thd Thread identifier.
+ @param tables The list of tables to remove.
+ @param is_locked If LOCK_open is locked.
+
+ @note Broadcasts refresh if it closed a table with old version.
+*/
+
+void mysql_ha_rm_tables(THD *thd, TABLE_LIST *tables, bool is_locked)
+{
+ TABLE_LIST *hash_tables, *next;
+ DBUG_ENTER("mysql_ha_rm_tables");
+
+ DBUG_ASSERT(tables);
+
+ hash_tables= mysql_ha_find(thd, tables);
+
+ while (hash_tables)
+ {
+ next= hash_tables->next_local;
+ if (hash_tables->table)
+ mysql_ha_close_table(thd, hash_tables, is_locked);
+ hash_delete(&thd->handler_tables_hash, (uchar*) hash_tables);
+ hash_tables= next;
+ }
- DBUG_RETURN(0);
+ DBUG_VOID_RETURN;
}
-/*
- Flush (close) a table.
- SYNOPSIS
- mysql_ha_flush_table()
- thd Thread identifier.
- table The table to close.
- mode_flags MYSQL_HA_CLOSE_FINAL finally close the table.
- MYSQL_HA_REOPEN_ON_USAGE mark for reopen.
+/**
+ Flush (close and mark for re-open) all tables that should be should
+ be reopen.
- DESCRIPTION
- Broadcasts refresh if it closed the table.
- The caller must lock LOCK_open.
+ @param thd Thread identifier.
- RETURN
- 0 ok
+ @note Broadcasts refresh if it closed a table with old version.
*/
-static int mysql_ha_flush_table(THD *thd, TABLE **table_ptr, uint mode_flags)
+void mysql_ha_flush(THD *thd)
{
- TABLE_LIST *hash_tables;
- TABLE *table= *table_ptr;
- DBUG_ENTER("mysql_ha_flush_table");
- DBUG_PRINT("enter",("'%s'.'%s' as '%s' flags: 0x%02x",
- table->s->db.str, table->s->table_name.str,
- table->alias, mode_flags));
+ TABLE_LIST *hash_tables;
+ DBUG_ENTER("mysql_ha_flush");
- if ((hash_tables= (TABLE_LIST*) hash_search(&thd->handler_tables_hash,
- (uchar*) table->alias,
- strlen(table->alias) + 1)))
+ safe_mutex_assert_owner(&LOCK_open);
+
+ for (uint i= 0; i < thd->handler_tables_hash.records; i++)
{
- if (! (mode_flags & MYSQL_HA_REOPEN_ON_USAGE))
- {
- /* This is a final close. Remove from hash. */
- hash_delete(&thd->handler_tables_hash, (uchar*) hash_tables);
- }
- else
+ hash_tables= (TABLE_LIST*) hash_element(&thd->handler_tables_hash, i);
+ if (hash_tables->table && hash_tables->table->needs_reopen_or_name_lock())
{
+ mysql_ha_close_table(thd, hash_tables, TRUE);
/* Mark table as closed, ready for re-open. */
hash_tables->table= NULL;
}
- }
+ }
- safe_mutex_assert_owner(&LOCK_open);
- (*table_ptr)->file->ha_index_or_rnd_end();
- safe_mutex_assert_owner(&LOCK_open);
- if (close_thread_table(thd, table_ptr))
+ DBUG_VOID_RETURN;
+}
+
+
+/**
+ Close all HANDLER's tables.
+
+ @param thd Thread identifier.
+
+ @note Broadcasts refresh if it closed a table with old version.
+*/
+
+void mysql_ha_cleanup(THD *thd)
+{
+ TABLE_LIST *hash_tables;
+ DBUG_ENTER("mysql_ha_cleanup");
+
+ for (uint i= 0; i < thd->handler_tables_hash.records; i++)
{
- /* Tell threads waiting for refresh that something has happened */
- broadcast_refresh();
- }
+ hash_tables= (TABLE_LIST*) hash_element(&thd->handler_tables_hash, i);
+ if (hash_tables->table)
+ mysql_ha_close_table(thd, hash_tables, FALSE);
+ }
- DBUG_RETURN(0);
+ hash_free(&thd->handler_tables_hash);
+
+ DBUG_VOID_RETURN;
}
+
diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc
index b4f2d8c65f2..c2b1990f6c7 100644
--- a/sql/sql_insert.cc
+++ b/sql/sql_insert.cc
@@ -189,11 +189,9 @@ static int check_insert_fields(THD *thd, TABLE_LIST *table_list,
return -1;
}
#ifndef NO_EMBEDDED_ACCESS_CHECKS
- Field_iterator_table field_it;
- field_it.set_table(table);
- if (check_grant_all_columns(thd, INSERT_ACL, &table->grant,
- table->s->db.str, table->s->table_name.str,
- &field_it))
+ Field_iterator_table_ref field_it;
+ field_it.set(table_list);
+ if (check_grant_all_columns(thd, INSERT_ACL, &field_it))
return -1;
#endif
clear_timestamp_auto_bits(table->timestamp_field_type,
@@ -576,7 +574,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
bool log_on= ((thd->options & OPTION_BIN_LOG) ||
(!(thd->security_ctx->master_access & SUPER_ACL)));
#endif
- thr_lock_type lock_type = table_list->lock_type;
+ thr_lock_type lock_type;
Item *unused_conds= 0;
DBUG_ENTER("mysql_insert");
@@ -611,8 +609,9 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
if (open_and_lock_tables(thd, table_list))
DBUG_RETURN(TRUE);
}
+ lock_type= table_list->lock_type;
- thd->proc_info="init";
+ thd_proc_info(thd, "init");
thd->used_tables=0;
values= its++;
value_count= values->elements;
@@ -620,7 +619,8 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
if (mysql_prepare_insert(thd, table_list, table, fields, values,
update_fields, update_values, duplic, &unused_conds,
FALSE,
- (fields.elements || !value_count),
+ (fields.elements || !value_count ||
+ table_list->view != 0),
!ignore && (thd->variables.sql_mode &
(MODE_STRICT_TRANS_TABLES |
MODE_STRICT_ALL_TABLES))))
@@ -628,7 +628,6 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
/* mysql_prepare_insert set table_list->table if it was not set */
table= table_list->table;
- lock_type= table_list->lock_type;
context= &thd->lex->select_lex.context;
/*
@@ -697,7 +696,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
#endif
error=0;
- thd->proc_info="update";
+ thd_proc_info(thd, "update");
if (duplic != DUP_ERROR || ignore)
table->file->extra(HA_EXTRA_IGNORE_DUP_KEY);
if (duplic == DUP_REPLACE &&
@@ -740,7 +739,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
table->triggers,
TRG_EVENT_INSERT))
{
- if (values_list.elements != 1 && !thd->net.report_error)
+ if (values_list.elements != 1 && ! thd->is_error())
{
info.records++;
continue;
@@ -771,7 +770,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
table->triggers,
TRG_EVENT_INSERT))
{
- if (values_list.elements != 1 && ! thd->net.report_error)
+ if (values_list.elements != 1 && ! thd->is_error())
{
info.records++;
continue;
@@ -839,59 +838,58 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
}
transactional_table= table->file->has_transactions();
- if ((changed= (info.copied || info.deleted || info.updated)) ||
- was_insert_delayed)
+ if ((changed= (info.copied || info.deleted || info.updated)))
{
/*
Invalidate the table in the query cache if something changed.
For the transactional algorithm to work the invalidation must be
before binlog writing and ha_autocommit_or_rollback
*/
- if (changed)
- query_cache_invalidate3(thd, table_list, 1);
- if (error <= 0 || !transactional_table)
+ query_cache_invalidate3(thd, table_list, 1);
+ }
+ if (changed && error <= 0 || thd->transaction.stmt.modified_non_trans_table
+ || was_insert_delayed)
+ {
+ if (mysql_bin_log.is_open())
{
- if (mysql_bin_log.is_open())
+ if (error <= 0)
{
- if (error <= 0)
- {
- /*
- [Guilhem wrote] Temporary errors may have filled
- thd->net.last_error/errno. For example if there has
- been a disk full error when writing the row, and it was
- MyISAM, then thd->net.last_error/errno will be set to
- "disk full"... and the my_pwrite() will wait until free
- space appears, and so when it finishes then the
- write_row() was entirely successful
- */
- /* todo: consider removing */
- thd->clear_error();
- }
- /* bug#22725:
-
- A query which per-row-loop can not be interrupted with
- KILLED, like INSERT, and that does not invoke stored
- routines can be binlogged with neglecting the KILLED error.
-
- If there was no error (error == zero) until after the end of
- inserting loop the KILLED flag that appeared later can be
- disregarded since previously possible invocation of stored
- routines did not result in any error due to the KILLED. In
- such case the flag is ignored for constructing binlog event.
- */
- DBUG_ASSERT(thd->killed != THD::KILL_BAD_DATA || error > 0);
- if (thd->binlog_query(THD::ROW_QUERY_TYPE,
- thd->query, thd->query_length,
- transactional_table, FALSE,
- (error>0) ? thd->killed : THD::NOT_KILLED) &&
- transactional_table)
- {
- error=1;
- }
- }
- if (thd->transaction.stmt.modified_non_trans_table)
- thd->transaction.all.modified_non_trans_table= TRUE;
+ /*
+ [Guilhem wrote] Temporary errors may have filled
+ thd->net.last_error/errno. For example if there has
+ been a disk full error when writing the row, and it was
+ MyISAM, then thd->net.last_error/errno will be set to
+ "disk full"... and the my_pwrite() will wait until free
+ space appears, and so when it finishes then the
+ write_row() was entirely successful
+ */
+ /* todo: consider removing */
+ thd->clear_error();
+ }
+ /* bug#22725:
+
+ A query which per-row-loop can not be interrupted with
+ KILLED, like INSERT, and that does not invoke stored
+ routines can be binlogged with neglecting the KILLED error.
+
+ If there was no error (error == zero) until after the end of
+ inserting loop the KILLED flag that appeared later can be
+ disregarded since previously possible invocation of stored
+ routines did not result in any error due to the KILLED. In
+ such case the flag is ignored for constructing binlog event.
+ */
+ DBUG_ASSERT(thd->killed != THD::KILL_BAD_DATA || error > 0);
+ if (thd->binlog_query(THD::ROW_QUERY_TYPE,
+ thd->query, thd->query_length,
+ transactional_table, FALSE,
+ (error>0) ? thd->killed : THD::NOT_KILLED) &&
+ transactional_table)
+ {
+ error=1;
+ }
}
+ if (thd->transaction.stmt.modified_non_trans_table)
+ thd->transaction.all.modified_non_trans_table= TRUE;
}
DBUG_ASSERT(transactional_table || !changed ||
thd->transaction.stmt.modified_non_trans_table);
@@ -914,7 +912,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
thd->lock=0;
}
}
- thd->proc_info="end";
+ thd_proc_info(thd, "end");
/*
We'll report to the client this id:
- if the table contains an autoincrement column and we successfully
@@ -1773,7 +1771,7 @@ I_List<Delayed_insert> delayed_threads;
static
Delayed_insert *find_handler(THD *thd, TABLE_LIST *table_list)
{
- thd->proc_info="waiting for delay_list";
+ thd_proc_info(thd, "waiting for delay_list");
pthread_mutex_lock(&LOCK_delayed_insert); // Protect master list
I_List_iterator<Delayed_insert> it(delayed_threads);
Delayed_insert *di;
@@ -1855,7 +1853,7 @@ bool delayed_get_table(THD *thd, TABLE_LIST *table_list)
*/
if (delayed_insert_threads >= thd->variables.max_insert_delayed_threads)
DBUG_RETURN(0);
- thd->proc_info="Creating delayed handler";
+ thd_proc_info(thd, "Creating delayed handler");
pthread_mutex_lock(&LOCK_delayed_create);
/*
The first search above was done without LOCK_delayed_create.
@@ -1865,7 +1863,6 @@ bool delayed_get_table(THD *thd, TABLE_LIST *table_list)
{
if (!(di= new Delayed_insert()))
{
- my_error(ER_OUTOFMEMORY,MYF(0),sizeof(Delayed_insert));
thd->fatal_error();
goto end_create;
}
@@ -1902,16 +1899,16 @@ bool delayed_get_table(THD *thd, TABLE_LIST *table_list)
}
/* Wait until table is open */
- thd->proc_info="waiting for handler open";
+ thd_proc_info(thd, "waiting for handler open");
while (!di->thd.killed && !di->table && !thd->killed)
{
pthread_cond_wait(&di->cond_client, &di->mutex);
}
pthread_mutex_unlock(&di->mutex);
- thd->proc_info="got old table";
+ thd_proc_info(thd, "got old table");
if (di->thd.killed)
{
- if (di->thd.net.report_error)
+ if (di->thd.is_error())
{
/*
Copy the error message. Note that we don't treat fatal
@@ -1919,7 +1916,7 @@ bool delayed_get_table(THD *thd, TABLE_LIST *table_list)
main thread. Use of my_message will enable stored
procedures continue handlers.
*/
- my_message(di->thd.net.last_errno, di->thd.net.last_error,
+ my_message(di->thd.main_da.sql_errno(), di->thd.main_da.message(),
MYF(0));
}
di->unlock();
@@ -1942,7 +1939,7 @@ bool delayed_get_table(THD *thd, TABLE_LIST *table_list)
pthread_mutex_unlock(&di->mutex);
if (table_list->table)
{
- DBUG_ASSERT(thd->net.report_error == 0);
+ DBUG_ASSERT(! thd->is_error());
thd->di= di;
}
/* Unlock the delayed insert object after its last access. */
@@ -1951,7 +1948,7 @@ bool delayed_get_table(THD *thd, TABLE_LIST *table_list)
end_create:
pthread_mutex_unlock(&LOCK_delayed_create);
- DBUG_RETURN(thd->net.report_error);
+ DBUG_RETURN(thd->is_error());
}
@@ -1985,18 +1982,18 @@ TABLE *Delayed_insert::get_local_table(THD* client_thd)
tables_in_use++;
if (!thd.lock) // Table is not locked
{
- client_thd->proc_info="waiting for handler lock";
+ thd_proc_info(client_thd, "waiting for handler lock");
pthread_cond_signal(&cond); // Tell handler to lock table
while (!dead && !thd.lock && ! client_thd->killed)
{
pthread_cond_wait(&cond_client,&mutex);
}
- client_thd->proc_info="got handler lock";
+ thd_proc_info(client_thd, "got handler lock");
if (client_thd->killed)
goto error;
if (dead)
{
- my_message(thd.net.last_errno, thd.net.last_error, MYF(0));
+ my_message(thd.main_da.sql_errno(), thd.main_da.message(), MYF(0));
goto error;
}
}
@@ -2009,7 +2006,7 @@ TABLE *Delayed_insert::get_local_table(THD* client_thd)
bytes. Since the table copy is used for creating one record only,
the other record buffers and alignment are unnecessary.
*/
- client_thd->proc_info="allocating local table";
+ thd_proc_info(client_thd, "allocating local table");
copy= (TABLE*) client_thd->alloc(sizeof(*copy)+
(share->fields+1)*sizeof(Field**)+
share->reclength +
@@ -2094,11 +2091,11 @@ int write_delayed(THD *thd, TABLE *table, enum_duplicates duplic,
DBUG_PRINT("enter", ("query = '%s' length %lu", query.str,
(ulong) query.length));
- thd->proc_info="waiting for handler insert";
+ thd_proc_info(thd, "waiting for handler insert");
pthread_mutex_lock(&di->mutex);
while (di->stacked_inserts >= delayed_queue_size && !thd->killed)
pthread_cond_wait(&di->cond_client,&di->mutex);
- thd->proc_info="storing row into queue";
+ thd_proc_info(thd, "storing row into queue");
if (thd->killed)
goto err;
@@ -2255,7 +2252,9 @@ pthread_handler_t handle_delayed_insert(void *arg)
#if !defined( __WIN__) /* Win32 calls this in pthread_create */
if (my_thread_init())
{
- strmov(thd->net.last_error,ER(thd->net.last_errno=ER_OUT_OF_RESOURCES));
+ /* Can't use my_error since store_globals has not yet been called */
+ thd->main_da.set_error_status(thd, ER_OUT_OF_RESOURCES,
+ ER(ER_OUT_OF_RESOURCES));
goto end;
}
#endif
@@ -2264,13 +2263,30 @@ pthread_handler_t handle_delayed_insert(void *arg)
thd->thread_stack= (char*) &thd;
if (init_thr_lock() || thd->store_globals())
{
+ /* Can't use my_error since store_globals has perhaps failed */
+ thd->main_da.set_error_status(thd, ER_OUT_OF_RESOURCES,
+ ER(ER_OUT_OF_RESOURCES));
thd->fatal_error();
- strmov(thd->net.last_error,ER(thd->net.last_errno=ER_OUT_OF_RESOURCES));
goto err;
}
- /* open table */
- if (!(di->table=open_ltable(thd, &di->table_list, TL_WRITE_DELAYED, 0)))
+ /*
+ Open table requires an initialized lex in case the table is
+ partitioned. The .frm file contains a partial SQL string which is
+ parsed using a lex, that depends on initialized thd->lex.
+ */
+ lex_start(thd);
+ thd->lex->sql_command= SQLCOM_INSERT; // For innodb::store_lock()
+ /*
+ Statement-based replication of INSERT DELAYED has problems with RAND()
+ and user vars, so in mixed mode we go to row-based.
+ */
+ thd->lex->set_stmt_unsafe();
+ thd->set_current_stmt_binlog_row_based_if_mixed();
+
+ /* Open table */
+ if (!(di->table= open_n_lock_single_table(thd, &di->table_list,
+ TL_WRITE_DELAYED)))
{
thd->fatal_error(); // Abort waiting inserts
goto err;
@@ -2325,7 +2341,7 @@ pthread_handler_t handle_delayed_insert(void *arg)
/* Information for pthread_kill */
di->thd.mysys_var->current_mutex= &di->mutex;
di->thd.mysys_var->current_cond= &di->cond;
- di->thd.proc_info="Waiting for INSERT";
+ thd_proc_info(&(di->thd), "Waiting for INSERT");
DBUG_PRINT("info",("Waiting for someone to insert rows"));
while (!thd->killed)
@@ -2360,7 +2376,7 @@ pthread_handler_t handle_delayed_insert(void *arg)
pthread_mutex_unlock(&di->thd.mysys_var->mutex);
pthread_mutex_lock(&di->mutex);
}
- di->thd.proc_info=0;
+ thd_proc_info(&(di->thd), 0);
if (di->tables_in_use && ! thd->lock)
{
@@ -2501,7 +2517,7 @@ bool Delayed_insert::handle_inserts(void)
table->next_number_field=table->found_next_number_field;
table->use_all_columns();
- thd.proc_info="upgrading lock";
+ thd_proc_info(&thd, "upgrading lock");
if (thr_upgrade_write_delay_lock(*thd.lock->locks))
{
/* This can only happen if thread is killed by shutdown */
@@ -2509,7 +2525,7 @@ bool Delayed_insert::handle_inserts(void)
goto err;
}
- thd.proc_info="insert";
+ thd_proc_info(&thd, "insert");
max_rows= delayed_insert_limit;
if (thd.killed || table->needs_reopen_or_name_lock())
{
@@ -2647,13 +2663,13 @@ bool Delayed_insert::handle_inserts(void)
{
if (tables_in_use)
pthread_cond_broadcast(&cond_client); // If waiting clients
- thd.proc_info="reschedule";
+ thd_proc_info(&thd, "reschedule");
pthread_mutex_unlock(&mutex);
if ((error=table->file->extra(HA_EXTRA_NO_CACHE)))
{
/* This should never happen */
table->file->print_error(error,MYF(0));
- sql_print_error("%s",thd.net.last_error);
+ sql_print_error("%s", thd.main_da.message());
DBUG_PRINT("error", ("HA_EXTRA_NO_CACHE failed in loop"));
goto err;
}
@@ -2667,13 +2683,13 @@ bool Delayed_insert::handle_inserts(void)
if (!using_bin_log)
table->file->extra(HA_EXTRA_WRITE_CACHE);
pthread_mutex_lock(&mutex);
- thd.proc_info="insert";
+ thd_proc_info(&thd, "insert");
}
if (tables_in_use)
pthread_cond_broadcast(&cond_client); // If waiting clients
}
}
- thd.proc_info=0;
+ thd_proc_info(&thd, 0);
pthread_mutex_unlock(&mutex);
/*
@@ -2694,7 +2710,7 @@ bool Delayed_insert::handle_inserts(void)
if ((error=table->file->extra(HA_EXTRA_NO_CACHE)))
{ // This shouldn't happen
table->file->print_error(error,MYF(0));
- sql_print_error("%s",thd.net.last_error);
+ sql_print_error("%s", thd.main_da.message());
DBUG_PRINT("error", ("HA_EXTRA_NO_CACHE failed after loop"));
goto err;
}
@@ -2899,14 +2915,14 @@ select_insert::prepare(List<Item> &values, SELECT_LEX_UNIT *u)
Is table which we are changing used somewhere in other parts of
query
*/
- if (!(lex->current_select->options & OPTION_BUFFER_RESULT) &&
- unique_table(thd, table_list, table_list->next_global, 0))
+ if (unique_table(thd, table_list, table_list->next_global, 0))
{
/* Using same table for INSERT and SELECT */
lex->current_select->options|= OPTION_BUFFER_RESULT;
lex->current_select->join->select_options|= OPTION_BUFFER_RESULT;
}
- else if (!thd->prelocked_mode)
+ else if (!(lex->current_select->options & OPTION_BUFFER_RESULT) &&
+ !thd->prelocked_mode)
{
/*
We must not yet prepare the result table if it is the same as one of the
@@ -3013,7 +3029,7 @@ bool select_insert::send_data(List<Item> &values)
thd->count_cuted_fields= CHECK_FIELD_WARN; // Calculate cuted fields
store_values(values);
thd->count_cuted_fields= CHECK_FIELD_IGNORE;
- if (thd->net.report_error)
+ if (thd->is_error())
DBUG_RETURN(1);
if (table_list) // Not CREATE ... SELECT
{
@@ -3087,6 +3103,7 @@ bool select_insert::send_eof()
bool const trans_table= table->file->has_transactions();
ulonglong id;
bool changed;
+ THD::killed_state killed_status= thd->killed;
DBUG_ENTER("select_insert::send_eof");
DBUG_PRINT("enter", ("trans_table=%d, table_type='%s'",
trans_table, table->file->table_type()));
@@ -3120,7 +3137,7 @@ bool select_insert::send_eof()
thd->clear_error();
thd->binlog_query(THD::ROW_QUERY_TYPE,
thd->query, thd->query_length,
- trans_table, FALSE);
+ trans_table, FALSE, killed_status);
}
/*
We will call ha_autocommit_or_rollback() also for
@@ -3172,6 +3189,7 @@ void select_insert::abort() {
*/
if (table)
{
+ bool changed, transactional_table;
/*
If we are not in prelocked mode, we end the bulk insert started
before.
@@ -3193,20 +3211,20 @@ void select_insert::abort() {
If table creation failed, the number of rows modified will also be
zero, so no check for that is made.
*/
- if (info.copied || info.deleted || info.updated)
+ changed= (info.copied || info.deleted || info.updated);
+ transactional_table= table->file->has_transactions();
+ if (thd->transaction.stmt.modified_non_trans_table)
{
- DBUG_ASSERT(table != NULL);
- if (!table->file->has_transactions())
- {
if (mysql_bin_log.is_open())
thd->binlog_query(THD::ROW_QUERY_TYPE, thd->query, thd->query_length,
- table->file->has_transactions(), FALSE);
- if (!thd->current_stmt_binlog_row_based && !table->s->tmp_table &&
- !can_rollback_data())
+ transactional_table, FALSE);
+ if (!thd->current_stmt_binlog_row_based && !can_rollback_data())
thd->transaction.all.modified_non_trans_table= TRUE;
- query_cache_invalidate3(thd, table, 1);
- }
+ if (changed)
+ query_cache_invalidate3(thd, table, 1);
}
+ DBUG_ASSERT(transactional_table || !changed ||
+ thd->transaction.stmt.modified_non_trans_table);
table->file->ha_release_auto_increment();
}
@@ -3301,7 +3319,7 @@ static TABLE *create_table_from_items(THD *thd, HA_CREATE_INFO *create_info,
tmp_table.alias= 0;
tmp_table.timestamp_field= 0;
tmp_table.s= &share;
- init_tmp_table_share(&share, "", 0, "", "");
+ init_tmp_table_share(thd, &share, "", 0, "", "");
tmp_table.s->db_create_options=0;
tmp_table.s->blob_ptr_size= portable_sizeof_char_ptr;
@@ -3315,7 +3333,10 @@ static TABLE *create_table_from_items(THD *thd, HA_CREATE_INFO *create_info,
Create_field *cr_field;
Field *field, *def_field;
if (item->type() == Item::FUNC_ITEM)
- field= item->tmp_table_field(&tmp_table);
+ if (item->result_type() != STRING_RESULT)
+ field= item->tmp_table_field(&tmp_table);
+ else
+ field= item->tmp_table_field_from_field_type(&tmp_table, 0);
else
field= create_tmp_field(thd, &tmp_table, item, item->type(),
(Item ***) 0, &tmp_field, &def_field, 0, 0, 0, 0,
@@ -3393,7 +3414,7 @@ static TABLE *create_table_from_items(THD *thd, HA_CREATE_INFO *create_info,
it preparable for open. But let us do close_temporary_table() here
just in case.
*/
- close_temporary_table(thd, create_table);
+ drop_temporary_table(thd, create_table);
}
}
}
diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc
index 4ee66cb1e8d..5352f8efbbb 100644
--- a/sql/sql_lex.cc
+++ b/sql/sql_lex.cc
@@ -343,7 +343,7 @@ void lex_start(THD *thd)
lex->name.str= 0;
lex->name.length= 0;
lex->event_parse_data= NULL;
-
+ lex->profile_options= PROFILE_NONE;
lex->nest_level=0 ;
lex->allow_sum_func= 0;
lex->in_sum_func= NULL;
@@ -363,6 +363,7 @@ void lex_start(THD *thd)
lex->server_options.owner= 0;
lex->server_options.port= -1;
+ lex->is_lex_started= TRUE;
DBUG_VOID_RETURN;
}
@@ -2139,7 +2140,7 @@ void Query_tables_list::destroy_query_tables_list()
st_lex::st_lex()
:result(0), yacc_yyss(0), yacc_yyvs(0),
- sql_command(SQLCOM_END), option_type(OPT_DEFAULT)
+ sql_command(SQLCOM_END), option_type(OPT_DEFAULT), is_lex_started(0)
{
my_init_dynamic_array2(&plugins, sizeof(plugin_ref),
diff --git a/sql/sql_lex.h b/sql/sql_lex.h
index 4b3228390c7..ef0a9bb11ef 100644
--- a/sql/sql_lex.h
+++ b/sql/sql_lex.h
@@ -117,9 +117,13 @@ enum enum_sql_command {
SQLCOM_SHOW_CREATE_EVENT, SQLCOM_SHOW_EVENTS,
SQLCOM_SHOW_CREATE_TRIGGER,
SQLCOM_ALTER_DB_UPGRADE,
+ SQLCOM_SHOW_PROFILE, SQLCOM_SHOW_PROFILES,
+ /*
+ When a command is added here, be sure it's also added in mysqld.cc
+ in "struct show_var_st status_vars[]= {" ...
+ */
/* This should be the last !!! */
-
SQLCOM_END
};
@@ -259,6 +263,8 @@ public:
key_name.str= str;
key_name.length= length;
}
+
+ void print(THD *thd, String *str);
};
/*
@@ -1593,6 +1599,9 @@ typedef struct st_lex : public Query_tables_list
enum enum_var_type option_type;
enum enum_view_create_mode create_view_mode;
enum enum_drop_mode drop_mode;
+
+ uint profile_query_id;
+ uint profile_options;
uint uint_geom_type;
uint grant, grant_tot_col, which_columns;
uint fk_delete_opt, fk_update_opt, fk_match_option;
@@ -1614,7 +1623,7 @@ typedef struct st_lex : public Query_tables_list
uint8 create_view_algorithm;
uint8 create_view_check;
bool drop_if_exists, drop_temporary, local_file, one_shot_set;
-
+ bool autocommit;
bool verbose, no_write_to_binlog;
bool tx_chain, tx_release;
@@ -1710,6 +1719,7 @@ typedef struct st_lex : public Query_tables_list
st_alter_tablespace *alter_tablespace_info;
bool escape_used;
+ bool is_lex_started; /* If lex_start() did run. For debugging. */
st_lex();
@@ -1831,11 +1841,11 @@ typedef struct st_lex : public Query_tables_list
struct st_lex_local: public st_lex
{
- static void *operator new(size_t size)
+ static void *operator new(size_t size) throw()
{
return sql_alloc(size);
}
- static void *operator new(size_t size, MEM_ROOT *mem_root)
+ static void *operator new(size_t size, MEM_ROOT *mem_root) throw()
{
return (void*) alloc_root(mem_root, (uint) size);
}
diff --git a/sql/sql_load.cc b/sql/sql_load.cc
index 8bbe1e413b3..c96fbb80b0c 100644
--- a/sql/sql_load.cc
+++ b/sql/sql_load.cc
@@ -85,7 +85,8 @@ static int read_sep_field(THD *thd, COPY_INFO &info, TABLE_LIST *table_list,
#ifndef EMBEDDED_LIBRARY
static bool write_execute_load_query_log_event(THD *thd,
bool duplicates, bool ignore,
- bool transactional_table);
+ bool transactional_table,
+ THD::killed_state killed_status);
#endif /* EMBEDDED_LIBRARY */
/*
@@ -134,6 +135,7 @@ bool mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list,
char *tdb= thd->db ? thd->db : db; // Result is never null
ulong skip_lines= ex->skip_lines;
bool transactional_table;
+ THD::killed_state killed_status= THD::NOT_KILLED;
DBUG_ENTER("mysql_load");
#ifdef EMBEDDED_LIBRARY
@@ -403,7 +405,16 @@ bool mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list,
free_blobs(table); /* if pack_blob was used */
table->copy_blobs=0;
thd->count_cuted_fields= CHECK_FIELD_IGNORE;
-
+ /*
+ simulated killing in the middle of per-row loop
+ must be effective for binlogging
+ */
+ DBUG_EXECUTE_IF("simulate_kill_bug27571",
+ {
+ error=1;
+ thd->killed= THD::KILL_QUERY;
+ };);
+ killed_status= (error == 0)? THD::NOT_KILLED : thd->killed;
/*
We must invalidate the table in query cache before binlog writing and
ha_autocommit_...
@@ -445,9 +456,10 @@ bool mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list,
/* If the file was not empty, wrote_create_file is true */
if (lf_info.wrote_create_file)
{
- if ((info.copied || info.deleted) && !transactional_table)
+ if (thd->transaction.stmt.modified_non_trans_table)
write_execute_load_query_log_event(thd, handle_duplicates,
- ignore, transactional_table);
+ ignore, transactional_table,
+ killed_status);
else
{
Delete_file_log_event d(thd, db, transactional_table);
@@ -492,8 +504,8 @@ bool mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list,
read_info.end_io_cache();
if (lf_info.wrote_create_file)
{
- write_execute_load_query_log_event(thd, handle_duplicates,
- ignore, transactional_table);
+ write_execute_load_query_log_event(thd, handle_duplicates, ignore,
+ transactional_table,killed_status);
}
}
}
@@ -523,7 +535,8 @@ err:
/* Not a very useful function; just to avoid duplication of code */
static bool write_execute_load_query_log_event(THD *thd,
bool duplicates, bool ignore,
- bool transactional_table)
+ bool transactional_table,
+ THD::killed_state killed_err_arg)
{
Execute_load_query_log_event
e(thd, thd->query, thd->query_length,
@@ -531,7 +544,7 @@ static bool write_execute_load_query_log_event(THD *thd,
(char*)thd->lex->fname_end - (char*)thd->query,
(duplicates == DUP_REPLACE) ? LOAD_DUP_REPLACE :
(ignore ? LOAD_DUP_IGNORE : LOAD_DUP_ERROR),
- transactional_table, FALSE);
+ transactional_table, FALSE, killed_err_arg);
e.flags|= LOG_EVENT_UPDATE_TABLE_MAP_VERSION_F;
return mysql_bin_log.write(&e);
}
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index 0c9e9705444..1ae42b3ce79 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -115,7 +115,7 @@ bool end_active_trans(THD *thd)
if (thd->options & (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN |
OPTION_TABLE_LOCK))
{
- DBUG_PRINT("info",("options: 0x%lx", (ulong) thd->options));
+ DBUG_PRINT("info",("options: 0x%llx", thd->options));
/* Safety if one did "drop table" on locked tables */
if (!thd->locked_tables)
thd->options&= ~OPTION_TABLE_LOCK;
@@ -157,8 +157,8 @@ bool begin_trans(THD *thd)
}
#ifdef HAVE_REPLICATION
-/*
- Returns true if all tables should be ignored
+/**
+ Returns true if all tables should be ignored.
*/
inline bool all_tables_not_ok(THD *thd, TABLE_LIST *tables)
{
@@ -181,9 +181,10 @@ static bool some_non_temp_table_to_be_updated(THD *thd, TABLE_LIST *tables)
}
-/*
- Mark all commands that somehow changes a table
- This is used to check number of updates / hour
+/**
+ Mark all commands that somehow changes a table.
+
+ This is used to check number of updates / hour.
sql_command is actually set to SQLCOM_END sometimes
so we need the +1 to include it in the array.
@@ -265,6 +266,8 @@ void init_update_queries(void)
sql_command_flags[SQLCOM_SHOW_PROC_CODE]= CF_STATUS_COMMAND;
sql_command_flags[SQLCOM_SHOW_FUNC_CODE]= CF_STATUS_COMMAND;
sql_command_flags[SQLCOM_SHOW_CREATE_EVENT]= CF_STATUS_COMMAND;
+ sql_command_flags[SQLCOM_SHOW_PROFILES]= CF_STATUS_COMMAND;
+ sql_command_flags[SQLCOM_SHOW_PROFILE]= CF_STATUS_COMMAND;
sql_command_flags[SQLCOM_SHOW_TABLES]= (CF_STATUS_COMMAND |
CF_SHOW_TABLE_COMMAND);
@@ -313,7 +316,7 @@ void execute_init_command(THD *thd, sys_var_str *init_command_var,
Vio* save_vio;
ulong save_client_capabilities;
- thd->proc_info= "Execution of init_command";
+ thd_proc_info(thd, "Execution of init_command");
/*
We need to lock init_command_var because
during execution of init_command_var query
@@ -328,7 +331,6 @@ void execute_init_command(THD *thd, sys_var_str *init_command_var,
*/
save_vio= thd->net.vio;
thd->net.vio= 0;
- thd->net.no_send_error= 0;
dispatch_command(COM_QUERY, thd,
init_command_var->value,
init_command_var->value_length);
@@ -338,9 +340,10 @@ void execute_init_command(THD *thd, sys_var_str *init_command_var,
}
-/*
+/**
Execute commands from bootstrap_file.
- Used when creating the initial grant tables
+
+ Used when creating the initial grant tables.
*/
pthread_handler_t handle_bootstrap(void *arg)
@@ -370,7 +373,7 @@ pthread_handler_t handle_bootstrap(void *arg)
if (thd->variables.max_join_size == HA_POS_ERROR)
thd->options |= OPTION_BIG_SELECTS;
- thd->proc_info=0;
+ thd_proc_info(thd, 0);
thd->version=refresh_version;
thd->security_ctx->priv_user=
thd->security_ctx->user= (char*) my_strdup("boot", MYF(MY_WME));
@@ -397,8 +400,8 @@ pthread_handler_t handle_bootstrap(void *arg)
/* purecov: begin tested */
if (net_realloc(&(thd->net), 2 * thd->net.max_packet))
{
- net_send_error(thd, ER_NET_PACKET_TOO_LARGE, NullS);
- thd->fatal_error();
+ net_end_statement(thd);
+ bootstrap_error= 1;
break;
}
buff= (char*) thd->net.buff;
@@ -406,7 +409,7 @@ pthread_handler_t handle_bootstrap(void *arg)
length+= (ulong) strlen(buff + length);
/* purecov: end */
}
- if (thd->is_fatal_error)
+ if (bootstrap_error)
break; /* purecov: inspected */
while (length && (my_isspace(thd->charset(), buff[length-1]) ||
@@ -424,6 +427,10 @@ pthread_handler_t handle_bootstrap(void *arg)
QUERY_CACHE_FLAGS_SIZE);
thd->query[length] = '\0';
DBUG_PRINT("query",("%-.4096s",thd->query));
+#if defined(ENABLED_PROFILING) && defined(COMMUNITY_SERVER)
+ thd->profiling.set_query_source(thd->query, length);
+#endif
+
/*
We don't need to obtain LOCK_thread_count here because in bootstrap
mode we have only one thread.
@@ -433,16 +440,11 @@ pthread_handler_t handle_bootstrap(void *arg)
mysql_parse(thd, thd->query, length, & found_semicolon);
close_thread_tables(thd); // Free tables
- if (thd->is_fatal_error)
- break;
+ bootstrap_error= thd->is_error();
+ net_end_statement(thd);
- if (thd->net.report_error)
- {
- /* The query failed, send error to log and abort bootstrap */
- net_send_error(thd);
- thd->fatal_error();
+ if (bootstrap_error)
break;
- }
free_root(thd->mem_root,MYF(MY_KEEP_PREALLOC));
#ifdef USING_TRANSACTIONS
@@ -451,9 +453,6 @@ pthread_handler_t handle_bootstrap(void *arg)
}
end:
- /* Remember the exit code of bootstrap */
- bootstrap_error= thd->is_fatal_error;
-
net_end(&thd->net);
thd->cleanup();
delete thd;
@@ -470,6 +469,46 @@ end:
}
+/**
+ @brief Check access privs for a MERGE table and fix children lock types.
+
+ @param[in] thd thread handle
+ @param[in] db database name
+ @param[in,out] table_list list of child tables (merge_list)
+ lock_type and optionally db set per table
+
+ @return status
+ @retval 0 OK
+ @retval != 0 Error
+
+ @detail
+ This function is used for write access to MERGE tables only
+ (CREATE TABLE, ALTER TABLE ... UNION=(...)). Set TL_WRITE for
+ every child. Set 'db' for every child if not present.
+*/
+#ifndef NO_EMBEDDED_ACCESS_CHECKS
+static bool check_merge_table_access(THD *thd, char *db,
+ TABLE_LIST *table_list)
+{
+ int error= 0;
+
+ if (table_list)
+ {
+ /* Check that all tables use the current database */
+ TABLE_LIST *tlist;
+
+ for (tlist= table_list; tlist; tlist= tlist->next_local)
+ {
+ if (!tlist->db || !tlist->db[0])
+ tlist->db= db; /* purecov: inspected */
+ }
+ error= check_table_access(thd, SELECT_ACL | UPDATE_ACL | DELETE_ACL,
+ table_list,0);
+ }
+ return error;
+}
+#endif
+
/* This works because items are allocated with sql_alloc() */
void free_items(Item *item)
@@ -494,21 +533,20 @@ void cleanup_items(Item *item)
DBUG_VOID_RETURN;
}
-/*
- Handle COM_TABLE_DUMP command
+/**
+ Handle COM_TABLE_DUMP command.
- SYNOPSIS
- mysql_table_dump
- thd thread handle
- db database name or an empty string. If empty,
- the current database of the connection is used
- tbl_name name of the table to dump
+ @param thd thread handle
+ @param db database name or an empty string. If empty,
+ the current database of the connection is used
+ @param tbl_name name of the table to dump
- NOTES
+ @note
This function is written to handle one specific command only.
- RETURN VALUE
+ @retval
0 success
+ @retval
1 error, the error message is set in THD
*/
@@ -562,16 +600,14 @@ err:
DBUG_RETURN(error);
}
-/*
- Ends the current transaction and (maybe) begin the next
+/**
+ Ends the current transaction and (maybe) begin the next.
- SYNOPSIS
- end_trans()
- thd Current thread
- completion Completion type
+ @param thd Current thread
+ @param completion Completion type
- RETURN
- 0 - OK
+ @retval
+ 0 OK
*/
int end_trans(THD *thd, enum enum_mysql_completiontype completion)
@@ -600,7 +636,7 @@ int end_trans(THD *thd, enum enum_mysql_completiontype completion)
*/
thd->server_status&= ~SERVER_STATUS_IN_TRANS;
res= ha_commit(thd);
- thd->options&= ~(ulong) (OPTION_BEGIN | OPTION_KEEP_LOG);
+ thd->options&= ~(OPTION_BEGIN | OPTION_KEEP_LOG);
thd->transaction.all.modified_non_trans_table= FALSE;
break;
case COMMIT_RELEASE:
@@ -618,7 +654,7 @@ int end_trans(THD *thd, enum enum_mysql_completiontype completion)
thd->server_status&= ~SERVER_STATUS_IN_TRANS;
if (ha_rollback(thd))
res= -1;
- thd->options&= ~(ulong) (OPTION_BEGIN | OPTION_KEEP_LOG);
+ thd->options&= ~(OPTION_BEGIN | OPTION_KEEP_LOG);
thd->transaction.all.modified_non_trans_table= FALSE;
if (!res && (completion == ROLLBACK_AND_CHAIN))
res= begin_trans(thd);
@@ -640,18 +676,21 @@ int end_trans(THD *thd, enum enum_mysql_completiontype completion)
#ifndef EMBEDDED_LIBRARY
-/*
+/**
Read one command from connection and execute it (query or simple command).
This function is called in loop from thread function.
- SYNOPSIS
- do_command()
- RETURN VALUE
+
+ For profiling to work, it must never be called recursively.
+
+ @retval
0 success
+ @retval
1 request of thread shutdown (see dispatch_command() description)
*/
bool do_command(THD *thd)
{
+ bool return_value;
char *packet= 0;
ulong packet_length;
NET *net= &thd->net;
@@ -672,10 +711,20 @@ bool do_command(THD *thd)
*/
my_net_set_read_timeout(net, thd->variables.net_wait_timeout);
+ /*
+ XXX: this code is here only to clear possible errors of init_connect.
+ Consider moving to init_connect() instead.
+ */
thd->clear_error(); // Clear error message
+ thd->main_da.reset_diagnostics_area();
net_new_transaction(net);
- if ((packet_length=my_net_read(net)) == packet_error)
+
+ packet_length= my_net_read(net);
+#if defined(ENABLED_PROFILING) && defined(COMMUNITY_SERVER)
+ thd->profiling.start_new_query();
+#endif
+ if (packet_length == packet_error)
{
DBUG_PRINT("info",("Got error %d reading command from socket %s",
net->error,
@@ -683,12 +732,19 @@ bool do_command(THD *thd)
/* Check if we can continue without closing the connection */
+ /* The error must be set. */
+ DBUG_ASSERT(thd->is_error());
+ net_end_statement(thd);
+
if (net->error != 3)
- DBUG_RETURN(TRUE); // We have to close it.
+ {
+ return_value= TRUE; // We have to close it.
+ goto out;
+ }
- net_send_error(thd, net->last_errno, NullS);
net->error= 0;
- DBUG_RETURN(FALSE);
+ return_value= FALSE;
+ goto out;
}
packet= (char*) net->read_pos;
@@ -722,38 +778,112 @@ bool do_command(THD *thd)
my_net_set_read_timeout(net, thd->variables.net_read_timeout);
DBUG_ASSERT(packet_length);
- DBUG_RETURN(dispatch_command(command, thd, packet+1, (uint) (packet_length-1)));
+ return_value= dispatch_command(command, thd, packet+1, (uint) (packet_length-1));
+
+out:
+#if defined(ENABLED_PROFILING) && defined(COMMUNITY_SERVER)
+ thd->profiling.finish_current_query();
+#endif
+ DBUG_RETURN(return_value);
}
#endif /* EMBEDDED_LIBRARY */
+/**
+ @brief Determine if an attempt to update a non-temporary table while the
+ read-only option was enabled has been made.
+
+ This is a helper function to mysql_execute_command.
-/*
- Perform one connection-level (COM_XXXX) command.
+ @note SQLCOM_MULTI_UPDATE is an exception and delt with elsewhere.
- SYNOPSIS
- dispatch_command()
- thd connection handle
- command type of command to perform
- packet data for the command, packet is always null-terminated
- packet_length length of packet. Can be zero, e.g. in case of COM_SLEEP.
- RETURN VALUE
+ @see mysql_execute_command
+ @returns Status code
+ @retval TRUE The statement should be denied.
+ @retval FALSE The statement isn't updating any relevant tables.
+*/
+
+static my_bool deny_updates_if_read_only_option(THD *thd,
+ TABLE_LIST *all_tables)
+{
+ DBUG_ENTER("deny_updates_if_read_only_option");
+
+ if (!opt_readonly)
+ DBUG_RETURN(FALSE);
+
+ LEX *lex= thd->lex;
+
+ const my_bool user_is_super=
+ ((ulong)(thd->security_ctx->master_access & SUPER_ACL) ==
+ (ulong)SUPER_ACL);
+
+ if (user_is_super)
+ DBUG_RETURN(FALSE);
+
+ if (!(sql_command_flags[lex->sql_command] & CF_CHANGES_DATA))
+ DBUG_RETURN(FALSE);
+
+ /* Multi update is an exception and is dealt with later. */
+ if (lex->sql_command == SQLCOM_UPDATE_MULTI)
+ DBUG_RETURN(FALSE);
+
+ const my_bool create_temp_tables=
+ (lex->sql_command == SQLCOM_CREATE_TABLE) &&
+ (lex->create_info.options & HA_LEX_CREATE_TMP_TABLE);
+
+ const my_bool drop_temp_tables=
+ (lex->sql_command == SQLCOM_DROP_TABLE) &&
+ lex->drop_temporary;
+
+ const my_bool update_real_tables=
+ some_non_temp_table_to_be_updated(thd, all_tables) &&
+ !(create_temp_tables || drop_temp_tables);
+
+
+ const my_bool create_or_drop_databases=
+ (lex->sql_command == SQLCOM_CREATE_DB) ||
+ (lex->sql_command == SQLCOM_DROP_DB);
+
+ if (update_real_tables || create_or_drop_databases)
+ {
+ /*
+ An attempt was made to modify one or more non-temporary tables.
+ */
+ DBUG_RETURN(TRUE);
+ }
+
+
+ /* Assuming that only temporary tables are modified. */
+ DBUG_RETURN(FALSE);
+}
+
+/**
+ Perform one connection-level (COM_XXXX) command.
+
+ @param command type of command to perform
+ @param thd connection handle
+ @param packet data for the command, packet is always null-terminated
+ @param packet_length length of packet + 1 (to show that data is
+ null-terminated) except for COM_SLEEP, where it
+ can be zero.
+
+ @todo
+ set thd->lex->sql_command to SQLCOM_END here.
+ @todo
+ The following has to be changed to an 8 byte integer
+
+ @retval
0 ok
+ @retval
1 request of thread shutdown, i. e. if command is
COM_QUIT/COM_SHUTDOWN
*/
-
bool dispatch_command(enum enum_server_command command, THD *thd,
char* packet, uint packet_length)
{
NET *net= &thd->net;
bool error= 0;
DBUG_ENTER("dispatch_command");
-
- if (thd->killed == THD::KILL_QUERY || thd->killed == THD::KILL_BAD_DATA)
- {
- thd->killed= THD::NOT_KILLED;
- thd->mysys_var->abort= 0;
- }
+ DBUG_PRINT("info",("packet: '%*.s'; command: %d", packet_length, packet, command));
thd->command=command;
/*
@@ -825,7 +955,8 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
db.length= db_len;
tbl_name= strmake(db.str, packet + 1, db_len)+1;
strmake(tbl_name, packet + db_len + 2, tbl_len);
- mysql_table_dump(thd, &db, tbl_name);
+ if (mysql_table_dump(thd, &db, tbl_name) == 0)
+ thd->main_da.disable_status();
break;
}
case COM_CHANGE_USER:
@@ -911,15 +1042,11 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
/* Clear variables that are allocated */
thd->user_connect= 0;
+ thd->security_ctx->priv_user= thd->security_ctx->user;
res= check_user(thd, COM_CHANGE_USER, passwd, passwd_len, db, FALSE);
if (res)
{
- /* authentication failure, we shall restore old user */
- if (res > 0)
- my_message(ER_UNKNOWN_COM_ERROR, ER(ER_UNKNOWN_COM_ERROR), MYF(0));
- else
- thd->clear_error(); // Error already sent to client
x_free(thd->security_ctx->user);
*thd->security_ctx= save_security_ctx;
thd->user_connect= save_user_connect;
@@ -933,8 +1060,8 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
if (save_user_connect)
decrease_user_connections(save_user_connect);
#endif /* NO_EMBEDDED_ACCESS_CHECKS */
- x_free((uchar*) save_db);
- x_free((uchar*) save_security_ctx.user);
+ x_free(save_db);
+ x_free(save_security_ctx.user);
if (cs_number)
{
@@ -980,44 +1107,54 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
break; // fatal error is set
char *packet_end= thd->query + thd->query_length;
/* 'b' stands for 'buffer' parameter', special for 'my_snprintf' */
- const char* found_semicolon= NULL;
+ const char* end_of_stmt= NULL;
general_log_write(thd, command, thd->query, thd->query_length);
DBUG_PRINT("query",("%-.4096s",thd->query));
+#if defined(ENABLED_PROFILING) && defined(COMMUNITY_SERVER)
+ thd->profiling.set_query_source(thd->query, thd->query_length);
+#endif
if (!(specialflag & SPECIAL_NO_PRIOR))
my_pthread_setprio(pthread_self(),QUERY_PRIOR);
- mysql_parse(thd, thd->query, thd->query_length, & found_semicolon);
+ mysql_parse(thd, thd->query, thd->query_length, &end_of_stmt);
- while (!thd->killed && found_semicolon && !thd->net.report_error)
+ while (!thd->killed && (end_of_stmt != NULL) && ! thd->is_error())
{
- char *next_packet= (char*) found_semicolon;
- net->no_send_error= 0;
+ char *beginning_of_next_stmt= (char*) end_of_stmt;
+
+ net_end_statement(thd);
+ query_cache_end_of_result(thd);
/*
Multiple queries exits, execute them individually
*/
- if (thd->lock || thd->open_tables || thd->derived_tables ||
- thd->prelocked_mode)
- close_thread_tables(thd);
- ulong length= (ulong)(packet_end - next_packet);
+ close_thread_tables(thd);
+ ulong length= (ulong)(packet_end - beginning_of_next_stmt);
log_slow_statement(thd);
/* Remove garbage at start of query */
- while (my_isspace(thd->charset(), *next_packet) && length > 0)
+ while (length > 0 && my_isspace(thd->charset(), *beginning_of_next_stmt))
{
- next_packet++;
+ beginning_of_next_stmt++;
length--;
}
+
+#if defined(ENABLED_PROFILING) && defined(COMMUNITY_SERVER)
+ thd->profiling.finish_current_query();
+ thd->profiling.start_new_query("continuing");
+ thd->profiling.set_query_source(beginning_of_next_stmt, length);
+#endif
+
VOID(pthread_mutex_lock(&LOCK_thread_count));
thd->query_length= length;
- thd->query= next_packet;
+ thd->query= beginning_of_next_stmt;
thd->query_id= next_query_id();
thd->set_time(); /* Reset the query start time. */
/* TODO: set thd->lex->sql_command to SQLCOM_END here */
VOID(pthread_mutex_unlock(&LOCK_thread_count));
- mysql_parse(thd, next_packet, length, & found_semicolon);
+ mysql_parse(thd, beginning_of_next_stmt, length, &end_of_stmt);
}
if (!(specialflag & SPECIAL_NO_PRIOR))
@@ -1096,6 +1233,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
/* We don't calculate statistics for this command */
general_log_print(thd, command, NullS);
net->error=0; // Don't give 'abort' message
+ thd->main_da.disable_status(); // Don't send anything back
error=TRUE; // End server
break;
@@ -1172,7 +1310,6 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
unregister_slave(thd,1,1);
/* fake COM_QUIT -- if we get here, the thread needs to terminate */
error = TRUE;
- net->error = 0;
break;
}
#endif
@@ -1212,16 +1349,6 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
DBUG_PRINT("quit",("Got shutdown command for level %u", level));
general_log_print(thd, command, NullS);
send_eof(thd);
-#ifdef __WIN__
- sleep(1); // must wait after eof()
-#endif
- /*
- The client is next going to send a COM_QUIT request (as part of
- mysql_close()). Make the life simpler for the client by sending
- the response for the coming COM_QUIT in advance
- */
- send_eof(thd);
- close_connection(thd, 0, 1);
close_thread_tables(thd); // Free before kill
kill_mysql();
error=TRUE;
@@ -1234,13 +1361,8 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
ulong uptime;
uint length;
ulonglong queries_per_second1000;
-#ifndef EMBEDDED_LIBRARY
char buff[250];
uint buff_len= sizeof(buff);
-#else
- char *buff= thd->net.last_error;
- uint buff_len= sizeof(thd->net.last_error);
-#endif
general_log_print(thd, command, NullS);
status_var_increment(thd->status_var.com_stat[SQLCOM_SHOW_STATUS]);
@@ -1262,6 +1384,10 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
cached_open_tables(),
(uint) (queries_per_second1000 / 1000),
(uint) (queries_per_second1000 % 1000));
+#ifdef EMBEDDED_LIBRARY
+ /* Store the buffer in permanent memory */
+ send_ok(thd, 0, 0, buff);
+#endif
#ifdef SAFEMALLOC
if (sf_malloc_cur_memory) // Using SAFEMALLOC
{
@@ -1274,7 +1400,8 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
#endif
#ifndef EMBEDDED_LIBRARY
VOID(my_net_write(net, (uchar*) buff, length));
- VOID(net_flush(net));
+ VOID(net_flush(net));
+ thd->main_da.disable_status();
#endif
break;
}
@@ -1336,12 +1463,11 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
my_message(ER_UNKNOWN_COM_ERROR, ER(ER_UNKNOWN_COM_ERROR), MYF(0));
break;
}
- if (thd->lock || thd->open_tables || thd->derived_tables ||
- thd->prelocked_mode)
- {
- thd->proc_info="closing tables";
- close_thread_tables(thd); /* Free tables */
- }
+
+ thd_proc_info(thd, "closing tables");
+ /* Free tables */
+ close_thread_tables(thd);
+
/*
assume handlers auto-commit (if some doesn't - transaction handling
in MySQL should be redesigned to support it; it's a big change,
@@ -1355,16 +1481,25 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
thd->transaction.xid_state.xid.null();
/* report error issued during command execution */
- if (thd->killed_errno() && !thd->net.report_error)
- thd->send_kill_message();
- if (thd->net.report_error)
- net_send_error(thd);
+ if (thd->killed_errno())
+ {
+ if (! thd->main_da.is_set())
+ thd->send_kill_message();
+ }
+ if (thd->killed == THD::KILL_QUERY || thd->killed == THD::KILL_BAD_DATA)
+ {
+ thd->killed= THD::NOT_KILLED;
+ thd->mysys_var->abort= 0;
+ }
+
+ net_end_statement(thd);
+ query_cache_end_of_result(thd);
log_slow_statement(thd);
- thd->proc_info="cleaning up";
+ thd_proc_info(thd, "cleaning up");
VOID(pthread_mutex_lock(&LOCK_thread_count)); // For process list
- thd->proc_info=0;
+ thd_proc_info(thd, 0);
thd->command=COM_SLEEP;
thd->query=0;
thd->query_length=0;
@@ -1395,8 +1530,8 @@ void log_slow_statement(THD *thd)
if (thd->enable_slow_log && !thd->user_time)
{
ulonglong end_utime_of_query= thd->current_utime();
+ thd_proc_info(thd, "logging slow query");
- thd->proc_info="logging slow query";
if (((end_utime_of_query - thd->utime_after_lock) >
thd->variables.long_query_time ||
((thd->server_status &
@@ -1405,6 +1540,7 @@ void log_slow_statement(THD *thd)
!(sql_command_flags[thd->lex->sql_command] & CF_STATUS_COMMAND))) &&
thd->examined_row_count >= thd->variables.min_examined_row_limit)
{
+ thd_proc_info(thd, "logging slow query");
thd->status_var.long_query_count++;
slow_log_print(thd, thd->query, thd->query_length, end_utime_of_query);
}
@@ -1413,30 +1549,28 @@ void log_slow_statement(THD *thd)
}
-/*
+/**
Create a TABLE_LIST object for an INFORMATION_SCHEMA table.
- SYNOPSIS
- prepare_schema_table()
- thd thread handle
- lex current lex
- table_ident table alias if it's used
- schema_table_idx the type of the INFORMATION_SCHEMA table to be
- created
-
- DESCRIPTION
This function is used in the parser to convert a SHOW or DESCRIBE
table_name command to a SELECT from INFORMATION_SCHEMA.
It prepares a SELECT_LEX and a TABLE_LIST object to represent the
given command as a SELECT parse tree.
- NOTES
+ @param thd thread handle
+ @param lex current lex
+ @param table_ident table alias if it's used
+ @param schema_table_idx the type of the INFORMATION_SCHEMA table to be
+ created
+
+ @note
Due to the way this function works with memory and LEX it cannot
be used outside the parser (parse tree transformations outside
the parser break PS and SP).
- RETURN VALUE
+ @retval
0 success
+ @retval
1 out of memory or SHOW commands are not allowed
in this version of the server.
*/
@@ -1508,6 +1642,15 @@ int prepare_schema_table(THD *thd, LEX *lex, Table_ident *table_ident,
break;
}
#endif
+ case SCH_PROFILES:
+ /*
+ Mark this current profiling record to be discarded. We don't
+ wish to have SHOW commands show up in profiling.
+ */
+#if defined(ENABLED_PROFILING) && defined(COMMUNITY_SERVER)
+ thd->profiling.discard_current_query();
+#endif
+ break;
case SCH_OPEN_TABLES:
case SCH_VARIABLES:
case SCH_STATUS:
@@ -1538,17 +1681,17 @@ int prepare_schema_table(THD *thd, LEX *lex, Table_ident *table_ident,
}
-/*
- Read query from packet and store in thd->query
- Used in COM_QUERY and COM_STMT_PREPARE
+/**
+ Read query from packet and store in thd->query.
+ Used in COM_QUERY and COM_STMT_PREPARE.
- DESCRIPTION
Sets the following THD variables:
- query
- query_length
+ - query
+ - query_length
- RETURN VALUES
+ @retval
FALSE ok
+ @retval
TRUE error; In this case thd->fatal_error is set
*/
@@ -1687,14 +1830,8 @@ bool sp_process_definer(THD *thd)
}
-/*
- Execute command saved in thd and lex->sql_command
-
- SYNOPSIS
- mysql_execute_command()
- thd Thread handle
-
- IMPLEMENTATION
+/**
+ Execute command saved in thd and lex->sql_command.
Before every operation that can request a write lock for a table
wait if a global read lock exists. However do not wait if this
@@ -1706,8 +1843,20 @@ bool sp_process_definer(THD *thd)
global read lock when it succeeds. This needs to be released by
start_waiting_global_read_lock() after the operation.
- RETURN
+ @param thd Thread handle
+
+ @todo
+ - Invalidate the table in the query cache if something changed
+ after unlocking when changes become visible.
+ TODO: this is workaround. right way will be move invalidating in
+ the unlock procedure.
+ - TODO: use check_change_password()
+ - JOIN is not supported yet. TODO
+ - SUSPEND and FOR MIGRATE are not supported yet. TODO
+
+ @retval
FALSE OK
+ @retval
TRUE Error
*/
@@ -1728,7 +1877,6 @@ mysql_execute_command(THD *thd)
SELECT_LEX_UNIT *unit= &lex->unit;
/* Saved variable value */
DBUG_ENTER("mysql_execute_command");
- thd->net.no_send_error= 0;
#ifdef WITH_PARTITION_STORAGE_ENGINE
thd->work_part_info= 0;
#endif
@@ -1841,14 +1989,7 @@ mysql_execute_command(THD *thd)
When option readonly is set deny operations which change non-temporary
tables. Except for the replication thread and the 'super' users.
*/
- if (opt_readonly &&
- !(thd->security_ctx->master_access & SUPER_ACL) &&
- (sql_command_flags[lex->sql_command] & CF_CHANGES_DATA) &&
- !((lex->sql_command == SQLCOM_CREATE_TABLE) &&
- (lex->create_info.options & HA_LEX_CREATE_TMP_TABLE)) &&
- !((lex->sql_command == SQLCOM_DROP_TABLE) && lex->drop_temporary) &&
- ((lex->sql_command != SQLCOM_UPDATE_MULTI) &&
- some_non_temp_table_to_be_updated(thd, all_tables)))
+ if (deny_updates_if_read_only_option(thd, all_tables))
{
my_error(ER_OPTION_PREVENTS_STATEMENT, MYF(0), "--read-only");
DBUG_RETURN(-1);
@@ -1862,10 +2003,6 @@ mysql_execute_command(THD *thd)
switch (lex->sql_command) {
case SQLCOM_SHOW_EVENTS:
- if ((res= check_access(thd, EVENT_ACL, thd->lex->select_lex.db, 0, 0, 0,
- is_schema_db(thd->lex->select_lex.db))))
- break;
- /* fall through */
case SQLCOM_SHOW_STATUS_PROC:
case SQLCOM_SHOW_STATUS_FUNC:
res= execute_sqlcom_select(thd, all_tables);
@@ -1901,6 +2038,7 @@ mysql_execute_command(THD *thd)
case SQLCOM_SHOW_CHARSETS:
case SQLCOM_SHOW_COLLATIONS:
case SQLCOM_SHOW_STORAGE_ENGINES:
+ case SQLCOM_SHOW_PROFILE:
case SQLCOM_SELECT:
thd->status_var.last_query_cost= 0.0;
if (all_tables)
@@ -1996,6 +2134,19 @@ mysql_execute_command(THD *thd)
(1L << (uint) MYSQL_ERROR::WARN_LEVEL_ERROR));
break;
}
+ case SQLCOM_SHOW_PROFILES:
+ {
+#if defined(ENABLED_PROFILING) && defined(COMMUNITY_SERVER)
+ thd->profiling.discard_current_query();
+ res= thd->profiling.show_profiles();
+ if (res)
+ goto error;
+#else
+ my_error(ER_FEATURE_DISABLED, MYF(0), "SHOW PROFILES", "enable-profiling");
+ goto error;
+#endif
+ break;
+ }
case SQLCOM_SHOW_NEW_MASTER:
{
if (check_global_access(thd, REPL_SLAVE_ACL))
@@ -2087,7 +2238,16 @@ mysql_execute_command(THD *thd)
if (check_global_access(thd, SUPER_ACL | REPL_CLIENT_ACL))
goto error;
pthread_mutex_lock(&LOCK_active_mi);
- res = show_master_info(thd,active_mi);
+ if (active_mi != NULL)
+ {
+ res = show_master_info(thd, active_mi);
+ }
+ else
+ {
+ push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN, 0,
+ "the master info structure does not exist");
+ send_ok(thd);
+ }
pthread_mutex_unlock(&LOCK_active_mi);
break;
}
@@ -2261,6 +2421,19 @@ mysql_execute_command(THD *thd)
select_lex->options|= SELECT_NO_UNLOCK;
unit->set_limit(select_lex);
+ /*
+ Disable non-empty MERGE tables with CREATE...SELECT. Too
+ complicated. See Bug #26379. Empty MERGE tables are read-only
+ and don't allow CREATE...SELECT anyway.
+ */
+ if (create_info.used_fields & HA_CREATE_USED_UNION)
+ {
+ my_error(ER_WRONG_OBJECT, MYF(0), create_table->db,
+ create_table->table_name, "BASE TABLE");
+ res= 1;
+ goto end_with_restore_list;
+ }
+
if (!(create_info.options & HA_LEX_CREATE_TMP_TABLE))
{
lex->link_first_table_back(create_table, link_to_local);
@@ -2921,7 +3094,7 @@ end_with_restore_list:
if (add_item_to_list(thd, new Item_null()))
goto error;
- thd->proc_info="init";
+ thd_proc_info(thd, "init");
if ((res= open_and_lock_tables(thd, all_tables)))
break;
@@ -2942,6 +3115,9 @@ end_with_restore_list:
SELECT_NO_JOIN_CACHE | SELECT_NO_UNLOCK |
OPTION_SETUP_TABLES_DONE,
del_result, unit, select_lex);
+ res|= thd->is_error();
+ if (res)
+ del_result->abort();
delete del_result;
}
else
@@ -3053,6 +3229,10 @@ end_with_restore_list:
case SQLCOM_SET_OPTION:
{
List<set_var_base> *lex_var_list= &lex->var_list;
+
+ if (lex->autocommit && end_active_trans(thd))
+ goto error;
+
if ((check_table_access(thd, SELECT_ACL, all_tables, 0) ||
open_and_lock_tables(thd, all_tables)))
goto error;
@@ -3084,7 +3264,7 @@ end_with_restore_list:
if (thd->options & OPTION_TABLE_LOCK)
{
end_active_trans(thd);
- thd->options&= ~(ulong) (OPTION_TABLE_LOCK);
+ thd->options&= ~(OPTION_TABLE_LOCK);
}
if (thd->global_read_lock)
unlock_global_read_lock(thd);
@@ -3118,7 +3298,7 @@ end_with_restore_list:
that it can't lock a table in its list
*/
end_active_trans(thd);
- thd->options&= ~(ulong) (OPTION_TABLE_LOCK);
+ thd->options&= ~(OPTION_TABLE_LOCK);
}
thd->in_lock_tables=0;
break;
@@ -3870,8 +4050,6 @@ create_sp_error:
goto error;
}
- my_bool save_no_send_ok= thd->net.no_send_ok;
- thd->net.no_send_ok= TRUE;
if (sp->m_flags & sp_head::MULTI_RESULTS)
{
if (! (thd->client_capabilities & CLIENT_MULTI_RESULTS))
@@ -3881,7 +4059,6 @@ create_sp_error:
back
*/
my_error(ER_SP_BADSELECT, MYF(0), sp->m_qname.str);
- thd->net.no_send_ok= save_no_send_ok;
goto error;
}
/*
@@ -3893,14 +4070,11 @@ create_sp_error:
thd->server_status|= SERVER_MORE_RESULTS_EXISTS;
}
-#ifndef NO_EMBEDDED_ACCESS_CHECKS
if (check_routine_access(thd, EXECUTE_ACL,
sp->m_db.str, sp->m_name.str, TRUE, FALSE))
{
- thd->net.no_send_ok= save_no_send_ok;
goto error;
}
-#endif
select_limit= thd->variables.select_limit;
thd->variables.select_limit= HA_POS_ERROR;
@@ -3922,7 +4096,6 @@ create_sp_error:
thd->variables.select_limit= select_limit;
- thd->net.no_send_ok= save_no_send_ok;
thd->server_status&= ~bits_to_be_cleared;
if (!res)
@@ -3930,7 +4103,7 @@ create_sp_error:
thd->row_count_func));
else
{
- DBUG_ASSERT(thd->net.report_error == 1 || thd->killed);
+ DBUG_ASSERT(thd->is_error() || thd->killed);
goto error; // Substatement should already have sent error
}
}
@@ -4484,8 +4657,7 @@ create_sp_error:
send_ok(thd);
break;
}
-
- thd->proc_info="query end";
+ thd_proc_info(thd, "query end");
/*
Binlog-related cleanup:
@@ -4523,7 +4695,7 @@ finish:
*/
start_waiting_global_read_lock(thd);
}
- DBUG_RETURN(res || thd->net.report_error);
+ DBUG_RETURN(res || thd->is_error());
}
@@ -4563,7 +4735,10 @@ static bool execute_sqlcom_select(THD *thd, TABLE_LIST *all_tables)
push_warning(thd, MYSQL_ERROR::WARN_LEVEL_NOTE,
ER_YES, str.ptr());
}
- result->send_eof();
+ if (res)
+ result->abort();
+ else
+ result->send_eof();
delete result;
}
else
@@ -4580,20 +4755,20 @@ static bool execute_sqlcom_select(THD *thd, TABLE_LIST *all_tables)
}
-/*
+#ifndef NO_EMBEDDED_ACCESS_CHECKS
+/**
Check grants for commands which work only with one table.
- SYNOPSIS
- check_single_table_access()
- thd Thread handler
- privilege requested privilege
- all_tables global table list of query
- no_errors FALSE/TRUE - report/don't report error to
+ @param thd Thread handler
+ @param privilege requested privilege
+ @param all_tables global table list of query
+ @param no_errors FALSE/TRUE - report/don't report error to
the client (using my_error() call).
- RETURN
- 0 - OK
- 1 - access denied, error is sent to client
+ @retval
+ 0 OK
+ @retval
+ 1 access denied, error is sent to client
*/
bool check_single_table_access(THD *thd, ulong privilege,
@@ -4631,19 +4806,18 @@ deny:
return 1;
}
-/*
+/**
Check grants for commands which work only with one table and all other
tables belonging to subselects or implicitly opened tables.
- SYNOPSIS
- check_one_table_access()
- thd Thread handler
- privilege requested privilege
- all_tables global table list of query
+ @param thd Thread handler
+ @param privilege requested privilege
+ @param all_tables global table list of query
- RETURN
- 0 - OK
- 1 - access denied, error is sent to client
+ @retval
+ 0 OK
+ @retval
+ 1 access denied, error is sent to client
*/
bool check_one_table_access(THD *thd, ulong privilege, TABLE_LIST *all_tables)
@@ -4673,31 +4847,31 @@ bool check_one_table_access(THD *thd, ulong privilege, TABLE_LIST *all_tables)
}
-/****************************************************************************
- Get the user (global) and database privileges for all used tables
+/**
+ Get the user (global) and database privileges for all used tables.
- NOTES
+ @param save_priv In this we store global and db level grants for the
+ table. Note that we don't store db level grants if the
+ global grants is enough to satisfy the request and the
+ global grants contains a SELECT grant.
+
+ @note
The idea of EXTRA_ACL is that one will be granted access to the table if
one has the asked privilege on any column combination of the table; For
example to be able to check a table one needs to have SELECT privilege on
any column of the table.
- RETURN
+ @retval
0 ok
- 1 If we can't get the privileges and we don't use table/column grants.
-
- save_priv In this we store global and db level grants for the table
- Note that we don't store db level grants if the global grants
- is enough to satisfy the request and the global grants contains
- a SELECT grant.
-****************************************************************************/
-
+ @retval
+ 1 If we can't get the privileges and we don't use table/column
+ grants.
+*/
bool
check_access(THD *thd, ulong want_access, const char *db, ulong *save_priv,
bool dont_check_global_grants, bool no_errors, bool schema_db)
{
Security_context *sctx= thd->security_ctx;
-#ifndef NO_EMBEDDED_ACCESS_CHECKS
ulong db_access;
/*
GRANT command:
@@ -4710,7 +4884,6 @@ check_access(THD *thd, ulong want_access, const char *db, ulong *save_priv,
*/
bool db_is_pattern= (test(want_access & GRANT_ACL) &&
dont_check_global_grants);
-#endif
ulong dummy;
DBUG_ENTER("check_access");
DBUG_PRINT("enter",("db: %s want_access: %lu master_access: %lu",
@@ -4720,6 +4893,7 @@ check_access(THD *thd, ulong want_access, const char *db, ulong *save_priv,
else
save_priv= &dummy;
+ thd_proc_info(thd, "checking permissions");
if ((!db || !db[0]) && !thd->db && !dont_check_global_grants)
{
DBUG_PRINT("error",("No database"));
@@ -4749,9 +4923,6 @@ check_access(THD *thd, ulong want_access, const char *db, ulong *save_priv,
}
}
-#ifdef NO_EMBEDDED_ACCESS_CHECKS
- DBUG_RETURN(0);
-#else
if ((sctx->master_access & want_access) == want_access)
{
/*
@@ -4809,41 +4980,35 @@ check_access(THD *thd, ulong want_access, const char *db, ulong *save_priv,
thd->db :
"unknown"))); /* purecov: tested */
DBUG_RETURN(TRUE); /* purecov: tested */
-#endif /* NO_EMBEDDED_ACCESS_CHECKS */
}
-/*
- check for global access and give descriptive error message if it fails
+/**
+ check for global access and give descriptive error message if it fails.
- SYNOPSIS
- check_global_access()
- thd Thread handler
- want_access Use should have any of these global rights
+ @param thd Thread handler
+ @param want_access Use should have any of these global rights
- WARNING
- One gets access right if one has ANY of the rights in want_access
+ @warning
+ One gets access right if one has ANY of the rights in want_access.
This is useful as one in most cases only need one global right,
but in some case we want to check if the user has SUPER or
REPL_CLIENT_ACL rights.
- RETURN
+ @retval
0 ok
+ @retval
1 Access denied. In this case an error is sent to the client
*/
bool check_global_access(THD *thd, ulong want_access)
{
-#ifdef NO_EMBEDDED_ACCESS_CHECKS
- return 0;
-#else
char command[128];
if ((thd->security_ctx->master_access & want_access))
return 0;
get_privilege_desc(command, sizeof(command), want_access);
my_error(ER_SPECIFIC_ACCESS_DENIED_ERROR, MYF(0), command);
return 1;
-#endif /* NO_EMBEDDED_ACCESS_CHECKS */
}
@@ -4906,36 +5071,33 @@ static bool check_show_access(THD *thd, TABLE_LIST *table)
}
-/*
+/**
Check the privilege for all used tables.
- SYNOPSYS
- check_table_access()
- thd Thread context
- want_access Privileges requested
- tables List of tables to be checked
- no_errors FALSE/TRUE - report/don't report error to
+ @param thd Thread context
+ @param want_access Privileges requested
+ @param tables List of tables to be checked
+ @param no_errors FALSE/TRUE - report/don't report error to
the client (using my_error() call).
- NOTES
+ @note
Table privileges are cached in the table list for GRANT checking.
This functions assumes that table list used and
thd->lex->query_tables_own_last value correspond to each other
(the latter should be either 0 or point to next_global member
of one of elements of this table list).
- RETURN VALUE
- FALSE - OK
- TRUE - Access denied
+ @retval
+ FALSE OK
+ @retval
+ TRUE Access denied
*/
bool
check_table_access(THD *thd, ulong want_access,TABLE_LIST *tables,
bool no_errors)
{
-#ifndef NO_EMBEDDED_ACCESS_CHECKS
TABLE_LIST *org_tables= tables;
-#endif
TABLE_LIST *first_not_own_table= thd->lex->first_not_own_table();
Security_context *sctx= thd->security_ctx, *backup_ctx= thd->security_ctx;
/*
@@ -5022,25 +5184,20 @@ check_routine_access(THD *thd, ulong want_access,char *db, char *name,
0, no_errors, 0))
return TRUE;
-#ifndef NO_EMBEDDED_ACCESS_CHECKS
return check_grant_routine(thd, want_access, tables, is_proc, no_errors);
-#else
- return FALSE;
-#endif
}
-/*
- Check if the routine has any of the routine privileges
+/**
+ Check if the routine has any of the routine privileges.
- SYNOPSIS
- check_some_routine_access()
- thd Thread handler
- db Database name
- name Routine name
+ @param thd Thread handler
+ @param db Database name
+ @param name Routine name
- RETURN
+ @retval
0 ok
+ @retval
1 error
*/
@@ -5064,17 +5221,15 @@ bool check_some_routine_access(THD *thd, const char *db, const char *name,
/*
Check if the given table has any of the asked privileges
- SYNOPSIS
- check_some_access()
- thd Thread handler
- want_access Bitmap of possible privileges to check for
+ @param thd Thread handler
+ @param want_access Bitmap of possible privileges to check for
- RETURN
+ @retval
0 ok
+ @retval
1 error
*/
-
bool check_some_access(THD *thd, ulong want_access, TABLE_LIST *table)
{
ulong access;
@@ -5096,26 +5251,7 @@ bool check_some_access(THD *thd, ulong want_access, TABLE_LIST *table)
DBUG_RETURN(1);
}
-
-bool check_merge_table_access(THD *thd, char *db,
- TABLE_LIST *table_list)
-{
- int error=0;
- if (table_list)
- {
- /* Check that all tables use the current database */
- TABLE_LIST *tmp;
- for (tmp= table_list; tmp; tmp= tmp->next_local)
- {
- if (!tmp->db || !tmp->db[0])
- tmp->db=db;
- }
- error=check_table_access(thd, SELECT_ACL | UPDATE_ACL | DELETE_ACL,
- table_list,0);
- }
- return error;
-}
-
+#endif /*NO_EMBEDDED_ACCESS_CHECKS*/
/****************************************************************************
Check stack size; Send error if there isn't enough stack to continue
@@ -5133,12 +5269,13 @@ bool check_merge_table_access(THD *thd, char *db,
long max_stack_used;
#endif
-/*
+/**
+ @note
Note: The 'buf' parameter is necessary, even if it is unused here.
- fix_fields functions has a "dummy" buffer large enough for the
corresponding exec. (Thus we only have to check in fix_fields.)
- Passing to check_stack_overrun() prevents the compiler from removing it.
- */
+*/
bool check_stack_overrun(THD *thd, long margin,
uchar *buf __attribute__((unused)))
{
@@ -5192,17 +5329,17 @@ bool my_yyoverflow(short **yyss, YYSTYPE **yyvs, ulong *yystacksize)
}
-/*
+/**
Reset THD part responsible for command processing state.
- DESCRIPTION
This needs to be called before execution of every statement
(prepared or conventional).
It is not called by substatements of routines.
- TODO
+ @todo
Make it a method of THD and align its name with the rest of
reset/end/start/init methods.
+ @todo
Call it after we use THD for queries, not before.
*/
@@ -5210,6 +5347,7 @@ void mysql_reset_thd_for_next_command(THD *thd)
{
DBUG_ENTER("mysql_reset_thd_for_next_command");
DBUG_ASSERT(!thd->spcont); /* not for substatements of routines */
+ DBUG_ASSERT(! thd->in_sub_stmt);
thd->free_list= 0;
thd->select_number= 1;
/*
@@ -5236,18 +5374,18 @@ void mysql_reset_thd_for_next_command(THD *thd)
}
DBUG_ASSERT(thd->security_ctx== &thd->main_security_ctx);
thd->thread_specific_used= FALSE;
- if (!thd->in_sub_stmt)
+
+ if (opt_bin_log)
{
- if (opt_bin_log)
- {
- reset_dynamic(&thd->user_var_events);
- thd->user_var_events_alloc= thd->mem_root;
- }
- thd->clear_error();
- thd->total_warn_count=0; // Warnings for this query
- thd->rand_used= 0;
- thd->sent_row_count= thd->examined_row_count= 0;
+ reset_dynamic(&thd->user_var_events);
+ thd->user_var_events_alloc= thd->mem_root;
}
+ thd->clear_error();
+ thd->main_da.reset_diagnostics_area();
+ thd->total_warn_count=0; // Warnings for this query
+ thd->rand_used= 0;
+ thd->sent_row_count= thd->examined_row_count= 0;
+
/*
Because we come here only for start of top-statements, binlog format is
constant inside a complex statement (using stored functions) etc.
@@ -5347,17 +5485,14 @@ mysql_new_select(LEX *lex, bool move_down)
DBUG_RETURN(0);
}
-/*
+/**
Create a select to return the same output as 'SELECT @@var_name'.
- SYNOPSIS
- create_select_for_variable()
- var_name Variable name
+ Used for SHOW COUNT(*) [ WARNINGS | ERROR].
- DESCRIPTION
- Used for SHOW COUNT(*) [ WARNINGS | ERROR]
+ This will crash with a core dump if the variable doesn't exists.
- This will crash with a core dump if the variable doesn't exists
+ @param var_name Variable name
*/
void create_select_for_variable(const char *var_name)
@@ -5467,7 +5602,7 @@ void mysql_parse(THD *thd, const char *inBuf, uint length,
else
#endif
{
- if (! thd->net.report_error)
+ if (! thd->is_error())
{
/*
Binlog logs a string starting from thd->query and having length
@@ -5485,13 +5620,12 @@ void mysql_parse(THD *thd, const char *inBuf, uint length,
/* Actually execute the query */
lex->set_trg_event_type_for_tables();
mysql_execute_command(thd);
- query_cache_end_of_result(thd);
}
}
}
else
{
- DBUG_ASSERT(thd->net.report_error);
+ DBUG_ASSERT(thd->is_error());
DBUG_PRINT("info",("Command aborted. Fatal_error: %d",
thd->is_fatal_error));
@@ -5503,7 +5637,7 @@ void mysql_parse(THD *thd, const char *inBuf, uint length,
thd->lex->sphead= 0;
}
lex->unit.cleanup();
- thd->proc_info="freeing items";
+ thd_proc_info(thd, "freeing items");
thd->end_statement();
thd->cleanup_after_query();
DBUG_ASSERT(thd->change_list.is_empty());
@@ -5523,8 +5657,9 @@ void mysql_parse(THD *thd, const char *inBuf, uint length,
Usable by the replication SQL thread only: just parse a query to know if it
can be ignored because of replicate-*-table rules.
- RETURN VALUES
+ @retval
0 cannot be ignored
+ @retval
1 can be ignored
*/
@@ -5549,10 +5684,12 @@ bool mysql_test_parse_for_slave(THD *thd, char *inBuf, uint length)
-/*****************************************************************************
-** Store field definition for create
-** Return 0 if ok
-******************************************************************************/
+/**
+ Store field definition for create.
+
+ @return
+ Return 0 if ok
+*/
bool add_field_to_list(THD *thd, LEX_STRING *field_name, enum_field_types type,
char *length, char *decimals,
@@ -5656,7 +5793,7 @@ bool add_field_to_list(THD *thd, LEX_STRING *field_name, enum_field_types type,
}
-/* Store position for column in ALTER TABLE .. ADD column */
+/** Store position for column in ALTER TABLE .. ADD column. */
void store_position_for_column(const char *name)
{
@@ -5680,10 +5817,9 @@ add_proc_to_list(THD* thd, Item *item)
}
-/****************************************************************************
-** save order by and tables in own lists
-****************************************************************************/
-
+/**
+ save order by and tables in own lists.
+*/
bool add_to_list(THD *thd, SQL_LIST &list,Item *item,bool asc)
{
@@ -5702,24 +5838,23 @@ bool add_to_list(THD *thd, SQL_LIST &list,Item *item,bool asc)
}
-/*
- Add a table to list of used tables
-
- SYNOPSIS
- add_table_to_list()
- table Table to add
- alias alias for table (or null if no alias)
- table_options A set of the following bits:
- TL_OPTION_UPDATING Table will be updated
- TL_OPTION_FORCE_INDEX Force usage of index
- TL_OPTION_ALIAS an alias in multi table DELETE
- lock_type How table should be locked
- use_index List of indexed used in USE INDEX
- ignore_index List of indexed used in IGNORE INDEX
-
- RETURN
+/**
+ Add a table to list of used tables.
+
+ @param table Table to add
+ @param alias alias for table (or null if no alias)
+ @param table_options A set of the following bits:
+ - TL_OPTION_UPDATING : Table will be updated
+ - TL_OPTION_FORCE_INDEX : Force usage of index
+ - TL_OPTION_ALIAS : an alias in multi table DELETE
+ @param lock_type How table should be locked
+ @param use_index List of indexed used in USE INDEX
+ @param ignore_index List of indexed used in IGNORE INDEX
+
+ @retval
0 Error
- # Pointer to TABLE_LIST element added to the total table list
+ @retval
+ \# Pointer to TABLE_LIST element added to the total table list
*/
TABLE_LIST *st_select_lex::add_table_to_list(THD *thd,
@@ -5791,7 +5926,12 @@ TABLE_LIST *st_select_lex::add_table_to_list(THD *thd,
ST_SCHEMA_TABLE *schema_table= find_schema_table(thd, ptr->table_name);
if (!schema_table ||
(schema_table->hidden &&
- (sql_command_flags[lex->sql_command] & CF_STATUS_COMMAND) == 0))
+ ((sql_command_flags[lex->sql_command] & CF_STATUS_COMMAND) == 0 ||
+ /*
+ this check is used for show columns|keys from I_S hidden table
+ */
+ lex->sql_command == SQLCOM_SHOW_FIELDS ||
+ lex->sql_command == SQLCOM_SHOW_KEYS)))
{
my_error(ER_UNKNOWN_TABLE, MYF(0),
ptr->table_name, INFORMATION_SCHEMA_NAME.str);
@@ -5857,14 +5997,9 @@ TABLE_LIST *st_select_lex::add_table_to_list(THD *thd,
}
-/*
- Initialize a new table list for a nested join
-
- SYNOPSIS
- init_nested_join()
- thd current thread
+/**
+ Initialize a new table list for a nested join.
- DESCRIPTION
The function initializes a structure of the TABLE_LIST type
for a nested join. It sets up its nested join list as empty.
The created structure is added to the front of the current
@@ -5873,9 +6008,12 @@ TABLE_LIST *st_select_lex::add_table_to_list(THD *thd,
created empty list after having saved the info on the old level
in the initialized structure.
- RETURN VALUE
- 0, if success
- 1, otherwise
+ @param thd current thread
+
+ @retval
+ 0 if success
+ @retval
+ 1 otherwise
*/
bool st_select_lex::init_nested_join(THD *thd)
@@ -5901,21 +6039,18 @@ bool st_select_lex::init_nested_join(THD *thd)
}
-/*
- End a nested join table list
-
- SYNOPSIS
- end_nested_join()
- thd current thread
+/**
+ End a nested join table list.
- DESCRIPTION
The function returns to the previous join nest level.
If the current level contains only one member, the function
moves it one level up, eliminating the nest.
- RETURN VALUE
- Pointer to TABLE_LIST element added to the total table list, if success
- 0, otherwise
+ @param thd current thread
+
+ @return
+ - Pointer to TABLE_LIST element added to the total table list, if success
+ - 0, otherwise
*/
TABLE_LIST *st_select_lex::end_nested_join(THD *thd)
@@ -5947,20 +6082,17 @@ TABLE_LIST *st_select_lex::end_nested_join(THD *thd)
}
-/*
- Nest last join operation
-
- SYNOPSIS
- nest_last_join()
- thd current thread
+/**
+ Nest last join operation.
- DESCRIPTION
The function nest last join operation as if it was enclosed in braces.
- RETURN VALUE
- 0 Error
- # Pointer to TABLE_LIST element created for the new nested join
+ @param thd current thread
+ @retval
+ 0 Error
+ @retval
+ \# Pointer to TABLE_LIST element created for the new nested join
*/
TABLE_LIST *st_select_lex::nest_last_join(THD *thd)
@@ -6005,20 +6137,17 @@ TABLE_LIST *st_select_lex::nest_last_join(THD *thd)
}
-/*
- Add a table to the current join list
-
- SYNOPSIS
- add_joined_table()
- table the table to add
+/**
+ Add a table to the current join list.
- DESCRIPTION
The function puts a table in front of the current join list
of st_select_lex object.
Thus, joined tables are put into this list in the reverse order
(the most outer join operation follows first).
- RETURN VALUE
+ @param table the table to add
+
+ @return
None
*/
@@ -6032,14 +6161,9 @@ void st_select_lex::add_joined_table(TABLE_LIST *table)
}
-/*
- Convert a right join into equivalent left join
-
- SYNOPSIS
- convert_right_join()
- thd current thread
+/**
+ Convert a right join into equivalent left join.
- DESCRIPTION
The function takes the current join list t[0],t[1] ... and
effectively converts it into the list t[1],t[0] ...
Although the outer_join flag for the new nested table contains
@@ -6047,6 +6171,7 @@ void st_select_lex::add_joined_table(TABLE_LIST *table)
operation.
EXAMPLES
+ @verbatim
SELECT * FROM t1 RIGHT JOIN t2 ON on_expr =>
SELECT * FROM t2 LEFT JOIN t1 ON on_expr
@@ -6058,10 +6183,13 @@ void st_select_lex::add_joined_table(TABLE_LIST *table)
SELECT * FROM t1 LEFT JOIN t2 ON on_expr1 RIGHT JOIN t3 ON on_expr2 =>
SELECT * FROM t3 LEFT JOIN (t1 LEFT JOIN t2 ON on_expr2) ON on_expr1
+ @endverbatim
- RETURN
- Pointer to the table representing the inner table, if success
- 0, otherwise
+ @param thd current thread
+
+ @return
+ - Pointer to the table representing the inner table, if success
+ - 0, otherwise
*/
TABLE_LIST *st_select_lex::convert_right_join()
@@ -6077,14 +6205,12 @@ TABLE_LIST *st_select_lex::convert_right_join()
DBUG_RETURN(tab1);
}
-/*
- Set lock for all tables in current select level
+/**
+ Set lock for all tables in current select level.
- SYNOPSIS:
- set_lock_for_tables()
- lock_type Lock to set for tables
+ @param lock_type Lock to set for tables
- NOTE:
+ @note
If lock is a write lock, then tables->updating is set 1
This is to get tables_ok to know that the table is updated by the
query
@@ -6108,27 +6234,29 @@ void st_select_lex::set_lock_for_tables(thr_lock_type lock_type)
}
-/*
- Create a fake SELECT_LEX for a unit
-
- SYNOPSIS:
- add_fake_select_lex()
- thd thread handle
+/**
+ Create a fake SELECT_LEX for a unit.
- DESCRIPTION
The method create a fake SELECT_LEX object for a unit.
This object is created for any union construct containing a union
operation and also for any single select union construct of the form
+ @verbatim
(SELECT ... ORDER BY order_list [LIMIT n]) ORDER BY ...
+ @endvarbatim
or of the form
+ @varbatim
(SELECT ... ORDER BY LIMIT n) ORDER BY ...
+ @endvarbatim
- NOTES
+ @param thd_arg thread handle
+
+ @note
The object is used to retrieve rows from the temporary table
where the result on the union is obtained.
- RETURN VALUES
+ @retval
1 on failure to create the object
+ @retval
0 on success
*/
@@ -6170,24 +6298,22 @@ bool st_select_lex_unit::add_fake_select_lex(THD *thd_arg)
}
-/*
+/**
Push a new name resolution context for a JOIN ... ON clause to the
context stack of a query block.
- SYNOPSIS
- push_new_name_resolution_context()
- thd pointer to current thread
- left_op left operand of the JOIN
- right_op rigth operand of the JOIN
-
- DESCRIPTION
Create a new name resolution context for a JOIN ... ON clause,
set the first and last leaves of the list of table references
to be used for name resolution, and push the newly created
context to the stack of contexts of the query.
- RETURN
+ @param thd pointer to current thread
+ @param left_op left operand of the JOIN
+ @param right_op rigth operand of the JOIN
+
+ @retval
FALSE if all is OK
+ @retval
TRUE if a memory allocation error occured
*/
@@ -6207,19 +6333,17 @@ push_new_name_resolution_context(THD *thd,
}
-/*
+/**
Add an ON condition to the second operand of a JOIN ... ON.
- SYNOPSIS
- add_join_on
- b the second operand of a JOIN ... ON
- expr the condition to be added to the ON clause
-
- DESCRIPTION
Add an ON condition to the right operand of a JOIN ... ON clause.
- RETURN
+ @param b the second operand of a JOIN ... ON
+ @param expr the condition to be added to the ON clause
+
+ @retval
FALSE if there was some error
+ @retval
TRUE if all is OK
*/
@@ -6243,18 +6367,10 @@ void add_join_on(TABLE_LIST *b, Item *expr)
}
-/*
+/**
Mark that there is a NATURAL JOIN or JOIN ... USING between two
tables.
- SYNOPSIS
- add_join_natural()
- a Left join argument
- b Right join argument
- using_fields Field names from USING clause
- lex The current st_select_lex
-
- IMPLEMENTATION
This function marks that table b should be joined with a either via
a NATURAL JOIN or via JOIN ... USING. Both join types are special
cases of each other, so we treat them together. The function
@@ -6265,6 +6381,7 @@ void add_join_on(TABLE_LIST *b, Item *expr)
was an outer join.
EXAMPLE
+ @verbatim
SELECT * FROM t1 NATURAL LEFT JOIN t2
<=>
SELECT * FROM t1 LEFT JOIN t2 ON (t1.i=t2.i and t1.j=t2.j ... )
@@ -6276,9 +6393,11 @@ void add_join_on(TABLE_LIST *b, Item *expr)
SELECT * FROM t1 JOIN t2 USING(j) WHERE <some_cond>
<=>
SELECT * FROM t1, t2 WHERE (t1.j=t2.j and <some_cond>)
+ @endverbatim
- RETURN
- None
+ @param a Left join argument
+ @param b Right join argument
+ @param using_fields Field names from USING clause
*/
void add_join_natural(TABLE_LIST *a, TABLE_LIST *b, List<String> *using_fields,
@@ -6289,24 +6408,23 @@ void add_join_natural(TABLE_LIST *a, TABLE_LIST *b, List<String> *using_fields,
}
-/*
+/**
Reload/resets privileges and the different caches.
- SYNOPSIS
- reload_acl_and_cache()
- thd Thread handler (can be NULL!)
- options What should be reset/reloaded (tables, privileges,
- slave...)
- tables Tables to flush (if any)
- write_to_binlog Depending on 'options', it may be very bad to write the
- query to the binlog (e.g. FLUSH SLAVE); this is a
- pointer where reload_acl_and_cache() will put 0 if
- it thinks we really should not write to the binlog.
- Otherwise it will put 1.
-
- RETURN
- 0 ok
- !=0 error. thd->killed or thd->net.report_error is set
+ @param thd Thread handler (can be NULL!)
+ @param options What should be reset/reloaded (tables, privileges, slave...)
+ @param tables Tables to flush (if any)
+ @param write_to_binlog True if we can write to the binlog.
+
+ @note Depending on 'options', it may be very bad to write the
+ query to the binlog (e.g. FLUSH SLAVE); this is a
+ pointer where reload_acl_and_cache() will put 0 if
+ it thinks we really should not write to the binlog.
+ Otherwise it will put 1.
+
+ @return Error status code
+ @retval 0 Ok
+ @retval !=0 Error; thd->killed is set or thd->is_error() is true
*/
bool reload_acl_and_cache(THD *thd, ulong options, TABLE_LIST *tables,
@@ -6333,8 +6451,10 @@ bool reload_acl_and_cache(THD *thd, ulong options, TABLE_LIST *tables,
}
if (thd)
{
- (void)acl_reload(thd);
- (void)grant_reload(thd);
+ if (acl_reload(thd))
+ result= 1;
+ if (grant_reload(thd))
+ result= 1;
}
if (tmp_thd)
{
@@ -6410,7 +6530,7 @@ bool reload_acl_and_cache(THD *thd, ulong options, TABLE_LIST *tables,
for (; lock_p < end_p; lock_p++)
{
- if ((*lock_p)->type == TL_WRITE)
+ if ((*lock_p)->type >= TL_WRITE_ALLOW_WRITE)
{
my_error(ER_LOCK_OR_ACTIVE_TRANSACTION, MYF(0));
return 1;
@@ -6424,8 +6544,8 @@ bool reload_acl_and_cache(THD *thd, ulong options, TABLE_LIST *tables,
tmp_write_to_binlog= 0;
if (lock_global_read_lock(thd))
return 1; // Killed
- result=close_cached_tables(thd,(options & REFRESH_FAST) ? 0 : 1,
- tables);
+ result= close_cached_tables(thd, tables, FALSE, (options & REFRESH_FAST) ?
+ FALSE : TRUE, TRUE);
if (make_global_read_lock_block_commit(thd)) // Killed
{
/* Don't leave things in a half-locked state */
@@ -6434,7 +6554,8 @@ bool reload_acl_and_cache(THD *thd, ulong options, TABLE_LIST *tables,
}
}
else
- result=close_cached_tables(thd,(options & REFRESH_FAST) ? 0 : 1, tables);
+ result= close_cached_tables(thd, tables, FALSE, (options & REFRESH_FAST) ?
+ FALSE : TRUE, FALSE);
my_dbopt_cleanup();
}
if (options & REFRESH_HOSTS)
@@ -6451,7 +6572,6 @@ bool reload_acl_and_cache(THD *thd, ulong options, TABLE_LIST *tables,
if (reset_master(thd))
{
result=1;
- thd->fatal_error(); // Ensure client get error
}
}
#endif
@@ -6479,16 +6599,14 @@ bool reload_acl_and_cache(THD *thd, ulong options, TABLE_LIST *tables,
}
-/*
- kills a thread
+/**
+ kill on thread.
- SYNOPSIS
- kill_one_thread()
- thd Thread class
- id Thread id
- only_kill_query Should it kill the query or the connection
+ @param thd Thread class
+ @param id Thread id
+ @param only_kill_query Should it kill the query or the connection
- NOTES
+ @note
This is written such that we have a short lock on LOCK_thread_count
*/
@@ -6548,7 +6666,7 @@ void sql_kill(THD *thd, ulong id, bool only_kill_query)
}
- /* If pointer is not a null pointer, append filename to it */
+/** If pointer is not a null pointer, append filename to it. */
bool append_file_to_dir(THD *thd, const char **filename_ptr,
const char *table_name)
@@ -6575,14 +6693,12 @@ bool append_file_to_dir(THD *thd, const char **filename_ptr,
}
-/*
- Check if the select is a simple select (not an union)
-
- SYNOPSIS
- check_simple_select()
+/**
+ Check if the select is a simple select (not an union).
- RETURN VALUES
+ @retval
0 ok
+ @retval
1 error ; In this case the error messege is sent to the client
*/
@@ -6639,17 +6755,15 @@ Comp_creator *comp_ne_creator(bool invert)
}
-/*
- Construct ALL/ANY/SOME subquery Item
+/**
+ Construct ALL/ANY/SOME subquery Item.
- SYNOPSIS
- all_any_subquery_creator()
- left_expr - pointer to left expression
- cmp - compare function creator
- all - true if we create ALL subquery
- select_lex - pointer on parsed subquery structure
+ @param left_expr pointer to left expression
+ @param cmp compare function creator
+ @param all true if we create ALL subquery
+ @param select_lex pointer on parsed subquery structure
- RETURN VALUE
+ @return
constructed Item (or 0 if out of memory)
*/
Item * all_any_subquery_creator(Item *left_expr,
@@ -6672,16 +6786,15 @@ Item * all_any_subquery_creator(Item *left_expr,
}
-/*
- Multi update query pre-check
+/**
+ Multi update query pre-check.
- SYNOPSIS
- multi_update_precheck()
- thd Thread handler
- tables Global/local table list (have to be the same)
+ @param thd Thread handler
+ @param tables Global/local table list (have to be the same)
- RETURN VALUE
+ @retval
FALSE OK
+ @retval
TRUE Error
*/
@@ -6749,16 +6862,15 @@ bool multi_update_precheck(THD *thd, TABLE_LIST *tables)
DBUG_RETURN(FALSE);
}
-/*
- Multi delete query pre-check
+/**
+ Multi delete query pre-check.
- SYNOPSIS
- multi_delete_precheck()
- thd Thread handler
- tables Global/local table list
+ @param thd Thread handler
+ @param tables Global/local table list
- RETURN VALUE
+ @retval
FALSE OK
+ @retval
TRUE error
*/
@@ -6798,17 +6910,16 @@ bool multi_delete_precheck(THD *thd, TABLE_LIST *tables)
}
-/*
+/**
Link tables in auxilary table list of multi-delete with corresponding
elements in main table list, and set proper locks for them.
- SYNOPSIS
- multi_delete_set_locks_and_link_aux_tables()
- lex - pointer to LEX representing multi-delete
+ @param lex pointer to LEX representing multi-delete
- RETURN VALUE
- FALSE - success
- TRUE - error
+ @retval
+ FALSE success
+ @retval
+ TRUE error
*/
bool multi_delete_set_locks_and_link_aux_tables(LEX *lex)
@@ -6851,16 +6962,15 @@ bool multi_delete_set_locks_and_link_aux_tables(LEX *lex)
}
-/*
- simple UPDATE query pre-check
+/**
+ simple UPDATE query pre-check.
- SYNOPSIS
- update_precheck()
- thd Thread handler
- tables Global table list
+ @param thd Thread handler
+ @param tables Global table list
- RETURN VALUE
+ @retval
FALSE OK
+ @retval
TRUE Error
*/
@@ -6876,16 +6986,15 @@ bool update_precheck(THD *thd, TABLE_LIST *tables)
}
-/*
- simple DELETE query pre-check
+/**
+ simple DELETE query pre-check.
- SYNOPSIS
- delete_precheck()
- thd Thread handler
- tables Global table list
+ @param thd Thread handler
+ @param tables Global table list
- RETURN VALUE
+ @retval
FALSE OK
+ @retval
TRUE error
*/
@@ -6900,16 +7009,15 @@ bool delete_precheck(THD *thd, TABLE_LIST *tables)
}
-/*
- simple INSERT query pre-check
+/**
+ simple INSERT query pre-check.
- SYNOPSIS
- insert_precheck()
- thd Thread handler
- tables Global table list
+ @param thd Thread handler
+ @param tables Global table list
- RETURN VALUE
+ @retval
FALSE OK
+ @retval
TRUE error
*/
@@ -6957,17 +7065,16 @@ static bool check_show_create_table_access(THD *thd, TABLE_LIST *table)
}
-/*
- CREATE TABLE query pre-check
+/**
+ CREATE TABLE query pre-check.
- SYNOPSIS
- create_table_precheck()
- thd Thread handler
- tables Global table list
- create_table Table which will be created
+ @param thd Thread handler
+ @param tables Global table list
+ @param create_table Table which will be created
- RETURN VALUE
+ @retval
FALSE OK
+ @retval
TRUE Error
*/
@@ -7040,15 +7147,13 @@ err:
}
-/*
- negate given expression
+/**
+ negate given expression.
- SYNOPSIS
- negate_expression()
- thd thread handler
- expr expression for negation
+ @param thd thread handler
+ @param expr expression for negation
- RETURN
+ @return
negated expression
*/
@@ -7075,14 +7180,12 @@ Item *negate_expression(THD *thd, Item *expr)
return new Item_func_not(expr);
}
-/*
- Set the specified definer to the default value, which is the current user in
- the thread.
+/**
+ Set the specified definer to the default value, which is the
+ current user in the thread.
- SYNOPSIS
- get_default_definer()
- thd [in] thread handler
- definer [out] definer
+ @param[in] thd thread handler
+ @param[out] definer definer
*/
void get_default_definer(THD *thd, LEX_USER *definer)
@@ -7097,17 +7200,15 @@ void get_default_definer(THD *thd, LEX_USER *definer)
}
-/*
+/**
Create default definer for the specified THD.
- SYNOPSIS
- create_default_definer()
- thd [in] thread handler
+ @param[in] thd thread handler
- RETURN
- On success, return a valid pointer to the created and initialized
+ @return
+ - On success, return a valid pointer to the created and initialized
LEX_USER, which contains definer information.
- On error, return 0.
+ - On error, return 0.
*/
LEX_USER *create_default_definer(THD *thd)
@@ -7123,19 +7224,17 @@ LEX_USER *create_default_definer(THD *thd)
}
-/*
+/**
Create definer with the given user and host names.
- SYNOPSIS
- create_definer()
- thd [in] thread handler
- user_name [in] user name
- host_name [in] host name
+ @param[in] thd thread handler
+ @param[in] user_name user name
+ @param[in] host_name host name
- RETURN
- On success, return a valid pointer to the created and initialized
+ @return
+ - On success, return a valid pointer to the created and initialized
LEX_USER, which contains definer information.
- On error, return 0.
+ - On error, return 0.
*/
LEX_USER *create_definer(THD *thd, LEX_STRING *user_name, LEX_STRING *host_name)
@@ -7154,18 +7253,16 @@ LEX_USER *create_definer(THD *thd, LEX_STRING *user_name, LEX_STRING *host_name)
}
-/*
+/**
Retuns information about user or current user.
- SYNOPSIS
- get_current_user()
- thd [in] thread handler
- user [in] user
+ @param[in] thd thread handler
+ @param[in] user user
- RETURN
- On success, return a valid pointer to initialized
+ @return
+ - On success, return a valid pointer to initialized
LEX_USER, which contains user information.
- On error, return 0.
+ - On error, return 0.
*/
LEX_USER *get_current_user(THD *thd, LEX_USER *user)
@@ -7177,17 +7274,16 @@ LEX_USER *get_current_user(THD *thd, LEX_USER *user)
}
-/*
+/**
Check that byte length of a string does not exceed some limit.
- SYNOPSIS
- check_string_byte_length()
- str string to be checked
- err_msg error message to be displayed if the string is too long
- max_byte_length max length in bytes
+ @param str string to be checked
+ @param err_msg error message to be displayed if the string is too long
+ @param max_length max length
- RETURN
+ @retval
FALSE the passed string is not longer than max_length
+ @retval
TRUE the passed string is longer than max_length
NOTE
@@ -7276,10 +7372,10 @@ bool parse_sql(THD *thd,
bool mysql_parse_status= MYSQLparse(thd) != 0;
- /* Check that if MYSQLparse() failed, thd->net.report_error is set. */
+ /* Check that if MYSQLparse() failed, thd->is_error() is set. */
DBUG_ASSERT(!mysql_parse_status ||
- mysql_parse_status && thd->net.report_error);
+ mysql_parse_status && thd->is_error());
/* Reset Lex_input_stream. */
diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc
index 0cc2cac2a1a..eabf4526f7b 100644
--- a/sql/sql_partition.cc
+++ b/sql/sql_partition.cc
@@ -1402,7 +1402,7 @@ static void set_up_partition_func_pointers(partition_info *part_info)
NONE
*/
-static void set_linear_hash_mask(partition_info *part_info, uint no_parts)
+void set_linear_hash_mask(partition_info *part_info, uint no_parts)
{
uint mask;
@@ -1856,6 +1856,20 @@ static int add_uint(File fptr, ulonglong number)
return add_string(fptr, buff);
}
+/*
+ Must escape strings in partitioned tables frm-files,
+ parsing it later with mysql_unpack_partition will fail otherwise.
+*/
+static int add_quoted_string(File fptr, const char *quotestr)
+{
+ String orgstr(quotestr, system_charset_info);
+ String escapedstr;
+ int err= add_string(fptr, "'");
+ err+= append_escaped(&escapedstr, &orgstr);
+ err+= add_string(fptr, escapedstr.c_ptr_safe());
+ return err + add_string(fptr, "'");
+}
+
static int add_keyword_string(File fptr, const char *keyword,
bool should_use_quotes,
const char *keystr)
@@ -1866,10 +1880,9 @@ static int add_keyword_string(File fptr, const char *keyword,
err+= add_equal(fptr);
err+= add_space(fptr);
if (should_use_quotes)
- err+= add_string(fptr, "'");
- err+= add_string(fptr, keystr);
- if (should_use_quotes)
- err+= add_string(fptr, "'");
+ err+= add_quoted_string(fptr, keystr);
+ else
+ err+= add_string(fptr, keystr);
return err + add_space(fptr);
}
@@ -2055,6 +2068,7 @@ char *generate_partition_syntax(partition_info *part_info,
default:
DBUG_ASSERT(0);
/* We really shouldn't get here, no use in continuing from here */
+ my_error(ER_OUT_OF_RESOURCES, MYF(0));
current_thd->fatal_error();
DBUG_RETURN(NULL);
}
@@ -2821,8 +2835,8 @@ int get_partition_id_range(partition_info *part_info,
loc_part_id++;
*part_id= (uint32)loc_part_id;
if (loc_part_id == max_partition &&
- range_array[loc_part_id] != LONGLONG_MAX &&
- part_func_value >= range_array[loc_part_id])
+ part_func_value >= range_array[loc_part_id] &&
+ !part_info->defined_max_value)
DBUG_RETURN(HA_ERR_NO_PARTITION_FOUND);
DBUG_PRINT("exit",("partition: %d", *part_id));
@@ -2928,7 +2942,13 @@ uint32 get_partition_id_range_for_endpoint(partition_info *part_info,
}
if (left_endpoint)
{
- if (part_func_value >= range_array[loc_part_id])
+ longlong bound= range_array[loc_part_id];
+ /*
+ In case of PARTITION p VALUES LESS THAN MAXVALUE
+ the maximum value is in the current partition.
+ */
+ if (part_func_value > bound ||
+ (part_func_value == bound && !part_info->defined_max_value))
loc_part_id++;
}
else
@@ -3971,6 +3991,7 @@ static int fast_end_partition(THD *thd, ulonglong copied,
DBUG_RETURN(FALSE);
}
table->file->print_error(error, MYF(0));
+ close_thread_tables(thd);
DBUG_RETURN(TRUE);
}
@@ -4938,7 +4959,7 @@ the generated partition syntax in a correct manner.
We use the old partitioning also for the new table. We do this
by assigning the partition_info from the table loaded in
- open_ltable to the partition_info struct used by mysql_create_table
+ open_table to the partition_info struct used by mysql_create_table
later in this method.
Case IIb:
@@ -5031,7 +5052,10 @@ the generated partition syntax in a correct manner.
*partition_changed= TRUE;
}
if (create_info->db_type == partition_hton)
- part_info->default_engine_type= table->part_info->default_engine_type;
+ {
+ if (!part_info->default_engine_type)
+ part_info->default_engine_type= table->part_info->default_engine_type;
+ }
else
part_info->default_engine_type= create_info->db_type;
if (check_native_partitioned(create_info, &is_native_partitioned,
@@ -5084,9 +5108,9 @@ static bool mysql_change_partitions(ALTER_PARTITION_PARAM_TYPE *lpt)
DBUG_ENTER("mysql_change_partitions");
build_table_filename(path, sizeof(path), lpt->db, lpt->table_name, "", 0);
- if ((error= file->change_partitions(lpt->create_info, path, &lpt->copied,
- &lpt->deleted, lpt->pack_frm_data,
- lpt->pack_frm_len)))
+ if ((error= file->ha_change_partitions(lpt->create_info, path, &lpt->copied,
+ &lpt->deleted, lpt->pack_frm_data,
+ lpt->pack_frm_len)))
{
if (error != ER_OUTOFMEMORY)
file->print_error(error, MYF(0));
@@ -5124,7 +5148,7 @@ static bool mysql_rename_partitions(ALTER_PARTITION_PARAM_TYPE *lpt)
DBUG_ENTER("mysql_rename_partitions");
build_table_filename(path, sizeof(path), lpt->db, lpt->table_name, "", 0);
- if ((error= lpt->table->file->rename_partitions(path)))
+ if ((error= lpt->table->file->ha_rename_partitions(path)))
{
if (error != 1)
lpt->table->file->print_error(error, MYF(0));
@@ -5165,7 +5189,7 @@ static bool mysql_drop_partitions(ALTER_PARTITION_PARAM_TYPE *lpt)
DBUG_ENTER("mysql_drop_partitions");
build_table_filename(path, sizeof(path), lpt->db, lpt->table_name, "", 0);
- if ((error= lpt->table->file->drop_partitions(path)))
+ if ((error= lpt->table->file->ha_drop_partitions(path)))
{
lpt->table->file->print_error(error, MYF(0));
DBUG_RETURN(TRUE);
@@ -6081,16 +6105,16 @@ uint fast_alter_partition_table(THD *thd, TABLE *table,
int error;
written_bin_log= FALSE;
if (((alter_info->flags & ALTER_OPTIMIZE_PARTITION) &&
- (error= table->file->optimize_partitions(thd))) ||
+ (error= table->file->ha_optimize_partitions(thd))) ||
((alter_info->flags & ALTER_ANALYZE_PARTITION) &&
- (error= table->file->analyze_partitions(thd))) ||
+ (error= table->file->ha_analyze_partitions(thd))) ||
((alter_info->flags & ALTER_CHECK_PARTITION) &&
- (error= table->file->check_partitions(thd))) ||
+ (error= table->file->ha_check_partitions(thd))) ||
((alter_info->flags & ALTER_REPAIR_PARTITION) &&
- (error= table->file->repair_partitions(thd))))
+ (error= table->file->ha_repair_partitions(thd))))
{
table->file->print_error(error, MYF(0));
- DBUG_RETURN(TRUE);
+ goto err;
}
}
else if (fast_alter_partition & HA_PARTITION_ONE_PHASE)
@@ -6137,7 +6161,7 @@ uint fast_alter_partition_table(THD *thd, TABLE *table,
if (mysql_write_frm(lpt, WFRM_WRITE_SHADOW | WFRM_PACK_FRM) ||
mysql_change_partitions(lpt))
{
- DBUG_RETURN(TRUE);
+ goto err;
}
}
else if (alter_info->flags == ALTER_DROP_PARTITION)
@@ -6230,7 +6254,7 @@ uint fast_alter_partition_table(THD *thd, TABLE *table,
(release_name_lock(lpt), FALSE))
{
handle_alter_part_error(lpt, not_completed, TRUE, frm_install);
- DBUG_RETURN(TRUE);
+ goto err;
}
}
else if ((alter_info->flags & ALTER_ADD_PARTITION) &&
@@ -6299,7 +6323,7 @@ uint fast_alter_partition_table(THD *thd, TABLE *table,
(release_name_lock(lpt), FALSE))
{
handle_alter_part_error(lpt, not_completed, FALSE, frm_install);
- DBUG_RETURN(TRUE);
+ goto err;
}
}
else
@@ -6392,7 +6416,7 @@ uint fast_alter_partition_table(THD *thd, TABLE *table,
(release_name_lock(lpt), FALSE))
{
handle_alter_part_error(lpt, not_completed, FALSE, frm_install);
- DBUG_RETURN(TRUE);
+ goto err;
}
}
/*
@@ -6402,6 +6426,9 @@ uint fast_alter_partition_table(THD *thd, TABLE *table,
DBUG_RETURN(fast_end_partition(thd, lpt->copied, lpt->deleted,
table, table_list, FALSE, NULL,
written_bin_log));
+err:
+ close_thread_tables(thd);
+ DBUG_RETURN(TRUE);
}
#endif
diff --git a/sql/sql_partition.h b/sql/sql_partition.h
index 56f24181b93..282e24f1853 100644
--- a/sql/sql_partition.h
+++ b/sql/sql_partition.h
@@ -65,6 +65,7 @@ int get_part_for_delete(const uchar *buf, const uchar *rec0,
void prune_partition_set(const TABLE *table, part_id_range *part_spec);
bool check_partition_info(partition_info *part_info,handlerton **eng_type,
TABLE *table, handler *file, HA_CREATE_INFO *info);
+void set_linear_hash_mask(partition_info *part_info, uint no_parts);
bool fix_partition_func(THD *thd, TABLE *table, bool create_table_ind);
char *generate_partition_syntax(partition_info *part_info,
uint *buf_length, bool use_sql_alloc,
diff --git a/sql/sql_plugin.cc b/sql/sql_plugin.cc
index 2af528f6699..2a86844c8c6 100644
--- a/sql/sql_plugin.cc
+++ b/sql/sql_plugin.cc
@@ -181,6 +181,7 @@ public:
TYPELIB* plugin_var_typelib(void);
uchar* value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
bool check(THD *thd, set_var *var);
+ bool check_default(enum_var_type type) { return is_readonly(); }
void set_default(THD *thd, enum_var_type type);
bool update(THD *thd, set_var *var);
};
@@ -1329,6 +1330,7 @@ static void plugin_load(MEM_ROOT *tmp_root, int *argc, char **argv)
}
new_thd->thread_stack= (char*) &tables;
new_thd->store_globals();
+ lex_start(new_thd);
new_thd->db= my_strdup("mysql", MYF(0));
new_thd->db_length= 5;
bzero((uchar*)&tables, sizeof(tables));
@@ -1874,11 +1876,26 @@ err:
static int check_func_int(THD *thd, struct st_mysql_sys_var *var,
void *save, st_mysql_value *value)
{
+ bool fixed;
long long tmp;
struct my_option options;
value->val_int(value, &tmp);
plugin_opt_set_limits(&options, var);
- *(int *)save= (int) getopt_ull_limit_value(tmp, &options);
+
+ if (var->flags & PLUGIN_VAR_UNSIGNED)
+ *(uint *)save= (uint) getopt_ull_limit_value((ulonglong) tmp, &options,
+ &fixed);
+ else
+ *(int *)save= (int) getopt_ll_limit_value(tmp, &options, &fixed);
+
+ if (fixed)
+ {
+ char buf[22];
+ push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
+ ER_TRUNCATED_WRONG_VALUE,
+ ER(ER_TRUNCATED_WRONG_VALUE), var->name,
+ ullstr(tmp, buf));
+ }
return (thd->variables.sql_mode & MODE_STRICT_ALL_TABLES) &&
(*(int *)save != (int) tmp);
}
@@ -1887,24 +1904,55 @@ static int check_func_int(THD *thd, struct st_mysql_sys_var *var,
static int check_func_long(THD *thd, struct st_mysql_sys_var *var,
void *save, st_mysql_value *value)
{
+ bool fixed;
long long tmp;
struct my_option options;
value->val_int(value, &tmp);
plugin_opt_set_limits(&options, var);
- *(long *)save= (long) getopt_ull_limit_value(tmp, &options);
+
+ if (var->flags & PLUGIN_VAR_UNSIGNED)
+ *(ulong *)save= (ulong) getopt_ull_limit_value((ulonglong) tmp, &options,
+ &fixed);
+ else
+ *(long *)save= (long) getopt_ll_limit_value(tmp, &options, &fixed);
+
+ if (fixed)
+ {
+ char buf[22];
+ push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
+ ER_TRUNCATED_WRONG_VALUE,
+ ER(ER_TRUNCATED_WRONG_VALUE), var->name,
+ ullstr(tmp, buf));
+ }
return (thd->variables.sql_mode & MODE_STRICT_ALL_TABLES) &&
(*(long *)save != (long) tmp);
}
static int check_func_longlong(THD *thd, struct st_mysql_sys_var *var,
- void *save, st_mysql_value *value)
+ void *save, st_mysql_value *value)
{
+ bool fixed;
long long tmp;
struct my_option options;
value->val_int(value, &tmp);
plugin_opt_set_limits(&options, var);
- *(ulonglong *)save= getopt_ull_limit_value(tmp, &options);
+ *(ulonglong *)save= getopt_ull_limit_value(tmp, &options, &fixed);
+
+ if (var->flags & PLUGIN_VAR_UNSIGNED)
+ *(ulonglong *)save= getopt_ull_limit_value((ulonglong) tmp, &options,
+ &fixed);
+ else
+ *(longlong *)save= getopt_ll_limit_value(tmp, &options, &fixed);
+
+ if (fixed)
+ {
+ char buf[22];
+ push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
+ ER_TRUNCATED_WRONG_VALUE,
+ ER(ER_TRUNCATED_WRONG_VALUE), var->name,
+ ullstr(tmp, buf));
+ }
return (thd->variables.sql_mode & MODE_STRICT_ALL_TABLES) &&
(*(long long *)save != tmp);
}
@@ -1944,7 +1992,7 @@ static int check_func_enum(THD *thd, struct st_mysql_sys_var *var,
length= sizeof(buff);
if (!(str= value->val_str(value, buff, &length)))
goto err;
- if ((result= find_type(typelib, str, length, 1)-1) < 0)
+ if ((result= (long)find_type(typelib, str, length, 1)-1) < 0)
{
strvalue= str;
goto err;
@@ -2168,9 +2216,11 @@ static st_bookmark *register_var(const char *plugin, const char *name,
size= sizeof(int);
break;
case PLUGIN_VAR_LONG:
+ case PLUGIN_VAR_ENUM:
size= sizeof(long);
break;
case PLUGIN_VAR_LONGLONG:
+ case PLUGIN_VAR_SET:
size= sizeof(ulonglong);
break;
case PLUGIN_VAR_STR:
@@ -2611,6 +2661,7 @@ void sys_var_pluginvar::set_default(THD *thd, enum_var_type type)
if (is_readonly())
return;
+ pthread_mutex_lock(&LOCK_global_system_variables);
tgt= real_value_ptr(thd, type);
src= ((void **) (plugin_var + 1) + 1);
@@ -2627,12 +2678,14 @@ void sys_var_pluginvar::set_default(THD *thd, enum_var_type type)
if (!(plugin_var->flags & PLUGIN_VAR_THDLOCAL) || type == OPT_GLOBAL)
{
- pthread_mutex_lock(&LOCK_plugin);
plugin_var->update(thd, plugin_var, tgt, src);
- pthread_mutex_unlock(&LOCK_plugin);
+ pthread_mutex_unlock(&LOCK_global_system_variables);
}
else
+ {
+ pthread_mutex_unlock(&LOCK_global_system_variables);
plugin_var->update(thd, plugin_var, tgt, src);
+ }
}
@@ -2678,6 +2731,8 @@ bool sys_var_pluginvar::update(THD *thd, set_var *var)
static void plugin_opt_set_limits(struct my_option *options,
const struct st_mysql_sys_var *opt)
{
+ options->sub_size= 0;
+
switch (opt->flags & (PLUGIN_VAR_TYPEMASK |
PLUGIN_VAR_UNSIGNED | PLUGIN_VAR_THDLOCAL)) {
/* global system variables */
diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc
index a6cdcf14881..c0178a231c9 100644
--- a/sql/sql_prepare.cc
+++ b/sql/sql_prepare.cc
@@ -13,7 +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 */
-/**********************************************************************
+/**
+ @file
+
This file contains the implementation of prepared statements.
When one prepares a statement:
@@ -28,11 +30,13 @@ When one prepares a statement:
- Without executing the query, return back to client the total
number of parameters along with result-set metadata information
(if any) in the following format:
+ @verbatim
[STMT_ID:4]
[Column_count:2]
[Param_count:2]
[Params meta info (stubs only for now)] (if Param_count > 0)
[Columns meta info] (if Column_count > 0)
+ @endverbatim
During prepare the tables used in a statement are opened, but no
locks are acquired. Table opening will block any DDL during the
@@ -45,12 +49,14 @@ When one executes a statement:
- Server gets the command 'COM_STMT_EXECUTE' to execute the
previously prepared query. If there are any parameter markers, then the
client will send the data in the following format:
+ @verbatim
[COM_STMT_EXECUTE:1]
[STMT_ID:4]
[NULL_BITS:(param_count+7)/8)]
[TYPES_SUPPLIED_BY_CLIENT(0/1):1]
[[length]data]
[[length]data] .. [[length]data].
+ @endverbatim
(Note: Except for string/binary types; all other types will not be
supplied with length field)
- If it is a first execute or types of parameters were altered by client,
@@ -75,8 +81,7 @@ When one supplies long data for a placeholder:
server doesn't care; also, the server doesn't notify the client whether
it got the data or not; if there is any error, then it will be returned
at statement execute.
-
-***********************************************************************/
+*/
#include "mysql_priv.h"
#include "sql_select.h" // for JOIN
@@ -91,7 +96,9 @@ When one supplies long data for a placeholder:
#include <mysql_com.h>
#endif
-/* A result class used to send cursor rows using the binary protocol. */
+/**
+ A result class used to send cursor rows using the binary protocol.
+*/
class Select_fetch_protocol_binary: public select_send
{
@@ -112,7 +119,7 @@ public:
/****************************************************************************/
/**
- @brief Prepared_statement: a statement that can contain placeholders
+ Prepared_statement: a statement that can contain placeholders.
*/
class Prepared_statement: public Statement
@@ -176,20 +183,17 @@ inline bool is_param_null(const uchar *pos, ulong param_no)
return pos[param_no/8] & (1 << (param_no & 7));
}
-/*
+/**
Find a prepared statement in the statement map by id.
- SYNOPSIS
- find_prepared_statement()
- thd thread handle
- id statement id
- where the place from which this function is called (for
- error reporting).
-
- DESCRIPTION
Try to find a prepared statement and set THD error if it's not found.
- RETURN VALUE
+ @param thd thread handle
+ @param id statement id
+ @param where the place from which this function is called (for
+ error reporting).
+
+ @return
0 if the statement was not found, a pointer otherwise.
*/
@@ -214,13 +218,13 @@ find_prepared_statement(THD *thd, ulong id, const char *where)
}
-/*
+/**
Send prepared statement id and metadata to the client after prepare.
- SYNOPSIS
- send_prep_stmt()
+ @todo
+ Fix this nasty upcast from List<Item_param> to List<Item>
- RETURN VALUE
+ @return
0 in case of success, 1 otherwise
*/
@@ -230,6 +234,8 @@ static bool send_prep_stmt(Prepared_statement *stmt, uint columns)
NET *net= &stmt->thd->net;
uchar buff[12];
uint tmp;
+ int error;
+ THD *thd= stmt->thd;
DBUG_ENTER("send_prep_stmt");
buff[0]= 0; /* OK packet indicator */
@@ -244,11 +250,16 @@ static bool send_prep_stmt(Prepared_statement *stmt, uint columns)
Send types and names of placeholders to the client
XXX: fix this nasty upcast from List<Item_param> to List<Item>
*/
- DBUG_RETURN(my_net_write(net, buff, sizeof(buff)) ||
- (stmt->param_count &&
- stmt->thd->protocol_text.send_fields((List<Item> *)
- &stmt->lex->param_list,
- Protocol::SEND_EOF)));
+ error= my_net_write(net, buff, sizeof(buff));
+ if (stmt->param_count && ! error)
+ {
+ error= thd->protocol_text.send_fields((List<Item> *)
+ &stmt->lex->param_list,
+ Protocol::SEND_EOF);
+ }
+ /* Flag that a response has already been sent */
+ thd->main_da.disable_status();
+ DBUG_RETURN(error);
}
#else
static bool send_prep_stmt(Prepared_statement *stmt,
@@ -259,30 +270,29 @@ static bool send_prep_stmt(Prepared_statement *stmt,
thd->client_stmt_id= stmt->id;
thd->client_param_count= stmt->param_count;
thd->clear_error();
+ thd->main_da.disable_status();
return 0;
}
#endif /*!EMBEDDED_LIBRARY*/
-/*
+#ifndef EMBEDDED_LIBRARY
+
+/**
Read the length of the parameter data and return it back to
the caller.
- SYNOPSIS
- get_param_length()
- packet a pointer to the data
- len remaining packet length
-
- DESCRIPTION
Read data length, position the packet to the first byte after it,
and return the length to the caller.
- RETURN VALUE
+ @param packet a pointer to the data
+ @param len remaining packet length
+
+ @return
Length of data piece.
*/
-#ifndef EMBEDDED_LIBRARY
static ulong get_param_length(uchar **packet, ulong len)
{
reg1 uchar *pos= *packet;
@@ -323,16 +333,9 @@ static ulong get_param_length(uchar **packet, ulong len)
#define get_param_length(packet, len) len
#endif /*!EMBEDDED_LIBRARY*/
- /*
- Data conversion routines.
-
- SYNOPSIS
- set_param_xx()
- param parameter item
- pos input data buffer
- len length of data in the buffer
+/**
+ Data conversion routines.
- DESCRIPTION
All these functions read the data from pos, convert it to requested
type and assign to param; pos is advanced to predefined length.
@@ -340,8 +343,9 @@ static ulong get_param_length(uchar **packet, ulong len)
(i.e. when input types altered) and for all subsequent executions
we don't read any values for this.
- RETURN VALUE
- none
+ @param param parameter item
+ @param pos input data buffer
+ @param len length of data in the buffer
*/
static void set_param_tiny(Item_param *param, uchar **pos, ulong len)
@@ -443,6 +447,10 @@ static void set_param_decimal(Item_param *param, uchar **pos, ulong len)
libmysql.c (store_param_{time,date,datetime}).
*/
+/**
+ @todo
+ Add warning 'Data truncated' here
+*/
static void set_param_time(Item_param *param, uchar **pos, ulong len)
{
MYSQL_TIME tm;
@@ -532,6 +540,10 @@ static void set_param_date(Item_param *param, uchar **pos, ulong len)
}
#else/*!EMBEDDED_LIBRARY*/
+/**
+ @todo
+ Add warning 'Data truncated' here
+*/
void set_param_time(Item_param *param, uchar **pos, ulong len)
{
MYSQL_TIME tm= *((MYSQL_TIME*)*pos);
@@ -684,14 +696,13 @@ static void setup_one_conversion_function(THD *thd, Item_param *param,
}
#ifndef EMBEDDED_LIBRARY
-/*
+/**
Routines to assign parameters from data supplied by the client.
- DESCRIPTION
Update the parameter markers by reading data from the packet and
and generate a valid query for logging.
- NOTES
+ @note
This function, along with other _with_log functions is called when one of
binary, slow or general logs is open. Logging of prepared statements in
all cases is performed by means of conventional queries: if parameter
@@ -699,21 +710,28 @@ static void setup_one_conversion_function(THD *thd, Item_param *param,
replaced with its actual value; if we're logging a [Dynamic] SQL
prepared statement, parameter markers are replaced with variable names.
Example:
+ @verbatim
mysql_stmt_prepare("UPDATE t1 SET a=a*1.25 WHERE a=?")
--> general logs gets [Prepare] UPDATE t1 SET a*1.25 WHERE a=?"
mysql_stmt_execute(stmt);
--> general and binary logs get
[Execute] UPDATE t1 SET a*1.25 WHERE a=1"
- If a statement has been prepared using SQL syntax:
+ @endverbatim
+
+ If a statement has been prepared using SQL syntax:
+ @verbatim
PREPARE stmt FROM "UPDATE t1 SET a=a*1.25 WHERE a=?"
--> general log gets
[Query] PREPARE stmt FROM "UPDATE ..."
EXECUTE stmt USING @a
--> general log gets
- [Query] EXECUTE stmt USING @a;
+ [Query] EXECUTE stmt USING @a;
+ @endverbatim
- RETURN VALUE
- 0 if success, 1 otherwise
+ @retval
+ 0 if success
+ @retval
+ 1 otherwise
*/
static bool insert_params_with_log(Prepared_statement *stmt, uchar *null_array,
@@ -829,12 +847,12 @@ static bool setup_conversion_functions(Prepared_statement *stmt,
#else
-/*
+/**
Embedded counterparts of parameter assignment routines.
- DESCRIPTION
The main difference between the embedded library and the server is
that in embedded case we don't serialize/deserialize parameters data.
+
Additionally, for unknown reason, the client-side flag raised for
changed types of placeholders is ignored and we simply setup conversion
functions at each execute (TODO: fix).
@@ -928,15 +946,14 @@ static bool emb_insert_params_with_log(Prepared_statement *stmt,
#endif /*!EMBEDDED_LIBRARY*/
-/*
+/**
Assign prepared statement parameters from user variables.
- SYNOPSIS
- insert_params_from_vars()
- stmt Statement
- varnames List of variables. Caller must ensure that number of variables
- in the list is equal to number of statement parameters
- query Ignored
+ @param stmt Statement
+ @param varnames List of variables. Caller must ensure that number
+ of variables in the list is equal to number of statement
+ parameters
+ @param query Ignored
*/
static bool insert_params_from_vars(Prepared_statement *stmt,
@@ -965,17 +982,16 @@ static bool insert_params_from_vars(Prepared_statement *stmt,
}
-/*
+/**
Do the same as insert_params_from_vars but also construct query text for
binary log.
- SYNOPSIS
- insert_params_from_vars()
- stmt Prepared statement
- varnames List of variables. Caller must ensure that number of variables
- in the list is equal to number of statement parameters
- query The query with parameter markers replaced with corresponding
- user variables that were used to execute the query.
+ @param stmt Prepared statement
+ @param varnames List of variables. Caller must ensure that number of
+ variables in the list is equal to number of statement
+ parameters
+ @param query The query with parameter markers replaced with corresponding
+ user variables that were used to execute the query.
*/
static bool insert_params_from_vars_with_log(Prepared_statement *stmt,
@@ -1024,17 +1040,16 @@ static bool insert_params_from_vars_with_log(Prepared_statement *stmt,
DBUG_RETURN(0);
}
-/*
+/**
Validate INSERT statement.
- SYNOPSIS
- mysql_test_insert()
- stmt prepared statement
- tables global/local table list
+ @param stmt prepared statement
+ @param tables global/local table list
- RETURN VALUE
- FALSE success
- TRUE error, error message is set in THD
+ @retval
+ FALSE success
+ @retval
+ TRUE error, error message is set in THD
*/
static bool mysql_test_insert(Prepared_statement *stmt,
@@ -1112,18 +1127,21 @@ error:
}
-/*
- Validate UPDATE statement
+/**
+ Validate UPDATE statement.
- SYNOPSIS
- mysql_test_update()
- stmt prepared statement
- tables list of tables used in this query
+ @param stmt prepared statement
+ @param tables list of tables used in this query
- RETURN VALUE
- 0 success
- 1 error, error message is set in THD
- 2 convert to multi_update
+ @todo
+ - here we should send types of placeholders to the client.
+
+ @retval
+ 0 success
+ @retval
+ 1 error, error message is set in THD
+ @retval
+ 2 convert to multi_update
*/
static int mysql_test_update(Prepared_statement *stmt,
@@ -1196,17 +1214,16 @@ error:
}
-/*
+/**
Validate DELETE statement.
- SYNOPSIS
- mysql_test_delete()
- stmt prepared statement
- tables list of tables used in this query
+ @param stmt prepared statement
+ @param tables list of tables used in this query
- RETURN VALUE
- FALSE success
- TRUE error, error message is set in THD
+ @retval
+ FALSE success
+ @retval
+ TRUE error, error message is set in THD
*/
static bool mysql_test_delete(Prepared_statement *stmt,
@@ -1233,22 +1250,21 @@ error:
}
-/*
+/**
Validate SELECT statement.
- SYNOPSIS
- mysql_test_select()
- stmt prepared statement
- tables list of tables used in the query
-
- DESCRIPTION
In case of success, if this query is not EXPLAIN, send column list info
back to the client.
- RETURN VALUE
- 0 success
- 1 error, error message is set in THD
- 2 success, and statement metadata has been sent
+ @param stmt prepared statement
+ @param tables list of tables used in the query
+
+ @retval
+ 0 success
+ @retval
+ 1 error, error message is set in THD
+ @retval
+ 2 success, and statement metadata has been sent
*/
static int mysql_test_select(Prepared_statement *stmt,
@@ -1313,18 +1329,17 @@ error:
}
-/*
+/**
Validate and prepare for execution DO statement expressions.
- SYNOPSIS
- mysql_test_do_fields()
- stmt prepared statement
- tables list of tables used in this query
- values list of expressions
+ @param stmt prepared statement
+ @param tables list of tables used in this query
+ @param values list of expressions
- RETURN VALUE
- FALSE success
- TRUE error, error message is set in THD
+ @retval
+ FALSE success
+ @retval
+ TRUE error, error message is set in THD
*/
static bool mysql_test_do_fields(Prepared_statement *stmt,
@@ -1343,18 +1358,17 @@ static bool mysql_test_do_fields(Prepared_statement *stmt,
}
-/*
- Validate and prepare for execution SET statement expressions
+/**
+ Validate and prepare for execution SET statement expressions.
- SYNOPSIS
- mysql_test_set_fields()
- stmt prepared statement
- tables list of tables used in this query
- values list of expressions
+ @param stmt prepared statement
+ @param tables list of tables used in this query
+ @param values list of expressions
- RETURN VALUE
- FALSE success
- TRUE error, error message is set in THD
+ @retval
+ FALSE success
+ @retval
+ TRUE error, error message is set in THD
*/
static bool mysql_test_set_fields(Prepared_statement *stmt,
@@ -1381,23 +1395,22 @@ error:
}
-/*
- Check internal SELECT of the prepared command
+/**
+ Check internal SELECT of the prepared command.
- SYNOPSIS
- select_like_stmt_test()
- stmt prepared statement
- specific_prepare function of command specific prepare
- setup_tables_done_option options to be passed to LEX::unit.prepare()
+ @param stmt prepared statement
+ @param specific_prepare function of command specific prepare
+ @param setup_tables_done_option options to be passed to LEX::unit.prepare()
- NOTE
+ @note
This function won't directly open tables used in select. They should
be opened either by calling function (and in this case you probably
should use select_like_stmt_test_with_open()) or by
"specific_prepare" call (like this happens in case of multi-update).
- RETURN VALUE
+ @retval
FALSE success
+ @retval
TRUE error, error message is set in THD
*/
@@ -1420,20 +1433,19 @@ static bool select_like_stmt_test(Prepared_statement *stmt,
DBUG_RETURN(lex->unit.prepare(thd, 0, setup_tables_done_option));
}
-/*
+/**
Check internal SELECT of the prepared command (with opening of used
tables).
- SYNOPSIS
- select_like_stmt_test_with_open()
- stmt prepared statement
- tables list of tables to be opened before calling
- specific_prepare function
- specific_prepare function of command specific prepare
- setup_tables_done_option options to be passed to LEX::unit.prepare()
+ @param stmt prepared statement
+ @param tables list of tables to be opened
+ before calling specific_prepare function
+ @param specific_prepare function of command specific prepare
+ @param setup_tables_done_option options to be passed to LEX::unit.prepare()
- RETURN VALUE
+ @retval
FALSE success
+ @retval
TRUE error
*/
@@ -1459,17 +1471,16 @@ select_like_stmt_test_with_open(Prepared_statement *stmt,
}
-/*
- Validate and prepare for execution CREATE TABLE statement
+/**
+ Validate and prepare for execution CREATE TABLE statement.
- SYNOPSIS
- mysql_test_create_table()
- stmt prepared statement
- tables list of tables used in this query
+ @param stmt prepared statement
+ @param tables list of tables used in this query
- RETURN VALUE
- FALSE success
- TRUE error, error message is set in THD
+ @retval
+ FALSE success
+ @retval
+ TRUE error, error message is set in THD
*/
static bool mysql_test_create_table(Prepared_statement *stmt)
@@ -1512,18 +1523,17 @@ static bool mysql_test_create_table(Prepared_statement *stmt)
}
-/*
+/**
Validate and prepare for execution a multi update statement.
- SYNOPSIS
- mysql_test_multiupdate()
- stmt prepared statement
- tables list of tables used in this query
- converted converted to multi-update from usual update
+ @param stmt prepared statement
+ @param tables list of tables used in this query
+ @param converted converted to multi-update from usual update
- RETURN VALUE
- FALSE success
- TRUE error, error message is set in THD
+ @retval
+ FALSE success
+ @retval
+ TRUE error, error message is set in THD
*/
static bool mysql_test_multiupdate(Prepared_statement *stmt,
@@ -1539,17 +1549,16 @@ static bool mysql_test_multiupdate(Prepared_statement *stmt,
}
-/*
+/**
Validate and prepare for execution a multi delete statement.
- SYNOPSIS
- mysql_test_multidelete()
- stmt prepared statement
- tables list of tables used in this query
+ @param stmt prepared statement
+ @param tables list of tables used in this query
- RETURN VALUE
- FALSE success
- TRUE error, error message in THD is set.
+ @retval
+ FALSE success
+ @retval
+ TRUE error, error message in THD is set.
*/
static bool mysql_test_multidelete(Prepared_statement *stmt,
@@ -1579,15 +1588,13 @@ error:
}
-/*
+/**
Wrapper for mysql_insert_select_prepare, to make change of local tables
after open_normal_and_derived_tables() call.
- SYNOPSIS
- mysql_insert_select_prepare_tester()
- thd thread handle
+ @param thd thread handle
- NOTE
+ @note
We need to remove the first local table after
open_normal_and_derived_tables(), because mysql_handle_derived
uses local tables lists.
@@ -1608,17 +1615,16 @@ static bool mysql_insert_select_prepare_tester(THD *thd)
}
-/*
+/**
Validate and prepare for execution INSERT ... SELECT statement.
- SYNOPSIS
- mysql_test_insert_select()
- stmt prepared statement
- tables list of tables used in this query
+ @param stmt prepared statement
+ @param tables list of tables used in this query
- RETURN VALUE
- FALSE success
- TRUE error, error message is set in THD
+ @retval
+ FALSE success
+ @retval
+ TRUE error, error message is set in THD
*/
static bool mysql_test_insert_select(Prepared_statement *stmt,
@@ -1651,23 +1657,21 @@ static bool mysql_test_insert_select(Prepared_statement *stmt,
}
-/*
+/**
Perform semantic analysis of the parsed tree and send a response packet
to the client.
- SYNOPSIS
- check_prepared_statement()
- stmt prepared statement
-
- DESCRIPTION
This function
- opens all tables and checks access rights
- validates semantics of statement columns and SQL functions
by calling fix_fields.
- RETURN VALUE
- FALSE success, statement metadata is sent to client
- TRUE error, error message is set in THD (but not sent)
+ @param stmt prepared statement
+
+ @retval
+ FALSE success, statement metadata is sent to client
+ @retval
+ TRUE error, error message is set in THD (but not sent)
*/
static bool check_prepared_statement(Prepared_statement *stmt,
@@ -1834,7 +1838,7 @@ error:
DBUG_RETURN(TRUE);
}
-/*
+/**
Initialize array of parameters in statement from LEX.
(We need to have quick access to items by number in mysql_stmt_get_longdata).
This is to avoid using malloc/realloc in the parser.
@@ -1870,31 +1874,28 @@ static bool init_param_array(Prepared_statement *stmt)
}
-/*
+/**
COM_STMT_PREPARE handler.
- SYNOPSIS
- mysql_stmt_prepare()
- packet query to be prepared
- packet_length query string length, including ignored
- trailing NULL or quote char.
-
- DESCRIPTION
Given a query string with parameter markers, create a prepared
statement from it and send PS info back to the client.
- NOTES
- This function parses the query and sends the total number of parameters
- and resultset metadata information back to client (if any), without
- executing the query i.e. without any log/disk writes. This allows the
- queries to be re-executed without re-parsing during execute.
-
If parameter markers are found in the query, then store the information
using Item_param along with maintaining a list in lex->param_array, so
that a fast and direct retrieval can be made without going through all
field items.
- RETURN VALUE
+ @param packet query to be prepared
+ @param packet_length query string length, including ignored
+ trailing NULL or quote char.
+
+ @note
+ This function parses the query and sends the total number of parameters
+ and resultset metadata information back to client (if any), without
+ executing the query i.e. without any log/disk writes. This allows the
+ queries to be re-executed without re-parsing during execute.
+
+ @return
none: in case of success a new statement id and metadata is sent
to the client, otherwise an error message is set in THD.
*/
@@ -1944,22 +1945,22 @@ void mysql_stmt_prepare(THD *thd, const char *packet, uint packet_length)
DBUG_VOID_RETURN;
}
-/*
- SYNOPSIS
- get_dynamic_sql_string()
- lex in main lex
- query_len out length of the SQL statement (is set only
- in case of success)
-
- DESCRIPTION
- Get an SQL statement text from a user variable or from plain
- text. If the statement is plain text, just assign the
- pointers, otherwise allocate memory in thd->mem_root and copy
- the contents of the variable, possibly with character
- set conversion.
-
- RETURN VALUE
- non-zero success, 0 in case of error (out of memory)
+/**
+ Get an SQL statement text from a user variable or from plain text.
+
+ If the statement is plain text, just assign the
+ pointers, otherwise allocate memory in thd->mem_root and copy
+ the contents of the variable, possibly with character
+ set conversion.
+
+ @param[in] lex main lex
+ @param[out] query_len length of the SQL statement (is set only
+ in case of success)
+
+ @retval
+ non-zero success
+ @retval
+ 0 in case of error (out of memory)
*/
static const char *get_dynamic_sql_string(LEX *lex, uint *query_len)
@@ -2037,7 +2038,7 @@ end:
}
-/* Init PS/SP specific parse tree members. */
+/** Init PS/SP specific parse tree members. */
static void init_stmt_after_parse(LEX *lex)
{
@@ -2050,19 +2051,16 @@ static void init_stmt_after_parse(LEX *lex)
sl->uncacheable&= ~UNCACHEABLE_PREPARE;
}
-/*
+/**
SQLCOM_PREPARE implementation.
- SYNOPSIS
- mysql_sql_stmt_prepare()
- thd thread handle
-
- DESCRIPTION
Prepare an SQL prepared statement. This is called from
mysql_execute_command and should therefore behave like an
ordinary query (e.g. should not reset any global THD data).
- RETURN VALUE
+ @param thd thread handle
+
+ @return
none: in case of success, OK packet is sent to the client,
otherwise an error message is set in THD
*/
@@ -2118,7 +2116,14 @@ void mysql_sql_stmt_prepare(THD *thd)
DBUG_VOID_RETURN;
}
-/* Reinit prepared statement/stored procedure before execution */
+/**
+ Reinit prepared statement/stored procedure before execution.
+
+ @todo
+ When the new table structure is ready, then have a status bit
+ to indicate the table is altered, and re-do the setup_*
+ and open the tables back.
+*/
void reinit_stmt_before_use(THD *thd, LEX *lex)
{
@@ -2224,13 +2229,11 @@ void reinit_stmt_before_use(THD *thd, LEX *lex)
}
-/*
- Clears parameters from data left from previous execution or long data
+/**
+ Clears parameters from data left from previous execution or long data.
- SYNOPSIS
- reset_stmt_params()
- stmt prepared statement for which parameters should
- be reset
+ @param stmt prepared statement for which parameters should
+ be reset
*/
static void reset_stmt_params(Prepared_statement *stmt)
@@ -2242,22 +2245,19 @@ static void reset_stmt_params(Prepared_statement *stmt)
}
-/*
+/**
COM_STMT_EXECUTE handler: execute a previously prepared statement.
- SYNOPSIS
- mysql_stmt_execute()
- thd current thread
- packet parameter types and data, if any
- packet_length packet length, including the terminator character.
-
- DESCRIPTION
If there are any parameters, then replace parameter markers with the
data supplied from the client, and then execute the statement.
This function uses binary protocol to send a possible result set
to the client.
- RETURN VALUE
+ @param thd current thread
+ @param packet_arg parameter types and data, if any
+ @param packet_length packet length, including the terminator character.
+
+ @return
none: in case of success OK packet or a result set is sent to the
client, otherwise an error message is set in THD.
*/
@@ -2284,6 +2284,9 @@ void mysql_stmt_execute(THD *thd, char *packet_arg, uint packet_length)
if (!(stmt= find_prepared_statement(thd, stmt_id, "mysql_stmt_execute")))
DBUG_VOID_RETURN;
+#if defined(ENABLED_PROFILING) && defined(COMMUNITY_SERVER)
+ thd->profiling.set_query_source(stmt->query, stmt->query_length);
+#endif
DBUG_PRINT("exec_query", ("%s", stmt->query));
DBUG_PRINT("info",("stmt: 0x%lx", (long) stmt));
@@ -2331,14 +2334,9 @@ set_params_data_err:
}
-/*
+/**
SQLCOM_EXECUTE implementation.
- SYNOPSIS
- mysql_sql_stmt_execute()
- thd thread handle
-
- DESCRIPTION
Execute prepared statement using parameter values from
lex->prepared_stmt_params and send result to the client using
text protocol. This is called from mysql_execute_command and
@@ -2346,7 +2344,9 @@ set_params_data_err:
global THD data, such as warning count, server status, etc).
This function uses text protocol to send a possible result set.
- RETURN
+ @param thd thread handle
+
+ @return
none: in case of success, OK (or result set) packet is sent to the
client, otherwise an error is set in THD
*/
@@ -2398,14 +2398,12 @@ set_params_data_err:
}
-/*
- COM_STMT_FETCH handler: fetches requested amount of rows from cursor
+/**
+ COM_STMT_FETCH handler: fetches requested amount of rows from cursor.
- SYNOPSIS
- mysql_stmt_fetch()
- thd Thread handle
- packet Packet from client (with stmt_id & num_rows)
- packet_length Length of packet
+ @param thd Thread handle
+ @param packet Packet from client (with stmt_id & num_rows)
+ @param packet_length Length of packet
*/
void mysql_stmt_fetch(THD *thd, char *packet, uint packet_length)
@@ -2456,22 +2454,20 @@ void mysql_stmt_fetch(THD *thd, char *packet, uint packet_length)
}
-/*
+/**
Reset a prepared statement in case there was a recoverable error.
- SYNOPSIS
- mysql_stmt_reset()
- thd Thread handle
- packet Packet with stmt id
- DESCRIPTION
This function resets statement to the state it was right after prepare.
It can be used to:
- - clear an error happened during mysql_stmt_send_long_data
- - cancel long data stream for all placeholders without
- having to call mysql_stmt_execute.
- - close an open cursor
+ - clear an error happened during mysql_stmt_send_long_data
+ - cancel long data stream for all placeholders without
+ having to call mysql_stmt_execute.
+ - close an open cursor
Sends 'OK' packet in case of success (statement was reset)
or 'ERROR' packet (unrecoverable error/statement not found/etc).
+
+ @param thd Thread handle
+ @param packet Packet with stmt id
*/
void mysql_stmt_reset(THD *thd, char *packet)
@@ -2504,9 +2500,11 @@ void mysql_stmt_reset(THD *thd, char *packet)
}
-/*
+/**
Delete a prepared statement from memory.
- Note: we don't send any reply to this command.
+
+ @note
+ we don't send any reply to this command.
*/
void mysql_stmt_close(THD *thd, char *packet)
@@ -2526,19 +2524,20 @@ void mysql_stmt_close(THD *thd, char *packet)
DBUG_ASSERT(! (stmt->flags & (uint) Prepared_statement::IS_IN_USE));
(void) stmt->deallocate();
+ thd->main_da.disable_status();
+
DBUG_VOID_RETURN;
}
-/*
+/**
SQLCOM_DEALLOCATE implementation.
- DESCRIPTION
Close an SQL prepared statement. As this can be called from Dynamic
SQL, we should be careful to not close a statement that is currently
being executed.
- RETURN VALUE
+ @return
none: OK packet is sent in case of success, otherwise an error
message is set in THD
*/
@@ -2561,21 +2560,18 @@ void mysql_sql_stmt_close(THD *thd)
send_ok(thd);
}
-/*
+/**
Handle long data in pieces from client.
- SYNOPSIS
- mysql_stmt_get_longdata()
- thd Thread handle
- packet String to append
- packet_length Length of string (including end \0)
-
- DESCRIPTION
Get a part of a long data. To make the protocol efficient, we are
not sending any return packets here. If something goes wrong, then
we will send the error on 'execute' We assume that the client takes
care of checking that all parts are sent to the server. (No checking
that we get a 'end of column' in the server is performed).
+
+ @param thd Thread handle
+ @param packet String to append
+ @param packet_length Length of string (including end \\0)
*/
void mysql_stmt_get_longdata(THD *thd, char *packet, ulong packet_length)
@@ -2590,6 +2586,8 @@ void mysql_stmt_get_longdata(THD *thd, char *packet, ulong packet_length)
DBUG_ENTER("mysql_stmt_get_longdata");
status_var_increment(thd->status_var.com_stmt_send_long_data);
+
+ thd->main_da.disable_status();
#ifndef EMBEDDED_LIBRARY
/* Minimal size of long data packet is 6 bytes */
if (packet_length < MYSQL_LONG_DATA_HEADER)
@@ -2664,11 +2662,7 @@ bool Select_fetch_protocol_binary::send_fields(List<Item> &list, uint flags)
bool Select_fetch_protocol_binary::send_eof()
{
- Protocol *save_protocol= thd->protocol;
-
- thd->protocol= &protocol;
::send_eof(thd);
- thd->protocol= save_protocol;
return FALSE;
}
@@ -2700,7 +2694,7 @@ Prepared_statement::Prepared_statement(THD *thd_arg, Protocol *protocol_arg)
last_errno(0),
flags((uint) IS_IN_USE)
{
- init_alloc_root(&main_mem_root, thd_arg->variables.query_alloc_block_size,
+ init_sql_alloc(&main_mem_root, thd_arg->variables.query_alloc_block_size,
thd_arg->variables.query_prealloc_size);
*last_error= '\0';
}
@@ -2742,12 +2736,12 @@ void Prepared_statement::setup_set_params()
}
-/*
- DESCRIPTION
- Destroy this prepared statement, cleaning up all used memory
- and resources. This is called from ::deallocate() to
- handle COM_STMT_CLOSE and DEALLOCATE PREPARE or when
- THD ends and all prepared statements are freed.
+/**
+ Destroy this prepared statement, cleaning up all used memory
+ and resources.
+
+ This is called from ::deallocate() to handle COM_STMT_CLOSE and
+ DEALLOCATE PREPARE or when THD ends and all prepared statements are freed.
*/
Prepared_statement::~Prepared_statement()
@@ -2804,28 +2798,24 @@ bool Prepared_statement::set_name(LEX_STRING *name_arg)
global THD state management to the caller.
***************************************************************************/
-/*
+/**
Parse statement text, validate the statement, and prepare it for execution.
- SYNOPSIS
- Prepared_statement::prepare()
- packet statement text
- packet_len
-
- DESCRIPTION
You should not change global THD state in this function, if at all
possible: it may be called from any context, e.g. when executing
a COM_* command, and SQLCOM_* command, or a stored procedure.
- NOTES
- Precondition.
- -------------
+ @param packet statement text
+ @param packet_len
+
+ @note
+ Precondition:
The caller must ensure that thd->change_list and thd->free_list
is empty: this function will not back them up but will free
in the end of its execution.
- Postcondition.
- --------------
+ @note
+ Postcondition:
thd->mem_root contains unused memory allocated during validation.
*/
@@ -2864,7 +2854,7 @@ bool Prepared_statement::prepare(const char *packet, uint packet_len)
lex_start(thd);
error= parse_sql(thd, &lip, NULL) ||
- thd->net.report_error ||
+ thd->is_error() ||
init_param_array(this);
lex->set_trg_event_type_for_tables();
@@ -2952,28 +2942,25 @@ bool Prepared_statement::prepare(const char *packet, uint packet_len)
DBUG_RETURN(error);
}
-/*
+/**
Execute a prepared statement.
- SYNOPSIS
- Prepared_statement::execute()
- expanded_query A query for binlogging which has all parameter
- markers ('?') replaced with their actual values.
- open_cursor True if an attempt to open a cursor should be made.
- Currenlty used only in the binary protocol.
-
- DESCRIPTION
You should not change global THD state in this function, if at all
possible: it may be called from any context, e.g. when executing
a COM_* command, and SQLCOM_* command, or a stored procedure.
- NOTES
- Preconditions, postconditions.
- ------------------------------
- See the comment for Prepared_statement::prepare().
+ @param expanded_query A query for binlogging which has all parameter
+ markers ('?') replaced with their actual values.
+ @param open_cursor True if an attempt to open a cursor should be made.
+ Currenlty used only in the binary protocol.
+
+ @note
+ Preconditions, postconditions.
+ - See the comment for Prepared_statement::prepare().
- RETURN
- FALSE ok
+ @retval
+ FALSE ok
+ @retval
TRUE Error
*/
@@ -3097,7 +3084,6 @@ bool Prepared_statement::execute(String *expanded_query, bool open_cursor)
thd->query_length) <= 0)
{
error= mysql_execute_command(thd);
- query_cache_end_of_result(thd);
}
}
@@ -3153,7 +3139,7 @@ error:
}
-/* Common part of DEALLOCATE PREPARE and mysql_stmt_close */
+/** Common part of DEALLOCATE PREPARE and mysql_stmt_close. */
bool Prepared_statement::deallocate()
{
diff --git a/sql/sql_profile.cc b/sql/sql_profile.cc
new file mode 100644
index 00000000000..1922fa3bc2b
--- /dev/null
+++ b/sql/sql_profile.cc
@@ -0,0 +1,672 @@
+/* Copyright (C) 2007 MySQL AB
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; version 2 of the License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+
+/**
+ @file
+
+ Implement query profiling as as list of metaphorical fences, with one fence
+ per query, and each fencepost a change of thd->proc_info state (with a
+ snapshot of system statistics). When asked, we can then iterate over the
+ fenceposts and calculate the distance between them, to inform the user what
+ happened during a particular query or thd->proc_info state.
+
+ User variables that inform profiling behavior:
+ - "profiling", boolean, session only, "Are queries profiled?"
+ - "profiling_history_size", integer, session + global, "Num queries stored?"
+*/
+
+
+#include "mysql_priv.h"
+#include "my_sys.h"
+
+#define TIME_FLOAT_DIGITS 9
+/** two vals encoded: (dec*100)+len */
+#define TIME_I_S_DECIMAL_SIZE (TIME_FLOAT_DIGITS*100)+(TIME_FLOAT_DIGITS-3)
+
+#define MAX_QUERY_LENGTH 300
+
+/* Reserved for systems that can't record the function name in source. */
+const char * const _unknown_func_ = "<unknown>";
+
+/**
+ Connects Information_Schema and Profiling.
+*/
+int fill_query_profile_statistics_info(THD *thd, TABLE_LIST *tables,
+ Item *cond)
+{
+#if defined(ENABLED_PROFILING) && defined(COMMUNITY_SERVER)
+ return(thd->profiling.fill_statistics_info(thd, tables, cond));
+#else
+ my_error(ER_FEATURE_DISABLED, MYF(0), "SHOW PROFILE", "enable-profiling");
+ return(1);
+#endif
+}
+
+ST_FIELD_INFO query_profile_statistics_info[]=
+{
+ /* name, length, type, value, maybe_null, old_name, open_method */
+ {"QUERY_ID", 20, MYSQL_TYPE_LONG, 0, false, "Query_id", SKIP_OPEN_TABLE},
+ {"SEQ", 20, MYSQL_TYPE_LONG, 0, false, "Seq", SKIP_OPEN_TABLE},
+ {"STATE", 30, MYSQL_TYPE_STRING, 0, false, "Status", SKIP_OPEN_TABLE},
+ {"DURATION", TIME_I_S_DECIMAL_SIZE, MYSQL_TYPE_DECIMAL, 0, false, "Duration", SKIP_OPEN_TABLE},
+ {"CPU_USER", TIME_I_S_DECIMAL_SIZE, MYSQL_TYPE_DECIMAL, 0, true, "CPU_user", SKIP_OPEN_TABLE},
+ {"CPU_SYSTEM", TIME_I_S_DECIMAL_SIZE, MYSQL_TYPE_DECIMAL, 0, true, "CPU_system", SKIP_OPEN_TABLE},
+ {"CONTEXT_VOLUNTARY", 20, MYSQL_TYPE_LONG, 0, true, "Context_voluntary", SKIP_OPEN_TABLE},
+ {"CONTEXT_INVOLUNTARY", 20, MYSQL_TYPE_LONG, 0, true, "Context_involuntary", SKIP_OPEN_TABLE},
+ {"BLOCK_OPS_IN", 20, MYSQL_TYPE_LONG, 0, true, "Block_ops_in", SKIP_OPEN_TABLE},
+ {"BLOCK_OPS_OUT", 20, MYSQL_TYPE_LONG, 0, true, "Block_ops_out", SKIP_OPEN_TABLE},
+ {"MESSAGES_SENT", 20, MYSQL_TYPE_LONG, 0, true, "Messages_sent", SKIP_OPEN_TABLE},
+ {"MESSAGES_RECEIVED", 20, MYSQL_TYPE_LONG, 0, true, "Messages_received", SKIP_OPEN_TABLE},
+ {"PAGE_FAULTS_MAJOR", 20, MYSQL_TYPE_LONG, 0, true, "Page_faults_major", SKIP_OPEN_TABLE},
+ {"PAGE_FAULTS_MINOR", 20, MYSQL_TYPE_LONG, 0, true, "Page_faults_minor", SKIP_OPEN_TABLE},
+ {"SWAPS", 20, MYSQL_TYPE_LONG, 0, true, "Swaps", SKIP_OPEN_TABLE},
+ {"SOURCE_FUNCTION", 30, MYSQL_TYPE_STRING, 0, true, "Source_function", SKIP_OPEN_TABLE},
+ {"SOURCE_FILE", 20, MYSQL_TYPE_STRING, 0, true, "Source_file", SKIP_OPEN_TABLE},
+ {"SOURCE_LINE", 20, MYSQL_TYPE_LONG, 0, true, "Source_line", SKIP_OPEN_TABLE},
+ {NULL, 0, MYSQL_TYPE_STRING, 0, true, NULL, 0}
+};
+
+
+int make_profile_table_for_show(THD *thd, ST_SCHEMA_TABLE *schema_table)
+{
+ int profile_options = thd->lex->profile_options;
+ int fields_include_condition_truth_values[]= {
+ FALSE, /* Query_id */
+ FALSE, /* Seq */
+ TRUE, /* Status */
+ TRUE, /* Duration */
+ profile_options & PROFILE_CPU, /* CPU_user */
+ profile_options & PROFILE_CPU, /* CPU_system */
+ profile_options & PROFILE_CONTEXT, /* Context_voluntary */
+ profile_options & PROFILE_CONTEXT, /* Context_involuntary */
+ profile_options & PROFILE_BLOCK_IO, /* Block_ops_in */
+ profile_options & PROFILE_BLOCK_IO, /* Block_ops_out */
+ profile_options & PROFILE_IPC, /* Messages_sent */
+ profile_options & PROFILE_IPC, /* Messages_received */
+ profile_options & PROFILE_PAGE_FAULTS, /* Page_faults_major */
+ profile_options & PROFILE_PAGE_FAULTS, /* Page_faults_minor */
+ profile_options & PROFILE_SWAPS, /* Swaps */
+ profile_options & PROFILE_SOURCE, /* Source_function */
+ profile_options & PROFILE_SOURCE, /* Source_file */
+ profile_options & PROFILE_SOURCE, /* Source_line */
+ };
+
+ ST_FIELD_INFO *field_info;
+ Name_resolution_context *context= &thd->lex->select_lex.context;
+ int i;
+
+ for (i= 0; schema_table->fields_info[i].field_name != NULL; i++)
+ {
+ if (! fields_include_condition_truth_values[i])
+ continue;
+
+ field_info= &schema_table->fields_info[i];
+ Item_field *field= new Item_field(context,
+ NullS, NullS, field_info->field_name);
+ if (field)
+ {
+ field->set_name(field_info->old_name,
+ strlen(field_info->old_name),
+ system_charset_info);
+ if (add_item_to_list(thd, field))
+ return 1;
+ }
+ }
+ return 0;
+}
+
+
+#if defined(ENABLED_PROFILING) && defined(COMMUNITY_SERVER)
+
+#define RUSAGE_USEC(tv) ((tv).tv_sec*1000*1000 + (tv).tv_usec)
+#define RUSAGE_DIFF_USEC(tv1, tv2) (RUSAGE_USEC((tv1))-RUSAGE_USEC((tv2)))
+
+
+PROF_MEASUREMENT::PROF_MEASUREMENT(QUERY_PROFILE *profile_arg, const char
+ *status_arg)
+ :profile(profile_arg)
+{
+ collect();
+ set_label(status_arg, NULL, NULL, 0);
+}
+
+PROF_MEASUREMENT::PROF_MEASUREMENT(QUERY_PROFILE *profile_arg,
+ const char *status_arg,
+ const char *function_arg,
+ const char *file_arg,
+ unsigned int line_arg)
+ :profile(profile_arg)
+{
+ collect();
+ set_label(status_arg, function_arg, file_arg, line_arg);
+}
+
+PROF_MEASUREMENT::~PROF_MEASUREMENT()
+{
+ if (allocated_status_memory != NULL)
+ my_free(allocated_status_memory, MYF(0));
+ status= function= file= NULL;
+}
+
+void PROF_MEASUREMENT::set_label(const char *status_arg,
+ const char *function_arg,
+ const char *file_arg, unsigned int line_arg)
+{
+ size_t sizes[3]; /* 3 == status+function+file */
+ char *cursor;
+
+ /*
+ Compute all the space we'll need to allocate one block for everything
+ we'll need, instead of N mallocs.
+ */
+ sizes[0]= (status_arg == NULL) ? 0 : strlen(status_arg) + 1;
+ sizes[1]= (function_arg == NULL) ? 0 : strlen(function_arg) + 1;
+ sizes[2]= (file_arg == NULL) ? 0 : strlen(file_arg) + 1;
+
+ allocated_status_memory= (char *) my_malloc(sizes[0] + sizes[1] + sizes[2], MYF(0));
+ DBUG_ASSERT(allocated_status_memory != NULL);
+
+ cursor= allocated_status_memory;
+
+ if (status_arg != NULL)
+ {
+ strcpy(cursor, status_arg);
+ status= cursor;
+ cursor+= sizes[0];
+ }
+ else
+ status= NULL;
+
+ if (function_arg != NULL)
+ {
+ strcpy(cursor, function_arg);
+ function= cursor;
+ cursor+= sizes[1];
+ }
+ else
+ function= NULL;
+
+ if (file_arg != NULL)
+ {
+ strcpy(cursor, file_arg);
+ file= cursor;
+ cursor+= sizes[2];
+ }
+ else
+ file= NULL;
+
+ line= line_arg;
+}
+
+/**
+ This updates the statistics for this moment of time. It captures the state
+ of the running system, so later we can compare points in time and infer what
+ happened in the mean time. It should only be called immediately upon
+ instantiation of this PROF_MEASUREMENT.
+
+ @todo Implement resource capture for OSes not like BSD.
+*/
+void PROF_MEASUREMENT::collect()
+{
+ time_usecs= (double) my_getsystime() / 10.0; /* 1 sec was 1e7, now is 1e6 */
+#ifdef HAVE_GETRUSAGE
+ getrusage(RUSAGE_SELF, &rusage);
+#endif
+}
+
+
+QUERY_PROFILE::QUERY_PROFILE(PROFILING *profiling_arg, const char *status_arg)
+ :profiling(profiling_arg), profiling_query_id(0), query_source(NULL)
+{
+ profile_start= new PROF_MEASUREMENT(this, status_arg);
+ entries.push_back(profile_start);
+ profile_end= profile_start;
+}
+
+QUERY_PROFILE::~QUERY_PROFILE()
+{
+ while (! entries.is_empty())
+ delete entries.pop();
+
+ if (query_source != NULL)
+ my_free(query_source, MYF(0));
+}
+
+/**
+ @todo Provide a way to include the full text, as in SHOW PROCESSLIST.
+*/
+void QUERY_PROFILE::set_query_source(char *query_source_arg,
+ uint query_length_arg)
+{
+ /* Truncate to avoid DoS attacks. */
+ uint length= min(MAX_QUERY_LENGTH, query_length_arg);
+
+ DBUG_ASSERT(query_source == NULL); /* we don't leak memory */
+ if (query_source_arg != NULL)
+ query_source= my_strndup(query_source_arg, length, MYF(0));
+}
+
+void QUERY_PROFILE::new_status(const char *status_arg,
+ const char *function_arg, const char *file_arg,
+ unsigned int line_arg)
+{
+ PROF_MEASUREMENT *prof;
+ DBUG_ENTER("QUERY_PROFILE::status");
+
+ DBUG_ASSERT(status_arg != NULL);
+
+ if ((function_arg != NULL) && (file_arg != NULL))
+ prof= new PROF_MEASUREMENT(this, status_arg, function_arg, file_arg, line_arg);
+ else
+ prof= new PROF_MEASUREMENT(this, status_arg);
+
+ profile_end= prof;
+ entries.push_back(prof);
+
+ DBUG_VOID_RETURN;
+}
+
+
+
+PROFILING::PROFILING()
+ :profile_id_counter(1), current(NULL), last(NULL)
+{
+}
+
+PROFILING::~PROFILING()
+{
+ while (! history.is_empty())
+ delete history.pop();
+
+ if (current != NULL)
+ delete current;
+}
+
+/**
+ A new state is given, and that signals the profiler to start a new
+ timed step for the current query's profile.
+
+ @param status_arg name of this step
+ @param function_arg calling function (usually supplied from compiler)
+ @param function_arg calling file (usually supplied from compiler)
+ @param function_arg calling line number (usually supplied from compiler)
+*/
+void PROFILING::status_change(const char *status_arg,
+ const char *function_arg,
+ const char *file_arg, unsigned int line_arg)
+{
+ DBUG_ENTER("PROFILING::status_change");
+
+ if (status_arg == NULL) /* We don't know how to handle that */
+ DBUG_VOID_RETURN;
+
+ if (current == NULL) /* This profile was already discarded. */
+ DBUG_VOID_RETURN;
+
+ if (unlikely(enabled))
+ current->new_status(status_arg, function_arg, file_arg, line_arg);
+
+ DBUG_VOID_RETURN;
+}
+
+/**
+ Prepare to start processing a new query. It is an error to do this
+ if there's a query already in process; nesting is not supported.
+
+ @param initial_state (optional) name of period before first state change
+*/
+void PROFILING::start_new_query(const char *initial_state)
+{
+ DBUG_ENTER("PROFILING::start_new_query");
+
+ /* This should never happen unless the server is radically altered. */
+ if (unlikely(current != NULL))
+ {
+ DBUG_PRINT("warning", ("profiling code was asked to start a new query "
+ "before the old query was finished. This is "
+ "probably a bug."));
+ finish_current_query();
+ }
+
+ enabled= (((thd)->options & OPTION_PROFILING) != 0);
+
+ if (! enabled) DBUG_VOID_RETURN;
+
+ DBUG_ASSERT(current == NULL);
+ current= new QUERY_PROFILE(this, initial_state);
+
+ DBUG_VOID_RETURN;
+}
+
+/**
+ Throw away the current profile, because it's useless or unwanted
+ or corrupted.
+*/
+void PROFILING::discard_current_query()
+{
+ DBUG_ENTER("PROFILING::discard_current_profile");
+
+ delete current;
+ current= NULL;
+
+ DBUG_VOID_RETURN;
+}
+
+/**
+ Try to save the current profile entry, clean up the data if it shouldn't be
+ saved, and maintain the profile history size. Naturally, this may not
+ succeed if the profile was previously discarded, and that's expected.
+*/
+void PROFILING::finish_current_query()
+{
+ DBUG_ENTER("PROFILING::finish_current_profile");
+ if (current != NULL)
+ {
+ /* The last fence-post, so we can support the span before this. */
+ status_change("ending", NULL, NULL, 0);
+
+ if ((enabled) && /* ON at start? */
+ ((thd->options & OPTION_PROFILING) != 0) && /* and ON at end? */
+ (current->query_source != NULL) &&
+ (! current->entries.is_empty()))
+ {
+ current->profiling_query_id= next_profile_id(); /* assign an id */
+
+ history.push_back(current);
+ last= current; /* never contains something that is not in the history. */
+ current= NULL;
+ }
+ else
+ {
+ delete current;
+ current= NULL;
+ }
+ }
+
+ /* Maintain the history size. */
+ while (history.elements > thd->variables.profiling_history_size)
+ delete history.pop();
+
+ DBUG_VOID_RETURN;
+}
+
+bool PROFILING::show_profiles()
+{
+ DBUG_ENTER("PROFILING::show_profiles");
+ QUERY_PROFILE *prof;
+ List<Item> field_list;
+
+ field_list.push_back(new Item_return_int("Query_ID", 10,
+ MYSQL_TYPE_LONG));
+ field_list.push_back(new Item_return_int("Duration", TIME_FLOAT_DIGITS-1,
+ MYSQL_TYPE_DOUBLE));
+ field_list.push_back(new Item_empty_string("Query", 40));
+
+ if (thd->protocol->send_fields(&field_list,
+ Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
+ DBUG_RETURN(TRUE);
+
+ SELECT_LEX *sel= &thd->lex->select_lex;
+ SELECT_LEX_UNIT *unit= &thd->lex->unit;
+ ha_rows idx= 0;
+ Protocol *protocol= thd->protocol;
+
+ unit->set_limit(sel);
+
+ void *iterator;
+ for (iterator= history.new_iterator();
+ iterator != NULL;
+ iterator= history.iterator_next(iterator))
+ {
+ prof= history.iterator_value(iterator);
+
+ String elapsed;
+
+ PROF_MEASUREMENT *ps= prof->profile_start;
+ PROF_MEASUREMENT *pe= prof->profile_end;
+
+ if (++idx <= unit->offset_limit_cnt)
+ continue;
+ if (idx > unit->select_limit_cnt)
+ break;
+
+ protocol->prepare_for_resend();
+ protocol->store((uint32)(prof->profiling_query_id));
+ protocol->store((double)(pe->time_usecs - ps->time_usecs)/(1000.0*1000),
+ (uint32) TIME_FLOAT_DIGITS-1, &elapsed);
+ if (prof->query_source != NULL)
+ protocol->store(prof->query_source, strlen(prof->query_source),
+ system_charset_info);
+ else
+ protocol->store_null();
+
+ if (protocol->write())
+ DBUG_RETURN(TRUE);
+ }
+ send_eof(thd);
+ DBUG_RETURN(FALSE);
+}
+
+/**
+ At a point in execution where we know the query source, save the text
+ of it in the query profile.
+
+ This must be called exactly once per descrete statement.
+*/
+void PROFILING::set_query_source(char *query_source_arg, uint query_length_arg)
+{
+ DBUG_ENTER("PROFILING::set_query_source");
+
+ if (! enabled)
+ DBUG_VOID_RETURN;
+
+ if (current != NULL)
+ current->set_query_source(query_source_arg, query_length_arg);
+ else
+ DBUG_PRINT("info", ("no current profile to send query source to"));
+ DBUG_VOID_RETURN;
+}
+
+/**
+ Fill the information schema table, "query_profile", as defined in show.cc .
+ There are two ways to get to this function: Selecting from the information
+ schema, and a SHOW command.
+*/
+int PROFILING::fill_statistics_info(THD *thd, TABLE_LIST *tables, Item *cond)
+{
+ DBUG_ENTER("PROFILING::fill_statistics_info");
+ TABLE *table= tables->table;
+ ulonglong row_number= 0;
+
+ QUERY_PROFILE *query;
+ /* Go through each query in this thread's stored history... */
+ void *history_iterator;
+ for (history_iterator= history.new_iterator();
+ history_iterator != NULL;
+ history_iterator= history.iterator_next(history_iterator))
+ {
+ query= history.iterator_value(history_iterator);
+
+ /*
+ Because we put all profiling info into a table that may be reordered, let
+ us also include a numbering of each state per query. The query_id and
+ the "seq" together are unique.
+ */
+ ulonglong seq;
+
+ void *entry_iterator;
+ PROF_MEASUREMENT *entry, *previous= NULL;
+ /* ...and for each query, go through all its state-change steps. */
+ for (seq= 0, entry_iterator= query->entries.new_iterator();
+ entry_iterator != NULL;
+ entry_iterator= query->entries.iterator_next(entry_iterator),
+ seq++, previous=entry, row_number++)
+ {
+ entry= query->entries.iterator_value(entry_iterator);
+
+ /* Skip the first. We count spans of fence, not fence-posts. */
+ if (previous == NULL) continue;
+
+ if (thd->lex->sql_command == SQLCOM_SHOW_PROFILE)
+ {
+ /*
+ We got here via a SHOW command. That means that we stored
+ information about the query we wish to show and that isn't
+ in a WHERE clause at a higher level to filter out rows we
+ wish to exclude.
+
+ Because that functionality isn't available in the server yet,
+ we must filter here, at the wrong level. Once one can con-
+ struct where and having conditions at the SQL layer, then this
+ condition should be ripped out.
+ */
+ if (thd->lex->profile_query_id == 0) /* 0 == show final query */
+ {
+ if (query != last)
+ continue;
+ }
+ else
+ {
+ if (thd->lex->profile_query_id != query->profiling_query_id)
+ continue;
+ }
+ }
+
+ /* Set default values for this row. */
+ restore_record(table, s->default_values);
+
+ /*
+ The order of these fields is set by the query_profile_statistics_info
+ array.
+ */
+ table->field[0]->store((ulonglong) query->profiling_query_id);
+ table->field[1]->store((ulonglong) seq); /* the step in the sequence */
+ /*
+ This entry, n, has a point in time, T(n), and a status phrase, S(n).
+ The status phrase S(n) describes the period of time that begins at
+ T(n). The previous status phrase S(n-1) describes the period of time
+ that starts at T(n-1) and ends at T(n). Since we want to describe the
+ time that a status phrase took T(n)-T(n-1), this line must describe the
+ previous status.
+ */
+ table->field[2]->store(previous->status, strlen(previous->status),
+ system_charset_info);
+
+ my_decimal duration_decimal;
+ double2my_decimal(E_DEC_FATAL_ERROR,
+ (entry->time_usecs-previous->time_usecs)/(1000.0*1000),
+ &duration_decimal);
+
+ table->field[3]->store_decimal(&duration_decimal);
+
+
+#ifdef HAVE_GETRUSAGE
+
+ my_decimal cpu_utime_decimal, cpu_stime_decimal;
+
+ double2my_decimal(E_DEC_FATAL_ERROR,
+ RUSAGE_DIFF_USEC(entry->rusage.ru_utime,
+ previous->rusage.ru_utime) /
+ (1000.0*1000),
+ &cpu_utime_decimal);
+
+ double2my_decimal(E_DEC_FATAL_ERROR,
+ RUSAGE_DIFF_USEC(entry->rusage.ru_stime,
+ previous->rusage.ru_stime) /
+ (1000.0*1000),
+ &cpu_stime_decimal);
+
+ table->field[4]->store_decimal(&cpu_utime_decimal);
+ table->field[5]->store_decimal(&cpu_stime_decimal);
+ table->field[4]->set_notnull();
+ table->field[5]->set_notnull();
+#else
+ /* TODO: Add CPU-usage info for non-BSD systems */
+#endif
+
+#ifdef HAVE_GETRUSAGE
+ table->field[6]->store((uint32)(entry->rusage.ru_nvcsw -
+ previous->rusage.ru_nvcsw));
+ table->field[6]->set_notnull();
+ table->field[7]->store((uint32)(entry->rusage.ru_nivcsw -
+ previous->rusage.ru_nivcsw));
+ table->field[7]->set_notnull();
+#else
+ /* TODO: Add context switch info for non-BSD systems */
+#endif
+
+#ifdef HAVE_GETRUSAGE
+ table->field[8]->store((uint32)(entry->rusage.ru_inblock -
+ previous->rusage.ru_inblock));
+ table->field[8]->set_notnull();
+ table->field[9]->store((uint32)(entry->rusage.ru_oublock -
+ previous->rusage.ru_oublock));
+ table->field[9]->set_notnull();
+#else
+ /* TODO: Add block IO info for non-BSD systems */
+#endif
+
+#ifdef HAVE_GETRUSAGE
+ table->field[10]->store((uint32)(entry->rusage.ru_msgsnd -
+ previous->rusage.ru_msgsnd), true);
+ table->field[10]->set_notnull();
+ table->field[11]->store((uint32)(entry->rusage.ru_msgrcv -
+ previous->rusage.ru_msgrcv), true);
+ table->field[11]->set_notnull();
+#else
+ /* TODO: Add message info for non-BSD systems */
+#endif
+
+#ifdef HAVE_GETRUSAGE
+ table->field[12]->store((uint32)(entry->rusage.ru_majflt -
+ previous->rusage.ru_majflt), true);
+ table->field[12]->set_notnull();
+ table->field[13]->store((uint32)(entry->rusage.ru_minflt -
+ previous->rusage.ru_minflt), true);
+ table->field[13]->set_notnull();
+#else
+ /* TODO: Add page fault info for non-BSD systems */
+#endif
+
+#ifdef HAVE_GETRUSAGE
+ table->field[14]->store((uint32)(entry->rusage.ru_nswap -
+ previous->rusage.ru_nswap), true);
+ table->field[14]->set_notnull();
+#else
+ /* TODO: Add swap info for non-BSD systems */
+#endif
+
+ /* Emit the location that started this step, not that ended it. */
+ if ((previous->function != NULL) && (previous->file != NULL))
+ {
+ table->field[15]->store(previous->function, strlen(previous->function),
+ system_charset_info);
+ table->field[15]->set_notnull();
+ table->field[16]->store(previous->file, strlen(previous->file), system_charset_info);
+ table->field[16]->set_notnull();
+ table->field[17]->store(previous->line, true);
+ table->field[17]->set_notnull();
+ }
+
+ if (schema_table_store_record(thd, table))
+ DBUG_RETURN(1);
+
+ }
+ }
+
+ DBUG_RETURN(0);
+}
+#endif /* ENABLED_PROFILING */
diff --git a/sql/sql_profile.h b/sql/sql_profile.h
new file mode 100644
index 00000000000..b5537487d26
--- /dev/null
+++ b/sql/sql_profile.h
@@ -0,0 +1,297 @@
+/* Copyright (C) 2007 MySQL AB
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; version 2 of the License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+#ifndef _SQL_PROFILE_H
+#define _SQL_PROFILE_H
+
+#if __STDC_VERSION__ < 199901L
+# if __GNUC__ >= 2
+# define __func__ __FUNCTION__
+# else
+# define __func__ _unknown_func_
+extern const char * const _unknown_func_;
+# endif
+#elif defined(_MSC_VER)
+# if _MSC_VER < 1300
+# define __func__ _unknown_func_
+extern const char * const _unknown_func_;
+# else
+# define __func__ __FUNCTION__
+# endif
+#elif defined(__BORLANDC__)
+# define __func__ __FUNC__
+#else
+# define __func__ _unknown_func_
+extern const char * const _unknown_func_;
+#endif
+
+extern ST_FIELD_INFO query_profile_statistics_info[];
+int fill_query_profile_statistics_info(THD *thd, TABLE_LIST *tables, Item *cond);
+int make_profile_table_for_show(THD *thd, ST_SCHEMA_TABLE *schema_table);
+
+
+#define PROFILE_NONE (uint)0
+#define PROFILE_CPU (uint)(1<<0)
+#define PROFILE_MEMORY (uint)(1<<1)
+#define PROFILE_BLOCK_IO (uint)(1<<2)
+#define PROFILE_CONTEXT (uint)(1<<3)
+#define PROFILE_PAGE_FAULTS (uint)(1<<4)
+#define PROFILE_IPC (uint)(1<<5)
+#define PROFILE_SWAPS (uint)(1<<6)
+#define PROFILE_SOURCE (uint)(1<<16)
+#define PROFILE_ALL (uint)(~0)
+
+
+#if defined(ENABLED_PROFILING) && defined(COMMUNITY_SERVER)
+#include "mysql_priv.h"
+
+#ifdef HAVE_SYS_RESOURCE_H
+#include <sys/resource.h>
+#endif
+
+
+class PROF_MEASUREMENT;
+class QUERY_PROFILE;
+class PROFILING;
+
+
+/**
+ Implements a persistent FIFO using server List method names. Not
+ thread-safe. Intended to be used on thread-local data only.
+*/
+template <class T> class Queue
+{
+private:
+
+ struct queue_item
+ {
+ T *payload;
+ struct queue_item *next, *previous;
+ };
+
+ struct queue_item *first, *last;
+
+public:
+ Queue()
+ {
+ elements= 0;
+ first= last= NULL;
+ }
+
+ void empty()
+ {
+ struct queue_item *i, *after_i;
+ for (i= first; i != NULL; i= after_i)
+ {
+ after_i= i->next;
+ my_free((char *) i, MYF(0));
+ }
+ elements= 0;
+ }
+
+ ulong elements; /* The count of items in the Queue */
+
+ void push_back(T *payload)
+ {
+ struct queue_item *new_item;
+
+ new_item= (struct queue_item *) my_malloc(sizeof(struct queue_item), MYF(0));
+
+ new_item->payload= payload;
+
+ if (first == NULL)
+ first= new_item;
+ if (last != NULL)
+ {
+ DBUG_ASSERT(last->next == NULL);
+ last->next= new_item;
+ }
+ new_item->previous= last;
+ new_item->next= NULL;
+ last= new_item;
+
+ elements++;
+ }
+
+ T *pop()
+ {
+ struct queue_item *old_item= first;
+ T *ret= NULL;
+
+ if (first == NULL)
+ {
+ DBUG_PRINT("warning", ("tried to pop nonexistent item from Queue"));
+ return NULL;
+ }
+
+ ret= old_item->payload;
+ if (first->next != NULL)
+ first->next->previous= NULL;
+ else
+ last= NULL;
+ first= first->next;
+
+ my_free((char *)old_item, MYF(0));
+ elements--;
+
+ return ret;
+ }
+
+ bool is_empty()
+ {
+ DBUG_ASSERT(((elements > 0) && (first != NULL)) || ((elements == 0) || (first == NULL)));
+ return (elements == 0);
+ }
+
+ void *new_iterator()
+ {
+ return first;
+ }
+
+ void *iterator_next(void *current)
+ {
+ return ((struct queue_item *) current)->next;
+ }
+
+ T *iterator_value(void *current)
+ {
+ return ((struct queue_item *) current)->payload;
+ }
+
+};
+
+
+/**
+ A single entry in a single profile.
+*/
+class PROF_MEASUREMENT
+{
+private:
+ friend class QUERY_PROFILE;
+ friend class PROFILING;
+
+ QUERY_PROFILE *profile;
+ char *status;
+#ifdef HAVE_GETRUSAGE
+ struct rusage rusage;
+#endif
+
+ char *function;
+ char *file;
+ unsigned int line;
+
+ double time_usecs;
+ char *allocated_status_memory;
+
+ void set_label(const char *status_arg, const char *function_arg,
+ const char *file_arg, unsigned int line_arg);
+ void clean_up();
+
+ PROF_MEASUREMENT();
+ PROF_MEASUREMENT(QUERY_PROFILE *profile_arg, const char *status_arg);
+ PROF_MEASUREMENT(QUERY_PROFILE *profile_arg, const char *status_arg,
+ const char *function_arg,
+ const char *file_arg, unsigned int line_arg);
+ ~PROF_MEASUREMENT();
+ void collect();
+};
+
+
+/**
+ The full profile for a single query, and includes multiple PROF_MEASUREMENT
+ objects.
+*/
+class QUERY_PROFILE
+{
+private:
+ friend class PROFILING;
+
+ PROFILING *profiling;
+
+ query_id_t profiling_query_id; /* Session-specific id. */
+ char *query_source;
+
+ PROF_MEASUREMENT *profile_start;
+ PROF_MEASUREMENT *profile_end;
+ Queue<PROF_MEASUREMENT> entries;
+
+
+ QUERY_PROFILE(PROFILING *profiling_arg, const char *status_arg);
+ ~QUERY_PROFILE();
+
+ void set_query_source(char *query_source_arg, uint query_length_arg);
+
+ /* Add a profile status change to the current profile. */
+ void new_status(const char *status_arg,
+ const char *function_arg,
+ const char *file_arg, unsigned int line_arg);
+
+ /* Reset the contents of this profile entry. */
+ void reset();
+
+ /* Show this profile. This is called by PROFILING. */
+ bool show(uint options);
+};
+
+
+/**
+ Profiling state for a single THD; contains multiple QUERY_PROFILE objects.
+*/
+class PROFILING
+{
+private:
+ friend class PROF_MEASUREMENT;
+ friend class QUERY_PROFILE;
+
+ /*
+ Not the system query_id, but a counter unique to profiling.
+ */
+ query_id_t profile_id_counter;
+ THD *thd;
+ bool keeping;
+ bool enabled;
+
+ QUERY_PROFILE *current;
+ QUERY_PROFILE *last;
+ Queue<QUERY_PROFILE> history;
+
+ query_id_t next_profile_id() { return(profile_id_counter++); }
+
+public:
+ PROFILING();
+ ~PROFILING();
+ void set_query_source(char *query_source_arg, uint query_length_arg);
+
+ void start_new_query(const char *initial_state= "starting");
+
+ void discard_current_query();
+
+ void finish_current_query();
+
+ void status_change(const char *status_arg,
+ const char *function_arg,
+ const char *file_arg, unsigned int line_arg);
+
+ inline void set_thd(THD *thd_arg) { thd= thd_arg; };
+
+ /* SHOW PROFILES */
+ bool show_profiles();
+
+ /* ... from INFORMATION_SCHEMA.PROFILING ... */
+ int fill_statistics_info(THD *thd, TABLE_LIST *tables, Item *cond);
+};
+
+# endif /* HAVE_PROFILING */
+#endif /* _SQL_PROFILE_H */
diff --git a/sql/sql_rename.cc b/sql/sql_rename.cc
index 750bcd50479..9dd8e1b70d4 100644
--- a/sql/sql_rename.cc
+++ b/sql/sql_rename.cc
@@ -51,6 +51,8 @@ bool mysql_rename_tables(THD *thd, TABLE_LIST *table_list, bool silent)
DBUG_RETURN(1);
}
+ mysql_ha_rm_tables(thd, table_list, FALSE);
+
if (wait_if_global_read_lock(thd,0,1))
DBUG_RETURN(1);
diff --git a/sql/sql_repl.cc b/sql/sql_repl.cc
index a6e52c05219..cdce2fa695b 100644
--- a/sql/sql_repl.cc
+++ b/sql/sql_repl.cc
@@ -369,7 +369,6 @@ void mysql_binlog_send(THD* thd, char* log_ident, my_off_t pos,
name=0; // Find first log
linfo.index_file_offset = 0;
- thd->current_linfo = &linfo;
if (mysql_bin_log.find_log_pos(&linfo, name, 1))
{
@@ -378,6 +377,10 @@ void mysql_binlog_send(THD* thd, char* log_ident, my_off_t pos,
goto err;
}
+ pthread_mutex_lock(&LOCK_thread_count);
+ thd->current_linfo = &linfo;
+ pthread_mutex_unlock(&LOCK_thread_count);
+
if ((file=open_binlog(&log, log_file_name, &errmsg)) < 0)
{
my_errno= ER_MASTER_FATAL_ERROR_READING_BINLOG;
@@ -652,7 +655,7 @@ impossible position";
if (read_packet)
{
- thd->proc_info = "Sending binlog event to slave";
+ thd_proc_info(thd, "Sending binlog event to slave");
if (my_net_write(net, (uchar*) packet->ptr(), packet->length()) )
{
errmsg = "Failed on my_net_write()";
@@ -690,7 +693,7 @@ impossible position";
bool loop_breaker = 0;
/* need this to break out of the for loop from switch */
- thd->proc_info = "Finished reading one binlog; switching to next binlog";
+ thd_proc_info(thd, "Finished reading one binlog; switching to next binlog");
switch (mysql_bin_log.find_next_log(&linfo, 1)) {
case LOG_INFO_EOF:
loop_breaker = (flags & BINLOG_DUMP_NON_BLOCK);
@@ -736,14 +739,14 @@ end:
(void)my_close(file, MYF(MY_WME));
send_eof(thd);
- thd->proc_info = "Waiting to finalize termination";
+ thd_proc_info(thd, "Waiting to finalize termination");
pthread_mutex_lock(&LOCK_thread_count);
thd->current_linfo = 0;
pthread_mutex_unlock(&LOCK_thread_count);
DBUG_VOID_RETURN;
err:
- thd->proc_info = "Waiting to finalize termination";
+ thd_proc_info(thd, "Waiting to finalize termination");
end_io_cache(&log);
/*
Exclude iteration through thread list
@@ -897,7 +900,7 @@ int stop_slave(THD* thd, Master_info* mi, bool net_report )
if (check_access(thd, SUPER_ACL, any_db,0,0,0,0))
DBUG_RETURN(1);
- thd->proc_info = "Killing slave";
+ thd_proc_info(thd, "Killing slave");
int thread_mask;
lock_slave_threads(mi);
// Get a mask of _running_ threads
@@ -924,7 +927,7 @@ int stop_slave(THD* thd, Master_info* mi, bool net_report )
ER(ER_SLAVE_WAS_NOT_RUNNING));
}
unlock_slave_threads(mi);
- thd->proc_info = 0;
+ thd_proc_info(thd, 0);
if (slave_errno)
{
@@ -1083,7 +1086,7 @@ bool change_master(THD* thd, Master_info* mi)
DBUG_RETURN(TRUE);
}
- thd->proc_info = "Changing master";
+ thd_proc_info(thd, "Changing master");
LEX_MASTER_INFO* lex_mi= &thd->lex->mi;
// TODO: see if needs re-write
if (init_master_info(mi, master_info_file, relay_log_info_file, 0,
@@ -1214,7 +1217,7 @@ bool change_master(THD* thd, Master_info* mi)
if (need_relay_log_purge)
{
relay_log_purge= 1;
- thd->proc_info="Purging old relay logs";
+ thd_proc_info(thd, "Purging old relay logs");
if (purge_relay_logs(&mi->rli, thd,
0 /* not only reset, but also reinit */,
&errmsg))
@@ -1240,9 +1243,6 @@ bool change_master(THD* thd, Master_info* mi)
DBUG_RETURN(TRUE);
}
}
- mi->rli.group_master_log_pos = mi->master_log_pos;
- DBUG_PRINT("info", ("master_log_pos: %lu", (ulong) mi->master_log_pos));
-
/*
Coordinates in rli were spoilt by the 'if (need_relay_log_purge)' block,
so restore them to good values. If we left them to ''/0, that would work;
@@ -1254,6 +1254,7 @@ bool change_master(THD* thd, Master_info* mi)
That's why we always save good coords in rli.
*/
mi->rli.group_master_log_pos= mi->master_log_pos;
+ DBUG_PRINT("info", ("master_log_pos: %lu", (ulong) mi->master_log_pos));
strmake(mi->rli.group_master_log_name,mi->master_log_name,
sizeof(mi->rli.group_master_log_name)-1);
@@ -1277,7 +1278,7 @@ bool change_master(THD* thd, Master_info* mi)
pthread_mutex_unlock(&mi->rli.data_lock);
unlock_slave_threads(mi);
- thd->proc_info = 0;
+ thd_proc_info(thd, 0);
send_ok(thd);
DBUG_RETURN(FALSE);
}
@@ -1359,7 +1360,6 @@ bool mysql_show_binlog_events(THD* thd)
name=0; // Find first log
linfo.index_file_offset = 0;
- thd->current_linfo = &linfo;
if (mysql_bin_log.find_log_pos(&linfo, name, 1))
{
@@ -1367,9 +1367,18 @@ bool mysql_show_binlog_events(THD* thd)
goto err;
}
+ pthread_mutex_lock(&LOCK_thread_count);
+ thd->current_linfo = &linfo;
+ pthread_mutex_unlock(&LOCK_thread_count);
+
if ((file=open_binlog(&log, linfo.log_file_name, &errmsg)) < 0)
goto err;
+ /*
+ to account binlog event header size
+ */
+ thd->variables.max_allowed_packet += MAX_LOG_EVENT_HEADER;
+
pthread_mutex_lock(log_lock);
/*
@@ -1380,7 +1389,6 @@ bool mysql_show_binlog_events(THD* thd)
This code will fail on a mixed relay log (one which has Format_desc then
Rotate then Format_desc).
*/
-
ev = Log_event::read_log_event(&log,(pthread_mutex_t*)0,description_event);
if (ev)
{
@@ -1572,39 +1580,54 @@ err:
DBUG_RETURN(TRUE);
}
-
+/**
+ Load data's io cache specific hook to be executed
+ before a chunk of data is being read into the cache's buffer
+ The fuction instantianates and writes into the binlog
+ replication events along LOAD DATA processing.
+
+ @param file pointer to io-cache
+ @return 0
+*/
int log_loaded_block(IO_CACHE* file)
{
+ DBUG_ENTER("log_loaded_block");
LOAD_FILE_INFO *lf_info;
- uint block_len ;
-
- /* file->request_pos contains position where we started last read */
- char* buffer = (char*) file->request_pos;
- if (!(block_len = (char*) file->read_end - (char*) buffer))
- return 0;
- lf_info = (LOAD_FILE_INFO*) file->arg;
+ uint block_len;
+ /* buffer contains position where we started last read */
+ uchar* buffer= (uchar*) my_b_get_buffer_start(file);
+ uint max_event_size= current_thd->variables.max_allowed_packet;
+ lf_info= (LOAD_FILE_INFO*) file->arg;
if (lf_info->thd->current_stmt_binlog_row_based)
- return 0;
+ DBUG_RETURN(0);
if (lf_info->last_pos_in_file != HA_POS_ERROR &&
- lf_info->last_pos_in_file >= file->pos_in_file)
- return 0;
- lf_info->last_pos_in_file = file->pos_in_file;
- if (lf_info->wrote_create_file)
- {
- Append_block_log_event a(lf_info->thd, lf_info->thd->db, buffer,
- block_len, lf_info->log_delayed);
- mysql_bin_log.write(&a);
- }
- else
+ lf_info->last_pos_in_file >= my_b_get_pos_in_file(file))
+ DBUG_RETURN(0);
+
+ for (block_len= my_b_get_bytes_in_buffer(file); block_len > 0;
+ buffer += min(block_len, max_event_size),
+ block_len -= min(block_len, max_event_size))
{
- Begin_load_query_log_event b(lf_info->thd, lf_info->thd->db,
- buffer, block_len,
- lf_info->log_delayed);
- mysql_bin_log.write(&b);
- lf_info->wrote_create_file = 1;
- DBUG_SYNC_POINT("debug_lock.created_file_event",10);
+ lf_info->last_pos_in_file= my_b_get_pos_in_file(file);
+ if (lf_info->wrote_create_file)
+ {
+ Append_block_log_event a(lf_info->thd, lf_info->thd->db, buffer,
+ min(block_len, max_event_size),
+ lf_info->log_delayed);
+ mysql_bin_log.write(&a);
+ }
+ else
+ {
+ Begin_load_query_log_event b(lf_info->thd, lf_info->thd->db,
+ buffer,
+ min(block_len, max_event_size),
+ lf_info->log_delayed);
+ mysql_bin_log.write(&b);
+ lf_info->wrote_create_file= 1;
+ DBUG_SYNC_POINT("debug_lock.created_file_event",10);
+ }
}
- return 0;
+ DBUG_RETURN(0);
}
/*
@@ -1651,6 +1674,9 @@ static int show_slave_skip_errors(THD *thd, SHOW_VAR *var, char *buff);
static SHOW_VAR fixed_vars[]= {
{"log_slave_updates", (char*) &opt_log_slave_updates, SHOW_MY_BOOL},
+ {"relay_log" , (char*) &opt_relay_logname, SHOW_CHAR_PTR},
+ {"relay_log_index", (char*) &opt_relaylog_index_name, SHOW_CHAR_PTR},
+ {"relay_log_info_file", (char*) &relay_log_info_file, SHOW_CHAR_PTR},
{"relay_log_space_limit", (char*) &relay_log_space_limit, SHOW_LONGLONG},
{"slave_load_tmpdir", (char*) &slave_load_tmpdir, SHOW_CHAR_PTR},
{"slave_skip_errors", (char*) &show_slave_skip_errors, SHOW_FUNC},
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index 1c8ff12eb92..d7e7be87d23 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -14,12 +14,16 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
/**
+ @file
+
+ @brief
+ mysql_select and join optimization
+
+
@defgroup Query_Optimizer Query Optimizer
@{
*/
-/* mysql_select and join optimization */
-
#ifdef USE_PRAGMA_IMPLEMENTATION
#pragma implementation // gcc: Class implementation
#endif
@@ -122,7 +126,7 @@ static int do_select(JOIN *join,List<Item> *fields,TABLE *tmp_table,
static enum_nested_loop_state
evaluate_join_record(JOIN *join, JOIN_TAB *join_tab,
- int error, my_bool *report_error);
+ int error);
static enum_nested_loop_state
evaluate_null_complemented_join_record(JOIN *join, JOIN_TAB *join_tab);
static enum_nested_loop_state
@@ -223,10 +227,11 @@ static void select_describe(JOIN *join, bool need_tmp_table,bool need_order,
bool distinct, const char *message=NullS);
static Item *remove_additional_cond(Item* conds);
static void add_group_and_distinct_keys(JOIN *join, JOIN_TAB *join_tab);
+static bool test_if_ref(Item_field *left_item,Item *right_item);
-/*
- This handles SELECT with and without UNION
+/**
+ This handles SELECT with and without UNION.
*/
bool handle_select(THD *thd, LEX *lex, select_result *result,
@@ -263,8 +268,8 @@ bool handle_select(THD *thd, LEX *lex, select_result *result,
result, unit, select_lex);
}
DBUG_PRINT("info",("res: %d report_error: %d", res,
- thd->net.report_error));
- res|= thd->net.report_error;
+ thd->is_error()));
+ res|= thd->is_error();
if (unlikely(res))
result->abort();
@@ -382,8 +387,8 @@ fix_inner_refs(THD *thd, List<Item> &all_fields, SELECT_LEX *select,
return res;
}
-/*
- Function to setup clauses without sum functions
+/**
+ Function to setup clauses without sum functions.
*/
inline int setup_without_group(THD *thd, Item **ref_pointer_array,
TABLE_LIST *tables,
@@ -416,10 +421,17 @@ inline int setup_without_group(THD *thd, Item **ref_pointer_array,
mysql_select assumes that all tables are already opened
*****************************************************************************/
-/*
+/**
Prepare of whole select (including sub queries in future).
- return -1 on error
- 0 on success
+
+ @todo
+ Add check of calculation of GROUP functions and fields:
+ SELECT COUNT(*)+table.col1 from table1;
+
+ @retval
+ -1 on error
+ @retval
+ 0 on success
*/
int
JOIN::prepare(Item ***rref_pointer_array,
@@ -491,7 +503,7 @@ JOIN::prepare(Item ***rref_pointer_array,
(having->fix_fields(thd, &having) ||
having->check_cols(1)));
select_lex->having_fix_field= 0;
- if (having_fix_rc || thd->net.report_error)
+ if (having_fix_rc || thd->is_error())
DBUG_RETURN(-1); /* purecov: inspected */
thd->lex->allow_sum_func= save_allow_sum_func;
}
@@ -571,11 +583,12 @@ JOIN::prepare(Item ***rref_pointer_array,
/*
- Check if one one uses a not constant column with group functions
- and no GROUP BY.
+ Check if there are references to un-aggregated columns when computing
+ aggregate functions with implicit grouping (there is no GROUP BY).
TODO: Add check of calculation of GROUP functions and fields:
SELECT COUNT(*)+table.col1 from table1;
*/
+ if (thd->variables.sql_mode & MODE_ONLY_FULL_GROUP_BY)
{
if (!group_list)
{
@@ -589,6 +602,13 @@ JOIN::prepare(Item ***rref_pointer_array,
else if (!(flag & 2) && !item->const_during_execution())
flag|=2;
}
+ if (having)
+ {
+ if (having->with_sum_func)
+ flag |= 1;
+ else if (!having->const_during_execution())
+ flag |= 2;
+ }
if (flag == 3)
{
my_message(ER_MIX_OF_GROUP_FUNC_AND_FIELDS,
@@ -672,9 +692,6 @@ err:
without "checking NULL", remove the predicates that were pushed down
into the subquery.
- We can remove the equalities that will be guaranteed to be true by the
- fact that subquery engine will be using index lookup.
-
If the subquery compares scalar values, we can remove the condition that
was wrapped into trig_cond (it will be checked when needed by the subquery
engine)
@@ -684,6 +701,12 @@ err:
and non-NULL values, we'll do a full table scan and will rely on the
equalities corresponding to non-NULL parts of left tuple to filter out
non-matching records.
+
+ TODO: We can remove the equalities that will be guaranteed to be true by the
+ fact that subquery engine will be using index lookup. This must be done only
+ for cases where there are no conversion errors of significance, e.g. 257
+ that is searched in a byte. But this requires homogenization of the return
+ codes of all Field*::store() methods.
*/
void JOIN::remove_subq_pushed_predicates(Item **where)
@@ -691,17 +714,13 @@ void JOIN::remove_subq_pushed_predicates(Item **where)
if (conds->type() == Item::FUNC_ITEM &&
((Item_func *)this->conds)->functype() == Item_func::EQ_FUNC &&
((Item_func *)conds)->arguments()[0]->type() == Item::REF_ITEM &&
- ((Item_func *)conds)->arguments()[1]->type() == Item::FIELD_ITEM)
+ ((Item_func *)conds)->arguments()[1]->type() == Item::FIELD_ITEM &&
+ test_if_ref ((Item_field *)((Item_func *)conds)->arguments()[1],
+ ((Item_func *)conds)->arguments()[0]))
{
*where= 0;
return;
}
- if (conds->type() == Item::COND_ITEM &&
- ((class Item_func *)this->conds)->functype() ==
- Item_func::COND_AND_FUNC)
- {
- *where= remove_additional_cond(conds);
- }
}
@@ -742,11 +761,16 @@ static void save_index_subquery_explain_info(JOIN_TAB *join_tab, Item* where)
}
-/*
+/**
global select optimisation.
- return 0 - success
- 1 - error
- error code saved in field 'error'
+
+ @note
+ error code saved in field 'error'
+
+ @retval
+ 0 success
+ @retval
+ 1 error
*/
int
@@ -758,6 +782,7 @@ JOIN::optimize()
DBUG_RETURN(0);
optimized= 1;
+ thd_proc_info(thd, "optimizing");
row_limit= ((select_distinct || order || group_list) ? HA_POS_ERROR :
unit->select_limit_cnt);
/* select_limit is used to decide if we are likely to scan the whole table */
@@ -817,7 +842,7 @@ JOIN::optimize()
}
conds= optimize_cond(this, conds, join_list, &cond_value);
- if (thd->net.report_error)
+ if (thd->is_error())
{
error= 1;
DBUG_PRINT("error",("Error from optimize_cond"));
@@ -826,7 +851,7 @@ JOIN::optimize()
{
having= optimize_cond(this, having, join_list, &having_value);
- if (thd->net.report_error)
+ if (thd->is_error())
{
error= 1;
DBUG_PRINT("error",("Error from optimize_cond"));
@@ -890,10 +915,16 @@ JOIN::optimize()
}
if (res > 1)
{
- thd->fatal_error();
error= res;
DBUG_PRINT("error",("Error from opt_sum_query"));
- DBUG_RETURN(1);
+ DBUG_RETURN(1);
+ }
+ if (res < 0)
+ {
+ DBUG_PRINT("info",("No matching min/max row"));
+ zero_result_cause= "No matching min/max row";
+ error=0;
+ DBUG_RETURN(0);
}
DBUG_PRINT("info",("Select tables optimized away"));
zero_result_cause= "Select tables optimized away";
@@ -929,7 +960,7 @@ JOIN::optimize()
sort_by_table= get_sort_by_table(order, group_list, select_lex->leaf_tables);
/* Calculate how to do the join */
- thd->proc_info= "statistics";
+ thd_proc_info(thd, "statistics");
if (make_join_statistics(this, select_lex->leaf_tables, conds, &keyuse) ||
thd->is_fatal_error)
{
@@ -939,7 +970,7 @@ JOIN::optimize()
/* Remove distinct if only const tables */
select_distinct= select_distinct && (const_tables != tables);
- thd->proc_info= "preparing";
+ thd_proc_info(thd, "preparing");
if (result->initialize_tables(this))
{
DBUG_PRINT("error",("Error: initialize_tables() failed"));
@@ -1031,7 +1062,7 @@ JOIN::optimize()
{
ORDER *org_order= order;
order=remove_const(this, order,conds,1, &simple_order);
- if (thd->net.report_error)
+ if (thd->is_error())
{
error= 1;
DBUG_PRINT("error",("Error from remove_const"));
@@ -1073,10 +1104,19 @@ JOIN::optimize()
We have found that grouping can be removed since groups correspond to
only one row anyway, but we still have to guarantee correct result
order. The line below effectively rewrites the query from GROUP BY
- <fields> to ORDER BY <fields>. One exception is if skip_sort_order is
- set (see above), then we can simply skip GROUP BY.
- */
- order= skip_sort_order ? 0 : group_list;
+ <fields> to ORDER BY <fields>. There are two exceptions:
+ - if skip_sort_order is set (see above), then we can simply skip
+ GROUP BY;
+ - we can only rewrite ORDER BY if the ORDER BY fields are 'compatible'
+ with the GROUP BY ones, i.e. either one is a prefix of another.
+ We only check if the ORDER BY is a prefix of GROUP BY. In this case
+ test_if_subpart() copies the ASC/DESC attributes from the original
+ ORDER BY fields.
+ If GROUP BY is a prefix of ORDER BY, then it is safe to leave
+ 'order' as is.
+ */
+ if (!order || test_if_subpart(group_list, order))
+ order= skip_sort_order ? 0 : group_list;
/*
If we have an IGNORE INDEX FOR GROUP BY(fields) clause, this must be
rewritten to IGNORE INDEX FOR ORDER BY(fields).
@@ -1162,7 +1202,7 @@ JOIN::optimize()
group_list= remove_const(this, (old_group_list= group_list), conds,
rollup.state == ROLLUP::STATE_NONE,
&simple_group);
- if (thd->net.report_error)
+ if (thd->is_error())
{
error= 1;
DBUG_PRINT("error",("Error from remove_const"));
@@ -1185,7 +1225,7 @@ JOIN::optimize()
{
group_list= procedure->group= remove_const(this, procedure->group, conds,
1, &simple_group);
- if (thd->net.report_error)
+ if (thd->is_error())
{
error= 1;
DBUG_PRINT("error",("Error from remove_const"));
@@ -1242,7 +1282,7 @@ JOIN::optimize()
{
if (!having)
{
- Item *where= 0;
+ Item *where= conds;
if (join_tab[0].type == JT_EQ_REF &&
join_tab[0].ref.items[0]->name == in_left_expr_name)
{
@@ -1319,8 +1359,9 @@ JOIN::optimize()
join_tab[const_tables].type != JT_REF_OR_NULL &&
(order && simple_order || group_list && simple_group))
{
- if (add_ref_to_table_cond(thd,&join_tab[const_tables]))
+ if (add_ref_to_table_cond(thd,&join_tab[const_tables])) {
DBUG_RETURN(1);
+ }
}
if (!(select_options & SELECT_BIG_RESULT) &&
@@ -1380,7 +1421,7 @@ JOIN::optimize()
if (need_tmp)
{
DBUG_PRINT("info",("Creating tmp table"));
- thd->proc_info="Creating tmp table";
+ thd_proc_info(thd, "Creating tmp table");
init_items_ref_array();
@@ -1408,7 +1449,9 @@ JOIN::optimize()
select_options,
tmp_rows_limit,
(char *) "")))
+ {
DBUG_RETURN(1);
+ }
/*
We don't have to store rows in temp table that doesn't match HAVING if:
@@ -1428,28 +1471,34 @@ JOIN::optimize()
if (group_list && simple_group)
{
DBUG_PRINT("info",("Sorting for group"));
- thd->proc_info="Sorting for group";
+ thd_proc_info(thd, "Sorting for group");
if (create_sort_index(thd, this, group_list,
HA_POS_ERROR, HA_POS_ERROR, FALSE) ||
alloc_group_fields(this, group_list) ||
make_sum_func_list(all_fields, fields_list, 1) ||
setup_sum_funcs(thd, sum_funcs))
- DBUG_RETURN(1);
+ {
+ DBUG_RETURN(1);
+ }
group_list=0;
}
else
{
if (make_sum_func_list(all_fields, fields_list, 0) ||
setup_sum_funcs(thd, sum_funcs))
- DBUG_RETURN(1);
+ {
+ DBUG_RETURN(1);
+ }
+
if (!group_list && ! exec_tmp_table1->distinct && order && simple_order)
{
- DBUG_PRINT("info",("Sorting for order"));
- thd->proc_info="Sorting for order";
- if (create_sort_index(thd, this, order,
+ thd_proc_info(thd, "Sorting for order");
+ if (create_sort_index(thd, this, order,
HA_POS_ERROR, HA_POS_ERROR, TRUE))
- DBUG_RETURN(1);
- order=0;
+ {
+ DBUG_RETURN(1);
+ }
+ order=0;
}
}
@@ -1495,8 +1544,8 @@ JOIN::optimize()
}
-/*
- Restore values in temporary join
+/**
+ Restore values in temporary join.
*/
void JOIN::restore_tmp()
{
@@ -1518,14 +1567,14 @@ JOIN::reinit()
if (exec_tmp_table1)
{
exec_tmp_table1->file->extra(HA_EXTRA_RESET_STATE);
- exec_tmp_table1->file->delete_all_rows();
+ exec_tmp_table1->file->ha_delete_all_rows();
free_io_cache(exec_tmp_table1);
filesort_free_buffers(exec_tmp_table1,0);
}
if (exec_tmp_table2)
{
exec_tmp_table2->file->extra(HA_EXTRA_RESET_STATE);
- exec_tmp_table2->file->delete_all_rows();
+ exec_tmp_table2->file->ha_delete_all_rows();
free_io_cache(exec_tmp_table2);
filesort_free_buffers(exec_tmp_table2,0);
}
@@ -1584,8 +1633,16 @@ JOIN::save_join_tab()
}
-/*
- Exec select
+/**
+ Exec select.
+
+ @todo
+ Note, that create_sort_index calls test_if_skip_sort_order and may
+ finally replace sorting with index scan if there is a LIMIT clause in
+ the query. It's never shown in EXPLAIN!
+
+ @todo
+ When can we have here thd->net.report_error not zero?
*/
void
JOIN::exec()
@@ -1594,6 +1651,7 @@ JOIN::exec()
int tmp_error;
DBUG_ENTER("JOIN::exec");
+ thd_proc_info(thd, "executing");
error= 0;
if (procedure)
{
@@ -1695,7 +1753,7 @@ JOIN::exec()
test_if_skip_sort_order(&join_tab[const_tables], order,
select_limit, 0,
&join_tab[const_tables].table->
- keys_in_use_for_order_by))))
+ keys_in_use_for_query))))
order=0;
having= tmp_having;
select_describe(this, need_tmp,
@@ -1732,7 +1790,7 @@ JOIN::exec()
curr_tmp_table= exec_tmp_table1;
/* Copy data to the temporary table */
- thd->proc_info= "Copying to tmp table";
+ thd_proc_info(thd, "Copying to tmp table");
DBUG_PRINT("info", ("%s", thd->proc_info));
if (!curr_join->sort_and_group &&
curr_join->const_tables != curr_join->tables)
@@ -1858,7 +1916,7 @@ JOIN::exec()
}
if (curr_join->group_list)
{
- thd->proc_info= "Creating sort index";
+ thd_proc_info(thd, "Creating sort index");
if (curr_join->join_tab == join_tab && save_join_tab())
{
DBUG_VOID_RETURN;
@@ -1872,7 +1930,7 @@ JOIN::exec()
sortorder= curr_join->sortorder;
}
- thd->proc_info="Copying to group table";
+ thd_proc_info(thd, "Copying to group table");
DBUG_PRINT("info", ("%s", thd->proc_info));
tmp_error= -1;
if (curr_join != this)
@@ -1931,7 +1989,7 @@ JOIN::exec()
curr_join->join_free(); /* Free quick selects */
if (curr_join->select_distinct && ! curr_join->group_list)
{
- thd->proc_info="Removing duplicates";
+ thd_proc_info(thd, "Removing duplicates");
if (curr_join->tmp_having)
curr_join->tmp_having->update_used_tables();
if (remove_duplicates(curr_join, curr_tmp_table,
@@ -1994,7 +2052,7 @@ JOIN::exec()
if (curr_join->group_list || curr_join->order)
{
DBUG_PRINT("info",("Sorting for send_fields"));
- thd->proc_info="Sorting result";
+ thd_proc_info(thd, "Sorting result");
/* If we have already done the group, add HAVING to sorted table */
if (curr_join->tmp_having && ! curr_join->group_list &&
! curr_join->sort_and_group)
@@ -2098,10 +2156,10 @@ JOIN::exec()
}
}
}
- /* XXX: When can we have here thd->net.report_error not zero? */
- if (thd->net.report_error)
+ /* XXX: When can we have here thd->is_error() not zero? */
+ if (thd->is_error())
{
- error= thd->net.report_error;
+ error= thd->is_error();
DBUG_VOID_RETURN;
}
curr_join->having= curr_join->tmp_having;
@@ -2129,7 +2187,7 @@ JOIN::exec()
}
else
{
- thd->proc_info="Sending data";
+ thd_proc_info(thd, "Sending data");
DBUG_PRINT("info", ("%s", thd->proc_info));
result->send_fields((procedure ? curr_join->procedure_fields_list :
*curr_fields_list),
@@ -2157,8 +2215,11 @@ JOIN::exec()
}
-/*
- Clean up join. Return error that hold JOIN.
+/**
+ Clean up join.
+
+ @return
+ Return error that hold JOIN.
*/
int
@@ -2192,49 +2253,48 @@ JOIN::destroy()
DBUG_RETURN(error);
}
-/*
+/**
An entry point to single-unit select (a select without UNION).
- SYNOPSIS
- mysql_select()
-
- thd thread handler
- rref_pointer_array a reference to ref_pointer_array of
- the top-level select_lex for this query
- tables list of all tables used in this query.
- The tables have been pre-opened.
- wild_num number of wildcards used in the top level
- select of this query.
- For example statement
- SELECT *, t1.*, catalog.t2.* FROM t0, t1, t2;
- has 3 wildcards.
- fields list of items in SELECT list of the top-level
- select
- e.g. SELECT a, b, c FROM t1 will have Item_field
- for a, b and c in this list.
- conds top level item of an expression representing
- WHERE clause of the top level select
- og_num total number of ORDER BY and GROUP BY clauses
- arguments
- order linked list of ORDER BY agruments
- group linked list of GROUP BY arguments
- having top level item of HAVING expression
- proc_param list of PROCEDUREs
- select_options select options (BIG_RESULT, etc)
- result an instance of result set handling class.
- This object is responsible for send result
- set rows to the client or inserting them
- into a table.
- select_lex the only SELECT_LEX of this query
- unit top-level UNIT of this query
- UNIT is an artificial object created by the parser
- for every SELECT clause.
- e.g. SELECT * FROM t1 WHERE a1 IN (SELECT * FROM t2)
- has 2 unions.
-
- RETURN VALUE
- FALSE success
- TRUE an error
+ @param thd thread handler
+ @param rref_pointer_array a reference to ref_pointer_array of
+ the top-level select_lex for this query
+ @param tables list of all tables used in this query.
+ The tables have been pre-opened.
+ @param wild_num number of wildcards used in the top level
+ select of this query.
+ For example statement
+ SELECT *, t1.*, catalog.t2.* FROM t0, t1, t2;
+ has 3 wildcards.
+ @param fields list of items in SELECT list of the top-level
+ select
+ e.g. SELECT a, b, c FROM t1 will have Item_field
+ for a, b and c in this list.
+ @param conds top level item of an expression representing
+ WHERE clause of the top level select
+ @param og_num total number of ORDER BY and GROUP BY clauses
+ arguments
+ @param order linked list of ORDER BY agruments
+ @param group linked list of GROUP BY arguments
+ @param having top level item of HAVING expression
+ @param proc_param list of PROCEDUREs
+ @param select_options select options (BIG_RESULT, etc)
+ @param result an instance of result set handling class.
+ This object is responsible for send result
+ set rows to the client or inserting them
+ into a table.
+ @param select_lex the only SELECT_LEX of this query
+ @param unit top-level UNIT of this query
+ UNIT is an artificial object created by the
+ parser for every SELECT clause.
+ e.g.
+ SELECT * FROM t1 WHERE a1 IN (SELECT * FROM t2)
+ has 2 unions.
+
+ @retval
+ FALSE success
+ @retval
+ TRUE an error
*/
bool
@@ -2286,7 +2346,7 @@ mysql_select(THD *thd, Item ***rref_pointer_array,
{
if (!(join= new JOIN(thd, fields, select_options, result)))
DBUG_RETURN(TRUE);
- thd->proc_info="init";
+ thd_proc_info(thd, "init");
thd->used_tables=0; // Updated by setup_fields
if (err= join->prepare(rref_pointer_array, tables, wild_num,
conds, og_num, order, group, having, proc_param,
@@ -2307,7 +2367,7 @@ mysql_select(THD *thd, Item ***rref_pointer_array,
join->having_history= (join->having?join->having:join->tmp_having);
}
- if (thd->net.report_error)
+ if (thd->is_error())
goto err;
join->exec();
@@ -2331,9 +2391,9 @@ mysql_select(THD *thd, Item ***rref_pointer_array,
err:
if (free_join)
{
- thd->proc_info="end";
+ thd_proc_info(thd, "end");
err|= select_lex->cleanup();
- DBUG_RETURN(err || thd->net.report_error);
+ DBUG_RETURN(err || thd->is_error());
}
DBUG_RETURN(join->error);
}
@@ -2349,6 +2409,11 @@ static ha_rows get_quick_record_count(THD *thd, SQL_SELECT *select,
{
int error;
DBUG_ENTER("get_quick_record_count");
+#ifndef EMBEDDED_LIBRARY // Avoid compiler warning
+ uchar buff[STACK_BUFF_ALLOC];
+#endif
+ if (check_stack_overrun(thd, STACK_MIN_SIZE, buff))
+ DBUG_RETURN(0); // Fatal error flag is set
if (select)
{
select->head=table;
@@ -2380,12 +2445,13 @@ typedef struct st_sargable_param
uint num_values; /* number of values in the above array */
} SARGABLE_PARAM;
-/*
- Calculate the best possible join and initialize the join structure
+/**
+ Calculate the best possible join and initialize the join structure.
- RETURN VALUES
- 0 ok
- 1 Fatal error
+ @retval
+ 0 ok
+ @retval
+ 1 Fatal error
*/
static bool
@@ -2826,13 +2892,14 @@ make_join_statistics(JOIN *join, TABLE_LIST *tables, COND *conds,
keyuse Pointer to possible keys
*****************************************************************************/
-typedef struct key_field_t { // Used when finding key fields
+/// Used when finding key fields
+typedef struct key_field_t {
Field *field;
- Item *val; // May be empty if diff constant
+ Item *val; ///< May be empty if diff constant
uint level;
uint optimize;
bool eq_func;
- /*
+ /**
If true, the condition this struct represents will not be satisfied
when val IS NULL.
*/
@@ -2844,22 +2911,28 @@ typedef struct key_field_t { // Used when finding key fields
#define KEY_OPTIMIZE_EXISTS 1
#define KEY_OPTIMIZE_REF_OR_NULL 2
-/*
- Merge new key definitions to old ones, remove those not used in both
+/**
+ Merge new key definitions to old ones, remove those not used in both.
- This is called for OR between different levels
+ This is called for OR between different levels.
To be able to do 'ref_or_null' we merge a comparison of a column
and 'column IS NULL' to one test. This is useful for sub select queries
- that are internally transformed to something like:
+ that are internally transformed to something like:.
+ @code
SELECT * FROM t1 WHERE t1.key=outer_ref_field or t1.key IS NULL
+ @endcode
- KEY_FIELD::null_rejecting is processed as follows:
+ KEY_FIELD::null_rejecting is processed as follows: @n
result has null_rejecting=true if it is set for both ORed references.
for example:
- (t2.key = t1.field OR t2.key = t1.field) -> null_rejecting=true
- (t2.key = t1.field OR t2.key <=> t1.field) -> null_rejecting=false
+ - (t2.key = t1.field OR t2.key = t1.field) -> null_rejecting=true
+ - (t2.key = t1.field OR t2.key <=> t1.field) -> null_rejecting=false
+
+ @todo
+ The result of this is that we're missing some 'ref' accesses.
+ OptimizerTeam: Fix this
*/
static KEY_FIELD *
@@ -2968,25 +3041,23 @@ merge_key_fields(KEY_FIELD *start,KEY_FIELD *new_fields,KEY_FIELD *end,
}
-/*
+/**
Add a possible key to array of possible keys if it's usable as a key
- SYNPOSIS
- add_key_field()
- key_fields Pointer to add key, if usable
- and_level And level, to be stored in KEY_FIELD
- cond Condition predicate
- field Field used in comparision
- eq_func True if we used =, <=> or IS NULL
- value Value used for comparison with field
- usable_tables Tables which can be used for key optimization
- sargables IN/OUT Array of found sargable candidates
+ @param key_fields Pointer to add key, if usable
+ @param and_level And level, to be stored in KEY_FIELD
+ @param cond Condition predicate
+ @param field Field used in comparision
+ @param eq_func True if we used =, <=> or IS NULL
+ @param value Value used for comparison with field
+ @param usable_tables Tables which can be used for key optimization
+ @param sargables IN/OUT Array of found sargable candidates
- NOTES
+ @note
If we are doing a NOT NULL comparison on a NOT NULL field in a outer join
table, we store this to be able to do not exists optimization later.
- RETURN
+ @returns
*key_fields is incremented if we stored a key in the array
*/
@@ -3137,26 +3208,25 @@ add_key_field(KEY_FIELD **key_fields,uint and_level, Item_func *cond,
(*key_fields)++;
}
-/*
- Add possible keys to array of possible keys originated from a simple predicate
-
- SYNPOSIS
- add_key_equal_fields()
- key_fields Pointer to add key, if usable
- and_level And level, to be stored in KEY_FIELD
- cond Condition predicate
- field Field used in comparision
- eq_func True if we used =, <=> or IS NULL
- value Value used for comparison with field
- Is NULL for BETWEEN and IN
- usable_tables Tables which can be used for key optimization
- sargables IN/OUT Array of found sargable candidates
-
- NOTES
+/**
+ Add possible keys to array of possible keys originated from a simple
+ predicate.
+
+ @param key_fields Pointer to add key, if usable
+ @param and_level And level, to be stored in KEY_FIELD
+ @param cond Condition predicate
+ @param field Field used in comparision
+ @param eq_func True if we used =, <=> or IS NULL
+ @param value Value used for comparison with field
+ Is NULL for BETWEEN and IN
+ @param usable_tables Tables which can be used for key optimization
+ @param sargables IN/OUT Array of found sargable candidates
+
+ @note
If field items f1 and f2 belong to the same multiple equality and
a key is added for f1, the the same key is added for f2.
- RETURN
+ @returns
*key_fields is incremented if we stored a key in the array
*/
@@ -3387,9 +3457,13 @@ add_key_fields(JOIN *join, KEY_FIELD **key_fields, uint *and_level,
}
}
-/*
- Add all keys with uses 'field' for some keypart
- If field->and_level != and_level then only mark key_part as const_part
+/**
+ Add all keys with uses 'field' for some keypart.
+
+ If field->and_level != and_level then only mark key_part as const_part.
+
+ @todo
+ ft-keys in non-ft queries. SerG
*/
static uint
@@ -3522,33 +3596,37 @@ sort_keyuse(KEYUSE *a,KEYUSE *b)
/*
- Add to KEY_FIELD array all 'ref' access candidates within nested join
-
- SYNPOSIS
- add_key_fields_for_nj()
- nested_join_table IN Nested join pseudo-table to process
- end INOUT End of the key field array
- and_level INOUT And-level
- sargables IN/OUT Array of found sargable candidates
+ Add to KEY_FIELD array all 'ref' access candidates within nested join.
- DESCRIPTION
This function populates KEY_FIELD array with entries generated from the
ON condition of the given nested join, and does the same for nested joins
contained within this nested join.
- NOTES
+ @param[in] nested_join_table Nested join pseudo-table to process
+ @param[in,out] end End of the key field array
+ @param[in,out] and_level And-level
+ @param[in,out] sargables Array of found sargable candidates
+
+
+ @note
We can add accesses to the tables that are direct children of this nested
join (1), and are not inner tables w.r.t their neighbours (2).
Example for #1 (outer brackets pair denotes nested join this function is
invoked for):
+ @code
... LEFT JOIN (t1 LEFT JOIN (t2 ... ) ) ON cond
+ @endcode
Example for #2:
+ @code
... LEFT JOIN (t1 LEFT JOIN t2 ) ON cond
+ @endcode
In examples 1-2 for condition cond, we can add 'ref' access candidates to
t1 only.
Example #3:
+ @code
... LEFT JOIN (t1, t2 LEFT JOIN t3 ON inner_cond) ON cond
+ @endcode
Here we can add 'ref' access candidates for t1 and t2, but not for t3.
*/
@@ -3574,25 +3652,25 @@ static void add_key_fields_for_nj(JOIN *join, TABLE_LIST *nested_join_table,
}
-/*
- Update keyuse array with all possible keys we can use to fetch rows
+/**
+ Update keyuse array with all possible keys we can use to fetch rows.
- SYNOPSIS
- update_ref_and_keys()
- thd
- keyuse OUT Put here ordered array of KEYUSE structures
- join_tab Array in tablenr_order
- tables Number of tables in join
- cond WHERE condition (note that the function analyzes
- join_tab[i]->on_expr too)
- normal_tables Tables not inner w.r.t some outer join (ones for which
- we can make ref access based the WHERE clause)
- select_lex current SELECT
- sargables OUT Array of found sargable candidates
+ @param thd
+ @param[out] keyuse Put here ordered array of KEYUSE structures
+ @param join_tab Array in tablenr_order
+ @param tables Number of tables in join
+ @param cond WHERE condition (note that the function analyzes
+ join_tab[i]->on_expr too)
+ @param normal_tables Tables not inner w.r.t some outer join (ones
+ for which we can make ref access based the WHERE
+ clause)
+ @param select_lex current SELECT
+ @param[out] sargables Array of found sargable candidates
- RETURN
- 0 - OK
- 1 - Out of memory.
+ @retval
+ 0 OK
+ @retval
+ 1 Out of memory.
*/
static bool
@@ -3717,7 +3795,7 @@ update_ref_and_keys(THD *thd, DYNAMIC_ARRAY *keyuse,JOIN_TAB *join_tab,
found_eq_constant=0;
for (i=0 ; i < keyuse->elements-1 ; i++,use++)
{
- if (!use->used_tables)
+ if (!use->used_tables && use->optimize != KEY_OPTIMIZE_REF_OR_NULL)
use->table->const_key_parts[use->key]|= use->keypart_map;
if (use->keypart != FT_KEYPART)
{
@@ -3751,8 +3829,8 @@ update_ref_and_keys(THD *thd, DYNAMIC_ARRAY *keyuse,JOIN_TAB *join_tab,
return FALSE;
}
-/*
- Update some values in keyuse for faster choose_plan() loop
+/**
+ Update some values in keyuse for faster choose_plan() loop.
*/
static void optimize_keyuse(JOIN *join, DYNAMIC_ARRAY *keyuse_array)
@@ -3793,23 +3871,21 @@ static void optimize_keyuse(JOIN *join, DYNAMIC_ARRAY *keyuse_array)
}
-/*
+/**
Discover the indexes that can be used for GROUP BY or DISTINCT queries.
- SYNOPSIS
- add_group_and_distinct_keys()
- join
- join_tab
+ If the query has a GROUP BY clause, find all indexes that contain all
+ GROUP BY fields, and add those indexes to join->const_keys.
- DESCRIPTION
- If the query has a GROUP BY clause, find all indexes that contain all
- GROUP BY fields, and add those indexes to join->const_keys.
- If the query has a DISTINCT clause, find all indexes that contain all
- SELECT fields, and add those indexes to join->const_keys.
- This allows later on such queries to be processed by a
- QUICK_GROUP_MIN_MAX_SELECT.
+ If the query has a DISTINCT clause, find all indexes that contain all
+ SELECT fields, and add those indexes to join->const_keys.
+ This allows later on such queries to be processed by a
+ QUICK_GROUP_MIN_MAX_SELECT.
- RETURN
+ @param join
+ @param join_tab
+
+ @return
None
*/
@@ -3861,7 +3937,7 @@ add_group_and_distinct_keys(JOIN *join, JOIN_TAB *join_tab)
which uses least records
*****************************************************************************/
-/* Save const tables first as used tables */
+/** Save const tables first as used tables. */
static void
set_position(JOIN *join,uint idx,JOIN_TAB *table,KEYUSE *key)
@@ -3884,31 +3960,28 @@ set_position(JOIN *join,uint idx,JOIN_TAB *table,KEYUSE *key)
}
-/*
- Find the best access path for an extension of a partial execution plan and
- add this path to the plan.
-
- SYNOPSIS
- best_access_path()
- join pointer to the structure providing all context info
- for the query
- s the table to be joined by the function
- thd thread for the connection that submitted the query
- remaining_tables set of tables not included into the partial plan yet
- idx the length of the partial plan
- record_count estimate for the number of records returned by the partial
- plan
- read_time the cost of the partial plan
-
- DESCRIPTION
- The function finds the best access path to table 's' from the passed
- partial plan where an access path is the general term for any means to
- access the data in 's'. An access path may use either an index or a scan,
- whichever is cheaper. The input partial plan is passed via the array
- 'join->positions' of length 'idx'. The chosen access method for 's' and its
- cost are stored in 'join->positions[idx]'.
-
- RETURN
+/**
+ Find the best access path for an extension of a partial execution
+ plan and add this path to the plan.
+
+ The function finds the best access path to table 's' from the passed
+ partial plan where an access path is the general term for any means to
+ access the data in 's'. An access path may use either an index or a scan,
+ whichever is cheaper. The input partial plan is passed via the array
+ 'join->positions' of length 'idx'. The chosen access method for 's' and its
+ cost are stored in 'join->positions[idx]'.
+
+ @param join pointer to the structure providing all context info
+ for the query
+ @param s the table to be joined by the function
+ @param thd thread for the connection that submitted the query
+ @param remaining_tables set of tables not included into the partial plan yet
+ @param idx the length of the partial plan
+ @param record_count estimate for the number of records returned by the
+ partial plan
+ @param read_time the cost of the partial plan
+
+ @return
None
*/
@@ -4436,24 +4509,26 @@ best_access_path(JOIN *join,
}
-/*
+/**
Selects and invokes a search strategy for an optimal query plan.
- SYNOPSIS
- choose_plan()
- join pointer to the structure providing all context info for
- the query
- join_tables set of the tables in the query
+ The function checks user-configurable parameters that control the search
+ strategy for an optimal plan, selects the search method and then invokes
+ it. Each specific optimization procedure stores the final optimal plan in
+ the array 'join->best_positions', and the cost of the plan in
+ 'join->best_read'.
- DESCRIPTION
- The function checks user-configurable parameters that control the search
- strategy for an optimal plan, selects the search method and then invokes
- it. Each specific optimization procedure stores the final optimal plan in
- the array 'join->best_positions', and the cost of the plan in
- 'join->best_read'.
+ @param join pointer to the structure providing all context info for
+ the query
+ @param join_tables set of the tables in the query
- RETURN VALUES
+ @todo
+ 'MAX_TABLES+2' denotes the old implementation of find_best before
+ the greedy version. Will be removed when greedy_search is approved.
+
+ @retval
FALSE ok
+ @retval
TRUE Fatal error
*/
@@ -4516,13 +4591,11 @@ choose_plan(JOIN *join, table_map join_tables)
}
-/*
+/**
Compare two JOIN_TAB objects based on the number of accessed records.
- SYNOPSIS
- join_tab_cmp()
- ptr1 pointer to first JOIN_TAB object
- ptr2 pointer to second JOIN_TAB object
+ @param ptr1 pointer to first JOIN_TAB object
+ @param ptr2 pointer to second JOIN_TAB object
NOTES
The order relation implemented by join_tab_cmp() is not transitive,
@@ -4535,9 +4608,11 @@ choose_plan(JOIN *join, table_map join_tables)
b: dependent = 0x0 table->map = 0x2 found_records = 3 ptr = 0x907e838
c: dependent = 0x6 table->map = 0x10 found_records = 2 ptr = 0x907ecd0
- RETURN
+ @retval
1 if first is bigger
- -1 if second is bigger
+ @retval
+ -1 if second is bigger
+ @retval
0 if equal
*/
@@ -4559,7 +4634,7 @@ join_tab_cmp(const void* ptr1, const void* ptr2)
}
-/*
+/**
Same as join_tab_cmp, but for use with SELECT_STRAIGHT_JOIN.
*/
@@ -4576,27 +4651,33 @@ join_tab_cmp_straight(const void* ptr1, const void* ptr2)
return jt1 > jt2 ? 1 : (jt1 < jt2 ? -1 : 0);
}
-/*
+/**
Heuristic procedure to automatically guess a reasonable degree of
exhaustiveness for the greedy search procedure.
- SYNOPSIS
- determine_search_depth()
- join pointer to the structure providing all context info for the query
+ The procedure estimates the optimization time and selects a search depth
+ big enough to result in a near-optimal QEP, that doesn't take too long to
+ find. If the number of tables in the query exceeds some constant, then
+ search_depth is set to this constant.
- DESCRIPTION
- The procedure estimates the optimization time and selects a search depth
- big enough to result in a near-optimal QEP, that doesn't take too long to
- find. If the number of tables in the query exceeds some constant, then
- search_depth is set to this constant.
+ @param join pointer to the structure providing all context info for
+ the query
- NOTES
+ @note
This is an extremely simplistic implementation that serves as a stub for a
more advanced analysis of the join. Ideally the search depth should be
determined by learning from previous query optimizations, because it will
depend on the CPU power (and other factors).
- RETURN
+ @todo
+ this value should be determined dynamically, based on statistics:
+ uint max_tables_for_exhaustive_opt= 7;
+
+ @todo
+ this value could be determined by some mapping of the form:
+ depth : table_count -> [max_tables_for_exhaustive_opt..MAX_EXHAUSTIVE]
+
+ @return
A positive integer that specifies the search depth (and thus the
exhaustiveness) of the depth-first search algorithm used by
'greedy_search'.
@@ -4623,16 +4704,9 @@ determine_search_depth(JOIN *join)
}
-/*
+/**
Select the best ways to access the tables in a query without reordering them.
- SYNOPSIS
- optimize_straight_join()
- join pointer to the structure providing all context info for
- the query
- join_tables set of the tables in the query
-
- DESCRIPTION
Find the best access paths for each query table and compute their costs
according to their order in the array 'join->best_ref' (thus without
reordering the join tables). The function calls sequentially
@@ -4640,15 +4714,17 @@ determine_search_depth(JOIN *join)
access method. The final optimal plan is stored in the array
'join->best_positions', and the corresponding cost in 'join->best_read'.
- NOTES
+ @param join pointer to the structure providing all context info for
+ the query
+ @param join_tables set of the tables in the query
+
+ @note
This function can be applied to:
- queries with STRAIGHT_JOIN
- internally to compute the cost of an arbitrary QEP
+ @par
Thus 'optimize_straight_join' can be used at any stage of the query
optimization process to finalize a QEP as it is.
-
- RETURN
- None
*/
static void
@@ -4681,31 +4757,24 @@ optimize_straight_join(JOIN *join, table_map join_tables)
}
-/*
+/**
Find a good, possibly optimal, query execution plan (QEP) by a greedy search.
- SYNOPSIS
- join pointer to the structure providing all context info
- for the query
- remaining_tables set of tables not included into the partial plan yet
- search_depth controlls the exhaustiveness of the search
- prune_level the pruning heuristics that should be applied during
- search
-
- DESCRIPTION
The search procedure uses a hybrid greedy/exhaustive search with controlled
exhaustiveness. The search is performed in N = card(remaining_tables)
steps. Each step evaluates how promising is each of the unoptimized tables,
selects the most promising table, and extends the current partial QEP with
that table. Currenly the most 'promising' table is the one with least
- expensive extension.
+ expensive extension.\
+
There are two extreme cases:
- 1. When (card(remaining_tables) < search_depth), the estimate finds the best
- complete continuation of the partial QEP. This continuation can be
- used directly as a result of the search.
- 2. When (search_depth == 1) the 'best_extension_by_limited_search'
- consideres the extension of the current QEP with each of the remaining
- unoptimized tables.
+ -# When (card(remaining_tables) < search_depth), the estimate finds the
+ best complete continuation of the partial QEP. This continuation can be
+ used directly as a result of the search.
+ -# When (search_depth == 1) the 'best_extension_by_limited_search'
+ consideres the extension of the current QEP with each of the remaining
+ unoptimized tables.
+
All other cases are in-between these two extremes. Thus the parameter
'search_depth' controlls the exhaustiveness of the search. The higher the
value, the longer the optimizaton time and possibly the better the
@@ -4713,16 +4782,18 @@ optimize_straight_join(JOIN *join, table_map join_tables)
estimated, but the more likely to get a bad QEP.
All intermediate and final results of the procedure are stored in 'join':
- join->positions modified for every partial QEP that is explored
- join->best_positions modified for the current best complete QEP
- join->best_read modified for the current best complete QEP
- join->best_ref might be partially reordered
+ - join->positions : modified for every partial QEP that is explored
+ - join->best_positions: modified for the current best complete QEP
+ - join->best_read : modified for the current best complete QEP
+ - join->best_ref : might be partially reordered
+
The final optimal plan is stored in 'join->best_positions', and its
corresponding cost in 'join->best_read'.
- NOTES
+ @note
The following pseudocode describes the algorithm of 'greedy_search':
+ @code
procedure greedy_search
input: remaining_tables
output: pplan;
@@ -4736,6 +4807,7 @@ optimize_straight_join(JOIN *join, table_map join_tables)
return pplan;
}
+ @endcode
where 'best_extension' is a placeholder for a procedure that selects the
most "promising" of all tables in 'remaining_tables'.
Currently this estimate is performed by calling
@@ -4743,16 +4815,26 @@ optimize_straight_join(JOIN *join, table_map join_tables)
current QEP of size 'search_depth', thus the complexity of 'greedy_search'
mainly depends on that of 'best_extension_by_limited_search'.
+ @par
If 'best_extension()' == 'best_extension_by_limited_search()', then the
worst-case complexity of this algorithm is <=
O(N*N^search_depth/search_depth). When serch_depth >= N, then the
complexity of greedy_search is O(N!).
+ @par
In the future, 'greedy_search' might be extended to support other
implementations of 'best_extension', e.g. some simpler quadratic procedure.
- RETURN VALUES
+ @param join pointer to the structure providing all context info
+ for the query
+ @param remaining_tables set of tables not included into the partial plan yet
+ @param search_depth controlls the exhaustiveness of the search
+ @param prune_level the pruning heuristics that should be applied during
+ search
+
+ @retval
FALSE ok
+ @retval
TRUE Fatal error
*/
@@ -4828,29 +4910,10 @@ greedy_search(JOIN *join,
}
-/*
+/**
Find a good, possibly optimal, query execution plan (QEP) by a possibly
exhaustive search.
- SYNOPSIS
- best_extension_by_limited_search()
- join pointer to the structure providing all context info for
- the query
- remaining_tables set of tables not included into the partial plan yet
- idx length of the partial QEP in 'join->positions';
- since a depth-first search is used, also corresponds to
- the current depth of the search tree;
- also an index in the array 'join->best_ref';
- record_count estimate for the number of records returned by the best
- partial plan
- read_time the cost of the best partial plan
- search_depth maximum depth of the recursion and thus size of the found
- optimal plan (0 < search_depth <= join->tables+1).
- prune_level pruning heuristics that should be applied during
- optimization
- (values: 0 = EXHAUSTIVE, 1 = PRUNE_BY_TIME_OR_ROWS)
-
- DESCRIPTION
The procedure searches for the optimal ordering of the query tables in set
'remaining_tables' of size N, and the corresponding optimal access paths to
each table. The choice of a table order and an access path for each table
@@ -4877,16 +4940,18 @@ greedy_search(JOIN *join,
The final optimal plan is stored in 'join->best_positions'. The
corresponding cost of the optimal plan is in 'join->best_read'.
- NOTES
+ @note
The procedure uses a recursive depth-first search where the depth of the
recursion (and thus the exhaustiveness of the search) is controlled by the
parameter 'search_depth'.
+ @note
The pseudocode below describes the algorithm of
'best_extension_by_limited_search'. The worst-case complexity of this
algorithm is O(N*N^search_depth/search_depth). When serch_depth >= N, then
the complexity of greedy_search is O(N!).
+ @code
procedure best_extension_by_limited_search(
pplan in, // in, partial plan of tables-joined-so-far
pplan_cost, // in, cost of pplan
@@ -4926,18 +4991,39 @@ greedy_search(JOIN *join,
}
}
}
+ @endcode
- IMPLEMENTATION
+ @note
When 'best_extension_by_limited_search' is called for the first time,
'join->best_read' must be set to the largest possible value (e.g. DBL_MAX).
The actual implementation provides a way to optionally use pruning
heuristic (controlled by the parameter 'prune_level') to reduce the search
space by skipping some partial plans.
+
+ @note
The parameter 'search_depth' provides control over the recursion
depth, and thus the size of the resulting optimal plan.
- RETURN VALUES
+ @param join pointer to the structure providing all context info
+ for the query
+ @param remaining_tables set of tables not included into the partial plan yet
+ @param idx length of the partial QEP in 'join->positions';
+ since a depth-first search is used, also corresponds
+ to the current depth of the search tree;
+ also an index in the array 'join->best_ref';
+ @param record_count estimate for the number of records returned by the
+ best partial plan
+ @param read_time the cost of the best partial plan
+ @param search_depth maximum depth of the recursion and thus size of the
+ found optimal plan
+ (0 < search_depth <= join->tables+1).
+ @param prune_level pruning heuristics that should be applied during
+ optimization
+ (values: 0 = EXHAUSTIVE, 1 = PRUNE_BY_TIME_OR_ROWS)
+
+ @retval
FALSE ok
+ @retval
TRUE Fatal error
*/
@@ -5077,8 +5163,9 @@ best_extension_by_limited_search(JOIN *join,
}
-/*
- TODO: this function is here only temporarily until 'greedy_search' is
+/**
+ @todo
+ - TODO: this function is here only temporarily until 'greedy_search' is
tested and accepted.
RETURN VALUES
@@ -5159,8 +5246,8 @@ find_best(JOIN *join,table_map rest_tables,uint idx,double record_count,
}
-/*
- Find how much space the prevous read not const tables takes in cache
+/**
+ Find how much space the prevous read not const tables takes in cache.
*/
static void calc_used_field_length(THD *thd, JOIN_TAB *join_tab)
@@ -5304,9 +5391,9 @@ prev_record_reads(JOIN *join, uint idx, table_map found_ref)
}
-/*****************************************************************************
+/**
Set up join struct according to best position.
-*****************************************************************************/
+*/
static bool
get_best_combination(JOIN *join)
@@ -5531,7 +5618,8 @@ get_store_key(THD *thd, KEYUSE *keyuse, table_map used_tables,
(keyuse->val->type() == Item::REF_ITEM &&
((Item_ref*)keyuse->val)->ref_type() == Item_ref::OUTER_REF &&
(*(Item_ref**)((Item_ref*)keyuse->val)->ref)->ref_type() ==
- Item_ref::DIRECT_REF) )
+ Item_ref::DIRECT_REF &&
+ keyuse->val->real_item()->type() == Item::FIELD_ITEM))
return new store_key_field(thd,
key_part->field,
key_buff + maybe_null,
@@ -5547,9 +5635,11 @@ get_store_key(THD *thd, KEYUSE *keyuse, table_map used_tables,
keyuse->val);
}
-/*
- This function is only called for const items on fields which are keys
- returns 1 if there was some conversion made when the field was stored.
+/**
+ This function is only called for const items on fields which are keys.
+
+ @return
+ returns 1 if there was some conversion made when the field was stored.
*/
bool
@@ -5659,22 +5749,18 @@ inline void add_cond_and_fix(Item **e1, Item *e2)
}
-/*
- Add to join_tab->select_cond[i] "table.field IS NOT NULL" conditions we've
- inferred from ref/eq_ref access performed.
-
- SYNOPSIS
- add_not_null_conds()
- join Join to process
+/**
+ Add to join_tab->select_cond[i] "table.field IS NOT NULL" conditions
+ we've inferred from ref/eq_ref access performed.
- NOTES
This function is a part of "Early NULL-values filtering for ref access"
optimization.
Example of this optimization:
- For query SELECT * FROM t1,t2 WHERE t2.key=t1.field
- and plan " any-access(t1), ref(t2.key=t1.field) "
- add "t1.field IS NOT NULL" to t1's table condition.
+ For query SELECT * FROM t1,t2 WHERE t2.key=t1.field @n
+ and plan " any-access(t1), ref(t2.key=t1.field) " @n
+ add "t1.field IS NOT NULL" to t1's table condition. @n
+
Description of the optimization:
We look through equalities choosen to perform ref/eq_ref access,
@@ -5686,8 +5772,10 @@ inline void add_cond_and_fix(Item **e1, Item *e2)
Exception from that is the case when referred_tab->join != join.
I.e. don't add NOT NULL constraints from any embedded subquery.
Consider this query:
+ @code
SELECT A.f2 FROM t1 LEFT JOIN t2 A ON A.f2 = f1
WHERE A.f3=(SELECT MIN(f3) FROM t2 C WHERE A.f4 = C.f4) OR A.f3 IS NULL;
+ @endocde
Here condition A.f3 IS NOT NULL is going to be added to the WHERE
condition of the embedding query.
Another example:
@@ -5758,25 +5846,21 @@ static void add_not_null_conds(JOIN *join)
DBUG_VOID_RETURN;
}
-/*
- Build a predicate guarded by match variables for embedding outer joins
-
- SYNOPSIS
- add_found_match_trig_cond()
- tab the first inner table for most nested outer join
- cond the predicate to be guarded (must be set)
- root_tab the first inner table to stop
-
- DESCRIPTION
- The function recursively adds guards for predicate cond
- assending from tab to the first inner table next embedding
- nested outer join and so on until it reaches root_tab
- (root_tab can be 0).
-
- RETURN VALUE
- pointer to the guarded predicate, if success
- 0, otherwise
-*/
+/**
+ Build a predicate guarded by match variables for embedding outer joins.
+ The function recursively adds guards for predicate cond
+ assending from tab to the first inner table next embedding
+ nested outer join and so on until it reaches root_tab
+ (root_tab can be 0).
+
+ @param tab the first inner table for most nested outer join
+ @param cond the predicate to be guarded (must be set)
+ @param root_tab the first inner table to stop
+
+ @return
+ - pointer to the guarded predicate, if success
+ - 0, otherwise
+*/
static COND*
add_found_match_trig_cond(JOIN_TAB *tab, COND *cond, JOIN_TAB *root_tab)
@@ -5796,14 +5880,9 @@ add_found_match_trig_cond(JOIN_TAB *tab, COND *cond, JOIN_TAB *root_tab)
}
-/*
- Fill in outer join related info for the execution plan structure
-
- SYNOPSIS
- make_outerjoin_info()
- join - reference to the info fully describing the query
+/**
+ Fill in outer join related info for the execution plan structure.
- DESCRIPTION
For each outer join operation left after simplification of the
original query the function set up the following pointers in the linear
structure join->join_tab representing the selected execution plan.
@@ -5818,21 +5897,25 @@ add_found_match_trig_cond(JOIN_TAB *tab, COND *cond, JOIN_TAB *root_tab)
corresponding first inner table through the field t0->on_expr_ref.
Here ti are structures of the JOIN_TAB type.
- EXAMPLE
- For the query:
- SELECT * FROM t1
- LEFT JOIN
- (t2, t3 LEFT JOIN t4 ON t3.a=t4.a)
- ON (t1.a=t2.a AND t1.b=t3.b)
- WHERE t1.c > 5,
+ EXAMPLE. For the query:
+ @code
+ SELECT * FROM t1
+ LEFT JOIN
+ (t2, t3 LEFT JOIN t4 ON t3.a=t4.a)
+ ON (t1.a=t2.a AND t1.b=t3.b)
+ WHERE t1.c > 5,
+ @endcode
+
given the execution plan with the table order t1,t2,t3,t4
is selected, the following references will be set;
t4->last_inner=[t4], t4->first_inner=[t4], t4->first_upper=[t2]
t2->last_inner=[t4], t2->first_inner=t3->first_inner=[t2],
on expression (t1.a=t2.a AND t1.b=t3.b) will be attached to
*t2->on_expr_ref, while t3.a=t4.a will be attached to *t4->on_expr_ref.
-
- NOTES
+
+ @param join reference to the info fully describing the query
+
+ @note
The function assumes that the simplification procedure has been
already applied to the join query (see simplify_joins).
This function can be called only after the execution plan
@@ -6294,10 +6377,9 @@ make_join_readinfo(JOIN *join, ulonglong options)
ordered. If there is a temp table the ordering is done as a last
operation and doesn't prevent join cache usage.
*/
- if (!ordered_set && !join->need_tmp &&
- ((table == join->sort_by_table &&
- (!join->order || join->skip_sort_order)) ||
- (join->sort_by_table == (TABLE *) 1 && i != join->const_tables)))
+ if (!ordered_set && !join->need_tmp &&
+ (table == join->sort_by_table ||
+ (join->sort_by_table == (TABLE *) 1 && i != join->const_tables)))
ordered_set= 1;
tab->sorted= sorted;
@@ -6436,7 +6518,15 @@ make_join_readinfo(JOIN *join, ulonglong options)
else if (!table->covering_keys.is_clear_all() &&
!(tab->select && tab->select->quick))
{ // Only read index tree
- tab->index=find_shortest_key(table, & table->covering_keys);
+ /*
+ See bug #26447: "Using the clustered index for a table scan
+ is always faster than using a secondary index".
+ */
+ if (table->s->primary_key != MAX_KEY &&
+ table->file->primary_key_is_clustered())
+ tab->index= table->s->primary_key;
+ else
+ tab->index=find_shortest_key(table, & table->covering_keys);
tab->read_first_record= join_read_first;
tab->type=JT_NEXT; // Read with index_first / index_next
}
@@ -6456,20 +6546,18 @@ make_join_readinfo(JOIN *join, ulonglong options)
}
-/*
- Give error if we some tables are done with a full join
+/**
+ Give error if we some tables are done with a full join.
- SYNOPSIS
- error_if_full_join()
- join Join condition
+ This is used by multi_table_update and multi_table_delete when running
+ in safe mode.
- USAGE
- This is used by multi_table_update and multi_table_delete when running
- in safe mode
+ @param join Join condition
- RETURN VALUES
- 0 ok
- 1 Error (full join used)
+ @retval
+ 0 ok
+ @retval
+ 1 Error (full join used)
*/
bool error_if_full_join(JOIN *join)
@@ -6489,11 +6577,8 @@ bool error_if_full_join(JOIN *join)
}
-/*
- cleanup JOIN_TAB
-
- SYNOPSIS
- JOIN_TAB::cleanup()
+/**
+ cleanup JOIN_TAB.
*/
void JOIN_TAB::cleanup()
@@ -6523,11 +6608,10 @@ void JOIN_TAB::cleanup()
}
-/*
+/**
Partially cleanup JOIN after it has executed: close index or rnd read
(table cursors), free quick selects.
- DESCRIPTION
This function is called in the end of execution of a JOIN, before the used
tables are unlocked and closed.
@@ -6547,23 +6631,24 @@ void JOIN_TAB::cleanup()
If a JOIN is executed for a subquery or if it has a subquery, we can't
do the full cleanup and need to do a partial cleanup only.
- o If a JOIN is not the top level join, we must not unlock the tables
- because the outer select may not have been evaluated yet, and we
- can't unlock only selected tables of a query.
-
- o Additionally, if this JOIN corresponds to a correlated subquery, we
- should not free quick selects and join buffers because they will be
- needed for the next execution of the correlated subquery.
-
- o However, if this is a JOIN for a [sub]select, which is not
- a correlated subquery itself, but has subqueries, we can free it
- fully and also free JOINs of all its subqueries. The exception
- is a subquery in SELECT list, e.g:
- SELECT a, (select max(b) from t1) group by c
- This subquery will not be evaluated at first sweep and its value will
- not be inserted into the temporary table. Instead, it's evaluated
- when selecting from the temporary table. Therefore, it can't be freed
- here even though it's not correlated.
+ - If a JOIN is not the top level join, we must not unlock the tables
+ because the outer select may not have been evaluated yet, and we
+ can't unlock only selected tables of a query.
+ - Additionally, if this JOIN corresponds to a correlated subquery, we
+ should not free quick selects and join buffers because they will be
+ needed for the next execution of the correlated subquery.
+ - However, if this is a JOIN for a [sub]select, which is not
+ a correlated subquery itself, but has subqueries, we can free it
+ fully and also free JOINs of all its subqueries. The exception
+ is a subquery in SELECT list, e.g: @n
+ SELECT a, (select max(b) from t1) group by c @n
+ This subquery will not be evaluated at first sweep and its value will
+ not be inserted into the temporary table. Instead, it's evaluated
+ when selecting from the temporary table. Therefore, it can't be freed
+ here even though it's not correlated.
+
+ @todo
+ Unlock tables even if the join isn't top level select in the tree
*/
void JOIN::join_free()
@@ -6623,15 +6708,15 @@ void JOIN::join_free()
}
-/*
- Free resources of given join
+/**
+ Free resources of given join.
- SYNOPSIS
- JOIN::cleanup()
- fill - true if we should free all resources, call with full==1 should be
- last, before it this function can be called with full==0
+ @param fill true if we should free all resources, call with full==1
+ should be last, before it this function can be called with
+ full==0
- NOTE: with subquery this function definitely will be called several times,
+ @note
+ With subquery this function definitely will be called several times,
but even for simple query it can be called several times.
*/
@@ -6663,7 +6748,7 @@ void JOIN::cleanup(bool full)
for (tab= join_tab, end= tab+tables; tab != end; tab++)
{
if (tab->table)
- tab->table->file->ha_index_or_rnd_end();
+ tab->table->file->ha_index_or_rnd_end();
}
}
}
@@ -6701,21 +6786,25 @@ void JOIN::cleanup(bool full)
}
-/*****************************************************************************
+/**
Remove the following expressions from ORDER BY and GROUP BY:
- Constant expressions
+ Constant expressions @n
Expression that only uses tables that are of type EQ_REF and the reference
is in the ORDER list or if all refereed tables are of the above type.
In the following, the X field can be removed:
+ @code
SELECT * FROM t1,t2 WHERE t1.a=t2.a ORDER BY t1.a,t2.X
SELECT * FROM t1,t2,t3 WHERE t1.a=t2.a AND t2.b=t3.b ORDER BY t1.a,t3.X
+ @endcode
These can't be optimized:
+ @code
SELECT * FROM t1,t2 WHERE t1.a=t2.a ORDER BY t2.X,t1.a
SELECT * FROM t1,t2 WHERE t1.a=t2.a AND t1.b=t2.b ORDER BY t1.a,t2.c
SELECT * FROM t1,t2 WHERE t1.a=t2.a ORDER BY t2.b,t1.a
-*****************************************************************************/
+ @endcode
+*/
static bool
eq_ref_table(JOIN *join, ORDER *start_order, JOIN_TAB *tab)
@@ -6783,7 +6872,7 @@ only_eq_ref_tables(JOIN *join,ORDER *order,table_map tables)
}
-/* Update the dependency map for the tables */
+/** Update the dependency map for the tables. */
static void update_depend_map(JOIN *join)
{
@@ -6810,7 +6899,7 @@ static void update_depend_map(JOIN *join)
}
-/* Update the dependency map for the sort order */
+/** Update the dependency map for the sort order. */
static void update_depend_map(JOIN *join, ORDER *order)
{
@@ -6835,25 +6924,23 @@ static void update_depend_map(JOIN *join, ORDER *order)
}
-/*
- Remove all constants and check if ORDER only contains simple expressions
-
- SYNOPSIS
- remove_const()
- join Join handler
- first_order List of SORT or GROUP order
- cond WHERE statement
- change_list Set to 1 if we should remove things from list
- If this is not set, then only simple_order is
- calculated
- simple_order Set to 1 if we are only using simple expressions
+/**
+ Remove all constants and check if ORDER only contains simple
+ expressions.
- RETURN
- Returns new sort order
+ simple_order is set to 1 if sort_order only uses fields from head table
+ and the head table is not a LEFT JOIN table.
- simple_order is set to 1 if sort_order only uses fields from head table
- and the head table is not a LEFT JOIN table
+ @param join Join handler
+ @param first_order List of SORT or GROUP order
+ @param cond WHERE statement
+ @param change_list Set to 1 if we should remove things from list.
+ If this is not set, then only simple_order is
+ calculated.
+ @param simple_order Set to 1 if we are only using simple expressions
+ @return
+ Returns new sort order
*/
static ORDER *
@@ -7009,25 +7096,23 @@ template class List_iterator<Item_func_match>;
#endif
-/*
- Find the multiple equality predicate containing a field
-
- SYNOPSIS
- find_item_equal()
- cond_equal multiple equalities to search in
- field field to look for
- inherited_fl :out set up to TRUE if multiple equality is found
- on upper levels (not on current level of cond_equal)
-
- DESCRIPTION
- The function retrieves the multiple equalities accessed through
- the con_equal structure from current level and up looking for
- an equality containing field. It stops retrieval as soon as the equality
- is found and set up inherited_fl to TRUE if it's found on upper levels.
-
- RETURN
- Item_equal for the found multiple equality predicate if a success;
- NULL - otherwise.
+/**
+ Find the multiple equality predicate containing a field.
+
+ The function retrieves the multiple equalities accessed through
+ the con_equal structure from current level and up looking for
+ an equality containing field. It stops retrieval as soon as the equality
+ is found and set up inherited_fl to TRUE if it's found on upper levels.
+
+ @param cond_equal multiple equalities to search in
+ @param field field to look for
+ @param[out] inherited_fl set up to TRUE if multiple equality is found
+ on upper levels (not on current level of
+ cond_equal)
+
+ @return
+ - Item_equal for the found multiple equality predicate if a success;
+ - NULL otherwise.
*/
Item_equal *find_item_equal(COND_EQUAL *cond_equal, Field *field,
@@ -7053,18 +7138,9 @@ finish:
}
-/*
- Check whether an equality can be used to build multiple equalities
-
- SYNOPSIS
- check_simple_equality()
- left_item left term of the quality to be checked
- right_item right term of the equality to be checked
- item equality item if the equality originates from a condition
- predicate, 0 if the equality is the result of row elimination
- cond_equal multiple equalities that must hold together with the equality
+/**
+ Check whether an equality can be used to build multiple equalities.
- DESCRIPTION
This function first checks whether the equality (left_item=right_item)
is a simple equality i.e. the one that equates a field with another field
or a constant (field=field_item or field=const_item).
@@ -7079,22 +7155,24 @@ finish:
This guarantees that the set of multiple equalities covering equality
predicates will be minimal.
- EXAMPLE
+ EXAMPLE:
For the where condition
- WHERE a=b AND b=c AND
- (b=2 OR f=e)
+ @code
+ WHERE a=b AND b=c AND
+ (b=2 OR f=e)
+ @endcode
the check_equality will be called for the following equality
predicates a=b, b=c, b=2 and f=e.
- For a=b it will be called with *cond_equal=(0,[]) and will transform
- *cond_equal into (0,[Item_equal(a,b)]).
- For b=c it will be called with *cond_equal=(0,[Item_equal(a,b)])
- and will transform *cond_equal into CE=(0,[Item_equal(a,b,c)]).
- For b=2 it will be called with *cond_equal=(ptr(CE),[])
- and will transform *cond_equal into (ptr(CE),[Item_equal(2,a,b,c)]).
- For f=e it will be called with *cond_equal=(ptr(CE), [])
- and will transform *cond_equal into (ptr(CE),[Item_equal(f,e)]).
-
- NOTES
+ - For a=b it will be called with *cond_equal=(0,[]) and will transform
+ *cond_equal into (0,[Item_equal(a,b)]).
+ - For b=c it will be called with *cond_equal=(0,[Item_equal(a,b)])
+ and will transform *cond_equal into CE=(0,[Item_equal(a,b,c)]).
+ - For b=2 it will be called with *cond_equal=(ptr(CE),[])
+ and will transform *cond_equal into (ptr(CE),[Item_equal(2,a,b,c)]).
+ - For f=e it will be called with *cond_equal=(ptr(CE), [])
+ and will transform *cond_equal into (ptr(CE),[Item_equal(f,e)]).
+
+ @note
Now only fields that have the same type definitions (verified by
the Field::eq_def method) are placed to the same multiple equalities.
Because of this some equality predicates are not eliminated and
@@ -7106,8 +7184,8 @@ finish:
equality. But at the same time it would allow us to get rid
of constant propagation completely: it would be done by the call
to build_equal_items_for_cond.
-
- IMPLEMENTATION
+
+
The implementation does not follow exactly the above rules to
build a new multiple equality for the equality predicate.
If it processes the equality of the form field1=field2, it
@@ -7127,9 +7205,18 @@ finish:
acceptable, as this happens rarely. The implementation without
copying would be much more complicated.
- RETURN
+ @param left_item left term of the quality to be checked
+ @param right_item right term of the equality to be checked
+ @param item equality item if the equality originates from a condition
+ predicate, 0 if the equality is the result of row
+ elimination
+ @param cond_equal multiple equalities that must hold together with the
+ equality
+
+ @retval
TRUE if the predicate is a simple equality predicate to be used
- for building multiple equalities
+ for building multiple equalities
+ @retval
FALSE otherwise
*/
@@ -7298,30 +7385,30 @@ static bool check_simple_equality(Item *left_item, Item *right_item,
}
-/*
- Convert row equalities into a conjunction of regular equalities
-
- SYNOPSIS
- check_row_equality()
- thd thread handle
- left_row left term of the row equality to be processed
- right_row right term of the row equality to be processed
- cond_equal multiple equalities that must hold together with the predicate
- eq_list results of conversions of row equalities that are not simple
- enough to form multiple equalities
+/**
+ Convert row equalities into a conjunction of regular equalities.
- DESCRIPTION
The function converts a row equality of the form (E1,...,En)=(E'1,...,E'n)
into a list of equalities E1=E'1,...,En=E'n. For each of these equalities
- Ei=E'i the function checks whether it is a simple equality or a row equality.
- If it is a simple equality it is used to expand multiple equalities of
- cond_equal. If it is a row equality it converted to a sequence of equalities
- between row elements. If Ei=E'i is neither a simple equality nor a row
- equality the item for this predicate is added to eq_list.
-
- RETURN
- TRUE if conversion has succeeded (no fatal error)
- FALSE otherwise
+ Ei=E'i the function checks whether it is a simple equality or a row
+ equality. If it is a simple equality it is used to expand multiple
+ equalities of cond_equal. If it is a row equality it converted to a
+ sequence of equalities between row elements. If Ei=E'i is neither a
+ simple equality nor a row equality the item for this predicate is added
+ to eq_list.
+
+ @param thd thread handle
+ @param left_row left term of the row equality to be processed
+ @param right_row right term of the row equality to be processed
+ @param cond_equal multiple equalities that must hold together with the
+ predicate
+ @param eq_list results of conversions of row equalities that are not
+ simple enough to form multiple equalities
+
+ @retval
+ TRUE if conversion has succeeded (no fatal error)
+ @retval
+ FALSE otherwise
*/
static bool check_row_equality(THD *thd, Item *left_row, Item_row *right_row,
@@ -7363,18 +7450,9 @@ static bool check_row_equality(THD *thd, Item *left_row, Item_row *right_row,
}
-/*
- Eliminate row equalities and form multiple equalities predicates
-
- SYNOPSIS
- check_equality()
- thd thread handle
- item predicate to process
- cond_equal multiple equalities that must hold together with the predicate
- eq_list results of conversions of row equalities that are not simple
- enough to form multiple equalities
+/**
+ Eliminate row equalities and form multiple equalities predicates.
- DESCRIPTION
This function checks whether the item is a simple equality
i.e. the one that equates a field with another field or a constant
(field=field_item or field=constant_item), or, a row equality.
@@ -7382,11 +7460,20 @@ static bool check_row_equality(THD *thd, Item *left_row, Item_row *right_row,
in the lists referenced directly or indirectly by cond_equal inferring
the given simple equality. If it doesn't find any, it builds/expands
multiple equality that covers the predicate.
- Row equalities are eliminated substituted for conjunctive regular equalities
- which are treated in the same way as original equality predicates.
-
- RETURN
+ Row equalities are eliminated substituted for conjunctive regular
+ equalities which are treated in the same way as original equality
+ predicates.
+
+ @param thd thread handle
+ @param item predicate to process
+ @param cond_equal multiple equalities that must hold together with the
+ predicate
+ @param eq_list results of conversions of row equalities that are not
+ simple enough to form multiple equalities
+
+ @retval
TRUE if re-writing rules have been applied
+ @retval
FALSE otherwise, i.e.
if the predicate is not an equality,
or, if the equality is neither a simple one nor a row equality,
@@ -7418,16 +7505,9 @@ static bool check_equality(THD *thd, Item *item, COND_EQUAL *cond_equal,
}
-/*
- Replace all equality predicates in a condition by multiple equality items
-
- SYNOPSIS
- build_equal_items_for_cond()
- thd thread handle
- cond condition(expression) where to make replacement
- inherited path to all inherited multiple equality items
+/**
+ Replace all equality predicates in a condition by multiple equality items.
- DESCRIPTION
At each 'and' level the function detects items for equality predicates
and replaced them by a set of multiple equality items of class Item_equal,
taking into account inherited equalities from upper levels.
@@ -7446,7 +7526,7 @@ static bool check_equality(THD *thd, Item *item, COND_EQUAL *cond_equal,
equality lists of each Item_cond_and object assigning it to
thd->lex->current_select->max_equal_elems.
- NOTES
+ @note
Multiple equality predicate =(f1,..fn) is equivalent to the conjuction of
f1=f2, .., fn-1=fn. It substitutes any inference from these
equality predicates that is equivalent to the conjunction.
@@ -7464,7 +7544,6 @@ static bool check_equality(THD *thd, Item *item, COND_EQUAL *cond_equal,
but if additionally =(t4.d,t2.b) is inherited, it
will be replaced by (=(t1.a,t2.b,t3.c,t4.d) AND t2.b>5)
- IMPLEMENTATION
The function performs the substitution in a recursive descent by
the condtion tree, passing to the next AND level a chain of multiple
equality predicates which have been built at the upper levels.
@@ -7478,10 +7557,15 @@ static bool check_equality(THD *thd, Item *item, COND_EQUAL *cond_equal,
- join them into disjoint Item_equal() groups
- process the included OR conditions recursively to do the same for
lower AND levels.
+
We need to do things in this order as lower AND levels need to know about
all possible Item_equal objects in upper levels.
- RETURN
+ @param thd thread handle
+ @param cond condition(expression) where to make replacement
+ @param inherited path to all inherited multiple equality items
+
+ @return
pointer to the transformed condition
*/
@@ -7629,19 +7713,10 @@ static COND *build_equal_items_for_cond(THD *thd, COND *cond,
}
-/*
+/**
Build multiple equalities for a condition and all on expressions that
- inherit these multiple equalities
-
- SYNOPSIS
- build_equal_items()
- thd thread handle
- cond condition to build the multiple equalities for
- inherited path to all inherited multiple equality items
- join_list list of join tables to which the condition refers to
- cond_equal_ref :out pointer to the structure to place built equalities in
+ inherit these multiple equalities.
- DESCRIPTION
The function first applies the build_equal_items_for_cond function
to build all multiple equalities for condition cond utilizing equalities
referred through the parameter inherited. The extended set of
@@ -7650,14 +7725,16 @@ static COND *build_equal_items_for_cond(THD *thd, COND *cond,
all on expressions whose direct references can be found in join_list
and who inherit directly the multiple equalities just having built.
- NOTES
+ @note
The on expression used in an outer join operation inherits all equalities
- from the on expression of the embedding join, if there is any, or
+ from the on expression of the embedding join, if there is any, or
otherwise - from the where condition.
This fact is not obvious, but presumably can be proved.
Consider the following query:
+ @code
SELECT * FROM (t1,t2) LEFT JOIN (t3,t4) ON t1.a=t3.a AND t2.a=t4.a
WHERE t1.a=t2.a;
+ @endcode
If the on expression in the query inherits =(t1.a,t2.a), then we
can build the multiple equality =(t1.a,t2.a,t3.a,t4.a) that infers
the equality t3.a=t4.a. Although the on expression
@@ -7667,23 +7744,38 @@ static COND *build_equal_items_for_cond(THD *thd, COND *cond,
Interesting that multiple equality =(t1.a,t2.a,t3.a,t4.a) allows us
to use t1.a=t3.a AND t3.a=t4.a under the on condition:
+ @code
SELECT * FROM (t1,t2) LEFT JOIN (t3,t4) ON t1.a=t3.a AND t3.a=t4.a
WHERE t1.a=t2.a
+ @endcode
This query equivalent to:
+ @code
SELECT * FROM (t1 LEFT JOIN (t3,t4) ON t1.a=t3.a AND t3.a=t4.a),t2
WHERE t1.a=t2.a
+ @endcode
Similarly the original query can be rewritten to the query:
+ @code
SELECT * FROM (t1,t2) LEFT JOIN (t3,t4) ON t2.a=t4.a AND t3.a=t4.a
WHERE t1.a=t2.a
+ @endcode
that is equivalent to:
+ @code
SELECT * FROM (t2 LEFT JOIN (t3,t4)ON t2.a=t4.a AND t3.a=t4.a), t1
WHERE t1.a=t2.a
+ @endcode
Thus, applying equalities from the where condition we basically
can get more freedom in performing join operations.
Althogh we don't use this property now, it probably makes sense to use
it in the future.
-
- RETURN
+ @param thd Thread handler
+ @param cond condition to build the multiple equalities for
+ @param inherited path to all inherited multiple equality items
+ @param join_list list of join tables to which the condition
+ refers to
+ @param[out] cond_equal_ref pointer to the structure to place built
+ equalities in
+
+ @return
pointer to the transformed condition containing multiple equalities
*/
@@ -7741,25 +7833,24 @@ static COND *build_equal_items(THD *thd, COND *cond,
}
-/*
- Compare field items by table order in the execution plan
-
- SYNOPSIS
- compare_fields_by_table_order()
- field1 first field item to compare
- field2 second field item to compare
- table_join_idx index to tables determining table order
+/**
+ Compare field items by table order in the execution plan.
- DESCRIPTION
field1 considered as better than field2 if the table containing
field1 is accessed earlier than the table containing field2.
The function finds out what of two fields is better according
this criteria.
- RETURN
- 1, if field1 is better than field2
- -1, if field2 is better than field1
- 0, otherwise
+ @param field1 first field item to compare
+ @param field2 second field item to compare
+ @param table_join_idx index to tables determining table order
+
+ @retval
+ 1 if field1 is better than field2
+ @retval
+ -1 if field2 is better than field1
+ @retval
+ 0 otherwise
*/
static int compare_fields_by_table_order(Item_field *field1,
@@ -7786,16 +7877,9 @@ static int compare_fields_by_table_order(Item_field *field1,
}
-/*
- Generate minimal set of simple equalities equivalent to a multiple equality
-
- SYNOPSIS
- eliminate_item_equal()
- cond condition to add the generated equality to
- upper_levels structure to access multiple equality of upper levels
- item_equal multiple equality to generate simple equality from
+/**
+ Generate minimal set of simple equalities equivalent to a multiple equality.
- DESCRIPTION
The function retrieves the fields of the multiple equality item
item_equal and for each field f:
- if item_equal contains const it generates the equality f=const_item;
@@ -7803,7 +7887,11 @@ static int compare_fields_by_table_order(Item_field *field1,
f=item_equal->get_first().
All generated equality are added to the cond conjunction.
- NOTES
+ @param cond condition to add the generated equality to
+ @param upper_levels structure to access multiple equality of upper levels
+ @param item_equal multiple equality to generate simple equality from
+
+ @note
Before generating an equality function checks that it has not
been generated for multiple equalities of the upper levels.
E.g. for the following where condition
@@ -7823,10 +7911,10 @@ static int compare_fields_by_table_order(Item_field *field1,
If cond is equal to 0, then not more then one equality is generated
and a pointer to it is returned as the result of the function.
- RETURN
- The condition with generated simple equalities or
+ @return
+ - The condition with generated simple equalities or
a pointer to the simple generated equality, if success.
- 0, otherwise.
+ - 0, otherwise.
*/
static Item *eliminate_item_equal(COND *cond, COND_EQUAL *upper_levels,
@@ -7901,17 +7989,10 @@ static Item *eliminate_item_equal(COND *cond, COND_EQUAL *upper_levels,
}
-/*
- Substitute every field reference in a condition by the best equal field
- and eliminate all multiple equality predicates
-
- SYNOPSIS
- substitute_for_best_equal_field()
- cond condition to process
- cond_equal multiple equalities to take into consideration
- table_join_idx index to tables determining field preference
+/**
+ Substitute every field reference in a condition by the best equal field
+ and eliminate all multiple equality predicates.
- DESCRIPTION
The function retrieves the cond condition and for each encountered
multiple equality predicate it sorts the field references in it
according to the order of tables specified by the table_join_idx
@@ -7922,14 +8003,17 @@ static Item *eliminate_item_equal(COND *cond, COND_EQUAL *upper_levels,
After this the function retrieves all other conjuncted
predicates substitute every field reference by the field reference
to the first equal field or equal constant if there are any.
-
- NOTES
+ @param cond condition to process
+ @param cond_equal multiple equalities to take into consideration
+ @param table_join_idx index to tables determining field preference
+
+ @note
At the first glance full sort of fields in multiple equality
seems to be an overkill. Yet it's not the case due to possible
new fields in multiple equality item of lower levels. We want
the order in them to comply with the order of upper levels.
- RETURN
+ @return
The transformed condition
*/
@@ -8004,20 +8088,17 @@ static COND* substitute_for_best_equal_field(COND *cond,
}
-/*
+/**
Check appearance of new constant items in multiple equalities
- of a condition after reading a constant table
-
- SYNOPSIS
- update_const_equal_items()
- cond condition whose multiple equalities are to be checked
- table constant table that has been read
+ of a condition after reading a constant table.
- DESCRIPTION
The function retrieves the cond condition and for each encountered
multiple equality checks whether new constants have appeared after
reading the constant (single row) table tab. If so it adjusts
the multiple equality appropriately.
+
+ @param cond condition whose multiple equalities are to be checked
+ @param table constant table that has been read
*/
static void update_const_equal_items(COND *cond, JOIN_TAB *tab)
@@ -8156,14 +8237,12 @@ change_cond_ref_to_const(THD *thd, I_List<COND_CMP> *save_list,
}
}
-/*
- Remove additional condition inserted by IN/ALL/ANY transformation
+/**
+ Remove additional condition inserted by IN/ALL/ANY transformation.
- SYNOPSIS
- remove_additional_cond()
- conds Condition for processing
+ @param conds condition for processing
- RETURN VALUES
+ @return
new conditions
*/
@@ -8251,17 +8330,10 @@ propagate_cond_constants(THD *thd, I_List<COND_CMP> *save_list,
}
-/*
- Simplify joins replacing outer joins by inner joins whenever it's possible
-
- SYNOPSIS
- simplify_joins()
- join reference to the query info
- join_list list representation of the join to be converted
- conds conditions to add on expressions for converted joins
- top true <=> conds is the where condition
+/**
+ Simplify joins replacing outer joins by inner joins whenever it's
+ possible.
- DESCRIPTION
The function, during a retrieval of join_list, eliminates those
outer joins that can be converted into inner join, possibly nested.
It also moves the on expressions for the converted outer joins
@@ -8285,26 +8357,39 @@ propagate_cond_constants(THD *thd, I_List<COND_CMP> *save_list,
The function also removes all braces that can be removed from the join
expression without changing its meaning.
- NOTES
+ @note
An outer join can be replaced by an inner join if the where condition
or the on expression for an embedding nested join contains a conjunctive
predicate rejecting null values for some attribute of the inner tables.
E.g. in the query:
+ @code
SELECT * FROM t1 LEFT JOIN t2 ON t2.a=t1.a WHERE t2.b < 5
+ @endcode
the predicate t2.b < 5 rejects nulls.
The query is converted first to:
+ @code
SELECT * FROM t1 INNER JOIN t2 ON t2.a=t1.a WHERE t2.b < 5
+ @endcode
then to the equivalent form:
- SELECT * FROM t1, t2 ON t2.a=t1.a WHERE t2.b < 5 AND t2.a=t1.a.
+ @code
+ SELECT * FROM t1, t2 ON t2.a=t1.a WHERE t2.b < 5 AND t2.a=t1.a
+ @endcode
+
Similarly the following query:
+ @code
SELECT * from t1 LEFT JOIN (t2, t3) ON t2.a=t1.a t3.b=t1.b
WHERE t2.c < 5
+ @endcode
is converted to:
+ @code
SELECT * FROM t1, (t2, t3) WHERE t2.c < 5 AND t2.a=t1.a t3.b=t1.b
+ @endcode
+
One conversion might trigger another:
+ @code
SELECT * FROM t1 LEFT JOIN t2 ON t2.a=t1.a
LEFT JOIN t3 ON t3.b=t2.b
WHERE t3 IS NOT NULL =>
@@ -8312,16 +8397,26 @@ propagate_cond_constants(THD *thd, I_List<COND_CMP> *save_list,
WHERE t3 IS NOT NULL AND t3.b=t2.b =>
SELECT * FROM t1, t2, t3
WHERE t3 IS NOT NULL AND t3.b=t2.b AND t2.a=t1.a
-
+ @endcode
+
The function removes all unnecessary braces from the expression
produced by the conversions.
- E.g. SELECT * FROM t1, (t2, t3) WHERE t2.c < 5 AND t2.a=t1.a AND t3.b=t1.b
+ E.g.
+ @code
+ SELECT * FROM t1, (t2, t3) WHERE t2.c < 5 AND t2.a=t1.a AND t3.b=t1.b
+ @endcode
finally is converted to:
+ @code
SELECT * FROM t1, t2, t3 WHERE t2.c < 5 AND t2.a=t1.a AND t3.b=t1.b
+ @endcode
+
+
It also will remove braces from the following queries:
+ @code
SELECT * from (t1 LEFT JOIN t2 ON t2.a=t1.a) LEFT JOIN t3 ON t3.b=t2.b
SELECT * from (t1, (t2,t3)) WHERE t1.a=t2.a AND t2.b=t3.b.
+ @endcode
The benefit of this simplification procedure is that it might return
a query for which the optimizer can evaluate execution plan with more
@@ -8329,20 +8424,26 @@ propagate_cond_constants(THD *thd, I_List<COND_CMP> *save_list,
consider any plan where one of the inner tables is before some of outer
tables.
- IMPLEMENTATION.
+
The function is implemented by a recursive procedure. On the recursive
ascent all attributes are calculated, all outer joins that can be
converted are replaced and then all unnecessary braces are removed.
As join list contains join tables in the reverse order sequential
elimination of outer joins does not require extra recursive calls.
- EXAMPLES
Here is an example of a join query with invalid cross references:
+ @code
SELECT * FROM t1 LEFT JOIN t2 ON t2.a=t3.a LEFT JOIN t3 ON t3.b=t1.b
-
- RETURN VALUE
- The new condition, if success
- 0, otherwise
+ @endcode
+
+ @param join reference to the query info
+ @param join_list list representation of the join to be converted
+ @param conds conditions to add on expressions for converted joins
+ @param top true <=> conds is the where condition
+
+ @return
+ - The new condition, if success
+ - 0, otherwise
*/
static COND *
@@ -8504,26 +8605,23 @@ simplify_joins(JOIN *join, List<TABLE_LIST> *join_list, COND *conds, bool top)
}
-/*
- Assign each nested join structure a bit in nested_join_map
-
- SYNOPSIS
- build_bitmap_for_nested_joins()
- join Join being processed
- join_list List of tables
- first_unused Number of first unused bit in nested_join_map before the
- call
+/**
+ Assign each nested join structure a bit in nested_join_map.
- DESCRIPTION
Assign each nested join structure (except "confluent" ones - those that
embed only one element) a bit in nested_join_map.
- NOTE
+ @param join Join being processed
+ @param join_list List of tables
+ @param first_unused Number of first unused bit in nested_join_map before the
+ call
+
+ @note
This function is called after simplify_joins(), when there are no
redundant nested joins, #non_confluent_nested_joins <= #tables_in_join so
we will not run out of bits in nested_join_map.
- RETURN
+ @return
First unused bit in nested_join_map after the call.
*/
@@ -8559,17 +8657,14 @@ static uint build_bitmap_for_nested_joins(List<TABLE_LIST> *join_list,
}
-/*
- Set NESTED_JOIN::counter=0 in all nested joins in passed list
-
- SYNOPSIS
- reset_nj_counters()
- join_list List of nested joins to process. It may also contain base
- tables which will be ignored.
+/**
+ Set NESTED_JOIN::counter=0 in all nested joins in passed list.
- DESCRIPTION
Recursively set NESTED_JOIN::counter=0 for all nested joins contained in
the passed join_list.
+
+ @param join_list List of nested joins to process. It may also contain base
+ tables which will be ignored.
*/
static void reset_nj_counters(List<TABLE_LIST> *join_list)
@@ -8590,95 +8685,96 @@ static void reset_nj_counters(List<TABLE_LIST> *join_list)
}
-/*
- Check interleaving with an inner tables of an outer join for extension table
-
- SYNOPSIS
- check_interleaving_with_nj()
- join Join being processed
- last_tab Last table in current partial join order (this function is
- not called for empty partial join orders)
- next_tab Table we're going to extend the current partial join with
+/**
+ Check interleaving with an inner tables of an outer join for
+ extension table.
- DESCRIPTION
Check if table next_tab can be added to current partial join order, and
if yes, record that it has been added.
The function assumes that both current partial join order and its
extension with next_tab are valid wrt table dependencies.
- IMPLEMENTATION
- LIMITATIONS ON JOIN ORDER
- The nested [outer] joins executioner algorithm imposes these limitations
- on join order:
- 1. "Outer tables first" - any "outer" table must be before any
- corresponding "inner" table.
- 2. "No interleaving" - tables inside a nested join must form a continuous
- sequence in join order (i.e. the sequence must not be interrupted by
- tables that are outside of this nested join).
-
- #1 is checked elsewhere, this function checks #2 provided that #1 has
- been already checked.
-
- WHY NEED NON-INTERLEAVING
- Consider an example:
-
- select * from t0 join t1 left join (t2 join t3) on cond1
-
- The join order "t1 t2 t0 t3" is invalid:
-
- table t0 is outside of the nested join, so WHERE condition for t0 is
- attached directly to t0 (without triggers, and it may be used to access
- t0). Applying WHERE(t0) to (t2,t0,t3) record is invalid as we may miss
- combinations of (t1, t2, t3) that satisfy condition cond1, and produce a
- null-complemented (t1, t2.NULLs, t3.NULLs) row, which should not have
- been produced.
-
- If table t0 is not between t2 and t3, the problem doesn't exist:
- * If t0 is located after (t2,t3), WHERE(t0) is applied after nested join
- processing has finished.
- * If t0 is located before (t2,t3), predicates like WHERE_cond(t0, t2) are
- wrapped into condition triggers, which takes care of correct nested
- join processing.
-
- HOW IT IS IMPLEMENTED
- The limitations on join order can be rephrased as follows: for valid
- join order one must be able to:
- 1. write down the used tables in the join order on one line.
- 2. for each nested join, put one '(' and one ')' on the said line
- 3. write "LEFT JOIN" and "ON (...)" where appropriate
- 4. get a query equivalent to the query we're trying to execute.
-
- Calls to check_interleaving_with_nj() are equivalent to writing the
- above described line from left to right.
- A single check_interleaving_with_nj(A,B) call is equivalent to writing
- table B and appropriate brackets on condition that table A and
- appropriate brackets is the last what was written. Graphically the
- transition is as follows:
-
- +---- current position
- |
- ... last_tab ))) | ( next_tab ) )..) | ...
- X Y Z |
- +- need to move to this
- position.
-
- Notes about the position:
- The caller guarantees that there is no more then one X-bracket by
- checking "!(remaining_tables & s->dependent)" before calling this
- function. X-bracket may have a pair in Y-bracket.
-
- When "writing" we store/update this auxilary info about the current
- position:
- 1. join->cur_embedding_map - bitmap of pairs of brackets (aka nested
- joins) we've opened but didn't close.
- 2. {each NESTED_JOIN structure not simplified away}->counter - number
- of this nested join's children that have already been added to to
- the partial join order.
-
- RETURN
- FALSE Join order extended, nested joins info about current join order
- (see NOTE section) updated.
+ @verbatim
+ IMPLEMENTATION
+ LIMITATIONS ON JOIN ORDER
+ The nested [outer] joins executioner algorithm imposes these limitations
+ on join order:
+ 1. "Outer tables first" - any "outer" table must be before any
+ corresponding "inner" table.
+ 2. "No interleaving" - tables inside a nested join must form a continuous
+ sequence in join order (i.e. the sequence must not be interrupted by
+ tables that are outside of this nested join).
+
+ #1 is checked elsewhere, this function checks #2 provided that #1 has
+ been already checked.
+
+ WHY NEED NON-INTERLEAVING
+ Consider an example:
+
+ select * from t0 join t1 left join (t2 join t3) on cond1
+
+ The join order "t1 t2 t0 t3" is invalid:
+
+ table t0 is outside of the nested join, so WHERE condition for t0 is
+ attached directly to t0 (without triggers, and it may be used to access
+ t0). Applying WHERE(t0) to (t2,t0,t3) record is invalid as we may miss
+ combinations of (t1, t2, t3) that satisfy condition cond1, and produce a
+ null-complemented (t1, t2.NULLs, t3.NULLs) row, which should not have
+ been produced.
+
+ If table t0 is not between t2 and t3, the problem doesn't exist:
+ If t0 is located after (t2,t3), WHERE(t0) is applied after nested join
+ processing has finished.
+ If t0 is located before (t2,t3), predicates like WHERE_cond(t0, t2) are
+ wrapped into condition triggers, which takes care of correct nested
+ join processing.
+
+ HOW IT IS IMPLEMENTED
+ The limitations on join order can be rephrased as follows: for valid
+ join order one must be able to:
+ 1. write down the used tables in the join order on one line.
+ 2. for each nested join, put one '(' and one ')' on the said line
+ 3. write "LEFT JOIN" and "ON (...)" where appropriate
+ 4. get a query equivalent to the query we're trying to execute.
+
+ Calls to check_interleaving_with_nj() are equivalent to writing the
+ above described line from left to right.
+ A single check_interleaving_with_nj(A,B) call is equivalent to writing
+ table B and appropriate brackets on condition that table A and
+ appropriate brackets is the last what was written. Graphically the
+ transition is as follows:
+
+ +---- current position
+ |
+ ... last_tab ))) | ( next_tab ) )..) | ...
+ X Y Z |
+ +- need to move to this
+ position.
+
+ Notes about the position:
+ The caller guarantees that there is no more then one X-bracket by
+ checking "!(remaining_tables & s->dependent)" before calling this
+ function. X-bracket may have a pair in Y-bracket.
+
+ When "writing" we store/update this auxilary info about the current
+ position:
+ 1. join->cur_embedding_map - bitmap of pairs of brackets (aka nested
+ joins) we've opened but didn't close.
+ 2. {each NESTED_JOIN structure not simplified away}->counter - number
+ of this nested join's children that have already been added to to
+ the partial join order.
+ @endverbatim
+
+ @param join Join being processed
+ @param last_tab Last table in current partial join order (this function is
+ not called for empty partial join orders)
+ @param next_tab Table we're going to extend the current partial join with
+
+ @retval
+ FALSE Join order extended, nested joins info about current join
+ order (see NOTE section) updated.
+ @retval
TRUE Requested join order extension not allowed.
*/
@@ -8727,19 +8823,16 @@ static bool check_interleaving_with_nj(JOIN_TAB *last_tab, JOIN_TAB *next_tab)
}
-/*
- Nested joins perspective: Remove the last table from the join order
+/**
+ Nested joins perspective: Remove the last table from the join order.
- SYNOPSIS
- restore_prev_nj_state()
- last join table to remove, it is assumed to be the last in current
- partial join order.
-
- DESCRIPTION
Remove the last table from the partial join order and update the nested
joins counters and join->cur_embedding_map. It is ok to call this
function for the first table in join order (for which
check_interleaving_with_nj has not been called)
+
+ @param last join table to remove, it is assumed to be the last in current
+ partial join order.
*/
static void restore_prev_nj_state(JOIN_TAB *last)
@@ -8798,12 +8891,15 @@ optimize_cond(JOIN *join, COND *conds, List<TABLE_LIST> *join_list,
}
-/*
- Remove const and eq items. Return new item, or NULL if no condition
- cond_value is set to according:
- COND_OK query is possible (field = constant)
- COND_TRUE always true ( 1 = 1 )
- COND_FALSE always false ( 1 = 2 )
+/**
+ Remove const and eq items.
+
+ @return
+ Return new item, or NULL if no condition @n
+ cond_value is set to according:
+ - COND_OK : query is possible (field = constant)
+ - COND_TRUE : always true ( 1 = 1 )
+ - COND_FALSE : always false ( 1 = 2 )
*/
COND *
@@ -8994,8 +9090,8 @@ test_if_equality_guarantees_uniqueness(Item *l, Item *r)
l->collation.collation == r->collation.collation)));
}
-/*
- Return 1 if the item is a const value in all the WHERE clause
+/**
+ Return TRUE if the item is a const value in all the WHERE clause.
*/
static bool
@@ -9056,26 +9152,25 @@ const_expression_in_where(COND *cond, Item *comp_item, Item **const_item)
Create internal temporary table
****************************************************************************/
-/*
- Create field for temporary table from given field
-
- SYNOPSIS
- create_tmp_field_from_field()
- thd Thread handler
- org_field field from which new field will be created
- name New field name
- table Temporary table
- item !=NULL if item->result_field should point to new field.
- This is relevant for how fill_record() is going to work:
- If item != NULL then fill_record() will update
- the record in the original table.
- If item == NULL then fill_record() will update
- the temporary table
- convert_blob_length If >0 create a varstring(convert_blob_length) field
- instead of blob.
-
- RETURN
- 0 on error
+/**
+ Create field for temporary table from given field.
+
+ @param thd Thread handler
+ @param org_field field from which new field will be created
+ @param name New field name
+ @param table Temporary table
+ @param item !=NULL if item->result_field should point to new field.
+ This is relevant for how fill_record() is going to work:
+ If item != NULL then fill_record() will update
+ the record in the original table.
+ If item == NULL then fill_record() will update
+ the temporary table
+ @param convert_blob_length If >0 create a varstring(convert_blob_length)
+ field instead of blob.
+
+ @retval
+ NULL on error
+ @retval
new_created field
*/
@@ -9118,28 +9213,27 @@ Field *create_tmp_field_from_field(THD *thd, Field *org_field,
return new_field;
}
-/*
- Create field for temporary table using type of given item
-
- SYNOPSIS
- create_tmp_field_from_item()
- thd Thread handler
- item Item to create a field for
- table Temporary table
- copy_func If set and item is a function, store copy of item
- in this array
- modify_item 1 if item->result_field should point to new item.
- This is relevent for how fill_record() is going to
- work:
- If modify_item is 1 then fill_record() will update
- the record in the original table.
- If modify_item is 0 then fill_record() will update
- the temporary table
- convert_blob_length If >0 create a varstring(convert_blob_length) field
- instead of blob.
-
- RETURN
- 0 on error
+/**
+ Create field for temporary table using type of given item.
+
+ @param thd Thread handler
+ @param item Item to create a field for
+ @param table Temporary table
+ @param copy_func If set and item is a function, store copy of
+ item in this array
+ @param modify_item 1 if item->result_field should point to new
+ item. This is relevent for how fill_record()
+ is going to work:
+ If modify_item is 1 then fill_record() will
+ update the record in the original table.
+ If modify_item is 0 then fill_record() will
+ update the temporary table
+ @param convert_blob_length If >0 create a varstring(convert_blob_length)
+ field instead of blob.
+
+ @retval
+ 0 on error
+ @retval
new_created field
*/
@@ -9197,9 +9291,43 @@ static Field *create_tmp_field_from_item(THD *thd, Item *item, TABLE *table,
new_field->set_derivation(item->collation.derivation);
break;
case DECIMAL_RESULT:
- new_field= new Field_new_decimal(item->max_length, maybe_null, item->name,
- item->decimals, item->unsigned_flag);
+ {
+ uint8 dec= item->decimals;
+ uint8 intg= ((Item_decimal *) item)->decimal_precision() - dec;
+ uint32 len= item->max_length;
+
+ /*
+ Trying to put too many digits overall in a DECIMAL(prec,dec)
+ will always throw a warning. We must limit dec to
+ DECIMAL_MAX_SCALE however to prevent an assert() later.
+ */
+
+ if (dec > 0)
+ {
+ signed int overflow;
+
+ dec= min(dec, DECIMAL_MAX_SCALE);
+
+ /*
+ If the value still overflows the field with the corrected dec,
+ we'll throw out decimals rather than integers. This is still
+ bad and of course throws a truncation warning.
+ +1: for decimal point
+ */
+
+ overflow= my_decimal_precision_to_length(intg + dec, dec,
+ item->unsigned_flag) - len;
+
+ if (overflow > 0)
+ dec= max(0, dec - overflow); // too long, discard fract
+ else
+ len -= item->decimals - dec; // corrected value fits
+ }
+
+ new_field= new Field_new_decimal(len, maybe_null, item->name,
+ dec, item->unsigned_flag);
break;
+ }
case ROW_RESULT:
default:
// This case should never be choosen
@@ -9214,21 +9342,22 @@ static Field *create_tmp_field_from_item(THD *thd, Item *item, TABLE *table,
*((*copy_func)++) = item; // Save for copy_funcs
if (modify_item)
item->set_result_field(new_field);
+ if (item->type() == Item::NULL_ITEM)
+ new_field->is_created_from_null_item= TRUE;
return new_field;
}
-/*
- Create field for information schema table
+/**
+ Create field for information schema table.
- SYNOPSIS
- create_tmp_field_for_schema()
- thd Thread handler
- table Temporary table
- item Item to create a field for
+ @param thd Thread handler
+ @param table Temporary table
+ @param item Item to create a field for
- RETURN
+ @retval
0 on error
+ @retval
new_created field
*/
@@ -9252,33 +9381,32 @@ Field *create_tmp_field_for_schema(THD *thd, Item *item, TABLE *table)
}
-/*
- Create field for temporary table
-
- SYNOPSIS
- create_tmp_field()
- thd Thread handler
- table Temporary table
- item Item to create a field for
- type Type of item (normally item->type)
- copy_func If set and item is a function, store copy of item
- in this array
- from_field if field will be created using other field as example,
- pointer example field will be written here
- default_field If field has a default value field, store it here
- group 1 if we are going to do a relative group by on result
- modify_item 1 if item->result_field should point to new item.
- This is relevent for how fill_record() is going to
- work:
- If modify_item is 1 then fill_record() will update
- the record in the original table.
- If modify_item is 0 then fill_record() will update
- the temporary table
- convert_blob_length If >0 create a varstring(convert_blob_length) field
- instead of blob.
-
- RETURN
+/**
+ Create field for temporary table.
+
+ @param thd Thread handler
+ @param table Temporary table
+ @param item Item to create a field for
+ @param type Type of item (normally item->type)
+ @param copy_func If set and item is a function, store copy of item
+ in this array
+ @param from_field if field will be created using other field as example,
+ pointer example field will be written here
+ @param default_field If field has a default value field, store it here
+ @param group 1 if we are going to do a relative group by on result
+ @param modify_item 1 if item->result_field should point to new item.
+ This is relevent for how fill_record() is going to
+ work:
+ If modify_item is 1 then fill_record() will update
+ the record in the original table.
+ If modify_item is 0 then fill_record() will update
+ the temporary table
+ @param convert_blob_length If >0 create a varstring(convert_blob_length)
+ field instead of blob.
+
+ @retval
0 on error
+ @retval
new_created field
*/
@@ -9439,33 +9567,30 @@ void setup_tmp_table_column_bitmaps(TABLE *table, uchar *bitmaps)
}
-/*
+/**
Create a temp table according to a field list.
- SYNOPSIS
- create_tmp_table()
- thd thread handle
- param a description used as input to create the table
- fields list of items that will be used to define
- column types of the table (also see NOTES)
- group TODO document
- distinct should table rows be distinct
- save_sum_fields see NOTES
- select_options
- rows_limit
- table_alias possible name of the temporary table that can be used
- for name resolving; can be "".
-
- DESCRIPTION
- Given field pointers are changed to point at tmp_table for
- send_fields. The table object is self contained: it's
- allocated in its own memory root, as well as Field objects
- created for table columns.
- This function will replace Item_sum items in 'fields' list with
- corresponding Item_field items, pointing at the fields in the
- temporary table, unless this was prohibited by TRUE
- value of argument save_sum_fields. The Item_field objects
- are created in THD memory root.
+ Given field pointers are changed to point at tmp_table for
+ send_fields. The table object is self contained: it's
+ allocated in its own memory root, as well as Field objects
+ created for table columns.
+ This function will replace Item_sum items in 'fields' list with
+ corresponding Item_field items, pointing at the fields in the
+ temporary table, unless this was prohibited by TRUE
+ value of argument save_sum_fields. The Item_field objects
+ are created in THD memory root.
+
+ @param thd thread handle
+ @param param a description used as input to create the table
+ @param fields list of items that will be used to define
+ column types of the table (also see NOTES)
+ @param group TODO document
+ @param distinct should table rows be distinct
+ @param save_sum_fields see NOTES
+ @param select_options
+ @param rows_limit
+ @param table_alias possible name of the temporary table that can
+ be used for name resolving; can be "".
*/
#define STRING_TOTAL_LENGTH_TO_PACK_ROWS 128
@@ -9620,7 +9745,7 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
table->keys_in_use_for_query.init();
table->s= share;
- init_tmp_table_share(share, "", 0, tmpname, tmpname);
+ init_tmp_table_share(thd, share, "", 0, tmpname, tmpname);
share->blob_field= blob_field;
share->blob_ptr_size= mi_portable_sizeof_char_ptr;
share->db_low_byte_first=1; // True for HEAP and MyISAM
@@ -10136,16 +10261,10 @@ err:
/****************************************************************************/
-/*
+/**
Create a reduced TABLE object with properly set up Field list from a
list of field definitions.
- SYNOPSIS
- create_virtual_tmp_table()
- thd connection handle
- field_list list of column definitions
-
- DESCRIPTION
The created table doesn't have a table handler associated with
it, has no keys, no group/distinct, no copy_funcs array.
The sole purpose of this TABLE object is to use the power of Field
@@ -10154,7 +10273,10 @@ err:
The table is created in THD mem_root, so are the table's fields.
Consequently, if you don't BLOB fields, you don't need to free it.
- RETURN
+ @param thd connection handle
+ @param field_list list of column definitions
+
+ @return
0 if out of memory, TABLE object in case of success
*/
@@ -10400,14 +10522,14 @@ free_tmp_table(THD *thd, TABLE *entry)
DBUG_PRINT("enter",("table: %s",entry->alias));
save_proc_info=thd->proc_info;
- thd->proc_info="removing tmp table";
+ thd_proc_info(thd, "removing tmp table");
if (entry->file)
{
if (entry->db_stat)
- entry->file->drop_table(entry->s->table_name.str);
+ entry->file->ha_drop_table(entry->s->table_name.str);
else
- entry->file->delete_table(entry->s->table_name.str);
+ entry->file->ha_delete_table(entry->s->table_name.str);
delete entry->file;
}
@@ -10422,13 +10544,14 @@ free_tmp_table(THD *thd, TABLE *entry)
plugin_unlock(0, entry->s->db_plugin);
free_root(&own_root, MYF(0)); /* the table is allocated in its own root */
- thd->proc_info=save_proc_info;
+ thd_proc_info(thd, save_proc_info);
DBUG_VOID_RETURN;
}
-/*
-* If a HEAP table gets full, create a MyISAM table and copy all rows to this
+/**
+ If a HEAP table gets full, create a MyISAM table and copy all rows
+ to this.
*/
bool create_myisam_from_heap(THD *thd, TABLE *table, TMP_TABLE_PARAM *param,
@@ -10455,7 +10578,7 @@ bool create_myisam_from_heap(THD *thd, TABLE *table, TMP_TABLE_PARAM *param,
DBUG_RETURN(1); // End of memory
save_proc_info=thd->proc_info;
- thd->proc_info="converting HEAP to MyISAM";
+ thd_proc_info(thd, "converting HEAP to MyISAM");
if (create_myisam_tmp_table(&new_table, param,
thd->lex->select_lex.options | thd->options))
@@ -10463,7 +10586,7 @@ bool create_myisam_from_heap(THD *thd, TABLE *table, TMP_TABLE_PARAM *param,
if (open_tmp_table(&new_table))
goto err1;
if (table->file->indexes_are_disabled())
- new_table.file->disable_indexes(HA_KEY_SWITCH_ALL);
+ new_table.file->ha_disable_indexes(HA_KEY_SWITCH_ALL);
table->file->ha_index_or_rnd_end();
table->file->ha_rnd_init(1);
if (table->no_rows)
@@ -10492,13 +10615,13 @@ bool create_myisam_from_heap(THD *thd, TABLE *table, TMP_TABLE_PARAM *param,
*/
while (!table->file->rnd_next(new_table.record[1]))
{
- write_err= new_table.file->write_row(new_table.record[1]);
+ write_err= new_table.file->ha_write_row(new_table.record[1]);
DBUG_EXECUTE_IF("raise_error", write_err= HA_ERR_FOUND_DUPP_KEY ;);
if (write_err)
goto err;
}
/* copy row that filled HEAP table */
- if ((write_err=new_table.file->write_row(table->record[0])))
+ if ((write_err=new_table.file->ha_write_row(table->record[0])))
{
if (new_table.file->is_fatal_error(write_err, HA_CHECK_DUP) ||
!ignore_last_dupp_key_error)
@@ -10519,8 +10642,8 @@ bool create_myisam_from_heap(THD *thd, TABLE *table, TMP_TABLE_PARAM *param,
table->file->change_table_ptr(table, table->s);
table->use_all_columns();
if (save_proc_info)
- thd->proc_info= (!strcmp(save_proc_info,"Copying to tmp table") ?
- "Copying to tmp table on disk" : save_proc_info);
+ thd_proc_info(thd, (!strcmp(save_proc_info,"Copying to tmp table") ?
+ "Copying to tmp table on disk" : save_proc_info));
DBUG_RETURN(0);
err:
@@ -10529,26 +10652,24 @@ bool create_myisam_from_heap(THD *thd, TABLE *table, TMP_TABLE_PARAM *param,
(void) table->file->ha_rnd_end();
(void) new_table.file->close();
err1:
- new_table.file->delete_table(new_table.s->table_name.str);
+ new_table.file->ha_delete_table(new_table.s->table_name.str);
err2:
delete new_table.file;
- thd->proc_info=save_proc_info;
+ thd_proc_info(thd, save_proc_info);
table->mem_root= new_table.mem_root;
DBUG_RETURN(1);
}
-/*
- SYNOPSIS
- setup_end_select_func()
- join join to setup the function for.
+/**
+ @details
+ Rows produced by a join sweep may end up in a temporary table or be sent
+ to a client. Setup the function of the nested loop join algorithm which
+ handles final fully constructed and matched records.
- DESCRIPTION
- Rows produced by a join sweep may end up in a temporary table or be sent
- to a client. Setup the function of the nested loop join algorithm which
- handles final fully constructed and matched records.
+ @param join join to setup the function for.
- RETURN
+ @return
end_select function to use. This function can't fail.
*/
@@ -10561,7 +10682,8 @@ Next_select_func setup_end_select_func(JOIN *join)
/* Set up select_end */
if (table)
{
- if (table->group && tmp_tbl->sum_func_count)
+ if (table->group && tmp_tbl->sum_func_count &&
+ !tmp_tbl->precomputed_group_by)
{
if (table->s->keys)
{
@@ -10612,12 +10734,16 @@ Next_select_func setup_end_select_func(JOIN *join)
}
-/****************************************************************************
- Make a join of all tables and write it on socket or to table
- Return: 0 if ok
- 1 if error is sent
- -1 if error should be sent
-****************************************************************************/
+/**
+ Make a join of all tables and write it on socket or to table.
+
+ @retval
+ 0 if ok
+ @retval
+ 1 if error is sent
+ @retval
+ -1 if error should be sent
+*/
static int
do_select(JOIN *join,List<Item> *fields,TABLE *table,Procedure *procedure)
@@ -10660,6 +10786,15 @@ do_select(JOIN *join,List<Item> *fields,TABLE *table,Procedure *procedure)
error= (*end_select)(join, 0, 0);
if (error == NESTED_LOOP_OK || error == NESTED_LOOP_QUERY_LIMIT)
error= (*end_select)(join, 0, 1);
+
+ /*
+ If we don't go through evaluate_join_record(), do the counting
+ here. join->send_records is increased on success in end_send(),
+ so we don't touch it here.
+ */
+ join->examined_rows++;
+ join->thd->row_count++;
+ DBUG_ASSERT(join->examined_rows <= 1);
}
else if (join->send_row_on_empty_set())
{
@@ -10722,7 +10857,7 @@ do_select(JOIN *join,List<Item> *fields,TABLE *table,Procedure *procedure)
DBUG_PRINT("error",("Error: do_select() failed"));
}
#endif
- DBUG_RETURN(join->thd->net.report_error ? -1 : rc);
+ DBUG_RETURN(join->thd->is_error() ? -1 : rc);
}
@@ -10755,30 +10890,25 @@ sub_select_cache(JOIN *join,JOIN_TAB *join_tab,bool end_of_records)
return rc;
}
-/*
- Retrieve records ends with a given beginning from the result of a join
-
- SYNPOSIS
- sub_select()
- join pointer to the structure providing all context info for the query
- join_tab the first next table of the execution plan to be retrieved
- end_records true when we need to perform final steps of retrival
+/**
+ Retrieve records ends with a given beginning from the result of a join.
- DESCRIPTION
For a given partial join record consisting of records from the tables
preceding the table join_tab in the execution plan, the function
retrieves all matching full records from the result set and
send them to the result set stream.
- NOTES
+ @note
The function effectively implements the final (n-k) nested loops
of nested loops join algorithm, where k is the ordinal number of
the join_tab table and n is the total number of tables in the join query.
It performs nested loops joins with all conjunctive predicates from
the where condition pushed as low to the tables as possible.
E.g. for the query
- SELECT * FROM t1,t2,t3
- WHERE t1.a=t2.a AND t2.b=t3.b AND t1.a BETWEEN 5 AND 9
+ @code
+ SELECT * FROM t1,t2,t3
+ WHERE t1.a=t2.a AND t2.b=t3.b AND t1.a BETWEEN 5 AND 9
+ @endcode
the predicate (t1.a BETWEEN 5 AND 9) will be pushed to table t1,
given the selected plan prescribes to nest retrievals of the
joined tables in the following order: t1,t2,t3.
@@ -10794,9 +10924,11 @@ sub_select_cache(JOIN *join,JOIN_TAB *join_tab,bool end_of_records)
the execution plan. In this case the pushed down predicates can be
checked only at certain conditions.
Suppose for the query
- SELECT * FROM t1 LEFT JOIN (t2,t3) ON t3.a=t1.a
- WHERE t1>2 AND (t2.b>5 OR t2.b IS NULL)
- the optimizer has chosen a plan with the table order t1,t2,t3.
+ @code
+ SELECT * FROM t1 LEFT JOIN (t2,t3) ON t3.a=t1.a
+ WHERE t1>2 AND (t2.b>5 OR t2.b IS NULL)
+ @endcode
+ the optimizer has chosen a plan with the table order t1,t2,t3.
The predicate P1=t1>2 will be pushed down to the table t1, while the
predicate P2=(t2.b>5 OR t2.b IS NULL) will be attached to the table
t2. But the second predicate can not be unconditionally tested right
@@ -10824,7 +10956,9 @@ sub_select_cache(JOIN *join,JOIN_TAB *join_tab,bool end_of_records)
been done for the first row with a match. The only difference is
the predicates from on expressions are not checked.
- IMPLEMENTATION
+ @par
+ @b IMPLEMENTATION
+ @par
The function forms output rows for a current partial join of k
tables tables recursively.
For each partial join record ending with a certain row from
@@ -10840,11 +10974,13 @@ sub_select_cache(JOIN *join,JOIN_TAB *join_tab,bool end_of_records)
To carry out a return to a nested loop level of join table t the pointer
to t is remembered in the field 'return_tab' of the join structure.
Consider the following query:
- SELECT * FROM t1,
- LEFT JOIN
- (t2, t3 LEFT JOIN (t4,t5) ON t5.a=t3.a)
- ON t4.a=t2.a
- WHERE (t2.b=5 OR t2.b IS NULL) AND (t4.b=2 OR t4.b IS NULL)
+ @code
+ SELECT * FROM t1,
+ LEFT JOIN
+ (t2, t3 LEFT JOIN (t4,t5) ON t5.a=t3.a)
+ ON t4.a=t2.a
+ WHERE (t2.b=5 OR t2.b IS NULL) AND (t4.b=2 OR t4.b IS NULL)
+ @endcode
Suppose the chosen execution plan dictates the order t1,t2,t3,t4,t5
and suppose for a given joined rows from tables t1,t2,t3 there are
no rows in the result set yet.
@@ -10859,11 +10995,18 @@ sub_select_cache(JOIN *join,JOIN_TAB *join_tab,bool end_of_records)
Thus, when the first row from t5 with t5.a=t3.a is found
this pointer for t5 is changed from t4 to t2.
- STRUCTURE NOTES
+ @par
+ @b STRUCTURE @b NOTES
+ @par
join_tab->first_unmatched points always backwards to the first inner
table of the embedding nested join, if any.
- RETURN
+ @param join pointer to the structure providing all context info for
+ the query
+ @param join_tab the first next table of the execution plan to be retrieved
+ @param end_records true when we need to perform final steps of retrival
+
+ @return
return one of enum_nested_loop_state, except NESTED_LOOP_NO_MORE_ROWS.
*/
@@ -10876,7 +11019,6 @@ sub_select(JOIN *join,JOIN_TAB *join_tab,bool end_of_records)
int error;
enum_nested_loop_state rc;
- my_bool *report_error= &(join->thd->net.report_error);
READ_RECORD *info= &join_tab->read_record;
if (join->resume_nested_loop)
@@ -10908,13 +11050,13 @@ sub_select(JOIN *join,JOIN_TAB *join_tab,bool end_of_records)
join->thd->row_count= 0;
error= (*join_tab->read_first_record)(join_tab);
- rc= evaluate_join_record(join, join_tab, error, report_error);
+ rc= evaluate_join_record(join, join_tab, error);
}
while (rc == NESTED_LOOP_OK)
{
error= info->read_record(info);
- rc= evaluate_join_record(join, join_tab, error, report_error);
+ rc= evaluate_join_record(join, join_tab, error);
}
if (rc == NESTED_LOOP_NO_MORE_ROWS &&
@@ -10927,10 +11069,9 @@ sub_select(JOIN *join,JOIN_TAB *join_tab,bool end_of_records)
}
-/*
+/**
Process one record of the nested loop join.
- DESCRIPTION
This function will evaluate parts of WHERE/ON clauses that are
applicable to the partial record on hand and in case of success
submit this record to the next level of the nested loop.
@@ -10938,13 +11079,13 @@ sub_select(JOIN *join,JOIN_TAB *join_tab,bool end_of_records)
static enum_nested_loop_state
evaluate_join_record(JOIN *join, JOIN_TAB *join_tab,
- int error, my_bool *report_error)
+ int error)
{
bool not_used_in_distinct=join_tab->not_used_in_distinct;
ha_rows found_records=join->found_records;
COND *select_cond= join_tab->select_cond;
- if (error > 0 || (*report_error)) // Fatal error
+ if (error > 0 || (join->thd->is_error())) // Fatal error
return NESTED_LOOP_ERROR;
if (error < 0)
return NESTED_LOOP_NO_MORE_ROWS;
@@ -11054,8 +11195,9 @@ evaluate_join_record(JOIN *join, JOIN_TAB *join_tab,
}
-/*
- DESCRIPTION
+/**
+
+ @details
Construct a NULL complimented partial join record and feed it to the next
level of the nested loop. This function is used in case we have
an OUTER join and no matching record was found.
@@ -11199,7 +11341,7 @@ flush_cached_records(JOIN *join,JOIN_TAB *join_tab,bool skip_last)
Returns -1 if row was not found, 0 if row was found and 1 on errors
*****************************************************************************/
-/* Help function when we get some an error from the table handler */
+/** Help function when we get some an error from the table handler. */
int report_error(TABLE *table, int error)
{
@@ -11338,17 +11480,17 @@ join_read_system(JOIN_TAB *tab)
}
-/*
- Read a table when there is at most one matching row
+/**
+ Read a table when there is at most one matching row.
- SYNOPSIS
- join_read_const()
- tab Table to read
+ @param tab Table to read
- RETURN
+ @retval
0 Row was found
- -1 Row was not found
- 1 Got an error (other than row not found) during read
+ @retval
+ -1 Row was not found
+ @retval
+ 1 Got an error (other than row not found) during read
*/
static int
@@ -11449,9 +11591,9 @@ join_read_always_key(JOIN_TAB *tab)
}
-/*
+/**
This function is used when optimizing away ORDER BY in
- SELECT * FROM t1 WHERE a=1 ORDER BY a DESC,b DESC
+ SELECT * FROM t1 WHERE a=1 ORDER BY a DESC,b DESC.
*/
static int
@@ -11666,8 +11808,8 @@ join_ft_read_next(READ_RECORD *info)
}
-/*
- Reading of key with key reference and one part that may be NULL
+/**
+ Reading of key with key reference and one part that may be NULL.
*/
int
@@ -11952,7 +12094,7 @@ end_write(JOIN *join, JOIN_TAB *join_tab __attribute__((unused)),
{
int error;
join->found_records++;
- if ((error=table->file->write_row(table->record[0])))
+ if ((error=table->file->ha_write_row(table->record[0])))
{
if (!table->file->is_fatal_error(error, HA_CHECK_DUP))
goto end;
@@ -11976,8 +12118,8 @@ end:
DBUG_RETURN(NESTED_LOOP_OK);
}
-/* Group by searching after group record and updating it if possible */
/* ARGSUSED */
+/** Group by searching after group record and updating it if possible. */
static enum_nested_loop_state
end_update(JOIN *join, JOIN_TAB *join_tab __attribute__((unused)),
@@ -12014,8 +12156,8 @@ end_update(JOIN *join, JOIN_TAB *join_tab __attribute__((unused)),
{ /* Update old record */
restore_record(table,record[1]);
update_tmptable_sum_func(join->sum_funcs,table);
- if ((error=table->file->update_row(table->record[1],
- table->record[0])))
+ if ((error=table->file->ha_update_row(table->record[1],
+ table->record[0])))
{
table->file->print_error(error,MYF(0)); /* purecov: inspected */
DBUG_RETURN(NESTED_LOOP_ERROR); /* purecov: inspected */
@@ -12038,7 +12180,7 @@ end_update(JOIN *join, JOIN_TAB *join_tab __attribute__((unused)),
}
init_tmptable_sum_functions(join->sum_funcs);
copy_funcs(join->tmp_table_param.items_to_copy);
- if ((error=table->file->write_row(table->record[0])))
+ if ((error=table->file->ha_write_row(table->record[0])))
{
if (create_myisam_from_heap(join->thd, table, &join->tmp_table_param,
error, 0))
@@ -12052,7 +12194,7 @@ end_update(JOIN *join, JOIN_TAB *join_tab __attribute__((unused)),
}
-/* Like end_update, but this is done with unique constraints instead of keys */
+/** Like end_update, but this is done with unique constraints instead of keys. */
static enum_nested_loop_state
end_unique_update(JOIN *join, JOIN_TAB *join_tab __attribute__((unused)),
@@ -12074,7 +12216,7 @@ end_unique_update(JOIN *join, JOIN_TAB *join_tab __attribute__((unused)),
copy_fields(&join->tmp_table_param); // Groups are copied twice.
copy_funcs(join->tmp_table_param.items_to_copy);
- if (!(error=table->file->write_row(table->record[0])))
+ if (!(error=table->file->ha_write_row(table->record[0])))
join->send_records++; // New group
else
{
@@ -12090,8 +12232,8 @@ end_unique_update(JOIN *join, JOIN_TAB *join_tab __attribute__((unused)),
}
restore_record(table,record[1]);
update_tmptable_sum_func(join->sum_funcs,table);
- if ((error=table->file->update_row(table->record[1],
- table->record[0])))
+ if ((error=table->file->ha_update_row(table->record[1],
+ table->record[0])))
{
table->file->print_error(error,MYF(0)); /* purecov: inspected */
DBUG_RETURN(NESTED_LOOP_ERROR); /* purecov: inspected */
@@ -12134,7 +12276,7 @@ end_write_group(JOIN *join, JOIN_TAB *join_tab __attribute__((unused)),
join->sum_funcs_end[send_group_parts]);
if (!join->having || join->having->val_int())
{
- int error= table->file->write_row(table->record[0]);
+ int error= table->file->ha_write_row(table->record[0]);
if (error && create_myisam_from_heap(join->thd, table,
&join->tmp_table_param,
error, 0))
@@ -12183,7 +12325,10 @@ end_write_group(JOIN *join, JOIN_TAB *join_tab __attribute__((unused)),
in sorted order.
*****************************************************************************/
-/* Return 1 if right_item is used removable reference key on left_item */
+/**
+ @return
+ 1 if right_item is used removable reference key on left_item
+*/
static bool test_if_ref(Item_field *left_item,Item *right_item)
{
@@ -12194,8 +12339,12 @@ static bool test_if_ref(Item_field *left_item,Item *right_item)
Item *ref_item=part_of_refkey(field->table,field);
if (ref_item && ref_item->eq(right_item,1))
{
+ right_item= right_item->real_item();
if (right_item->type() == Item::FIELD_ITEM)
return (field->eq_def(((Item_field *) right_item)->field));
+ /* remove equalities injected by IN->EXISTS transformation */
+ else if (right_item->type() == Item::CACHE_ITEM)
+ return ((Item_cache *)right_item)->eq_def (field);
if (right_item->const_item() && !(right_item->is_null()))
{
/*
@@ -12333,26 +12482,26 @@ part_of_refkey(TABLE *table,Field *field)
}
-/*****************************************************************************
- Test if one can use the key to resolve ORDER BY
+/**
+ Test if one can use the key to resolve ORDER BY.
- SYNOPSIS
- test_if_order_by_key()
- order Sort order
- table Table to sort
- idx Index to check
- used_key_parts Return value for used key parts.
+ @param order Sort order
+ @param table Table to sort
+ @param idx Index to check
+ @param used_key_parts Return value for used key parts.
- NOTES
+ @note
used_key_parts is set to correct key parts used if return value != 0
(On other cases, used_key_part may be changed)
- RETURN
+ @retval
1 key is ok.
+ @retval
0 Key can't be used
- -1 Reverse key can be used
-*****************************************************************************/
+ @retval
+ -1 Reverse key can be used
+*/
static int test_if_order_by_key(ORDER *order, TABLE *table, uint idx,
uint *used_key_parts)
@@ -12447,20 +12596,19 @@ uint find_shortest_key(TABLE *table, const key_map *usable_keys)
return best;
}
-/*
+/**
Test if a second key is the subkey of the first one.
- SYNOPSIS
- is_subkey()
- key_part First key parts
- ref_key_part Second key parts
- ref_key_part_end Last+1 part of the second key
+ @param key_part First key parts
+ @param ref_key_part Second key parts
+ @param ref_key_part_end Last+1 part of the second key
- NOTE
+ @note
Second key MUST be shorter than the first one.
- RETURN
+ @retval
1 is a subkey
+ @retval
0 no sub key
*/
@@ -12474,17 +12622,16 @@ is_subkey(KEY_PART_INFO *key_part, KEY_PART_INFO *ref_key_part,
return 1;
}
-/*
- Test if we can use one of the 'usable_keys' instead of 'ref' key for sorting
+/**
+ Test if we can use one of the 'usable_keys' instead of 'ref' key
+ for sorting.
- SYNOPSIS
- test_if_subkey()
- ref Number of key, used for WHERE clause
- usable_keys Keys for testing
+ @param ref Number of key, used for WHERE clause
+ @param usable_keys Keys for testing
- RETURN
- MAX_KEY If we can't use other key
- the number of found key Otherwise
+ @return
+ - MAX_KEY If we can't use other key
+ - the number of found key Otherwise
*/
static uint
@@ -12515,24 +12662,19 @@ test_if_subkey(ORDER *order, TABLE *table, uint ref, uint ref_key_parts,
}
-/*
+/**
Check if GROUP BY/DISTINCT can be optimized away because the set is
already known to be distinct.
-
- SYNOPSIS
- list_contains_unique_index ()
- table The table to operate on.
- find_func function to iterate over the list and search
- for a field
- DESCRIPTION
- Used in removing the GROUP BY/DISTINCT of the following types of
- statements:
- SELECT [DISTINCT] <unique_key_cols>... FROM <single_table_ref>
- [GROUP BY <unique_key_cols>,...]
+ Used in removing the GROUP BY/DISTINCT of the following types of
+ statements:
+ @code
+ SELECT [DISTINCT] <unique_key_cols>... FROM <single_table_ref>
+ [GROUP BY <unique_key_cols>,...]
+ @endcode
If (a,b,c is distinct)
- then <any combination of a,b,c>,{whatever} is also distinct
+ then <any combination of a,b,c>,{whatever} is also distinct
This function checks if all the key parts of any of the unique keys
of the table are referenced by a list : either the select list
@@ -12541,9 +12683,14 @@ test_if_subkey(ORDER *order, TABLE *table, uint ref, uint ref_key_parts,
If the above holds and the key parts cannot contain NULLs then we
can safely remove the GROUP BY/DISTINCT,
as no result set can be more distinct than an unique key.
-
- RETURN VALUE
+
+ @param table The table to operate on.
+ @param find_func function to iterate over the list and search
+ for a field
+
+ @retval
1 found
+ @retval
0 not found.
*/
@@ -12576,20 +12723,17 @@ list_contains_unique_index(TABLE *table,
}
-/*
+/**
Helper function for list_contains_unique_index.
Find a field reference in a list of ORDER structures.
-
- SYNOPSIS
- find_field_in_order_list ()
- field The field to search for.
- data ORDER *.The list to search in
-
- DESCRIPTION
- Finds a direct reference of the Field in the list.
-
- RETURN VALUE
+ Finds a direct reference of the Field in the list.
+
+ @param field The field to search for.
+ @param data ORDER *.The list to search in
+
+ @retval
1 found
+ @retval
0 not found.
*/
@@ -12612,20 +12756,17 @@ find_field_in_order_list (Field *field, void *data)
}
-/*
+/**
Helper function for list_contains_unique_index.
Find a field reference in a dynamic list of Items.
-
- SYNOPSIS
- find_field_in_item_list ()
- field in The field to search for.
- data in List<Item> *.The list to search in
-
- DESCRIPTION
- Finds a direct reference of the Field in the list.
-
- RETURN VALUE
+ Finds a direct reference of the Field in the list.
+
+ @param[in] field The field to search for.
+ @param[in] data List<Item> *.The list to search in
+
+ @retval
1 found
+ @retval
0 not found.
*/
@@ -12650,15 +12791,22 @@ find_field_in_item_list (Field *field, void *data)
}
-/*
+/**
Test if we can skip the ORDER BY by using an index.
If we can use an index, the JOIN_TAB / tab->select struct
is changed to use the index.
- Return:
- 0 We have to use filesort to do the sorting
- 1 We can use an index.
+ The index must cover all fields in <order>, or it will not be considered.
+
+ @todo
+ - sergeyp: Results of all index merge selects actually are ordered
+ by clustered PK values.
+
+ @retval
+ 0 We have to use filesort to do the sorting
+ @retval
+ 1 We can use an index.
*/
static bool
@@ -12815,12 +12963,6 @@ test_if_skip_sort_order(JOIN_TAB *tab,ORDER *order,ha_rows select_limit,
LINT_INIT(best_key_direction);
LINT_INIT(best_records);
- /*
- filesort() and join cache are usually faster than reading in
- index order and not using join cache
- */
- if (tab->type == JT_ALL && tab->join->tables > tab->join->const_tables + 1)
- DBUG_RETURN(0);
/*
If not used with LIMIT, only use keys if the whole query can be
resolved with a key; This is because filesort() is usually faster than
@@ -12828,6 +12970,12 @@ test_if_skip_sort_order(JOIN_TAB *tab,ORDER *order,ha_rows select_limit,
*/
if (select_limit >= table_records)
{
+ /*
+ filesort() and join cache are usually faster than reading in
+ index order and not using join cache
+ */
+ if (tab->type == JT_ALL && tab->join->tables > tab->join->const_tables + 1)
+ DBUG_RETURN(0);
keys= *table->file->keys_to_use_for_scanning();
keys.merge(table->covering_keys);
@@ -13043,7 +13191,8 @@ check_reverse_order:
select->quick=tmp;
}
}
- else if (tab->ref.key >= 0 && tab->ref.key_parts <= used_key_parts)
+ else if (tab->type != JT_NEXT &&
+ tab->ref.key >= 0 && tab->ref.key_parts <= used_key_parts)
{
/*
SELECT * FROM t1 WHERE a=1 ORDER BY a DESC,b DESC
@@ -13197,11 +13346,11 @@ err:
DBUG_RETURN(-1);
}
-/*
- Add the HAVING criteria to table->select
+#ifdef NOT_YET
+/**
+ Add the HAVING criteria to table->select.
*/
-#ifdef NOT_YET
static bool fix_having(JOIN *join, Item **having)
{
(*having)->update_used_tables(); // Some tables may have been const
@@ -13356,7 +13505,7 @@ static int remove_dup_with_compare(THD *thd, TABLE *table, Field **first_field,
}
if (having && !having->val_int())
{
- if ((error=file->delete_row(record)))
+ if ((error=file->ha_delete_row(record)))
goto err;
error=file->rnd_next(record);
continue;
@@ -13383,7 +13532,7 @@ static int remove_dup_with_compare(THD *thd, TABLE *table, Field **first_field,
}
if (compare_record(table, first_field) == 0)
{
- if ((error=file->delete_row(record)))
+ if ((error=file->ha_delete_row(record)))
goto err;
}
else if (!found)
@@ -13408,9 +13557,11 @@ err:
}
-/*
- Generate a hash index for each row to quickly find duplicate rows
- Note that this will not work on tables with blobs!
+/**
+ Generate a hash index for each row to quickly find duplicate rows.
+
+ @note
+ Note that this will not work on tables with blobs!
*/
static int remove_dup_with_hash_index(THD *thd, TABLE *table,
@@ -13480,7 +13631,7 @@ static int remove_dup_with_hash_index(THD *thd, TABLE *table,
}
if (having && !having->val_int())
{
- if ((error=file->delete_row(record)))
+ if ((error=file->ha_delete_row(record)))
goto err;
continue;
}
@@ -13497,7 +13648,7 @@ static int remove_dup_with_hash_index(THD *thd, TABLE *table,
if (hash_search(&hash, org_key_pos, key_length))
{
/* Duplicated found ; Remove the row */
- if ((error=file->delete_row(record)))
+ if ((error=file->ha_delete_row(record)))
goto err;
}
else
@@ -13847,37 +13998,37 @@ cp_buffer_from_ref(THD *thd, TABLE *table, TABLE_REF *ref)
Group and order functions
*****************************************************************************/
-/*
+/**
Resolve an ORDER BY or GROUP BY column reference.
- SYNOPSIS
- find_order_in_list()
- thd [in] Pointer to current thread structure
- ref_pointer_array [in/out] All select, group and order by fields
- tables [in] List of tables to search in (usually FROM clause)
- order [in] Column reference to be resolved
- fields [in] List of fields to search in (usually SELECT list)
- all_fields [in/out] All select, group and order by fields
- is_group_field [in] True if order is a GROUP field, false if
- ORDER by field
-
- DESCRIPTION
- Given a column reference (represented by 'order') from a GROUP BY or ORDER
- BY clause, find the actual column it represents. If the column being
- resolved is from the GROUP BY clause, the procedure searches the SELECT
- list 'fields' and the columns in the FROM list 'tables'. If 'order' is from
- the ORDER BY clause, only the SELECT list is being searched.
-
- If 'order' is resolved to an Item, then order->item is set to the found
- Item. If there is no item for the found column (that is, it was resolved
- into a table field), order->item is 'fixed' and is added to all_fields and
- ref_pointer_array.
-
- RETURN
+ Given a column reference (represented by 'order') from a GROUP BY or ORDER
+ BY clause, find the actual column it represents. If the column being
+ resolved is from the GROUP BY clause, the procedure searches the SELECT
+ list 'fields' and the columns in the FROM list 'tables'. If 'order' is from
+ the ORDER BY clause, only the SELECT list is being searched.
+
+ If 'order' is resolved to an Item, then order->item is set to the found
+ Item. If there is no item for the found column (that is, it was resolved
+ into a table field), order->item is 'fixed' and is added to all_fields and
+ ref_pointer_array.
+
+ ref_pointer_array and all_fields are updated.
+
+ @param[in] thd Pointer to current thread structure
+ @param[in,out] ref_pointer_array All select, group and order by fields
+ @param[in] tables List of tables to search in (usually
+ FROM clause)
+ @param[in] order Column reference to be resolved
+ @param[in] fields List of fields to search in (usually
+ SELECT list)
+ @param[in,out] all_fields All select, group and order by fields
+ @param[in] is_group_field True if order is a GROUP field, false if
+ ORDER by field
+
+ @retval
FALSE if OK
+ @retval
TRUE if error occurred
-
- ref_pointer_array and all_fields are updated
*/
static bool
@@ -14011,9 +14162,11 @@ find_order_in_list(THD *thd, Item **ref_pointer_array, TABLE_LIST *tables,
}
-/*
- Change order to point at item in select list. If item isn't a number
- and doesn't exits in the select list, add it the the field list.
+/**
+ Change order to point at item in select list.
+
+ If item isn't a number and doesn't exits in the select list, add it the
+ the field list.
*/
int setup_order(THD *thd, Item **ref_pointer_array, TABLE_LIST *tables,
@@ -14030,27 +14183,30 @@ int setup_order(THD *thd, Item **ref_pointer_array, TABLE_LIST *tables,
}
-/*
+/**
Intitialize the GROUP BY list.
- SYNOPSIS
- setup_group()
- thd Thread handler
- ref_pointer_array We store references to all fields that was not in
- 'fields' here.
- fields All fields in the select part. Any item in 'order'
- that is part of these list is replaced by a pointer
- to this fields.
- all_fields Total list of all unique fields used by the select.
- All items in 'order' that was not part of fields will
- be added first to this list.
- order The fields we should do GROUP BY on.
- hidden_group_fields Pointer to flag that is set to 1 if we added any fields
- to all_fields.
-
- RETURN
- 0 ok
- 1 error (probably out of memory)
+ @param thd Thread handler
+ @param ref_pointer_array We store references to all fields that was
+ not in 'fields' here.
+ @param fields All fields in the select part. Any item in
+ 'order' that is part of these list is replaced
+ by a pointer to this fields.
+ @param all_fields Total list of all unique fields used by the
+ select. All items in 'order' that was not part
+ of fields will be added first to this list.
+ @param order The fields we should do GROUP BY on.
+ @param hidden_group_fields Pointer to flag that is set to 1 if we added
+ any fields to all_fields.
+
+ @todo
+ change ER_WRONG_FIELD_WITH_GROUP to more detailed
+ ER_NON_GROUPING_FIELD_USED
+
+ @retval
+ 0 ok
+ @retval
+ 1 error (probably out of memory)
*/
int
@@ -14143,8 +14299,11 @@ next_field:
return 0;
}
-/*
- Add fields with aren't used at start of field list. Return FALSE if ok
+/**
+ Add fields with aren't used at start of field list.
+
+ @return
+ FALSE if ok
*/
static bool
@@ -14174,10 +14333,11 @@ setup_new_fields(THD *thd, List<Item> &fields,
DBUG_RETURN(0);
}
-/*
- Create a group by that consist of all non const fields. Try to use
- the fields in the order given by 'order' to allow one to optimize
- away 'order by'.
+/**
+ Create a group by that consist of all non const fields.
+
+ Try to use the fields in the order given by 'order' to allow one to
+ optimize away 'order by'.
*/
static ORDER *
@@ -14264,9 +14424,9 @@ next_item:
}
-/*****************************************************************************
- Update join with count of the different type of fields
-*****************************************************************************/
+/**
+ Update join with count of the different type of fields.
+*/
void
count_field_types(SELECT_LEX *select_lex, TMP_TABLE_PARAM *param,
@@ -14316,8 +14476,9 @@ count_field_types(SELECT_LEX *select_lex, TMP_TABLE_PARAM *param,
}
-/*
- Return 1 if second is a subpart of first argument
+/**
+ Return 1 if second is a subpart of first argument.
+
If first parts has different direction, change it to second part
(group is sorted like order)
*/
@@ -14335,10 +14496,9 @@ test_if_subpart(ORDER *a,ORDER *b)
return test(!b);
}
-/*
+/**
Return table number if there is only one table in sort order
- and group and order is compatible
- else return 0;
+ and group and order is compatible, else return 0.
*/
static TABLE *
@@ -14369,7 +14529,9 @@ get_sort_by_table(ORDER *a,ORDER *b,TABLE_LIST *tables)
}
- /* calc how big buffer we need for comparing group entries */
+/**
+ calc how big buffer we need for comparing group entries.
+*/
static void
calc_group_buffer(JOIN *join,ORDER *group)
@@ -14440,6 +14602,7 @@ calc_group_buffer(JOIN *join,ORDER *group)
default:
/* This case should never be choosen */
DBUG_ASSERT(0);
+ my_error(ER_OUT_OF_RESOURCES, MYF(0));
join->thd->fatal_error();
}
}
@@ -14453,17 +14616,17 @@ calc_group_buffer(JOIN *join,ORDER *group)
}
-/*
- allocate group fields or take prepared (cached)
+/**
+ allocate group fields or take prepared (cached).
- SYNOPSIS
- make_group_fields()
- main_join - join of current select
- curr_join - current join (join of current select or temporary copy of it)
+ @param main_join join of current select
+ @param curr_join current join (join of current select or temporary copy
+ of it)
- RETURN
- 0 - ok
- 1 - failed
+ @retval
+ 0 ok
+ @retval
+ 1 failed
*/
static bool
@@ -14484,9 +14647,10 @@ make_group_fields(JOIN *main_join, JOIN *curr_join)
}
-/*
- Get a list of buffers for saveing last group
- Groups are saved in reverse order for easyer check loop
+/**
+ Get a list of buffers for saveing last group.
+
+ Groups are saved in reverse order for easyer check loop.
*/
static bool
@@ -14524,27 +14688,33 @@ test_if_group_changed(List<Cached_item> &list)
}
-/*
- Setup copy_fields to save fields at start of new group
+/**
+ Setup copy_fields to save fields at start of new group.
- setup_copy_fields()
- thd - THD pointer
- param - temporary table parameters
- ref_pointer_array - array of pointers to top elements of filed list
- res_selected_fields - new list of items of select item list
- res_all_fields - new list of all items
- elements - number of elements in select item list
- all_fields - all fields list
+ Setup copy_fields to save fields at start of new group
- DESCRIPTION
- Setup copy_fields to save fields at start of new group
- Only FIELD_ITEM:s and FUNC_ITEM:s needs to be saved between groups.
- Change old item_field to use a new field with points at saved fieldvalue
- This function is only called before use of send_fields
-
- RETURN
- 0 - ok
- !=0 - error
+ Only FIELD_ITEM:s and FUNC_ITEM:s needs to be saved between groups.
+ Change old item_field to use a new field with points at saved fieldvalue
+ This function is only called before use of send_fields.
+
+ @param thd THD pointer
+ @param param temporary table parameters
+ @param ref_pointer_array array of pointers to top elements of filed list
+ @param res_selected_fields new list of items of select item list
+ @param res_all_fields new list of all items
+ @param elements number of elements in select item list
+ @param all_fields all fields list
+
+ @todo
+ In most cases this result will be sent to the user.
+ This should be changed to use copy_int or copy_real depending
+ on how the value is to be used: In some cases this may be an
+ argument in a group function, like: IF(ISNULL(col),0,COUNT(*))
+
+ @retval
+ 0 ok
+ @retval
+ !=0 error
*/
bool
@@ -14678,8 +14848,8 @@ err2:
}
-/*
- Make a copy of all simple SELECT'ed items
+/**
+ Make a copy of all simple SELECT'ed items.
This is done at the start of a new group so that we can retrieve
these later when the group changes.
@@ -14701,14 +14871,13 @@ copy_fields(TMP_TABLE_PARAM *param)
}
-/*
- Make an array of pointers to sum_functions to speed up sum_func calculation
-
- SYNOPSIS
- alloc_func_list()
+/**
+ Make an array of pointers to sum_functions to speed up
+ sum_func calculation.
- RETURN
+ @retval
0 ok
+ @retval
1 Error
*/
@@ -14753,18 +14922,17 @@ bool JOIN::alloc_func_list()
}
-/*
- Initialize 'sum_funcs' array with all Item_sum objects
+/**
+ Initialize 'sum_funcs' array with all Item_sum objects.
- SYNOPSIS
- make_sum_func_list()
- field_list All items
- send_fields Items in select list
- before_group_by Set to 1 if this is called before GROUP BY handling
- recompute Set to TRUE if sum_funcs must be recomputed
+ @param field_list All items
+ @param send_fields Items in select list
+ @param before_group_by Set to 1 if this is called before GROUP BY handling
+ @param recompute Set to TRUE if sum_funcs must be recomputed
- RETURN
+ @retval
0 ok
+ @retval
1 error
*/
@@ -14805,21 +14973,21 @@ bool JOIN::make_sum_func_list(List<Item> &field_list, List<Item> &send_fields,
}
-/*
+/**
Change all funcs and sum_funcs to fields in tmp table, and create
new list of all items.
- change_to_use_tmp_fields()
- thd - THD pointer
- ref_pointer_array - array of pointers to top elements of filed list
- res_selected_fields - new list of items of select item list
- res_all_fields - new list of all items
- elements - number of elements in select item list
- all_fields - all fields list
-
- RETURN
- 0 - ok
- !=0 - error
+ @param thd THD pointer
+ @param ref_pointer_array array of pointers to top elements of filed list
+ @param res_selected_fields new list of items of select item list
+ @param res_all_fields new list of all items
+ @param elements number of elements in select item list
+ @param all_fields all fields list
+
+ @retval
+ 0 ok
+ @retval
+ !=0 error
*/
static bool
@@ -14858,6 +15026,9 @@ change_to_use_tmp_fields(THD *thd, Item **ref_pointer_array,
item_field= (Item*) new Item_field(field);
if (!item_field)
DBUG_RETURN(TRUE); // Fatal error
+
+ if (item->real_item()->type() != Item::FIELD_ITEM)
+ field->orig_table= 0;
item_field->name= item->name;
if (item->type() == Item::REF_ITEM)
{
@@ -14893,20 +15064,20 @@ change_to_use_tmp_fields(THD *thd, Item **ref_pointer_array,
}
-/*
- Change all sum_func refs to fields to point at fields in tmp table
- Change all funcs to be fields in tmp table
-
- change_refs_to_tmp_fields()
- thd - THD pointer
- ref_pointer_array - array of pointers to top elements of filed list
- res_selected_fields - new list of items of select item list
- res_all_fields - new list of all items
- elements - number of elements in select item list
- all_fields - all fields list
-
- RETURN
+/**
+ Change all sum_func refs to fields to point at fields in tmp table.
+ Change all funcs to be fields in tmp table.
+
+ @param thd THD pointer
+ @param ref_pointer_array array of pointers to top elements of filed list
+ @param res_selected_fields new list of items of select item list
+ @param res_all_fields new list of all items
+ @param elements number of elements in select item list
+ @param all_fields all fields list
+
+ @retval
0 ok
+ @retval
1 error
*/
@@ -14944,16 +15115,15 @@ change_refs_to_tmp_fields(THD *thd, Item **ref_pointer_array,
******************************************************************************/
-/*
- Call ::setup for all sum functions
+/**
+ Call ::setup for all sum functions.
- SYNOPSIS
- setup_sum_funcs()
- thd thread handler
- func_ptr sum function list
+ @param thd thread handler
+ @param func_ptr sum function list
- RETURN
+ @retval
FALSE ok
+ @retval
TRUE error
*/
@@ -14979,7 +15149,7 @@ init_tmptable_sum_functions(Item_sum **func_ptr)
}
- /* Update record 0 in tmp_table from record 1 */
+/** Update record 0 in tmp_table from record 1. */
static void
update_tmptable_sum_func(Item_sum **func_ptr,
@@ -14991,7 +15161,7 @@ update_tmptable_sum_func(Item_sum **func_ptr,
}
- /* Copy result of sum functions to record in tmp_table */
+/** Copy result of sum functions to record in tmp_table. */
static void
copy_sum_funcs(Item_sum **func_ptr, Item_sum **end_ptr)
@@ -15030,7 +15200,7 @@ update_sum_func(Item_sum **func_ptr)
return 0;
}
- /* Copy result of functions to record in tmp_table */
+/** Copy result of functions to record in tmp_table. */
void
copy_funcs(Item **func_ptr)
@@ -15041,9 +15211,9 @@ copy_funcs(Item **func_ptr)
}
-/*
+/**
Create a condition for a const reference and add this to the
- currenct select for the table
+ currenct select for the table.
*/
static bool add_ref_to_table_cond(THD *thd, JOIN_TAB *join_tab)
@@ -15083,12 +15253,11 @@ static bool add_ref_to_table_cond(THD *thd, JOIN_TAB *join_tab)
}
-/*
+/**
Free joins of subselect of this select.
- free_underlaid_joins()
- thd - THD pointer
- select - pointer to st_select_lex which subselects joins we will free
+ @param thd THD pointer
+ @param select pointer to st_select_lex which subselects joins we will free
*/
void free_underlaid_joins(THD *thd, SELECT_LEX *select)
@@ -15103,41 +15272,43 @@ void free_underlaid_joins(THD *thd, SELECT_LEX *select)
ROLLUP handling
****************************************************************************/
-/*
- Replace occurences of group by fields in an expression by ref items
+/**
+ Replace occurences of group by fields in an expression by ref items.
- SYNOPSIS
- change_group_ref()
- thd reference to the context
- expr expression to make replacement
- group_list list of references to group by items
- changed out: returns 1 if item contains a replaced field item
+ The function replaces occurrences of group by fields in expr
+ by ref objects for these fields unless they are under aggregate
+ functions.
+ The function also corrects value of the the maybe_null attribute
+ for the items of all subexpressions containing group by fields.
- DESCRIPTION
- The function replaces occurrences of group by fields in expr
- by ref objects for these fields unless they are under aggregate
- functions.
- The function also corrects value of the the maybe_null attribute
- for the items of all subexpressions containing group by fields.
+ @b EXAMPLES
+ @code
+ SELECT a+1 FROM t1 GROUP BY a WITH ROLLUP
+ SELECT SUM(a)+a FROM t1 GROUP BY a WITH ROLLUP
+ @endcode
+
+ @b IMPLEMENTATION
- IMPLEMENTATION
The function recursively traverses the tree of the expr expression,
looks for occurrences of the group by fields that are not under
aggregate functions and replaces them for the corresponding ref items.
- NOTES
+ @note
This substitution is needed GROUP BY queries with ROLLUP if
SELECT list contains expressions over group by attributes.
- TODO: Some functions are not null-preserving. For those functions
+ @param thd reference to the context
+ @param expr expression to make replacement
+ @param group_list list of references to group by items
+ @param changed out: returns 1 if item contains a replaced field item
+
+ @todo
+ - TODO: Some functions are not null-preserving. For those functions
updating of the maybe_null attribute is an overkill.
- EXAMPLES
- SELECT a+1 FROM t1 GROUP BY a WITH ROLLUP
- SELECT SUM(a)+a FROM t1 GROUP BY a WITH ROLLUP
-
- RETURN
+ @retval
0 if ok
+ @retval
1 on error
*/
@@ -15186,7 +15357,7 @@ static bool change_group_ref(THD *thd, Item_func *expr, ORDER *group_list,
}
-/* Allocate memory needed for other rollup functions */
+/** Allocate memory needed for other rollup functions. */
bool JOIN::rollup_init()
{
@@ -15289,22 +15460,20 @@ bool JOIN::rollup_init()
}
-/*
- Fill up rollup structures with pointers to fields to use
+/**
+ Fill up rollup structures with pointers to fields to use.
- SYNOPSIS
- rollup_make_fields()
- fields_arg List of all fields (hidden and real ones)
- sel_fields Pointer to selected fields
- func Store here a pointer to all fields
+ Creates copies of item_sum items for each sum level.
- IMPLEMENTATION:
- Creates copies of item_sum items for each sum level
+ @param fields_arg List of all fields (hidden and real ones)
+ @param sel_fields Pointer to selected fields
+ @param func Store here a pointer to all fields
- RETURN
- 0 if ok
- In this case func is pointing to next not used element.
- 1 on error
+ @retval
+ 0 if ok;
+ In this case func is pointing to next not used element.
+ @retval
+ 1 on error
*/
bool JOIN::rollup_make_fields(List<Item> &fields_arg, List<Item> &sel_fields,
@@ -15422,21 +15591,22 @@ bool JOIN::rollup_make_fields(List<Item> &fields_arg, List<Item> &sel_fields,
return 0;
}
-/*
- Send all rollup levels higher than the current one to the client
+/**
+ Send all rollup levels higher than the current one to the client.
- SYNOPSIS:
- rollup_send_data()
- idx Level we are on:
- 0 = Total sum level
- 1 = First group changed (a)
- 2 = Second group changed (a,b)
+ @b SAMPLE
+ @code
+ SELECT a, b, c SUM(b) FROM t1 GROUP BY a,b WITH ROLLUP
+ @endcode
- SAMPLE
- SELECT a, b, c SUM(b) FROM t1 GROUP BY a,b WITH ROLLUP
+ @param idx Level we are on:
+ - 0 = Total sum level
+ - 1 = First group changed (a)
+ - 2 = Second group changed (a,b)
- RETURN
- 0 ok
+ @retval
+ 0 ok
+ @retval
1 If send_data_failed()
*/
@@ -15462,22 +15632,23 @@ int JOIN::rollup_send_data(uint idx)
return 0;
}
-/*
- Write all rollup levels higher than the current one to a temp table
-
- SYNOPSIS:
- rollup_write_data()
- idx Level we are on:
- 0 = Total sum level
- 1 = First group changed (a)
- 2 = Second group changed (a,b)
- table reference to temp table
-
- SAMPLE
- SELECT a, b, SUM(c) FROM t1 GROUP BY a,b WITH ROLLUP
-
- RETURN
- 0 ok
+/**
+ Write all rollup levels higher than the current one to a temp table.
+
+ @b SAMPLE
+ @code
+ SELECT a, b, SUM(c) FROM t1 GROUP BY a,b WITH ROLLUP
+ @endcode
+
+ @param idx Level we are on:
+ - 0 = Total sum level
+ - 1 = First group changed (a)
+ - 2 = Second group changed (a,b)
+ @param table reference to temp table
+
+ @retval
+ 0 ok
+ @retval
1 if write_data_failed()
*/
@@ -15501,7 +15672,7 @@ int JOIN::rollup_write_data(uint idx, TABLE *table_arg)
item->save_in_result_field(1);
}
copy_sum_funcs(sum_funcs_end[i+1], sum_funcs_end[i]);
- if ((write_error= table_arg->file->write_row(table_arg->record[0])))
+ if ((write_error= table_arg->file->ha_write_row(table_arg->record[0])))
{
if (create_myisam_from_heap(thd, table_arg, &tmp_table_param,
write_error, 0))
@@ -15514,12 +15685,9 @@ int JOIN::rollup_write_data(uint idx, TABLE *table_arg)
return 0;
}
-/*
+/**
clear results if there are not rows found for group
(end_send_group/end_write_group)
-
- SYNOPSYS
- JOIN::clear()
*/
void JOIN::clear()
@@ -15535,11 +15703,11 @@ void JOIN::clear()
}
}
-/****************************************************************************
- EXPLAIN handling
+/**
+ EXPLAIN handling.
- Send a description about what how the select will be done to stdout
-****************************************************************************/
+ Send a description about what how the select will be done to stdout.
+*/
static void select_describe(JOIN *join, bool need_tmp_table, bool need_order,
bool distinct,const char *message)
@@ -15826,6 +15994,10 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order,
/* Add "rows" field to item_list. */
if (table_list->schema_table)
{
+ /* in_rows */
+ if (join->thd->lex->describe & DESCRIBE_EXTENDED)
+ item_list.push_back(item_null);
+ /* rows */
item_list.push_back(item_null);
}
else
@@ -15894,7 +16066,8 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order,
{
if (tab->use_quick == 2)
{
- char buf[MAX_KEY/8+1];
+ /* 4 bits per 1 hex digit + terminating '\0' */
+ char buf[MAX_KEY / 4 + 1];
extra.append(STRING_WITH_LEN("; Range checked for each "
"record (index map: 0x"));
extra.append(tab->keys.print(buf));
@@ -16050,18 +16223,16 @@ bool mysql_explain_union(THD *thd, SELECT_LEX_UNIT *unit, select_result *result)
first->options | thd->options | SELECT_DESCRIBE,
result, unit, first);
}
- DBUG_RETURN(res || thd->net.report_error);
+ DBUG_RETURN(res || thd->is_error());
}
-/*
- Print joins from the FROM clause
+/**
+ Print joins from the FROM clause.
- SYNOPSIS
- print_join()
- thd thread handler
- str string where table should be printed
- tables list of tables in join
+ @param thd thread handler
+ @param str string where table should be printed
+ @param tables list of tables in join
*/
static void print_join(THD *thd, String *str, List<TABLE_LIST> *tables)
@@ -16103,12 +16274,47 @@ static void print_join(THD *thd, String *str, List<TABLE_LIST> *tables)
}
-/*
- Print table as it should be in join list
+/**
+ @brief Print an index hint
- SYNOPSIS
- TABLE_LIST::print();
- str string where table should bbe printed
+ @details Prints out the USE|FORCE|IGNORE index hint.
+
+ @param thd the current thread
+ @param[out] str appends the index hint here
+ @param hint what the hint is (as string : "USE INDEX"|
+ "FORCE INDEX"|"IGNORE INDEX")
+ @param hint_length the length of the string in 'hint'
+ @param indexes a list of index names for the hint
+*/
+
+void
+Index_hint::print(THD *thd, String *str)
+{
+ switch (type)
+ {
+ case INDEX_HINT_IGNORE: str->append(STRING_WITH_LEN("IGNORE INDEX")); break;
+ case INDEX_HINT_USE: str->append(STRING_WITH_LEN("USE INDEX")); break;
+ case INDEX_HINT_FORCE: str->append(STRING_WITH_LEN("FORCE INDEX")); break;
+ }
+ str->append (STRING_WITH_LEN(" ("));
+ if (key_name.length)
+ {
+ if (thd && !my_strnncoll(system_charset_info,
+ (const uchar *)key_name.str, key_name.length,
+ (const uchar *)primary_key_name,
+ strlen(primary_key_name)))
+ str->append(primary_key_name);
+ else
+ append_identifier(thd, str, key_name.str, key_name.length);
+ }
+ str->append(')');
+}
+
+
+/**
+ Print table as it should be in join list.
+
+ @param str string where table should bbe printed
*/
void TABLE_LIST::print(THD *thd, String *str)
@@ -16167,8 +16373,33 @@ void TABLE_LIST::print(THD *thd, String *str)
}
if (my_strcasecmp(table_alias_charset, cmp_name, alias))
{
+ char t_alias_buff[MAX_ALIAS_NAME];
+ const char *t_alias= alias;
+
str->append(' ');
- append_identifier(thd, str, alias, strlen(alias));
+ if (lower_case_table_names== 1)
+ {
+ if (alias && alias[0])
+ {
+ strmov(t_alias_buff, alias);
+ my_casedn_str(files_charset_info, t_alias_buff);
+ t_alias= t_alias_buff;
+ }
+ }
+
+ append_identifier(thd, str, t_alias, strlen(t_alias));
+ }
+
+ if (index_hints)
+ {
+ List_iterator<Index_hint> it(*index_hints);
+ Index_hint *hint;
+
+ while ((hint= it++))
+ {
+ str->append (STRING_WITH_LEN(" "));
+ hint->print (thd, str);
+ }
}
}
}
@@ -16294,16 +16525,15 @@ void st_select_lex::print(THD *thd, String *str)
}
-/*
- change select_result object of JOIN
+/**
+ change select_result object of JOIN.
- SYNOPSIS
- JOIN::change_result()
- res new select_result object
+ @param res new select_result object
- RETURN
- FALSE - OK
- TRUE - error
+ @retval
+ FALSE OK
+ @retval
+ TRUE error
*/
bool JOIN::change_result(select_result *res)
diff --git a/sql/sql_select.h b/sql/sql_select.h
index efa92432e2b..dbeace2ffa4 100644
--- a/sql/sql_select.h
+++ b/sql/sql_select.h
@@ -14,7 +14,12 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-/* classes to use when handling where clause */
+/**
+ @file
+
+ @brief
+ classes to use when handling where clause
+*/
#ifdef USE_PRAGMA_INTERFACE
#pragma interface /* gcc class implementation */
@@ -25,12 +30,12 @@
typedef struct keyuse_t {
TABLE *table;
- Item *val; /* or value if no field */
+ Item *val; /**< or value if no field */
table_map used_tables;
uint key, keypart, optimize;
key_part_map keypart_map;
ha_rows ref_table_rows;
- /*
+ /**
If true, the comparison this value was created from will not be
satisfied if val has NULL 'value'.
*/
@@ -53,13 +58,13 @@ class store_key;
typedef struct st_table_ref
{
bool key_err;
- uint key_parts; // num of ...
- uint key_length; // length of key_buff
- int key; // key no
- uchar *key_buff; // value to look for with key
- uchar *key_buff2; // key_buff+key_length
+ uint key_parts; ///< num of ...
+ uint key_length; ///< length of key_buff
+ int key; ///< key no
+ uchar *key_buff; ///< value to look for with key
+ uchar *key_buff2; ///< key_buff+key_length
store_key **key_copy; //
- Item **items; // val()'s for each keypart
+ Item **items; ///< val()'s for each keypart
/*
Array of pointers to trigger variables. Some/all of the pointers may be
NULL. The ref access can be used iff
@@ -72,18 +77,18 @@ typedef struct st_table_ref
underlying conditions is switched off (see subquery code for more details)
*/
bool **cond_guards;
- /*
+ /**
(null_rejecting & (1<<i)) means the condition is '=' and no matching
rows will be produced if items[i] IS NULL (see add_not_null_conds())
*/
key_part_map null_rejecting;
- table_map depend_map; // Table depends on these tables.
+ table_map depend_map; ///< Table depends on these tables.
/* null byte position in the key_buf. Used for REF_OR_NULL optimization */
uchar *null_ref_key;
} TABLE_REF;
-/*
+/**
CACHE_FIELD and JOIN_CACHE is used on full join to cache records in outer
table
*/
@@ -136,18 +141,18 @@ Next_select_func setup_end_select_func(JOIN *join);
typedef struct st_join_table {
st_join_table() {} /* Remove gcc warning */
TABLE *table;
- KEYUSE *keyuse; /* pointer to first used key */
+ KEYUSE *keyuse; /**< pointer to first used key */
SQL_SELECT *select;
COND *select_cond;
QUICK_SELECT_I *quick;
- Item **on_expr_ref; /* pointer to the associated on expression */
- COND_EQUAL *cond_equal; /* multiple equalities for the on expression */
- st_join_table *first_inner; /* first inner table for including outerjoin */
- bool found; /* true after all matches or null complement */
- bool not_null_compl;/* true before null complement is added */
- st_join_table *last_inner; /* last table table for embedding outer join */
- st_join_table *first_upper; /* first inner table for embedding outer join */
- st_join_table *first_unmatched; /* used for optimization purposes only */
+ Item **on_expr_ref; /**< pointer to the associated on expression */
+ COND_EQUAL *cond_equal; /**< multiple equalities for the on expression */
+ st_join_table *first_inner; /**< first inner table for including outerjoin */
+ bool found; /**< true after all matches or null complement */
+ bool not_null_compl;/**< true before null complement is added */
+ st_join_table *last_inner; /**< last table table for embedding outer join */
+ st_join_table *first_upper; /**< first inner table for embedding outer join */
+ st_join_table *first_unmatched; /**< used for optimization purposes only */
/* Special content for EXPLAIN 'Extra' column or NULL if none */
const char *info;
@@ -168,10 +173,10 @@ typedef struct st_join_table {
Read_record_func save_read_first_record;/* to save read_first_record */
int (*save_read_record) (READ_RECORD *);/* to save read_record.read_record */
double worst_seeks;
- key_map const_keys; /* Keys with constant part */
- key_map checked_keys; /* Keys checked in find_best */
+ key_map const_keys; /**< Keys with constant part */
+ key_map checked_keys; /**< Keys checked in find_best */
key_map needed_reg;
- key_map keys; /* all keys with can be used */
+ key_map keys; /**< all keys with can be used */
/* Either #rows in the table or 1 for const table. */
ha_rows records;
@@ -189,7 +194,7 @@ typedef struct st_join_table {
table_map dependent,key_dependent;
uint use_quick,index;
- uint status; // Save status for cache
+ uint status; ///< Save status for cache
uint used_fields,used_fieldlength,used_blobs;
enum join_type type;
bool cached_eq_ref_table,eq_ref_table,not_used_in_distinct;
@@ -203,7 +208,7 @@ typedef struct st_join_table {
TABLE_REF ref;
JOIN_CACHE cache;
JOIN *join;
- /* Bitmap of nested joins this table is part of */
+ /** Bitmap of nested joins this table is part of */
nested_join_map embedding_map;
void cleanup();
@@ -220,7 +225,7 @@ enum_nested_loop_state sub_select_cache(JOIN *join, JOIN_TAB *join_tab, bool
enum_nested_loop_state sub_select(JOIN *join,JOIN_TAB *join_tab, bool
end_of_records);
-/*
+/**
Information about a position of table within a join order. Used in join
optimization.
*/
@@ -264,25 +269,25 @@ typedef struct st_rollup
class JOIN :public Sql_alloc
{
- JOIN(const JOIN &rhs); /* not implemented */
- JOIN& operator=(const JOIN &rhs); /* not implemented */
+ JOIN(const JOIN &rhs); /**< not implemented */
+ JOIN& operator=(const JOIN &rhs); /**< not implemented */
public:
JOIN_TAB *join_tab,**best_ref;
- JOIN_TAB **map2table; // mapping between table indexes and JOIN_TABs
- JOIN_TAB *join_tab_save; // saved join_tab for subquery reexecution
+ JOIN_TAB **map2table; ///< mapping between table indexes and JOIN_TABs
+ JOIN_TAB *join_tab_save; ///< saved join_tab for subquery reexecution
TABLE **table,**all_tables,*sort_by_table;
uint tables,const_tables;
uint send_group_parts;
bool sort_and_group,first_record,full_join,group, no_field_update;
bool do_send_rows;
- /*
+ /**
TRUE when we want to resume nested loop iterations when
fetching data from a cursor
*/
bool resume_nested_loop;
table_map const_table_map,found_const_table_map,outer_join;
ha_rows send_records,found_records,examined_rows,row_limit, select_limit;
- /*
+ /**
Used to fetch no more than given amount of rows per one
fetch operation of server side cursor.
The value is checked in end_send and end_send_group in fashion, similar
@@ -294,7 +299,7 @@ public:
ha_rows fetch_limit;
POSITION positions[MAX_TABLES+1],best_positions[MAX_TABLES+1];
- /*
+ /* *
Bitmap of nested joins embedding the position at the end of the current
partial join (valid only during join optimizer run).
*/
@@ -304,25 +309,25 @@ public:
List<Item> *fields;
List<Cached_item> group_fields, group_fields_cache;
TABLE *tmp_table;
- // used to store 2 possible tmp table of SELECT
+ /// used to store 2 possible tmp table of SELECT
TABLE *exec_tmp_table1, *exec_tmp_table2;
THD *thd;
Item_sum **sum_funcs, ***sum_funcs_end;
- /* second copy of sumfuncs (for queries with 2 temporary tables */
+ /** second copy of sumfuncs (for queries with 2 temporary tables */
Item_sum **sum_funcs2, ***sum_funcs_end2;
Procedure *procedure;
Item *having;
- Item *tmp_having; // To store having when processed temporary table
- Item *having_history; // Store having for explain
+ Item *tmp_having; ///< To store having when processed temporary table
+ Item *having_history; ///< Store having for explain
ulonglong select_options;
select_result *result;
TMP_TABLE_PARAM tmp_table_param;
MYSQL_LOCK *lock;
- // unit structure (with global parameters) for this select
+ /// unit structure (with global parameters) for this select
SELECT_LEX_UNIT *unit;
- // select that processed
+ /// select that processed
SELECT_LEX *select_lex;
- /*
+ /**
TRUE <=> optimizer must not mark any table as a constant table.
This is needed for subqueries in form "a IN (SELECT .. UNION SELECT ..):
when we optimize the select that reads the results of the union from a
@@ -331,11 +336,11 @@ public:
*/
bool no_const_tables;
- JOIN *tmp_join; // copy of this JOIN to be used with temporary tables
- ROLLUP rollup; // Used with rollup
+ JOIN *tmp_join; ///< copy of this JOIN to be used with temporary tables
+ ROLLUP rollup; ///< Used with rollup
- bool select_distinct; // Set if SELECT DISTINCT
- /*
+ bool select_distinct; ///< Set if SELECT DISTINCT
+ /**
If we have the GROUP BY statement in the query,
but the group_list was emptied by optimizer, this
flag is TRUE.
@@ -350,42 +355,42 @@ public:
It's also set if ORDER/GROUP BY is empty.
*/
bool simple_order, simple_group;
- /*
+ /**
Is set only in case if we have a GROUP BY clause
and no ORDER BY after constant elimination of 'order'.
*/
bool no_order;
- /* Is set if we have a GROUP BY and we have ORDER BY on a constant. */
+ /** Is set if we have a GROUP BY and we have ORDER BY on a constant. */
bool skip_sort_order;
bool need_tmp, hidden_group_fields;
DYNAMIC_ARRAY keyuse;
Item::cond_result cond_value, having_value;
- List<Item> all_fields; // to store all fields that used in query
- //Above list changed to use temporary table
+ List<Item> all_fields; ///< to store all fields that used in query
+ ///Above list changed to use temporary table
List<Item> tmp_all_fields1, tmp_all_fields2, tmp_all_fields3;
- //Part, shared with list above, emulate following list
+ ///Part, shared with list above, emulate following list
List<Item> tmp_fields_list1, tmp_fields_list2, tmp_fields_list3;
- List<Item> &fields_list; // hold field list passed to mysql_select
+ List<Item> &fields_list; ///< hold field list passed to mysql_select
List<Item> procedure_fields_list;
int error;
ORDER *order, *group_list, *proc_param; //hold parameters of mysql_select
COND *conds; // ---"---
Item *conds_history; // store WHERE for explain
- TABLE_LIST *tables_list; //hold 'tables' parameter of mysql_select
- List<TABLE_LIST> *join_list; // list of joined tables in reverse order
+ TABLE_LIST *tables_list; ///<hold 'tables' parameter of mysql_select
+ List<TABLE_LIST> *join_list; ///< list of joined tables in reverse order
COND_EQUAL *cond_equal;
- SQL_SELECT *select; //created in optimisation phase
- JOIN_TAB *return_tab; //used only for outer joins
- Item **ref_pointer_array; //used pointer reference for this select
+ SQL_SELECT *select; ///<created in optimisation phase
+ JOIN_TAB *return_tab; ///<used only for outer joins
+ Item **ref_pointer_array; ///<used pointer reference for this select
// Copy of above to be used with different lists
Item **items0, **items1, **items2, **items3, **current_ref_pointer_array;
- uint ref_pointer_array_size; // size of above in bytes
- const char *zero_result_cause; // not 0 if exec must return zero result
+ uint ref_pointer_array_size; ///< size of above in bytes
+ const char *zero_result_cause; ///< not 0 if exec must return zero result
- bool union_part; // this subselect is part of union
- bool optimized; // flag to avoid double optimization in EXPLAIN
+ bool union_part; ///< this subselect is part of union
+ bool optimized; ///< flag to avoid double optimization in EXPLAIN
/*
storage for caching buffers allocated during query execution.
@@ -494,14 +499,14 @@ public:
int rollup_send_data(uint idx);
int rollup_write_data(uint idx, TABLE *table);
void remove_subq_pushed_predicates(Item **where);
- /*
+ /**
Release memory and, if possible, the open tables held by this execution
plan (and nested plans). It's used to release some tables before
the end of execution in order to increase concurrency and reduce
memory consumption.
*/
void join_free();
- /* Cleanup this JOIN, possibly for reuse */
+ /** Cleanup this JOIN, possibly for reuse */
void cleanup(bool full);
void clear();
bool save_join_tab();
@@ -556,7 +561,7 @@ int opt_sum_query(TABLE_LIST *tables, List<Item> &all_fields,COND *conds);
/* from sql_delete.cc, used by opt_range.cc */
extern "C" int refpos_order_cmp(void* arg, const void *a,const void *b);
-/* class to copying an field/item to a key struct */
+/** class to copying an field/item to a key struct */
class store_key :public Sql_alloc
{
@@ -566,9 +571,13 @@ public:
store_key(THD *thd, Field *field_arg, uchar *ptr, uchar *null, uint length)
:null_key(0), null_ptr(null), err(0)
{
- if (field_arg->type() == MYSQL_TYPE_BLOB)
+ if (field_arg->type() == MYSQL_TYPE_BLOB
+ || field_arg->type() == MYSQL_TYPE_GEOMETRY)
{
- /* Key segments are always packed with a 2 byte length prefix */
+ /*
+ Key segments are always packed with a 2 byte length prefix.
+ See mi_rkey for details.
+ */
to_field= new Field_varstring(ptr, length, 2, null, 1,
Field::NONE, field_arg->field_name,
field_arg->table->s, field_arg->charset());
@@ -578,7 +587,7 @@ public:
to_field=field_arg->new_key_field(thd->mem_root, field_arg->table,
ptr, null, 1);
}
- virtual ~store_key() {} /* Not actually needed */
+ virtual ~store_key() {} /** Not actually needed */
virtual const char *name() const=0;
/**
@@ -590,14 +599,17 @@ public:
enum store_key_result copy()
{
enum store_key_result result;
- enum_check_fields saved_count_cuted_fields=
- to_field->table->in_use->count_cuted_fields;
+ THD *thd= to_field->table->in_use;
+ enum_check_fields saved_count_cuted_fields= thd->count_cuted_fields;
+ ulong sql_mode= thd->variables.sql_mode;
+ thd->variables.sql_mode&= ~(MODE_NO_ZERO_IN_DATE | MODE_NO_ZERO_DATE);
- to_field->table->in_use->count_cuted_fields= CHECK_FIELD_IGNORE;
+ thd->count_cuted_fields= CHECK_FIELD_IGNORE;
result= copy_inner();
- to_field->table->in_use->count_cuted_fields= saved_count_cuted_fields;
+ thd->count_cuted_fields= saved_count_cuted_fields;
+ thd->variables.sql_mode= sql_mode;
return result;
}
diff --git a/sql/sql_servers.cc b/sql/sql_servers.cc
index a780c561ffe..8203ca92eed 100644
--- a/sql/sql_servers.cc
+++ b/sql/sql_servers.cc
@@ -140,6 +140,7 @@ bool servers_init(bool dont_read_servers_table)
DBUG_RETURN(TRUE);
thd->thread_stack= (char*) &thd;
thd->store_globals();
+ lex_start(thd);
/*
It is safe to call servers_reload() since servers_* arrays and hashes which
will be freed there are global static objects and thus are initialized
@@ -238,7 +239,7 @@ bool servers_reload(THD *thd)
if (simple_open_n_lock_tables(thd, tables))
{
sql_print_error("Can't open and lock privilege tables: %s",
- thd->net.last_error);
+ thd->main_da.message());
goto end;
}
@@ -289,7 +290,7 @@ get_server_from_table_to_cache(TABLE *table)
{
/* alloc a server struct */
char *ptr;
- char *blank= (char*)"";
+ char * const blank= (char*)"";
FOREIGN_SERVER *server= (FOREIGN_SERVER *)alloc_root(&mem,
sizeof(FOREIGN_SERVER));
DBUG_ENTER("get_server_from_table_to_cache");
@@ -312,7 +313,7 @@ get_server_from_table_to_cache(TABLE *table)
server->port= server->sport ? atoi(server->sport) : 0;
ptr= get_field(&mem, table->field[6]);
- server->socket= ptr && strlen(ptr) ? ptr : NULL;
+ server->socket= ptr && strlen(ptr) ? ptr : blank;
ptr= get_field(&mem, table->field[7]);
server->scheme= ptr ? ptr : blank;
ptr= get_field(&mem, table->field[8]);
diff --git a/sql/sql_show.cc b/sql/sql_show.cc
index f7813b73089..ee0a6d3c2ab 100644
--- a/sql/sql_show.cc
+++ b/sql/sql_show.cc
@@ -29,6 +29,8 @@
#include "event_data_objects.h"
#include <my_dir.h>
+#define STR_OR_NIL(S) ((S) ? (S) : "<nil>")
+
#ifdef WITH_PARTITION_STORAGE_ENGINE
#include "ha_partition.h"
#endif
@@ -576,7 +578,8 @@ mysqld_show_create(THD *thd, TABLE_LIST *table_list)
/* Only one table for now, but VIEW can involve several tables */
if (open_normal_and_derived_tables(thd, table_list, 0))
{
- if (!table_list->view || thd->net.last_errno != ER_VIEW_INVALID)
+ if (!table_list->view ||
+ thd->is_error() && thd->main_da.sql_errno() != ER_VIEW_INVALID)
DBUG_RETURN(TRUE);
/*
@@ -784,10 +787,9 @@ mysqld_list_fields(THD *thd, TABLE_LIST *table_list, const char *wild)
}
restore_record(table, s->default_values); // Get empty record
table->use_all_columns();
- if (thd->protocol->send_fields(&field_list, Protocol::SEND_DEFAULTS |
- Protocol::SEND_EOF))
+ if (thd->protocol->send_fields(&field_list, Protocol::SEND_DEFAULTS))
DBUG_VOID_RETURN;
- thd->protocol->flush();
+ send_eof(thd);
DBUG_VOID_RETURN;
}
@@ -2269,10 +2271,12 @@ int make_table_list(THD *thd, SELECT_LEX *sel,
@param[in] table I_S table
@param[in, out] lookup_field_vals Struct which holds lookup values
- @return void
+ @return
+ 0 success
+ 1 error, there can be no matching records for the condition
*/
-void get_lookup_value(THD *thd, Item_func *item_func,
+bool get_lookup_value(THD *thd, Item_func *item_func,
TABLE_LIST *table,
LOOKUP_FIELD_VALUES *lookup_field_vals)
{
@@ -2305,13 +2309,17 @@ void get_lookup_value(THD *thd, Item_func *item_func,
idx_val= 0;
}
else
- return;
+ return 0;
item_field= (Item_field*) item_func->arguments()[idx_field];
if (table->table != item_field->field->table)
- return;
+ return 0;
tmp_str= item_func->arguments()[idx_val]->val_str(&str_buff);
+ /* impossible value */
+ if (!tmp_str)
+ return 1;
+
/* Lookup value is database name */
if (!cs->coll->strnncollsp(cs, (uchar *) field_name1, strlen(field_name1),
(uchar *) item_field->field_name,
@@ -2330,7 +2338,7 @@ void get_lookup_value(THD *thd, Item_func *item_func,
tmp_str->length(), FALSE);
}
}
- return;
+ return 0;
}
@@ -2346,14 +2354,16 @@ void get_lookup_value(THD *thd, Item_func *item_func,
@param[in] table I_S table
@param[in, out] lookup_field_vals Struct which holds lookup values
- @return void
+ @return
+ 0 success
+ 1 error, there can be no matching records for the condition
*/
-void calc_lookup_values_from_cond(THD *thd, COND *cond, TABLE_LIST *table,
+bool calc_lookup_values_from_cond(THD *thd, COND *cond, TABLE_LIST *table,
LOOKUP_FIELD_VALUES *lookup_field_vals)
{
if (!cond)
- return;
+ return 0;
if (cond->type() == Item::COND_ITEM)
{
@@ -2364,16 +2374,23 @@ void calc_lookup_values_from_cond(THD *thd, COND *cond, TABLE_LIST *table,
while ((item= li++))
{
if (item->type() == Item::FUNC_ITEM)
- get_lookup_value(thd, (Item_func*)item, table, lookup_field_vals);
+ {
+ if (get_lookup_value(thd, (Item_func*)item, table, lookup_field_vals))
+ return 1;
+ }
else
- calc_lookup_values_from_cond(thd, item, table, lookup_field_vals);
+ {
+ if (calc_lookup_values_from_cond(thd, item, table, lookup_field_vals))
+ return 1;
+ }
}
}
- return;
+ return 0;
}
- else if (cond->type() == Item::FUNC_ITEM)
- get_lookup_value(thd, (Item_func*) cond, table, lookup_field_vals);
- return;
+ else if (cond->type() == Item::FUNC_ITEM &&
+ get_lookup_value(thd, (Item_func*) cond, table, lookup_field_vals))
+ return 1;
+ return 0;
}
@@ -2486,10 +2503,12 @@ static COND * make_cond_for_info_schema(COND *cond, TABLE_LIST *table)
@param[in] tables I_S table
@param[in, out] lookup_field_values Struct which holds lookup values
- @return void
+ @return
+ 0 success
+ 1 error, there can be no matching records for the condition
*/
-void get_lookup_field_values(THD *thd, COND *cond, TABLE_LIST *tables,
+bool get_lookup_field_values(THD *thd, COND *cond, TABLE_LIST *tables,
LOOKUP_FIELD_VALUES *lookup_field_values)
{
LEX *lex= thd->lex;
@@ -2503,7 +2522,7 @@ void get_lookup_field_values(THD *thd, COND *cond, TABLE_LIST *tables,
lookup_field_values->db_value.length= strlen(wild);
lookup_field_values->wild_db_value= 1;
}
- break;
+ return 0;
case SQLCOM_SHOW_TABLES:
case SQLCOM_SHOW_TABLE_STATUS:
case SQLCOM_SHOW_TRIGGERS:
@@ -2516,14 +2535,13 @@ void get_lookup_field_values(THD *thd, COND *cond, TABLE_LIST *tables,
lookup_field_values->table_value.length= strlen(wild);
lookup_field_values->wild_table_value= 1;
}
- break;
+ return 0;
default:
/*
The "default" is for queries over I_S.
All previous cases handle SHOW commands.
*/
- calc_lookup_values_from_cond(thd, cond, tables, lookup_field_values);
- break;
+ return calc_lookup_values_from_cond(thd, cond, tables, lookup_field_values);
}
}
@@ -2901,7 +2919,7 @@ static int fill_schema_table_names(THD *thd, TABLE *table,
default:
DBUG_ASSERT(0);
}
- if (thd->net.last_errno == ER_NO_SUCH_TABLE)
+ if (thd->is_error() && thd->main_da.sql_errno() == ER_NO_SUCH_TABLE)
{
thd->clear_error();
return 0;
@@ -3113,10 +3131,14 @@ int get_all_tables(THD *thd, TABLE_LIST *tables, COND *cond)
}
schema_table_idx= get_schema_table_idx(schema_table);
- get_lookup_field_values(thd, cond, tables, &lookup_field_vals);
+ if (get_lookup_field_values(thd, cond, tables, &lookup_field_vals))
+ {
+ error= 0;
+ goto err;
+ }
DBUG_PRINT("INDEX VALUES",("db_name='%s', table_name='%s'",
- lookup_field_vals.db_value.str,
- lookup_field_vals.table_value.str));
+ STR_OR_NIL(lookup_field_vals.db_value.str),
+ STR_OR_NIL(lookup_field_vals.table_value.str)));
if (!lookup_field_vals.wild_db_value && !lookup_field_vals.wild_table_value)
{
@@ -3245,8 +3267,16 @@ int get_all_tables(THD *thd, TABLE_LIST *tables, COND *cond)
res= open_normal_and_derived_tables(thd, show_table_list,
MYSQL_LOCK_IGNORE_FLUSH);
lex->sql_command= save_sql_command;
-
- if (thd->net.last_errno == ER_NO_SUCH_TABLE)
+ /*
+ XXX: show_table_list has a flag i_is_requested,
+ and when it's set, open_normal_and_derived_tables()
+ can return an error without setting an error message
+ in THD, which is a hack. This is why we have to
+ check for res, then for thd->is_error() only then
+ for thd->main_da.sql_errno().
+ */
+ if (res && thd->is_error() &&
+ thd->main_da.sql_errno() == ER_NO_SUCH_TABLE)
{
/*
Hide error for not existing table.
@@ -3328,7 +3358,8 @@ int fill_schema_schemata(THD *thd, TABLE_LIST *tables, COND *cond)
#endif
DBUG_ENTER("fill_schema_shemata");
- get_lookup_field_values(thd, cond, tables, &lookup_field_vals);
+ if (get_lookup_field_values(thd, cond, tables, &lookup_field_vals))
+ DBUG_RETURN(0);
DBUG_PRINT("INDEX VALUES",("db_name='%s', table_name='%s'",
lookup_field_vals.db_value.str,
lookup_field_vals.table_value.str));
@@ -3339,7 +3370,8 @@ int fill_schema_schemata(THD *thd, TABLE_LIST *tables, COND *cond)
/*
If we have lookup db value we should check that the database exists
*/
- if(lookup_field_vals.db_value.str && !lookup_field_vals.wild_db_value)
+ if(lookup_field_vals.db_value.str && !lookup_field_vals.wild_db_value &&
+ !with_i_schema)
{
char path[FN_REFLEN+16];
uint path_len;
@@ -3398,7 +3430,7 @@ static int get_schema_tables_record(THD *thd, TABLE_LIST *tables,
/*
there was errors during opening tables
*/
- const char *error= thd->net.last_error;
+ const char *error= thd->main_da.message();
if (tables->view)
table->field[3]->store(STRING_WITH_LEN("VIEW"), cs);
else if (tables->schema_table)
@@ -3486,6 +3518,10 @@ static int get_schema_tables_record(THD *thd, TABLE_LIST *tables,
(ptr == option_buff ? 0 :
(uint) (ptr-option_buff)-1), cs);
+ tmp_buff= (share->table_charset ?
+ share->table_charset->name : "default");
+ table->field[17]->store(tmp_buff, strlen(tmp_buff), cs);
+
if (share->comment.str)
table->field[20]->store(share->comment.str, share->comment.length, cs);
@@ -3563,9 +3599,6 @@ static int get_schema_tables_record(THD *thd, TABLE_LIST *tables,
table->field[16]->store_time(&time, MYSQL_TIMESTAMP_DATETIME);
table->field[16]->set_notnull();
}
- tmp_buff= (share->table_charset ?
- share->table_charset->name : "default");
- table->field[17]->store(tmp_buff, strlen(tmp_buff), cs);
if (file->ha_table_flags() & (ulong) HA_HAS_CHECKSUM)
{
table->field[18]->store((longlong) file->checksum(), TRUE);
@@ -3599,7 +3632,7 @@ static int get_schema_column_record(THD *thd, TABLE_LIST *tables,
rather than in SHOW COLUMNS
*/
push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
- thd->net.last_errno, thd->net.last_error);
+ thd->main_da.sql_errno(), thd->main_da.message());
thd->clear_error();
res= 0;
}
@@ -3754,8 +3787,11 @@ static int get_schema_column_record(THD *thd, TABLE_LIST *tables,
end= tmp;
if (field->unireg_check == Field::NEXT_NUMBER)
- end=strmov(tmp,"auto_increment");
- table->field[16]->store(tmp, (uint) (end-tmp), cs);
+ table->field[16]->store(STRING_WITH_LEN("auto_increment"), cs);
+ if (show_table->timestamp_field == field &&
+ field->unireg_check != Field::TIMESTAMP_DN_FIELD)
+ table->field[16]->store(STRING_WITH_LEN("on update CURRENT_TIMESTAMP"),
+ cs);
table->field[18]->store(field->comment.str, field->comment.length, cs);
if (schema_table_store_record(thd, table))
@@ -4070,9 +4106,9 @@ static int get_schema_stat_record(THD *thd, TABLE_LIST *tables,
I.e. we are in SELECT FROM INFORMATION_SCHEMA.STATISTICS
rather than in SHOW KEYS
*/
- if (thd->net.last_errno)
+ if (thd->is_error())
push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
- thd->net.last_errno, thd->net.last_error);
+ thd->main_da.sql_errno(), thd->main_da.message());
thd->clear_error();
res= 0;
}
@@ -4262,9 +4298,9 @@ static int get_schema_views_record(THD *thd, TABLE_LIST *tables,
if (schema_table_store_record(thd, table))
DBUG_RETURN(1);
- if (res && thd->net.last_errno)
+ if (res && thd->is_error())
push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
- thd->net.last_errno, thd->net.last_error);
+ thd->main_da.sql_errno(), thd->main_da.message());
}
if (res)
thd->clear_error();
@@ -4295,9 +4331,9 @@ static int get_schema_constraints_record(THD *thd, TABLE_LIST *tables,
DBUG_ENTER("get_schema_constraints_record");
if (res)
{
- if (thd->net.last_errno)
+ if (thd->is_error())
push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
- thd->net.last_errno, thd->net.last_error);
+ thd->main_da.sql_errno(), thd->main_da.message());
thd->clear_error();
DBUG_RETURN(0);
}
@@ -4400,9 +4436,9 @@ static int get_schema_triggers_record(THD *thd, TABLE_LIST *tables,
*/
if (res)
{
- if (thd->net.last_errno)
+ if (thd->is_error())
push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
- thd->net.last_errno, thd->net.last_error);
+ thd->main_da.sql_errno(), thd->main_da.message());
thd->clear_error();
DBUG_RETURN(0);
}
@@ -4483,9 +4519,9 @@ static int get_schema_key_column_usage_record(THD *thd,
DBUG_ENTER("get_schema_key_column_usage_record");
if (res)
{
- if (thd->net.last_errno)
+ if (thd->is_error())
push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
- thd->net.last_errno, thd->net.last_error);
+ thd->main_da.sql_errno(), thd->main_da.message());
thd->clear_error();
DBUG_RETURN(0);
}
@@ -4678,9 +4714,9 @@ static int get_schema_partitions_record(THD *thd, TABLE_LIST *tables,
if (res)
{
- if (thd->net.last_errno)
+ if (thd->is_error())
push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
- thd->net.last_errno, thd->net.last_error);
+ thd->main_da.sql_errno(), thd->main_da.message());
thd->clear_error();
DBUG_RETURN(0);
}
@@ -4723,6 +4759,7 @@ static int get_schema_partitions_record(THD *thd, TABLE_LIST *tables,
break;
default:
DBUG_ASSERT(0);
+ my_error(ER_OUT_OF_RESOURCES, MYF(0));
current_thd->fatal_error();
DBUG_RETURN(1);
}
@@ -5215,9 +5252,9 @@ get_referential_constraints_record(THD *thd, TABLE_LIST *tables,
if (res)
{
- if (thd->net.last_errno)
+ if (thd->is_error())
push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
- thd->net.last_errno, thd->net.last_error);
+ thd->main_da.sql_errno(), thd->main_da.message());
thd->clear_error();
DBUG_RETURN(0);
}
@@ -5338,17 +5375,24 @@ ST_SCHEMA_TABLE *get_schema_table(enum enum_schema_tables schema_table_idx)
}
-/*
- Create information_schema table using schema_table data
+/**
+ Create information_schema table using schema_table data.
- SYNOPSIS
- create_schema_table()
+ @note
+ For MYSQL_TYPE_DECIMAL fields only, the field_length member has encoded
+ into it two numbers, based on modulus of base-10 numbers. In the ones
+ position is the number of decimals. Tens position is unused. In the
+ hundreds and thousands position is a two-digit decimal number representing
+ length. Encode this value with (decimals*100)+length , where
+ 0<decimals<10 and 0<=length<100 .
+
+ @param
thd thread handler
+ @param
schema_table pointer to 'shema_tables' element
- RETURN
- # Pointer to created table
- 0 Can't create table
+ @retval \# Pointer to created table
+ @retval NULL Can't create table
*/
TABLE *create_schema_table(THD *thd, TABLE_LIST *table_list)
@@ -5827,7 +5871,7 @@ bool get_schema_tables_result(JOIN *join,
{
table_list->table->file->extra(HA_EXTRA_NO_CACHE);
table_list->table->file->extra(HA_EXTRA_RESET_STATE);
- table_list->table->file->delete_all_rows();
+ table_list->table->file->ha_delete_all_rows();
free_io_cache(table_list->table);
filesort_free_buffers(table_list->table,1);
table_list->table->null_row= 0;
@@ -5958,7 +6002,7 @@ ST_FIELD_INFO columns_fields_info[]=
{"COLLATION_NAME", 64, MYSQL_TYPE_STRING, 0, 1, "Collation", OPEN_FRM_ONLY},
{"COLUMN_TYPE", 65535, MYSQL_TYPE_STRING, 0, 0, "Type", OPEN_FRM_ONLY},
{"COLUMN_KEY", 3, MYSQL_TYPE_STRING, 0, 0, "Key", OPEN_FRM_ONLY},
- {"EXTRA", 20, MYSQL_TYPE_STRING, 0, 0, "Extra", OPEN_FRM_ONLY},
+ {"EXTRA", 27, MYSQL_TYPE_STRING, 0, 0, "Extra", OPEN_FRM_ONLY},
{"PRIVILEGES", 80, MYSQL_TYPE_STRING, 0, 0, "Privileges", OPEN_FRM_ONLY},
{"COLUMN_COMMENT", 255, MYSQL_TYPE_STRING, 0, 0, "Comment", OPEN_FRM_ONLY},
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0, SKIP_OPEN_TABLE}
@@ -6491,6 +6535,9 @@ ST_SCHEMA_TABLE schema_tables[]=
fill_plugins, make_old_format, 0, -1, -1, 0, 0},
{"PROCESSLIST", processlist_fields_info, create_schema_table,
fill_schema_processlist, make_old_format, 0, -1, -1, 0, 0},
+ {"PROFILING", query_profile_statistics_info, create_schema_table,
+ fill_query_profile_statistics_info, make_profile_table_for_show,
+ NULL, -1, -1, false, 0},
{"REFERENTIAL_CONSTRAINTS", referential_constraints_fields_info,
create_schema_table, get_all_tables, 0, get_referential_constraints_record,
1, 9, 0, OPEN_TABLE_ONLY},
@@ -6839,6 +6886,9 @@ bool show_create_trigger(THD *thd, const sp_name *trg_name)
{
TABLE_LIST *lst= get_trigger_table(thd, trg_name);
+ if (!lst)
+ return TRUE;
+
/*
Open the table by name in order to load Table_triggers_list object.
diff --git a/sql/sql_string.cc b/sql/sql_string.cc
index a8eb7360339..7fa3786c382 100644
--- a/sql/sql_string.cc
+++ b/sql/sql_string.cc
@@ -297,8 +297,8 @@ bool String::copy_aligned(const char *str,uint32 arg_length, uint32 offset,
return TRUE;
/*
- Note, this is only safe for little-endian UCS-2.
- If we add big-endian UCS-2 sometimes, this code
+ Note, this is only safe for big-endian UCS-2.
+ If we add little-endian UCS-2 sometimes, this code
will be more complicated. But it's OK for now.
*/
bzero((char*) Ptr, offset);
@@ -846,7 +846,7 @@ outp:
with optional left padding (for binary -> UCS2 conversion)
SYNOPSIS
- well_formed_copy_nhars()
+ well_formed_copy_nchars()
to Store result here
to_length Maxinum length of "to" string
to_cs Character set of "to" string
@@ -983,7 +983,10 @@ outp:
goto outp;
}
else
+ {
+ from= from_prev;
break;
+ }
}
*from_end_pos= from;
res= to - to_start;
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index 6e19077306d..505bcd1b421 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -207,7 +207,12 @@ uint build_table_filename(char *buff, size_t bufflen, const char *db,
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);
+ pos= strxnmov(pos, end - pos, dbbuff, FN_ROOTDIR, NullS);
+#ifdef USE_SYMDIR
+ unpack_dirname(buff, buff);
+ pos= strend(buff);
+#endif
+ pos= strxnmov(pos, end - pos, tbbuff, ext, NullS);
DBUG_PRINT("exit", ("buff: '%s'", buff));
DBUG_RETURN(pos - buff);
@@ -279,7 +284,7 @@ uint build_tmptable_filename(THD* thd, char *buff, size_t bufflen)
*/
-typedef struct st_global_ddl_log
+struct st_global_ddl_log
{
/*
We need to adjust buffer size to be able to handle downgrades/upgrades
@@ -297,10 +302,12 @@ typedef struct st_global_ddl_log
uint name_len;
uint io_size;
bool inited;
+ bool do_release;
bool recovery_phase;
-} GLOBAL_DDL_LOG;
+ st_global_ddl_log() : inited(false), do_release(false) {}
+};
-GLOBAL_DDL_LOG global_ddl_log;
+st_global_ddl_log global_ddl_log;
pthread_mutex_t LOCK_gdl;
@@ -434,7 +441,7 @@ static uint read_ddl_log_header()
create_ddl_log_file_name(file_name);
if ((global_ddl_log.file_id= my_open(file_name,
- O_RDWR | O_BINARY, MYF(MY_WME))) >= 0)
+ O_RDWR | O_BINARY, MYF(0))) >= 0)
{
if (read_ddl_log_file_entry(0UL))
{
@@ -460,6 +467,7 @@ static uint read_ddl_log_header()
global_ddl_log.first_used= NULL;
global_ddl_log.num_entries= 0;
VOID(pthread_mutex_init(&LOCK_gdl, MY_MUTEX_INIT_FAST));
+ global_ddl_log.do_release= true;
DBUG_RETURN(entry_no);
}
@@ -622,7 +630,7 @@ static int execute_ddl_log_action(THD *thd, DDL_LOG_ENTRY *ddl_log_entry)
}
else
{
- if ((error= file->delete_table(ddl_log_entry->name)))
+ if ((error= file->ha_delete_table(ddl_log_entry->name)))
{
if (error != ENOENT && error != HA_ERR_NO_SUCH_TABLE)
break;
@@ -659,8 +667,8 @@ static int execute_ddl_log_action(THD *thd, DDL_LOG_ENTRY *ddl_log_entry)
}
else
{
- if (file->rename_table(ddl_log_entry->from_name,
- ddl_log_entry->name))
+ if (file->ha_rename_table(ddl_log_entry->from_name,
+ ddl_log_entry->name))
break;
}
if ((deactivate_ddl_log_entry(ddl_log_entry->entry_pos)))
@@ -1150,6 +1158,9 @@ void release_ddl_log()
DDL_LOG_MEMORY_ENTRY *used_list= global_ddl_log.first_used;
DBUG_ENTER("release_ddl_log");
+ if (!global_ddl_log.do_release)
+ DBUG_VOID_RETURN;
+
pthread_mutex_lock(&LOCK_gdl);
while (used_list)
{
@@ -1167,6 +1178,7 @@ void release_ddl_log()
global_ddl_log.inited= 0;
pthread_mutex_unlock(&LOCK_gdl);
VOID(pthread_mutex_destroy(&LOCK_gdl));
+ global_ddl_log.do_release= false;
DBUG_VOID_RETURN;
}
@@ -1241,6 +1253,10 @@ bool mysql_write_frm(ALTER_PARTITION_PARAM_TYPE *lpt, uint flags)
char shadow_path[FN_REFLEN+1];
char shadow_frm_name[FN_REFLEN+1];
char frm_name[FN_REFLEN+1];
+#ifdef WITH_PARTITION_STORAGE_ENGINE
+ char *part_syntax_buf;
+ uint syntax_len;
+#endif
DBUG_ENTER("mysql_write_frm");
/*
@@ -1264,12 +1280,8 @@ bool mysql_write_frm(ALTER_PARTITION_PARAM_TYPE *lpt, uint flags)
#ifdef WITH_PARTITION_STORAGE_ENGINE
{
partition_info *part_info= lpt->table->part_info;
- char *part_syntax_buf;
- uint syntax_len;
-
if (part_info)
{
- TABLE_SHARE *share= lpt->table->s;
if (!(part_syntax_buf= generate_partition_syntax(part_info,
&syntax_len,
TRUE, TRUE)))
@@ -1277,16 +1289,7 @@ bool mysql_write_frm(ALTER_PARTITION_PARAM_TYPE *lpt, uint flags)
DBUG_RETURN(TRUE);
}
part_info->part_info_string= part_syntax_buf;
- share->partition_info_len= part_info->part_info_len= syntax_len;
- if (share->partition_info_buffer_size < syntax_len + 1)
- {
- share->partition_info_buffer_size= syntax_len+1;
- if (!(share->partition_info=
- (char*) alloc_root(&share->mem_root, syntax_len+1)))
- DBUG_RETURN(TRUE);
-
- }
- memcpy((char*) share->partition_info, part_syntax_buf, syntax_len + 1);
+ part_info->part_info_len= syntax_len;
}
}
#endif
@@ -1296,9 +1299,9 @@ bool mysql_write_frm(ALTER_PARTITION_PARAM_TYPE *lpt, uint flags)
lpt->table_name, lpt->create_info,
lpt->alter_info->create_list, lpt->key_count,
lpt->key_info_buffer, lpt->table->file)) ||
- lpt->table->file->create_handler_files(shadow_path, NULL,
- CHF_CREATE_FLAG,
- lpt->create_info))
+ lpt->table->file->ha_create_handler_files(shadow_path, NULL,
+ CHF_CREATE_FLAG,
+ lpt->create_info))
{
my_delete(shadow_frm_name, MYF(0));
error= 1;
@@ -1350,21 +1353,54 @@ bool mysql_write_frm(ALTER_PARTITION_PARAM_TYPE *lpt, uint flags)
VOID(pthread_mutex_lock(&LOCK_open));
if (my_delete(frm_name, MYF(MY_WME)) ||
#ifdef WITH_PARTITION_STORAGE_ENGINE
- lpt->table->file->create_handler_files(path, shadow_path,
- CHF_DELETE_FLAG, NULL) ||
+ lpt->table->file->ha_create_handler_files(path, shadow_path,
+ CHF_DELETE_FLAG, NULL) ||
deactivate_ddl_log_entry(part_info->frm_log_entry->entry_pos) ||
(sync_ddl_log(), FALSE) ||
#endif
#ifdef WITH_PARTITION_STORAGE_ENGINE
my_rename(shadow_frm_name, frm_name, MYF(MY_WME)) ||
- lpt->table->file->create_handler_files(path, shadow_path,
- CHF_RENAME_FLAG, NULL))
+ lpt->table->file->ha_create_handler_files(path, shadow_path,
+ CHF_RENAME_FLAG, NULL))
#else
my_rename(shadow_frm_name, frm_name, MYF(MY_WME)))
#endif
{
error= 1;
+ goto err;
}
+#ifdef WITH_PARTITION_STORAGE_ENGINE
+ if (part_info)
+ {
+ TABLE_SHARE *share= lpt->table->s;
+ char *tmp_part_syntax_str;
+ if (!(part_syntax_buf= generate_partition_syntax(part_info,
+ &syntax_len,
+ TRUE, TRUE)))
+ {
+ error= 1;
+ goto err;
+ }
+ if (share->partition_info_buffer_size < syntax_len + 1)
+ {
+ share->partition_info_buffer_size= syntax_len+1;
+ if (!(tmp_part_syntax_str= (char*) strmake_root(&share->mem_root,
+ part_syntax_buf,
+ syntax_len)))
+ {
+ error= 1;
+ goto err;
+ }
+ share->partition_info= tmp_part_syntax_str;
+ }
+ else
+ memcpy((char*) share->partition_info, part_syntax_buf, syntax_len + 1);
+ share->partition_info_len= part_info->part_info_len= syntax_len;
+ part_info->part_info_string= part_syntax_buf;
+ }
+#endif
+
+err:
VOID(pthread_mutex_unlock(&LOCK_open));
#ifdef WITH_PARTITION_STORAGE_ENGINE
deactivate_ddl_log_entry(part_info->frm_log_entry->entry_pos);
@@ -1503,7 +1539,7 @@ int mysql_rm_table_part2(THD *thd, TABLE_LIST *tables, bool if_exists,
char path[FN_REFLEN], *alias;
uint path_length;
String wrong_tables;
- int error;
+ int error= 0;
int non_temp_tables_count= 0;
bool some_tables_deleted=0, tmp_table_deleted=0, foreign_key_error=0;
String built_query;
@@ -1521,6 +1557,8 @@ int mysql_rm_table_part2(THD *thd, TABLE_LIST *tables, bool if_exists,
built_query.append("DROP TABLE ");
}
+ mysql_ha_rm_tables(thd, tables, FALSE);
+
pthread_mutex_lock(&LOCK_open);
/*
@@ -1562,11 +1600,24 @@ int mysql_rm_table_part2(THD *thd, TABLE_LIST *tables, bool if_exists,
handlerton *table_type;
enum legacy_db_type frm_db_type;
- mysql_ha_flush(thd, table, MYSQL_HA_CLOSE_FINAL, 1);
- if (!close_temporary_table(thd, table))
- {
- tmp_table_deleted=1;
- continue; // removed temporary table
+ DBUG_PRINT("table", ("table_l: '%s'.'%s' table: 0x%lx s: 0x%lx",
+ table->db, table->table_name, (long) table->table,
+ table->table ? (long) table->table->s : (long) -1));
+
+ error= drop_temporary_table(thd, table);
+
+ switch (error) {
+ case 0:
+ // removed temporary table
+ tmp_table_deleted= 1;
+ continue;
+ case -1:
+ DBUG_ASSERT(thd->in_sub_stmt);
+ error= 1;
+ goto err_with_placeholders;
+ default:
+ // temporary table not found
+ error= 0;
}
/*
@@ -1593,7 +1644,6 @@ int mysql_rm_table_part2(THD *thd, TABLE_LIST *tables, bool if_exists,
built_query.append("`,");
}
- error=0;
table_type= table->db_type;
if (!drop_temporary)
{
@@ -1616,8 +1666,9 @@ int mysql_rm_table_part2(THD *thd, TABLE_LIST *tables, bool if_exists,
}
alias= (lower_case_table_names == 2) ? table->alias : table->table_name;
/* remove .frm file and engine files */
- path_length= build_table_filename(path, sizeof(path),
- db, alias, reg_ext, 0);
+ path_length= build_table_filename(path, sizeof(path), db, alias, reg_ext,
+ table->internal_tmp_table ?
+ FN_IS_TMP : 0);
}
if (drop_temporary ||
(table_type == NULL &&
@@ -1648,7 +1699,10 @@ int mysql_rm_table_part2(THD *thd, TABLE_LIST *tables, bool if_exists,
!dont_log_query);
if ((error == ENOENT || error == HA_ERR_NO_SUCH_TABLE) &&
(if_exists || table_type == NULL))
+ {
error= 0;
+ thd->clear_error();
+ }
if (error == HA_ERR_ROW_IS_REFERENCED)
{
/* the table is referenced by a foreign key constraint */
@@ -1674,6 +1728,8 @@ int mysql_rm_table_part2(THD *thd, TABLE_LIST *tables, bool if_exists,
wrong_tables.append(',');
wrong_tables.append(String(table->table_name,system_charset_info));
}
+ DBUG_PRINT("table", ("table: 0x%lx s: 0x%lx", (long) table->table,
+ table->table ? (long) table->table->s : (long) -1));
}
/*
It's safe to unlock LOCK_open: we have an exclusive lock
@@ -1782,7 +1838,8 @@ bool quick_rm_table(handlerton *base,const char *db,
/*
Sort keys in the following order:
- PRIMARY KEY
- - UNIQUE keyws where all column are NOT NULL
+ - UNIQUE keys where all column are NOT NULL
+ - UNIQUE keys that don't contain partial segments
- Other UNIQUE keys
- Normal keys
- Fulltext keys
@@ -1793,26 +1850,31 @@ bool quick_rm_table(handlerton *base,const char *db,
static int sort_keys(KEY *a, KEY *b)
{
- if (a->flags & HA_NOSAME)
+ ulong a_flags= a->flags, b_flags= b->flags;
+
+ if (a_flags & HA_NOSAME)
{
- if (!(b->flags & HA_NOSAME))
+ if (!(b_flags & HA_NOSAME))
return -1;
- if ((a->flags ^ b->flags) & (HA_NULL_PART_KEY | HA_END_SPACE_KEY))
+ if ((a_flags ^ b_flags) & (HA_NULL_PART_KEY | HA_END_SPACE_KEY))
{
/* Sort NOT NULL keys before other keys */
- return (a->flags & (HA_NULL_PART_KEY | HA_END_SPACE_KEY)) ? 1 : -1;
+ return (a_flags & (HA_NULL_PART_KEY | HA_END_SPACE_KEY)) ? 1 : -1;
}
if (a->name == primary_key_name)
return -1;
if (b->name == primary_key_name)
return 1;
+ /* Sort keys don't containing partial segments before others */
+ if ((a_flags ^ b_flags) & HA_KEY_HAS_PART_KEY_SEG)
+ return (a_flags & HA_KEY_HAS_PART_KEY_SEG) ? 1 : -1;
}
- else if (b->flags & HA_NOSAME)
+ else if (b_flags & HA_NOSAME)
return 1; // Prefer b
- if ((a->flags ^ b->flags) & HA_FULLTEXT)
+ if ((a_flags ^ b_flags) & HA_FULLTEXT)
{
- return (a->flags & HA_FULLTEXT) ? 1 : -1;
+ return (a_flags & HA_FULLTEXT) ? 1 : -1;
}
/*
Prefer original key order. usable_key_parts contains here
@@ -2380,8 +2442,8 @@ mysql_prepare_create_table(THD *thd, HA_CREATE_INFO *create_info,
sql_field->length= dup_field->char_length;
sql_field->pack_length= dup_field->pack_length;
sql_field->key_length= dup_field->key_length;
- sql_field->create_length_to_internal_length();
sql_field->decimals= dup_field->decimals;
+ sql_field->create_length_to_internal_length();
sql_field->unireg_check= dup_field->unireg_check;
/*
We're making one field from two, the result field will have
@@ -2740,7 +2802,7 @@ mysql_prepare_create_table(THD *thd, HA_CREATE_INFO *create_info,
}
if (f_is_geom(sql_field->pack_flag) && sql_field->geom_type ==
Field::GEOM_POINT)
- column->length= 21;
+ column->length= 25;
if (!column->length)
{
my_error(ER_BLOB_KEY_WITHOUT_LENGTH, MYF(0), column->field_name);
@@ -2876,6 +2938,10 @@ mysql_prepare_create_table(THD *thd, HA_CREATE_INFO *create_info,
else
key_info->flags|= HA_PACK_KEY;
}
+ /* Check if the key segment is partial, set the key flag accordingly */
+ if (length != sql_field->key_length)
+ key_info->flags|= HA_KEY_HAS_PART_KEY_SEG;
+
key_length+=length;
key_part_info++;
@@ -3411,7 +3477,7 @@ bool mysql_create_table_no_lock(THD *thd,
}
}
- thd->proc_info="creating table";
+ thd_proc_info(thd, "creating table");
create_info->table_existed= 0; // Mark that table is created
if (thd->variables.sql_mode & MODE_NO_DIR_IN_CREATE)
@@ -3452,7 +3518,7 @@ unlock_and_end:
VOID(pthread_mutex_unlock(&LOCK_open));
err:
- thd->proc_info="After create";
+ thd_proc_info(thd, "After create");
delete file;
DBUG_RETURN(error);
@@ -3652,14 +3718,14 @@ mysql_rename_table(handlerton *base, const char *old_db,
to_base= lc_to;
}
- if (!file || !(error=file->rename_table(from_base, to_base)))
+ if (!file || !(error=file->ha_rename_table(from_base, to_base)))
{
if (!(flags & NO_FRM_RENAME) && rename_file_ext(from,to,reg_ext))
{
error=my_errno;
/* Restore old file name */
if (file)
- file->rename_table(to_base, from_base);
+ file->ha_rename_table(to_base, from_base);
}
}
delete file;
@@ -3689,14 +3755,16 @@ mysql_rename_table(handlerton *base, const char *old_db,
Win32 clients must also have a WRITE LOCK on the table !
*/
-static void wait_while_table_is_used(THD *thd,TABLE *table,
- enum ha_extra_function function)
+void wait_while_table_is_used(THD *thd, TABLE *table,
+ enum ha_extra_function function)
{
DBUG_ENTER("wait_while_table_is_used");
DBUG_PRINT("enter", ("table: '%s' share: 0x%lx db_stat: %u version: %lu",
table->s->table_name.str, (ulong) table->s,
table->db_stat, table->s->version));
+ safe_mutex_assert_owner(&LOCK_open);
+
VOID(table->file->extra(function));
/* Mark all tables that are in use as 'old' */
mysql_lock_abort(thd, table, TRUE); /* end threads waiting on lock */
@@ -3820,6 +3888,8 @@ static int prepare_for_restore(THD* thd, TABLE_LIST* table,
DBUG_RETURN(send_check_errmsg(thd, table, "restore",
"Failed to open partially restored table"));
}
+ /* A MERGE table must not come here. */
+ DBUG_ASSERT(!table->table || !table->table->child_l);
pthread_mutex_unlock(&LOCK_open);
DBUG_RETURN(0);
}
@@ -3862,6 +3932,10 @@ static int prepare_for_repair(THD *thd, TABLE_LIST *table_list,
table= &tmp_table;
pthread_mutex_unlock(&LOCK_open);
}
+
+ /* A MERGE table must not come here. */
+ DBUG_ASSERT(!table->child_l);
+
/*
REPAIR TABLE ... USE_FRM for temporary tables makes little sense.
*/
@@ -4009,13 +4083,16 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
DBUG_RETURN(TRUE);
- mysql_ha_flush(thd, tables, MYSQL_HA_CLOSE_FINAL, FALSE);
+ mysql_ha_rm_tables(thd, tables, FALSE);
+
for (table= tables; table; table= table->next_local)
{
char table_name[NAME_LEN*2+2];
char* db = table->db;
bool fatal_error=0;
+ DBUG_PRINT("admin", ("table: '%s'.'%s'", table->db, table->table_name));
+ DBUG_PRINT("admin", ("extra_open_options: %u", extra_open_options));
strxmov(table_name, db, ".", table->table_name, NullS);
thd->open_options|= extra_open_options;
table->lock_type= lock_type;
@@ -4046,16 +4123,24 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
table->next_local= save_next_local;
thd->open_options&= ~extra_open_options;
}
+ DBUG_PRINT("admin", ("table: 0x%lx", (long) table->table));
+
if (prepare_func)
{
+ DBUG_PRINT("admin", ("calling prepare_func"));
switch ((*prepare_func)(thd, table, check_opt)) {
case 1: // error, message written to net
ha_autocommit_or_rollback(thd, 1);
close_thread_tables(thd);
+ DBUG_PRINT("admin", ("simple error, admin next table"));
continue;
case -1: // error, message could be written to net
+ /* purecov: begin inspected */
+ DBUG_PRINT("admin", ("severe error, stop"));
goto err;
+ /* purecov: end */
default: // should be 0 otherwise
+ DBUG_PRINT("admin", ("prepare_func succeeded"));
;
}
}
@@ -4070,6 +4155,7 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
*/
if (!table->table)
{
+ DBUG_PRINT("admin", ("open table failed"));
if (!thd->warn_list.elements)
push_warning(thd, MYSQL_ERROR::WARN_LEVEL_ERROR,
ER_CHECK_NO_SUCH_TABLE, ER(ER_CHECK_NO_SUCH_TABLE));
@@ -4084,14 +4170,17 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
if (table->view)
{
+ DBUG_PRINT("admin", ("calling view_operator_func"));
result_code= (*view_operator_func)(thd, table);
goto send_result;
}
if ((table->table->db_stat & HA_READ_ONLY) && open_for_modify)
{
+ /* purecov: begin inspected */
char buff[FN_REFLEN + MYSQL_ERRMSG_SIZE];
uint length;
+ DBUG_PRINT("admin", ("sending error message"));
protocol->prepare_for_resend();
protocol->store(table_name, system_charset_info);
protocol->store(operator_name, system_charset_info);
@@ -4106,11 +4195,13 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
if (protocol->write())
goto err;
continue;
+ /* purecov: end */
}
/* Close all instances of the table to allow repair to rename files */
if (lock_type == TL_WRITE && table->table->s->version)
{
+ DBUG_PRINT("admin", ("removing table from cache"));
pthread_mutex_lock(&LOCK_open);
const char *old_message=thd->enter_cond(&COND_refresh, &LOCK_open,
"Waiting to get writelock");
@@ -4130,6 +4221,8 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
if (table->table->s->crashed && operator_func == &handler::ha_check)
{
+ /* purecov: begin inspected */
+ DBUG_PRINT("admin", ("sending crashed warning"));
protocol->prepare_for_resend();
protocol->store(table_name, system_charset_info);
protocol->store(operator_name, system_charset_info);
@@ -4138,6 +4231,7 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
system_charset_info);
if (protocol->write())
goto err;
+ /* purecov: end */
}
if (operator_func == &handler::ha_repair &&
@@ -4147,20 +4241,27 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
(table->table->file->ha_check_for_upgrade(check_opt) ==
HA_ADMIN_NEEDS_ALTER))
{
- my_bool save_no_send_ok= thd->net.no_send_ok;
+ DBUG_PRINT("admin", ("recreating table"));
ha_autocommit_or_rollback(thd, 1);
close_thread_tables(thd);
tmp_disable_binlog(thd); // binlogging is done by caller if wanted
- thd->net.no_send_ok= TRUE;
result_code= mysql_recreate_table(thd, table);
- thd->net.no_send_ok= save_no_send_ok;
reenable_binlog(thd);
+ /*
+ mysql_recreate_table() can push OK or ERROR.
+ Clear 'OK' status. If there is an error, keep it:
+ we will store the error message in a result set row
+ and then clear.
+ */
+ if (thd->main_da.is_ok())
+ thd->main_da.reset_diagnostics_area();
goto send_result;
}
-
}
+ DBUG_PRINT("admin", ("calling operator_func '%s'", operator_name));
result_code = (table->table->file->*operator_func)(thd, check_opt);
+ DBUG_PRINT("admin", ("operator_func returned: %d", result_code));
send_result:
@@ -4249,7 +4350,6 @@ send_result_message:
case HA_ADMIN_TRY_ALTER:
{
- my_bool save_no_send_ok= thd->net.no_send_ok;
/*
This is currently used only by InnoDB. ha_innobase::optimize() answers
"try with alter", so here we close the table, do an ALTER TABLE,
@@ -4261,23 +4361,30 @@ send_result_message:
*save_next_global= table->next_global;
table->next_local= table->next_global= 0;
tmp_disable_binlog(thd); // binlogging is done by caller if wanted
- thd->net.no_send_ok= TRUE;
result_code= mysql_recreate_table(thd, table);
- thd->net.no_send_ok= save_no_send_ok;
reenable_binlog(thd);
+ /*
+ mysql_recreate_table() can push OK or ERROR.
+ Clear 'OK' status. If there is an error, keep it:
+ we will store the error message in a result set row
+ and then clear.
+ */
+ if (thd->main_da.is_ok())
+ thd->main_da.reset_diagnostics_area();
ha_autocommit_or_rollback(thd, 0);
close_thread_tables(thd);
if (!result_code) // recreation went ok
{
if ((table->table= open_ltable(thd, table, lock_type, 0)) &&
- ((result_code= table->table->file->analyze(thd, check_opt)) > 0))
+ ((result_code= table->table->file->ha_analyze(thd, check_opt)) > 0))
result_code= 0; // analyze went ok
}
if (result_code) // either mysql_recreate_table or analyze failed
{
- const char *err_msg;
- if ((err_msg= thd->net.last_error))
+ DBUG_ASSERT(thd->is_error());
+ if (thd->is_error())
{
+ const char *err_msg= thd->main_da.message();
if (!thd->vio_ok())
{
sql_print_error(err_msg);
@@ -4293,6 +4400,7 @@ send_result_message:
protocol->store(table_name, system_charset_info);
protocol->store(operator_name, system_charset_info);
}
+ thd->clear_error();
}
}
result_code= result_code ? HA_ADMIN_FAILED : HA_ADMIN_OK;
@@ -4378,7 +4486,7 @@ bool mysql_backup_table(THD* thd, TABLE_LIST* table_list)
"MySQL Administrator (mysqldump, mysql)");
DBUG_RETURN(mysql_admin_table(thd, table_list, 0,
"backup", TL_READ, 0, 0, 0, 0,
- &handler::backup, 0));
+ &handler::ha_backup, 0));
}
@@ -4390,7 +4498,7 @@ bool mysql_restore_table(THD* thd, TABLE_LIST* table_list)
DBUG_RETURN(mysql_admin_table(thd, table_list, 0,
"restore", TL_WRITE, 1, 1, 0,
&prepare_for_restore,
- &handler::restore, 0));
+ &handler::ha_restore, 0));
}
@@ -4411,7 +4519,7 @@ bool mysql_optimize_table(THD* thd, TABLE_LIST* tables, HA_CHECK_OPT* check_opt)
DBUG_ENTER("mysql_optimize_table");
DBUG_RETURN(mysql_admin_table(thd, tables, check_opt,
"optimize", TL_WRITE, 1,0,0,0,
- &handler::optimize, 0));
+ &handler::ha_optimize, 0));
}
@@ -4517,6 +4625,55 @@ bool mysql_preload_keys(THD* thd, TABLE_LIST* tables)
}
+
+/**
+ @brief Create frm file based on I_S table
+
+ @param[in] thd thread handler
+ @param[in] schema_table I_S table
+ @param[in] dst_path path where frm should be created
+ @param[in] create_info Create info
+
+ @return Operation status
+ @retval 0 success
+ @retval 1 error
+*/
+
+
+bool mysql_create_like_schema_frm(THD* thd, TABLE_LIST* schema_table,
+ char *dst_path, HA_CREATE_INFO *create_info)
+{
+ HA_CREATE_INFO local_create_info;
+ Alter_info alter_info;
+ bool tmp_table= (create_info->options & HA_LEX_CREATE_TMP_TABLE);
+ uint keys= schema_table->table->s->keys;
+ uint db_options= 0;
+ DBUG_ENTER("mysql_create_like_schema_frm");
+
+ bzero((char*) &local_create_info, sizeof(local_create_info));
+ local_create_info.db_type= schema_table->table->s->db_type();
+ local_create_info.row_type= schema_table->table->s->row_type;
+ local_create_info.default_table_charset=default_charset_info;
+ alter_info.flags= (ALTER_CHANGE_COLUMN | ALTER_RECREATE);
+ schema_table->table->use_all_columns();
+ if (mysql_prepare_alter_table(thd, schema_table->table,
+ &local_create_info, &alter_info))
+ DBUG_RETURN(1);
+ if (mysql_prepare_create_table(thd, &local_create_info, &alter_info,
+ tmp_table, &db_options,
+ schema_table->table->file,
+ &schema_table->table->s->key_info, &keys, 0))
+ DBUG_RETURN(1);
+ local_create_info.max_rows= 0;
+ if (mysql_create_frm(thd, dst_path, NullS, NullS,
+ &local_create_info, alter_info.create_list,
+ keys, schema_table->table->s->key_info,
+ schema_table->table->file))
+ DBUG_RETURN(1);
+ DBUG_RETURN(0);
+}
+
+
/*
Create a table identical to the specified table
@@ -4620,7 +4777,15 @@ bool mysql_create_like_table(THD* thd, TABLE_LIST* table, TABLE_LIST* src_table,
during the call to ha_create_table(). See bug #28614 for more info.
*/
VOID(pthread_mutex_lock(&LOCK_open));
- if (my_copy(src_path, dst_path, MYF(MY_DONT_OVERWRITE_FILE)))
+ if (src_table->schema_table)
+ {
+ if (mysql_create_like_schema_frm(thd, src_table, dst_path, create_info))
+ {
+ VOID(pthread_mutex_unlock(&LOCK_open));
+ goto err;
+ }
+ }
+ else if (my_copy(src_path, dst_path, MYF(MY_DONT_OVERWRITE_FILE)))
{
if (my_errno == ENOENT)
my_error(ER_BAD_DB_ERROR,MYF(0),db);
@@ -4768,7 +4933,7 @@ bool mysql_analyze_table(THD* thd, TABLE_LIST* tables, HA_CHECK_OPT* check_opt)
DBUG_ENTER("mysql_analyze_table");
DBUG_RETURN(mysql_admin_table(thd, tables, check_opt,
"analyze", lock_type, 1, 0, 0, 0,
- &handler::analyze, 0));
+ &handler::ha_analyze, 0));
}
@@ -4800,7 +4965,7 @@ mysql_discard_or_import_tablespace(THD *thd,
ALTER TABLE
*/
- thd->proc_info="discard_or_import_tablespace";
+ thd_proc_info(thd, "discard_or_import_tablespace");
discard= test(tablespace_op == DISCARD_TABLESPACE);
@@ -4815,9 +4980,9 @@ mysql_discard_or_import_tablespace(THD *thd,
DBUG_RETURN(-1);
}
- error=table->file->discard_or_import_tablespace(discard);
+ error= table->file->ha_discard_or_import_tablespace(discard);
- thd->proc_info="end";
+ thd_proc_info(thd, "end");
if (error)
goto err;
@@ -4985,6 +5150,7 @@ compare_tables(TABLE *table,
create_info->used_fields & HA_CREATE_USED_ENGINE ||
create_info->used_fields & HA_CREATE_USED_CHARSET ||
create_info->used_fields & HA_CREATE_USED_DEFAULT_CHARSET ||
+ create_info->used_fields & HA_CREATE_USED_ROW_FORMAT ||
(alter_info->flags & (ALTER_RECREATE | ALTER_FOREIGN_KEY)) ||
order_num ||
!table->s->mysql_version ||
@@ -5187,20 +5353,21 @@ bool alter_table_manage_keys(TABLE *table, int indexes_were_disabled,
switch (keys_onoff) {
case ENABLE:
- error= table->file->enable_indexes(HA_KEY_SWITCH_NONUNIQ_SAVE);
+ error= table->file->ha_enable_indexes(HA_KEY_SWITCH_NONUNIQ_SAVE);
break;
case LEAVE_AS_IS:
if (!indexes_were_disabled)
break;
/* fall-through: disabled indexes */
case DISABLE:
- error= table->file->disable_indexes(HA_KEY_SWITCH_NONUNIQ_SAVE);
+ error= table->file->ha_disable_indexes(HA_KEY_SWITCH_NONUNIQ_SAVE);
}
if (error == HA_ERR_WRONG_COMMAND)
{
push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_NOTE,
- ER_ILLEGAL_HA, ER(ER_ILLEGAL_HA), table->s->table_name);
+ ER_ILLEGAL_HA, ER(ER_ILLEGAL_HA),
+ table->s->table_name.str);
error= 0;
} else if (error)
table->file->print_error(error, MYF(0));
@@ -5392,7 +5559,7 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
{
if (def->change && ! def->field)
{
- my_error(ER_BAD_FIELD_ERROR, MYF(0), def->change, table->s->table_name);
+ my_error(ER_BAD_FIELD_ERROR, MYF(0), def->change, table->s->table_name.str);
goto err;
}
/*
@@ -5427,7 +5594,7 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
}
if (!find)
{
- my_error(ER_BAD_FIELD_ERROR, MYF(0), def->after, table->s->table_name);
+ my_error(ER_BAD_FIELD_ERROR, MYF(0), def->after, table->s->table_name.str);
goto err;
}
find_it.after(def); // Put element after this
@@ -5437,7 +5604,7 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
if (alter_info->alter_list.elements)
{
my_error(ER_BAD_FIELD_ERROR, MYF(0),
- alter_info->alter_list.head()->name, table->s->table_name);
+ alter_info->alter_list.head()->name, table->s->table_name.str);
goto err;
}
if (!new_create_list.elements)
@@ -5739,7 +5906,7 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name,
to simplify further comparisions: we want to see if it's a RENAME
later just by comparing the pointers, avoiding the need for strcmp.
*/
- thd->proc_info="init";
+ thd_proc_info(thd, "init");
table_name=table_list->table_name;
alias= (lower_case_table_names == 2) ? table_list->alias : table_name;
db=table_list->db;
@@ -5748,8 +5915,7 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name,
build_table_filename(reg_path, sizeof(reg_path), db, table_name, reg_ext, 0);
build_table_filename(path, sizeof(path), db, table_name, "", 0);
-
- mysql_ha_flush(thd, table_list, MYSQL_HA_CLOSE_FINAL, FALSE);
+ mysql_ha_rm_tables(thd, table_list, FALSE);
/* DISCARD/IMPORT TABLESPACE is always alone in an ALTER TABLE */
if (alter_info->tablespace_op != NO_TABLESPACE_OP)
@@ -5816,10 +5982,25 @@ view_err:
start_waiting_global_read_lock(thd);
DBUG_RETURN(error);
}
- if (!(table=open_ltable(thd, table_list, TL_WRITE_ALLOW_READ, 0)))
+
+ if (!(table= open_n_lock_single_table(thd, table_list, TL_WRITE_ALLOW_READ)))
DBUG_RETURN(TRUE);
table->use_all_columns();
+ /*
+ Prohibit changing of the UNION list of a non-temporary MERGE table
+ under LOCK tables. It would be quite difficult to reuse a shrinked
+ set of tables from the old table or to open a new TABLE object for
+ an extended list and verify that they belong to locked tables.
+ */
+ if (thd->locked_tables &&
+ (create_info->used_fields & HA_CREATE_USED_UNION) &&
+ (table->s->tmp_table == NO_TMP_TABLE))
+ {
+ my_error(ER_LOCK_OR_ACTIVE_TRANSACTION, MYF(0));
+ DBUG_RETURN(TRUE);
+ }
+
/* Check that we are not trying to rename to an existing table */
if (new_name)
{
@@ -5906,7 +6087,8 @@ view_err:
goto err;
new_db_type= create_info->db_type;
- if (new_db_type != old_db_type &&
+ if ((new_db_type != old_db_type ||
+ alter_info->flags & ALTER_PARTITION) &&
!table->file->can_switch_engines())
{
my_error(ER_ROW_IS_REFERENCED, MYF(0));
@@ -5927,7 +6109,7 @@ view_err:
goto err;
}
- thd->proc_info="setup";
+ thd_proc_info(thd, "setup");
if (!(alter_info->flags & ~(ALTER_RENAME | ALTER_KEYS_ONOFF)) &&
!table->s->tmp_table) // no need to touch frm
{
@@ -5948,14 +6130,14 @@ view_err:
wait_while_table_is_used(thd, table, HA_EXTRA_FORCE_REOPEN);
VOID(pthread_mutex_unlock(&LOCK_open));
DBUG_EXECUTE_IF("sleep_alter_enable_indexes", my_sleep(6000000););
- error= table->file->enable_indexes(HA_KEY_SWITCH_NONUNIQ_SAVE);
+ error= table->file->ha_enable_indexes(HA_KEY_SWITCH_NONUNIQ_SAVE);
/* COND_refresh will be signaled in close_thread_tables() */
break;
case DISABLE:
VOID(pthread_mutex_lock(&LOCK_open));
wait_while_table_is_used(thd, table, HA_EXTRA_FORCE_REOPEN);
VOID(pthread_mutex_unlock(&LOCK_open));
- error=table->file->disable_indexes(HA_KEY_SWITCH_NONUNIQ_SAVE);
+ error=table->file->ha_disable_indexes(HA_KEY_SWITCH_NONUNIQ_SAVE);
/* COND_refresh will be signaled in close_thread_tables() */
break;
default:
@@ -5983,7 +6165,7 @@ view_err:
if (!error && (new_name != table_name || new_db != db))
{
- thd->proc_info="rename";
+ thd_proc_info(thd, "rename");
/*
Then do a 'simple' rename of the table. First we need to close all
instances of 'source' table.
@@ -6287,6 +6469,7 @@ view_err:
goto err;
/* Open the table if we need to copy the data. */
+ DBUG_PRINT("info", ("need_copy_table: %u", need_copy_table));
if (need_copy_table != ALTER_TABLE_METADATA_ONLY)
{
if (table->s->tmp_table)
@@ -6310,13 +6493,21 @@ view_err:
}
if (!new_table)
goto err1;
+ /*
+ Note: In case of MERGE table, we do not attach children. We do not
+ copy data for MERGE tables. Only the children have data.
+ */
}
/* Copy the data if necessary. */
thd->count_cuted_fields= CHECK_FIELD_WARN; // calc cuted fields
thd->cuted_fields=0L;
- thd->proc_info="copy to tmp table";
+ thd_proc_info(thd, "copy to tmp table");
copied=deleted=0;
+ /*
+ We do not copy data for MERGE tables. Only the children have data.
+ MERGE tables have HA_NO_COPY_ON_ALTER set.
+ */
if (new_table && !(new_table->file->ha_table_flags() & HA_NO_COPY_ON_ALTER))
{
/* We don't want update TIMESTAMP fields during ALTER TABLE. */
@@ -6354,7 +6545,7 @@ view_err:
KEY_PART_INFO *part_end;
DBUG_PRINT("info", ("No new_table, checking add/drop index"));
- table->file->prepare_for_alter();
+ table->file->ha_prepare_for_alter();
if (index_add_count)
{
/* The add_index() method takes an array of KEY structs. */
@@ -6454,7 +6645,10 @@ view_err:
if (new_table)
{
- /* Close the intermediate table that will be the new table */
+ /*
+ Close the intermediate table that will be the new table.
+ Note that MERGE tables do not have their children attached here.
+ */
intern_close_table(new_table);
my_free(new_table,MYF(0));
}
@@ -6482,7 +6676,7 @@ view_err:
call to remove name-locks from table cache and list of open table.
*/
- thd->proc_info="rename result table";
+ thd_proc_info(thd, "rename result table");
my_snprintf(old_name, sizeof(old_name), "%s2-%lx-%lx", tmp_file_prefix,
current_pid, thd->thread_id);
if (lower_case_table_names)
@@ -6547,6 +6741,7 @@ view_err:
/*
Now we have to inform handler that new .FRM file is in place.
To do this we need to obtain a handler object for it.
+ NO need to tamper with MERGE tables. The real open is done later.
*/
TABLE *t_table;
if (new_name != table_name || new_db != db)
@@ -6568,8 +6763,8 @@ view_err:
t_table= table;
}
/* Tell the handler that a new frm file is in place. */
- if (t_table->file->create_handler_files(path, NULL, CHF_INDEX_FLAG,
- create_info))
+ if (t_table->file->ha_create_handler_files(path, NULL, CHF_INDEX_FLAG,
+ create_info))
goto err_with_placeholders;
if (thd->locked_tables && new_name == table_name && new_db == db)
{
@@ -6589,14 +6784,14 @@ view_err:
if (thd->locked_tables && new_name == table_name && new_db == db)
{
thd->in_lock_tables= 1;
- error= reopen_tables(thd, 1, 0);
+ error= reopen_tables(thd, 1, 1);
thd->in_lock_tables= 0;
if (error)
goto err_with_placeholders;
}
VOID(pthread_mutex_unlock(&LOCK_open));
- thd->proc_info="end";
+ thd_proc_info(thd, "end");
DBUG_EXECUTE_IF("sleep_alter_before_main_binlog", my_sleep(6000000););
@@ -6614,7 +6809,7 @@ view_err:
/*
For the alter table to be properly flushed to the logs, we
have to open the new table. If not, we get a problem on server
- shutdown.
+ shutdown. But we do not need to attach MERGE children.
*/
char path[FN_REFLEN];
TABLE *t_table;
@@ -6803,23 +6998,35 @@ copy_data_between_tables(TABLE *from,TABLE *to,
if (order)
{
- from->sort.io_cache=(IO_CACHE*) my_malloc(sizeof(IO_CACHE),
- MYF(MY_FAE | MY_ZEROFILL));
- bzero((char*) &tables,sizeof(tables));
- tables.table= from;
- tables.alias= tables.table_name= from->s->table_name.str;
- tables.db= from->s->db.str;
- error=1;
+ if (to->s->primary_key != MAX_KEY && to->file->primary_key_is_clustered())
+ {
+ char warn_buff[MYSQL_ERRMSG_SIZE];
+ my_snprintf(warn_buff, sizeof(warn_buff),
+ "ORDER BY ignored as there is a user-defined clustered index"
+ " in the table '%-.192s'", from->s->table_name.str);
+ push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN, ER_UNKNOWN_ERROR,
+ warn_buff);
+ }
+ else
+ {
+ from->sort.io_cache=(IO_CACHE*) my_malloc(sizeof(IO_CACHE),
+ MYF(MY_FAE | MY_ZEROFILL));
+ bzero((char *) &tables, sizeof(tables));
+ tables.table= from;
+ tables.alias= tables.table_name= from->s->table_name.str;
+ tables.db= from->s->db.str;
+ error= 1;
- if (thd->lex->select_lex.setup_ref_array(thd, order_num) ||
- setup_order(thd, thd->lex->select_lex.ref_pointer_array,
- &tables, fields, all_fields, order) ||
- !(sortorder=make_unireg_sortorder(order, &length, NULL)) ||
- (from->sort.found_records = filesort(thd, from, sortorder, length,
- (SQL_SELECT *) 0, HA_POS_ERROR, 1,
- &examined_rows)) ==
- HA_POS_ERROR)
- goto err;
+ if (thd->lex->select_lex.setup_ref_array(thd, order_num) ||
+ setup_order(thd, thd->lex->select_lex.ref_pointer_array,
+ &tables, fields, all_fields, order) ||
+ !(sortorder= make_unireg_sortorder(order, &length, NULL)) ||
+ (from->sort.found_records= filesort(thd, from, sortorder, length,
+ (SQL_SELECT *) 0, HA_POS_ERROR,
+ 1, &examined_rows)) ==
+ HA_POS_ERROR)
+ goto err;
+ }
};
/* Tell handler that we have values for all columns in the to table */
@@ -6857,7 +7064,7 @@ copy_data_between_tables(TABLE *from,TABLE *to,
copy_ptr->do_copy(copy_ptr);
}
prev_insert_id= to->file->next_insert_id;
- error=to->file->write_row(to->record[0]);
+ error=to->file->ha_write_row(to->record[0]);
to->auto_increment_field_not_null= FALSE;
if (error)
{
@@ -6944,6 +7151,12 @@ bool mysql_recreate_table(THD *thd, TABLE_LIST *table_list)
Alter_info alter_info;
DBUG_ENTER("mysql_recreate_table");
+ DBUG_ASSERT(!table_list->next_global);
+ /*
+ table_list->table has been closed and freed. Do not reference
+ uninitialized data. open_tables() could fail.
+ */
+ table_list->table= NULL;
bzero((char*) &create_info, sizeof(create_info));
create_info.db_type= 0;
@@ -6975,6 +7188,7 @@ bool mysql_checksum_table(THD *thd, TABLE_LIST *tables,
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
DBUG_RETURN(TRUE);
+ /* Open one table after the other to keep lock time as short as possible. */
for (table= tables; table; table= table->next_local)
{
char table_name[NAME_LEN*2+2];
@@ -6982,7 +7196,7 @@ bool mysql_checksum_table(THD *thd, TABLE_LIST *tables,
strxmov(table_name, table->db ,".", table->table_name, NullS);
- t= table->table= open_ltable(thd, table, TL_READ, 0);
+ t= table->table= open_n_lock_single_table(thd, table, TL_READ);
thd->clear_error(); // these errors shouldn't get client
protocol->prepare_for_resend();
diff --git a/sql/sql_trigger.cc b/sql/sql_trigger.cc
index ce26b025430..4bf23dc52f9 100644
--- a/sql/sql_trigger.cc
+++ b/sql/sql_trigger.cc
@@ -168,7 +168,7 @@ static const LEX_STRING triggers_file_type=
const char * const TRG_EXT= ".TRG";
-/*
+/**
Table of .TRG file field descriptors.
We have here only one field now because in nearest future .TRG
files will be merged into .FRM files (so we don't need something
@@ -216,7 +216,7 @@ File_option sql_modes_parameters=
FILE_OPTIONS_ULLLIST
};
-/*
+/**
This must be kept up to date whenever a new option is added to the list
above, as it specifies the number of required parameters of the trigger in
.trg file.
@@ -292,23 +292,27 @@ private:
};
-/*
+/**
Create or drop trigger for table.
- SYNOPSIS
- mysql_create_or_drop_trigger()
- thd - current thread context (including trigger definition in LEX)
- tables - table list containing one table for which trigger is created.
- create - whenever we create (TRUE) or drop (FALSE) trigger
+ @param thd current thread context (including trigger definition in LEX)
+ @param tables table list containing one table for which trigger is created.
+ @param create whenever we create (TRUE) or drop (FALSE) trigger
- NOTE
+ @note
This function is mainly responsible for opening and locking of table and
invalidation of all its instances in table cache after trigger creation.
Real work on trigger creation/dropping is done inside Table_triggers_list
methods.
- RETURN VALUE
+ @todo
+ TODO: We should check if user has TRIGGER privilege for table here.
+ Now we just require SUPER privilege for creating/dropping because
+ we don't have proper privilege checking for triggers in place yet.
+
+ @retval
FALSE Success
+ @retval
TRUE error
*/
bool mysql_create_or_drop_trigger(THD *thd, TABLE_LIST *tables, bool create)
@@ -323,6 +327,7 @@ bool mysql_create_or_drop_trigger(THD *thd, TABLE_LIST *tables, bool create)
TABLE *table;
bool result= TRUE;
String stmt_query;
+ bool need_start_waiting= FALSE;
DBUG_ENTER("mysql_create_or_drop_trigger");
@@ -374,10 +379,12 @@ bool mysql_create_or_drop_trigger(THD *thd, TABLE_LIST *tables, bool create)
/*
We don't want perform our operations while global read lock is held
so we have to wait until its end and then prevent it from occurring
- again until we are done. (Acquiring LOCK_open is not enough because
- global read lock is held without holding LOCK_open).
+ again until we are done, unless we are under lock tables. (Acquiring
+ LOCK_open is not enough because global read lock is held without holding
+ LOCK_open).
*/
- if (wait_if_global_read_lock(thd, 0, 1))
+ if (!thd->locked_tables &&
+ !(need_start_waiting= !wait_if_global_read_lock(thd, 0, 1)))
DBUG_RETURN(TRUE);
VOID(pthread_mutex_lock(&LOCK_open));
@@ -433,16 +440,30 @@ bool mysql_create_or_drop_trigger(THD *thd, TABLE_LIST *tables, bool create)
goto end;
}
- if (lock_table_names(thd, tables))
- goto end;
-
/* We also don't allow creation of triggers on views. */
tables->required_type= FRMTYPE_TABLE;
- if (reopen_name_locked_table(thd, tables, TRUE))
+ /* Keep consistent with respect to other DDL statements */
+ mysql_ha_rm_tables(thd, tables, TRUE);
+
+ if (thd->locked_tables)
{
- unlock_table_name(thd, tables);
- goto end;
+ /* Table must be write locked */
+ if (name_lock_locked_table(thd, tables))
+ goto end;
+ }
+ else
+ {
+ /* Grab the name lock and insert the placeholder*/
+ if (lock_table_names(thd, tables))
+ goto end;
+
+ /* Convert the placeholder to a real table */
+ if (reopen_name_locked_table(thd, tables, TRUE))
+ {
+ unlock_table_name(thd, tables);
+ goto end;
+ }
}
table= tables->table;
@@ -462,6 +483,26 @@ bool mysql_create_or_drop_trigger(THD *thd, TABLE_LIST *tables, bool create)
table->triggers->create_trigger(thd, tables, &stmt_query):
table->triggers->drop_trigger(thd, tables, &stmt_query));
+ /* Under LOCK TABLES we must reopen the table to activate the trigger. */
+ if (!result && thd->locked_tables)
+ {
+ /* Make table suitable for reopening */
+ close_data_files_and_morph_locks(thd, tables->db, tables->table_name);
+ thd->in_lock_tables= 1;
+ if (reopen_tables(thd, 1, 1))
+ {
+ /* To be safe remove this table from the set of LOCKED TABLES */
+ unlink_open_table(thd, tables->table, FALSE);
+
+ /*
+ Ignore reopen_tables errors for now. It's better not leave master/slave
+ in a inconsistent state.
+ */
+ thd->clear_error();
+ }
+ thd->in_lock_tables= 0;
+ }
+
end:
if (!result)
@@ -470,7 +511,9 @@ end:
}
VOID(pthread_mutex_unlock(&LOCK_open));
- start_waiting_global_read_lock(thd);
+
+ if (need_start_waiting)
+ start_waiting_global_read_lock(thd);
if (!result)
send_ok(thd);
@@ -479,29 +522,28 @@ end:
}
-/*
+/**
Create trigger for table.
- SYNOPSIS
- create_trigger()
- thd - current thread context (including trigger definition in
- LEX)
- tables - table list containing one open table for which the
- trigger is created.
- stmt_query - [OUT] after successful return, this string contains
- well-formed statement for creating this trigger.
+ @param thd current thread context (including trigger definition in
+ LEX)
+ @param tables table list containing one open table for which the
+ trigger is created.
+ @param[out] stmt_query after successful return, this string contains
+ well-formed statement for creation this trigger.
- NOTE
+ @note
- Assumes that trigger name is fully qualified.
- NULL-string means the following LEX_STRING instance:
- { str = 0; length = 0 }.
+ { str = 0; length = 0 }.
- In other words, definer_user and definer_host should contain
- simultaneously NULL-strings (non-SUID/old trigger) or valid strings
- (SUID/new trigger).
+ simultaneously NULL-strings (non-SUID/old trigger) or valid strings
+ (SUID/new trigger).
- RETURN VALUE
- False - success
- True - error
+ @retval
+ False success
+ @retval
+ True error
*/
bool Table_triggers_list::create_trigger(THD *thd, TABLE_LIST *tables,
String *stmt_query)
@@ -767,19 +809,18 @@ err_with_cleanup:
}
-/*
- Deletes the .TRG file for a table
-
- SYNOPSIS
- rm_trigger_file()
- path - char buffer of size FN_REFLEN to be used
- for constructing path to .TRG file.
- db - table's database name
- table_name - table's name
-
- RETURN VALUE
- False - success
- True - error
+/**
+ Deletes the .TRG file for a table.
+
+ @param path char buffer of size FN_REFLEN to be used
+ for constructing path to .TRG file.
+ @param db table's database name
+ @param table_name table's name
+
+ @retval
+ False success
+ @retval
+ True error
*/
static bool rm_trigger_file(char *path, const char *db,
@@ -790,19 +831,18 @@ static bool rm_trigger_file(char *path, const char *db,
}
-/*
- Deletes the .TRN file for a trigger
-
- SYNOPSIS
- rm_trigname_file()
- path - char buffer of size FN_REFLEN to be used
- for constructing path to .TRN file.
- db - trigger's database name
- table_name - trigger's name
-
- RETURN VALUE
- False - success
- True - error
+/**
+ Deletes the .TRN file for a trigger.
+
+ @param path char buffer of size FN_REFLEN to be used
+ for constructing path to .TRN file.
+ @param db trigger's database name
+ @param table_name trigger's name
+
+ @retval
+ False success
+ @retval
+ True error
*/
static bool rm_trigname_file(char *path, const char *db,
@@ -813,17 +853,16 @@ static bool rm_trigname_file(char *path, const char *db,
}
-/*
+/**
Helper function that saves .TRG file for Table_triggers_list object.
- SYNOPSIS
- save_trigger_file()
- triggers Table_triggers_list object for which file should be saved
- db Name of database for subject table
- table_name Name of subject table
+ @param triggers Table_triggers_list object for which file should be saved
+ @param db Name of database for subject table
+ @param table_name Name of subject table
- RETURN VALUE
+ @retval
FALSE Success
+ @retval
TRUE Error
*/
@@ -842,21 +881,26 @@ static bool save_trigger_file(Table_triggers_list *triggers, const char *db,
}
-/*
+/**
Drop trigger for table.
- SYNOPSIS
- drop_trigger()
- thd - current thread context
- (including trigger definition in LEX)
- tables - table list containing one open table for which trigger
- is dropped.
- stmt_query - [OUT] after successful return, this string contains
- well-formed statement for deleting this trigger.
-
- RETURN VALUE
- False - success
- True - error
+ @param thd current thread context
+ (including trigger definition in LEX)
+ @param tables table list containing one open table for which trigger
+ is dropped.
+ @param[out] stmt_query after successful return, this string contains
+ well-formed statement for creation this trigger.
+
+ @todo
+ Probably instead of removing .TRG file we should move
+ to archive directory but this should be done as part of
+ parse_file.cc functionality (because we will need it
+ elsewhere).
+
+ @retval
+ False success
+ @retval
+ True error
*/
bool Table_triggers_list::drop_trigger(THD *thd, TABLE_LIST *tables,
String *stmt_query)
@@ -939,18 +983,17 @@ Table_triggers_list::~Table_triggers_list()
}
-/*
+/**
Prepare array of Field objects referencing to TABLE::record[1] instead
of record[0] (they will represent OLD.* row values in ON UPDATE trigger
and in ON DELETE trigger which will be called during REPLACE execution).
- SYNOPSIS
- prepare_record1_accessors()
- table - pointer to TABLE object for which we are creating fields.
+ @param table pointer to TABLE object for which we are creating fields.
- RETURN VALUE
- False - success
- True - error
+ @retval
+ False success
+ @retval
+ True error
*/
bool Table_triggers_list::prepare_record1_accessors(TABLE *table)
{
@@ -979,12 +1022,10 @@ bool Table_triggers_list::prepare_record1_accessors(TABLE *table)
}
-/*
+/**
Adjust Table_triggers_list with new TABLE pointer.
- SYNOPSIS
- set_table()
- new_table - new pointer to TABLE instance
+ @param new_table new pointer to TABLE instance
*/
void Table_triggers_list::set_table(TABLE *new_table)
@@ -998,20 +1039,26 @@ void Table_triggers_list::set_table(TABLE *new_table)
}
-/*
+/**
Check whenever .TRG file for table exist and load all triggers it contains.
- SYNOPSIS
- check_n_load()
- thd - current thread context
- db - table's database name
- table_name - table's name
- table - pointer to table object
- names_only - stop after loading trigger names
-
- RETURN VALUE
- False - success
- True - error
+ @param thd current thread context
+ @param db table's database name
+ @param table_name table's name
+ @param table pointer to table object
+ @param names_only stop after loading trigger names
+
+ @todo
+ A lot of things to do here e.g. how about other funcs and being
+ more paranoical ?
+
+ @todo
+ This could be avoided if there is no triggers for UPDATE and DELETE.
+
+ @retval
+ False success
+ @retval
+ True error
*/
bool Table_triggers_list::check_n_load(THD *thd, const char *db,
@@ -1394,24 +1441,23 @@ err_with_lex_cleanup:
}
-/*
- Obtains and returns trigger metadata
-
- SYNOPSIS
- get_trigger_info()
- thd - current thread context
- event - trigger event type
- time_type - trigger action time
- name - returns name of trigger
- stmt - returns statement of trigger
- sql_mode - returns sql_mode of trigger
- definer_user - returns definer/creator of trigger. The caller is
- responsible to allocate enough space for storing definer
- information.
-
- RETURN VALUE
- False - success
- True - error
+/**
+ Obtains and returns trigger metadata.
+
+ @param thd current thread context
+ @param event trigger event type
+ @param time_type trigger action time
+ @param trigger_name returns name of trigger
+ @param trigger_stmt returns statement of trigger
+ @param sql_mode returns sql_mode of trigger
+ @param definer returns definer/creator of trigger. The caller is
+ responsible to allocate enough space for storing
+ definer information.
+
+ @retval
+ False success
+ @retval
+ True error
*/
bool Table_triggers_list::get_trigger_info(THD *thd, trg_event_type event,
@@ -1577,21 +1623,20 @@ bool add_table_for_trigger(THD *thd,
}
-/*
+/**
Drop all triggers for table.
- SYNOPSIS
- drop_all_triggers()
- thd - current thread context
- db - schema for table
- name - name for table
+ @param thd current thread context
+ @param db schema for table
+ @param name name for table
- NOTE
+ @note
The calling thread should hold the LOCK_open mutex;
- RETURN VALUE
- False - success
- True - error
+ @retval
+ False success
+ @retval
+ True error
*/
bool Table_triggers_list::drop_all_triggers(THD *thd, char *db, char *name)
@@ -1641,19 +1686,18 @@ end:
}
-/*
+/**
Update .TRG file after renaming triggers' subject table
(change name of table in triggers' definitions).
- SYNOPSIS
- change_table_name_in_triggers()
- thd Thread context
- db_name Database of subject table
- old_table_name Old subject table's name
- new_table_name New subject table's name
+ @param thd Thread context
+ @param db_name Database of subject table
+ @param old_table_name Old subject table's name
+ @param new_table_name New subject table's name
- RETURN VALUE
+ @retval
FALSE Success
+ @retval
TRUE Failure
*/
@@ -1723,21 +1767,20 @@ Table_triggers_list::change_table_name_in_triggers(THD *thd,
}
-/*
- Iterate though Table_triggers_list::names_list list and update .TRN files
- after renaming triggers' subject table.
+/**
+ Iterate though Table_triggers_list::names_list list and update
+ .TRN files after renaming triggers' subject table.
- SYNOPSIS
- change_table_name_in_trignames()
- db_name Database of subject table
- new_table_name New subject table's name
- stopper Pointer to Table_triggers_list::names_list at
- which we should stop updating.
+ @param db_name Database of subject table
+ @param new_table_name New subject table's name
+ @param stopper Pointer to Table_triggers_list::names_list at
+ which we should stop updating.
- RETURN VALUE
+ @retval
0 Success
+ @retval
non-0 Failure, pointer to Table_triggers_list::names_list element
- for which update failed.
+ for which update failed.
*/
LEX_STRING*
@@ -1771,7 +1814,7 @@ Table_triggers_list::change_table_name_in_trignames(const char *db_name,
/**
- @brief Update .TRG and .TRN files after renaming triggers' subject table.
+ Update .TRG and .TRN files after renaming triggers' subject table.
@param[in,out] thd Thread context
@param[in] db Old database of subject table
@@ -1933,19 +1976,17 @@ bool Table_triggers_list::process_triggers(THD *thd,
}
-/*
- Mark fields of subject table which we read/set in its triggers as such.
-
- SYNOPSIS
- mark_fields_used()
- thd Current thread context
- event Type of event triggers for which we are going to ins
-
- DESCRIPTION
- This method marks fields of subject table which are read/set in its
- triggers as such (by properly updating TABLE::read_set/write_set)
- and thus informs handler that values for these fields should be
- retrieved/stored during execution of statement.
+/**
+ Mark fields of subject table which we read/set in its triggers
+ as such.
+
+ This method marks fields of subject table which are read/set in its
+ triggers as such (by properly updating TABLE::read_set/write_set)
+ and thus informs handler that values for these fields should be
+ retrieved/stored during execution of statement.
+
+ @param thd Current thread context
+ @param event Type of event triggers for which we are going to inspect
*/
void Table_triggers_list::mark_fields_used(trg_event_type event)
@@ -1971,23 +2012,23 @@ void Table_triggers_list::mark_fields_used(trg_event_type event)
}
-/*
- Trigger BUG#14090 compatibility hook
+/**
+ Trigger BUG#14090 compatibility hook.
- SYNOPSIS
- Handle_old_incorrect_sql_modes_hook::process_unknown_string()
- unknown_key [in/out] reference on the line with unknown
- parameter and the parsing point
- base [in] base address for parameter writing (structure
- like TABLE)
- mem_root [in] MEM_ROOT for parameters allocation
- end [in] the end of the configuration
+ @param[in,out] unknown_key reference on the line with unknown
+ parameter and the parsing point
+ @param[in] base base address for parameter writing
+ (structure like TABLE)
+ @param[in] mem_root MEM_ROOT for parameters allocation
+ @param[in] end the end of the configuration
- NOTE: this hook process back compatibility for incorrectly written
- sql_modes parameter (see BUG#14090).
+ @note
+ NOTE: this hook process back compatibility for incorrectly written
+ sql_modes parameter (see BUG#14090).
- RETURN
+ @retval
FALSE OK
+ @retval
TRUE Error
*/
@@ -2029,13 +2070,12 @@ Handle_old_incorrect_sql_modes_hook::process_unknown_string(char *&unknown_key,
DBUG_RETURN(FALSE);
}
-/*
+#define INVALID_TRIGGER_TABLE_LENGTH 15
+
+/**
Trigger BUG#15921 compatibility hook. For details see
Handle_old_incorrect_sql_modes_hook::process_unknown_string().
*/
-
-#define INVALID_TRIGGER_TABLE_LENGTH 15
-
bool
Handle_old_incorrect_trigger_table_hook::
process_unknown_string(char *&unknown_key, uchar* base, MEM_ROOT *mem_root,
@@ -2074,9 +2114,9 @@ process_unknown_string(char *&unknown_key, uchar* base, MEM_ROOT *mem_root,
/**
Contruct path to TRN-file.
- @param[in] thd Thread context.
- @param[in] trg_name Trigger name.
- @param[out] trn_path Variable to store constructed path
+ @param thd[in] Thread context.
+ @param trg_name[in] Trigger name.
+ @param trn_path[out] Variable to store constructed path
*/
void build_trn_path(THD *thd, const sp_name *trg_name, LEX_STRING *trn_path)
@@ -2109,10 +2149,10 @@ bool check_trn_exists(const LEX_STRING *trn_path)
/**
Retrieve table name for given trigger.
- @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.
+ @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.
@return Error status.
@retval FALSE on success.
diff --git a/sql/sql_trigger.h b/sql/sql_trigger.h
index 8f6b08c927f..1b0edf6bea8 100644
--- a/sql/sql_trigger.h
+++ b/sql/sql_trigger.h
@@ -14,7 +14,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-/*
+/**
This class holds all information about triggers of table.
QQ: Will it be merged into TABLE in the future ?
@@ -22,20 +22,20 @@
class Table_triggers_list: public Sql_alloc
{
- /* Triggers as SPs grouped by event, action_time */
+ /** Triggers as SPs grouped by event, action_time */
sp_head *bodies[TRG_EVENT_MAX][TRG_ACTION_MAX];
- /*
+ /**
Heads of the lists linking items for all fields used in triggers
grouped by event and action_time.
*/
Item_trigger_field *trigger_fields[TRG_EVENT_MAX][TRG_ACTION_MAX];
- /*
+ /**
Copy of TABLE::Field array with field pointers set to TABLE::record[1]
buffer instead of TABLE::record[0] (used for OLD values in on UPDATE
trigger and DELETE trigger when it is called for REPLACE).
*/
Field **record1_field;
- /*
+ /**
During execution of trigger new_field and old_field should point to the
array of fields representing new or old version of row correspondingly
(so it can point to TABLE::field or to Tale_triggers_list::record1_field)
@@ -45,30 +45,30 @@ class Table_triggers_list: public Sql_alloc
/* TABLE instance for which this triggers list object was created */
TABLE *trigger_table;
- /*
+ /**
Names of triggers.
Should correspond to order of triggers on definitions_list,
used in CREATE/DROP TRIGGER for looking up trigger by name.
*/
List<LEX_STRING> names_list;
- /*
+ /**
List of "ON table_name" parts in trigger definitions, used for
updating trigger definitions during RENAME TABLE.
*/
List<LEX_STRING> on_table_names_list;
- /*
+ /**
Grant information for each trigger (pair: subject table, trigger definer).
*/
GRANT_INFO subject_table_grants[TRG_EVENT_MAX][TRG_ACTION_MAX];
public:
- /*
+ /**
Field responsible for storing triggers definitions in file.
It have to be public because we are using it directly from parser.
*/
List<LEX_STRING> definitions_list;
- /*
+ /**
List of sql modes for triggers
*/
List<ulonglong> definition_modes_list;
diff --git a/sql/sql_udf.cc b/sql/sql_udf.cc
index 1076772d598..30e8829d764 100644
--- a/sql/sql_udf.cc
+++ b/sql/sql_udf.cc
@@ -135,6 +135,7 @@ void udf_init()
initialized = 1;
new_thd->thread_stack= (char*) &new_thd;
new_thd->store_globals();
+ lex_start(new_thd);
new_thd->set_db(db, sizeof(db)-1);
bzero((uchar*) &tables,sizeof(tables));
@@ -393,7 +394,12 @@ int mysql_create_function(THD *thd,udf_func *udf)
if (!initialized)
{
- my_message(ER_OUT_OF_RESOURCES, ER(ER_OUT_OF_RESOURCES), MYF(0));
+ if (opt_noacl)
+ my_error(ER_CANT_INITIALIZE_UDF, MYF(0),
+ udf->name.str,
+ "UDFs are unavailable with the --skip-grant-tables option");
+ else
+ my_message(ER_OUT_OF_RESOURCES, ER(ER_OUT_OF_RESOURCES), MYF(0));
DBUG_RETURN(1);
}
@@ -516,7 +522,10 @@ int mysql_drop_function(THD *thd,const LEX_STRING *udf_name)
if (!initialized)
{
- my_message(ER_OUT_OF_RESOURCES, ER(ER_OUT_OF_RESOURCES), MYF(0));
+ if (opt_noacl)
+ my_error(ER_FUNCTION_NOT_DEFINED, MYF(0), udf_name->str);
+ else
+ my_message(ER_OUT_OF_RESOURCES, ER(ER_OUT_OF_RESOURCES), MYF(0));
DBUG_RETURN(1);
}
diff --git a/sql/sql_union.cc b/sql/sql_union.cc
index 5da4b97cc5d..5f7e3c5b620 100644
--- a/sql/sql_union.cc
+++ b/sql/sql_union.cc
@@ -58,7 +58,7 @@ bool select_union::send_data(List<Item> &values)
return 0;
}
fill_record(thd, table->field, values, 1);
- if (thd->net.report_error)
+ if (thd->is_error())
return 1;
if ((error= table->file->ha_write_row(table->record[0])))
@@ -440,10 +440,10 @@ bool st_select_lex_unit::exec()
{
item->assigned(0); // We will reinit & rexecute unit
item->reset();
- table->file->delete_all_rows();
+ table->file->ha_delete_all_rows();
}
/* re-enabling indexes for next subselect iteration */
- if (union_distinct && table->file->enable_indexes(HA_KEY_SWITCH_ALL))
+ if (union_distinct && table->file->ha_enable_indexes(HA_KEY_SWITCH_ALL))
{
DBUG_ASSERT(0);
}
@@ -485,7 +485,7 @@ bool st_select_lex_unit::exec()
sl->join->exec();
if (sl == union_distinct)
{
- if (table->file->disable_indexes(HA_KEY_SWITCH_ALL))
+ if (table->file->ha_disable_indexes(HA_KEY_SWITCH_ALL))
DBUG_RETURN(TRUE);
table->no_keyread=1;
}
diff --git a/sql/sql_update.cc b/sql/sql_update.cc
index 4071bb86c90..4d075e3308d 100644
--- a/sql/sql_update.cc
+++ b/sql/sql_update.cc
@@ -84,7 +84,7 @@ static bool check_fields(THD *thd, List<Item> &items)
/**
- @brief Re-read record if more columns are needed for error message.
+ Re-read record if more columns are needed for error message.
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
@@ -203,6 +203,7 @@ int mysql_update(THD *thd,
bool need_reopen;
ulonglong id;
List<Item> all_fields;
+ THD::killed_state killed_status= THD::NOT_KILLED;
DBUG_ENTER("mysql_update");
for ( ; ; )
@@ -231,7 +232,7 @@ int mysql_update(THD *thd,
mysql_handle_derived(thd->lex, &mysql_derived_filling)))
DBUG_RETURN(1);
- thd->proc_info="init";
+ thd_proc_info(thd, "init");
table= table_list->table;
/* Calculate "table->covering_keys" based on the WHERE */
@@ -460,7 +461,7 @@ int mysql_update(THD *thd,
else
init_read_record_idx(&info, thd, table, 1, used_index);
- thd->proc_info="Searching rows for update";
+ thd_proc_info(thd, "Searching rows for update");
ha_rows tmp_limit= limit;
while (!(error=info.read_record(&info)) && !thd->killed)
@@ -525,9 +526,11 @@ int mysql_update(THD *thd,
init_read_record(&info,thd,table,select,0,1);
updated= found= 0;
- thd->count_cuted_fields= CHECK_FIELD_WARN; /* calc cuted fields */
+ /* Generate an error when trying to set a NOT NULL field to NULL. */
+ thd->count_cuted_fields= ignore ? CHECK_FIELD_WARN
+ : CHECK_FIELD_ERROR_FOR_NULL;
thd->cuted_fields=0L;
- thd->proc_info="Updating";
+ thd_proc_info(thd, "Updating");
transactional_table= table->file->has_transactions();
thd->abort_on_warning= test(!ignore &&
@@ -622,9 +625,9 @@ int mysql_update(THD *thd,
call then it should be included in the count of dup_key_found
and error should be set to 0 (only if these errors are ignored).
*/
- error= table->file->bulk_update_row(table->record[1],
- table->record[0],
- &dup_key_found);
+ error= table->file->ha_bulk_update_row(table->record[1],
+ table->record[0],
+ &dup_key_found);
limit+= dup_key_found;
updated-= dup_key_found;
}
@@ -679,7 +682,7 @@ int mysql_update(THD *thd,
*/
if (will_batch &&
((error= table->file->exec_bulk_update(&dup_key_found)) ||
- !dup_key_found))
+ dup_key_found))
{
if (error)
{
@@ -714,45 +717,25 @@ int mysql_update(THD *thd,
thd->row_count++;
}
dup_key_found= 0;
-
- if (!transactional_table && updated > 0)
- thd->transaction.stmt.modified_non_trans_table= TRUE;
-
-
/*
- todo bug#27571: to avoid asynchronization of `error' and
- `error_code' of binlog event constructor
-
- The concept, which is a bit different for insert(!), is to
- replace `error' assignment with the following lines
-
- killed_status= thd->killed; // get the status of the volatile
-
- Notice: thd->killed is type of "state" whereas the lhs has
- "status" the suffix which translates according to WordNet: a state
- at a particular time - at the time of the end of per-row loop in
- our case. Binlogging ops are conducted with the status.
-
- error= (killed_status == THD::NOT_KILLED)? error : 1;
-
- which applies to most mysql_$query functions.
- Event's constructor will accept `killed_status' as an argument:
-
- Query_log_event qinfo(..., killed_status);
-
- thd->killed might be changed after killed_status had got cached and this
- won't affect binlogging event but other effects remain.
-
- Open issue: In a case the error happened not because of KILLED -
- and then KILLED was caught later still within the loop - we shall
- do something to avoid binlogging of incorrect ER_SERVER_SHUTDOWN
- error_code.
+ Caching the killed status to pass as the arg to query event constuctor;
+ The cached value can not change whereas the killed status can
+ (externally) since this point and change of the latter won't affect
+ binlogging.
+ It's assumed that if an error was set in combination with an effective
+ killed status then the error is due to killing.
*/
-
- if (thd->killed && !error)
- error= 1; // Aborted
- else if (will_batch &&
- (loc_error= table->file->exec_bulk_update(&dup_key_found)))
+ killed_status= thd->killed; // get the status of the volatile
+ // simulated killing after the loop must be ineffective for binlogging
+ DBUG_EXECUTE_IF("simulate_kill_bug27571",
+ {
+ thd->killed= THD::KILL_QUERY;
+ };);
+ error= (killed_status == THD::NOT_KILLED)? error : 1;
+
+ if (error &&
+ will_batch &&
+ (loc_error= table->file->exec_bulk_update(&dup_key_found)))
/*
An error has occurred when a batched update was performed and returned
an error indication. It cannot be an allowed duplicate key error since
@@ -774,9 +757,13 @@ int mysql_update(THD *thd,
if (will_batch)
table->file->end_bulk_update();
table->file->try_semi_consistent_read(0);
+
+ if (!transactional_table && updated > 0)
+ thd->transaction.stmt.modified_non_trans_table= TRUE;
+
end_read_record(&info);
delete select;
- thd->proc_info= "end";
+ thd_proc_info(thd, "end");
VOID(table->file->extra(HA_EXTRA_NO_IGNORE_DUP_KEY));
/*
@@ -797,7 +784,7 @@ int mysql_update(THD *thd,
Sometimes we want to binlog even if we updated no rows, in case user used
it to be sure master and slave are in same state.
*/
- if ((error < 0) || (updated && !transactional_table))
+ if ((error < 0) || thd->transaction.stmt.modified_non_trans_table)
{
if (mysql_bin_log.is_open())
{
@@ -805,7 +792,7 @@ int mysql_update(THD *thd,
thd->clear_error();
if (thd->binlog_query(THD::ROW_QUERY_TYPE,
thd->query, thd->query_length,
- transactional_table, FALSE) &&
+ transactional_table, FALSE, killed_status) &&
transactional_table)
{
error=1; // Rollback update
@@ -844,7 +831,7 @@ int mysql_update(THD *thd,
}
thd->count_cuted_fields= CHECK_FIELD_IGNORE; /* calc cuted fields */
thd->abort_on_warning= 0;
- DBUG_RETURN((error >= 0 || thd->net.report_error) ? 1 : 0);
+ DBUG_RETURN((error >= 0 || thd->is_error()) ? 1 : 0);
err:
delete select;
@@ -1193,8 +1180,8 @@ bool mysql_multi_update(THD *thd,
OPTION_SETUP_TABLES_DONE,
result, unit, select_lex);
DBUG_PRINT("info",("res: %d report_error: %d", res,
- thd->net.report_error));
- res|= thd->net.report_error;
+ (int) thd->is_error()));
+ res|= thd->is_error();
if (unlikely(res))
{
/* If we had a another error reported earlier then this will be ignored */
@@ -1215,8 +1202,8 @@ multi_update::multi_update(TABLE_LIST *table_list,
:all_tables(table_list), leaves(leaves_list), update_tables(0),
tmp_tables(0), updated(0), found(0), fields(field_list),
values(value_list), table_count(0), copy_field(0),
- handle_duplicates(handle_duplicates_arg), do_update(1), trans_safe(0),
- transactional_tables(1), ignore(ignore_arg)
+ handle_duplicates(handle_duplicates_arg), do_update(1), trans_safe(1),
+ transactional_tables(1), ignore(ignore_arg), error_handled(0)
{}
@@ -1239,7 +1226,7 @@ int multi_update::prepare(List<Item> &not_used_values,
thd->count_cuted_fields= CHECK_FIELD_WARN;
thd->cuted_fields=0L;
- thd->proc_info="updating main table";
+ thd_proc_info(thd, "updating main table");
tables_to_update= get_table_map(fields);
@@ -1418,7 +1405,6 @@ multi_update::initialize_tables(JOIN *join)
if ((thd->options & OPTION_SAFE_UPDATES) && error_if_full_join(join))
DBUG_RETURN(1);
main_table=join->join_tab->table;
- trans_safe= transactional_tables= main_table->file->has_transactions();
table_to_update= 0;
/* Any update has at least one pair (field, value) */
@@ -1712,13 +1698,19 @@ void multi_update::send_error(uint errcode,const char *err)
{
/* First send error what ever it is ... */
my_error(errcode, MYF(0), err);
+}
- /* If nothing updated return */
- if (updated == 0) /* the counter might be reset in send_eof */
- return; /* and then the query has been binlogged */
+
+void multi_update::abort()
+{
+ /* the error was handled or nothing deleted and no side effects return */
+ if (error_handled ||
+ !thd->transaction.stmt.modified_non_trans_table && !updated)
+ return;
/* Something already updated so we have to invalidate cache */
- query_cache_invalidate3(thd, update_tables, 1);
+ if (updated)
+ query_cache_invalidate3(thd, update_tables, 1);
/*
If all tables that has been updated are trans safe then just do rollback.
If not attempt to do remaining updates.
@@ -1739,7 +1731,7 @@ void multi_update::send_error(uint errcode,const char *err)
todo/fixme: do_update() is never called with the arg 1.
should it change the signature to become argless?
*/
- VOID(do_updates(0));
+ VOID(do_updates());
}
}
if (thd->transaction.stmt.modified_non_trans_table)
@@ -1750,12 +1742,16 @@ void multi_update::send_error(uint errcode,const char *err)
*/
if (mysql_bin_log.is_open())
{
+ /*
+ THD::killed status might not have been set ON at time of an error
+ got caught and if happens later the killed error is written
+ into repl event.
+ */
thd->binlog_query(THD::ROW_QUERY_TYPE,
thd->query, thd->query_length,
transactional_tables, FALSE);
}
- if (!trans_safe)
- thd->transaction.all.modified_non_trans_table= TRUE;
+ thd->transaction.all.modified_non_trans_table= TRUE;
}
DBUG_ASSERT(trans_safe || !updated || thd->transaction.stmt.modified_non_trans_table);
@@ -1766,7 +1762,7 @@ void multi_update::send_error(uint errcode,const char *err)
}
-int multi_update::do_updates(bool from_send_error)
+int multi_update::do_updates()
{
TABLE_LIST *cur_table;
int local_error= 0;
@@ -1913,7 +1909,6 @@ int multi_update::do_updates(bool from_send_error)
DBUG_RETURN(0);
err:
- if (!from_send_error)
{
thd->fatal_error();
prepare_record_for_error_message(local_error, table);
@@ -1947,12 +1942,21 @@ bool multi_update::send_eof()
{
char buff[STRING_BUFFER_USUAL_SIZE];
ulonglong id;
+ THD::killed_state killed_status= THD::NOT_KILLED;
DBUG_ENTER("multi_update::send_eof");
- thd->proc_info="updating reference tables";
+ thd_proc_info(thd, "updating reference tables");
- /* Does updates for the last n - 1 tables, returns 0 if ok */
- int local_error = (table_count) ? do_updates(0) : 0;
- thd->proc_info= "end";
+ /*
+ Does updates for the last n - 1 tables, returns 0 if ok;
+ error takes into account killed status gained in do_updates()
+ */
+ int local_error = (table_count) ? do_updates() : 0;
+ /*
+ if local_error is not set ON until after do_updates() then
+ later carried out killing should not affect binlogging.
+ */
+ killed_status= (local_error == 0)? THD::NOT_KILLED : thd->killed;
+ thd_proc_info(thd, "end");
/* We must invalidate the query cache before binlog writing and
ha_autocommit_... */
@@ -1978,11 +1982,9 @@ bool multi_update::send_eof()
{
if (local_error == 0)
thd->clear_error();
- else
- updated= 0; /* if there's an error binlog it here not in ::send_error */
if (thd->binlog_query(THD::ROW_QUERY_TYPE,
thd->query, thd->query_length,
- transactional_tables, FALSE) &&
+ transactional_tables, FALSE, killed_status) &&
trans_safe)
{
local_error= 1; // Rollback update
@@ -1991,6 +1993,8 @@ bool multi_update::send_eof()
if (thd->transaction.stmt.modified_non_trans_table)
thd->transaction.all.modified_non_trans_table= TRUE;
}
+ if (local_error != 0)
+ error_handled= TRUE; // to force early leave from ::send_error()
if (transactional_tables)
{
diff --git a/sql/sql_view.cc b/sql/sql_view.cc
index 56d50761d95..da301b37484 100644
--- a/sql/sql_view.cc
+++ b/sql/sql_view.cc
@@ -206,7 +206,7 @@ fill_defined_view_parts (THD *thd, TABLE_LIST *view)
/**
- @brief Creating/altering VIEW procedure
+ Creating/altering VIEW procedure
@param thd thread handler
@param views views to create
@@ -223,9 +223,6 @@ bool mysql_create_view(THD *thd, TABLE_LIST *views,
{
LEX *lex= thd->lex;
bool link_to_local;
-#ifndef NO_EMBEDDED_ACCESS_CHECKS
- bool definer_check_is_needed= mode != VIEW_ALTER || lex->definer;
-#endif
/* first table in list is target VIEW name => cut off it */
TABLE_LIST *view= lex->unlink_first_table(&link_to_local);
TABLE_LIST *tables= lex->query_tables;
@@ -280,7 +277,7 @@ bool mysql_create_view(THD *thd, TABLE_LIST *views,
- same as current user
- current user has SUPER_ACL
*/
- if (definer_check_is_needed &&
+ if (lex->definer &&
(strcmp(lex->definer->user.str, thd->security_ctx->priv_user) != 0 ||
my_strcasecmp(system_charset_info,
lex->definer->host.str,
@@ -607,10 +604,10 @@ bool mysql_create_view(THD *thd, TABLE_LIST *views,
DBUG_RETURN(0);
err:
- thd->proc_info= "end";
+ thd_proc_info(thd, "end");
lex->link_first_table_back(view, link_to_local);
unit->cleanup();
- DBUG_RETURN(res || thd->net.report_error);
+ DBUG_RETURN(res || thd->is_error());
}
@@ -672,7 +669,7 @@ static File_option view_parameters[]=
FILE_OPTIONS_STRING},
{{(char*) STRING_WITH_LEN("view_body_utf8")},
my_offsetof(TABLE_LIST, view_body_utf8),
- FILE_OPTIONS_STRING},
+ FILE_OPTIONS_ESTRING},
{{NullS, 0}, 0,
FILE_OPTIONS_STRING}
};
@@ -826,7 +823,7 @@ loop_out:
view_parameters + revision_number_position, 1,
&file_parser_dummy_hook))
{
- error= thd->net.report_error? -1 : 0;
+ error= thd->is_error() ? -1 : 0;
goto err;
}
}
@@ -889,7 +886,7 @@ loop_out:
if (sql_create_definition_file(&dir, &file, view_file_type,
(uchar*)view, view_parameters, num_view_backups))
{
- error= thd->net.report_error? -1 : 1;
+ error= thd->is_error() ? -1 : 1;
goto err;
}
DBUG_RETURN(0);
@@ -953,6 +950,12 @@ bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table,
DBUG_RETURN(0);
}
+ if (table->index_hints && table->index_hints->elements)
+ {
+ my_error(ER_WRONG_USAGE, MYF(0), "index hints", "VIEW");
+ DBUG_RETURN(TRUE);
+ }
+
/* check loop via view definition */
for (TABLE_LIST *precedent= table->referencing_view;
precedent;
@@ -1462,6 +1465,8 @@ bool mysql_drop_view(THD *thd, TABLE_LIST *views, enum_drop_mode drop_mode)
char *wrong_object_db= NULL, *wrong_object_name= NULL;
bool error= FALSE;
enum legacy_db_type not_used;
+ bool some_views_deleted= FALSE;
+ bool something_wrong= FALSE;
DBUG_ENTER("mysql_drop_view");
VOID(pthread_mutex_lock(&LOCK_open));
@@ -1503,6 +1508,8 @@ bool mysql_drop_view(THD *thd, TABLE_LIST *views, enum_drop_mode drop_mode)
if (my_delete(path, MYF(MY_WME)))
error= TRUE;
+ some_views_deleted= TRUE;
+
/*
For a view, there is only one table_share object which should never
be used outside of LOCK_open
@@ -1520,29 +1527,32 @@ bool mysql_drop_view(THD *thd, TABLE_LIST *views, enum_drop_mode drop_mode)
sp_cache_invalidate();
}
- if (error)
- {
- VOID(pthread_mutex_unlock(&LOCK_open));
- DBUG_RETURN(TRUE);
- }
if (wrong_object_name)
{
- VOID(pthread_mutex_unlock(&LOCK_open));
my_error(ER_WRONG_OBJECT, MYF(0), wrong_object_db, wrong_object_name,
"VIEW");
- DBUG_RETURN(TRUE);
}
if (non_existant_views.length())
{
- VOID(pthread_mutex_unlock(&LOCK_open));
my_error(ER_BAD_TABLE_ERROR, MYF(0), non_existant_views.c_ptr());
- DBUG_RETURN(TRUE);
}
- write_bin_log(thd, TRUE, thd->query, thd->query_length);
+ something_wrong= error || wrong_object_name || non_existant_views.length();
+ if (some_views_deleted || !something_wrong)
+ {
+ /* if something goes wrong, bin-log with possible error code,
+ otherwise bin-log with error code cleared.
+ */
+ write_bin_log(thd, !something_wrong, thd->query, thd->query_length);
+ }
- send_ok(thd);
VOID(pthread_mutex_unlock(&LOCK_open));
+
+ if (something_wrong)
+ {
+ DBUG_RETURN(TRUE);
+ }
+ send_ok(thd);
DBUG_RETURN(FALSE);
}
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index 30e62c5d7b5..c98228424a5 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 are 280 shift/reduce conflicts.
+ Currently there are 169 shift/reduce conflicts.
We should not introduce new conflicts any more.
*/
-%expect 280
+%expect 169
/*
Comments for TOKENS.
@@ -568,6 +568,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
%token BIT_SYM /* MYSQL-FUNC */
%token BIT_XOR /* MYSQL-FUNC */
%token BLOB_SYM /* SQL-2003-R */
+%token BLOCK_SYM
%token BOOLEAN_SYM /* SQL-2003-R */
%token BOOL_SYM
%token BOTH /* SQL-2003-R */
@@ -608,10 +609,12 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
%token CONSISTENT_SYM
%token CONSTRAINT /* SQL-2003-R */
%token CONTAINS_SYM /* SQL-2003-N */
+%token CONTEXT_SYM
%token CONTINUE_SYM /* SQL-2003-R */
%token CONTRIBUTORS_SYM
%token CONVERT_SYM /* SQL-2003-N */
%token COUNT_SYM /* SQL-2003-N */
+%token CPU_SYM
%token CREATE /* SQL-2003-R */
%token CROSS /* SQL-2003-R */
%token CUBE_SYM /* SQL-2003-R */
@@ -686,6 +689,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
%token EXTRACT_SYM /* SQL-2003-N */
%token FALSE_SYM /* SQL-2003-R */
%token FAST_SYM
+%token FAULTS_SYM
%token FETCH_SYM /* SQL-2003-R */
%token FILE_SYM
%token FIRST_SYM /* SQL-2003-N */
@@ -746,6 +750,8 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
%token INT_SYM /* SQL-2003-R */
%token INVOKER_SYM
%token IN_SYM /* SQL-2003-R */
+%token IO_SYM
+%token IPC_SYM
%token IS /* SQL-2003-R */
%token ISOLATION /* SQL-2003-R */
%token ISSUER_SYM
@@ -898,6 +904,8 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
%token PROCEDURE /* SQL-2003-R */
%token PROCESS
%token PROCESSLIST_SYM
+%token PROFILE_SYM
+%token PROFILES_SYM
%token PURGE
%token QUARTER_SYM
%token QUERY_SYM
@@ -973,6 +981,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
%token SOCKET_SYM
%token SONAME_SYM
%token SOUNDS_SYM
+%token SOURCE_SYM
%token SPATIAL_SYM
%token SPECIFIC_SYM /* SQL-2003-R */
%token SQLEXCEPTION_SYM /* SQL-2003-R */
@@ -1005,6 +1014,8 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
%token SUM_SYM /* SQL-2003-N */
%token SUPER_SYM
%token SUSPEND_SYM
+%token SWAPS_SYM
+%token SWITCHES_SYM
%token SYSDATE
%token TABLES
%token TABLESPACE
@@ -1157,7 +1168,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
variable variable_aux bool_pri
predicate bit_expr
table_wild simple_expr udf_expr
- expr_or_default set_expr_or_default interval_expr
+ expr_or_default set_expr_or_default
param_marker geometry_function
signed_literal now_or_signed_literal opt_escape
sp_opt_default
@@ -1193,7 +1204,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
%type <table_list>
join_table_list join_table
- table_factor table_ref
+ table_factor table_ref esc_table_ref
select_derived derived_table_list
%type <date_time_type> date_time_type;
@@ -1228,7 +1239,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
%type <variable> internal_variable_name
-%type <select_lex> subselect subselect_init
+%type <select_lex> subselect take_first_select
get_select_lex
%type <boolfunc2creator> comp_op
@@ -1284,7 +1295,9 @@ END_OF_INPUT
%type <NONE> call sp_proc_stmts sp_proc_stmts1 sp_proc_stmt
%type <NONE> sp_proc_stmt_statement sp_proc_stmt_return
%type <NONE> sp_proc_stmt_if
-%type <NONE> sp_labeled_control sp_proc_stmt_unlabeled sp_proc_stmt_leave
+%type <NONE> sp_labeled_control sp_proc_stmt_unlabeled
+%type <NONE> sp_labeled_block sp_unlabeled_block
+%type <NONE> sp_proc_stmt_leave
%type <NONE> sp_proc_stmt_iterate
%type <NONE> sp_proc_stmt_open sp_proc_stmt_fetch sp_proc_stmt_close
%type <NONE> case_stmt_specification simple_case_stmt searched_case_stmt
@@ -1945,6 +1958,8 @@ ev_sql_stmt_inner:
| sp_proc_stmt_return
| sp_proc_stmt_if
| case_stmt_specification
+ | sp_labeled_block
+ | sp_unlabeled_block
| sp_labeled_control
| sp_proc_stmt_unlabeled
| sp_proc_stmt_leave
@@ -2519,6 +2534,8 @@ sp_proc_stmt:
| sp_proc_stmt_return
| sp_proc_stmt_if
| case_stmt_specification
+ | sp_labeled_block
+ | sp_unlabeled_block
| sp_labeled_control
| sp_proc_stmt_unlabeled
| sp_proc_stmt_leave
@@ -2645,14 +2662,35 @@ sp_proc_stmt_leave:
sp_instr_jump *i;
uint ip= sp->instructions();
uint n;
+ /*
+ When jumping to a BEGIN-END block end, the target jump
+ points to the block hpop/cpop cleanup instructions,
+ so we should exclude the block context here.
+ When jumping to something else (i.e., SP_LAB_ITER),
+ there are no hpop/cpop at the jump destination,
+ so we should include the block context here for cleanup.
+ */
+ bool exclusive= (lab->type == SP_LAB_BEGIN);
- n= ctx->diff_handlers(lab->ctx, TRUE); /* Exclusive the dest. */
+ n= ctx->diff_handlers(lab->ctx, exclusive);
if (n)
- sp->add_instr(new sp_instr_hpop(ip++, ctx, n));
- n= ctx->diff_cursors(lab->ctx, TRUE); /* Exclusive the dest. */
+ {
+ sp_instr_hpop *hpop= new sp_instr_hpop(ip++, ctx, n);
+ if (hpop == NULL)
+ MYSQL_YYABORT;
+ sp->add_instr(hpop);
+ }
+ n= ctx->diff_cursors(lab->ctx, exclusive);
if (n)
- sp->add_instr(new sp_instr_cpop(ip++, ctx, n));
+ {
+ sp_instr_cpop *cpop= new sp_instr_cpop(ip++, ctx, n);
+ if (cpop == NULL)
+ MYSQL_YYABORT;
+ sp->add_instr(cpop);
+ }
i= new sp_instr_jump(ip, ctx);
+ if (i == NULL)
+ MYSQL_YYABORT;
sp->push_backpatch(i, lab); /* Jumping forward */
sp->add_instr(i);
}
@@ -2680,10 +2718,20 @@ sp_proc_stmt_iterate:
n= ctx->diff_handlers(lab->ctx, FALSE); /* Inclusive the dest. */
if (n)
- sp->add_instr(new sp_instr_hpop(ip++, ctx, n));
+ {
+ sp_instr_hpop *hpop= new sp_instr_hpop(ip++, ctx, n);
+ if (hpop == NULL)
+ MYSQL_YYABORT;
+ sp->add_instr(hpop);
+ }
n= ctx->diff_cursors(lab->ctx, FALSE); /* Inclusive the dest. */
if (n)
- sp->add_instr(new sp_instr_cpop(ip++, ctx, n));
+ {
+ sp_instr_cpop *cpop= new sp_instr_cpop(ip++, ctx, n);
+ if (cpop == NULL)
+ MYSQL_YYABORT;
+ sp->add_instr(cpop);
+ }
i= new sp_instr_jump(ip, ctx, lab->ip); /* Jump back */
sp->add_instr(i);
}
@@ -2967,19 +3015,17 @@ sp_labeled_control:
sp_unlabeled_control sp_opt_label
{
LEX *lex= Lex;
+ sp_label_t *lab= lex->spcont->pop_label();
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)
+ if (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());
+ lex->sphead->backpatch(lab);
}
;
@@ -2988,15 +3034,59 @@ sp_opt_label:
| label_ident { $$= $1; }
;
-sp_unlabeled_control:
+sp_labeled_block:
+ 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;
+ }
+
+ lab= lex->spcont->push_label($1.str,
+ lex->sphead->instructions());
+ lab->type= SP_LAB_BEGIN;
+ }
+ sp_block_content sp_opt_label
+ {
+ LEX *lex= Lex;
+ sp_label_t *lab= lex->spcont->pop_label();
+
+ if ($5.str)
+ {
+ if (my_strcasecmp(system_charset_info, $5.str, lab->name) != 0)
+ {
+ my_error(ER_SP_LABEL_MISMATCH, MYF(0), $5.str);
+ MYSQL_YYABORT;
+ }
+ }
+ }
+ ;
+
+sp_unlabeled_block:
+ { /* Unlabeled blocks get a secret label. */
+ LEX *lex= Lex;
+ uint ip= lex->sphead->instructions();
+ sp_label_t *lab= lex->spcont->push_label((char *)"", ip);
+ lab->type= SP_LAB_BEGIN;
+ }
+ sp_block_content
+ {
+ LEX *lex= Lex;
+ lex->spcont->pop_label();
+ }
+ ;
+
+sp_block_content:
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
@@ -3016,7 +3106,10 @@ sp_unlabeled_control:
$3.curs));
lex->spcont= ctx->pop_context();
}
- | LOOP_SYM
+ ;
+
+sp_unlabeled_control:
+ LOOP_SYM
sp_proc_stmts1 END LOOP_SYM
{
LEX *lex= Lex;
@@ -4704,7 +4797,7 @@ spatial_type:
| GEOMETRYCOLLECTION { $$= Field::GEOM_GEOMETRYCOLLECTION; }
| POINT_SYM
{
- Lex->length= (char*)"21";
+ Lex->length= (char*)"25";
$$= Field::GEOM_POINT;
}
| MULTIPOINT { $$= Field::GEOM_MULTIPOINT; }
@@ -5439,7 +5532,7 @@ alter_commands:
lex->no_write_to_binlog= $3;
lex->check_opt.init();
}
- opt_no_write_to_binlog opt_mi_check_type
+ opt_no_write_to_binlog
| ANALYZE_SYM PARTITION_SYM opt_no_write_to_binlog
all_or_alt_part_name_list
{
@@ -5448,7 +5541,6 @@ alter_commands:
lex->no_write_to_binlog= $3;
lex->check_opt.init();
}
- opt_mi_check_type
| CHECK_SYM PARTITION_SYM all_or_alt_part_name_list
{
LEX *lex= Lex;
@@ -5931,7 +6023,7 @@ analyze:
lex->no_write_to_binlog= $2;
lex->check_opt.init();
}
- table_list opt_mi_check_type
+ table_list
{}
;
@@ -5987,7 +6079,7 @@ optimize:
lex->no_write_to_binlog= $2;
lex->check_opt.init();
}
- table_list opt_mi_check_type
+ table_list
{}
;
@@ -6152,6 +6244,14 @@ select_paren:
my_parse_error(ER(ER_SYNTAX_ERROR));
MYSQL_YYABORT;
}
+ if (sel->linkage == UNION_TYPE &&
+ sel->olap != UNSPECIFIED_OLAP_TYPE &&
+ sel->master_unit()->fake_select_lex)
+ {
+ my_error(ER_WRONG_USAGE, MYF(0),
+ "CUBE/ROLLUP", "ORDER BY");
+ MYSQL_YYABORT;
+ }
/* select in braces, can't contain global parameters */
if (sel->master_unit()->fake_select_lex)
sel->master_unit()->global_parameters=
@@ -6323,6 +6423,12 @@ select_item:
MYSQL_YYABORT;
if ($4.str)
{
+ if (Lex->sql_command == SQLCOM_CREATE_VIEW &&
+ check_column_name($4.str))
+ {
+ my_error(ER_WRONG_COLUMN_NAME, MYF(0), $4.str);
+ MYSQL_YYABORT;
+ }
$2->is_autogenerated_name= FALSE;
$2->set_name($4.str, $4.length, system_charset_info);
}
@@ -6492,7 +6598,7 @@ bool_pri:
{ $$= (*$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:
@@ -6564,10 +6670,10 @@ bit_expr:
{ $$= 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 '+' INTERVAL_SYM expr interval %prec '+'
+ { $$= new Item_date_add_interval($1,$4,$5,0); }
+ | bit_expr '-' INTERVAL_SYM expr interval %prec '-'
+ { $$= new Item_date_add_interval($1,$4,$5,1); }
| bit_expr '*' bit_expr %prec '*'
{ $$= new Item_func_mul($1,$3); }
| bit_expr '/' bit_expr %prec '/'
@@ -6617,11 +6723,6 @@ all_or_any:
| ANY_SYM { $$ = 0; }
;
-interval_expr:
- INTERVAL_SYM expr %prec INTERVAL_SYM
- { $$=$2; }
- ;
-
simple_expr:
simple_ident
| function_call_keyword
@@ -6717,18 +6818,9 @@ simple_expr:
$$= new (YYTHD->mem_root) Item_insert_value(Lex->current_context(),
$3);
}
- | interval_expr interval '+' expr
+ | INTERVAL_SYM expr interval '+' expr %prec INTERVAL_SYM
/* 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));
- MYSQL_YYABORT;
- }
- $$= new (YYTHD->mem_root) Item_func_interval((Item_row *)$1);
- }
+ { $$= new (YYTHD->mem_root) Item_date_add_interval($5,$2,$3,0); }
;
/*
@@ -6745,6 +6837,7 @@ function_call_keyword:
| CURRENT_USER optional_braces
{
$$= new (YYTHD->mem_root) Item_func_current_user(Lex->current_context());
+ Lex->set_stmt_unsafe();
Lex->safe_to_cache_query= 0;
}
| DATE_SYM '(' expr ')'
@@ -6755,6 +6848,23 @@ function_call_keyword:
{ $$= new (YYTHD->mem_root) Item_func_hour($3); }
| INSERT '(' expr ',' expr ',' expr ',' expr ')'
{ $$= new (YYTHD->mem_root) Item_func_insert($3,$5,$7,$9); }
+ | INTERVAL_SYM '(' expr ',' expr ')' %prec INTERVAL_SYM
+ {
+ THD *thd= YYTHD;
+ List<Item> *list= new (thd->mem_root) List<Item>;
+ list->push_front($5);
+ list->push_front($3);
+ Item_row *item= new (thd->mem_root) Item_row(*list);
+ $$= new (thd->mem_root) Item_func_interval(item);
+ }
+ | INTERVAL_SYM '(' expr ',' expr ',' expr_list ')' %prec INTERVAL_SYM
+ {
+ THD *thd= YYTHD;
+ $7->push_front($5);
+ $7->push_front($3);
+ Item_row *item= new (thd->mem_root) Item_row(*$7);
+ $$= new (thd->mem_root) Item_func_interval(item);
+ }
| LEFT '(' expr ',' expr ')'
{ $$= new (YYTHD->mem_root) Item_func_left($3,$5); }
| MINUTE_SYM '(' expr ')'
@@ -6790,6 +6900,7 @@ function_call_keyword:
| USER '(' ')'
{
$$= new (YYTHD->mem_root) Item_func_user();
+ Lex->set_stmt_unsafe();
Lex->safe_to_cache_query=0;
}
| YEAR_SYM '(' expr ')'
@@ -6831,10 +6942,10 @@ function_call_nonkeyword:
$$= 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); }
+ | DATE_ADD_INTERVAL '(' expr ',' INTERVAL_SYM expr interval ')' %prec INTERVAL_SYM
+ { $$= new (YYTHD->mem_root) Item_date_add_interval($3,$6,$7,0); }
+ | DATE_SUB_INTERVAL '(' expr ',' INTERVAL_SYM expr interval ')' %prec INTERVAL_SYM
+ { $$= new (YYTHD->mem_root) Item_date_add_interval($3,$6,$7,1); }
| EXTRACT_SYM '(' interval FROM expr ')'
{ $$=new (YYTHD->mem_root) Item_extract( $3, $5); }
| GET_FORMAT '(' date_time_type ',' expr ')'
@@ -7434,10 +7545,22 @@ join_table_list:
derived_table_list { MYSQL_YYABORT_UNLESS($$=$1); }
;
+/*
+ The ODBC escape syntax for Outer Join is: '{' OJ join_table '}'
+ The parser does not define OJ as a token, any ident is accepted
+ instead in $2 (ident). Also, all productions from table_ref can
+ be escaped, not only join_table. Both syntax extensions are safe
+ and are ignored.
+*/
+esc_table_ref:
+ table_ref { $$=$1; }
+ | '{' ident table_ref '}' { $$=$3; }
+ ;
+
/* Warning - may return NULL in case of incomplete SELECT */
derived_table_list:
- table_ref { $$=$1; }
- | derived_table_list ',' table_ref
+ esc_table_ref { $$=$1; }
+ | derived_table_list ',' esc_table_ref
{
MYSQL_YYABORT_UNLESS($1 && ($$=$3));
}
@@ -7602,25 +7725,6 @@ table_factor:
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. */
- if (push_new_name_resolution_context(YYTHD, $3, $7))
- MYSQL_YYABORT;
-
- }
- expr '}'
- {
- LEX *lex= Lex;
- MYSQL_YYABORT_UNLESS($3 && $7);
- add_join_on($7,$10);
- Lex->pop_context();
- $7->outer_join|=JOIN_TYPE_LEFT;
- $$=$7;
- if (!($$= lex->current_select->nest_last_join(lex->thd)))
- MYSQL_YYABORT;
- }
| select_derived_init get_select_lex select_derived2
{
LEX *lex= Lex;
@@ -8029,7 +8133,8 @@ order_clause:
SELECT_LEX *sel= lex->current_select;
SELECT_LEX_UNIT *unit= sel-> master_unit();
if (sel->linkage != GLOBAL_OPTIONS_TYPE &&
- sel->olap != UNSPECIFIED_OLAP_TYPE)
+ sel->olap != UNSPECIFIED_OLAP_TYPE &&
+ (sel->linkage != UNION_TYPE || sel->braces))
{
my_error(ER_WRONG_USAGE, MYF(0),
"CUBE/ROLLUP", "ORDER BY");
@@ -8850,6 +8955,64 @@ opt_table_sym:
| TABLE_SYM
;
+opt_profile_defs:
+ /* empty */
+ | profile_defs;
+
+profile_defs:
+ profile_def
+ | profile_defs ',' profile_def;
+
+profile_def:
+ CPU_SYM
+ {
+ Lex->profile_options|= PROFILE_CPU;
+ }
+ | MEMORY_SYM
+ {
+ Lex->profile_options|= PROFILE_MEMORY;
+ }
+ | BLOCK_SYM IO_SYM
+ {
+ Lex->profile_options|= PROFILE_BLOCK_IO;
+ }
+ | CONTEXT_SYM SWITCHES_SYM
+ {
+ Lex->profile_options|= PROFILE_CONTEXT;
+ }
+ | PAGE_SYM FAULTS_SYM
+ {
+ Lex->profile_options|= PROFILE_PAGE_FAULTS;
+ }
+ | IPC_SYM
+ {
+ Lex->profile_options|= PROFILE_IPC;
+ }
+ | SWAPS_SYM
+ {
+ Lex->profile_options|= PROFILE_SWAPS;
+ }
+ | SOURCE_SYM
+ {
+ Lex->profile_options|= PROFILE_SOURCE;
+ }
+ | ALL
+ {
+ Lex->profile_options|= PROFILE_ALL;
+ }
+ ;
+
+opt_profile_args:
+ /* empty */
+ {
+ Lex->profile_query_id= 0;
+ }
+ | FOR_SYM QUERY_SYM NUM
+ {
+ Lex->profile_query_id= atoi($3.str);
+ }
+ ;
+
/* Show things */
show:
@@ -9020,6 +9183,15 @@ show_param:
{ Lex->sql_command = SQLCOM_SHOW_WARNS;}
| ERRORS opt_limit_clause_init
{ Lex->sql_command = SQLCOM_SHOW_ERRORS;}
+ | PROFILES_SYM
+ { Lex->sql_command = SQLCOM_SHOW_PROFILES; }
+ | PROFILE_SYM opt_profile_defs opt_profile_args opt_limit_clause_init
+ {
+ LEX *lex= Lex;
+ lex->sql_command= SQLCOM_SHOW_PROFILE;
+ if (prepare_schema_table(YYTHD, lex, NULL, SCH_PROFILES) != 0)
+ YYABORT;
+ }
| opt_var_type STATUS_SYM wild_and_where
{
LEX *lex= Lex;
@@ -9755,11 +9927,15 @@ literal:
String *str= tmp ?
tmp->quick_fix_field(), tmp->val_str((String*) 0) :
(String*) 0;
- $$= new Item_string(str ? str->ptr() : "",
+ $$= new Item_string(NULL, /* name will be set in select_item */
+ str ? str->ptr() : "",
str ? str->length() : 0,
$1);
- if ($$)
- ((Item_string *) $$)->set_repertoire_from_value();
+ if (!$$ || !$$->check_well_formed_result(&$$->str_value, TRUE))
+ {
+ MYSQL_YYABORT;
+ }
+ ((Item_string *) $$)->set_repertoire_from_value();
}
| UNDERSCORE_CHARSET BIN_NUM
{
@@ -9771,9 +9947,14 @@ literal:
String *str= tmp ?
tmp->quick_fix_field(), tmp->val_str((String*) 0) :
(String*) 0;
- $$= new Item_string(str ? str->ptr() : "",
+ $$= new Item_string(NULL, /* name will be set in select_item */
+ str ? str->ptr() : "",
str ? str->length() : 0,
- Lex->charset);
+ $1);
+ if (!$$ || !$$->check_well_formed_result(&$$->str_value, TRUE))
+ {
+ MYSQL_YYABORT;
+ }
}
| DATE_SYM text_literal { $$ = $2; }
| TIME_SYM text_literal { $$ = $2; }
@@ -9796,7 +9977,7 @@ NUM_literal:
| DECIMAL_NUM
{
$$= new Item_decimal($1.str, $1.length, YYTHD->charset());
- if (YYTHD->net.report_error)
+ if (YYTHD->is_error())
{
MYSQL_YYABORT;
}
@@ -9804,7 +9985,7 @@ NUM_literal:
| FLOAT_NUM
{
$$ = new Item_float($1.str, $1.length);
- if (YYTHD->net.report_error)
+ if (YYTHD->is_error())
{
MYSQL_YYABORT;
}
@@ -10262,6 +10443,7 @@ keyword_sp:
| AVG_SYM {}
| BINLOG_SYM {}
| BIT_SYM {}
+ | BLOCK_SYM {}
| BOOL_SYM {}
| BOOLEAN_SYM {}
| BTREE_SYM {}
@@ -10281,7 +10463,9 @@ keyword_sp:
| CONCURRENT {}
| CONNECTION_SYM {}
| CONSISTENT_SYM {}
+ | CONTEXT_SYM {}
| CONTRIBUTORS_SYM {}
+ | CPU_SYM {}
| CUBE_SYM {}
| DATA_SYM {}
| DATAFILE_SYM {}
@@ -10310,6 +10494,7 @@ keyword_sp:
| EXPANSION_SYM {}
| EXTENDED_SYM {}
| EXTENT_SIZE_SYM {}
+ | FAULTS_SYM {}
| FAST_SYM {}
| FOUND_SYM {}
| ENABLE_SYM {}
@@ -10331,6 +10516,8 @@ keyword_sp:
| IMPORT {}
| INDEXES {}
| INITIAL_SIZE_SYM {}
+ | IO_SYM {}
+ | IPC_SYM {}
| ISOLATION {}
| ISSUER_SYM {}
| INNOBASE_SYM {}
@@ -10413,6 +10600,8 @@ keyword_sp:
| PRIVILEGES {}
| PROCESS {}
| PROCESSLIST_SYM {}
+ | PROFILE_SYM {}
+ | PROFILES_SYM {}
| QUARTER_SYM {}
| QUERY_SYM {}
| QUICK {}
@@ -10447,6 +10636,7 @@ keyword_sp:
| SHUTDOWN {}
| SNAPSHOT_SYM {}
| SOUNDS_SYM {}
+ | SOURCE_SYM {}
| SQL_CACHE_SYM {}
| SQL_BUFFER_RESULT {}
| SQL_NO_CACHE_SYM {}
@@ -10461,6 +10651,8 @@ keyword_sp:
| SUBPARTITIONS_SYM {}
| SUPER_SYM {}
| SUSPEND_SYM {}
+ | SWAPS_SYM {}
+ | SWITCHES_SYM {}
| TABLES {}
| TABLESPACE {}
| TEMPORARY {}
@@ -10508,6 +10700,7 @@ set:
lex->option_type=OPT_SESSION;
lex->var_list.empty();
lex->one_shot_set= 0;
+ lex->autocommit= 0;
}
option_value_list
{}
@@ -10550,6 +10743,7 @@ option_type_value:
lex->option_type=OPT_SESSION;
lex->var_list.empty();
lex->one_shot_set= 0;
+ lex->autocommit= 0;
lex->sphead->m_tmp_query= lip->get_tok_start();
}
}
@@ -10791,10 +10985,16 @@ option_value:
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));
+ thd->lex->autocommit= TRUE;
+ if (lex->sphead)
+ lex->sphead->m_flags|= sp_head::HAS_SET_AUTOCOMMIT_STMT;
}
| PASSWORD FOR_SYM user equal text_or_password
{
Lex->var_list.push_back(new set_var_password($3,$5));
+ Lex->autocommit= TRUE;
+ if (Lex->sphead)
+ Lex->sphead->m_flags|= sp_head::HAS_SET_AUTOCOMMIT_STMT;
}
;
@@ -11621,37 +11821,22 @@ union_option:
| ALL { $$=0; }
;
-subselect:
- SELECT_SYM subselect_start subselect_init subselect_end
- {
- $$= $3;
- }
- | '(' subselect_start subselect ')'
- {
- THD *thd= YYTHD;
- /*
- note that a local variable can't be used for
- $3 as it's used in local variable construction
- and some compilers can't guarnatee the order
- in which the local variables are initialized.
- */
- List_iterator<Item> it($3->item_list);
- Item *item;
- /*
- we must fill the items list for the "derived table".
- */
- while ((item= it++))
- add_item_to_list(thd, item);
- }
- union_clause subselect_end { $$= $3; }
- ;
+take_first_select: /* empty */
+ {
+ $$= Lex->current_select->master_unit()->first_select();
+ };
-subselect_init:
- select_init2
- {
- $$= Lex->current_select->master_unit()->first_select();
- }
- ;
+subselect:
+ SELECT_SYM subselect_start select_init2 take_first_select
+ subselect_end
+ {
+ $$= $4;
+ }
+ | '(' subselect_start select_paren take_first_select
+ subselect_end ')'
+ {
+ $$= $4;
+ };
subselect_start:
{
diff --git a/sql/structs.h b/sql/structs.h
index 09a3c4d7285..f14cca3c5db 100644
--- a/sql/structs.h
+++ b/sql/structs.h
@@ -71,7 +71,7 @@ typedef struct st_key_part_info { /* Info about a key part */
typedef struct st_key {
uint key_length; /* Tot length of key */
- uint flags; /* dupp key and pack flags */
+ ulong flags; /* dupp key and pack flags */
uint key_parts; /* How many key_parts */
uint extra_length;
uint usable_key_parts; /* Should normally be = key_parts */
@@ -209,7 +209,7 @@ typedef struct user_conn {
char *user;
/* Pointer to host part of the key. */
char *host;
- /*
+ /**
The moment of time when per hour counters were reset last time
(i.e. start of "hour" for conn_per_hour, updates, questions counters).
*/
diff --git a/sql/table.cc b/sql/table.cc
index ccddbf8134b..cacb3a94582 100644
--- a/sql/table.cc
+++ b/sql/table.cc
@@ -329,6 +329,7 @@ TABLE_SHARE *alloc_table_share(TABLE_LIST *table_list, char *key,
SYNOPSIS
init_tmp_table_share()
+ thd thread handle
share Share to fill
key Table_cache_key, as generated from create_table_def_key.
must start with db name.
@@ -346,7 +347,7 @@ TABLE_SHARE *alloc_table_share(TABLE_LIST *table_list, char *key,
use key_length= 0 as neither table_cache_key or key_length will be used).
*/
-void init_tmp_table_share(TABLE_SHARE *share, const char *key,
+void init_tmp_table_share(THD *thd, TABLE_SHARE *share, const char *key,
uint key_length, const char *table_name,
const char *path)
{
@@ -373,9 +374,14 @@ void init_tmp_table_share(TABLE_SHARE *share, const char *key,
anyway to be able to catch errors.
*/
share->table_map_version= ~(ulonglong)0;
- share->table_map_id= ~0UL;
share->cached_row_logging_check= -1;
+ /*
+ table_map_id is also used for MERGE tables to suppress repeated
+ compatibility checks.
+ */
+ share->table_map_id= (ulong) thd->query_id;
+
DBUG_VOID_RETURN;
}
@@ -1352,9 +1358,11 @@ static int open_binary_frm(THD *thd, TABLE_SHARE *share, uchar *head,
keyinfo->key_length+= HA_KEY_NULL_LENGTH;
}
if (field->type() == MYSQL_TYPE_BLOB ||
- field->real_type() == MYSQL_TYPE_VARCHAR)
+ field->real_type() == MYSQL_TYPE_VARCHAR ||
+ field->type() == MYSQL_TYPE_GEOMETRY)
{
- if (field->type() == MYSQL_TYPE_BLOB)
+ if (field->type() == MYSQL_TYPE_BLOB ||
+ field->type() == MYSQL_TYPE_GEOMETRY)
key_part->key_part_flag|= HA_BLOB_PART;
else
key_part->key_part_flag|= HA_VAR_LENGTH_PART;
@@ -1608,6 +1616,9 @@ int open_table_from_share(THD *thd, TABLE_SHARE *share, const char *alias,
DBUG_PRINT("enter",("name: '%s.%s' form: 0x%lx", share->db.str,
share->table_name.str, (long) outparam));
+ /* Parsing of partitioning information from .frm needs thd->lex set up. */
+ DBUG_ASSERT(thd->lex->is_lex_started);
+
error= 1;
bzero((char*) outparam, sizeof(*outparam));
outparam->in_use= thd;
@@ -1782,12 +1793,18 @@ int open_table_from_share(THD *thd, TABLE_SHARE *share, const char *alias,
outparam, is_create_table,
share->default_part_db_type,
&work_part_info_used);
+ if (tmp)
+ {
+ thd->stmt_arena= backup_stmt_arena_ptr;
+ thd->restore_active_arena(&part_func_arena, &backup_arena);
+ goto partititon_err;
+ }
outparam->part_info->is_auto_partitioned= share->auto_partitioned;
DBUG_PRINT("info", ("autopartitioned: %u", share->auto_partitioned));
/* we should perform the fix_partition_func in either local or
caller's arena depending on work_part_info_used value
*/
- if (!tmp && !work_part_info_used)
+ if (!work_part_info_used)
tmp= fix_partition_func(thd, outparam, is_create_table);
thd->stmt_arena= backup_stmt_arena_ptr;
thd->restore_active_arena(&part_func_arena, &backup_arena);
@@ -1797,6 +1814,7 @@ int open_table_from_share(THD *thd, TABLE_SHARE *share, const char *alias,
tmp= fix_partition_func(thd, outparam, is_create_table);
outparam->part_info->item_free_list= part_func_arena.free_list;
}
+partititon_err:
if (tmp)
{
if (is_create_table)
@@ -3263,31 +3281,32 @@ bool TABLE_LIST::prep_check_option(THD *thd, uint8 check_opt_type)
}
-/*
+/**
Hide errors which show view underlying table information
- SYNOPSIS
- TABLE_LIST::hide_view_error()
- thd thread handler
+ @param[in,out] thd thread handler
+ @pre This method can be called only if there is an error.
*/
void TABLE_LIST::hide_view_error(THD *thd)
{
/* Hide "Unknown column" or "Unknown function" error */
- if (thd->net.last_errno == ER_BAD_FIELD_ERROR ||
- thd->net.last_errno == ER_SP_DOES_NOT_EXIST ||
- thd->net.last_errno == ER_PROCACCESS_DENIED_ERROR ||
- thd->net.last_errno == ER_COLUMNACCESS_DENIED_ERROR ||
- thd->net.last_errno == ER_TABLEACCESS_DENIED_ERROR ||
- thd->net.last_errno == ER_TABLE_NOT_LOCKED ||
- thd->net.last_errno == ER_NO_SUCH_TABLE)
+ DBUG_ASSERT(thd->is_error());
+
+ if (thd->main_da.sql_errno() == ER_BAD_FIELD_ERROR ||
+ thd->main_da.sql_errno() == ER_SP_DOES_NOT_EXIST ||
+ thd->main_da.sql_errno() == ER_PROCACCESS_DENIED_ERROR ||
+ thd->main_da.sql_errno() == ER_COLUMNACCESS_DENIED_ERROR ||
+ thd->main_da.sql_errno() == ER_TABLEACCESS_DENIED_ERROR ||
+ thd->main_da.sql_errno() == ER_TABLE_NOT_LOCKED ||
+ thd->main_da.sql_errno() == ER_NO_SUCH_TABLE)
{
TABLE_LIST *top= top_table();
- thd->clear_error();
+ thd->clear_error();
my_error(ER_VIEW_INVALID, MYF(0), top->view_db.str, top->view_name.str);
}
- else if (thd->net.last_errno == ER_NO_DEFAULT_FOR_FIELD)
+ else if (thd->main_da.sql_errno() == ER_NO_DEFAULT_FOR_FIELD)
{
TABLE_LIST *top= top_table();
thd->clear_error();
@@ -4471,6 +4490,25 @@ void st_table::mark_columns_needed_for_insert()
mark_auto_increment_column();
}
+
+/**
+ @brief Check if this is part of a MERGE table with attached children.
+
+ @return status
+ @retval TRUE children are attached
+ @retval FALSE no MERGE part or children not attached
+
+ @detail
+ A MERGE table consists of a parent TABLE and zero or more child
+ TABLEs. Each of these TABLEs is called a part of a MERGE table.
+*/
+
+bool st_table::is_children_attached(void)
+{
+ return((child_l && children_attached) ||
+ (parent && parent->children_attached));
+}
+
/*
Cleanup this table for re-execution.
diff --git a/sql/table.h b/sql/table.h
index 6554b6ed578..284885658e0 100644
--- a/sql/table.h
+++ b/sql/table.h
@@ -431,6 +431,12 @@ typedef struct st_table_share
{
return (table_category == TABLE_CATEGORY_PERFORMANCE);
}
+
+ inline ulong get_table_def_version()
+ {
+ return table_map_id;
+ }
+
} TABLE_SHARE;
@@ -455,6 +461,11 @@ struct st_table {
#endif
struct st_table *next, *prev;
+ /* For the below MERGE related members see top comment in ha_myisammrg.cc */
+ struct st_table *parent; /* Set in MERGE child. Ptr to parent */
+ TABLE_LIST *child_l; /* Set in MERGE parent. List of children */
+ TABLE_LIST **child_last_l; /* Set in MERGE parent. End of list */
+
THD *in_use; /* Which thread uses this */
Field **field; /* Pointer to fields */
@@ -499,6 +510,24 @@ struct st_table {
my_bitmap_map *bitmap_init_value;
MY_BITMAP def_read_set, def_write_set, tmp_set; /* containers */
MY_BITMAP *read_set, *write_set; /* Active column sets */
+ /*
+ The ID of the query that opened and is using this table. Has different
+ meanings depending on the table type.
+
+ Temporary tables:
+
+ table->query_id is set to thd->query_id for the duration of a statement
+ and is reset to 0 once it is closed by the same statement. A non-zero
+ table->query_id means that a statement is using the table even if it's
+ not the current statement (table is in use by some outer statement).
+
+ Non-temporary tables:
+
+ Under pre-locked or LOCK TABLES mode: query_id is set to thd->query_id
+ for the duration of a statement and is reset to 0 once it is closed by
+ the same statement. A non-zero query_id is used to control which tables
+ in the list of pre-opened and locked tables are actually being used.
+ */
query_id_t query_id;
/*
@@ -593,8 +622,8 @@ struct st_table {
my_bool locked_by_name;
my_bool fulltext_searched;
my_bool no_cache;
- /* To signal that we should reset query_id for tables and cols */
- my_bool clear_query_id;
+ /* To signal that the table is associated with a HANDLER statement */
+ my_bool open_by_handler;
/*
To indicate that a non-null value of the auto_increment field
was provided by the user or retrieved from the current record.
@@ -604,6 +633,8 @@ struct st_table {
my_bool insert_or_update; /* Can be used by the handler */
my_bool alias_name_used; /* true if table_name is alias */
my_bool get_fields_in_item_tree; /* Signal to fix_field */
+ /* If MERGE children attached to parent. See top comment in ha_myisammrg.cc */
+ my_bool children_attached;
REGINFO reginfo; /* field connections */
MEM_ROOT mem_root;
@@ -655,6 +686,7 @@ struct st_table {
*/
inline bool needs_reopen_or_name_lock()
{ return s->version != refresh_version; }
+ bool is_children_attached(void);
};
enum enum_schema_table_state
@@ -697,6 +729,7 @@ enum enum_schema_tables
SCH_PARTITIONS,
SCH_PLUGINS,
SCH_PROCESSLIST,
+ SCH_PROFILES,
SCH_REFERENTIAL_CONSTRAINTS,
SCH_PROCEDURES,
SCH_SCHEMATA,
@@ -978,6 +1011,8 @@ struct TABLE_LIST
(non-zero only for merged underlying tables of a view).
*/
TABLE_LIST *referencing_view;
+ /* Ptr to parent MERGE table list item. See top comment in ha_myisammrg.cc */
+ TABLE_LIST *parent_l;
/*
Security context (non-zero only for tables which belong
to view with SQL SECURITY DEFINER)
@@ -1063,6 +1098,7 @@ struct TABLE_LIST
... SELECT implementation).
*/
bool create;
+ bool internal_tmp_table;
/* View creation context. */
@@ -1158,6 +1194,20 @@ struct TABLE_LIST
*/
bool process_index_hints(TABLE *table);
+ /* Access MERGE child def version. See top comment in ha_myisammrg.cc */
+ inline ulong get_child_def_version()
+ {
+ return child_def_version;
+ }
+ inline void set_child_def_version(ulong version)
+ {
+ child_def_version= version;
+ }
+ inline void init_child_def_version()
+ {
+ child_def_version= ~0UL;
+ }
+
private:
bool prep_check_option(THD *thd, uint8 check_opt_type);
bool prep_where(THD *thd, Item **conds, bool no_where_clause);
@@ -1165,6 +1215,9 @@ private:
Cleanup for re-execution in a prepared statement or a stored
procedure.
*/
+
+ /* Remembered MERGE child def version. See top comment in ha_myisammrg.cc */
+ ulong child_def_version;
};
class Item;
diff --git a/sql/tztime.cc b/sql/tztime.cc
index 9eb38e97827..f080c61e243 100644
--- a/sql/tztime.cc
+++ b/sql/tztime.cc
@@ -1575,6 +1575,7 @@ my_tz_init(THD *org_thd, const char *default_tzname, my_bool bootstrap)
DBUG_RETURN(1);
thd->thread_stack= (char*) &thd;
thd->store_globals();
+ lex_start(thd);
/* Init all memory structures that require explicit destruction */
if (hash_init(&tz_names, &my_charset_latin1, 20,
@@ -1641,7 +1642,7 @@ my_tz_init(THD *org_thd, const char *default_tzname, my_bool bootstrap)
if (open_system_tables_for_read(thd, tz_tables, &open_tables_state_backup))
{
sql_print_warning("Can't open and lock time zone table: %s "
- "trying to live without them", thd->net.last_error);
+ "trying to live without them", thd->main_da.message());
/* We will try emulate that everything is ok */
return_val= time_zone_tables_exist= 0;
goto end_with_setting_default_tz;
diff --git a/sql/tztime.h b/sql/tztime.h
index ddd80b88bf2..3d77a3eefa3 100644
--- a/sql/tztime.h
+++ b/sql/tztime.h
@@ -20,7 +20,7 @@
#if !defined(TESTTIME) && !defined(TZINFO2SQL)
-/*
+/**
This class represents abstract time zone and provides
basic interface for MYSQL_TIME <-> my_time_t conversion.
Actual time zones which are specified by DB, or via offset
@@ -30,7 +30,7 @@ class Time_zone: public Sql_alloc
{
public:
Time_zone() {} /* Remove gcc warning */
- /*
+ /**
Converts local time in broken down MYSQL_TIME representation to
my_time_t (UTC seconds since Epoch) represenation.
Returns 0 in case of error. Sets in_dst_time_gap to true if date provided
@@ -38,19 +38,19 @@ public:
*/
virtual my_time_t TIME_to_gmt_sec(const MYSQL_TIME *t,
my_bool *in_dst_time_gap) const = 0;
- /*
+ /**
Converts time in my_time_t representation to local time in
broken down MYSQL_TIME representation.
*/
virtual void gmt_sec_to_TIME(MYSQL_TIME *tmp, my_time_t t) const = 0;
- /*
+ /**
Because of constness of String returned by get_name() time zone name
have to be already zeroended to be able to use String::ptr() instead
of c_ptr().
*/
virtual const String * get_name() const = 0;
- /*
+ /**
We need this only for surpressing warnings, objects of this type are
allocated on MEM_ROOT and should not require destruction.
*/
@@ -65,7 +65,7 @@ extern my_bool my_tz_init(THD *org_thd, const char *default_tzname, my_bool
extern void my_tz_free();
extern my_time_t sec_since_epoch_TIME(MYSQL_TIME *t);
-/*
+/**
Number of elements in table list produced by my_tz_get_table_list()
(this table list contains tables which are needed for dynamical loading
of time zone descriptions). Actually it is imlementation detail that
diff --git a/sql/udf_example.c b/sql/udf_example.c
index 6f2093cc92f..a3d149f0971 100644
--- a/sql/udf_example.c
+++ b/sql/udf_example.c
@@ -648,13 +648,11 @@ my_bool sequence_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
return 1;
}
bzero(initid->ptr,sizeof(longlong));
- /*
- Fool MySQL to think that this function is a constant
- This will ensure that MySQL only evalutes the function
- when the rows are sent to the client and not before any ORDER BY
- clauses
+ /*
+ sequence() is a non-deterministic function : it has different value
+ even if called with the same arguments.
*/
- initid->const_item=1;
+ initid->const_item=0;
return 0;
}
diff --git a/sql/unireg.cc b/sql/unireg.cc
index f9e8e54439a..38f09a7946c 100644
--- a/sql/unireg.cc
+++ b/sql/unireg.cc
@@ -47,6 +47,35 @@ static bool make_empty_rec(THD *thd, int file, enum legacy_db_type table_type,
uint reclength, ulong data_offset,
handler *handler);
+/**
+ An interceptor to hijack ER_TOO_MANY_FIELDS error from
+ pack_screens and retry again without UNIREG screens.
+
+ XXX: what is a UNIREG screen?
+*/
+
+struct Pack_header_error_handler: public Internal_error_handler
+{
+ virtual bool handle_error(uint sql_errno,
+ const char *message,
+ MYSQL_ERROR::enum_warning_level level,
+ THD *thd);
+ bool is_handled;
+ Pack_header_error_handler() :is_handled(FALSE) {}
+};
+
+
+bool
+Pack_header_error_handler::
+handle_error(uint sql_errno,
+ const char * /* message */,
+ MYSQL_ERROR::enum_warning_level /* level */,
+ THD * /* thd */)
+{
+ is_handled= (sql_errno == ER_TOO_MANY_FIELDS);
+ return is_handled;
+}
+
/*
Create a frm (table definition) file
@@ -86,6 +115,8 @@ bool mysql_create_frm(THD *thd, const char *file_name,
#ifdef WITH_PARTITION_STORAGE_ENGINE
partition_info *part_info= thd->work_part_info;
#endif
+ Pack_header_error_handler pack_header_error_handler;
+ int error;
DBUG_ENTER("mysql_create_frm");
DBUG_ASSERT(*fn_rext((char*)file_name)); // Check .frm extension
@@ -99,17 +130,22 @@ bool mysql_create_frm(THD *thd, const char *file_name,
create_info->null_bits++;
data_offset= (create_info->null_bits + 7) / 8;
- if (pack_header(forminfo, ha_legacy_type(create_info->db_type),
- create_fields,info_length,
- screens, create_info->table_options,
- data_offset, db_file))
+ thd->push_internal_handler(&pack_header_error_handler);
+
+ error= pack_header(forminfo, ha_legacy_type(create_info->db_type),
+ create_fields,info_length,
+ screens, create_info->table_options,
+ data_offset, db_file);
+
+ thd->pop_internal_handler();
+
+ if (error)
{
my_free(screen_buff, MYF(0));
- if (thd->net.last_errno != ER_TOO_MANY_FIELDS)
+ if (! pack_header_error_handler.is_handled)
DBUG_RETURN(1);
// Try again without UNIREG screens (to get more columns)
- thd->net.last_error[0]=0;
if (!(screen_buff=pack_screens(create_fields,&info_length,&screens,1)))
DBUG_RETURN(1);
if (pack_header(forminfo, ha_legacy_type(create_info->db_type),
@@ -191,6 +227,14 @@ bool mysql_create_frm(THD *thd, const char *file_name,
strmake((char*) forminfo+47, create_info->comment.str ?
create_info->comment.str : "", create_info->comment.length);
forminfo[46]=(uchar) create_info->comment.length;
+#ifdef EXTRA_DEBUG
+ /*
+ EXTRA_DEBUG causes strmake() to initialize its buffer behind the
+ payload with a magic value to detect wrong buffer-sizes. We
+ explicitly zero that segment again.
+ */
+ memset((char*) forminfo+47 + forminfo[46], 0, 61 - forminfo[46]);
+#endif
#ifdef WITH_PARTITION_STORAGE_ENGINE
if (part_info)
{
@@ -357,7 +401,7 @@ int rea_create_table(THD *thd, const char *path,
DBUG_ASSERT(*fn_rext(frm_name));
if (thd->variables.keep_files_on_create)
create_info->options|= HA_CREATE_KEEP_FILES;
- if (file->create_handler_files(path, NULL, CHF_CREATE_FLAG, create_info))
+ if (file->ha_create_handler_files(path, NULL, CHF_CREATE_FLAG, create_info))
goto err_handler;
if (!create_info->frm_only && ha_create_table(thd, path, db, table_name,
create_info,0))
@@ -365,7 +409,7 @@ int rea_create_table(THD *thd, const char *path,
DBUG_RETURN(0);
err_handler:
- VOID(file->create_handler_files(path, NULL, CHF_DELETE_FLAG, create_info));
+ VOID(file->ha_create_handler_files(path, NULL, CHF_DELETE_FLAG, create_info));
my_delete(frm_name, MYF(0));
DBUG_RETURN(1);
} /* rea_create_table */
@@ -469,7 +513,7 @@ static uint pack_keys(uchar *keybuff, uint key_count, KEY *keyinfo,
int2store(pos+6, key->block_size);
pos+=8;
key_parts+=key->key_parts;
- DBUG_PRINT("loop", ("flags: %d key_parts: %d at 0x%lx",
+ DBUG_PRINT("loop", ("flags: %lu key_parts: %d at 0x%lx",
key->flags, key->key_parts,
(long) key->key_part));
for (key_part=key->key_part,key_part_end=key_part+key->key_parts ;
diff --git a/sql/unireg.h b/sql/unireg.h
index f0b4a88c7f8..2e0172ce31d 100644
--- a/sql/unireg.h
+++ b/sql/unireg.h
@@ -155,34 +155,34 @@
#define OPEN_VIEW 8192 /* Allow open on view */
#define OPEN_VIEW_NO_PARSE 16384 /* Open frm only if it's a view,
but do not parse view itself */
-/*
+/**
This flag is used in function get_all_tables() which fills
I_S tables with data which are retrieved from frm files and storage engine
The flag means that we need to open FRM file only to get necessary data.
*/
#define OPEN_FRM_FILE_ONLY 32768
-/*
+/**
This flag is used in function get_all_tables() which fills
I_S tables with data which are retrieved from frm files and storage engine
The flag means that we need to process tables only to get necessary data.
Views are not processed.
*/
#define OPEN_TABLE_ONLY OPEN_FRM_FILE_ONLY*2
-/*
+/**
This flag is used in function get_all_tables() which fills
I_S tables with data which are retrieved from frm files and storage engine
The flag means that we need to process views only to get necessary data.
Tables are not processed.
*/
#define OPEN_VIEW_ONLY OPEN_TABLE_ONLY*2
-/*
+/**
This flag is used in function get_all_tables() which fills
I_S tables with data which are retrieved from frm files and storage engine.
The flag means that we need to open a view using
open_normal_and_derived_tables() function.
*/
#define OPEN_VIEW_FULL OPEN_VIEW_ONLY*2
-/*
+/**
This flag is used in function get_all_tables() which fills
I_S tables with data which are retrieved from frm files and storage engine.
The flag means that I_S table uses optimization algorithm.
diff --git a/storage/archive/azio.c b/storage/archive/azio.c
index c04749444cb..cada6c57918 100644
--- a/storage/archive/azio.c
+++ b/storage/archive/azio.c
@@ -262,7 +262,7 @@ void check_header(azio_stream *s)
if (len) s->inbuf[0] = s->stream.next_in[0];
errno = 0;
len = (uInt)my_read(s->file, (uchar *)s->inbuf + len, AZ_BUFSIZE_READ >> len, MYF(0));
- if (len == 0) s->z_err = Z_ERRNO;
+ if (len == (uInt)-1) s->z_err = Z_ERRNO;
s->stream.avail_in += len;
s->stream.next_in = s->inbuf;
if (s->stream.avail_in < 2) {
@@ -681,8 +681,8 @@ my_off_t azseek (s, offset, whence)
/* There was a zmemzero here if inbuf was null -Brian */
while (offset > 0)
{
- uInt size = AZ_BUFSIZE_WRITE;
- if (offset < AZ_BUFSIZE_WRITE) size = (uInt)offset;
+ uInt size = AZ_BUFSIZE_READ;
+ if (offset < AZ_BUFSIZE_READ) size = (uInt)offset;
size = azwrite(s, s->inbuf, size);
if (size == 0) return -1L;
@@ -725,11 +725,11 @@ my_off_t azseek (s, offset, whence)
}
while (offset > 0) {
int error;
- unsigned int size = AZ_BUFSIZE_READ;
- if (offset < AZ_BUFSIZE_READ) size = (int)offset;
+ unsigned int size = AZ_BUFSIZE_WRITE;
+ if (offset < AZ_BUFSIZE_WRITE) size = (int)offset;
size = azread(s, s->outbuf, size, &error);
- if (error <= 0) return -1L;
+ if (error < 0) return -1L;
offset -= size;
}
return s->out;
diff --git a/storage/archive/ha_archive.cc b/storage/archive/ha_archive.cc
index 6696eac2fbb..967e315d4a4 100644
--- a/storage/archive/ha_archive.cc
+++ b/storage/archive/ha_archive.cc
@@ -357,7 +357,7 @@ ARCHIVE_SHARE *ha_archive::get_share(const char *table_name, int *rc)
{
DBUG_RETURN(NULL);
}
- stats.auto_increment_value= archive_tmp.auto_increment;
+ stats.auto_increment_value= archive_tmp.auto_increment + 1;
share->rows_recorded= (ha_rows)archive_tmp.rows;
share->crashed= archive_tmp.dirty;
azclose(&archive_tmp);
@@ -586,9 +586,7 @@ int ha_archive::create(const char *name, TABLE *table_arg,
DBUG_ENTER("ha_archive::create");
- stats.auto_increment_value= (create_info->auto_increment_value ?
- create_info->auto_increment_value -1 :
- (ulonglong) 0);
+ stats.auto_increment_value= create_info->auto_increment_value;
for (uint key= 0; key < table_arg->s->keys; key++)
{
@@ -673,7 +671,8 @@ int ha_archive::create(const char *name, TABLE *table_arg,
Yes you need to do this, because the starting value
for the autoincrement may not be zero.
*/
- create_stream.auto_increment= stats.auto_increment_value;
+ create_stream.auto_increment= stats.auto_increment_value ?
+ stats.auto_increment_value - 1 : 0;
if (azclose(&create_stream))
{
error= errno;
@@ -871,8 +870,8 @@ int ha_archive::write_row(uchar *buf)
else
{
if (temp_auto > share->archive_write.auto_increment)
- stats.auto_increment_value= share->archive_write.auto_increment=
- temp_auto;
+ stats.auto_increment_value=
+ (share->archive_write.auto_increment= temp_auto) + 1;
}
}
@@ -896,7 +895,7 @@ void ha_archive::get_auto_increment(ulonglong offset, ulonglong increment,
ulonglong *first_value,
ulonglong *nb_reserved_values)
{
- *nb_reserved_values= 1;
+ *nb_reserved_values= ULONGLONG_MAX;
*first_value= share->archive_write.auto_increment + 1;
}
@@ -1241,8 +1240,8 @@ int ha_archive::rnd_pos(uchar * buf, uchar *pos)
DBUG_ENTER("ha_archive::rnd_pos");
ha_statistic_increment(&SSV::ha_read_rnd_next_count);
current_position= (my_off_t)my_get_ptr(pos, ref_length);
- (void)azseek(&archive, current_position, SEEK_SET);
-
+ if (azseek(&archive, current_position, SEEK_SET) == (my_off_t)(-1L))
+ DBUG_RETURN(HA_ERR_CRASHED_ON_USAGE);
DBUG_RETURN(get_row(&archive, buf));
}
@@ -1315,7 +1314,8 @@ int ha_archive::optimize(THD* thd, HA_CHECK_OPT* check_opt)
if (!rc)
{
share->rows_recorded= 0;
- stats.auto_increment_value= share->archive_write.auto_increment= 0;
+ stats.auto_increment_value= 1;
+ share->archive_write.auto_increment= 0;
my_bitmap_map *org_bitmap= dbug_tmp_use_all_columns(table, table->read_set);
while (!(rc= get_row(&archive, table->record[0])))
@@ -1332,8 +1332,8 @@ int ha_archive::optimize(THD* thd, HA_CHECK_OPT* check_opt)
(ulonglong) field->val_int(table->record[0] +
field->offset(table->record[0]));
if (share->archive_write.auto_increment < auto_value)
- stats.auto_increment_value= share->archive_write.auto_increment=
- auto_value;
+ stats.auto_increment_value=
+ (share->archive_write.auto_increment= auto_value) + 1;
}
}
@@ -1418,18 +1418,9 @@ void ha_archive::update_create_info(HA_CREATE_INFO *create_info)
DBUG_ENTER("ha_archive::update_create_info");
ha_archive::info(HA_STATUS_AUTO);
- if (create_info->used_fields & HA_CREATE_USED_AUTO)
+ if (!(create_info->used_fields & HA_CREATE_USED_AUTO))
{
- /*
- Internally Archive keeps track of last used, not next used.
- To make the output look like MyISAM we add 1 here.
-
- This is not completely compatible with MYISAM though, since
- MyISAM will record on "SHOW CREATE TABLE" the last position,
- where we will report the original position the table was
- created with.
- */
- create_info->auto_increment_value= stats.auto_increment_value + 1;
+ create_info->auto_increment_value= stats.auto_increment_value;
}
if (!(my_readlink(share->real_path, share->data_file_name, MYF(0))))
@@ -1494,7 +1485,7 @@ int ha_archive::info(uint flag)
pthread_mutex_lock(&share->mutex);
azflush(&archive, Z_SYNC_FLUSH);
pthread_mutex_unlock(&share->mutex);
- stats.auto_increment_value= archive.auto_increment;
+ stats.auto_increment_value= archive.auto_increment + 1;
}
DBUG_RETURN(0);
diff --git a/storage/csv/ha_tina.cc b/storage/csv/ha_tina.cc
index 0d9c019a19d..c9fab79a4c5 100644
--- a/storage/csv/ha_tina.cc
+++ b/storage/csv/ha_tina.cc
@@ -472,14 +472,6 @@ int ha_tina::encode_quote(uchar *buf)
const char *ptr;
const char *end_ptr;
const bool was_null= (*field)->is_null();
-
- /*
- CSV does not support nulls. ::create() prevents creation of a table
- with nullable columns so if we encounter them here, there is a bug.
- This may only occur if the frm was created by an older version of
- mysqld which permitted table creation with nullable columns.
- */
- DBUG_ASSERT(!(*field)->maybe_null());
/*
assistance for backwards compatibility in production builds.
@@ -1494,7 +1486,10 @@ int ha_tina::create(const char *name, TABLE *table_arg,
for (Field **field= table_arg->s->field; *field; field++)
{
if ((*field)->real_maybe_null())
- DBUG_RETURN(-1);
+ {
+ my_error(ER_CHECK_NOT_IMPLEMENTED, MYF(0), "nullable columns");
+ DBUG_RETURN(HA_ERR_UNSUPPORTED);
+ }
}
diff --git a/storage/example/ha_example.cc b/storage/example/ha_example.cc
index b7186dda676..6d9f4841e06 100644
--- a/storage/example/ha_example.cc
+++ b/storage/example/ha_example.cc
@@ -848,6 +848,34 @@ int ha_example::create(const char *name, TABLE *table_arg,
struct st_mysql_storage_engine example_storage_engine=
{ MYSQL_HANDLERTON_INTERFACE_VERSION };
+static ulong srv_enum_var= 0;
+
+const char *enum_var_names[]=
+{
+ "e1", "e2", NullS
+};
+
+TYPELIB enum_var_typelib=
+{
+ array_elements(enum_var_names) - 1, "enum_var_typelib",
+ enum_var_names, NULL
+};
+
+static MYSQL_SYSVAR_ENUM(
+ enum_var, // name
+ srv_enum_var, // varname
+ PLUGIN_VAR_RQCMDARG, // opt
+ "Sample ENUM system variable.", // comment
+ NULL, // check
+ NULL, // update
+ 0, // def
+ &enum_var_typelib); // typelib
+
+static struct st_mysql_sys_var* example_system_variables[]= {
+ MYSQL_SYSVAR(enum_var),
+ NULL
+};
+
mysql_declare_plugin(example)
{
MYSQL_STORAGE_ENGINE_PLUGIN,
@@ -860,7 +888,7 @@ mysql_declare_plugin(example)
example_done_func, /* Plugin Deinit */
0x0001 /* 0.1 */,
NULL, /* status variables */
- NULL, /* system variables */
+ example_system_variables, /* system variables */
NULL /* config options */
}
mysql_declare_plugin_end;
diff --git a/storage/federated/ha_federated.cc b/storage/federated/ha_federated.cc
index 3fc17e18e76..091a26f6f36 100644
--- a/storage/federated/ha_federated.cc
+++ b/storage/federated/ha_federated.cc
@@ -2408,6 +2408,24 @@ error:
}
+/*
+ This method is used exlusevely by filesort() to check if we
+ can create sorting buffers of necessary size.
+ If the handler returns more records that it declares
+ here server can just crash on filesort().
+ We cannot guarantee that's not going to happen with
+ the FEDERATED engine, as we have records==0 always if the
+ client is a VIEW, and for the table the number of
+ records can inpredictably change during execution.
+ So we return maximum possible value here.
+*/
+
+ha_rows ha_federated::estimate_rows_upper_bound()
+{
+ return HA_POS_ERROR;
+}
+
+
/* Initialized at each key walk (called multiple times unlike rnd_init()) */
int ha_federated::index_init(uint keynr, bool sorted)
@@ -2769,7 +2787,12 @@ int ha_federated::info(uint flag)
status_query_string.length(0);
result= mysql_store_result(mysql);
- if (!result)
+
+ /*
+ We're going to use fields num. 4, 12 and 13 of the resultset,
+ so make sure we have these fields.
+ */
+ if (!result || (mysql_num_fields(result) < 14))
goto error;
if (!mysql_num_rows(result))
diff --git a/storage/federated/ha_federated.h b/storage/federated/ha_federated.h
index 40bcf9cc402..1974f9936fc 100644
--- a/storage/federated/ha_federated.h
+++ b/storage/federated/ha_federated.h
@@ -210,6 +210,7 @@ public:
int update_row(const uchar *old_data, uchar *new_data);
int delete_row(const uchar *buf);
int index_init(uint keynr, bool sorted);
+ ha_rows estimate_rows_upper_bound();
int index_read(uchar *buf, const uchar *key,
uint key_len, enum ha_rkey_function find_flag);
int index_read_idx(uchar *buf, uint idx, const uchar *key,
diff --git a/storage/innobase/buf/buf0lru.c b/storage/innobase/buf/buf0lru.c
index 7b49a7641af..f3913ed49b7 100644
--- a/storage/innobase/buf/buf0lru.c
+++ b/storage/innobase/buf/buf0lru.c
@@ -881,7 +881,7 @@ buf_LRU_block_free_non_file_page(
UT_LIST_ADD_FIRST(free, buf_pool->free, block);
block->in_free_list = TRUE;
- UNIV_MEM_FREE(block->frame, UNIV_PAGE_SIZE);
+ UNIV_MEM_ASSERT_AND_FREE(block->frame, UNIV_PAGE_SIZE);
if (srv_use_awe && block->frame) {
/* Add to the list of mapped pages */
diff --git a/storage/innobase/dict/dict0dict.c b/storage/innobase/dict/dict0dict.c
index 595dfb06ee5..8aba5ac1c85 100644
--- a/storage/innobase/dict/dict0dict.c
+++ b/storage/innobase/dict/dict0dict.c
@@ -84,16 +84,6 @@ innobase_convert_from_id(
ulint len); /* in: length of 'to', in bytes;
should be at least 3 * strlen(to) + 1 */
/**********************************************************************
-Removes the filename encoding of a table or database name.
-
-NOTE: the prototype of this function is copied from ha_innodb.cc! If you change
-this function, you MUST change also the prototype here! */
-extern
-void
-innobase_convert_from_filename(
-/*===========================*/
- char* s); /* in: identifier; out: decoded identifier */
-/**********************************************************************
Compares NUL-terminated UTF-8 strings case insensitively.
NOTE: the prototype of this function is copied from ha_innodb.cc! If you change
@@ -441,6 +431,8 @@ dict_table_autoinc_initialize(
dict_table_t* table, /* in: table */
ib_longlong value) /* in: next value to assign to a row */
{
+ ut_ad(mutex_own(&table->autoinc_mutex));
+
table->autoinc_inited = TRUE;
table->autoinc = value;
}
@@ -457,6 +449,8 @@ dict_table_autoinc_read(
{
ib_longlong value;
+ ut_ad(mutex_own(&table->autoinc_mutex));
+
if (!table->autoinc_inited) {
value = 0;
diff --git a/storage/innobase/dict/dict0load.c b/storage/innobase/dict/dict0load.c
index 1ff1fd54cec..f594e64f517 100644
--- a/storage/innobase/dict/dict0load.c
+++ b/storage/innobase/dict/dict0load.c
@@ -551,11 +551,13 @@ dict_load_fields(
Loads definitions for table indexes. Adds them to the data dictionary
cache. */
static
-ibool
+ulint
dict_load_indexes(
/*==============*/
- /* out: TRUE if ok, FALSE if corruption
- of dictionary table */
+ /* out: DB_SUCCESS if ok, DB_CORRUPTION
+ if corruption of dictionary table or
+ DB_UNSUPPORTED if table has unknown index
+ type */
dict_table_t* table, /* in: table */
mem_heap_t* heap) /* in: memory heap for temporary storage */
{
@@ -578,6 +580,7 @@ dict_load_indexes(
ibool is_sys_table;
dulint id;
mtr_t mtr;
+ ulint error = DB_SUCCESS;
ut_ad(mutex_own(&(dict_sys->mutex)));
@@ -624,10 +627,8 @@ dict_load_indexes(
dict_load_report_deleted_index(table->name,
ULINT_UNDEFINED);
- btr_pcur_close(&pcur);
- mtr_commit(&mtr);
-
- return(FALSE);
+ error = DB_CORRUPTION;
+ goto func_exit;
}
field = rec_get_nth_field_old(rec, 1, &len);
@@ -653,7 +654,18 @@ dict_load_indexes(
field = rec_get_nth_field_old(rec, 8, &len);
page_no = mach_read_from_4(field);
- if (page_no == FIL_NULL) {
+ /* We check for unsupported types first, so that the
+ subsequent checks are relevant for the supported types. */
+ if (type & ~(DICT_CLUSTERED | DICT_UNIQUE)) {
+
+ fprintf(stderr,
+ "InnoDB: Error: unknown type %lu"
+ " of index %s of table %s\n",
+ (ulong) type, name_buf, table->name);
+
+ error = DB_UNSUPPORTED;
+ goto func_exit;
+ } else if (page_no == FIL_NULL) {
fprintf(stderr,
"InnoDB: Error: trying to load index %s"
@@ -661,14 +673,10 @@ dict_load_indexes(
"InnoDB: but the index tree has been freed!\n",
name_buf, table->name);
- btr_pcur_close(&pcur);
- mtr_commit(&mtr);
-
- return(FALSE);
- }
-
- if ((type & DICT_CLUSTERED) == 0
- && NULL == dict_table_get_first_index(table)) {
+ error = DB_CORRUPTION;
+ goto func_exit;
+ } else if ((type & DICT_CLUSTERED) == 0
+ && NULL == dict_table_get_first_index(table)) {
fprintf(stderr,
"InnoDB: Error: trying to load index %s"
@@ -677,18 +685,14 @@ dict_load_indexes(
" is not clustered!\n",
name_buf, table->name);
- btr_pcur_close(&pcur);
- mtr_commit(&mtr);
-
- return(FALSE);
- }
-
- if (is_sys_table
- && ((type & DICT_CLUSTERED)
- || ((table == dict_sys->sys_tables)
- && (name_len == (sizeof "ID_IND") - 1)
- && (0 == ut_memcmp(name_buf, "ID_IND",
- name_len))))) {
+ error = DB_CORRUPTION;
+ goto func_exit;
+ } else if (is_sys_table
+ && ((type & DICT_CLUSTERED)
+ || ((table == dict_sys->sys_tables)
+ && (name_len == (sizeof "ID_IND") - 1)
+ && (0 == ut_memcmp(name_buf,
+ "ID_IND", name_len))))) {
/* The index was created in memory already at booting
of the database server */
@@ -704,10 +708,11 @@ dict_load_indexes(
btr_pcur_move_to_next_user_rec(&pcur, &mtr);
}
+func_exit:
btr_pcur_close(&pcur);
mtr_commit(&mtr);
- return(TRUE);
+ return(error);
}
/************************************************************************
@@ -857,11 +862,20 @@ err_exit:
mem_heap_empty(heap);
- dict_load_indexes(table, heap);
-
- err = dict_load_foreigns(table->name, TRUE);
+ err = dict_load_indexes(table, heap);
+
+ /* If the force recovery flag is set, we open the table irrespective
+ of the error condition, since the user may want to dump data from the
+ clustered index. However we load the foreign key information only if
+ all indexes were loaded. */
+ if (err != DB_SUCCESS && !srv_force_recovery) {
+ dict_mem_table_free(table);
+ table = NULL;
+ } else if (err == DB_SUCCESS) {
+ err = dict_load_foreigns(table->name, TRUE);
+ }
#if 0
- if (err != DB_SUCCESS) {
+ if (err != DB_SUCCESS && table != NULL) {
mutex_enter(&dict_foreign_err_mutex);
diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
index 783553f5d87..e66d5b84d19 100644
--- a/storage/innobase/handler/ha_innodb.cc
+++ b/storage/innobase/handler/ha_innodb.cc
@@ -129,6 +129,7 @@ static my_bool innobase_locks_unsafe_for_binlog = FALSE;
static my_bool innobase_rollback_on_timeout = FALSE;
static my_bool innobase_create_status_file = FALSE;
static my_bool innobase_stats_on_metadata = TRUE;
+static my_bool innobase_use_adaptive_hash_indexes = TRUE;
static char* internal_innobase_data_file_path = NULL;
@@ -599,7 +600,9 @@ convert_error_code_to_mysql(
tell it also to MySQL so that MySQL knows to empty the
cached binlog for this transaction */
- thd_mark_transaction_to_rollback(thd, TRUE);
+ if (thd) {
+ thd_mark_transaction_to_rollback(thd, TRUE);
+ }
return(HA_ERR_LOCK_DEADLOCK);
} else if (error == (int) DB_LOCK_WAIT_TIMEOUT) {
@@ -608,8 +611,10 @@ convert_error_code_to_mysql(
latest SQL statement in a lock wait timeout. Previously, we
rolled back the whole transaction. */
- thd_mark_transaction_to_rollback(thd,
- (bool)row_rollback_on_timeout);
+ if (thd) {
+ thd_mark_transaction_to_rollback(
+ thd, (bool)row_rollback_on_timeout);
+ }
return(HA_ERR_LOCK_WAIT_TIMEOUT);
@@ -661,7 +666,9 @@ convert_error_code_to_mysql(
tell it also to MySQL so that MySQL knows to empty the
cached binlog for this transaction */
- thd_mark_transaction_to_rollback(thd, TRUE);
+ if (thd) {
+ thd_mark_transaction_to_rollback(thd, TRUE);
+ }
return(HA_ERR_LOCK_TABLE_FULL);
} else if (error == DB_TOO_MANY_CONCURRENT_TRXS) {
@@ -678,6 +685,9 @@ convert_error_code_to_mysql(
return(HA_ERR_RECORD_FILE_FULL);
#endif
+ } else if (error == DB_UNSUPPORTED) {
+
+ return(HA_ERR_UNSUPPORTED);
} else {
return(-1); // Unknown error
}
@@ -801,23 +811,6 @@ innobase_convert_from_id(
}
/**********************************************************************
-Removes the filename encoding of a table or database name.
-
-NOTE that the exact prototype of this function has to be in
-/innobase/dict/dict0dict.c! */
-extern "C"
-void
-innobase_convert_from_filename(
-/*===========================*/
- char* s) /* in: identifier; out: decoded identifier */
-{
- uint errors;
-
- strconvert(&my_charset_filename, s,
- system_charset_info, s, strlen(s), &errors);
-}
-
-/**********************************************************************
Compares NUL-terminated UTF-8 strings case insensitively.
NOTE that the exact prototype of this function has to be in
@@ -1143,7 +1136,6 @@ innobase_query_caching_of_table_permitted(
}
if (trx->has_search_latch) {
- ut_print_timestamp(stderr);
sql_print_error("The calling thread is holding the adaptive "
"search, latch though calling "
"innobase_query_caching_of_table_permitted.");
@@ -1246,8 +1238,7 @@ innobase_invalidate_query_cache(
}
/*********************************************************************
-Display an SQL identifier.
-This definition must match the one in innobase/ut/ut0ut.c! */
+Display an SQL identifier. */
extern "C"
void
innobase_print_identifier(
@@ -1635,6 +1626,9 @@ innobase_init(
srv_stats_on_metadata = (ibool) innobase_stats_on_metadata;
+ srv_use_adaptive_hash_indexes =
+ (ibool) innobase_use_adaptive_hash_indexes;
+
srv_print_verbose_log = mysqld_embedded ? 0 : 1;
/* Store the default charset-collation number of this MySQL
@@ -2319,14 +2313,18 @@ ha_innobase::open(
ib_table = dict_table_get(norm_name, TRUE);
if (NULL == ib_table) {
- ut_print_timestamp(stderr);
- sql_print_error("Cannot find table %s from the internal data "
- "dictionary\nof InnoDB though the .frm file "
- "for the table exists. Maybe you\nhave "
- "deleted and recreated InnoDB data files but "
- "have forgotten\nto delete the corresponding "
- ".frm files of InnoDB tables, or you\n"
- "have moved .frm files to another database?\n"
+ sql_print_error("Cannot find or open table %s from\n"
+ "the internal data dictionary of InnoDB "
+ "though the .frm file for the\n"
+ "table exists. Maybe you have deleted and "
+ "recreated InnoDB data\n"
+ "files but have forgotten to delete the "
+ "corresponding .frm files\n"
+ "of InnoDB tables, or you have moved .frm "
+ "files to another database?\n"
+ "or, the table contains indexes that this "
+ "version of the engine\n"
+ "doesn't support.\n"
"See http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html\n"
"how you can resolve the problem.\n",
norm_name);
@@ -2338,7 +2336,6 @@ ha_innobase::open(
}
if (ib_table->ibd_file_missing && !thd_tablespace_op(thd)) {
- ut_print_timestamp(stderr);
sql_print_error("MySQL is trying to open a table handle but "
"the .ibd file for\ntable %s does not exist.\n"
"Have you deleted the .ibd file from the "
@@ -3412,7 +3409,7 @@ no_commit:
/*
ut_print_timestamp(stderr);
fprintf(stderr,
- " InnoDB error: ALTER TABLE is holding lock"
+ " InnoDB: ALTER TABLE is holding lock"
" on %lu tables!\n",
prebuilt->trx->mysql_n_tables_locked);
*/
@@ -3476,6 +3473,7 @@ no_commit:
/* Handle duplicate key errors */
if (auto_inc_used) {
+ ulint err;
ulonglong auto_inc;
/* Note the number of rows processed for this statement, used
@@ -3529,7 +3527,11 @@ set_max_autoinc:
ut_a(prebuilt->table->autoinc_increment > 0);
auto_inc += prebuilt->table->autoinc_increment;
- innobase_set_max_autoinc(auto_inc);
+ err = innobase_set_max_autoinc(auto_inc);
+
+ if (err != DB_SUCCESS) {
+ error = (int) err;
+ }
}
break;
}
@@ -3765,7 +3767,7 @@ ha_innobase::update_row(
if (auto_inc != 0) {
auto_inc += prebuilt->table->autoinc_increment;
- innobase_set_max_autoinc(auto_inc);
+ error = innobase_set_max_autoinc(auto_inc);
}
}
@@ -3773,6 +3775,16 @@ ha_innobase::update_row(
error = convert_error_code_to_mysql(error, user_thd);
+ if (error == 0 /* success */
+ && uvect->n_fields == 0 /* no columns were updated */) {
+
+ /* This is the same as success, but instructs
+ MySQL that the row is not really updated and it
+ should not increase the count of updated rows.
+ This is fix for http://bugs.mysql.com/29157 */
+ error = HA_ERR_RECORD_IS_THE_SAME;
+ }
+
/* Tell InnoDB server that there might be work for
utility threads: */
@@ -3952,33 +3964,51 @@ convert_search_mode_to_innobase(
enum ha_rkey_function find_flag)
{
switch (find_flag) {
- case HA_READ_KEY_EXACT: return(PAGE_CUR_GE);
- /* the above does not require the index to be UNIQUE */
- case HA_READ_KEY_OR_NEXT: return(PAGE_CUR_GE);
- case HA_READ_KEY_OR_PREV: return(PAGE_CUR_LE);
- case HA_READ_AFTER_KEY: return(PAGE_CUR_G);
- case HA_READ_BEFORE_KEY: return(PAGE_CUR_L);
- case HA_READ_PREFIX: return(PAGE_CUR_GE);
- case HA_READ_PREFIX_LAST: return(PAGE_CUR_LE);
- case HA_READ_PREFIX_LAST_OR_PREV:return(PAGE_CUR_LE);
- /* In MySQL-4.0 HA_READ_PREFIX and HA_READ_PREFIX_LAST always
- pass a complete-field prefix of a key value as the search
- tuple. I.e., it is not allowed that the last field would
- just contain n first bytes of the full field value.
- MySQL uses a 'padding' trick to convert LIKE 'abc%'
- type queries so that it can use as a search tuple
- a complete-field-prefix of a key value. Thus, the InnoDB
- search mode PAGE_CUR_LE_OR_EXTENDS is never used.
- TODO: when/if MySQL starts to use also partial-field
- prefixes, we have to deal with stripping of spaces
- and comparison of non-latin1 char type fields in
- innobase_mysql_cmp() to get PAGE_CUR_LE_OR_EXTENDS to
- work correctly. */
-
- default: assert(0);
- }
-
- return(0);
+ case HA_READ_KEY_EXACT:
+ /* this does not require the index to be UNIQUE */
+ return(PAGE_CUR_GE);
+ case HA_READ_KEY_OR_NEXT:
+ return(PAGE_CUR_GE);
+ case HA_READ_KEY_OR_PREV:
+ return(PAGE_CUR_LE);
+ case HA_READ_AFTER_KEY:
+ return(PAGE_CUR_G);
+ case HA_READ_BEFORE_KEY:
+ return(PAGE_CUR_L);
+ case HA_READ_PREFIX:
+ return(PAGE_CUR_GE);
+ case HA_READ_PREFIX_LAST:
+ return(PAGE_CUR_LE);
+ case HA_READ_PREFIX_LAST_OR_PREV:
+ return(PAGE_CUR_LE);
+ /* In MySQL-4.0 HA_READ_PREFIX and HA_READ_PREFIX_LAST always
+ pass a complete-field prefix of a key value as the search
+ tuple. I.e., it is not allowed that the last field would
+ just contain n first bytes of the full field value.
+ MySQL uses a 'padding' trick to convert LIKE 'abc%'
+ type queries so that it can use as a search tuple
+ a complete-field-prefix of a key value. Thus, the InnoDB
+ search mode PAGE_CUR_LE_OR_EXTENDS is never used.
+ TODO: when/if MySQL starts to use also partial-field
+ prefixes, we have to deal with stripping of spaces
+ and comparison of non-latin1 char type fields in
+ innobase_mysql_cmp() to get PAGE_CUR_LE_OR_EXTENDS to
+ work correctly. */
+ case HA_READ_MBR_CONTAIN:
+ case HA_READ_MBR_INTERSECT:
+ case HA_READ_MBR_WITHIN:
+ case HA_READ_MBR_DISJOINT:
+ case HA_READ_MBR_EQUAL:
+ my_error(ER_TABLE_CANT_HANDLE_SPKEYS, MYF(0));
+ return(PAGE_CUR_UNSUPP);
+ /* do not use "default:" in order to produce a gcc warning:
+ enumeration value '...' not handled in switch
+ (if -Wswitch or -Wall is used) */
+ }
+
+ my_error(ER_CHECK_NOT_IMPLEMENTED, MYF(0), "this functionality");
+
+ return(PAGE_CUR_UNSUPP);
}
/*
@@ -4106,11 +4136,18 @@ ha_innobase::index_read(
last_match_mode = (uint) match_mode;
- innodb_srv_conc_enter_innodb(prebuilt->trx);
+ if (mode != PAGE_CUR_UNSUPP) {
- ret = row_search_for_mysql((byte*) buf, mode, prebuilt, match_mode, 0);
+ innodb_srv_conc_enter_innodb(prebuilt->trx);
- innodb_srv_conc_exit_innodb(prebuilt->trx);
+ ret = row_search_for_mysql((byte*) buf, mode, prebuilt,
+ match_mode, 0);
+
+ innodb_srv_conc_exit_innodb(prebuilt->trx);
+ } else {
+
+ ret = DB_UNSUPPORTED;
+ }
if (ret == DB_SUCCESS) {
error = 0;
@@ -5460,8 +5497,16 @@ ha_innobase::records_in_range(
mode2 = convert_search_mode_to_innobase(max_key ? max_key->flag :
HA_READ_KEY_EXACT);
- n_rows = btr_estimate_n_rows_in_range(index, range_start,
- mode1, range_end, mode2);
+ if (mode1 != PAGE_CUR_UNSUPP && mode2 != PAGE_CUR_UNSUPP) {
+
+ n_rows = btr_estimate_n_rows_in_range(index, range_start,
+ mode1, range_end,
+ mode2);
+ } else {
+
+ n_rows = 0;
+ }
+
dtuple_free_for_mysql(heap1);
dtuple_free_for_mysql(heap2);
@@ -5691,7 +5736,9 @@ ha_innobase::info(
stats.index_file_length = ((ulonglong)
ib_table->stat_sum_of_other_index_sizes)
* UNIV_PAGE_SIZE;
- stats.delete_length = 0;
+ stats.delete_length =
+ fsp_get_available_space_in_free_extents(
+ ib_table->space);
stats.check_time = 0;
if (stats.records == 0) {
@@ -5710,7 +5757,6 @@ ha_innobase::info(
for (i = 0; i < table->s->keys; i++) {
if (index == NULL) {
- ut_print_timestamp(stderr);
sql_print_error("Table %s contains fewer "
"indexes inside InnoDB than "
"are defined in the MySQL "
@@ -5726,7 +5772,6 @@ ha_innobase::info(
for (j = 0; j < table->key_info[i].key_parts; j++) {
if (j + 1 > index->n_uniq) {
- ut_print_timestamp(stderr);
sql_print_error(
"Index %s of %s has %lu columns unique inside InnoDB, but MySQL is asking "
"statistics for %lu columns. Have you mixed up .frm files from different "
@@ -5791,7 +5836,6 @@ ha_innobase::info(
ret = innobase_read_and_init_auto_inc(&auto_inc);
if (ret != 0) {
- ut_print_timestamp(stderr);
sql_print_error("Cannot get table %s auto-inc"
"counter value in ::info\n",
ib_table->name);
@@ -6304,6 +6348,9 @@ ha_innobase::start_stmt(
innobase_release_stat_resources(trx);
+ /* Reset the AUTOINC statement level counter for multi-row INSERTs. */
+ trx->n_autoinc_rows = 0;
+
prebuilt->sql_stat_start = TRUE;
prebuilt->hint_need_to_fetch_extra_cols = 0;
reset_template(prebuilt);
@@ -6446,9 +6493,6 @@ ha_innobase::external_lock(
innobase_register_stmt(ht, thd);
}
- trx->n_mysql_tables_in_use++;
- prebuilt->mysql_has_locked = TRUE;
-
if (trx->isolation_level == TRX_ISO_SERIALIZABLE
&& prebuilt->select_lock_type == LOCK_NONE
&& thd_test_options(thd,
@@ -6497,6 +6541,9 @@ ha_innobase::external_lock(
trx->mysql_n_tables_locked++;
}
+ trx->n_mysql_tables_in_use++;
+ prebuilt->mysql_has_locked = TRUE;
+
DBUG_RETURN(0);
}
@@ -6562,14 +6609,17 @@ ha_innobase::transactional_table_lock(
if (prebuilt->table->ibd_file_missing && !thd_tablespace_op(thd)) {
ut_print_timestamp(stderr);
- fprintf(stderr, " InnoDB error:\n"
-"MySQL is trying to use a table handle but the .ibd file for\n"
-"table %s does not exist.\n"
-"Have you deleted the .ibd file from the database directory under\n"
-"the MySQL datadir?"
-"See http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html\n"
-"how you can resolve the problem.\n",
- prebuilt->table->name);
+ fprintf(stderr,
+ " InnoDB: MySQL is trying to use a table handle"
+ " but the .ibd file for\n"
+ "InnoDB: table %s does not exist.\n"
+ "InnoDB: Have you deleted the .ibd file"
+ " from the database directory under\n"
+ "InnoDB: the MySQL datadir?"
+ "InnoDB: See"
+ " http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html\n"
+ "InnoDB: how you can resolve the problem.\n",
+ prebuilt->table->name);
DBUG_RETURN(HA_ERR_CRASHED);
}
@@ -7120,8 +7170,8 @@ the value of the auto-inc counter. */
int
ha_innobase::innobase_read_and_init_auto_inc(
/*=========================================*/
- /* out: 0 or error code:
- deadlock or lock wait timeout */
+ /* out: 0 or generic MySQL
+ error code */
longlong* value) /* out: the autoinc value */
{
longlong auto_inc;
@@ -7178,9 +7228,10 @@ ha_innobase::innobase_read_and_init_auto_inc(
++auto_inc;
dict_table_autoinc_initialize(innodb_table, auto_inc);
} else {
- fprintf(stderr, " InnoDB error: Couldn't read the "
- "max AUTOINC value from index (%s).\n",
- index->name);
+ ut_print_timestamp(stderr);
+ fprintf(stderr, " InnoDB: Error: (%lu) Couldn't read "
+ "the max AUTOINC value from the index (%s).\n",
+ error, index->name);
mysql_error = 1;
}
@@ -7213,10 +7264,16 @@ On return if there is no error then the tables AUTOINC lock is locked.*/
ulong
ha_innobase::innobase_get_auto_increment(
+/*=====================================*/
ulonglong* value) /* out: autoinc value */
{
ulong error;
+ *value = 0;
+
+ /* Note: If the table is not initialized when we attempt the
+ read below. We initialize the table's auto-inc counter and
+ always do a reread of the AUTOINC value. */
do {
error = innobase_autoinc_lock();
@@ -7256,7 +7313,15 @@ ha_innobase::innobase_get_auto_increment(
} else {
*value = (ulonglong) autoinc;
}
+ /* A deadlock error during normal processing is OK
+ and can be ignored. */
+ } else if (error != DB_DEADLOCK) {
+
+ sql_print_error("InnoDB: Error: %lu in "
+ "::innobase_get_auto_increment()",
+ error);
}
+
} while (*value == 0 && error == DB_SUCCESS);
return(error);
@@ -7272,7 +7337,7 @@ we have a table-level lock). offset, increment, nb_desired_values are ignored.
void
ha_innobase::get_auto_increment(
-/*=================================*/
+/*============================*/
ulonglong offset, /* in: */
ulonglong increment, /* in: table autoinc increment */
ulonglong nb_desired_values, /* in: number of values reqd */
@@ -7289,13 +7354,6 @@ ha_innobase::get_auto_increment(
error = innobase_get_auto_increment(&autoinc);
if (error != DB_SUCCESS) {
- /* This should never happen in the code > ver 5.0.6,
- since we call this function only after the counter
- has been initialized. */
-
- ut_print_timestamp(stderr);
- sql_print_error("Error %lu in ::get_auto_increment()", error);
-
*first_value = (~(ulonglong) 0);
return;
}
@@ -7310,6 +7368,11 @@ ha_innobase::get_auto_increment(
trx = prebuilt->trx;
+ /* Note: We can't rely on *first_value since some MySQL engines,
+ in particular the partition engine, don't initialize it to 0 when
+ invoking this method. So we are not sure if it's guaranteed to
+ be 0 or not. */
+
/* Called for the first time ? */
if (trx->n_autoinc_rows == 0) {
@@ -7318,16 +7381,16 @@ ha_innobase::get_auto_increment(
/* It's possible for nb_desired_values to be 0:
e.g., INSERT INTO T1(C) SELECT C FROM T2; */
if (nb_desired_values == 0) {
-
+
trx->n_autoinc_rows = 1;
}
-
+
set_if_bigger(*first_value, autoinc);
/* Not in the middle of a mult-row INSERT. */
} else if (prebuilt->last_value == 0) {
set_if_bigger(*first_value, autoinc);
}
-
+
*nb_reserved_values = trx->n_autoinc_rows;
/* With old style AUTOINC locking we only update the table's
@@ -7359,7 +7422,9 @@ ha_innobase::get_auto_increment(
/* See comment in handler.h */
int
-ha_innobase::reset_auto_increment(ulonglong value)
+ha_innobase::reset_auto_increment(
+/*==============================*/
+ ulonglong value) /* in: new value for table autoinc */
{
DBUG_ENTER("ha_innobase::reset_auto_increment");
@@ -7923,6 +7988,11 @@ static MYSQL_SYSVAR_BOOL(stats_on_metadata, innobase_stats_on_metadata,
"Enable statistics gathering for metadata commands such as SHOW TABLE STATUS (on by default)",
NULL, NULL, TRUE);
+static MYSQL_SYSVAR_BOOL(use_adaptive_hash_indexes, innobase_use_adaptive_hash_indexes,
+ PLUGIN_VAR_OPCMDARG | PLUGIN_VAR_READONLY,
+ "Enable the InnoDB adaptive hash indexes (enabled by default)",
+ NULL, NULL, TRUE);
+
static MYSQL_SYSVAR_LONG(additional_mem_pool_size, innobase_additional_mem_pool_size,
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
"Size of a memory pool InnoDB uses to store data dictionary information and other internal data structures.",
@@ -8051,6 +8121,7 @@ static struct st_mysql_sys_var* innobase_system_variables[]= {
MYSQL_SYSVAR(open_files),
MYSQL_SYSVAR(rollback_on_timeout),
MYSQL_SYSVAR(stats_on_metadata),
+ MYSQL_SYSVAR(use_adaptive_hash_indexes),
MYSQL_SYSVAR(status_file),
MYSQL_SYSVAR(support_xa),
MYSQL_SYSVAR(sync_spin_loops),
diff --git a/storage/innobase/handler/ha_innodb.h b/storage/innobase/handler/ha_innodb.h
index fe5ebd57990..773884b6584 100644
--- a/storage/innobase/handler/ha_innodb.h
+++ b/storage/innobase/handler/ha_innodb.h
@@ -250,17 +250,3 @@ int thd_binlog_format(const MYSQL_THD thd);
*/
void thd_mark_transaction_to_rollback(MYSQL_THD thd, bool all);
}
-
-/*
- don't delete it - it may be re-enabled later
- as an optimization for the most common case InnoDB+binlog
-*/
-#if 0
-int innobase_report_binlog_offset_and_commit(
- THD* thd,
- void* trx_handle,
- char* log_file_name,
- my_off_t end_offset);
-int innobase_commit_complete(void* trx_handle);
-void innobase_store_binlog_offset_and_flush_log(char *binlog_name,longlong offset);
-#endif
diff --git a/storage/innobase/ibuf/ibuf0ibuf.c b/storage/innobase/ibuf/ibuf0ibuf.c
index 44972356304..126fd9fdd33 100644
--- a/storage/innobase/ibuf/ibuf0ibuf.c
+++ b/storage/innobase/ibuf/ibuf0ibuf.c
@@ -2900,7 +2900,7 @@ dump:
ut_print_timestamp(stderr);
fprintf(stderr,
- "InnoDB: Error: Insert buffer insert"
+ " InnoDB: Error: Insert buffer insert"
" fails; page free %lu,"
" dtuple size %lu\n",
(ulong) page_get_max_insert_size(
@@ -2925,7 +2925,7 @@ dump:
buf_frame_get_page_no(page),
IBUF_BITMAP_FREE, mtr);
- fprintf(stderr, "Bitmap bits %lu\n",
+ fprintf(stderr, "InnoDB: Bitmap bits %lu\n",
(ulong) old_bits);
fputs("InnoDB: Submit a detailed bug report"
diff --git a/storage/innobase/include/db0err.h b/storage/innobase/include/db0err.h
index 0aa1b87e470..ed7ce151718 100644
--- a/storage/innobase/include/db0err.h
+++ b/storage/innobase/include/db0err.h
@@ -61,12 +61,14 @@ Created 5/24/1996 Heikki Tuuri
activated by the operation would
lead to a duplicate key in some
table */
-
#define DB_TOO_MANY_CONCURRENT_TRXS 47 /* when InnoDB runs out of the
preconfigured undo slots, this can
only happen when there are too many
concurrent transactions */
-
+#define DB_UNSUPPORTED 48 /* when InnoDB sees any artefact or
+ a feature that it can't recoginize or
+ work with e.g., FT indexes created by
+ a later version of the engine. */
/* The following are partial failure codes */
#define DB_FAIL 1000
#define DB_OVERFLOW 1001
diff --git a/storage/innobase/include/ha_prototypes.h b/storage/innobase/include/ha_prototypes.h
index 7fb50988941..ef0722321af 100644
--- a/storage/innobase/include/ha_prototypes.h
+++ b/storage/innobase/include/ha_prototypes.h
@@ -1,6 +1,8 @@
#ifndef HA_INNODB_PROTOTYPES_H
#define HA_INNODB_PROTOTYPES_H
+#ifndef UNIV_HOTBACKUP
+
#include "univ.i" /* ulint, uint */
#include "m_ctype.h" /* CHARSET_INFO */
@@ -22,6 +24,19 @@ innobase_convert_string(
CHARSET_INFO* from_cs,
uint* errors);
+/*********************************************************************
+Display an SQL identifier. */
+
+void
+innobase_print_identifier(
+/*======================*/
+ FILE* f, /* in: output stream */
+ trx_t* trx, /* in: transaction */
+ ibool table_id,/* in: TRUE=print a table name,
+ FALSE=print other identifier */
+ const char* name, /* in: name to print */
+ ulint namelen);/* in: length of name */
+
/**********************************************************************
Returns true if the thread is the replication thread on the slave
server. Used in srv_conc_enter_innodb() to determine if the thread
@@ -49,3 +64,4 @@ thd_has_edited_nontrans_tables(
void* thd); /* in: thread handle (THD*) */
#endif
+#endif
diff --git a/storage/innobase/include/mach0data.h b/storage/innobase/include/mach0data.h
index 8377114a723..37d862cc678 100644
--- a/storage/innobase/include/mach0data.h
+++ b/storage/innobase/include/mach0data.h
@@ -327,6 +327,17 @@ mach_write_to_2_little_endian(
byte* dest, /* in: where to write */
ulint n); /* in: unsigned long int to write */
+/*************************************************************
+Convert integral type from storage byte order (big endian) to
+host byte order. */
+UNIV_INLINE
+void
+mach_read_int_type(
+/*===============*/
+ byte* dest, /* out: where to write */
+ const byte* src, /* in: where to read from */
+ ulint len, /* in: length of src */
+ ibool unsigned_type); /* in: signed or unsigned flag */
#ifndef UNIV_NONINL
#include "mach0data.ic"
#endif
diff --git a/storage/innobase/include/mach0data.ic b/storage/innobase/include/mach0data.ic
index 03ece7529a8..64fb87f56ed 100644
--- a/storage/innobase/include/mach0data.ic
+++ b/storage/innobase/include/mach0data.ic
@@ -7,6 +7,8 @@ to the machine format.
Created 11/28/1995 Heikki Tuuri
***********************************************************************/
+#include "ut0mem.h"
+
/***********************************************************
The following function is used to store data in one byte. */
UNIV_INLINE
@@ -689,3 +691,38 @@ mach_write_to_2_little_endian(
*dest = (byte)(n & 0xFFUL);
}
+
+/*************************************************************
+Convert integral type from storage byte order (big endian) to
+host byte order. */
+UNIV_INLINE
+void
+mach_read_int_type(
+/*===============*/
+ byte* dest, /* out: where to write */
+ const byte* src, /* in: where to read from */
+ ulint len, /* in: length of src */
+ ibool unsigned_type) /* in: signed or unsigned flag */
+{
+#ifdef WORDS_BIGENDIAN
+ memcpy(dest, src, len);
+
+ if (!unsigned_type) {
+ dest[0] ^= 128;
+ }
+#else
+ byte* ptr;
+
+ /* Convert integer data from Innobase to a little-endian format,
+ sign bit restored to normal. */
+
+ for (ptr = dest + len; ptr != dest; ++src) {
+ --ptr;
+ *ptr = *src;
+ }
+
+ if (!unsigned_type) {
+ dest[len - 1] ^= 128;
+ }
+#endif
+}
diff --git a/storage/innobase/include/mem0dbg.h b/storage/innobase/include/mem0dbg.h
index 36cd7a89565..2393e4edb54 100644
--- a/storage/innobase/include/mem0dbg.h
+++ b/storage/innobase/include/mem0dbg.h
@@ -60,6 +60,14 @@ mem_heap_validate_or_print(
ulint* n_blocks); /* out: number of blocks in the heap,
if a NULL pointer is passed as this
argument, it is ignored */
+/******************************************************************
+Validates the contents of a memory heap. */
+
+ibool
+mem_heap_validate(
+/*==============*/
+ /* out: TRUE if ok */
+ mem_heap_t* heap); /* in: memory heap */
#endif /* UNIV_MEM_DEBUG || UNIV_DEBUG */
#ifdef UNIV_DEBUG
/******************************************************************
@@ -71,14 +79,6 @@ mem_heap_check(
/* out: TRUE if ok */
mem_heap_t* heap); /* in: memory heap */
#endif /* UNIV_DEBUG */
-/******************************************************************
-Validates the contents of a memory heap. */
-
-ibool
-mem_heap_validate(
-/*==============*/
- /* out: TRUE if ok */
- mem_heap_t* heap); /* in: memory heap */
#ifdef UNIV_MEM_DEBUG
/*********************************************************************
TRUE if no memory is currently allocated. */
diff --git a/storage/innobase/include/mem0mem.ic b/storage/innobase/include/mem0mem.ic
index adae9ad8a33..6227a27f277 100644
--- a/storage/innobase/include/mem0mem.ic
+++ b/storage/innobase/include/mem0mem.ic
@@ -271,19 +271,16 @@ mem_heap_free_heap_top(
ut_ad(mem_block_get_start(block) <= mem_block_get_free(block));
/* In the debug version erase block from top up */
- {
- ulint len = (byte*)block + block->len - old_top;
- mem_erase_buf(old_top, len);
- UNIV_MEM_FREE(old_top, len);
- }
+ mem_erase_buf(old_top, (byte*)block + block->len - old_top);
/* Update allocated memory count */
mutex_enter(&mem_hash_mutex);
mem_current_allocated_memory -= (total_size - size);
mutex_exit(&mem_hash_mutex);
#else /* UNIV_MEM_DEBUG */
- UNIV_MEM_FREE(old_top, (byte*)block + block->len - old_top);
+ UNIV_MEM_ASSERT_W(old_top, (byte*)block + block->len - old_top);
#endif /* UNIV_MEM_DEBUG */
+ UNIV_MEM_ALLOC(old_top, (byte*)block + block->len - old_top);
/* If free == start, we may free the block if it is not the first
one */
@@ -363,6 +360,7 @@ mem_heap_free_top(
/* Subtract the free field of block */
mem_block_set_free(block, mem_block_get_free(block)
- MEM_SPACE_NEEDED(n));
+ UNIV_MEM_ASSERT_W((byte*) block + mem_block_get_free(block), n);
#ifdef UNIV_MEM_DEBUG
ut_ad(mem_block_get_start(block) <= mem_block_get_free(block));
@@ -378,7 +376,11 @@ mem_heap_free_top(
== mem_block_get_start(block))) {
mem_heap_block_free(heap, block);
} else {
- UNIV_MEM_FREE((byte*) block + mem_block_get_free(block), n);
+ /* Avoid a bogus UNIV_MEM_ASSERT_W() warning in a
+ subsequent invocation of mem_heap_free_top().
+ Originally, this was UNIV_MEM_FREE(), to catch writes
+ to freed memory. */
+ UNIV_MEM_ALLOC((byte*) block + mem_block_get_free(block), n);
}
}
diff --git a/storage/innobase/include/page0cur.h b/storage/innobase/include/page0cur.h
index 36370201d9b..04f731414a3 100644
--- a/storage/innobase/include/page0cur.h
+++ b/storage/innobase/include/page0cur.h
@@ -22,6 +22,7 @@ Created 10/4/1994 Heikki Tuuri
/* Page cursor search modes; the values must be in this order! */
+#define PAGE_CUR_UNSUPP 0
#define PAGE_CUR_G 1
#define PAGE_CUR_GE 2
#define PAGE_CUR_L 3
diff --git a/storage/innobase/include/rem0rec.ic b/storage/innobase/include/rem0rec.ic
index 95aa65fabba..5a4a0a0b5df 100644
--- a/storage/innobase/include/rem0rec.ic
+++ b/storage/innobase/include/rem0rec.ic
@@ -801,6 +801,7 @@ rec_offs_set_n_alloc(
{
ut_ad(offsets);
ut_ad(n_alloc > 0);
+ UNIV_MEM_ASSERT_AND_ALLOC(offsets, n_alloc * sizeof *offsets);
offsets[0] = n_alloc;
}
diff --git a/storage/innobase/include/row0mysql.h b/storage/innobase/include/row0mysql.h
index aabb7f5f047..fd7ec8918ee 100644
--- a/storage/innobase/include/row0mysql.h
+++ b/storage/innobase/include/row0mysql.h
@@ -319,9 +319,11 @@ row_mysql_unfreeze_data_dictionary(
/*===============================*/
trx_t* trx); /* in: transaction */
/*************************************************************************
-Does a table creation operation for MySQL. If the name of the created
-table ends to characters INNODB_MONITOR, then this also starts
-printing of monitor output by the master thread. */
+Drops a table for MySQL. If the name of the table ends in
+one of "innodb_monitor", "innodb_lock_monitor", "innodb_tablespace_monitor",
+"innodb_table_monitor", then this will also start the printing of monitor
+output by the master thread. If the table name ends in "innodb_mem_validate",
+InnoDB will try to invoke mem_validate(). */
int
row_create_table_for_mysql(
@@ -399,8 +401,9 @@ row_truncate_table_for_mysql(
dict_table_t* table, /* in: table handle */
trx_t* trx); /* in: transaction handle */
/*************************************************************************
-Drops a table for MySQL. If the name of the dropped table ends to
-characters INNODB_MONITOR, then this also stops printing of monitor
+Drops a table for MySQL. If the name of the dropped table ends in
+one of "innodb_monitor", "innodb_lock_monitor", "innodb_tablespace_monitor",
+"innodb_table_monitor", then this will also stop the printing of monitor
output by the master thread. */
int
diff --git a/storage/innobase/include/sync0rw.h b/storage/innobase/include/sync0rw.h
index abf04253141..7d2f63803d0 100644
--- a/storage/innobase/include/sync0rw.h
+++ b/storage/innobase/include/sync0rw.h
@@ -101,6 +101,7 @@ void
rw_lock_free(
/*=========*/
rw_lock_t* lock); /* in: rw-lock */
+#ifdef UNIV_DEBUG
/**********************************************************************
Checks that the rw-lock has been initialized and that there are no
simultaneous shared and exclusive locks. */
@@ -109,6 +110,7 @@ ibool
rw_lock_validate(
/*=============*/
rw_lock_t* lock);
+#endif /* UNIV_DEBUG */
/******************************************************************
NOTE! The following macros should be used in rw s-locking, not the
corresponding function. */
diff --git a/storage/innobase/include/univ.i b/storage/innobase/include/univ.i
index ba8e6e56219..8163ae16e4e 100644
--- a/storage/innobase/include/univ.i
+++ b/storage/innobase/include/univ.i
@@ -308,11 +308,39 @@ typedef void* os_thread_ret_t;
# define UNIV_MEM_INVALID(addr, size) VALGRIND_MAKE_MEM_UNDEFINED(addr, size)
# define UNIV_MEM_FREE(addr, size) VALGRIND_MAKE_MEM_NOACCESS(addr, size)
# define UNIV_MEM_ALLOC(addr, size) VALGRIND_MAKE_MEM_UNDEFINED(addr, size)
+# define UNIV_MEM_ASSERT_RW(addr, size) do { \
+ const void* _p = (const void*) (ulint) \
+ VALGRIND_CHECK_MEM_IS_DEFINED(addr, size); \
+ if (UNIV_LIKELY_NULL(_p)) \
+ fprintf(stderr, "%s:%d: %p[%u] undefined at %ld\n", \
+ __FILE__, __LINE__, \
+ (const void*) (addr), (unsigned) (size), (long) \
+ (((const char*) _p) - ((const char*) (addr)))); \
+ } while (0)
+# define UNIV_MEM_ASSERT_W(addr, size) do { \
+ const void* _p = (const void*) (ulint) \
+ VALGRIND_CHECK_MEM_IS_ADDRESSABLE(addr, size); \
+ if (UNIV_LIKELY_NULL(_p)) \
+ fprintf(stderr, "%s:%d: %p[%u] unwritable at %ld\n", \
+ __FILE__, __LINE__, \
+ (const void*) (addr), (unsigned) (size), (long) \
+ (((const char*) _p) - ((const char*) (addr)))); \
+ } while (0)
#else
# define UNIV_MEM_VALID(addr, size) do {} while(0)
# define UNIV_MEM_INVALID(addr, size) do {} while(0)
# define UNIV_MEM_FREE(addr, size) do {} while(0)
# define UNIV_MEM_ALLOC(addr, size) do {} while(0)
+# define UNIV_MEM_ASSERT_RW(addr, size) do {} while(0)
+# define UNIV_MEM_ASSERT_W(addr, size) do {} while(0)
#endif
+#define UNIV_MEM_ASSERT_AND_FREE(addr, size) do { \
+ UNIV_MEM_ASSERT_W(addr, size); \
+ UNIV_MEM_FREE(addr, size); \
+} while (0)
+#define UNIV_MEM_ASSERT_AND_ALLOC(addr, size) do { \
+ UNIV_MEM_ASSERT_W(addr, size); \
+ UNIV_MEM_ALLOC(addr, size); \
+} while (0)
#endif
diff --git a/storage/innobase/include/ut0ut.h b/storage/innobase/include/ut0ut.h
index 825c10d5f11..a60ce73c35a 100644
--- a/storage/innobase/include/ut0ut.h
+++ b/storage/innobase/include/ut0ut.h
@@ -263,6 +263,24 @@ ut_copy_file(
FILE* dest, /* in: output file */
FILE* src); /* in: input file to be appended to output */
+/**************************************************************************
+snprintf(). */
+
+#ifdef __WIN__
+int
+ut_snprintf(
+ /* out: number of characters that would
+ have been printed if the size were
+ unlimited, not including the terminating
+ '\0'. */
+ char* str, /* out: string */
+ size_t size, /* in: str size */
+ const char* fmt, /* in: format */
+ ...); /* in: format values */
+#else
+#define ut_snprintf snprintf
+#endif /* __WIN__ */
+
#ifndef UNIV_NONINL
#include "ut0ut.ic"
#endif
diff --git a/storage/innobase/mem/mem0dbg.c b/storage/innobase/mem/mem0dbg.c
index eb77dd01f6d..72452907c3f 100644
--- a/storage/innobase/mem/mem0dbg.c
+++ b/storage/innobase/mem/mem0dbg.c
@@ -223,6 +223,8 @@ mem_init_buf(
{
byte* ptr;
+ UNIV_MEM_ASSERT_W(buf, n);
+
for (ptr = buf; ptr < buf + n; ptr++) {
if (ut_rnd_gen_ibool()) {
@@ -231,6 +233,8 @@ mem_init_buf(
*ptr = 0xBE;
}
}
+
+ UNIV_MEM_INVALID(buf, n);
}
/*******************************************************************
@@ -245,6 +249,8 @@ mem_erase_buf(
{
byte* ptr;
+ UNIV_MEM_ASSERT_W(buf, n);
+
for (ptr = buf; ptr < buf + n; ptr++) {
if (ut_rnd_gen_ibool()) {
*ptr = 0xDE;
@@ -252,6 +258,8 @@ mem_erase_buf(
*ptr = 0xAD;
}
}
+
+ UNIV_MEM_FREE(buf, n);
}
/*******************************************************************
@@ -546,9 +554,7 @@ completed:
}
*error = FALSE;
}
-#endif /* UNIV_MEM_DEBUG || UNIV_DEBUG */
-#ifdef UNIV_DEBUG
/******************************************************************
Prints the contents of a memory heap. */
static
@@ -575,20 +581,6 @@ mem_heap_print(
}
/******************************************************************
-Checks that an object is a memory heap (or a block of it). */
-
-ibool
-mem_heap_check(
-/*===========*/
- /* out: TRUE if ok */
- mem_heap_t* heap) /* in: memory heap */
-{
- ut_a(heap->magic_n == MEM_BLOCK_MAGIC_N);
-
- return(TRUE);
-}
-
-/******************************************************************
Validates the contents of a memory heap. */
ibool
@@ -614,6 +606,22 @@ mem_heap_validate(
return(TRUE);
}
+#endif /* UNIV_MEM_DEBUG || UNIV_DEBUG */
+
+#ifdef UNIV_DEBUG
+/******************************************************************
+Checks that an object is a memory heap (or a block of it). */
+
+ibool
+mem_heap_check(
+/*===========*/
+ /* out: TRUE if ok */
+ mem_heap_t* heap) /* in: memory heap */
+{
+ ut_a(heap->magic_n == MEM_BLOCK_MAGIC_N);
+
+ return(TRUE);
+}
#endif /* UNIV_DEBUG */
#ifdef UNIV_MEM_DEBUG
diff --git a/storage/innobase/mem/mem0mem.c b/storage/innobase/mem/mem0mem.c
index d89a3a55d88..f4fd178a39c 100644
--- a/storage/innobase/mem/mem0mem.c
+++ b/storage/innobase/mem/mem0mem.c
@@ -512,9 +512,9 @@ mem_heap_block_free(
of hex 0xDE and 0xAD. */
mem_erase_buf((byte*)block, len);
-
-#endif
- UNIV_MEM_FREE(block, len);
+#else /* UNIV_MEM_DEBUG */
+ UNIV_MEM_ASSERT_AND_FREE(block, len);
+#endif /* UNIV_MEM_DEBUG */
if (init_block) {
/* Do not have to free: do nothing */
diff --git a/storage/innobase/row/row0mysql.c b/storage/innobase/row/row0mysql.c
index b8d201e3da2..9348cfa7342 100644
--- a/storage/innobase/row/row0mysql.c
+++ b/storage/innobase/row/row0mysql.c
@@ -1728,10 +1728,11 @@ row_mysql_unlock_data_dictionary(
}
/*************************************************************************
-Does a table creation operation for MySQL. If the name of the table
-to be created is equal with one of the predefined magic table names,
-then this also starts printing the corresponding monitor output by
-the master thread. */
+Drops a table for MySQL. If the name of the table ends in
+one of "innodb_monitor", "innodb_lock_monitor", "innodb_tablespace_monitor",
+"innodb_table_monitor", then this will also start the printing of monitor
+output by the master thread. If the table name ends in "innodb_mem_validate",
+InnoDB will try to invoke mem_validate(). */
int
row_create_table_for_mysql(
@@ -1756,13 +1757,11 @@ row_create_table_for_mysql(
ut_ad(trx->dict_operation_lock_mode == RW_X_LATCH);
if (srv_created_new_raw) {
- fputs("InnoDB: A new raw disk partition was initialized or\n"
- "InnoDB: innodb_force_recovery is on: we do not allow\n"
- "InnoDB: database modifications by the user. Shut down\n"
- "InnoDB: mysqld and edit my.cnf so that newraw"
- " is replaced\n"
- "InnoDB: with raw, and innodb_force_... is removed.\n",
- stderr);
+ fputs("InnoDB: A new raw disk partition was initialized:\n"
+ "InnoDB: we do not allow database modifications"
+ " by the user.\n"
+ "InnoDB: Shut down mysqld and edit my.cnf so that newraw"
+ " is replaced with raw.\n", stderr);
dict_mem_table_free(table);
trx_commit_for_mysql(trx);
@@ -2703,13 +2702,11 @@ row_truncate_table_for_mysql(
ut_ad(table);
if (srv_created_new_raw) {
- fputs("InnoDB: A new raw disk partition was initialized or\n"
- "InnoDB: innodb_force_recovery is on: we do not allow\n"
- "InnoDB: database modifications by the user. Shut down\n"
- "InnoDB: mysqld and edit my.cnf so that newraw"
- " is replaced\n"
- "InnoDB: with raw, and innodb_force_... is removed.\n",
- stderr);
+ fputs("InnoDB: A new raw disk partition was initialized:\n"
+ "InnoDB: we do not allow database modifications"
+ " by the user.\n"
+ "InnoDB: Shut down mysqld and edit my.cnf so that newraw"
+ " is replaced with raw.\n", stderr);
return(DB_ERROR);
}
@@ -2898,7 +2895,9 @@ next_rec:
/* MySQL calls ha_innobase::reset_auto_increment() which does
the same thing. */
+ dict_table_autoinc_lock(table);
dict_table_autoinc_initialize(table, 0);
+ dict_table_autoinc_unlock(table);
dict_update_statistics(table);
trx_commit_for_mysql(trx);
@@ -2916,9 +2915,10 @@ funct_exit:
#endif /* !UNIV_HOTBACKUP */
/*************************************************************************
-Drops a table for MySQL. If the name of the table to be dropped is equal
-with one of the predefined magic table names, then this also stops printing
-the corresponding monitor output by the master thread. */
+Drops a table for MySQL. If the name of the dropped table ends in
+one of "innodb_monitor", "innodb_lock_monitor", "innodb_tablespace_monitor",
+"innodb_table_monitor", then this will also stop the printing of monitor
+output by the master thread. */
int
row_drop_table_for_mysql(
@@ -2934,21 +2934,17 @@ row_drop_table_for_mysql(
ulint err;
const char* table_name;
ulint namelen;
- char* dir_path_of_temp_table = NULL;
- ibool success;
ibool locked_dictionary = FALSE;
pars_info_t* info = NULL;
ut_a(name != NULL);
if (srv_created_new_raw) {
- fputs("InnoDB: A new raw disk partition was initialized or\n"
- "InnoDB: innodb_force_recovery is on: we do not allow\n"
- "InnoDB: database modifications by the user. Shut down\n"
- "InnoDB: mysqld and edit my.cnf so that newraw"
- " is replaced\n"
- "InnoDB: with raw, and innodb_force_... is removed.\n",
- stderr);
+ fputs("InnoDB: A new raw disk partition was initialized:\n"
+ "InnoDB: we do not allow database modifications"
+ " by the user.\n"
+ "InnoDB: Shut down mysqld and edit my.cnf so that newraw"
+ " is replaced with raw.\n", stderr);
return(DB_ERROR);
}
@@ -3232,14 +3228,20 @@ check_next_foreign:
} else {
ibool is_path;
const char* name_or_path;
+ mem_heap_t* heap;
+ heap = mem_heap_create(200);
+
+ /* Clone the name, in case it has been allocated
+ from table->heap, which will be freed by
+ dict_table_remove_from_cache(table) below. */
+ name = mem_heap_strdup(heap, name);
space_id = table->space;
if (table->dir_path_of_temp_table != NULL) {
- dir_path_of_temp_table = mem_strdup(
- table->dir_path_of_temp_table);
is_path = TRUE;
- name_or_path = dir_path_of_temp_table;
+ name_or_path = mem_heap_strdup(
+ heap, table->dir_path_of_temp_table);
} else {
is_path = FALSE;
name_or_path = name;
@@ -3272,13 +3274,7 @@ check_next_foreign:
"InnoDB: of table ");
ut_print_name(stderr, trx, TRUE, name);
fprintf(stderr, ".\n");
-
- goto funct_exit;
- }
-
- success = fil_delete_tablespace(space_id);
-
- if (!success) {
+ } else if (!fil_delete_tablespace(space_id)) {
fprintf(stderr,
"InnoDB: We removed now the InnoDB"
" internal data dictionary entry\n"
@@ -3296,6 +3292,8 @@ check_next_foreign:
err = DB_ERROR;
}
}
+
+ mem_heap_free(heap);
}
funct_exit:
@@ -3305,10 +3303,6 @@ funct_exit:
row_mysql_unlock_data_dictionary(trx);
}
- if (dir_path_of_temp_table) {
- mem_free(dir_path_of_temp_table);
- }
-
trx->op_info = "";
#ifndef UNIV_HOTBACKUP
@@ -3318,6 +3312,66 @@ funct_exit:
return((int) err);
}
+/***********************************************************************
+Drop all foreign keys in a database, see Bug#18942.
+Called at the end of row_drop_database_for_mysql(). */
+static
+ulint
+drop_all_foreign_keys_in_db(
+/*========================*/
+ /* out: error code or DB_SUCCESS */
+ const char* name, /* in: database name which ends to '/' */
+ trx_t* trx) /* in: transaction handle */
+{
+ pars_info_t* pinfo;
+ ulint err;
+
+ ut_a(name[strlen(name) - 1] == '/');
+
+ pinfo = pars_info_create();
+
+ pars_info_add_str_literal(pinfo, "dbname", name);
+
+/* true if for_name is not prefixed with dbname */
+#define TABLE_NOT_IN_THIS_DB \
+"SUBSTR(for_name, 0, LENGTH(:dbname)) <> :dbname"
+
+ err = que_eval_sql(pinfo,
+ "PROCEDURE DROP_ALL_FOREIGN_KEYS_PROC () IS\n"
+ "foreign_id CHAR;\n"
+ "for_name CHAR;\n"
+ "found INT;\n"
+ "DECLARE CURSOR cur IS\n"
+ "SELECT ID, FOR_NAME FROM SYS_FOREIGN\n"
+ "WHERE FOR_NAME >= :dbname\n"
+ "LOCK IN SHARE MODE\n"
+ "ORDER BY FOR_NAME;\n"
+ "BEGIN\n"
+ "found := 1;\n"
+ "OPEN cur;\n"
+ "WHILE found = 1 LOOP\n"
+ " FETCH cur INTO foreign_id, for_name;\n"
+ " IF (SQL % NOTFOUND) THEN\n"
+ " found := 0;\n"
+ " ELSIF (" TABLE_NOT_IN_THIS_DB ") THEN\n"
+ " found := 0;\n"
+ " ELSIF (1=1) THEN\n"
+ " DELETE FROM SYS_FOREIGN_COLS\n"
+ " WHERE ID = foreign_id;\n"
+ " DELETE FROM SYS_FOREIGN\n"
+ " WHERE ID = foreign_id;\n"
+ " END IF;\n"
+ "END LOOP;\n"
+ "CLOSE cur;\n"
+ "COMMIT WORK;\n"
+ "END;\n",
+ FALSE, /* do not reserve dict mutex,
+ we are already holding it */
+ trx);
+
+ return(err);
+}
+
/*************************************************************************
Drops a database for MySQL. */
@@ -3388,6 +3442,19 @@ loop:
}
}
+ if (err == DB_SUCCESS) {
+ /* after dropping all tables try to drop all leftover
+ foreign keys in case orphaned ones exist */
+ err = (int) drop_all_foreign_keys_in_db(name, trx);
+
+ if (err != DB_SUCCESS) {
+ fputs("InnoDB: DROP DATABASE ", stderr);
+ ut_print_name(stderr, trx, TRUE, name);
+ fprintf(stderr, " failed with error %d while "
+ "dropping all foreign keys", err);
+ }
+ }
+
trx_commit_for_mysql(trx);
row_mysql_unlock_data_dictionary(trx);
diff --git a/storage/innobase/row/row0sel.c b/storage/innobase/row/row0sel.c
index fdf6aa46351..29bded114e0 100644
--- a/storage/innobase/row/row0sel.c
+++ b/storage/innobase/row/row0sel.c
@@ -531,12 +531,13 @@ row_sel_build_prev_vers(
/*====================*/
/* out: DB_SUCCESS or error code */
read_view_t* read_view, /* in: read view */
- plan_t* plan, /* in: plan node for table */
+ dict_index_t* index, /* in: plan node for table */
rec_t* rec, /* in: record in a clustered index */
ulint** offsets, /* in/out: offsets returned by
rec_get_offsets(rec, plan->index) */
mem_heap_t** offset_heap, /* in/out: memory heap from which
the offsets are allocated */
+ mem_heap_t** old_vers_heap, /* out: old version heap to use */
rec_t** old_vers, /* out: old version, or NULL if the
record does not exist in the view:
i.e., it was freshly inserted
@@ -545,15 +546,15 @@ row_sel_build_prev_vers(
{
ulint err;
- if (plan->old_vers_heap) {
- mem_heap_empty(plan->old_vers_heap);
+ if (*old_vers_heap) {
+ mem_heap_empty(*old_vers_heap);
} else {
- plan->old_vers_heap = mem_heap_create(512);
+ *old_vers_heap = mem_heap_create(512);
}
err = row_vers_build_for_consistent_read(
- rec, mtr, plan->index, offsets, read_view, offset_heap,
- plan->old_vers_heap, old_vers);
+ rec, mtr, index, offsets, read_view, offset_heap,
+ *old_vers_heap, old_vers);
return(err);
}
@@ -765,9 +766,11 @@ row_sel_get_clust_rec(
if (!lock_clust_rec_cons_read_sees(clust_rec, index, offsets,
node->read_view)) {
- err = row_sel_build_prev_vers(node->read_view, plan,
- clust_rec, &offsets,
- &heap, &old_vers, mtr);
+ err = row_sel_build_prev_vers(
+ node->read_view, index, clust_rec,
+ &offsets, &heap, &plan->old_vers_heap,
+ &old_vers, mtr);
+
if (err != DB_SUCCESS) {
goto err_exit;
@@ -1490,10 +1493,11 @@ skip_lock:
if (!lock_clust_rec_cons_read_sees(rec, index, offsets,
node->read_view)) {
- err = row_sel_build_prev_vers(node->read_view,
- plan, rec,
- &offsets, &heap,
- &old_vers, &mtr);
+ err = row_sel_build_prev_vers(
+ node->read_view, index, rec,
+ &offsets, &heap, &plan->old_vers_heap,
+ &old_vers, &mtr);
+
if (err != DB_SUCCESS) {
goto lock_wait_or_error;
@@ -3999,6 +4003,7 @@ no_gap_lock:
mutex_enter(&kernel_mutex);
if (trx->was_chosen_as_deadlock_victim) {
mutex_exit(&kernel_mutex);
+ err = DB_DEADLOCK;
goto lock_wait_or_error;
}
@@ -4521,7 +4526,8 @@ row_search_check_if_query_cache_permitted(
}
/***********************************************************************
-Read the AUTOINC column from the current row. */
+Read the AUTOINC column from the current row. If the value is less than
+0 and the type is not unsigned then we reset the value to 0. */
static
ib_longlong
row_search_autoinc_read_column(
@@ -4536,6 +4542,7 @@ row_search_autoinc_read_column(
const byte* data;
ib_longlong value;
mem_heap_t* heap = NULL;
+ /* Our requirement is that dest should be word aligned. */
byte dest[sizeof(value)];
ulint offsets_[REC_OFFS_NORMAL_SIZE];
ulint* offsets = offsets_;
@@ -4554,26 +4561,43 @@ row_search_autoinc_read_column(
ut_a(len != UNIV_SQL_NULL);
ut_a(len <= sizeof value);
- /* Copy integer data and restore sign bit */
- if (unsigned_type || (data[0] & 128))
- memset(dest, 0x00, sizeof(dest));
- else
- memset(dest, 0xff, sizeof(dest));
+ mach_read_int_type(dest, data, len, unsigned_type);
+
+ /* The assumption here is that the AUTOINC value can't be negative
+ and that dest is word aligned. */
+ switch (len) {
+ case 8:
+ value = *(ib_longlong*) dest;
+ break;
+
+ case 4:
+ value = *(ib_uint32_t*) dest;
+ break;
- memcpy(dest + (sizeof(value) - len), data, len);
+ case 3:
+ value = *(ib_uint32_t*) dest;
+ value &= 0xFFFFFF;
+ break;
- if (!unsigned_type)
- dest[sizeof(value) - len] ^= 128;
+ case 2:
+ value = *(uint16 *) dest;
+ break;
- /* The assumption here is that the AUTOINC value can't be negative.*/
- value = (((ib_longlong) mach_read_from_4(dest)) << 32) |
- ((ib_longlong) mach_read_from_4(dest + 4));
+ case 1:
+ value = *dest;
+ break;
+
+ default:
+ ut_error;
+ }
if (UNIV_LIKELY_NULL(heap)) {
mem_heap_free(heap);
}
- ut_a(value >= 0);
+ if (!unsigned_type && value < 0) {
+ value = 0;
+ }
return(value);
}
diff --git a/storage/innobase/sync/sync0rw.c b/storage/innobase/sync/sync0rw.c
index 4db780c8b3f..8dbc69816e9 100644
--- a/storage/innobase/sync/sync0rw.c
+++ b/storage/innobase/sync/sync0rw.c
@@ -174,9 +174,7 @@ rw_lock_free(
/*=========*/
rw_lock_t* lock) /* in: rw-lock */
{
-#ifdef UNIV_DEBUG
- ut_a(rw_lock_validate(lock));
-#endif /* UNIV_DEBUG */
+ ut_ad(rw_lock_validate(lock));
ut_a(rw_lock_get_writer(lock) == RW_LOCK_NOT_LOCKED);
ut_a(rw_lock_get_waiters(lock) == 0);
ut_a(rw_lock_get_reader_count(lock) == 0);
@@ -199,6 +197,7 @@ rw_lock_free(
mutex_exit(&rw_lock_list_mutex);
}
+#ifdef UNIV_DEBUG
/**********************************************************************
Checks that the rw-lock has been initialized and that there are no
simultaneous shared and exclusive locks. */
@@ -226,6 +225,7 @@ rw_lock_validate(
return(TRUE);
}
+#endif /* UNIV_DEBUG */
/**********************************************************************
Lock an rw-lock in shared mode for the current thread. If the rw-lock is
diff --git a/storage/innobase/sync/sync0sync.c b/storage/innobase/sync/sync0sync.c
index bf3f4d1ff20..39872f72204 100644
--- a/storage/innobase/sync/sync0sync.c
+++ b/storage/innobase/sync/sync0sync.c
@@ -830,7 +830,7 @@ sync_thread_levels_g(
mutex = slot->latch;
fprintf(stderr,
- "InnoDB error: sync levels should be"
+ "InnoDB: sync levels should be"
" > %lu but a level is %lu\n",
(ulong) limit, (ulong) slot->level);
diff --git a/storage/innobase/trx/trx0trx.c b/storage/innobase/trx/trx0trx.c
index a278ad51984..55b244abb0a 100644
--- a/storage/innobase/trx/trx0trx.c
+++ b/storage/innobase/trx/trx0trx.c
@@ -933,6 +933,7 @@ trx_commit_off_kernel(
trx->rseg = NULL;
trx->undo_no = ut_dulint_zero;
trx->last_sql_stat_start.least_undo_no = ut_dulint_zero;
+ trx->mysql_query_str = NULL;
ut_ad(UT_LIST_GET_LEN(trx->wait_thrs) == 0);
ut_ad(UT_LIST_GET_LEN(trx->trx_locks) == 0);
diff --git a/storage/innobase/ut/ut0ut.c b/storage/innobase/ut/ut0ut.c
index 389063ad821..1ca278cd633 100644
--- a/storage/innobase/ut/ut0ut.c
+++ b/storage/innobase/ut/ut0ut.c
@@ -18,6 +18,7 @@ Created 5/11/1994 Heikki Tuuri
#include "ut0sort.h"
#include "trx0trx.h"
+#include "ha_prototypes.h"
ibool ut_always_false = FALSE;
@@ -70,22 +71,6 @@ ut_gettimeofday(
#define ut_gettimeofday gettimeofday
#endif
-#ifndef UNIV_HOTBACKUP
-/*********************************************************************
-Display an SQL identifier.
-This definition must match the one in sql/ha_innodb.cc! */
-extern
-void
-innobase_print_identifier(
-/*======================*/
- FILE* f, /* in: output stream */
- trx_t* trx, /* in: transaction */
- ibool table_id,/* in: TRUE=print a table name,
- FALSE=print other identifier */
- const char* name, /* in: name to print */
- ulint namelen);/* in: length of name */
-#endif /* !UNIV_HOTBACKUP */
-
/************************************************************
Gets the high 32 bits in a ulint. That is makes a shift >> 32,
but since there seem to be compiler bugs in both gcc and Visual C++,
@@ -360,6 +345,8 @@ ut_print_buf(
const byte* data;
ulint i;
+ UNIV_MEM_ASSERT_RW(buf, len);
+
fprintf(file, " len %lu; hex ", len);
for (data = (const byte*)buf, i = 0; i < len; i++) {
@@ -474,17 +461,20 @@ ut_print_namel(
#ifdef UNIV_HOTBACKUP
fwrite(name, 1, namelen, f);
#else
- char* slash = memchr(name, '/', namelen);
+ if (table_id) {
+ char* slash = memchr(name, '/', namelen);
+ if (!slash) {
- if (UNIV_LIKELY_NULL(slash)) {
- /* Print the database name and table name separately. */
- ut_ad(table_id);
+ goto no_db_name;
+ }
+ /* Print the database name and table name separately. */
innobase_print_identifier(f, trx, TRUE, name, slash - name);
putc('.', f);
innobase_print_identifier(f, trx, TRUE, slash + 1,
namelen - (slash - name) - 1);
} else {
+no_db_name:
innobase_print_identifier(f, trx, table_id, name, namelen);
}
#endif
@@ -515,3 +505,44 @@ ut_copy_file(
}
} while (len > 0);
}
+
+/**************************************************************************
+snprintf(). */
+
+#ifdef __WIN__
+#include <stdarg.h>
+int
+ut_snprintf(
+ /* out: number of characters that would
+ have been printed if the size were
+ unlimited, not including the terminating
+ '\0'. */
+ char* str, /* out: string */
+ size_t size, /* in: str size */
+ const char* fmt, /* in: format */
+ ...) /* in: format values */
+{
+ int res;
+ va_list ap1;
+ va_list ap2;
+
+ va_start(ap1, fmt);
+ va_start(ap2, fmt);
+
+ res = _vscprintf(fmt, ap1);
+ ut_a(res != -1);
+
+ if (size > 0) {
+ _vsnprintf(str, size, fmt, ap2);
+
+ if ((size_t) res >= size) {
+ str[size - 1] = '\0';
+ }
+ }
+
+ va_end(ap1);
+ va_end(ap2);
+
+ return(res);
+}
+#endif /* __WIN__ */
diff --git a/storage/myisam/ha_myisam.cc b/storage/myisam/ha_myisam.cc
index ca4c40547ee..e74464a1834 100644
--- a/storage/myisam/ha_myisam.cc
+++ b/storage/myisam/ha_myisam.cc
@@ -119,6 +119,10 @@ static void mi_check_print_msg(MI_CHECK *param, const char* msg_type,
definition for further use in mi_create or for a check for underlying
table conformance in merge engine.
+ The caller needs to free *recinfo_out after use. Since *recinfo_out
+ and *keydef_out are allocated with a my_multi_malloc, *keydef_out
+ is freed automatically when *recinfo_out is freed.
+
RETURN VALUE
0 OK
!0 error code
@@ -149,7 +153,7 @@ int table2myisam(TABLE *table_arg, MI_KEYDEF **keydef_out,
pos= table_arg->key_info;
for (i= 0; i < share->keys; i++, pos++)
{
- keydef[i].flag= (pos->flags & (HA_NOSAME | HA_FULLTEXT | HA_SPATIAL));
+ keydef[i].flag= ((uint16) pos->flags & (HA_NOSAME | HA_FULLTEXT | HA_SPATIAL));
keydef[i].key_alg= pos->algorithm == HA_KEY_ALG_UNDEF ?
(pos->flags & HA_SPATIAL ? HA_KEY_ALG_RTREE : HA_KEY_ALG_BTREE) :
pos->algorithm;
@@ -725,7 +729,7 @@ int ha_myisam::check(THD* thd, HA_CHECK_OPT* check_opt)
MYISAM_SHARE* share = file->s;
const char *old_proc_info=thd->proc_info;
- thd->proc_info="Checking table";
+ thd_proc_info(thd, "Checking table");
myisamchk_init(&param);
param.thd = thd;
param.op_name = "check";
@@ -799,7 +803,7 @@ int ha_myisam::check(THD* thd, HA_CHECK_OPT* check_opt)
file->update |= HA_STATE_CHANGED | HA_STATE_ROW_CHANGED;
}
- thd->proc_info=old_proc_info;
+ thd_proc_info(thd, old_proc_info);
return error ? HA_ADMIN_CORRUPT : HA_ADMIN_OK;
}
@@ -1085,22 +1089,22 @@ int ha_myisam::repair(THD *thd, MI_CHECK &param, bool do_optimize)
char buf[40];
/* TODO: respect myisam_repair_threads variable */
my_snprintf(buf, 40, "Repair with %d threads", my_count_bits(key_map));
- thd->proc_info=buf;
+ thd_proc_info(thd, buf);
error = mi_repair_parallel(&param, file, fixed_name,
param.testflag & T_QUICK);
- thd->proc_info="Repair done"; // to reset proc_info, as
+ thd_proc_info(thd, "Repair done"); // to reset proc_info, as
// it was pointing to local buffer
}
else
{
- thd->proc_info="Repair by sorting";
+ thd_proc_info(thd, "Repair by sorting");
error = mi_repair_by_sort(&param, file, fixed_name,
param.testflag & T_QUICK);
}
}
else
{
- thd->proc_info="Repair with keycache";
+ thd_proc_info(thd, "Repair with keycache");
param.testflag &= ~T_REP_BY_SORT;
error= mi_repair(&param, file, fixed_name,
param.testflag & T_QUICK);
@@ -1114,7 +1118,7 @@ int ha_myisam::repair(THD *thd, MI_CHECK &param, bool do_optimize)
(share->state.changed & STATE_NOT_SORTED_PAGES))
{
optimize_done=1;
- thd->proc_info="Sorting index";
+ thd_proc_info(thd, "Sorting index");
error=mi_sort_index(&param,file,fixed_name);
}
if (!statistics_done && (local_testflag & T_STATISTICS))
@@ -1122,14 +1126,14 @@ int ha_myisam::repair(THD *thd, MI_CHECK &param, bool do_optimize)
if (share->state.changed & STATE_NOT_ANALYZED)
{
optimize_done=1;
- thd->proc_info="Analyzing";
+ thd_proc_info(thd, "Analyzing");
error = chk_key(&param, file);
}
else
local_testflag&= ~T_STATISTICS; // Don't update statistics
}
}
- thd->proc_info="Saving state";
+ thd_proc_info(thd, "Saving state");
if (!error)
{
if ((share->state.changed & STATE_CHANGED) || mi_is_crashed(file))
@@ -1167,7 +1171,7 @@ int ha_myisam::repair(THD *thd, MI_CHECK &param, bool do_optimize)
file->update |= HA_STATE_CHANGED | HA_STATE_ROW_CHANGED;
update_state_info(&param, file, 0);
}
- thd->proc_info=old_proc_info;
+ thd_proc_info(thd, old_proc_info);
if (!thd->locked_tables)
mi_lock_database(file,F_UNLCK);
DBUG_RETURN(error ? HA_ADMIN_FAILED :
@@ -1382,7 +1386,7 @@ int ha_myisam::enable_indexes(uint mode)
THD *thd=current_thd;
MI_CHECK param;
const char *save_proc_info=thd->proc_info;
- thd->proc_info="Creating index";
+ thd_proc_info(thd, "Creating index");
myisamchk_init(&param);
param.op_name= "recreating_index";
param.testflag= (T_SILENT | T_REP_BY_SORT | T_QUICK |
@@ -1403,13 +1407,11 @@ int ha_myisam::enable_indexes(uint mode)
might have been set by the first repair. They can still be seen
with SHOW WARNINGS then.
*/
-#ifndef EMBEDDED_LIBRARY
if (! error)
thd->clear_error();
-#endif /* EMBEDDED_LIBRARY */
}
info(HA_STATUS_CONST);
- thd->proc_info=save_proc_info;
+ thd_proc_info(thd, save_proc_info);
}
else
{
@@ -1649,9 +1651,13 @@ int ha_myisam::index_next_same(uchar *buf,
const uchar *key __attribute__((unused)),
uint length __attribute__((unused)))
{
+ int error;
DBUG_ASSERT(inited==INDEX);
ha_statistic_increment(&SSV::ha_read_next_count);
- int error=mi_rnext_same(file,buf);
+ do
+ {
+ error= mi_rnext_same(file,buf);
+ } while (error == HA_ERR_RECORD_DELETED);
table->status=error ? STATUS_NOT_FOUND: 0;
return error;
}
diff --git a/storage/myisam/ha_myisam.h b/storage/myisam/ha_myisam.h
index e8594fc9039..ca44ae9ad87 100644
--- a/storage/myisam/ha_myisam.h
+++ b/storage/myisam/ha_myisam.h
@@ -140,4 +140,8 @@ class ha_myisam: public handler
*engine_callback,
ulonglong *engine_data);
#endif
+ MI_INFO *file_ptr(void)
+ {
+ return file;
+ }
};
diff --git a/storage/myisam/mi_check.c b/storage/myisam/mi_check.c
index fe6b716877c..3cc82b832c9 100644
--- a/storage/myisam/mi_check.c
+++ b/storage/myisam/mi_check.c
@@ -455,7 +455,7 @@ int chk_key(MI_CHECK *param, register MI_INFO *info)
if ((!(param->testflag & T_SILENT)))
printf ("- check data record references index: %d\n",key+1);
- if (keyinfo->flag & HA_FULLTEXT)
+ if (keyinfo->flag & (HA_FULLTEXT | HA_SPATIAL))
full_text_keys++;
if (share->state.key_root[key] == HA_OFFSET_ERROR &&
(info->state->records == 0 || keyinfo->flag & HA_FULLTEXT))
@@ -941,7 +941,7 @@ int chk_data_link(MI_CHECK *param, MI_INFO *info,int extend)
ha_rows records,del_blocks;
my_off_t used,empty,pos,splits,start_recpos,
del_length,link_used,start_block;
- uchar *record,*to;
+ uchar *record= 0, *to;
char llbuff[22],llbuff2[22],llbuff3[22];
ha_checksum intern_record_checksum;
ha_checksum key_checksum[MI_MAX_POSSIBLE_KEY];
@@ -958,7 +958,7 @@ int chk_data_link(MI_CHECK *param, MI_INFO *info,int extend)
puts("- check record links");
}
- if (!(record= (uchar*) my_malloc(info->s->base.pack_reclength,MYF(0))))
+ if (!mi_alloc_rec_buff(info, -1, &record))
{
mi_check_print_error(param,"Not enough memory for record");
DBUG_RETURN(-1);
@@ -1365,17 +1365,150 @@ int chk_data_link(MI_CHECK *param, MI_INFO *info,int extend)
printf("Lost space: %12s Linkdata: %10s\n",
llstr(empty,llbuff),llstr(link_used,llbuff2));
}
- my_free((uchar*) record,MYF(0));
+ my_free(mi_get_rec_buff_ptr(info, record), MYF(0));
DBUG_RETURN (error);
err:
mi_check_print_error(param,"got error: %d when reading datafile at record: %s",my_errno, llstr(records,llbuff));
err2:
- my_free((uchar*) record,MYF(0));
+ my_free(mi_get_rec_buff_ptr(info, record), MYF(0));
param->testflag|=T_RETRY_WITHOUT_QUICK;
DBUG_RETURN(1);
} /* chk_data_link */
+/**
+ @brief Drop all indexes
+
+ @param[in] param check parameters
+ @param[in] info MI_INFO handle
+ @param[in] force if to force drop all indexes
+
+ @return status
+ @retval 0 OK
+ @retval != 0 Error
+
+ @note
+ Once allocated, index blocks remain part of the key file forever.
+ When indexes are disabled, no block is freed. When enabling indexes,
+ no block is freed either. The new indexes are create from new
+ blocks. (Bug #4692)
+
+ Before recreating formerly disabled indexes, the unused blocks
+ must be freed. There are two options to do this:
+ - Follow the tree of disabled indexes, add all blocks to the
+ deleted blocks chain. Would require a lot of random I/O.
+ - Drop all blocks by clearing all index root pointers and all
+ delete chain pointers and resetting key_file_length to the end
+ of the index file header. This requires to recreate all indexes,
+ even those that may still be intact.
+ The second method is probably faster in most cases.
+
+ When disabling indexes, MySQL disables either all indexes or all
+ non-unique indexes. When MySQL [re-]enables disabled indexes
+ (T_CREATE_MISSING_KEYS), then we either have "lost" blocks in the
+ index file, or there are no non-unique indexes. In the latter case,
+ mi_repair*() would not be called as there would be no disabled
+ indexes.
+
+ If there would be more unique indexes than disabled (non-unique)
+ indexes, we could do the first method. But this is not implemented
+ yet. By now we drop and recreate all indexes when repair is called.
+
+ However, there is an exception. Sometimes MySQL disables non-unique
+ indexes when the table is empty (e.g. when copying a table in
+ mysql_alter_table()). When enabling the non-unique indexes, they
+ are still empty. So there is no index block that can be lost. This
+ optimization is implemented in this function.
+
+ Note that in normal repair (T_CREATE_MISSING_KEYS not set) we
+ recreate all enabled indexes unconditonally. We do not change the
+ key_map. Otherwise we invert the key map temporarily (outside of
+ this function) and recreate the then "seemingly" enabled indexes.
+ When we cannot use the optimization, and drop all indexes, we
+ pretend that all indexes were disabled. By the inversion, we will
+ then recrate all indexes.
+*/
+
+static int mi_drop_all_indexes(MI_CHECK *param, MI_INFO *info, my_bool force)
+{
+ MYISAM_SHARE *share= info->s;
+ MI_STATE_INFO *state= &share->state;
+ uint i;
+ int error;
+ DBUG_ENTER("mi_drop_all_indexes");
+
+ /*
+ If any of the disabled indexes has a key block assigned, we must
+ drop and recreate all indexes to avoid losing index blocks.
+
+ If we want to recreate disabled indexes only _and_ all of these
+ indexes are empty, we don't need to recreate the existing indexes.
+ */
+ if (!force && (param->testflag & T_CREATE_MISSING_KEYS))
+ {
+ DBUG_PRINT("repair", ("creating missing indexes"));
+ for (i= 0; i < share->base.keys; i++)
+ {
+ DBUG_PRINT("repair", ("index #: %u key_root: 0x%lx active: %d",
+ i, (long) state->key_root[i],
+ mi_is_key_active(state->key_map, i)));
+ if ((state->key_root[i] != HA_OFFSET_ERROR) &&
+ !mi_is_key_active(state->key_map, i))
+ {
+ /*
+ This index has at least one key block and it is disabled.
+ We would lose its block(s) if would just recreate it.
+ So we need to drop and recreate all indexes.
+ */
+ DBUG_PRINT("repair", ("nonempty and disabled: recreate all"));
+ break;
+ }
+ }
+ if (i >= share->base.keys)
+ {
+ /*
+ All of the disabled indexes are empty. We can just recreate them.
+ Flush dirty blocks of this index file from key cache and remove
+ all blocks of this index file from key cache.
+ */
+ DBUG_PRINT("repair", ("all disabled are empty: create missing"));
+ error= flush_key_blocks(share->key_cache, share->kfile,
+ FLUSH_FORCE_WRITE);
+ goto end;
+ }
+ /*
+ We do now drop all indexes and declare them disabled. With the
+ T_CREATE_MISSING_KEYS flag, mi_repair*() will recreate all
+ disabled indexes and enable them.
+ */
+ mi_clear_all_keys_active(state->key_map);
+ DBUG_PRINT("repair", ("declared all indexes disabled"));
+ }
+
+ /* Remove all key blocks of this index file from key cache. */
+ if ((error= flush_key_blocks(share->key_cache, share->kfile,
+ FLUSH_IGNORE_CHANGED)))
+ goto end; /* purecov: inspected */
+
+ /* Clear index root block pointers. */
+ for (i= 0; i < share->base.keys; i++)
+ state->key_root[i]= HA_OFFSET_ERROR;
+
+ /* Clear the delete chains. */
+ for (i= 0; i < state->header.max_block_size_index; i++)
+ state->key_del[i]= HA_OFFSET_ERROR;
+
+ /* Reset index file length to end of index file header. */
+ info->state->key_file_length= share->base.keystart;
+
+ DBUG_PRINT("repair", ("dropped all indexes"));
+ /* error= 0; set by last (error= flush_key_bocks()). */
+
+ end:
+ DBUG_RETURN(error);
+}
+
+
/* Recover old table by reading each record and writing all keys */
/* Save new datafile-name in temp_filename */
@@ -1383,7 +1516,6 @@ int mi_repair(MI_CHECK *param, register MI_INFO *info,
char * name, int rep_quick)
{
int error,got_error;
- uint i;
ha_rows start_records,new_header_length;
my_off_t del;
File new_file;
@@ -1429,8 +1561,7 @@ int mi_repair(MI_CHECK *param, register MI_INFO *info,
MYF(MY_WME | MY_WAIT_IF_FULL)))
goto err;
info->opt_flag|=WRITE_CACHE_USED;
- if (!(sort_param.record=(uchar*) my_malloc((uint) share->base.pack_reclength,
- MYF(0))) ||
+ if (!mi_alloc_rec_buff(info, -1, &sort_param.record) ||
!mi_alloc_rec_buff(info, -1, &sort_param.rec_buff))
{
mi_check_print_error(param, "Not enough memory for extra record");
@@ -1487,25 +1618,10 @@ int mi_repair(MI_CHECK *param, register MI_INFO *info,
info->update= (short) (HA_STATE_CHANGED | HA_STATE_ROW_CHANGED);
- /*
- Clear all keys. Note that all key blocks allocated until now remain
- "dead" parts of the key file. (Bug #4692)
- */
- for (i=0 ; i < info->s->base.keys ; i++)
- share->state.key_root[i]= HA_OFFSET_ERROR;
-
- /* Drop the delete chain. */
- for (i=0 ; i < share->state.header.max_block_size_index ; i++)
- share->state.key_del[i]= HA_OFFSET_ERROR;
-
- /*
- If requested, activate (enable) all keys in key_map. In this case,
- all indexes will be (re-)built.
- */
+ /* This function always recreates all enabled indexes. */
if (param->testflag & T_CREATE_MISSING_KEYS)
mi_set_all_keys_active(share->state.key_map, share->base.keys);
-
- info->state->key_file_length=share->base.keystart;
+ mi_drop_all_indexes(param, info, TRUE);
lock_memory(param); /* Everything is alloced */
@@ -1637,7 +1753,8 @@ err:
}
my_free(mi_get_rec_buff_ptr(info, sort_param.rec_buff),
MYF(MY_ALLOW_ZERO_PTR));
- my_free(sort_param.record,MYF(MY_ALLOW_ZERO_PTR));
+ my_free(mi_get_rec_buff_ptr(info, sort_param.record),
+ MYF(MY_ALLOW_ZERO_PTR));
my_free(sort_info.buff,MYF(MY_ALLOW_ZERO_PTR));
VOID(end_io_cache(&param->read_cache));
info->opt_flag&= ~(READ_CACHE_USED | WRITE_CACHE_USED);
@@ -2106,8 +2223,9 @@ int mi_repair_by_sort(MI_CHECK *param, register MI_INFO *info,
ulong *rec_per_key_part;
char llbuff[22];
SORT_INFO sort_info;
- ulonglong key_map=share->state.key_map;
+ ulonglong key_map;
DBUG_ENTER("mi_repair_by_sort");
+ LINT_INIT(key_map);
start_records=info->state->records;
got_error=1;
@@ -2143,8 +2261,7 @@ int mi_repair_by_sort(MI_CHECK *param, register MI_INFO *info,
info->opt_flag|=WRITE_CACHE_USED;
info->rec_cache.file=info->dfile; /* for sort_delete_record */
- if (!(sort_param.record=(uchar*) my_malloc((uint) share->base.pack_reclength,
- MYF(0))) ||
+ if (!mi_alloc_rec_buff(info, -1, &sort_param.record) ||
!mi_alloc_rec_buff(info, -1, &sort_param.rec_buff))
{
mi_check_print_error(param, "Not enough memory for extra record");
@@ -2180,25 +2297,14 @@ int mi_repair_by_sort(MI_CHECK *param, register MI_INFO *info,
}
info->update= (short) (HA_STATE_CHANGED | HA_STATE_ROW_CHANGED);
- if (!(param->testflag & T_CREATE_MISSING_KEYS))
- {
- /*
- Flush key cache for this file if we are calling this outside
- myisamchk
- */
- flush_key_blocks(share->key_cache,share->kfile, FLUSH_IGNORE_CHANGED);
- /* Clear the pointers to the given rows */
- for (i=0 ; i < share->base.keys ; i++)
- share->state.key_root[i]= HA_OFFSET_ERROR;
- for (i=0 ; i < share->state.header.max_block_size_index ; i++)
- share->state.key_del[i]= HA_OFFSET_ERROR;
- info->state->key_file_length=share->base.keystart;
- }
- else
+
+ /* Optionally drop indexes and optionally modify the key_map. */
+ mi_drop_all_indexes(param, info, FALSE);
+ key_map= share->state.key_map;
+ if (param->testflag & T_CREATE_MISSING_KEYS)
{
- if (flush_key_blocks(share->key_cache,share->kfile, FLUSH_FORCE_WRITE))
- goto err;
- key_map= ~key_map; /* Create the missing keys */
+ /* Invert the copied key_map to recreate all disabled indexes. */
+ key_map= ~key_map;
}
sort_info.info=info;
@@ -2242,6 +2348,10 @@ int mi_repair_by_sort(MI_CHECK *param, register MI_INFO *info,
sort_param.read_cache=param->read_cache;
sort_param.keyinfo=share->keyinfo+sort_param.key;
sort_param.seg=sort_param.keyinfo->seg;
+ /*
+ Skip this index if it is marked disabled in the copied
+ (and possibly inverted) key_map.
+ */
if (! mi_is_key_active(key_map, sort_param.key))
{
/* Remember old statistics for key */
@@ -2249,6 +2359,8 @@ int mi_repair_by_sort(MI_CHECK *param, register MI_INFO *info,
(char*) (share->state.rec_per_key_part +
(uint) (rec_per_key_part - param->rec_per_key_part)),
sort_param.keyinfo->keysegs*sizeof(*rec_per_key_part));
+ DBUG_PRINT("repair", ("skipping seemingly disabled index #: %u",
+ sort_param.key));
continue;
}
@@ -2329,8 +2441,11 @@ int mi_repair_by_sort(MI_CHECK *param, register MI_INFO *info,
if (param->testflag & T_STATISTICS)
update_key_parts(sort_param.keyinfo, rec_per_key_part, sort_param.unique,
param->stats_method == MI_STATS_METHOD_IGNORE_NULLS?
- sort_param.notnull: NULL,(ulonglong) info->state->records);
+ sort_param.notnull: NULL,
+ (ulonglong) info->state->records);
+ /* Enable this index in the permanent (not the copied) key_map. */
mi_set_key_active(share->state.key_map, sort_param.key);
+ DBUG_PRINT("repair", ("set enabled index #: %u", sort_param.key));
if (sort_param.fix_datafile)
{
@@ -2455,7 +2570,8 @@ err:
my_free(mi_get_rec_buff_ptr(info, sort_param.rec_buff),
MYF(MY_ALLOW_ZERO_PTR));
- my_free(sort_param.record,MYF(MY_ALLOW_ZERO_PTR));
+ my_free(mi_get_rec_buff_ptr(info, sort_param.record),
+ MYF(MY_ALLOW_ZERO_PTR));
my_free((uchar*) sort_info.key_block,MYF(MY_ALLOW_ZERO_PTR));
my_free((uchar*) sort_info.ft_buf, MYF(MY_ALLOW_ZERO_PTR));
my_free(sort_info.buff,MYF(MY_ALLOW_ZERO_PTR));
@@ -2531,9 +2647,11 @@ int mi_repair_parallel(MI_CHECK *param, register MI_INFO *info,
IO_CACHE new_data_cache; /* For non-quick repair. */
IO_CACHE_SHARE io_share;
SORT_INFO sort_info;
- ulonglong key_map=share->state.key_map;
+ ulonglong key_map;
pthread_attr_t thr_attr;
+ ulong max_pack_reclength;
DBUG_ENTER("mi_repair_parallel");
+ LINT_INIT(key_map);
start_records=info->state->records;
got_error=1;
@@ -2635,25 +2753,14 @@ int mi_repair_parallel(MI_CHECK *param, register MI_INFO *info,
}
info->update= (short) (HA_STATE_CHANGED | HA_STATE_ROW_CHANGED);
- if (!(param->testflag & T_CREATE_MISSING_KEYS))
- {
- /*
- Flush key cache for this file if we are calling this outside
- myisamchk
- */
- flush_key_blocks(share->key_cache,share->kfile, FLUSH_IGNORE_CHANGED);
- /* Clear the pointers to the given rows */
- for (i=0 ; i < share->base.keys ; i++)
- share->state.key_root[i]= HA_OFFSET_ERROR;
- for (i=0 ; i < share->state.header.max_block_size_index ; i++)
- share->state.key_del[i]= HA_OFFSET_ERROR;
- info->state->key_file_length=share->base.keystart;
- }
- else
+
+ /* Optionally drop indexes and optionally modify the key_map. */
+ mi_drop_all_indexes(param, info, FALSE);
+ key_map= share->state.key_map;
+ if (param->testflag & T_CREATE_MISSING_KEYS)
{
- if (flush_key_blocks(share->key_cache,share->kfile, FLUSH_FORCE_WRITE))
- goto err;
- key_map= ~key_map; /* Create the missing keys */
+ /* Invert the copied key_map to recreate all disabled indexes. */
+ key_map= ~key_map;
}
sort_info.info=info;
@@ -2689,10 +2796,13 @@ int mi_repair_parallel(MI_CHECK *param, register MI_INFO *info,
del=info->state->del;
param->glob_crc=0;
-
+ /* for compressed tables */
+ max_pack_reclength= share->base.pack_reclength;
+ if (share->options & HA_OPTION_COMPRESS_RECORD)
+ set_if_bigger(max_pack_reclength, share->max_pack_length);
if (!(sort_param=(MI_SORT_PARAM *)
my_malloc((uint) share->base.keys *
- (sizeof(MI_SORT_PARAM) + share->base.pack_reclength),
+ (sizeof(MI_SORT_PARAM) + max_pack_reclength),
MYF(MY_ZEROFILL))))
{
mi_check_print_error(param,"Not enough memory for key!");
@@ -2709,6 +2819,10 @@ int mi_repair_parallel(MI_CHECK *param, register MI_INFO *info,
sort_param[i].key=key;
sort_param[i].keyinfo=share->keyinfo+key;
sort_param[i].seg=sort_param[i].keyinfo->seg;
+ /*
+ Skip this index if it is marked disabled in the copied
+ (and possibly inverted) key_map.
+ */
if (! mi_is_key_active(key_map, key))
{
/* Remember old statistics for key */
@@ -2744,7 +2858,7 @@ int mi_repair_parallel(MI_CHECK *param, register MI_INFO *info,
sort_param[i].max_pos=sort_param[i].pos=share->pack.header_length;
sort_param[i].record= (((uchar *)(sort_param+share->base.keys))+
- (share->base.pack_reclength * i));
+ (max_pack_reclength * i));
if (!mi_alloc_rec_buff(info, -1, &sort_param[i].rec_buff))
{
mi_check_print_error(param,"Not enough memory!");
@@ -4359,7 +4473,7 @@ err:
void update_auto_increment_key(MI_CHECK *param, MI_INFO *info,
my_bool repair_only)
{
- uchar *record;
+ uchar *record= 0;
DBUG_ENTER("update_auto_increment_key");
if (!info->s->base.auto_key ||
@@ -4378,8 +4492,7 @@ void update_auto_increment_key(MI_CHECK *param, MI_INFO *info,
We have to use an allocated buffer instead of info->rec_buff as
_mi_put_key_in_record() may use info->rec_buff
*/
- if (!(record= (uchar*) my_malloc((uint) info->s->base.pack_reclength,
- MYF(0))))
+ if (!mi_alloc_rec_buff(info, -1, &record))
{
mi_check_print_error(param,"Not enough memory for extra record");
DBUG_VOID_RETURN;
@@ -4391,7 +4504,7 @@ void update_auto_increment_key(MI_CHECK *param, MI_INFO *info,
if (my_errno != HA_ERR_END_OF_FILE)
{
mi_extra(info,HA_EXTRA_NO_KEYREAD,0);
- my_free((char*) record, MYF(0));
+ my_free(mi_get_rec_buff_ptr(info, record), MYF(0));
mi_check_print_error(param,"%d when reading last record",my_errno);
DBUG_VOID_RETURN;
}
@@ -4406,7 +4519,7 @@ void update_auto_increment_key(MI_CHECK *param, MI_INFO *info,
set_if_bigger(info->s->state.auto_increment, param->auto_increment_value);
}
mi_extra(info,HA_EXTRA_NO_KEYREAD,0);
- my_free((char*) record, MYF(0));
+ my_free(mi_get_rec_buff_ptr(info, record), MYF(0));
update_state_info(param, info, UPDATE_AUTO_INC);
DBUG_VOID_RETURN;
}
diff --git a/storage/myisam/mi_dynrec.c b/storage/myisam/mi_dynrec.c
index cdd70abe9ad..9940cf62204 100644
--- a/storage/myisam/mi_dynrec.c
+++ b/storage/myisam/mi_dynrec.c
@@ -326,6 +326,29 @@ static int write_dynamic_record(MI_INFO *info, const uchar *record,
DBUG_ENTER("write_dynamic_record");
flag=0;
+
+ /*
+ Check if we have enough room for the new record.
+ First we do simplified check to make usual case faster.
+ Then we do more precise check for the space left.
+ Though it still is not absolutely precise, as
+ we always use MI_MAX_DYN_BLOCK_HEADER while it can be
+ less in the most of the cases.
+ */
+
+ if (unlikely(info->s->base.max_data_file_length -
+ info->state->data_file_length <
+ reclength + MI_MAX_DYN_BLOCK_HEADER))
+ {
+ if (info->s->base.max_data_file_length - info->state->data_file_length +
+ info->state->empty - info->state->del * MI_MAX_DYN_BLOCK_HEADER <
+ reclength + MI_MAX_DYN_BLOCK_HEADER)
+ {
+ my_errno=HA_ERR_RECORD_FILE_FULL;
+ DBUG_RETURN(1);
+ }
+ }
+
do
{
if (_mi_find_writepos(info,reclength,&filepos,&length))
@@ -762,6 +785,51 @@ static int update_dynamic_record(MI_INFO *info, my_off_t filepos, uchar *record,
DBUG_ENTER("update_dynamic_record");
flag=block_info.second_read=0;
+ /*
+ Check if we have enough room for the record.
+ First we do simplified check to make usual case faster.
+ Then we do more precise check for the space left.
+ Though it still is not absolutely precise, as
+ we always use MI_MAX_DYN_BLOCK_HEADER while it can be
+ less in the most of the cases.
+ */
+
+ /*
+ compare with just the reclength as we're going
+ to get some space from the old replaced record
+ */
+ if (unlikely(info->s->base.max_data_file_length -
+ info->state->data_file_length < reclength))
+ {
+ /*
+ let's read the old record's block to find out the length of the
+ old record
+ */
+ if ((error=_mi_get_block_info(&block_info,info->dfile,filepos))
+ & (BLOCK_DELETED | BLOCK_ERROR | BLOCK_SYNC_ERROR | BLOCK_FATAL_ERROR))
+ {
+ DBUG_PRINT("error",("Got wrong block info"));
+ if (!(error & BLOCK_FATAL_ERROR))
+ my_errno=HA_ERR_WRONG_IN_RECORD;
+ goto err;
+ }
+
+ /*
+ if new record isn't longer, we can go on safely
+ */
+ if (block_info.rec_len < reclength)
+ {
+ if (info->s->base.max_data_file_length - info->state->data_file_length +
+ info->state->empty - info->state->del * MI_MAX_DYN_BLOCK_HEADER <
+ reclength - block_info.rec_len + MI_MAX_DYN_BLOCK_HEADER)
+ {
+ my_errno=HA_ERR_RECORD_FILE_FULL;
+ goto err;
+ }
+ }
+ block_info.second_read=0;
+ }
+
while (reclength > 0)
{
if (filepos != info->s->state.dellink)
diff --git a/storage/myisam/mi_open.c b/storage/myisam/mi_open.c
index b848c822f75..a4f6e1291db 100644
--- a/storage/myisam/mi_open.c
+++ b/storage/myisam/mi_open.c
@@ -697,8 +697,11 @@ uchar *mi_alloc_rec_buff(MI_INFO *info, ulong length, uchar **buf)
/* to simplify initial init of info->rec_buf in mi_open and mi_extra */
if (length == (ulong) -1)
{
- length= max(info->s->base.pack_reclength,
- info->s->base.max_key_length);
+ if (info->s->options & HA_OPTION_COMPRESS_RECORD)
+ length= max(info->s->base.pack_reclength, info->s->max_pack_length);
+ else
+ length= info->s->base.pack_reclength;
+ length= max(length, info->s->base.max_key_length);
/* Avoid unnecessary realloc */
if (newptr && length == old_length)
return newptr;
@@ -916,7 +919,7 @@ uchar *mi_state_info_read(uchar *ptr, MI_STATE_INFO *state)
key_blocks=state->header.max_block_size_index;
state->open_count = mi_uint2korr(ptr); ptr +=2;
- state->changed= (bool) *ptr++;
+ state->changed= *ptr++;
state->sortkey = (uint) *ptr++;
state->state.records= mi_rowkorr(ptr); ptr +=8;
state->state.del = mi_rowkorr(ptr); ptr +=8;
diff --git a/storage/myisam/mi_packrec.c b/storage/myisam/mi_packrec.c
index 305b7e5532c..59c98c978ce 100644
--- a/storage/myisam/mi_packrec.c
+++ b/storage/myisam/mi_packrec.c
@@ -166,7 +166,6 @@ my_bool _mi_read_pack_info(MI_INFO *info, pbool fix_keys)
share->pack.header_length= uint4korr(header+4);
share->min_pack_length=(uint) uint4korr(header+8);
share->max_pack_length=(uint) uint4korr(header+12);
- set_if_bigger(share->base.pack_reclength,share->max_pack_length);
elements=uint4korr(header+16);
intervall_length=uint4korr(header+20);
trees=uint2korr(header+24);
@@ -565,7 +564,7 @@ static void fill_quick_table(uint16 *table, uint bits, uint max_bits,
*/
value|= (max_bits - bits) << 8 | IS_CHAR;
- for (end= table + (uint) (((uint) 1 << bits)); table < end; table++)
+ for (end= table + ((my_ptrdiff_t) 1 << bits); table < end; table++)
{
*table= (uint16) value;
}
diff --git a/storage/myisam/myisamchk.c b/storage/myisam/myisamchk.c
index 567e1057e5d..2300d1e7c23 100644
--- a/storage/myisam/myisamchk.c
+++ b/storage/myisam/myisamchk.c
@@ -1536,8 +1536,8 @@ static int mi_sort_records(MI_CHECK *param,
mi_check_print_error(param,"Not enough memory for key block");
goto err;
}
- if (!(sort_param.record=(uchar*) my_malloc((uint) share->base.pack_reclength,
- MYF(0))))
+
+ if (!mi_alloc_rec_buff(info, -1, &sort_param.record))
{
mi_check_print_error(param,"Not enough memory for record");
goto err;
@@ -1632,7 +1632,8 @@ err:
{
my_afree((uchar*) temp_buff);
}
- my_free(sort_param.record,MYF(MY_ALLOW_ZERO_PTR));
+ my_free(mi_get_rec_buff_ptr(info, sort_param.record),
+ MYF(MY_ALLOW_ZERO_PTR));
info->opt_flag&= ~(READ_CACHE_USED | WRITE_CACHE_USED);
VOID(end_io_cache(&info->rec_cache));
my_free(sort_info.buff,MYF(MY_ALLOW_ZERO_PTR));
diff --git a/storage/myisam/rt_index.c b/storage/myisam/rt_index.c
index 63ed60586d6..25f9d7c19e4 100644
--- a/storage/myisam/rt_index.c
+++ b/storage/myisam/rt_index.c
@@ -483,15 +483,16 @@ static uchar *rtree_pick_key(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key,
uint key_length, uchar *page_buf, uint nod_flag)
{
double increase;
- double best_incr = DBL_MAX;
+ double best_incr;
double area;
double best_area;
- uchar *best_key;
+ uchar *best_key= NULL;
uchar *k = rt_PAGE_FIRST_KEY(page_buf, nod_flag);
uchar *last = rt_PAGE_END(page_buf);
LINT_INIT(best_area);
LINT_INIT(best_key);
+ LINT_INIT(best_incr);
for (; k < last; k = rt_PAGE_NEXT_KEY(k, key_length, nod_flag))
{
@@ -500,22 +501,13 @@ static uchar *rtree_pick_key(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key,
&area)) == -1.0)
return NULL;
/* The following should be safe, even if we compare doubles */
- if (increase < best_incr)
+ if (!best_key || increase < best_incr ||
+ ((increase == best_incr) && (area < best_area)))
{
best_key = k;
best_area = area;
best_incr = increase;
}
- else
- {
- /* The following should be safe, even if we compare doubles */
- if ((increase == best_incr) && (area < best_area))
- {
- best_key = k;
- best_area = area;
- best_incr = increase;
- }
- }
}
return best_key;
}
diff --git a/storage/myisam/rt_mbr.c b/storage/myisam/rt_mbr.c
index 1855e24feb0..deca23bbec7 100644
--- a/storage/myisam/rt_mbr.c
+++ b/storage/myisam/rt_mbr.c
@@ -523,7 +523,10 @@ double rtree_overlapping_area(HA_KEYSEG *keyseg, uchar* a, uchar* b,
}
/*
-Calculates MBR_AREA(a+b) - MBR_AREA(a)
+ Calculates MBR_AREA(a+b) - MBR_AREA(a)
+ Note: when 'a' and 'b' objects are far from each other,
+ the area increase can be really big, so this function
+ can return 'inf' as a result.
*/
double rtree_area_increase(HA_KEYSEG *keyseg, uchar* a, uchar* b,
uint key_length, double *ab_area)
diff --git a/storage/myisammrg/ha_myisammrg.cc b/storage/myisammrg/ha_myisammrg.cc
index 8a914e8a2de..3fccb91e9b5 100644
--- a/storage/myisammrg/ha_myisammrg.cc
+++ b/storage/myisammrg/ha_myisammrg.cc
@@ -14,6 +14,82 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+/*
+ MyISAM MERGE tables
+
+ A MyISAM MERGE table is kind of a union of zero or more MyISAM tables.
+
+ Besides the normal form file (.frm) a MERGE table has a meta file
+ (.MRG) with a list of tables. These are paths to the MyISAM table
+ files. The last two components of the path contain the database name
+ and the table name respectively.
+
+ When a MERGE table is open, there exists an TABLE object for the MERGE
+ table itself and a TABLE object for each of the MyISAM tables. For
+ abbreviated writing, I call the MERGE table object "parent" and the
+ MyISAM table objects "children".
+
+ A MERGE table is almost always opened through open_and_lock_tables()
+ and hence through open_tables(). When the parent appears in the list
+ of tables to open, the initial open of the handler does nothing but
+ read the meta file and collect a list of TABLE_LIST objects for the
+ children. This list is attached to the parent TABLE object as
+ TABLE::child_l. The end of the children list is saved in
+ TABLE::child_last_l.
+
+ Back in open_tables(), add_merge_table_list() is called. It updates
+ each list member with the lock type and a back pointer to the parent
+ TABLE_LIST object TABLE_LIST::parent_l. The list is then inserted in
+ the list of tables to open, right behind the parent. Consequently,
+ open_tables() opens the children, one after the other. The TABLE
+ references of the TABLE_LIST objects are implicitly set to the open
+ tables. The children are opened as independent MyISAM tables, right as
+ if they are used by the SQL statement.
+
+ TABLE_LIST::parent_l is required to find the parent 1. when the last
+ child has been opened and children are to be attached, and 2. when an
+ error happens during child open and the child list must be removed
+ from the queuery list. In these cases the current child does not have
+ TABLE::parent set or does not have a TABLE at all respectively.
+
+ When the last child is open, attach_merge_children() is called. It
+ removes the list of children from the open list. Then the children are
+ "attached" to the parent. All required references between parent and
+ children are set up.
+
+ The MERGE storage engine sets up an array with references to the
+ low-level MyISAM table objects (MI_INFO). It remembers the state of
+ the table in MYRG_INFO::children_attached.
+
+ Every child TABLE::parent references the parent TABLE object. That way
+ TABLE objects belonging to a MERGE table can be identified.
+ TABLE::parent is required because the parent and child TABLE objects
+ can live longer than the parent TABLE_LIST object. So the path
+ child->pos_in_table_list->parent_l->table can be broken.
+
+ If necessary, the compatibility of parent and children is checked.
+ This check is necessary when any of the objects are reopend. This is
+ detected by comparing the current table def version against the
+ remembered child def version. On parent open, the list members are
+ initialized to an "impossible"/"undefined" version value. So the check
+ is always executed on the first attach.
+
+ The version check is done in myisammrg_attach_children_callback(),
+ which is called for every child. ha_myisammrg::attach_children()
+ initializes 'need_compat_check' to FALSE and
+ myisammrg_attach_children_callback() sets it ot TRUE if a table
+ def version mismatches the remembered child def version.
+
+ Finally the parent TABLE::children_attached is set.
+
+ ---
+
+ On parent open the storage engine structures are allocated and initialized.
+ They stay with the open table until its final close.
+
+
+*/
+
#ifdef USE_PRAGMA_IMPLEMENTATION
#pragma implementation // gcc: Class implementation
#endif
@@ -22,14 +98,11 @@
#include "mysql_priv.h"
#include <mysql/plugin.h>
#include <m_ctype.h>
+#include "../myisam/ha_myisam.h"
#include "ha_myisammrg.h"
#include "myrg_def.h"
-/*****************************************************************************
-** MyISAM MERGE tables
-*****************************************************************************/
-
static handler *myisammrg_create_handler(handlerton *hton,
TABLE_SHARE *table,
MEM_ROOT *mem_root)
@@ -38,10 +111,23 @@ static handler *myisammrg_create_handler(handlerton *hton,
}
+/**
+ @brief Constructor
+*/
+
ha_myisammrg::ha_myisammrg(handlerton *hton, TABLE_SHARE *table_arg)
:handler(hton, table_arg), file(0)
{}
+
+/**
+ @brief Destructor
+*/
+
+ha_myisammrg::~ha_myisammrg(void)
+{}
+
+
static const char *ha_myisammrg_exts[] = {
".MRG",
NullS
@@ -89,25 +175,311 @@ const char *ha_myisammrg::index_type(uint key_number)
}
-int ha_myisammrg::open(const char *name, int mode, uint test_if_locked)
+/**
+ @brief Callback function for open of a MERGE parent table.
+
+ @detail This function adds a TABLE_LIST object for a MERGE child table
+ to a list of tables of the parent TABLE object. It is called for
+ each child table.
+
+ The list of child TABLE_LIST objects is kept in the TABLE object of
+ the parent for the whole life time of the MERGE table. It is
+ inserted in the statement list behind the MERGE parent TABLE_LIST
+ object when the MERGE table is opened. It is removed from the
+ statement list after the last child is opened.
+
+ All memeory used for the child TABLE_LIST objects and the strings
+ referred by it are taken from the parent TABLE::mem_root. Thus they
+ are all freed implicitly at the final close of the table.
+
+ TABLE::child_l -> TABLE_LIST::next_global -> TABLE_LIST::next_global
+ # # ^ # ^
+ # # | # |
+ # # +--------- TABLE_LIST::prev_global
+ # # |
+ # |<--- TABLE_LIST::prev_global |
+ # |
+ TABLE::child_last_l -----------------------------------------+
+
+ @param[in] callback_param data pointer as given to myrg_parent_open()
+ @param[in] filename file name of MyISAM table
+ without extension.
+
+ @return status
+ @retval 0 OK
+ @retval != 0 Error
+*/
+
+static int myisammrg_parent_open_callback(void *callback_param,
+ const char *filename)
{
- MI_KEYDEF *keyinfo;
- MI_COLUMNDEF *recinfo;
- MYRG_TABLE *u_table;
- uint recs;
- uint keys= table->s->keys;
- int error;
- char name_buff[FN_REFLEN];
+ ha_myisammrg *ha_myrg;
+ TABLE *parent;
+ TABLE_LIST *child_l;
+ const char *db;
+ const char *table_name;
+ uint dirlen;
+ char dir_path[FN_REFLEN];
+ DBUG_ENTER("myisammrg_parent_open_callback");
+
+ /* Extract child table name and database name from filename. */
+ dirlen= dirname_length(filename);
+ if (dirlen >= FN_REFLEN)
+ {
+ /* purecov: begin inspected */
+ DBUG_PRINT("error", ("name too long: '%.64s'", filename));
+ my_errno= ENAMETOOLONG;
+ DBUG_RETURN(1);
+ /* purecov: end */
+ }
+ table_name= filename + dirlen;
+ dirlen--; /* Strip off trailing '/'. */
+ memcpy(dir_path, filename, dirlen);
+ dir_path[dirlen]= '\0';
+ db= base_name(dir_path);
+ dirlen-= db - dir_path; /* This is now the length of 'db'. */
+ DBUG_PRINT("myrg", ("open: '%s'.'%s'", db, table_name));
+
+ ha_myrg= (ha_myisammrg*) callback_param;
+ parent= ha_myrg->table_ptr();
+
+ /* Get a TABLE_LIST object. */
+ if (!(child_l= (TABLE_LIST*) alloc_root(&parent->mem_root,
+ sizeof(TABLE_LIST))))
+ {
+ /* purecov: begin inspected */
+ DBUG_PRINT("error", ("my_malloc error: %d", my_errno));
+ DBUG_RETURN(1);
+ /* purecov: end */
+ }
+ bzero((char*) child_l, sizeof(TABLE_LIST));
+
+ /* Set database (schema) name. */
+ child_l->db_length= dirlen;
+ child_l->db= strmake_root(&parent->mem_root, db, dirlen);
+ /* Set table name. */
+ child_l->table_name_length= strlen(table_name);
+ child_l->table_name= strmake_root(&parent->mem_root, table_name,
+ child_l->table_name_length);
+ /* Convert to lowercase if required. */
+ if (lower_case_table_names && child_l->table_name_length)
+ child_l->table_name_length= my_casedn_str(files_charset_info,
+ child_l->table_name);
+ /* Set alias. */
+ child_l->alias= child_l->table_name;
+
+ /* Initialize table map to 'undefined'. */
+ child_l->init_child_def_version();
+
+ /* Link TABLE_LIST object into the parent list. */
+ if (!parent->child_last_l)
+ {
+ /* Initialize parent->child_last_l when handling first child. */
+ parent->child_last_l= &parent->child_l;
+ }
+ *parent->child_last_l= child_l;
+ child_l->prev_global= parent->child_last_l;
+ parent->child_last_l= &child_l->next_global;
+
+ DBUG_RETURN(0);
+}
+
+
+/**
+ @brief Callback function for attaching a MERGE child table.
+
+ @detail This function retrieves the MyISAM table handle from the
+ next child table. It is called for each child table.
+
+ @param[in] callback_param data pointer as given to
+ myrg_attach_children()
+
+ @return pointer to open MyISAM table structure
+ @retval !=NULL OK, returning pointer
+ @retval NULL, my_errno == 0 Ok, no more child tables
+ @retval NULL, my_errno != 0 error
+*/
+
+static MI_INFO *myisammrg_attach_children_callback(void *callback_param)
+{
+ ha_myisammrg *ha_myrg;
+ TABLE *parent;
+ TABLE *child;
+ TABLE_LIST *child_l;
+ MI_INFO *myisam;
+ DBUG_ENTER("myisammrg_attach_children_callback");
+
+ my_errno= 0;
+ ha_myrg= (ha_myisammrg*) callback_param;
+ parent= ha_myrg->table_ptr();
+
+ /* Get child list item. */
+ child_l= ha_myrg->next_child_attach;
+ if (!child_l)
+ {
+ DBUG_PRINT("myrg", ("No more children to attach"));
+ DBUG_RETURN(NULL);
+ }
+ child= child_l->table;
+ DBUG_PRINT("myrg", ("child table: '%s'.'%s' 0x%lx", child->s->db.str,
+ child->s->table_name.str, (long) child));
+ /*
+ Prepare for next child. Used as child_l in next call to this function.
+ We cannot rely on a NULL-terminated chain.
+ */
+ if (&child_l->next_global == parent->child_last_l)
+ {
+ DBUG_PRINT("myrg", ("attaching last child"));
+ ha_myrg->next_child_attach= NULL;
+ }
+ else
+ ha_myrg->next_child_attach= child_l->next_global;
+
+ /* Set parent reference. */
+ child->parent= parent;
+
+ /*
+ Do a quick compatibility check. The table def version is set when
+ the table share is created. The child def version is copied
+ from the table def version after a sucessful compatibility check.
+ We need to repeat the compatibility check only if a child is opened
+ from a different share than last time it was used with this MERGE
+ table.
+ */
+ DBUG_PRINT("myrg", ("table_def_version last: %lu current: %lu",
+ (ulong) child_l->get_child_def_version(),
+ (ulong) child->s->get_table_def_version()));
+ if (child_l->get_child_def_version() != child->s->get_table_def_version())
+ ha_myrg->need_compat_check= TRUE;
+
+ /*
+ If parent is temporary, children must be temporary too and vice
+ versa. This check must be done for every child on every open because
+ the table def version can overlap between temporary and
+ non-temporary tables. We need to detect the case where a
+ non-temporary table has been replaced with a temporary table of the
+ same version. Or vice versa. A very unlikely case, but it could
+ happen.
+ */
+ if (child->s->tmp_table != parent->s->tmp_table)
+ {
+ DBUG_PRINT("error", ("temporary table mismatch parent: %d child: %d",
+ parent->s->tmp_table, child->s->tmp_table));
+ my_errno= HA_ERR_WRONG_MRG_TABLE_DEF;
+ goto err;
+ }
+
+ /* Extract the MyISAM table structure pointer from the handler object. */
+ if ((child->file->ht->db_type != DB_TYPE_MYISAM) ||
+ !(myisam= ((ha_myisam*) child->file)->file_ptr()))
+ {
+ DBUG_PRINT("error", ("no MyISAM handle for child table: '%s'.'%s' 0x%lx",
+ child->s->db.str, child->s->table_name.str,
+ (long) child));
+ my_errno= HA_ERR_WRONG_MRG_TABLE_DEF;
+ }
+ DBUG_PRINT("myrg", ("MyISAM handle: 0x%lx my_errno: %d",
+ (long) myisam, my_errno));
+
+ err:
+ DBUG_RETURN(my_errno ? NULL : myisam);
+}
+
+
+/**
+ @brief Open a MERGE parent table, not its children.
+
+ @detail This function initializes the MERGE storage engine structures
+ and adds a child list of TABLE_LIST to the parent TABLE.
+
+ @param[in] name MERGE table path name
+ @param[in] mode read/write mode, unused
+ @param[in] test_if_locked open flags
+
+ @return status
+ @retval 0 OK
+ @retval -1 Error, my_errno gives reason
+*/
+
+int ha_myisammrg::open(const char *name, int mode __attribute__((unused)),
+ uint test_if_locked)
+{
+ DBUG_ENTER("ha_myisammrg::open");
+ DBUG_PRINT("myrg", ("name: '%s' table: 0x%lx", name, (long) table));
+ DBUG_PRINT("myrg", ("test_if_locked: %u", test_if_locked));
+
+ /* Save for later use. */
+ this->test_if_locked= test_if_locked;
+
+ /* retrieve children table list. */
+ my_errno= 0;
+ if (!(file= myrg_parent_open(name, myisammrg_parent_open_callback, this)))
+ {
+ DBUG_PRINT("error", ("my_errno %d", my_errno));
+ DBUG_RETURN(my_errno ? my_errno : -1);
+ }
+ DBUG_PRINT("myrg", ("MYRG_INFO: 0x%lx", (long) file));
+ DBUG_RETURN(0);
+}
+
+
+/**
+ @brief Attach children to a MERGE table.
+
+ @detail Let the storage engine attach its children through a callback
+ function. Check table definitions for consistency.
+
+ @note Special thd->open_options may be in effect. We can make use of
+ them in attach. I.e. we use HA_OPEN_FOR_REPAIR to report the names
+ of mismatching child tables. We cannot transport these options in
+ ha_myisammrg::test_if_locked because they may change after the
+ parent is opened. The parent is kept open in the table cache over
+ multiple statements and can be used by other threads. Open options
+ can change over time.
+
+ @return status
+ @retval 0 OK
+ @retval != 0 Error, my_errno gives reason
+*/
+
+int ha_myisammrg::attach_children(void)
+{
+ MYRG_TABLE *u_table;
+ MI_COLUMNDEF *recinfo;
+ MI_KEYDEF *keyinfo;
+ uint recs;
+ uint keys= table->s->keys;
+ int error;
+ DBUG_ENTER("ha_myisammrg::attach_children");
+ DBUG_PRINT("myrg", ("table: '%s'.'%s' 0x%lx", table->s->db.str,
+ table->s->table_name.str, (long) table));
+ DBUG_PRINT("myrg", ("test_if_locked: %u", this->test_if_locked));
+ DBUG_ASSERT(!this->file->children_attached);
- DBUG_PRINT("info", ("ha_myisammrg::open"));
- if (!(file=myrg_open(fn_format(name_buff,name,"","",
- MY_UNPACK_FILENAME|MY_APPEND_EXT),
- mode, test_if_locked)))
+ /*
+ Initialize variables that are used, modified, and/or set by
+ myisammrg_attach_children_callback().
+ 'next_child_attach' traverses the chain of TABLE_LIST objects
+ that has been compiled during myrg_parent_open(). Every call
+ to myisammrg_attach_children_callback() moves the pointer to
+ the next object.
+ 'need_compat_check' is set by myisammrg_attach_children_callback()
+ if a child fails the table def version check.
+ 'my_errno' is set by myisammrg_attach_children_callback() in
+ case of an error.
+ */
+ next_child_attach= table->child_l;
+ need_compat_check= FALSE;
+ my_errno= 0;
+
+ if (myrg_attach_children(this->file, this->test_if_locked |
+ current_thd->open_options,
+ myisammrg_attach_children_callback, this))
{
- DBUG_PRINT("info", ("ha_myisammrg::open exit %d", my_errno));
- return (my_errno ? my_errno : -1);
+ DBUG_PRINT("error", ("my_errno %d", my_errno));
+ DBUG_RETURN(my_errno ? my_errno : -1);
}
- DBUG_PRINT("info", ("ha_myisammrg::open myrg_extrafunc..."));
+ DBUG_PRINT("myrg", ("calling myrg_extrafunc"));
myrg_extrafunc(file, query_cache_invalidate_by_MyISAM_filename_ref);
if (!(test_if_locked == HA_OPEN_WAIT_IF_LOCKED ||
test_if_locked == HA_OPEN_ABORT_IF_LOCKED))
@@ -116,69 +488,147 @@ int ha_myisammrg::open(const char *name, int mode, uint test_if_locked)
if (!(test_if_locked & HA_OPEN_WAIT_IF_LOCKED))
myrg_extra(file,HA_EXTRA_WAIT_LOCK,0);
- if (table->s->reclength != stats.mean_rec_length && stats.mean_rec_length)
- {
- DBUG_PRINT("error",("reclength: %lu mean_rec_length: %lu",
- table->s->reclength, stats.mean_rec_length));
- if (test_if_locked & HA_OPEN_FOR_REPAIR)
- myrg_print_wrong_table(file->open_tables->table->filename);
- error= HA_ERR_WRONG_MRG_TABLE_DEF;
- goto err;
- }
- if ((error= table2myisam(table, &keyinfo, &recinfo, &recs)))
- {
- /* purecov: begin inspected */
- DBUG_PRINT("error", ("Failed to convert TABLE object to MyISAM "
- "key and column definition"));
- goto err;
- /* purecov: end */
- }
- for (u_table= file->open_tables; u_table < file->end_table; u_table++)
+ /*
+ The compatibility check is required only if one or more children do
+ not match their table def version from the last check. This will
+ always happen at the first attach because the reference child def
+ version is initialized to 'undefined' at open.
+ */
+ DBUG_PRINT("myrg", ("need_compat_check: %d", need_compat_check));
+ if (need_compat_check)
{
- if (check_definition(keyinfo, recinfo, keys, recs,
- u_table->table->s->keyinfo, u_table->table->s->rec,
- u_table->table->s->base.keys,
- u_table->table->s->base.fields, false))
+ TABLE_LIST *child_l;
+
+ if (table->s->reclength != stats.mean_rec_length && stats.mean_rec_length)
{
- error= HA_ERR_WRONG_MRG_TABLE_DEF;
+ DBUG_PRINT("error",("reclength: %lu mean_rec_length: %lu",
+ table->s->reclength, stats.mean_rec_length));
if (test_if_locked & HA_OPEN_FOR_REPAIR)
- myrg_print_wrong_table(u_table->table->filename);
- else
+ myrg_print_wrong_table(file->open_tables->table->filename);
+ error= HA_ERR_WRONG_MRG_TABLE_DEF;
+ goto err;
+ }
+ /*
+ Both recinfo and keyinfo are allocated by my_multi_malloc(), thus
+ only recinfo must be freed.
+ */
+ if ((error= table2myisam(table, &keyinfo, &recinfo, &recs)))
+ {
+ /* purecov: begin inspected */
+ DBUG_PRINT("error", ("failed to convert TABLE object to MyISAM "
+ "key and column definition"));
+ goto err;
+ /* purecov: end */
+ }
+ for (u_table= file->open_tables; u_table < file->end_table; u_table++)
+ {
+ if (check_definition(keyinfo, recinfo, keys, recs,
+ u_table->table->s->keyinfo, u_table->table->s->rec,
+ u_table->table->s->base.keys,
+ u_table->table->s->base.fields, false))
{
- my_free((uchar*) recinfo, MYF(0));
- goto err;
+ DBUG_PRINT("error", ("table definition mismatch: '%s'",
+ u_table->table->filename));
+ error= HA_ERR_WRONG_MRG_TABLE_DEF;
+ if (!(this->test_if_locked & HA_OPEN_FOR_REPAIR))
+ {
+ my_free((uchar*) recinfo, MYF(0));
+ goto err;
+ }
+ myrg_print_wrong_table(u_table->table->filename);
}
}
+ my_free((uchar*) recinfo, MYF(0));
+ if (error == HA_ERR_WRONG_MRG_TABLE_DEF)
+ goto err;
+
+ /* All checks passed so far. Now update child def version. */
+ for (child_l= table->child_l; ; child_l= child_l->next_global)
+ {
+ child_l->set_child_def_version(
+ child_l->table->s->get_table_def_version());
+
+ if (&child_l->next_global == table->child_last_l)
+ break;
+ }
}
- my_free((uchar*) recinfo, MYF(0));
- if (error == HA_ERR_WRONG_MRG_TABLE_DEF)
- goto err;
#if !defined(BIG_TABLES) || SIZEOF_OFF_T == 4
/* Merge table has more than 2G rows */
if (table->s->crashed)
{
+ DBUG_PRINT("error", ("MERGE table marked crashed"));
error= HA_ERR_WRONG_MRG_TABLE_DEF;
goto err;
}
#endif
- return (0);
+ DBUG_RETURN(0);
+
err:
- myrg_close(file);
- file=0;
- return (my_errno= error);
+ myrg_detach_children(file);
+ DBUG_RETURN(my_errno= error);
+}
+
+
+/**
+ @brief Detach all children from a MERGE table.
+
+ @note Detach must not touch the children in any way.
+ They may have been closed at ths point already.
+ All references to the children should be removed.
+
+ @return status
+ @retval 0 OK
+ @retval != 0 Error, my_errno gives reason
+*/
+
+int ha_myisammrg::detach_children(void)
+{
+ DBUG_ENTER("ha_myisammrg::detach_children");
+ DBUG_ASSERT(this->file && this->file->children_attached);
+
+ if (myrg_detach_children(this->file))
+ {
+ /* purecov: begin inspected */
+ DBUG_PRINT("error", ("my_errno %d", my_errno));
+ DBUG_RETURN(my_errno ? my_errno : -1);
+ /* purecov: end */
+ }
+ DBUG_RETURN(0);
}
+
+/**
+ @brief Close a MERGE parent table, not its children.
+
+ @note The children are expected to be closed separately by the caller.
+
+ @return status
+ @retval 0 OK
+ @retval != 0 Error, my_errno gives reason
+*/
+
int ha_myisammrg::close(void)
{
- return myrg_close(file);
+ int rc;
+ DBUG_ENTER("ha_myisammrg::close");
+ /*
+ Children must not be attached here. Unless the MERGE table has no
+ children. In this case children_attached is always true.
+ */
+ DBUG_ASSERT(!this->file->children_attached || !this->file->tables);
+ rc= myrg_close(file);
+ file= 0;
+ DBUG_RETURN(rc);
}
int ha_myisammrg::write_row(uchar * buf)
{
+ DBUG_ENTER("ha_myisammrg::write_row");
+ DBUG_ASSERT(this->file->children_attached);
ha_statistic_increment(&SSV::ha_write_count);
if (file->merge_insert_method == MERGE_INSERT_DISABLED || !file->tables)
- return (HA_ERR_TABLE_READONLY);
+ DBUG_RETURN(HA_ERR_TABLE_READONLY);
if (table->timestamp_field_type & TIMESTAMP_AUTO_SET_ON_INSERT)
table->timestamp_field->set_time();
@@ -186,13 +636,14 @@ int ha_myisammrg::write_row(uchar * buf)
{
int error;
if ((error= update_auto_increment()))
- return error;
+ DBUG_RETURN(error); /* purecov: inspected */
}
- return myrg_write(file,buf);
+ DBUG_RETURN(myrg_write(file,buf));
}
int ha_myisammrg::update_row(const uchar * old_data, uchar * new_data)
{
+ DBUG_ASSERT(this->file->children_attached);
ha_statistic_increment(&SSV::ha_update_count);
if (table->timestamp_field_type & TIMESTAMP_AUTO_SET_ON_UPDATE)
table->timestamp_field->set_time();
@@ -201,6 +652,7 @@ int ha_myisammrg::update_row(const uchar * old_data, uchar * new_data)
int ha_myisammrg::delete_row(const uchar * buf)
{
+ DBUG_ASSERT(this->file->children_attached);
ha_statistic_increment(&SSV::ha_delete_count);
return myrg_delete(file,buf);
}
@@ -209,6 +661,7 @@ int ha_myisammrg::index_read_map(uchar * buf, const uchar * key,
key_part_map keypart_map,
enum ha_rkey_function find_flag)
{
+ DBUG_ASSERT(this->file->children_attached);
ha_statistic_increment(&SSV::ha_read_key_count);
int error=myrg_rkey(file,buf,active_index, key, keypart_map, find_flag);
table->status=error ? STATUS_NOT_FOUND: 0;
@@ -219,6 +672,7 @@ int ha_myisammrg::index_read_idx_map(uchar * buf, uint index, const uchar * key,
key_part_map keypart_map,
enum ha_rkey_function find_flag)
{
+ DBUG_ASSERT(this->file->children_attached);
ha_statistic_increment(&SSV::ha_read_key_count);
int error=myrg_rkey(file,buf,index, key, keypart_map, find_flag);
table->status=error ? STATUS_NOT_FOUND: 0;
@@ -228,6 +682,7 @@ int ha_myisammrg::index_read_idx_map(uchar * buf, uint index, const uchar * key,
int ha_myisammrg::index_read_last_map(uchar *buf, const uchar *key,
key_part_map keypart_map)
{
+ DBUG_ASSERT(this->file->children_attached);
ha_statistic_increment(&SSV::ha_read_key_count);
int error=myrg_rkey(file,buf,active_index, key, keypart_map,
HA_READ_PREFIX_LAST);
@@ -237,6 +692,7 @@ int ha_myisammrg::index_read_last_map(uchar *buf, const uchar *key,
int ha_myisammrg::index_next(uchar * buf)
{
+ DBUG_ASSERT(this->file->children_attached);
ha_statistic_increment(&SSV::ha_read_next_count);
int error=myrg_rnext(file,buf,active_index);
table->status=error ? STATUS_NOT_FOUND: 0;
@@ -245,6 +701,7 @@ int ha_myisammrg::index_next(uchar * buf)
int ha_myisammrg::index_prev(uchar * buf)
{
+ DBUG_ASSERT(this->file->children_attached);
ha_statistic_increment(&SSV::ha_read_prev_count);
int error=myrg_rprev(file,buf, active_index);
table->status=error ? STATUS_NOT_FOUND: 0;
@@ -253,6 +710,7 @@ int ha_myisammrg::index_prev(uchar * buf)
int ha_myisammrg::index_first(uchar * buf)
{
+ DBUG_ASSERT(this->file->children_attached);
ha_statistic_increment(&SSV::ha_read_first_count);
int error=myrg_rfirst(file, buf, active_index);
table->status=error ? STATUS_NOT_FOUND: 0;
@@ -261,6 +719,7 @@ int ha_myisammrg::index_first(uchar * buf)
int ha_myisammrg::index_last(uchar * buf)
{
+ DBUG_ASSERT(this->file->children_attached);
ha_statistic_increment(&SSV::ha_read_last_count);
int error=myrg_rlast(file, buf, active_index);
table->status=error ? STATUS_NOT_FOUND: 0;
@@ -271,8 +730,13 @@ int ha_myisammrg::index_next_same(uchar * buf,
const uchar *key __attribute__((unused)),
uint length __attribute__((unused)))
{
+ int error;
+ DBUG_ASSERT(this->file->children_attached);
ha_statistic_increment(&SSV::ha_read_next_count);
- int error=myrg_rnext_same(file,buf);
+ do
+ {
+ error= myrg_rnext_same(file,buf);
+ } while (error == HA_ERR_RECORD_DELETED);
table->status=error ? STATUS_NOT_FOUND: 0;
return error;
}
@@ -280,12 +744,14 @@ int ha_myisammrg::index_next_same(uchar * buf,
int ha_myisammrg::rnd_init(bool scan)
{
+ DBUG_ASSERT(this->file->children_attached);
return myrg_reset(file);
}
int ha_myisammrg::rnd_next(uchar *buf)
{
+ DBUG_ASSERT(this->file->children_attached);
ha_statistic_increment(&SSV::ha_read_rnd_next_count);
int error=myrg_rrnd(file, buf, HA_OFFSET_ERROR);
table->status=error ? STATUS_NOT_FOUND: 0;
@@ -295,6 +761,7 @@ int ha_myisammrg::rnd_next(uchar *buf)
int ha_myisammrg::rnd_pos(uchar * buf, uchar *pos)
{
+ DBUG_ASSERT(this->file->children_attached);
ha_statistic_increment(&SSV::ha_read_rnd_count);
int error=myrg_rrnd(file, buf, my_get_ptr(pos,ref_length));
table->status=error ? STATUS_NOT_FOUND: 0;
@@ -303,6 +770,7 @@ int ha_myisammrg::rnd_pos(uchar * buf, uchar *pos)
void ha_myisammrg::position(const uchar *record)
{
+ DBUG_ASSERT(this->file->children_attached);
ulonglong row_position= myrg_position(file);
my_store_ptr(ref, ref_length, (my_off_t) row_position);
}
@@ -311,6 +779,7 @@ void ha_myisammrg::position(const uchar *record)
ha_rows ha_myisammrg::records_in_range(uint inx, key_range *min_key,
key_range *max_key)
{
+ DBUG_ASSERT(this->file->children_attached);
return (ha_rows) myrg_records_in_range(file, (int) inx, min_key, max_key);
}
@@ -318,6 +787,7 @@ ha_rows ha_myisammrg::records_in_range(uint inx, key_range *min_key,
int ha_myisammrg::info(uint flag)
{
MYMERGE_INFO mrg_info;
+ DBUG_ASSERT(this->file->children_attached);
(void) myrg_status(file,&mrg_info,flag);
/*
The following fails if one has not compiled MySQL with -DBIG_TABLES
@@ -387,6 +857,23 @@ int ha_myisammrg::info(uint flag)
int ha_myisammrg::extra(enum ha_extra_function operation)
{
+ if (operation == HA_EXTRA_ATTACH_CHILDREN)
+ {
+ int rc= attach_children();
+ if (!rc)
+ (void) extra(HA_EXTRA_NO_READCHECK); // Not needed in SQL
+ return(rc);
+ }
+ else if (operation == HA_EXTRA_DETACH_CHILDREN)
+ {
+ /*
+ Note that detach must not touch the children in any way.
+ They may have been closed at ths point already.
+ */
+ int rc= detach_children();
+ return(rc);
+ }
+
/* As this is just a mapping, we don't have to force the underlying
tables to be closed */
if (operation == HA_EXTRA_FORCE_REOPEN ||
@@ -404,6 +891,7 @@ int ha_myisammrg::reset(void)
int ha_myisammrg::extra_opt(enum ha_extra_function operation, ulong cache_size)
{
+ DBUG_ASSERT(this->file->children_attached);
if ((specialflag & SPECIAL_SAFE_MODE) && operation == HA_EXTRA_WRITE_CACHE)
return 0;
return myrg_extra(file, operation, (void*) &cache_size);
@@ -411,11 +899,20 @@ int ha_myisammrg::extra_opt(enum ha_extra_function operation, ulong cache_size)
int ha_myisammrg::external_lock(THD *thd, int lock_type)
{
+ DBUG_ASSERT(this->file->children_attached);
return myrg_lock_database(file,lock_type);
}
uint ha_myisammrg::lock_count(void) const
{
+ /*
+ Return the real lock count even if the children are not attached.
+ This method is used for allocating memory. If we would return 0
+ to another thread (e.g. doing FLUSH TABLE), and attach the children
+ before the other thread calls store_lock(), then we would return
+ more locks in store_lock() than we claimed by lock_count(). The
+ other tread would overrun its memory.
+ */
return file->tables;
}
@@ -426,6 +923,24 @@ THR_LOCK_DATA **ha_myisammrg::store_lock(THD *thd,
{
MYRG_TABLE *open_table;
+ /*
+ This method can be called while another thread is attaching the
+ children. If the processor reorders instructions or write to memory,
+ 'children_attached' could be set before 'open_tables' has all the
+ pointers to the children. Use of a mutex here and in
+ myrg_attach_children() forces consistent data.
+ */
+ pthread_mutex_lock(&this->file->mutex);
+
+ /*
+ When MERGE table is open, but not yet attached, other threads
+ could flush it, which means call mysql_lock_abort_for_thread()
+ on this threads TABLE. 'children_attached' is FALSE in this
+ situaton. Since the table is not locked, return no lock data.
+ */
+ if (!this->file->children_attached)
+ goto end; /* purecov: tested */
+
for (open_table=file->open_tables ;
open_table != file->end_table ;
open_table++)
@@ -434,6 +949,9 @@ THR_LOCK_DATA **ha_myisammrg::store_lock(THD *thd,
if (lock_type != TL_IGNORE && open_table->table->lock.type == TL_UNLOCK)
open_table->table->lock.type=lock_type;
}
+
+ end:
+ pthread_mutex_unlock(&this->file->mutex);
return to;
}
@@ -519,47 +1037,50 @@ int ha_myisammrg::create(const char *name, register TABLE *form,
uint dirlgt= dirname_length(name);
DBUG_ENTER("ha_myisammrg::create");
+ /* Allocate a table_names array in thread mem_root. */
if (!(table_names= (const char**)
thd->alloc((create_info->merge_list.elements+1) * sizeof(char*))))
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+
+ /* Create child path names. */
for (pos= table_names; tables; tables= tables->next_local)
{
const char *table_name;
- TABLE *tbl= 0;
- if (create_info->options & HA_LEX_CREATE_TMP_TABLE)
- tbl= find_temporary_table(thd, tables);
- if (!tbl)
- {
- /*
- Construct the path to the MyISAM table. Try to meet two conditions:
- 1.) Allow to include MyISAM tables from different databases, and
- 2.) allow for moving DATADIR around in the file system.
- The first means that we need paths in the .MRG file. The second
- means that we should not have absolute paths in the .MRG file.
- The best, we can do, is to use 'mysql_data_home', which is '.'
- in mysqld and may be an absolute path in an embedded server.
- This means that it might not be possible to move the DATADIR of
- an embedded server without changing the paths in the .MRG file.
- */
- uint length= build_table_filename(buff, sizeof(buff),
- tables->db, tables->table_name, "", 0);
- /*
- If a MyISAM table is in the same directory as the MERGE table,
- we use the table name without a path. This means that the
- DATADIR can easily be moved even for an embedded server as long
- as the MyISAM tables are from the same database as the MERGE table.
- */
- if ((dirname_length(buff) == dirlgt) && ! memcmp(buff, name, dirlgt))
- table_name= tables->table_name;
- else
- if (! (table_name= thd->strmake(buff, length)))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- }
+
+ /*
+ Construct the path to the MyISAM table. Try to meet two conditions:
+ 1.) Allow to include MyISAM tables from different databases, and
+ 2.) allow for moving DATADIR around in the file system.
+ The first means that we need paths in the .MRG file. The second
+ means that we should not have absolute paths in the .MRG file.
+ The best, we can do, is to use 'mysql_data_home', which is '.'
+ in mysqld and may be an absolute path in an embedded server.
+ This means that it might not be possible to move the DATADIR of
+ an embedded server without changing the paths in the .MRG file.
+
+ Do the same even for temporary tables. MERGE children are now
+ opened through the table cache. They are opened by db.table_name,
+ not by their path name.
+ */
+ uint length= build_table_filename(buff, sizeof(buff),
+ tables->db, tables->table_name, "", 0);
+ /*
+ If a MyISAM table is in the same directory as the MERGE table,
+ we use the table name without a path. This means that the
+ DATADIR can easily be moved even for an embedded server as long
+ as the MyISAM tables are from the same database as the MERGE table.
+ */
+ if ((dirname_length(buff) == dirlgt) && ! memcmp(buff, name, dirlgt))
+ table_name= tables->table_name;
else
- table_name= tbl->s->path.str;
+ if (! (table_name= thd->strmake(buff, length)))
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM); /* purecov: inspected */
+
*pos++= table_name;
}
*pos=0;
+
+ /* Create a MERGE meta file from the table_names array. */
DBUG_RETURN(myrg_create(fn_format(buff,name,"","",
MY_RESOLVE_SYMLINKS|
MY_UNPACK_FILENAME|MY_APPEND_EXT),
@@ -642,7 +1163,7 @@ static int myisammrg_init(void *p)
myisammrg_hton->db_type= DB_TYPE_MRG_MYISAM;
myisammrg_hton->create= myisammrg_create_handler;
myisammrg_hton->panic= myisammrg_panic;
- myisammrg_hton->flags= HTON_CAN_RECREATE|HTON_NO_PARTITION;
+ myisammrg_hton->flags= HTON_NO_PARTITION;
return 0;
}
diff --git a/storage/myisammrg/ha_myisammrg.h b/storage/myisammrg/ha_myisammrg.h
index 91aabe277f7..977c45d1435 100644
--- a/storage/myisammrg/ha_myisammrg.h
+++ b/storage/myisammrg/ha_myisammrg.h
@@ -27,8 +27,12 @@ class ha_myisammrg: public handler
MYRG_INFO *file;
public:
+ TABLE_LIST *next_child_attach; /* next child to attach */
+ uint test_if_locked; /* flags from ::open() */
+ bool need_compat_check; /* if need compatibility check */
+
ha_myisammrg(handlerton *hton, TABLE_SHARE *table_arg);
- ~ha_myisammrg() {}
+ ~ha_myisammrg();
const char *table_type() const { return "MRG_MyISAM"; }
const char **bas_ext() const;
const char *index_type(uint key_number);
@@ -53,6 +57,8 @@ class ha_myisammrg: public handler
{ return ulonglong2double(stats.data_file_length) / IO_SIZE + file->tables; }
int open(const char *name, int mode, uint test_if_locked);
+ int attach_children(void);
+ int detach_children(void);
int close(void);
int write_row(uchar * buf);
int update_row(const uchar * old_data, uchar * new_data);
@@ -85,6 +91,7 @@ class ha_myisammrg: public handler
void update_create_info(HA_CREATE_INFO *create_info);
void append_create_info(String *packet);
MYRG_INFO *myrg_info() { return file; }
+ TABLE *table_ptr() { return table; }
bool check_if_incompatible_data(HA_CREATE_INFO *info, uint table_changes);
int check(THD* thd, HA_CHECK_OPT* check_opt);
};
diff --git a/storage/myisammrg/myrg_close.c b/storage/myisammrg/myrg_close.c
index baae24634b3..97216ed47fe 100644
--- a/storage/myisammrg/myrg_close.c
+++ b/storage/myisammrg/myrg_close.c
@@ -23,13 +23,42 @@ int myrg_close(MYRG_INFO *info)
MYRG_TABLE *file;
DBUG_ENTER("myrg_close");
- for (file=info->open_tables ; file != info->end_table ; file++)
- if ((new_error=mi_close(file->table)))
- error=new_error;
+ /*
+ Assume that info->children_attached means that this is called from
+ direct use of MERGE, not from a MySQL server. In this case the
+ children must be closed and info->rec_per_key_part is part of the
+ 'info' multi_alloc.
+ If info->children_attached is false, this is called from a MySQL
+ server. Children are closed independently but info->rec_per_key_part
+ must be freed.
+ Just in case of a server panic (myrg_panic()) info->children_attached
+ might be true. We would close the children though they should be
+ closed independently and info->rec_per_key_part is not freed.
+ This should be acceptable for a panic.
+ In case of a MySQL server and no children, children_attached is
+ always true. In this case no rec_per_key_part has been allocated.
+ So it is correct to use the branch where an empty list of tables is
+ (not) closed.
+ */
+ if (info->children_attached)
+ {
+ for (file= info->open_tables; file != info->end_table; file++)
+ {
+ /* purecov: begin inspected */
+ if ((new_error= mi_close(file->table)))
+ error= new_error;
+ else
+ file->table= NULL;
+ /* purecov: end */
+ }
+ }
+ else
+ my_free((uchar*) info->rec_per_key_part, MYF(MY_ALLOW_ZERO_PTR));
delete_queue(&info->by_key);
pthread_mutex_lock(&THR_LOCK_open);
myrg_open_list=list_delete(myrg_open_list,&info->open_list);
pthread_mutex_unlock(&THR_LOCK_open);
+ VOID(pthread_mutex_destroy(&info->mutex));
my_free((uchar*) info,MYF(0));
if (error)
{
diff --git a/storage/myisammrg/myrg_extra.c b/storage/myisammrg/myrg_extra.c
index a1e6e3f8d4d..3d14f6a56e6 100644
--- a/storage/myisammrg/myrg_extra.c
+++ b/storage/myisammrg/myrg_extra.c
@@ -29,6 +29,8 @@ int myrg_extra(MYRG_INFO *info,enum ha_extra_function function,
DBUG_ENTER("myrg_extra");
DBUG_PRINT("info",("function: %lu", (ulong) function));
+ if (!info->children_attached)
+ DBUG_RETURN(1);
if (function == HA_EXTRA_CACHE)
{
info->cache_in_use=1;
@@ -73,6 +75,8 @@ int myrg_reset(MYRG_INFO *info)
MYRG_TABLE *file;
DBUG_ENTER("myrg_reset");
+ if (!info->children_attached)
+ DBUG_RETURN(1);
info->cache_in_use=0;
info->current_table=0;
info->last_used_table= info->open_tables;
diff --git a/storage/myisammrg/myrg_open.c b/storage/myisammrg/myrg_open.c
index 500d3a29327..b5002116164 100644
--- a/storage/myisammrg/myrg_open.c
+++ b/storage/myisammrg/myrg_open.c
@@ -26,8 +26,14 @@
open a MyISAM MERGE table
if handle_locking is 0 then exit with error if some table is locked
if handle_locking is 1 then wait if table is locked
-*/
+ NOTE: This function is not used in the MySQL server. It is for
+ MERGE use independent from MySQL. Currently there is some code
+ duplication between myrg_open() and myrg_parent_open() +
+ myrg_attach_children(). Please duplicate changes in these
+ functions or make common sub-functions.
+*/
+/* purecov: begin deadcode */ /* not used in MySQL server */
MYRG_INFO *myrg_open(const char *name, int mode, int handle_locking)
{
@@ -107,13 +113,11 @@ MYRG_INFO *myrg_open(const char *name, int mode, int handle_locking)
key_parts*sizeof(long),
MYF(MY_WME|MY_ZEROFILL))))
goto err;
- if (files)
- {
- m_info->open_tables=(MYRG_TABLE *) (m_info+1);
- m_info->rec_per_key_part=(ulong *) (m_info->open_tables+files);
- m_info->tables= files;
- files= 0;
- }
+ DBUG_ASSERT(files);
+ m_info->open_tables=(MYRG_TABLE *) (m_info+1);
+ m_info->rec_per_key_part=(ulong *) (m_info->open_tables+files);
+ m_info->tables= files;
+ files= 0;
m_info->reclength=isam->s->base.reclength;
min_keys= isam->s->base.keys;
errpos=3;
@@ -163,9 +167,11 @@ MYRG_INFO *myrg_open(const char *name, int mode, int handle_locking)
/* this works ok if the table list is empty */
m_info->end_table=m_info->open_tables+files;
m_info->last_used_table=m_info->open_tables;
+ m_info->children_attached= TRUE;
VOID(my_close(fd,MYF(0)));
end_io_cache(&file);
+ VOID(pthread_mutex_init(&m_info->mutex, MY_MUTEX_INIT_FAST));
m_info->open_list.data=(void*) m_info;
pthread_mutex_lock(&THR_LOCK_open);
myrg_open_list=list_add(myrg_open_list,&m_info->open_list);
@@ -189,3 +195,330 @@ err:
my_errno=save_errno;
DBUG_RETURN (NULL);
}
+/* purecov: end */
+
+
+/**
+ @brief Open parent table of a MyISAM MERGE table.
+
+ @detail Open MERGE meta file to get the table name paths for the child
+ tables. Count the children. Allocate and initialize MYRG_INFO
+ structure. Call a callback function for each child table.
+
+ @param[in] parent_name merge table name path as "database/table"
+ @param[in] callback function to call for each child table
+ @param[in] callback_param data pointer to give to the callback
+
+ @return MYRG_INFO pointer
+ @retval != NULL OK
+ @retval NULL Error
+
+ @note: Currently there is some code duplication between myrg_open()
+ and myrg_parent_open() + myrg_attach_children(). Please duplicate
+ changes in these functions or make common sub-functions.
+*/
+
+MYRG_INFO *myrg_parent_open(const char *parent_name,
+ int (*callback)(void*, const char*),
+ void *callback_param)
+{
+ MYRG_INFO *m_info;
+ int rc;
+ int errpos;
+ int save_errno;
+ int insert_method;
+ uint length;
+ uint dir_length;
+ uint child_count;
+ size_t name_buff_length;
+ File fd;
+ IO_CACHE file_cache;
+ char parent_name_buff[FN_REFLEN * 2];
+ char child_name_buff[FN_REFLEN];
+ DBUG_ENTER("myrg_parent_open");
+
+ rc= 1;
+ errpos= 0;
+ bzero((char*) &file_cache, sizeof(file_cache));
+
+ /* Open MERGE meta file. */
+ if ((fd= my_open(fn_format(parent_name_buff, parent_name, "", MYRG_NAME_EXT,
+ MY_UNPACK_FILENAME|MY_APPEND_EXT),
+ O_RDONLY | O_SHARE, MYF(0))) < 0)
+ goto err; /* purecov: inspected */
+ errpos= 1;
+
+ if (init_io_cache(&file_cache, fd, 4 * IO_SIZE, READ_CACHE, 0, 0,
+ MYF(MY_WME | MY_NABP)))
+ goto err; /* purecov: inspected */
+ errpos= 2;
+
+ /* Count children. Determine insert method. */
+ child_count= 0;
+ insert_method= 0;
+ while ((length= my_b_gets(&file_cache, child_name_buff, FN_REFLEN - 1)))
+ {
+ /* Remove line terminator. */
+ if (child_name_buff[length - 1] == '\n')
+ child_name_buff[--length]= '\0';
+
+ /* Skip empty lines. */
+ if (!child_name_buff[0])
+ continue; /* purecov: inspected */
+
+ /* Skip comments, but evaluate insert method. */
+ if (child_name_buff[0] == '#')
+ {
+ if (!strncmp(child_name_buff + 1, "INSERT_METHOD=", 14))
+ {
+ /* Compare buffer with global methods list: merge_insert_method. */
+ insert_method= find_type(child_name_buff + 15,
+ &merge_insert_method, 2);
+ }
+ continue;
+ }
+
+ /* Count the child. */
+ child_count++;
+ }
+
+ /* Allocate MERGE parent table structure. */
+ if (!(m_info= (MYRG_INFO*) my_malloc(sizeof(MYRG_INFO) +
+ child_count * sizeof(MYRG_TABLE),
+ MYF(MY_WME | MY_ZEROFILL))))
+ goto err; /* purecov: inspected */
+ errpos= 3;
+ m_info->open_tables= (MYRG_TABLE*) (m_info + 1);
+ m_info->tables= child_count;
+ m_info->merge_insert_method= insert_method > 0 ? insert_method : 0;
+ /* This works even if the table list is empty. */
+ m_info->end_table= m_info->open_tables + child_count;
+ if (!child_count)
+ {
+ /* Do not attach/detach an empty child list. */
+ m_info->children_attached= TRUE;
+ }
+
+ /* Call callback for each child. */
+ dir_length= dirname_part(parent_name_buff, parent_name, &name_buff_length);
+ my_b_seek(&file_cache, 0);
+ while ((length= my_b_gets(&file_cache, child_name_buff, FN_REFLEN - 1)))
+ {
+ /* Remove line terminator. */
+ if (child_name_buff[length - 1] == '\n')
+ child_name_buff[--length]= '\0';
+
+ /* Skip empty lines and comments. */
+ if (!child_name_buff[0] || (child_name_buff[0] == '#'))
+ continue;
+
+ if (!has_path(child_name_buff))
+ {
+ VOID(strmake(parent_name_buff + dir_length, child_name_buff,
+ sizeof(parent_name_buff) - 1 - dir_length));
+ VOID(cleanup_dirname(child_name_buff, parent_name_buff));
+ }
+ else
+ fn_format(child_name_buff, child_name_buff, "", "", 0);
+ DBUG_PRINT("info", ("child: '%s'", child_name_buff));
+
+ /* Callback registers child with handler table. */
+ if ((rc= (*callback)(callback_param, child_name_buff)))
+ goto err; /* purecov: inspected */
+ }
+
+ end_io_cache(&file_cache);
+ VOID(my_close(fd, MYF(0)));
+ VOID(pthread_mutex_init(&m_info->mutex, MY_MUTEX_INIT_FAST));
+
+ m_info->open_list.data= (void*) m_info;
+ pthread_mutex_lock(&THR_LOCK_open);
+ myrg_open_list= list_add(myrg_open_list, &m_info->open_list);
+ pthread_mutex_unlock(&THR_LOCK_open);
+
+ DBUG_RETURN(m_info);
+
+ /* purecov: begin inspected */
+ err:
+ save_errno= my_errno;
+ switch (errpos) {
+ case 3:
+ my_free((char*) m_info, MYF(0));
+ /* Fall through */
+ case 2:
+ end_io_cache(&file_cache);
+ /* Fall through */
+ case 1:
+ VOID(my_close(fd, MYF(0)));
+ }
+ my_errno= save_errno;
+ DBUG_RETURN (NULL);
+ /* purecov: end */
+}
+
+
+/**
+ @brief Attach children to a MyISAM MERGE parent table.
+
+ @detail Call a callback function for each child table.
+ The callback returns the MyISAM table handle of the child table.
+ Check table definition match.
+
+ @param[in] m_info MERGE parent table structure
+ @param[in] handle_locking if contains HA_OPEN_FOR_REPAIR, warn about
+ incompatible child tables, but continue
+ @param[in] callback function to call for each child table
+ @param[in] callback_param data pointer to give to the callback
+
+ @return status
+ @retval 0 OK
+ @retval != 0 Error
+
+ @note: Currently there is some code duplication between myrg_open()
+ and myrg_parent_open() + myrg_attach_children(). Please duplicate
+ changes in these functions or make common sub-functions.
+*/
+
+int myrg_attach_children(MYRG_INFO *m_info, int handle_locking,
+ MI_INFO *(*callback)(void*),
+ void *callback_param)
+{
+ ulonglong file_offset;
+ MI_INFO *myisam;
+ int rc;
+ int errpos;
+ int save_errno;
+ uint idx;
+ uint child_nr;
+ uint key_parts;
+ uint min_keys;
+ DBUG_ENTER("myrg_attach_children");
+ DBUG_PRINT("myrg", ("handle_locking: %d", handle_locking));
+
+ /*
+ This function can be called while another thread is trying to abort
+ locks of this MERGE table. If the processor reorders instructions or
+ write to memory, 'children_attached' could be set before
+ 'open_tables' has all the pointers to the children. Use of a mutex
+ here and in ha_myisammrg::store_lock() forces consistent data.
+ */
+ pthread_mutex_lock(&m_info->mutex);
+ rc= 1;
+ errpos= 0;
+ file_offset= 0;
+ LINT_INIT(key_parts);
+ min_keys= 0;
+ child_nr= 0;
+ while ((myisam= (*callback)(callback_param)))
+ {
+ DBUG_PRINT("myrg", ("child_nr: %u table: '%s'",
+ child_nr, myisam->filename));
+ DBUG_ASSERT(child_nr < m_info->tables);
+
+ /* Special handling when the first child is attached. */
+ if (!child_nr)
+ {
+ m_info->reclength= myisam->s->base.reclength;
+ min_keys= myisam->s->base.keys;
+ key_parts= myisam->s->base.key_parts;
+ if (!m_info->rec_per_key_part)
+ {
+ if(!(m_info->rec_per_key_part= (ulong*)
+ my_malloc(key_parts * sizeof(long), MYF(MY_WME|MY_ZEROFILL))))
+ goto err; /* purecov: inspected */
+ errpos= 1;
+ }
+ }
+
+ /* Add MyISAM table info. */
+ m_info->open_tables[child_nr].table= myisam;
+ m_info->open_tables[child_nr].file_offset= (my_off_t) file_offset;
+ file_offset+= myisam->state->data_file_length;
+
+ /* Check table definition match. */
+ if (m_info->reclength != myisam->s->base.reclength)
+ {
+ DBUG_PRINT("error", ("definition mismatch table: '%s' repair: %d",
+ myisam->filename,
+ (handle_locking & HA_OPEN_FOR_REPAIR)));
+ my_errno= HA_ERR_WRONG_MRG_TABLE_DEF;
+ if (handle_locking & HA_OPEN_FOR_REPAIR)
+ {
+ myrg_print_wrong_table(myisam->filename);
+ continue;
+ }
+ goto err;
+ }
+
+ m_info->options|= myisam->s->options;
+ m_info->records+= myisam->state->records;
+ m_info->del+= myisam->state->del;
+ m_info->data_file_length+= myisam->state->data_file_length;
+ if (min_keys > myisam->s->base.keys)
+ min_keys= myisam->s->base.keys; /* purecov: inspected */
+ for (idx= 0; idx < key_parts; idx++)
+ m_info->rec_per_key_part[idx]+= (myisam->s->state.rec_per_key_part[idx] /
+ m_info->tables);
+ child_nr++;
+ }
+
+ if (my_errno == HA_ERR_WRONG_MRG_TABLE_DEF)
+ goto err;
+ if (sizeof(my_off_t) == 4 && file_offset > (ulonglong) (ulong) ~0L)
+ {
+ my_errno= HA_ERR_RECORD_FILE_FULL;
+ goto err;
+ }
+ /* Don't mark table readonly, for ALTER TABLE ... UNION=(...) to work */
+ m_info->options&= ~(HA_OPTION_COMPRESS_RECORD | HA_OPTION_READ_ONLY_DATA);
+ m_info->keys= min_keys;
+ m_info->last_used_table= m_info->open_tables;
+ m_info->children_attached= TRUE;
+ pthread_mutex_unlock(&m_info->mutex);
+ DBUG_RETURN(0);
+
+err:
+ save_errno= my_errno;
+ switch (errpos) {
+ case 1:
+ my_free((char*) m_info->rec_per_key_part, MYF(0));
+ m_info->rec_per_key_part= NULL;
+ }
+ pthread_mutex_unlock(&m_info->mutex);
+ my_errno= save_errno;
+ DBUG_RETURN(1);
+}
+
+
+/**
+ @brief Detach children from a MyISAM MERGE parent table.
+
+ @param[in] m_info MERGE parent table structure
+
+ @note Detach must not touch the children in any way.
+ They may have been closed at ths point already.
+ All references to the children should be removed.
+
+ @return status
+ @retval 0 OK
+*/
+
+int myrg_detach_children(MYRG_INFO *m_info)
+{
+ DBUG_ENTER("myrg_detach_children");
+ /* For symmetry with myrg_attach_children() we use the mutex here. */
+ pthread_mutex_lock(&m_info->mutex);
+ if (m_info->tables)
+ {
+ /* Do not attach/detach an empty child list. */
+ m_info->children_attached= FALSE;
+ bzero((char*) m_info->open_tables, m_info->tables * sizeof(MYRG_TABLE));
+ }
+ m_info->records= 0;
+ m_info->del= 0;
+ m_info->data_file_length= 0;
+ m_info->options= 0;
+ pthread_mutex_unlock(&m_info->mutex);
+ DBUG_RETURN(0);
+}
+
diff --git a/storage/ndb/include/kernel/AttributeHeader.hpp b/storage/ndb/include/kernel/AttributeHeader.hpp
index 613e3d19d1b..52f93b6cd05 100644
--- a/storage/ndb/include/kernel/AttributeHeader.hpp
+++ b/storage/ndb/include/kernel/AttributeHeader.hpp
@@ -52,8 +52,7 @@ public:
// NOTE: in 5.1 ctors and init take size in bytes
/** Initialize AttributeHeader at location aHeaderPtr */
- static AttributeHeader& init(void* aHeaderPtr, Uint32 anAttributeId,
- Uint32 aByteSize);
+ static void init(Uint32* aHeaderPtr, Uint32 anAttributeId, Uint32 aByteSize);
/** Returns size of AttributeHeader (usually one or two words) */
Uint32 getHeaderSize() const; // In 32-bit words
@@ -113,10 +112,11 @@ public:
*/
inline
-AttributeHeader& AttributeHeader::init(void* aHeaderPtr, Uint32 anAttributeId,
- Uint32 aByteSize)
+void AttributeHeader::init(Uint32* aHeaderPtr, Uint32 anAttributeId,
+ Uint32 aByteSize)
{
- return * new (aHeaderPtr) AttributeHeader(anAttributeId, aByteSize);
+ AttributeHeader ah(anAttributeId, aByteSize);
+ *aHeaderPtr = ah.m_value;
}
inline
diff --git a/storage/ndb/include/kernel/GlobalSignalNumbers.h b/storage/ndb/include/kernel/GlobalSignalNumbers.h
index aa0596f102a..9653c20260f 100644
--- a/storage/ndb/include/kernel/GlobalSignalNumbers.h
+++ b/storage/ndb/include/kernel/GlobalSignalNumbers.h
@@ -195,9 +195,11 @@ extern const GlobalSignalNumber NO_OF_SIGNAL_NAMES;
/* 132 not unused */
/* 133 not unused */
#define GSN_CM_HEARTBEAT 134 /* distr. */
-/* 135 unused */
-/* 136 unused */
-/* 137 unused */
+
+#define GSN_PREPARE_COPY_FRAG_REQ 135
+#define GSN_PREPARE_COPY_FRAG_REF 136
+#define GSN_PREPARE_COPY_FRAG_CONF 137
+
#define GSN_CM_NODEINFOCONF 138 /* distr. */
#define GSN_CM_NODEINFOREF 139 /* distr. */
#define GSN_CM_NODEINFOREQ 140 /* distr. */
diff --git a/storage/ndb/include/kernel/signaldata/AccScan.hpp b/storage/ndb/include/kernel/signaldata/AccScan.hpp
index 73d69825069..a0aa38c8d8e 100644
--- a/storage/ndb/include/kernel/signaldata/AccScan.hpp
+++ b/storage/ndb/include/kernel/signaldata/AccScan.hpp
@@ -49,6 +49,7 @@ private:
Uint32 savePointId;
Uint32 gci;
};
+ Uint32 maxPage;
/**
* Previously there where also a scan type
diff --git a/storage/ndb/include/kernel/signaldata/CopyFrag.hpp b/storage/ndb/include/kernel/signaldata/CopyFrag.hpp
index 06dd4070264..d985358dce4 100644
--- a/storage/ndb/include/kernel/signaldata/CopyFrag.hpp
+++ b/storage/ndb/include/kernel/signaldata/CopyFrag.hpp
@@ -29,7 +29,7 @@ class CopyFragReq {
*/
friend class Dblqh;
public:
- STATIC_CONST( SignalLength = 9 );
+ STATIC_CONST( SignalLength = 10 );
private:
Uint32 userPtr;
@@ -42,6 +42,7 @@ private:
Uint32 gci;
Uint32 nodeCount;
Uint32 nodeList[1];
+ //Uint32 maxPage; is stored in nodeList[nodeCount]
};
class CopyFragConf {
@@ -95,4 +96,42 @@ struct UpdateFragDistKeyOrd
STATIC_CONST( SignalLength = 3 );
};
+struct PrepareCopyFragReq
+{
+ STATIC_CONST( SignalLength = 6 );
+
+ Uint32 senderRef;
+ Uint32 senderData;
+ Uint32 tableId;
+ Uint32 fragId;
+ Uint32 copyNodeId;
+ Uint32 startingNodeId;
+};
+
+struct PrepareCopyFragRef
+{
+ Uint32 senderRef;
+ Uint32 senderData;
+ Uint32 tableId;
+ Uint32 fragId;
+ Uint32 copyNodeId;
+ Uint32 startingNodeId;
+ Uint32 errorCode;
+
+ STATIC_CONST( SignalLength = 7 );
+};
+
+struct PrepareCopyFragConf
+{
+ STATIC_CONST( SignalLength = 7 );
+
+ Uint32 senderRef;
+ Uint32 senderData;
+ Uint32 tableId;
+ Uint32 fragId;
+ Uint32 copyNodeId;
+ Uint32 startingNodeId;
+ Uint32 maxPageNo;
+};
+
#endif
diff --git a/storage/ndb/include/kernel/signaldata/ScanTab.hpp b/storage/ndb/include/kernel/signaldata/ScanTab.hpp
index 0074078533f..3d2071ca019 100644
--- a/storage/ndb/include/kernel/signaldata/ScanTab.hpp
+++ b/storage/ndb/include/kernel/signaldata/ScanTab.hpp
@@ -46,6 +46,7 @@ public:
* Length of signal
*/
STATIC_CONST( StaticLength = 11 );
+ STATIC_CONST( MaxTotalAttrInfo = 0xFFFF );
private:
diff --git a/storage/ndb/include/kernel/signaldata/TcKeyConf.hpp b/storage/ndb/include/kernel/signaldata/TcKeyConf.hpp
index b8562875ef5..fd8932c3c87 100644
--- a/storage/ndb/include/kernel/signaldata/TcKeyConf.hpp
+++ b/storage/ndb/include/kernel/signaldata/TcKeyConf.hpp
@@ -46,7 +46,7 @@ public:
*/
STATIC_CONST( StaticLength = 5 );
STATIC_CONST( OperationLength = 2 );
- STATIC_CONST( SimpleReadBit = (((Uint32)1) << 31) );
+ STATIC_CONST( DirtyReadBit = (((Uint32)1) << 31) );
private:
diff --git a/storage/ndb/include/kernel/signaldata/TcKeyRef.hpp b/storage/ndb/include/kernel/signaldata/TcKeyRef.hpp
index 2846ce3854f..56f6cdae29d 100644
--- a/storage/ndb/include/kernel/signaldata/TcKeyRef.hpp
+++ b/storage/ndb/include/kernel/signaldata/TcKeyRef.hpp
@@ -40,12 +40,13 @@ class TcKeyRef {
friend bool printTCKEYREF(FILE *, const Uint32 *, Uint32, Uint16);
public:
- STATIC_CONST( SignalLength = 4 );
+ STATIC_CONST( SignalLength = 5 );
private:
Uint32 connectPtr;
Uint32 transId[2];
Uint32 errorCode;
+ Uint32 errorData;
};
#endif
diff --git a/storage/ndb/include/kernel/signaldata/TcRollbackRep.hpp b/storage/ndb/include/kernel/signaldata/TcRollbackRep.hpp
index 3b5e2f3d3cb..609756605d5 100644
--- a/storage/ndb/include/kernel/signaldata/TcRollbackRep.hpp
+++ b/storage/ndb/include/kernel/signaldata/TcRollbackRep.hpp
@@ -38,12 +38,13 @@ class TcRollbackRep {
friend bool printTCROLBACKREP(FILE *, const Uint32 *, Uint32, Uint16);
public:
- STATIC_CONST( SignalLength = 4 );
+ STATIC_CONST( SignalLength = 5 );
private:
Uint32 connectPtr;
Uint32 transId[2];
Uint32 returnCode;
+ Uint32 errorData;
};
#endif
diff --git a/storage/ndb/include/ndb_version.h.in b/storage/ndb/include/ndb_version.h.in
index 5405ad4d7aa..6a479433b3b 100644
--- a/storage/ndb/include/ndb_version.h.in
+++ b/storage/ndb/include/ndb_version.h.in
@@ -88,5 +88,52 @@ Uint32 ndbGetOwnVersion();
#define NDBD_NODE_VERSION_REP NDB_MAKE_VERSION(6,1,1)
+#define NDBD_PREPARE_COPY_FRAG_VERSION NDB_MAKE_VERSION(6,2,1)
+#define NDBD_PREPARE_COPY_FRAG_V2_51 NDB_MAKE_VERSION(5,1,23)
+#define NDBD_PREPARE_COPY_FRAG_V2_62 NDB_MAKE_VERSION(6,2,8)
+#define NDBD_PREPARE_COPY_FRAG_V2_63 NDB_MAKE_VERSION(6,3,6)
+
+/**
+ * 0 = NO PREP COPY FRAG SUPPORT
+ * 1 = NO MAX PAGE SUPPORT
+ * 2 = LATEST VERSION
+ */
+static
+inline
+int
+ndb_check_prep_copy_frag_version(Uint32 version)
+{
+ if (version == NDB_VERSION_D)
+ return 2;
+
+ const Uint32 major = (version >> 16) & 0xFF;
+ const Uint32 minor = (version >> 8) & 0xFF;
+ if (major >= 6)
+ {
+ if (minor == 2)
+ {
+ if (version >= NDBD_PREPARE_COPY_FRAG_V2_62)
+ return 2;
+ if (version >= NDBD_PREPARE_COPY_FRAG_VERSION)
+ return 1;
+ return 0;
+ }
+ else if (minor == 3)
+ {
+ if (version >= NDBD_PREPARE_COPY_FRAG_V2_63)
+ return 2;
+ return 1;
+ }
+ return 2;
+ }
+ else if (major == 5 && minor == 1)
+ {
+ if (version >= NDBD_PREPARE_COPY_FRAG_V2_51)
+ return 2;
+ }
+
+ return 0;
+}
+
#endif
diff --git a/storage/ndb/include/ndbapi/Ndb.hpp b/storage/ndb/include/ndbapi/Ndb.hpp
index 995ce67e61d..dca19c2ead0 100644
--- a/storage/ndb/include/ndbapi/Ndb.hpp
+++ b/storage/ndb/include/ndbapi/Ndb.hpp
@@ -1056,6 +1056,7 @@ class Ndb
friend class NdbBlob;
friend class NdbImpl;
friend class Ndb_internal;
+ friend class NdbScanFilterImpl;
#endif
public:
diff --git a/storage/ndb/include/ndbapi/NdbDictionary.hpp b/storage/ndb/include/ndbapi/NdbDictionary.hpp
index 58882e139fd..0e782ba9214 100644
--- a/storage/ndb/include/ndbapi/NdbDictionary.hpp
+++ b/storage/ndb/include/ndbapi/NdbDictionary.hpp
@@ -1020,7 +1020,7 @@ public:
* Get the name of the table being indexed
*/
const char * getTable() const;
-
+
/**
* Get the number of columns in the index
*/
diff --git a/storage/ndb/include/ndbapi/NdbOperation.hpp b/storage/ndb/include/ndbapi/NdbOperation.hpp
index 06111941df4..78dbadfd7ab 100644
--- a/storage/ndb/include/ndbapi/NdbOperation.hpp
+++ b/storage/ndb/include/ndbapi/NdbOperation.hpp
@@ -93,8 +93,9 @@ public:
,LM_CommittedRead ///< Ignore locks, read last committed value
#ifndef DOXYGEN_SHOULD_SKIP_INTERNAL
= 2,
- LM_Dirty = 2
+ LM_Dirty = 2,
#endif
+ LM_SimpleRead = 3 ///< Read with shared lock, but release lock directly
};
/**
@@ -842,8 +843,10 @@ protected:
virtual ~NdbOperation();
void next(NdbOperation*); // Set next pointer
NdbOperation* next(); // Get next pointer
+
public:
#ifndef DOXYGEN_SHOULD_SKIP_INTERNAL
+ NdbTransaction* getNdbTransaction();
const NdbOperation* next() const;
const NdbRecAttr* getFirstRecAttr() const;
#endif
diff --git a/storage/ndb/include/ndbapi/NdbPool.hpp b/storage/ndb/include/ndbapi/NdbPool.hpp
index 1963bf26448..44b6d7488f0 100644
--- a/storage/ndb/include/ndbapi/NdbPool.hpp
+++ b/storage/ndb/include/ndbapi/NdbPool.hpp
@@ -17,7 +17,8 @@ class Ndb;
class NdbPool;
bool
-create_instance(Uint32 max_ndb_objects,
+create_instance(Ndb_cluster_connection* cc,
+ Uint32 max_ndb_objects,
Uint32 no_conn_obj,
Uint32 init_no_ndb_objects);
diff --git a/storage/ndb/include/ndbapi/NdbScanFilter.hpp b/storage/ndb/include/ndbapi/NdbScanFilter.hpp
index 1ef62558560..4527012a6c4 100644
--- a/storage/ndb/include/ndbapi/NdbScanFilter.hpp
+++ b/storage/ndb/include/ndbapi/NdbScanFilter.hpp
@@ -17,6 +17,7 @@
#define NDB_SCAN_FILTER_HPP
#include <ndb_types.h>
+#include <ndbapi_limits.h>
/**
* @class NdbScanFilter
@@ -31,8 +32,13 @@ public:
/**
* Constructor
* @param op The NdbOperation that the filter belongs to (is applied to).
+ * @param abort_on_too_large abort transaction on filter too large
+ * default: true
+ * @param max_size Maximum size of generated filter in words
*/
- NdbScanFilter(class NdbOperation * op);
+ NdbScanFilter(class NdbOperation * op,
+ bool abort_on_too_large = true,
+ Uint32 max_size = NDB_MAX_SCANFILTER_SIZE_IN_WORDS);
~NdbScanFilter();
/**
@@ -166,6 +172,27 @@ public:
/** @} *********************************************************************/
#endif
+ enum Error {
+ FilterTooLarge = 4294
+ };
+
+ /**
+ * Get filter level error.
+ *
+ * Most errors are set only on operation level, and they abort the
+ * transaction. The error FilterTooLarge is set on filter level and
+ * by default it propagates to operation level and also aborts the
+ * transaction.
+ *
+ * If option abort_on_too_large is set to false, then FilterTooLarge
+ * does not propagate. One can then either ignore this error (in
+ * which case no filtering is done) or try to define a new filter
+ * immediately.
+ */
+ const class NdbError & getNdbError() const;
+#ifndef DOXYGEN_SHOULD_SKIP_INTERNAL
+ NdbOperation * getNdbOperation();
+#endif
private:
#ifndef DOXYGEN_SHOULD_SKIP_INTERNAL
friend class NdbScanFilterImpl;
diff --git a/storage/ndb/include/ndbapi/NdbTransaction.hpp b/storage/ndb/include/ndbapi/NdbTransaction.hpp
index 20c9c709e51..6a057655398 100644
--- a/storage/ndb/include/ndbapi/NdbTransaction.hpp
+++ b/storage/ndb/include/ndbapi/NdbTransaction.hpp
@@ -170,6 +170,15 @@ public:
#endif
};
+#ifndef DOXYGEN_SHOULD_SKIP_INTERNAL
+ /**
+ * Convenience method to fetch this transaction's Ndb* object
+ */
+ Ndb * getNdb() {
+ return theNdb;
+ }
+#endif
+
#ifndef DOXYGEN_SHOULD_SKIP_DEPRECATED
/**
* Get an NdbOperation for a table.
diff --git a/storage/ndb/include/ndbapi/ndbapi_limits.h b/storage/ndb/include/ndbapi/ndbapi_limits.h
index 63399e4bd0a..e283913d059 100644
--- a/storage/ndb/include/ndbapi/ndbapi_limits.h
+++ b/storage/ndb/include/ndbapi/ndbapi_limits.h
@@ -26,4 +26,6 @@
#define NDB_MAX_TUPLE_SIZE (NDB_MAX_TUPLE_SIZE_IN_WORDS*4)
#define NDB_MAX_ACTIVE_EVENTS 100
+#define NDB_MAX_SCANFILTER_SIZE_IN_WORDS 50000
+
#endif
diff --git a/storage/ndb/include/util/ndb_rand.h b/storage/ndb/include/util/ndb_rand.h
new file mode 100644
index 00000000000..1521ca9c4ff
--- /dev/null
+++ b/storage/ndb/include/util/ndb_rand.h
@@ -0,0 +1,33 @@
+/* Copyright (C) 2003 MySQL AB
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; version 2 of the License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+#ifndef NDB_RAND_H
+#define NDB_RAND_H
+
+#define NDB_RAND_MAX 32767
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int ndb_rand(void);
+
+void ndb_srand(unsigned seed);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/storage/ndb/src/common/debugger/EventLogger.cpp b/storage/ndb/src/common/debugger/EventLogger.cpp
index 0964a54f906..068b0c6ac18 100644
--- a/storage/ndb/src/common/debugger/EventLogger.cpp
+++ b/storage/ndb/src/common/debugger/EventLogger.cpp
@@ -498,10 +498,10 @@ void getTextTransReportCounters(QQQQ) {
// -------------------------------------------------------------------
BaseString::snprintf(m_text, m_text_len,
"Trans. Count = %u, Commit Count = %u, "
- "Read Count = %u, Simple Read Count = %u,\n"
+ "Read Count = %u, Simple Read Count = %u, "
"Write Count = %u, AttrInfo Count = %u, "
- "Concurrent Operations = %u, Abort Count = %u\n"
- " Scans: %u Range scans: %u",
+ "Concurrent Operations = %u, Abort Count = %u"
+ " Scans = %u Range scans = %u",
theData[1],
theData[2],
theData[3],
@@ -797,9 +797,9 @@ void getTextBackupFailedToStart(QQQQ) {
}
void getTextBackupCompleted(QQQQ) {
BaseString::snprintf(m_text, m_text_len,
- "Backup %u started from node %u completed\n"
- " StartGCP: %u StopGCP: %u\n"
- " #Records: %u #LogRecords: %u\n"
+ "Backup %u started from node %u completed."
+ " StartGCP: %u StopGCP: %u"
+ " #Records: %u #LogRecords: %u"
" Data: %u bytes Log: %u bytes",
theData[2], refToNode(theData[1]),
theData[3], theData[4], theData[6], theData[8],
diff --git a/storage/ndb/src/common/debugger/signaldata/SignalNames.cpp b/storage/ndb/src/common/debugger/signaldata/SignalNames.cpp
index 0d31cd5de7f..b4221cbec8e 100644
--- a/storage/ndb/src/common/debugger/signaldata/SignalNames.cpp
+++ b/storage/ndb/src/common/debugger/signaldata/SignalNames.cpp
@@ -640,5 +640,9 @@ const GsnName SignalNames [] = {
,{ GSN_ROUTE_ORD, "ROUTE_ORD" }
,{ GSN_NODE_VERSION_REP, "NODE_VERSION_REP" }
+
+ ,{ GSN_PREPARE_COPY_FRAG_REQ, "PREPARE_COPY_FRAG_REQ" }
+ ,{ GSN_PREPARE_COPY_FRAG_REF, "PREPARE_COPY_FRAG_REF" }
+ ,{ GSN_PREPARE_COPY_FRAG_CONF, "PREPARE_COPY_FRAG_CONF" }
};
const unsigned short NO_OF_SIGNAL_NAMES = sizeof(SignalNames)/sizeof(GsnName);
diff --git a/storage/ndb/src/common/debugger/signaldata/TcKeyConf.cpp b/storage/ndb/src/common/debugger/signaldata/TcKeyConf.cpp
index 65589f8cd6e..377863f9446 100644
--- a/storage/ndb/src/common/debugger/signaldata/TcKeyConf.cpp
+++ b/storage/ndb/src/common/debugger/signaldata/TcKeyConf.cpp
@@ -51,11 +51,11 @@ printTCKEYCONF(FILE * output, const Uint32 * theData, Uint32 len, Uint16 receive
(TcKeyConf::getMarkerFlag(confInfo) == 0)?"false":"true");
fprintf(output, "Operations:\n");
for(i = 0; i < noOfOp; i++) {
- if(sig->operations[i].attrInfoLen > TcKeyConf::SimpleReadBit)
+ if(sig->operations[i].attrInfoLen > TcKeyConf::DirtyReadBit)
fprintf(output,
" apiOperationPtr: H'%.8x, simplereadnode: %u\n",
sig->operations[i].apiOperationPtr,
- sig->operations[i].attrInfoLen & (~TcKeyConf::SimpleReadBit));
+ sig->operations[i].attrInfoLen & (~TcKeyConf::DirtyReadBit));
else
fprintf(output,
" apiOperationPtr: H'%.8x, attrInfoLen: %u\n",
diff --git a/storage/ndb/src/common/transporter/Transporter.cpp b/storage/ndb/src/common/transporter/Transporter.cpp
index cec018575e0..269a5fba4e9 100644
--- a/storage/ndb/src/common/transporter/Transporter.cpp
+++ b/storage/ndb/src/common/transporter/Transporter.cpp
@@ -70,7 +70,7 @@ Transporter::Transporter(TransporterRegistry &t_reg,
signalIdUsed = _signalId;
m_connected = false;
- m_timeOutMillis = 1000;
+ m_timeOutMillis = 30000;
m_connect_address.s_addr= 0;
if(s_port<0)
@@ -101,7 +101,7 @@ Transporter::connect_server(NDB_SOCKET_TYPE sockfd) {
if(m_connected)
{
- DBUG_RETURN(true); // TODO assert(0);
+ DBUG_RETURN(false); // TODO assert(0);
}
{
diff --git a/storage/ndb/src/common/transporter/TransporterRegistry.cpp b/storage/ndb/src/common/transporter/TransporterRegistry.cpp
index 5f5f3c17b2d..848738b2983 100644
--- a/storage/ndb/src/common/transporter/TransporterRegistry.cpp
+++ b/storage/ndb/src/common/transporter/TransporterRegistry.cpp
@@ -758,7 +758,8 @@ TransporterRegistry::poll_TCP(Uint32 timeOutMillis)
TCP_Transporter * t = theTCPTransporters[i];
// If the transporter is connected
- if (t->isConnected()) {
+ NodeId nodeId = t->getRemoteNodeId();
+ if (is_connected(nodeId) && t->isConnected()) {
const NDB_SOCKET_TYPE socket = t->getSocket();
// Find the highest socket value. It will be used by select
diff --git a/storage/ndb/src/common/util/Makefile.am b/storage/ndb/src/common/util/Makefile.am
index d331cce7e5c..5379a425c49 100644
--- a/storage/ndb/src/common/util/Makefile.am
+++ b/storage/ndb/src/common/util/Makefile.am
@@ -24,7 +24,8 @@ libgeneral_la_SOURCES = \
uucode.c random.c version.c \
strdup.c \
ConfigValues.cpp ndb_init.c basestring_vsnprintf.c \
- Bitmask.cpp
+ Bitmask.cpp \
+ ndb_rand.c
EXTRA_PROGRAMS = testBitmask
testBitmask_SOURCES = testBitmask.cpp
diff --git a/storage/ndb/src/common/util/ndb_rand.c b/storage/ndb/src/common/util/ndb_rand.c
new file mode 100644
index 00000000000..4fcc483cd49
--- /dev/null
+++ b/storage/ndb/src/common/util/ndb_rand.c
@@ -0,0 +1,40 @@
+/* Copyright (C) 2003 MySQL AB
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; version 2 of the License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+#include <ndb_rand.h>
+
+static unsigned long next= 1;
+
+/**
+ * ndb_rand
+ *
+ * constant time, cheap, pseudo-random number generator.
+ *
+ * NDB_RAND_MAX assumed to be 32767
+ *
+ * This is the POSIX example for "generating the same sequence on
+ * different machines". Although that is not one of our requirements.
+ */
+int ndb_rand(void)
+{
+ next= next * 1103515245 + 12345;
+ return((unsigned)(next/65536) % 32768);
+}
+
+void ndb_srand(unsigned seed)
+{
+ next= seed;
+}
+
diff --git a/storage/ndb/src/cw/cpcd/APIService.cpp b/storage/ndb/src/cw/cpcd/APIService.cpp
index 1c1cfb94cd4..f60abc08817 100644
--- a/storage/ndb/src/cw/cpcd/APIService.cpp
+++ b/storage/ndb/src/cw/cpcd/APIService.cpp
@@ -145,7 +145,7 @@ CPCDAPISession::CPCDAPISession(NDB_SOCKET_TYPE sock,
: SocketServer::Session(sock)
, m_cpcd(cpcd)
{
- m_input = new SocketInputStream(sock);
+ m_input = new SocketInputStream(sock, 7*24*60*60000);
m_output = new SocketOutputStream(sock);
m_parser = new Parser<CPCDAPISession>(commands, *m_input, true, true, true);
}
diff --git a/storage/ndb/src/kernel/blocks/ERROR_codes.txt b/storage/ndb/src/kernel/blocks/ERROR_codes.txt
index acfbf649522..72791cb0ebc 100644
--- a/storage/ndb/src/kernel/blocks/ERROR_codes.txt
+++ b/storage/ndb/src/kernel/blocks/ERROR_codes.txt
@@ -3,15 +3,15 @@ Next NDBCNTR 1002
Next NDBFS 2000
Next DBACC 3002
Next DBTUP 4029
-Next DBLQH 5045
+Next DBLQH 5047
Next DBDICT 6008
-Next DBDIH 7186
-Next DBTC 8053
+Next DBDIH 7195
+Next DBTC 8054
Next CMVMI 9000
Next BACKUP 10038
Next DBUTIL 11002
Next DBTUX 12008
-Next SUMA 13001
+Next SUMA 13034
TESTING NODE FAILURE, ARBITRATION
---------------------------------
@@ -81,6 +81,11 @@ Delay GCP_SAVEREQ by 10 secs
7185: Dont reply to COPY_GCI_REQ where reason == GCP
+7193: Dont send LCP_FRAG_ORD to self, and crash when sending first
+ LCP_FRAG_ORD(last)
+
+7194: Force removeNodeFromStored to complete in the middle of MASTER_LCPCONF
+
ERROR CODES FOR TESTING NODE FAILURE, LOCAL CHECKPOINT HANDLING:
-----------------------------------------------------------------
@@ -157,6 +162,9 @@ And crash when all have "not" been sent
7027: Crash in master when changing state to LCP_TAB_SAVED
7018: Crash in master when changing state to LCP_TAB_SAVED
+7191: Crash when receiving LCP_COMPLETE_REP
+7192: Crash in setLcpActiveStatusStart - when dead node missed to LCP's
+
ERROR CODES FOR TESTING NODE FAILURE, FAILURE IN COPY FRAGMENT PROCESS:
-----------------------------------------------------------------------
@@ -183,6 +191,8 @@ handling in DBTC to ensure that node failures are also well handled in
time-out handling. They can also be used to test multiple node failure
handling.
+5045: Crash in PREPARE_COPY_FRAG_REQ
+5046: Crash if LQHKEYREQ (NrCopy) comes when frag-state is incorrect
ERROR CODES FOR TESTING TIME-OUT HANDLING IN DBLQH
-------------------------------------------------
@@ -248,6 +258,8 @@ Delay execution of ABORTCONF signal 2 seconds to generate time-out.
8050: Send ZABORT_TIMEOUT_BREAK delayed
+8053: Crash in timeOutFoundLab, state CS_WAIT_COMMIT_CONF
+
ERROR CODES FOR TESTING TIME-OUT HANDLING IN DBTC
-------------------------------------------------
diff --git a/storage/ndb/src/kernel/blocks/backup/Backup.cpp b/storage/ndb/src/kernel/blocks/backup/Backup.cpp
index 64e2c41aa69..45501bf50d5 100644
--- a/storage/ndb/src/kernel/blocks/backup/Backup.cpp
+++ b/storage/ndb/src/kernel/blocks/backup/Backup.cpp
@@ -1026,8 +1026,9 @@ Backup::execINCL_NODEREQ(Signal* signal)
break;
}//if
}//for
- signal->theData[0] = reference();
- sendSignal(senderRef, GSN_INCL_NODECONF, signal, 1, JBB);
+ signal->theData[0] = inclNode;
+ signal->theData[1] = reference();
+ sendSignal(senderRef, GSN_INCL_NODECONF, signal, 2, JBB);
}
/*****************************************************************************
diff --git a/storage/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp b/storage/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp
index 7a992587010..6c869435bfa 100644
--- a/storage/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp
+++ b/storage/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp
@@ -421,9 +421,10 @@ void Cmvmi::execCLOSE_COMREQ(Signal* signal)
// Uint32 noOfNodes = closeCom->noOfNodes;
jamEntry();
- for (unsigned i = 0; i < MAX_NODES; i++){
- if(NodeBitmask::get(closeCom->theNodes, i)){
-
+ for (unsigned i = 0; i < MAX_NODES; i++)
+ {
+ if(NodeBitmask::get(closeCom->theNodes, i))
+ {
jam();
//-----------------------------------------------------
@@ -437,7 +438,9 @@ void Cmvmi::execCLOSE_COMREQ(Signal* signal)
globalTransporterRegistry.do_disconnect(i);
}
}
- if (failNo != 0) {
+
+ if (failNo != 0)
+ {
jam();
signal->theData[0] = userRef;
signal->theData[1] = failNo;
@@ -456,13 +459,21 @@ void Cmvmi::execOPEN_COMREQ(Signal* signal)
jamEntry();
const Uint32 len = signal->getLength();
- if(len == 2){
-
+ if(len == 2)
+ {
#ifdef ERROR_INSERT
if (! ((ERROR_INSERTED(9000) || ERROR_INSERTED(9002))
&& c_error_9000_nodes_mask.get(tStartingNode)))
#endif
{
+ if (globalData.theStartLevel != NodeState::SL_STARTED &&
+ (getNodeInfo(tStartingNode).m_type != NodeInfo::DB &&
+ getNodeInfo(tStartingNode).m_type != NodeInfo::MGM))
+ {
+ jam();
+ goto done;
+ }
+
globalTransporterRegistry.do_connect(tStartingNode);
globalTransporterRegistry.setIOState(tStartingNode, HaltIO);
@@ -475,9 +486,11 @@ void Cmvmi::execOPEN_COMREQ(Signal* signal)
//-----------------------------------------------------
}
} else {
- for(unsigned int i = 1; i < MAX_NODES; i++ ) {
+ for(unsigned int i = 1; i < MAX_NODES; i++ )
+ {
jam();
- if (i != getOwnNodeId() && getNodeInfo(i).m_type == tData2){
+ if (i != getOwnNodeId() && getNodeInfo(i).m_type == tData2)
+ {
jam();
#ifdef ERROR_INSERT
@@ -496,6 +509,7 @@ void Cmvmi::execOPEN_COMREQ(Signal* signal)
}
}
+done:
if (userRef != 0) {
jam();
signal->theData[0] = tStartingNode;
@@ -536,24 +550,10 @@ void Cmvmi::execDISCONNECT_REP(Signal *signal)
setNodeInfo(hostId).m_connectCount++;
const NodeInfo::NodeType type = getNodeInfo(hostId).getType();
ndbrequire(type != NodeInfo::INVALID);
-
- if(type == NodeInfo::DB || globalData.theStartLevel == NodeState::SL_STARTED){
- jam();
- DisconnectRep * const rep = (DisconnectRep *)&signal->theData[0];
- rep->nodeId = hostId;
- rep->err = errNo;
- sendSignal(QMGR_REF, GSN_DISCONNECT_REP, signal,
- DisconnectRep::SignalLength, JBA);
- } else if((globalData.theStartLevel == NodeState::SL_CMVMI ||
- globalData.theStartLevel == NodeState::SL_STARTING)
- && type == NodeInfo::MGM) {
- /**
- * Someone disconnected during cmvmi period
- */
- jam();
- globalTransporterRegistry.do_connect(hostId);
- }
+ sendSignal(QMGR_REF, GSN_DISCONNECT_REP, signal,
+ DisconnectRep::SignalLength, JBA);
+
cancelSubscription(hostId);
signal->theData[0] = NDB_LE_Disconnected;
@@ -587,6 +587,8 @@ void Cmvmi::execCONNECT_REP(Signal *signal){
*/
if(type == NodeInfo::MGM){
jam();
+ signal->theData[0] = hostId;
+ sendSignal(QMGR_REF, GSN_CONNECT_REP, signal, 1, JBA);
} else {
/**
* Dont allow api nodes to connect
@@ -802,6 +804,8 @@ Cmvmi::execSTART_ORD(Signal* signal) {
}
}
}
+
+ EXECUTE_DIRECT(QMGR, GSN_START_ORD, signal, 1);
return ;
}
@@ -829,9 +833,6 @@ Cmvmi::execSTART_ORD(Signal* signal) {
*
* Do Restart
*/
-
- globalScheduler.clear();
- globalTimeQueue.clear();
// Disconnect all nodes as part of the system restart.
// We need to ensure that we are starting up
@@ -1124,6 +1125,38 @@ Cmvmi::execDUMP_STATE_ORD(Signal* signal)
}
#endif
#endif
+
+ if (arg == 9999)
+ {
+ Uint32 delay = 1000;
+ switch(signal->getLength()){
+ case 1:
+ break;
+ case 2:
+ delay = signal->theData[1];
+ break;
+ default:{
+ Uint32 dmin = signal->theData[1];
+ Uint32 dmax = signal->theData[2];
+ delay = dmin + (rand() % (dmax - dmin));
+ break;
+ }
+ }
+
+ signal->theData[0] = 9999;
+ if (delay == 0)
+ {
+ execNDB_TAMPER(signal);
+ }
+ else if (delay < 10)
+ {
+ sendSignal(reference(), GSN_NDB_TAMPER, signal, 1, JBB);
+ }
+ else
+ {
+ sendSignalWithDelay(reference(), GSN_NDB_TAMPER, signal, delay, 1);
+ }
+ }
}//Cmvmi::execDUMP_STATE_ORD()
void
diff --git a/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp b/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp
index 569958a6aa9..7ced078144a 100644
--- a/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp
+++ b/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp
@@ -3825,8 +3825,9 @@ void Dbdict::execINCL_NODEREQ(Signal* signal)
c_nodes.getPtr(nodePtr);
ndbrequire(nodePtr.p->nodeState == NodeRecord::NDB_NODE_DEAD);
nodePtr.p->nodeState = NodeRecord::NDB_NODE_ALIVE;
- signal->theData[0] = reference();
- sendSignal(retRef, GSN_INCL_NODECONF, signal, 1, JBB);
+ signal->theData[0] = nodePtr.i;
+ signal->theData[1] = reference();
+ sendSignal(retRef, GSN_INCL_NODECONF, signal, 2, JBB);
c_aliveNodes.set(nodePtr.i);
}//execINCL_NODEREQ()
diff --git a/storage/ndb/src/kernel/blocks/dbdih/Dbdih.hpp b/storage/ndb/src/kernel/blocks/dbdih/Dbdih.hpp
index 5bef13cd0b9..b0bbdefff55 100644
--- a/storage/ndb/src/kernel/blocks/dbdih/Dbdih.hpp
+++ b/storage/ndb/src/kernel/blocks/dbdih/Dbdih.hpp
@@ -318,6 +318,7 @@ public:
Uint8 noOfStartedChkpt;
MasterLCPConf::State lcpStateAtTakeOver;
+ Uint32 m_remove_node_from_table_lcp_id;
};
typedef Ptr<NodeRecord> NodeRecordPtr;
/**********************************************************************/
@@ -544,7 +545,8 @@ public:
TO_WAIT_ENDING = 21,
ENDING = 22,
- STARTING_LOCAL_FRAGMENTS = 24
+ STARTING_LOCAL_FRAGMENTS = 24,
+ PREPARE_COPY = 25
};
enum ToSlaveStatus {
TO_SLAVE_IDLE = 0,
@@ -555,6 +557,7 @@ public:
TO_SLAVE_COPY_COMPLETED = 5
};
Uint32 startGci;
+ Uint32 maxPage;
Uint32 toCopyNode;
Uint32 toCurrentFragid;
Uint32 toCurrentReplica;
@@ -671,6 +674,8 @@ private:
void execNODE_FAILREP(Signal *);
void execCOPY_FRAGCONF(Signal *);
void execCOPY_FRAGREF(Signal *);
+ void execPREPARE_COPY_FRAG_REF(Signal*);
+ void execPREPARE_COPY_FRAG_CONF(Signal*);
void execDIADDTABREQ(Signal *);
void execDIGETNODESREQ(Signal *);
void execDIRELEASEREQ(Signal *);
@@ -1113,6 +1118,7 @@ private:
void sendStartTo(Signal *, Uint32 takeOverPtr);
void startNextCopyFragment(Signal *, Uint32 takeOverPtr);
void toCopyFragLab(Signal *, Uint32 takeOverPtr);
+ void toStartCopyFrag(Signal *, TakeOverRecordPtr);
void startHsAddFragConfLab(Signal *);
void prepareSendCreateFragReq(Signal *, Uint32 takeOverPtr);
void sendUpdateTo(Signal *, Uint32 takeOverPtr, Uint32 updateState);
@@ -1304,7 +1310,17 @@ private:
LcpStatus lcpStatus;
Uint32 lcpStatusUpdatedPlace;
+ struct Save {
+ LcpStatus m_status;
+ Uint32 m_place;
+ } m_saveState[10];
+
void setLcpStatus(LcpStatus status, Uint32 line){
+ for (Uint32 i = 9; i > 0; i--)
+ m_saveState[i] = m_saveState[i-1];
+ m_saveState[0].m_status = lcpStatus;
+ m_saveState[0].m_place = lcpStatusUpdatedPlace;
+
lcpStatus = status;
lcpStatusUpdatedPlace = line;
}
diff --git a/storage/ndb/src/kernel/blocks/dbdih/DbdihInit.cpp b/storage/ndb/src/kernel/blocks/dbdih/DbdihInit.cpp
index aff31d625f4..6ce281434c2 100644
--- a/storage/ndb/src/kernel/blocks/dbdih/DbdihInit.cpp
+++ b/storage/ndb/src/kernel/blocks/dbdih/DbdihInit.cpp
@@ -259,6 +259,11 @@ Dbdih::Dbdih(Block_context& ctx):
addRecSignal(GSN_START_FRAGREF,
&Dbdih::execSTART_FRAGREF);
+
+ addRecSignal(GSN_PREPARE_COPY_FRAG_REF,
+ &Dbdih::execPREPARE_COPY_FRAG_REF);
+ addRecSignal(GSN_PREPARE_COPY_FRAG_CONF,
+ &Dbdih::execPREPARE_COPY_FRAG_CONF);
apiConnectRecord = 0;
connectRecord = 0;
diff --git a/storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp b/storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp
index 762d4ea5141..bbacb300089 100644
--- a/storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp
+++ b/storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp
@@ -2135,12 +2135,9 @@ void Dbdih::gcpBlockedLab(Signal* signal)
/*---------------------------------------------------------------------------*/
void Dbdih::execINCL_NODECONF(Signal* signal)
{
- Uint32 TsendNodeId;
- Uint32 TstartNode_or_blockref;
-
jamEntry();
- TstartNode_or_blockref = signal->theData[0];
- TsendNodeId = signal->theData[1];
+ Uint32 TstartNode = signal->theData[0];
+ Uint32 TsendNodeId_or_blockref = signal->theData[1];
Uint32 blocklist[6];
blocklist[0] = clocallqhblockref;
@@ -2152,9 +2149,21 @@ void Dbdih::execINCL_NODECONF(Signal* signal)
for (Uint32 i = 0; blocklist[i] != 0; i++)
{
- if (TstartNode_or_blockref == blocklist[i])
+ if (TsendNodeId_or_blockref == blocklist[i])
{
jam();
+
+ if (TstartNode != c_nodeStartSlave.nodeId)
+ {
+ jam();
+ warningEvent("Recevied INCL_NODECONF for %u from %s"
+ " while %u is starting",
+ TstartNode,
+ getBlockName(refToBlock(TsendNodeId_or_blockref)),
+ c_nodeStartSlave.nodeId);
+ return;
+ }
+
if (getNodeStatus(c_nodeStartSlave.nodeId) == NodeRecord::ALIVE &&
blocklist[i+1] != 0)
{
@@ -2182,10 +2191,21 @@ void Dbdih::execINCL_NODECONF(Signal* signal)
}
}
}
+
+ if (c_nodeStartMaster.startNode != TstartNode)
+ {
+ jam();
+ warningEvent("Recevied INCL_NODECONF for %u from %u"
+ " while %u is starting",
+ TstartNode,
+ TsendNodeId_or_blockref,
+ c_nodeStartMaster.startNode);
+ return;
+ }
ndbrequire(cmasterdihref = reference());
- receiveLoopMacro(INCL_NODEREQ, TsendNodeId);
-
+ receiveLoopMacro(INCL_NODEREQ, TsendNodeId_or_blockref);
+
CRASH_INSERTION(7128);
/*-------------------------------------------------------------------------*/
// Now that we have included the starting node in the node lists in the
@@ -3155,6 +3175,94 @@ void Dbdih::toCopyFragLab(Signal* signal,
TakeOverRecordPtr takeOverPtr;
RETURN_IF_TAKE_OVER_INTERRUPTED(takeOverPtrI, takeOverPtr);
+ /**
+ * Inform starting node that TakeOver is about to start
+ */
+ Uint32 nodeId = takeOverPtr.p->toStartingNode;
+
+ Uint32 version = getNodeInfo(nodeId).m_version;
+ if (ndb_check_prep_copy_frag_version(version))
+ {
+ jam();
+ TabRecordPtr tabPtr;
+ tabPtr.i = takeOverPtr.p->toCurrentTabref;
+ ptrCheckGuard(tabPtr, ctabFileSize, tabRecord);
+
+ FragmentstorePtr fragPtr;
+ getFragstore(tabPtr.p, takeOverPtr.p->toCurrentFragid, fragPtr);
+ Uint32 nodes[MAX_REPLICAS];
+ extractNodeInfo(fragPtr.p, nodes);
+
+ PrepareCopyFragReq* req= (PrepareCopyFragReq*)signal->getDataPtrSend();
+ req->senderRef = reference();
+ req->senderData = takeOverPtrI;
+ req->tableId = takeOverPtr.p->toCurrentTabref;
+ req->fragId = takeOverPtr.p->toCurrentFragid;
+ req->copyNodeId = nodes[0]; // Src
+ req->startingNodeId = takeOverPtr.p->toStartingNode; // Dst
+ Uint32 ref = calcLqhBlockRef(takeOverPtr.p->toStartingNode);
+
+ sendSignal(ref, GSN_PREPARE_COPY_FRAG_REQ, signal,
+ PrepareCopyFragReq::SignalLength, JBB);
+
+ takeOverPtr.p->toMasterStatus = TakeOverRecord::PREPARE_COPY;
+ return;
+ }
+
+ takeOverPtr.p->maxPage = RNIL;
+ toStartCopyFrag(signal, takeOverPtr);
+}
+
+void
+Dbdih::execPREPARE_COPY_FRAG_REF(Signal* signal)
+{
+ jamEntry();
+ PrepareCopyFragRef ref = *(PrepareCopyFragRef*)signal->getDataPtr();
+
+ TakeOverRecordPtr takeOverPtr;
+ RETURN_IF_TAKE_OVER_INTERRUPTED(ref.senderData, takeOverPtr);
+
+ ndbrequire(takeOverPtr.p->toMasterStatus == TakeOverRecord::PREPARE_COPY);
+
+ /**
+ * Treat this as copy frag ref
+ */
+ CopyFragRef * cfref = (CopyFragRef*)signal->getDataPtrSend();
+ cfref->userPtr = ref.senderData;
+ cfref->startingNodeId = ref.startingNodeId;
+ cfref->errorCode = ref.errorCode;
+ cfref->tableId = ref.tableId;
+ cfref->fragId = ref.fragId;
+ cfref->sendingNodeId = ref.copyNodeId;
+ takeOverPtr.p->toMasterStatus = TakeOverRecord::COPY_FRAG;
+ execCOPY_FRAGREF(signal);
+}
+
+void
+Dbdih::execPREPARE_COPY_FRAG_CONF(Signal* signal)
+{
+ PrepareCopyFragConf conf = *(PrepareCopyFragConf*)signal->getDataPtr();
+
+ TakeOverRecordPtr takeOverPtr;
+ RETURN_IF_TAKE_OVER_INTERRUPTED(conf.senderData, takeOverPtr);
+
+ Uint32 version = getNodeInfo(refToNode(conf.senderRef)).m_version;
+ if (ndb_check_prep_copy_frag_version(version) >= 2)
+ {
+ jam();
+ takeOverPtr.p->maxPage = conf.maxPageNo;
+ }
+ else
+ {
+ jam();
+ takeOverPtr.p->maxPage = RNIL;
+ }
+ toStartCopyFrag(signal, takeOverPtr);
+}
+
+void
+Dbdih::toStartCopyFrag(Signal* signal, TakeOverRecordPtr takeOverPtr)
+{
CreateReplicaRecordPtr createReplicaPtr;
createReplicaPtr.i = 0;
ptrAss(createReplicaPtr, createReplicaRecord);
@@ -3178,8 +3286,8 @@ void Dbdih::toCopyFragLab(Signal* signal,
createReplicaPtr.p->hotSpareUse = true;
createReplicaPtr.p->dataNodeId = takeOverPtr.p->toStartingNode;
- prepareSendCreateFragReq(signal, takeOverPtrI);
-}//Dbdih::toCopyFragLab()
+ prepareSendCreateFragReq(signal, takeOverPtr.i);
+}//Dbdih::toStartCopy()
void Dbdih::prepareSendCreateFragReq(Signal* signal, Uint32 takeOverPtrI)
{
@@ -3412,10 +3520,12 @@ void Dbdih::execCREATE_FRAGCONF(Signal* signal)
copyFragReq->schemaVersion = tabPtr.p->schemaVersion;
copyFragReq->distributionKey = fragPtr.p->distributionKey;
copyFragReq->gci = gci;
- copyFragReq->nodeCount = extractNodeInfo(fragPtr.p,
- copyFragReq->nodeList);
+ Uint32 len = copyFragReq->nodeCount =
+ extractNodeInfo(fragPtr.p,
+ copyFragReq->nodeList);
+ copyFragReq->nodeList[len] = takeOverPtr.p->maxPage;
sendSignal(ref, GSN_COPY_FRAGREQ, signal,
- CopyFragReq::SignalLength + copyFragReq->nodeCount, JBB);
+ CopyFragReq::SignalLength + len, JBB);
} else {
ndbrequire(takeOverPtr.p->toMasterStatus == TakeOverRecord::COMMIT_CREATE);
jam();
@@ -4576,13 +4686,22 @@ void Dbdih::checkTakeOverInMasterStartNodeFailure(Signal* signal,
ok = true;
jam();
//-----------------------------------------------------------------------
- // The starting node will discover the problem. We will receive either
+ // The copying node will discover the problem. We will receive either
// COPY_FRAGREQ or COPY_FRAGCONF and then we can release the take over
// record and end the process. If the copying node should also die then
// we will try to send prepare create fragment and will then discover
// that the starting node has failed.
//-----------------------------------------------------------------------
break;
+ case TakeOverRecord::PREPARE_COPY:
+ ok = true;
+ jam();
+ /**
+ * We're waiting for the starting node...which just died...
+ * endTakeOver
+ */
+ endTakeOver(takeOverPtr.i);
+ break;
case TakeOverRecord::COPY_ACTIVE:
ok = true;
jam();
@@ -5069,12 +5188,32 @@ void Dbdih::startRemoveFailedNode(Signal* signal, NodeRecordPtr failedNodePtr)
return;
}
- jam();
- signal->theData[0] = DihContinueB::ZREMOVE_NODE_FROM_TABLE;
- signal->theData[1] = failedNodePtr.i;
- signal->theData[2] = 0; // Tab id
- sendSignal(reference(), GSN_CONTINUEB, signal, 3, JBB);
+ /**
+ * If node has node complete LCP
+ * we need to remove it as undo might not be complete
+ * bug#31257
+ */
+ failedNodePtr.p->m_remove_node_from_table_lcp_id = RNIL;
+ if (c_lcpState.m_LCP_COMPLETE_REP_Counter_LQH.isWaitingFor(failedNodePtr.i))
+ {
+ jam();
+ failedNodePtr.p->m_remove_node_from_table_lcp_id = SYSFILE->latestLCP_ID;
+ }
+ jam();
+
+ if (!ERROR_INSERTED(7194))
+ {
+ signal->theData[0] = DihContinueB::ZREMOVE_NODE_FROM_TABLE;
+ signal->theData[1] = failedNodePtr.i;
+ signal->theData[2] = 0; // Tab id
+ sendSignal(reference(), GSN_CONTINUEB, signal, 3, JBB);
+ }
+ else
+ {
+ ndbout_c("7194 Not starting ZREMOVE_NODE_FROM_TABLE");
+ }
+
setLocalNodefailHandling(signal, failedNodePtr.i, NF_REMOVE_NODE_FROM_TABLE);
}//Dbdih::startRemoveFailedNode()
@@ -5710,6 +5849,11 @@ void Dbdih::removeNodeFromTable(Signal* signal,
return;
}//if
+ NodeRecordPtr nodePtr;
+ nodePtr.i = nodeId;
+ ptrCheckGuard(nodePtr, MAX_NDB_NODES, nodeRecord);
+ const Uint32 lcpId = nodePtr.p->m_remove_node_from_table_lcp_id;
+
/**
* For each fragment
*/
@@ -5717,7 +5861,6 @@ void Dbdih::removeNodeFromTable(Signal* signal,
Uint32 noOfRemovedLcpReplicas = 0; // No of replicas in LCP removed
Uint32 noOfRemainingLcpReplicas = 0;// No of replicas in LCP remaining
- //const Uint32 lcpId = SYSFILE->latestLCP_ID;
const bool lcpOngoingFlag = (tabPtr.p->tabLcpStatus== TabRecord::TLS_ACTIVE);
const bool unlogged = (tabPtr.p->tabStorage != TabRecord::ST_NORMAL);
@@ -5752,6 +5895,23 @@ void Dbdih::removeNodeFromTable(Signal* signal,
noOfRemovedLcpReplicas ++;
replicaPtr.p->lcpOngoingFlag = false;
}
+
+ if (lcpId != RNIL)
+ {
+ jam();
+ Uint32 lcpNo = prevLcpNo(replicaPtr.p->nextLcp);
+ if (replicaPtr.p->lcpStatus[lcpNo] == ZVALID &&
+ replicaPtr.p->lcpId[lcpNo] == SYSFILE->latestLCP_ID)
+ {
+ jam();
+ replicaPtr.p->lcpStatus[lcpNo] = ZINVALID;
+ replicaPtr.p->lcpId[lcpNo] = 0;
+ replicaPtr.p->nextLcp = lcpNo;
+ ndbout_c("REMOVING lcp: %u from table: %u frag: %u node: %u",
+ SYSFILE->latestLCP_ID,
+ tabPtr.i, fragNo, nodeId);
+ }
+ }
}
}
if (!found)
@@ -5982,12 +6142,22 @@ Dbdih::checkEmptyLcpComplete(Signal *signal){
signal->theData[0] = 7012;
execDUMP_STATE_ORD(signal);
+
+ if (ERROR_INSERTED(7194))
+ {
+ ndbout_c("7194 starting ZREMOVE_NODE_FROM_TABLE");
+ signal->theData[0] = DihContinueB::ZREMOVE_NODE_FROM_TABLE;
+ signal->theData[1] = c_lcpMasterTakeOverState.failedNodeId;
+ signal->theData[2] = 0; // Tab id
+ sendSignal(reference(), GSN_CONTINUEB, signal, 3, JBB);
+ }
c_lcpMasterTakeOverState.set(LMTOS_INITIAL, __LINE__);
MasterLCPReq * const req = (MasterLCPReq *)&signal->theData[0];
req->masterRef = reference();
req->failedNodeId = c_lcpMasterTakeOverState.failedNodeId;
sendLoopMacro(MASTER_LCPREQ, sendMASTER_LCPREQ);
+
} else {
sendMASTER_LCPCONF(signal);
}
@@ -6009,7 +6179,7 @@ void Dbdih::execMASTER_LCPREQ(Signal* signal)
jam();
ndbout_c("resending GSN_MASTER_LCPREQ");
sendSignalWithDelay(reference(), GSN_MASTER_LCPREQ, signal,
- signal->getLength(), 50);
+ 50, signal->getLength());
return;
}
Uint32 failedNodeId = req->failedNodeId;
@@ -6300,6 +6470,15 @@ void Dbdih::execMASTER_LCPCONF(Signal* signal)
{
const MasterLCPConf * const conf = (MasterLCPConf *)&signal->theData[0];
jamEntry();
+
+ if (ERROR_INSERTED(7194))
+ {
+ ndbout_c("delaying MASTER_LCPCONF due to error 7194");
+ sendSignalWithDelay(reference(), GSN_MASTER_LCPCONF, signal,
+ 300, signal->getLength());
+ return;
+ }
+
Uint32 senderNodeId = conf->senderNodeId;
MasterLCPConf::State lcpState = (MasterLCPConf::State)conf->lcpState;
const Uint32 failedNodeId = conf->failedNodeId;
@@ -6434,7 +6613,6 @@ void Dbdih::MASTER_LCPhandling(Signal* signal, Uint32 failedNodeId)
#endif
c_lcpState.keepGci = SYSFILE->keepGCI;
- c_lcpState.setLcpStatus(LCP_START_LCP_ROUND, __LINE__);
startLcpRoundLoopLab(signal, 0, 0);
break;
}
@@ -10406,6 +10584,8 @@ void Dbdih::sendLastLCP_FRAG_ORD(Signal* signal)
if(ERROR_INSERTED(7075)){
continue;
}
+
+ CRASH_INSERTION(7193);
BlockReference ref = calcLqhBlockRef(nodePtr.i);
sendSignal(ref, GSN_LCP_FRAG_ORD, signal,LcpFragOrd::SignalLength, JBB);
}
@@ -10518,6 +10698,12 @@ void Dbdih::execLCP_FRAG_REP(Signal* signal)
Uint32 started = lcpReport->maxGciStarted;
Uint32 completed = lcpReport->maxGciCompleted;
+ if (started > c_lcpState.lcpStopGcp)
+ {
+ jam();
+ c_lcpState.lcpStopGcp = started;
+ }
+
if(tableDone){
jam();
@@ -10633,6 +10819,13 @@ Dbdih::checkLcpAllTablesDoneInLqh(){
CRASH_INSERTION2(7017, !isMaster());
c_lcpState.setLcpStatus(LCP_TAB_COMPLETED, __LINE__);
+
+ if (ERROR_INSERTED(7194))
+ {
+ ndbout_c("CLEARING 7194");
+ CLEAR_ERROR_INSERT_VALUE;
+ }
+
return true;
}
@@ -10822,6 +11015,11 @@ Dbdih::sendLCP_FRAG_ORD(Signal* signal,
BlockReference ref = calcLqhBlockRef(replicaPtr.p->procNode);
+ if (ERROR_INSERTED(7193) && replicaPtr.p->procNode == getOwnNodeId())
+ {
+ return;
+ }
+
LcpFragOrd * const lcpFragOrd = (LcpFragOrd *)&signal->theData[0];
lcpFragOrd->tableId = info.tableId;
lcpFragOrd->fragmentId = info.fragId;
@@ -10898,6 +11096,8 @@ void Dbdih::execLCP_COMPLETE_REP(Signal* signal)
{
jamEntry();
+ CRASH_INSERTION(7191);
+
#if 0
g_eventLogger.info("LCP_COMPLETE_REP");
printLCP_COMPLETE_REP(stdout,
@@ -11044,7 +11244,12 @@ void Dbdih::allNodesLcpCompletedLab(Signal* signal)
signal->theData[0] = NDB_LE_LocalCheckpointCompleted; //Event type
signal->theData[1] = SYSFILE->latestLCP_ID;
sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, 2, JBB);
- c_lcpState.lcpStopGcp = c_newest_restorable_gci;
+
+ if (c_newest_restorable_gci > c_lcpState.lcpStopGcp)
+ {
+ jam();
+ c_lcpState.lcpStopGcp = c_newest_restorable_gci;
+ }
/**
* Start checking for next LCP
@@ -11914,13 +12119,12 @@ void Dbdih::findMinGci(ReplicaRecordPtr fmgReplicaPtr,
lcpNo = fmgReplicaPtr.p->nextLcp;
do {
ndbrequire(lcpNo < MAX_LCP_STORED);
- if (fmgReplicaPtr.p->lcpStatus[lcpNo] == ZVALID &&
- fmgReplicaPtr.p->maxGciStarted[lcpNo] < c_newest_restorable_gci)
+ if (fmgReplicaPtr.p->lcpStatus[lcpNo] == ZVALID)
{
jam();
keepGci = fmgReplicaPtr.p->maxGciCompleted[lcpNo];
oldestRestorableGci = fmgReplicaPtr.p->maxGciStarted[lcpNo];
- ndbrequire(((int)oldestRestorableGci) >= 0);
+ ndbassert(fmgReplicaPtr.p->maxGciStarted[lcpNo] <c_newest_restorable_gci);
return;
} else {
jam();
@@ -12822,6 +13026,7 @@ void Dbdih::newCrashedReplica(Uint32 nodeId, ReplicaRecordPtr ncrReplicaPtr)
void Dbdih::nodeResetStart()
{
jam();
+ c_nodeStartSlave.nodeId = 0;
c_nodeStartMaster.startNode = RNIL;
c_nodeStartMaster.failNr = cfailurenr;
c_nodeStartMaster.activeState = false;
@@ -13657,6 +13862,7 @@ void Dbdih::setLcpActiveStatusStart(Signal* signal)
// It must be taken over with the copy fragment process after a system
// crash. We indicate this by setting the active status to TAKE_OVER.
/*-------------------------------------------------------------------*/
+ c_lcpState.m_participatingLQH.set(nodePtr.i);
nodePtr.p->activeStatus = Sysfile::NS_TakeOver;
//break; // Fall through
case Sysfile::NS_TakeOver:{
@@ -13699,6 +13905,7 @@ void Dbdih::setLcpActiveStatusStart(Signal* signal)
break;
case Sysfile::NS_ActiveMissed_2:
jam();
+ CRASH_INSERTION(7192);
if ((nodePtr.p->nodeStatus == NodeRecord::ALIVE) &&
(!nodePtr.p->copyCompleted)) {
jam();
@@ -14364,6 +14571,14 @@ Dbdih::execDUMP_STATE_ORD(Signal* signal)
("immediateLcpStart = %d masterLcpNodeId = %d",
c_lcpState.immediateLcpStart,
refToNode(c_lcpState.m_masterLcpDihRef));
+
+ for (Uint32 i = 0; i<10; i++)
+ {
+ infoEvent("%u : status: %u place: %u", i,
+ c_lcpState.m_saveState[i].m_status,
+ c_lcpState.m_saveState[i].m_place);
+ }
+
infoEvent("-- Node %d LCP STATE --", getOwnNodeId());
}
diff --git a/storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp b/storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp
index 6f8e5569831..62add0cf503 100644
--- a/storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp
+++ b/storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp
@@ -585,7 +585,6 @@ public:
enum ExecSrStatus {
IDLE = 0,
- ACTIVE_REMOVE_AFTER = 1,
ACTIVE = 2
};
/**
@@ -869,11 +868,6 @@ public:
* heard of.
*/
Uint8 fragDistributionKey;
- /**
- * The identity of the next local checkpoint this fragment
- * should perform.
- */
- Uint8 nextLcp;
/**
* How many local checkpoints does the fragment contain
*/
@@ -2025,7 +2019,6 @@ public:
Uint8 reclenAiLqhkey;
Uint8 m_offset_current_keybuf;
Uint8 replicaType;
- Uint8 simpleRead;
Uint8 seqNoReplica;
Uint8 tcNodeFailrec;
Uint8 m_disk_table;
@@ -2098,10 +2091,6 @@ private:
void execEXEC_SRCONF(Signal* signal);
void execREAD_PSEUDO_REQ(Signal* signal);
- void build_acc(Signal*, Uint32 fragPtrI);
- void execBUILDINDXREF(Signal*signal);
- void execBUILDINDXCONF(Signal*signal);
-
void execDUMP_STATE_ORD(Signal* signal);
void execACC_ABORTCONF(Signal* signal);
void execNODE_FAILREP(Signal* signal);
@@ -2145,6 +2134,7 @@ private:
void execSTORED_PROCCONF(Signal* signal);
void execSTORED_PROCREF(Signal* signal);
void execCOPY_FRAGREQ(Signal* signal);
+ void execPREPARE_COPY_FRAG_REQ(Signal* signal);
void execUPDATE_FRAG_DIST_KEY_ORD(Signal*);
void execCOPY_ACTIVEREQ(Signal* signal);
void execCOPY_STATEREQ(Signal* signal);
@@ -2780,7 +2770,13 @@ private:
/*THIS VARIABLE KEEPS TRACK OF HOW MANY FRAGMENTS THAT PARTICIPATE IN */
/*EXECUTING THE LOG. IF ZERO WE DON'T NEED TO EXECUTE THE LOG AT ALL. */
/* ------------------------------------------------------------------------- */
- UintR cnoFragmentsExecSr;
+ Uint32 cnoFragmentsExecSr;
+
+ /**
+ * This is no of sent GSN_EXEC_FRAGREQ during this log phase
+ */
+ Uint32 cnoOutstandingExecFragReq;
+
/* ------------------------------------------------------------------------- */
/*THIS VARIABLE KEEPS TRACK OF WHICH OF THE FIRST TWO RESTART PHASES THAT */
/*HAVE COMPLETED. */
@@ -2801,7 +2797,6 @@ private:
DLFifoList<Fragrecord> c_lcp_waiting_fragments; // StartFragReq'ed
DLFifoList<Fragrecord> c_lcp_restoring_fragments; // Restoring as we speek
DLFifoList<Fragrecord> c_lcp_complete_fragments; // Restored
- DLFifoList<Fragrecord> c_redo_complete_fragments; // Redo'ed
/* ------------------------------------------------------------------------- */
/*USED DURING SYSTEM RESTART, INDICATES THE OLDEST GCI THAT CAN BE RESTARTED */
diff --git a/storage/ndb/src/kernel/blocks/dblqh/DblqhInit.cpp b/storage/ndb/src/kernel/blocks/dblqh/DblqhInit.cpp
index d6411ee1cb9..b3a3d512da7 100644
--- a/storage/ndb/src/kernel/blocks/dblqh/DblqhInit.cpp
+++ b/storage/ndb/src/kernel/blocks/dblqh/DblqhInit.cpp
@@ -168,7 +168,6 @@ Dblqh::Dblqh(Block_context& ctx):
c_lcp_waiting_fragments(c_fragment_pool),
c_lcp_restoring_fragments(c_fragment_pool),
c_lcp_complete_fragments(c_fragment_pool),
- c_redo_complete_fragments(c_fragment_pool),
m_commitAckMarkerHash(m_commitAckMarkerPool),
c_scanTakeOverHash(c_scanRecordPool)
{
@@ -295,9 +294,6 @@ Dblqh::Dblqh(Block_context& ctx):
addRecSignal(GSN_READ_PSEUDO_REQ, &Dblqh::execREAD_PSEUDO_REQ);
- addRecSignal(GSN_BUILDINDXREF, &Dblqh::execBUILDINDXREF);
- addRecSignal(GSN_BUILDINDXCONF, &Dblqh::execBUILDINDXCONF);
-
addRecSignal(GSN_DEFINE_BACKUP_REF, &Dblqh::execDEFINE_BACKUP_REF);
addRecSignal(GSN_DEFINE_BACKUP_CONF, &Dblqh::execDEFINE_BACKUP_CONF);
@@ -310,6 +306,9 @@ Dblqh::Dblqh(Block_context& ctx):
addRecSignal(GSN_UPDATE_FRAG_DIST_KEY_ORD,
&Dblqh::execUPDATE_FRAG_DIST_KEY_ORD);
+ addRecSignal(GSN_PREPARE_COPY_FRAG_REQ,
+ &Dblqh::execPREPARE_COPY_FRAG_REQ);
+
initData();
#ifdef VM_TRACE
diff --git a/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp b/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
index efb88bfccd2..83d38595c1f 100644
--- a/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
+++ b/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
@@ -356,7 +356,6 @@ void Dblqh::execCONTINUEB(Signal* signal)
break;
case ZSR_PHASE3_START:
jam();
- signal->theData[0] = data0;
srPhase3Start(signal);
return;
break;
@@ -428,25 +427,25 @@ void Dblqh::execCONTINUEB(Signal* signal)
if (fragptr.i != RNIL)
{
jam();
- c_redo_complete_fragments.getPtr(fragptr);
+ c_lcp_complete_fragments.getPtr(fragptr);
signal->theData[0] = fragptr.p->tabRef;
signal->theData[1] = fragptr.p->fragId;
sendSignal(DBACC_REF, GSN_EXPANDCHECK2, signal, 2, JBB);
Ptr<Fragrecord> save = fragptr;
- c_redo_complete_fragments.next(fragptr);
+ c_lcp_complete_fragments.next(fragptr);
signal->theData[0] = ZENABLE_EXPAND_CHECK;
signal->theData[1] = fragptr.i;
sendSignal(DBLQH_REF, GSN_CONTINUEB, signal, 2, JBB);
- c_redo_complete_fragments.remove(save);
+ c_lcp_complete_fragments.remove(save);
return;
}
else
{
jam();
cstartRecReq = 2;
- ndbrequire(c_redo_complete_fragments.isEmpty());
+ ndbrequire(c_lcp_complete_fragments.isEmpty());
StartRecConf * conf = (StartRecConf*)signal->getDataPtrSend();
conf->startingNodeId = getOwnNodeId();
sendSignal(cmasterDihBlockref, GSN_START_RECCONF, signal,
@@ -495,8 +494,9 @@ void Dblqh::execINCL_NODEREQ(Signal* signal)
cnodeStatus[i] = ZNODE_UP;
}//if
}//for
- signal->theData[0] = cownref;
- sendSignal(retRef, GSN_INCL_NODECONF, signal, 1, JBB);
+ signal->theData[0] = nodeId;
+ signal->theData[1] = cownref;
+ sendSignal(retRef, GSN_INCL_NODECONF, signal, 2, JBB);
return;
}//Dblqh::execINCL_NODEREQ()
@@ -1121,7 +1121,6 @@ void Dblqh::execLQHFRAGREQ(Signal* signal)
Uint32 minRowsHigh = req->minRowsHigh;
Uint32 tschemaVersion = req->schemaVersion;
Uint32 ttupKeyLength = req->keyLength;
- Uint32 nextLcp = req->nextLCP;
Uint32 noOfKeyAttr = req->noOfKeyAttr;
Uint32 noOfCharsets = req->noOfCharsets;
Uint32 checksumIndicator = req->checksumIndicator;
@@ -1214,7 +1213,6 @@ void Dblqh::execLQHFRAGREQ(Signal* signal)
fragptr.p->lcpFlag = Fragrecord::LCP_STATE_FALSE;
}//if
- fragptr.p->nextLcp = nextLcp;
//----------------------------------------------
// For node restarts it is not necessarily zero
//----------------------------------------------
@@ -3496,7 +3494,6 @@ void Dblqh::execLQHKEYREQ(Signal* signal)
regTcPtr->dirtyOp = LqhKeyReq::getDirtyFlag(Treqinfo);
regTcPtr->opExec = LqhKeyReq::getInterpretedFlag(Treqinfo);
regTcPtr->opSimple = LqhKeyReq::getSimpleFlag(Treqinfo);
- regTcPtr->simpleRead = op == ZREAD && regTcPtr->opSimple;
regTcPtr->seqNoReplica = LqhKeyReq::getSeqNoReplica(Treqinfo);
UintR TreclenAiLqhkey = LqhKeyReq::getAIInLqhKeyReq(Treqinfo);
regTcPtr->apiVersionNo = 0;
@@ -3513,9 +3510,15 @@ void Dblqh::execLQHKEYREQ(Signal* signal)
regTcPtr->lockType =
op == ZREAD_EX ? ZUPDATE : (Operation_t) op == ZWRITE ? ZINSERT : (Operation_t) op;
}
+
+ if (regTcPtr->dirtyOp)
+ {
+ ndbrequire(regTcPtr->opSimple);
+ }
- CRASH_INSERTION2(5041, regTcPtr->simpleRead &&
- refToNode(signal->senderBlockRef()) != cownNodeid);
+ CRASH_INSERTION2(5041, (op == ZREAD &&
+ (regTcPtr->opSimple || regTcPtr->dirtyOp) &&
+ refToNode(signal->senderBlockRef()) != cownNodeid));
regTcPtr->reclenAiLqhkey = TreclenAiLqhkey;
regTcPtr->currReclenAi = TreclenAiLqhkey;
@@ -3665,6 +3668,7 @@ void Dblqh::execLQHKEYREQ(Signal* signal)
{
ndbout_c("fragptr.p->fragStatus: %d",
fragptr.p->fragStatus);
+ CRASH_INSERTION(5046);
}
ndbassert(fragptr.p->fragStatus == Fragrecord::ACTIVE_CREATION);
fragptr.p->m_copy_started_state = Fragrecord::AC_NR_COPY;
@@ -3687,8 +3691,8 @@ void Dblqh::execLQHKEYREQ(Signal* signal)
Uint8 TdistKey = LqhKeyReq::getDistributionKey(TtotReclenAi);
if ((tfragDistKey != TdistKey) &&
(regTcPtr->seqNoReplica == 0) &&
- (regTcPtr->dirtyOp == ZFALSE) &&
- (regTcPtr->simpleRead == ZFALSE)) {
+ (regTcPtr->dirtyOp == ZFALSE))
+ {
/* ----------------------------------------------------------------------
* WE HAVE DIFFERENT OPINION THAN THE DIH THAT STARTED THE TRANSACTION.
* THE REASON COULD BE THAT THIS IS AN OLD DISTRIBUTION WHICH IS NO LONGER
@@ -4778,7 +4782,18 @@ void Dblqh::tupkeyConfLab(Signal* signal)
TRACE_OP(regTcPtr, "TUPKEYCONF");
- if (regTcPtr->simpleRead) {
+ if (readLen != 0)
+ {
+ jam();
+
+ /* SET BIT 15 IN REQINFO */
+ LqhKeyReq::setApplicationAddressFlag(regTcPtr->reqinfo, 1);
+ regTcPtr->readlenAi = readLen;
+ }//if
+
+ if (regTcPtr->operation == ZREAD &&
+ (regTcPtr->opSimple || regTcPtr->dirtyOp))
+ {
jam();
/* ----------------------------------------------------------------------
* THE OPERATION IS A SIMPLE READ.
@@ -4792,14 +4807,6 @@ void Dblqh::tupkeyConfLab(Signal* signal)
commitContinueAfterBlockedLab(signal);
return;
}//if
- if (readLen != 0)
- {
- jam();
-
- /* SET BIT 15 IN REQINFO */
- LqhKeyReq::setApplicationAddressFlag(regTcPtr->reqinfo, 1);
- regTcPtr->readlenAi = readLen;
- }//if
regTcPtr->totSendlenAi = writeLen;
ndbrequire(regTcPtr->totSendlenAi == regTcPtr->currTupAiLen);
@@ -5178,12 +5185,15 @@ void Dblqh::packLqhkeyreqLab(Signal* signal)
/* */
/* ------------------------------------------------------------------------- */
sendLqhkeyconfTc(signal, regTcPtr->tcBlockref);
- if (regTcPtr->dirtyOp != ZTRUE) {
+ if (! (regTcPtr->dirtyOp ||
+ (regTcPtr->operation == ZREAD && regTcPtr->opSimple)))
+ {
jam();
regTcPtr->transactionState = TcConnectionrec::PREPARED;
releaseOprec(signal);
} else {
jam();
+
/*************************************************************>*/
/* DIRTY WRITES ARE USED IN TWO SITUATIONS. THE FIRST */
/* SITUATION IS WHEN THEY ARE USED TO UPDATE COUNTERS AND*/
@@ -6406,8 +6416,8 @@ void Dblqh::commitContinueAfterBlockedLab(Signal* signal)
Ptr<TcConnectionrec> regTcPtr = tcConnectptr;
Ptr<Fragrecord> regFragptr = fragptr;
Uint32 operation = regTcPtr.p->operation;
- Uint32 simpleRead = regTcPtr.p->simpleRead;
Uint32 dirtyOp = regTcPtr.p->dirtyOp;
+ Uint32 opSimple = regTcPtr.p->opSimple;
if (regTcPtr.p->activeCreat != Fragrecord::AC_IGNORED) {
if (operation != ZREAD) {
TupCommitReq * const tupCommitReq =
@@ -6465,20 +6475,29 @@ void Dblqh::commitContinueAfterBlockedLab(Signal* signal)
EXECUTE_DIRECT(acc, GSN_ACC_COMMITREQ, signal, 1);
}
- if (simpleRead) {
+ if (dirtyOp)
+ {
jam();
-/* ------------------------------------------------------------------------- */
-/*THE OPERATION WAS A SIMPLE READ THUS THE COMMIT PHASE IS ONLY NEEDED TO */
-/*RELEASE THE LOCKS. AT THIS POINT IN THE CODE THE LOCKS ARE RELEASED AND WE */
-/*ARE IN A POSITION TO SEND LQHKEYCONF TO TC. WE WILL ALSO RELEASE ALL */
-/*RESOURCES BELONGING TO THIS OPERATION SINCE NO MORE WORK WILL BE */
-/*PERFORMED. */
-/* ------------------------------------------------------------------------- */
+ /**
+ * The dirtyRead does not send anything but TRANSID_AI from LDM
+ */
fragptr = regFragptr;
tcConnectptr = regTcPtr;
cleanUp(signal);
return;
- }//if
+ }
+
+ /**
+ * The simpleRead will send a LQHKEYCONF
+ * but have already released the locks
+ */
+ if (opSimple)
+ {
+ fragptr = regFragptr;
+ tcConnectptr = regTcPtr;
+ packLqhkeyreqLab(signal);
+ return;
+ }
}
}//if
jamEntry();
@@ -7088,7 +7107,7 @@ void Dblqh::abortStateHandlerLab(Signal* signal)
/* ------------------------------------------------------------------------- */
return;
}//if
- if (regTcPtr->simpleRead) {
+ if (regTcPtr->opSimple) {
jam();
/* ------------------------------------------------------------------------- */
/*A SIMPLE READ IS CURRENTLY RELEASING THE LOCKS OR WAITING FOR ACCESS TO */
@@ -7356,7 +7375,8 @@ void Dblqh::continueAbortLab(Signal* signal)
void Dblqh::continueAfterLogAbortWriteLab(Signal* signal)
{
TcConnectionrec * const regTcPtr = tcConnectptr.p;
- if (regTcPtr->simpleRead) {
+ if (regTcPtr->operation == ZREAD && regTcPtr->dirtyOp)
+ {
jam();
TcKeyRef * const tcKeyRef = (TcKeyRef *) signal->getDataPtrSend();
@@ -8917,6 +8937,9 @@ void Dblqh::storedProcConfScanLab(Signal* signal)
case Fragrecord::REMOVING:
jam();
default:
+ jamLine(fragptr.p->fragStatus);
+ ndbout_c("fragptr.p->fragStatus: %u",
+ fragptr.p->fragStatus);
ndbrequire(false);
break;
}//switch
@@ -10062,6 +10085,86 @@ Dblqh::calculateHash(Uint32 tableId, const Uint32* src)
return md5_hash(Tmp, keyLen);
}//Dblqh::calculateHash()
+/**
+ * PREPARE COPY FRAG REQ
+ */
+void
+Dblqh::execPREPARE_COPY_FRAG_REQ(Signal* signal)
+{
+ jamEntry();
+ PrepareCopyFragReq req = *(PrepareCopyFragReq*)signal->getDataPtr();
+
+ CRASH_INSERTION(5045);
+
+ tabptr.i = req.tableId;
+ ptrCheckGuard(tabptr, ctabrecFileSize, tablerec);
+
+ Uint32 max_page = RNIL;
+
+ if (getOwnNodeId() != req.startingNodeId)
+ {
+ jam();
+ /**
+ * This is currently dead code...
+ * but is provided so we can impl. a better scan+delete on
+ * starting node wo/ having to change running node
+ */
+ ndbrequire(getOwnNodeId() == req.copyNodeId);
+ c_tup->get_frag_info(req.tableId, req.fragId, &max_page);
+
+ PrepareCopyFragConf* conf = (PrepareCopyFragConf*)signal->getDataPtrSend();
+ conf->senderData = req.senderData;
+ conf->senderRef = reference();
+ conf->tableId = req.tableId;
+ conf->fragId = req.fragId;
+ conf->copyNodeId = req.copyNodeId;
+ conf->startingNodeId = req.startingNodeId;
+ conf->maxPageNo = max_page;
+ sendSignal(req.senderRef, GSN_PREPARE_COPY_FRAG_CONF,
+ signal, PrepareCopyFragConf::SignalLength, JBB);
+
+ return;
+ }
+
+ if (! DictTabInfo::isOrderedIndex(tabptr.p->tableType))
+ {
+ jam();
+ ndbrequire(getFragmentrec(signal, req.fragId));
+
+ /**
+ *
+ */
+ if (cstartType == NodeState::ST_SYSTEM_RESTART)
+ {
+ jam();
+ signal->theData[0] = fragptr.p->tabRef;
+ signal->theData[1] = fragptr.p->fragId;
+ sendSignal(DBACC_REF, GSN_EXPANDCHECK2, signal, 2, JBB);
+ }
+
+
+ /**
+ *
+ */
+ fragptr.p->m_copy_started_state = Fragrecord::AC_IGNORED;
+ fragptr.p->fragStatus = Fragrecord::ACTIVE_CREATION;
+ fragptr.p->logFlag = Fragrecord::STATE_FALSE;
+
+ c_tup->get_frag_info(req.tableId, req.fragId, &max_page);
+ }
+
+ PrepareCopyFragConf* conf = (PrepareCopyFragConf*)signal->getDataPtrSend();
+ conf->senderData = req.senderData;
+ conf->senderRef = reference();
+ conf->tableId = req.tableId;
+ conf->fragId = req.fragId;
+ conf->copyNodeId = req.copyNodeId;
+ conf->startingNodeId = req.startingNodeId;
+ conf->maxPageNo = max_page;
+ sendSignal(req.senderRef, GSN_PREPARE_COPY_FRAG_CONF,
+ signal, PrepareCopyFragConf::SignalLength, JBB);
+}
+
/* *************************************** */
/* COPY_FRAGREQ: Start copying a fragment */
/* *************************************** */
@@ -10097,6 +10200,13 @@ void Dblqh::execCOPY_FRAGREQ(Signal* signal)
for (i = 0; i<nodeCount; i++)
nodemask.set(copyFragReq->nodeList[i]);
}
+ Uint32 maxPage = copyFragReq->nodeList[nodeCount];
+ Uint32 version = getNodeInfo(refToNode(userRef)).m_version;
+ if (ndb_check_prep_copy_frag_version(version) < 2)
+ {
+ jam();
+ maxPage = RNIL;
+ }
if (DictTabInfo::isOrderedIndex(tabptr.p->tableType)) {
jam();
@@ -10172,14 +10282,15 @@ void Dblqh::execCOPY_FRAGREQ(Signal* signal)
req->requestInfo = 0;
AccScanReq::setLockMode(req->requestInfo, 0);
AccScanReq::setReadCommittedFlag(req->requestInfo, 0);
- AccScanReq::setNRScanFlag(req->requestInfo, gci ? 1 : 0);
+ AccScanReq::setNRScanFlag(req->requestInfo, 1);
AccScanReq::setNoDiskScanFlag(req->requestInfo, 1);
req->transId1 = tcConnectptr.p->transid[0];
req->transId2 = tcConnectptr.p->transid[1];
req->savePointId = tcConnectptr.p->savePointId;
+ req->maxPage = maxPage;
sendSignal(scanptr.p->scanBlockref, GSN_ACC_SCANREQ, signal,
- AccScanReq::SignalLength, JBB);
+ AccScanReq::SignalLength + 1, JBB);
if (! nodemask.isclear())
{
@@ -14031,15 +14142,12 @@ void Dblqh::execSTART_FRAGREQ(Signal* signal)
if (lcpNo == (MAX_LCP_STORED - 1)) {
jam();
fragptr.p->lcpId[lcpNo] = lcpId;
- fragptr.p->nextLcp = 0;
} else if (lcpNo < (MAX_LCP_STORED - 1)) {
jam();
fragptr.p->lcpId[lcpNo] = lcpId;
- fragptr.p->nextLcp = lcpNo + 1;
} else {
ndbrequire(lcpNo == ZNIL);
jam();
- fragptr.p->nextLcp = 0;
}//if
fragptr.p->srNoLognodes = noOfLogNodes;
fragptr.p->logFlag = Fragrecord::STATE_FALSE;
@@ -14071,24 +14179,19 @@ void Dblqh::execSTART_FRAGREQ(Signal* signal)
*/
c_lcp_complete_fragments.add(fragptr);
- if(lcpNo == ZNIL)
- {
- signal->theData[0] = tabptr.i;
- signal->theData[1] = fragId;
- sendSignal(DBACC_REF, GSN_EXPANDCHECK2, signal, 2, JBB);
- }
-
- if (getNodeState().getNodeRestartInProgress())
- {
- jam();
- fragptr.p->fragStatus = Fragrecord::ACTIVE_CREATION;
- }
-
- c_tup->disk_restart_mark_no_lcp(tabptr.i, fragId);
+ signal->theData[0] = tabptr.i;
+ signal->theData[1] = fragId;
+ sendSignal(DBACC_REF, GSN_EXPANDCHECK2, signal, 2, JBB);
+ c_tup->disk_restart_lcp_id(tabptr.i, fragId, RNIL);
jamEntry();
-
return;
- }//if
+ }
+ else
+ {
+ jam();
+ c_tup->disk_restart_lcp_id(tabptr.i, fragId, lcpId);
+ jamEntry();
+ }
c_lcpId = (c_lcpId == 0 ? lcpId : c_lcpId);
c_lcpId = (c_lcpId < lcpId ? c_lcpId : lcpId);
@@ -14280,65 +14383,9 @@ void Dblqh::execSTART_RECCONF(Signal* signal)
return;
}
- c_lcp_complete_fragments.first(fragptr);
- build_acc(signal, fragptr.i);
- return;
-}//Dblqh::execSTART_RECCONF()
-
-void
-Dblqh::build_acc(Signal* signal, Uint32 fragPtrI)
-{
- fragptr.i = fragPtrI;
- while(fragptr.i != RNIL)
- {
- c_lcp_complete_fragments.getPtr(fragptr);
- tabptr.i = fragptr.p->tabRef;
- ptrCheckGuard(tabptr, ctabrecFileSize, tablerec);
-
- if(true || fragptr.i != tabptr.p->fragrec[0])
- {
- // Only need to send 1 build per table, TUP will rebuild all
- fragptr.i = fragptr.p->nextList;
- continue;
- }
-
- BuildIndxReq* const req = (BuildIndxReq*)signal->getDataPtrSend();
- req->setUserRef(reference());
- req->setConnectionPtr(fragptr.i);
- req->setRequestType(BuildIndxReq::RT_SYSTEMRESTART);
- req->setBuildId(0); // not used
- req->setBuildKey(0); // not used
- req->setIndexType(RNIL);
- req->setIndexId(RNIL);
- req->setTableId(tabptr.i);
- req->setParallelism(0);
-
- sendSignal(DBTUP_REF, GSN_BUILDINDXREQ, signal,
- BuildIndxReq::SignalLength, JBB);
- return;
- }
-
startExecSr(signal);
}
-void
-Dblqh::execBUILDINDXREF(Signal* signal)
-{
- ndbrequire(false);
-}
-
-void
-Dblqh::execBUILDINDXCONF(Signal* signal)
-{
- BuildIndxConf* conf = (BuildIndxConf*)signal->getDataPtrSend();
- Uint32 fragPtrI = conf->getConnectionPtr();
-
- fragptr.i = fragPtrI;
- c_fragment_pool.getPtr(fragptr);
- infoEvent("LQH: primary key index %u rebuild done", fragptr.p->tabRef);
- build_acc(signal, fragptr.p->nextList);
-}
-
/* ***************> */
/* START_RECREF > */
/* ***************> */
@@ -14357,9 +14404,9 @@ void Dblqh::execSTART_EXEC_SR(Signal* signal)
fragptr.i = signal->theData[0];
Uint32 next = RNIL;
- if (fragptr.i == RNIL) {
+ if (fragptr.i == RNIL)
+ {
jam();
- ndbrequire(cnoOfNodes < MAX_NDB_NODES);
/* ----------------------------------------------------------------------
* NO MORE FRAGMENTS TO START EXECUTING THE LOG ON.
* SEND EXEC_SRREQ TO ALL LQH TO INDICATE THAT THIS NODE WILL
@@ -14375,10 +14422,15 @@ void Dblqh::execSTART_EXEC_SR(Signal* signal)
} else {
jam();
c_lcp_complete_fragments.getPtr(fragptr);
- if (fragptr.p->srNoLognodes > csrPhasesCompleted) {
+ next = fragptr.p->nextList;
+
+ if (fragptr.p->srNoLognodes > csrPhasesCompleted)
+ {
jam();
+ cnoOutstandingExecFragReq++;
+
Uint32 index = csrPhasesCompleted;
- arrGuard(index, 4);
+ arrGuard(index, MAX_LOG_EXEC);
BlockReference ref = calcLqhBlockRef(fragptr.p->srLqhLognode[index]);
fragptr.p->srStatus = Fragrecord::SS_STARTED;
@@ -14397,34 +14449,7 @@ void Dblqh::execSTART_EXEC_SR(Signal* signal)
sendSignal(ref, GSN_EXEC_FRAGREQ, signal,
ExecFragReq::SignalLength, JBB);
- next = fragptr.p->nextList;
- } else {
- jam();
- /* --------------------------------------------------------------------
- * THIS FRAGMENT IS NOW FINISHED WITH THE SYSTEM RESTART. IT DOES
- * NOT NEED TO PARTICIPATE IN ANY MORE PHASES. REMOVE IT FROM THE
- * LIST OF COMPLETED FRAGMENTS TO EXECUTE THE LOG ON.
- * ALSO SEND START_FRAGCONF TO DIH AND SET THE STATE TO ACTIVE ON THE
- * FRAGMENT.
- * ------------------------------------------------------------------- */
- next = fragptr.p->nextList;
- c_lcp_complete_fragments.remove(fragptr);
- c_redo_complete_fragments.add(fragptr);
-
- if (!getNodeState().getNodeRestartInProgress())
- {
- fragptr.p->logFlag = Fragrecord::STATE_TRUE;
- fragptr.p->fragStatus = Fragrecord::FSACTIVE;
- }
- else
- {
- fragptr.p->fragStatus = Fragrecord::ACTIVE_CREATION;
- }
- signal->theData[0] = fragptr.p->srUserptr;
- signal->theData[1] = cownNodeid;
- sendSignal(fragptr.p->srBlockref, GSN_START_FRAGCONF, signal, 2, JBB);
-
- } //if
+ }
signal->theData[0] = next;
sendSignal(cownref, GSN_START_EXEC_SR, signal, 1, JBB);
}//if
@@ -14445,24 +14470,8 @@ void Dblqh::execEXEC_FRAGREQ(Signal* signal)
tabptr.i = execFragReq->tableId;
Uint32 fragId = execFragReq->fragId;
ptrCheckGuard(tabptr, ctabrecFileSize, tablerec);
- if (!getFragmentrec(signal, fragId)) {
- jam();
- if (!insertFragrec(signal, fragId)) {
- jam();
- sendExecFragRefLab(signal);
- return;
- }//if
- initFragrec(signal, tabptr.i, fragId, ZLOG_NODE);
- fragptr.p->execSrStatus = Fragrecord::ACTIVE_REMOVE_AFTER;
- } else {
- jam();
- if (fragptr.p->execSrStatus == Fragrecord::ACTIVE_REMOVE_AFTER) {
- jam();
- fragptr.p->execSrStatus = Fragrecord::ACTIVE_REMOVE_AFTER;
- } else {
- jam();
- }//if
- }//if
+ ndbrequire(getFragmentrec(signal, fragId));
+
ndbrequire(fragptr.p->execSrNoReplicas < 4);
fragptr.p->execSrBlockref[fragptr.p->execSrNoReplicas] = execFragReq->userRef;
fragptr.p->execSrUserptr[fragptr.p->execSrNoReplicas] = execFragReq->userPtr;
@@ -14495,6 +14504,21 @@ void Dblqh::execEXEC_FRAGCONF(Signal* signal)
fragptr.i = signal->theData[0];
c_fragment_pool.getPtr(fragptr);
fragptr.p->srStatus = Fragrecord::SS_COMPLETED;
+
+ ndbrequire(cnoOutstandingExecFragReq);
+ cnoOutstandingExecFragReq--;
+ if (fragptr.p->srNoLognodes == csrPhasesCompleted + 1)
+ {
+ jam();
+
+ fragptr.p->logFlag = Fragrecord::STATE_TRUE;
+ fragptr.p->fragStatus = Fragrecord::FSACTIVE;
+
+ signal->theData[0] = fragptr.p->srUserptr;
+ signal->theData[1] = cownNodeid;
+ sendSignal(fragptr.p->srBlockref, GSN_START_FRAGCONF, signal, 2, JBB);
+ }
+
return;
}//Dblqh::execEXEC_FRAGCONF()
@@ -14518,6 +14542,7 @@ void Dblqh::execEXEC_SRCONF(Signal* signal)
Uint32 nodeId = signal->theData[0];
arrGuard(nodeId, MAX_NDB_NODES);
m_sr_exec_sr_conf.set(nodeId);
+
if (!m_sr_nodes.equal(m_sr_exec_sr_conf))
{
jam();
@@ -14538,16 +14563,8 @@ void Dblqh::execEXEC_SRCONF(Signal* signal)
* NOW CHECK IF ALL FRAGMENTS IN THIS PHASE HAVE COMPLETED. IF SO START THE
* NEXT PHASE.
* ----------------------------------------------------------------------- */
- c_lcp_complete_fragments.first(fragptr);
- while (fragptr.i != RNIL)
- {
- jam();
- if(fragptr.p->srStatus != Fragrecord::SS_COMPLETED)
- {
- return;
- }
- c_lcp_complete_fragments.next(fragptr);
- }
+ ndbrequire(cnoOutstandingExecFragReq == 0);
+
execSrCompletedLab(signal);
return;
}//Dblqh::execEXEC_SRCONF()
@@ -14603,6 +14620,7 @@ void Dblqh::execSrCompletedLab(Signal* signal)
* THERE ARE YET MORE PHASES TO RESTART.
* WE MUST INITIALISE DATA FOR NEXT PHASE AND SEND START SIGNAL.
* --------------------------------------------------------------------- */
+ csrPhaseStarted = ZSR_PHASE1_COMPLETED; // Set correct state first...
startExecSr(signal);
}//if
return;
@@ -14676,7 +14694,8 @@ void Dblqh::srPhase3Start(Signal* signal)
UintR tsrPhaseStarted;
jamEntry();
- tsrPhaseStarted = signal->theData[0];
+
+ tsrPhaseStarted = signal->theData[1];
if (csrPhaseStarted == ZSR_NO_PHASE_STARTED) {
jam();
csrPhaseStarted = tsrPhaseStarted;
@@ -15853,18 +15872,6 @@ void Dblqh::sendExecConf(Signal* signal)
sendSignal(fragptr.p->execSrBlockref[i], GSN_EXEC_FRAGCONF,
signal, 1, JBB);
}//for
- if (fragptr.p->execSrStatus == Fragrecord::ACTIVE) {
- jam();
- fragptr.p->execSrStatus = Fragrecord::IDLE;
- } else {
- ndbrequire(fragptr.p->execSrStatus == Fragrecord::ACTIVE_REMOVE_AFTER);
- jam();
- Uint32 fragId = fragptr.p->fragId;
- tabptr.i = fragptr.p->tabRef;
- ptrCheckGuard(tabptr, ctabrecFileSize, tablerec);
- c_lcp_complete_fragments.remove(fragptr);
- deleteFragrec(fragId);
- }//if
fragptr.p->execSrNoReplicas = 0;
}//if
loopCount++;
@@ -15892,17 +15899,10 @@ void Dblqh::sendExecConf(Signal* signal)
void Dblqh::srPhase3Comp(Signal* signal)
{
jamEntry();
- ndbrequire(cnoOfNodes < MAX_NDB_NODES);
- for (Uint32 i = 0; i < cnoOfNodes; i++) {
- jam();
- if (cnodeStatus[i] == ZNODE_UP) {
- jam();
- ndbrequire(cnodeData[i] < MAX_NDB_NODES);
- BlockReference ref = calcLqhBlockRef(cnodeData[i]);
- signal->theData[0] = cownNodeid;
- sendSignal(ref, GSN_EXEC_SRCONF, signal, 1, JBB);
- }//if
- }//for
+
+ signal->theData[0] = cownNodeid;
+ NodeReceiverGroup rg(DBLQH, m_sr_nodes);
+ sendSignal(rg, GSN_EXEC_SRCONF, signal, 1, JBB);
return;
}//Dblqh::srPhase3Comp()
@@ -16144,7 +16144,7 @@ void Dblqh::srFourthComp(Signal* signal)
if(cstartType == NodeState::ST_SYSTEM_RESTART)
{
jam();
- if (c_redo_complete_fragments.first(fragptr))
+ if (c_lcp_complete_fragments.first(fragptr))
{
jam();
signal->theData[0] = ZENABLE_EXPAND_CHECK;
@@ -17252,7 +17252,6 @@ void Dblqh::initFragrec(Signal* signal,
fragptr.p->maxGciInLcp = 0;
fragptr.p->copyFragState = ZIDLE;
fragptr.p->newestGci = cnewestGci;
- fragptr.p->nextLcp = 0;
fragptr.p->tabRef = tableId;
fragptr.p->fragId = fragId;
fragptr.p->srStatus = Fragrecord::SS_IDLE;
@@ -18341,6 +18340,7 @@ void Dblqh::sendLqhTransconf(Signal* signal, LqhTransConf::OperationStatus stat)
void Dblqh::startExecSr(Signal* signal)
{
cnoFragmentsExecSr = 0;
+ cnoOutstandingExecFragReq = 0;
c_lcp_complete_fragments.first(fragptr);
signal->theData[0] = fragptr.i;
sendSignal(cownref, GSN_START_EXEC_SR, signal, 1, JBB);
@@ -19022,7 +19022,6 @@ Dblqh::execDUMP_STATE_ORD(Signal* signal)
ndbout << " operation = " << tcRec.p->operation<<endl;
ndbout << " tcNodeFailrec = " << tcRec.p->tcNodeFailrec
<< " seqNoReplica = " << tcRec.p->seqNoReplica
- << " simpleRead = " << tcRec.p->simpleRead
<< endl;
ndbout << " replicaType = " << tcRec.p->replicaType
<< " reclenAiLqhkey = " << tcRec.p->reclenAiLqhkey
diff --git a/storage/ndb/src/kernel/blocks/dbtc/Dbtc.hpp b/storage/ndb/src/kernel/blocks/dbtc/Dbtc.hpp
index 75d79ba737f..db9f1454548 100644
--- a/storage/ndb/src/kernel/blocks/dbtc/Dbtc.hpp
+++ b/storage/ndb/src/kernel/blocks/dbtc/Dbtc.hpp
@@ -734,6 +734,7 @@ public:
// Index op return context
UintR indexOp;
UintR clientData;
+ Uint32 errorData;
UintR attrInfoLen;
UintR accumulatingIndexOp;
@@ -786,6 +787,7 @@ public:
UintR apiConnect; /* POINTER TO API CONNECT RECORD */
UintR nextTcConnect; /* NEXT TC RECORD*/
Uint8 dirtyOp;
+ Uint8 opSimple;
Uint8 lastReplicaNo; /* NUMBER OF THE LAST REPLICA IN THE OPERATION */
Uint8 noOfNodes; /* TOTAL NUMBER OF NODES IN OPERATION */
Uint8 operation; /* OPERATION TYPE */
@@ -886,13 +888,8 @@ public:
Uint8 opExec;
Uint8 unused;
+ Uint8 unused1;
- /**
- * IS THE OPERATION A SIMPLE TRANSACTION
- * 0 = NO, 1 = YES
- */
- Uint8 opSimple;
-
//---------------------------------------------------
// Second 16 byte cache line in second 64 byte cache
// line. Diverse use.
@@ -1464,7 +1461,7 @@ private:
void releaseAttrinfo();
void releaseGcp(Signal* signal);
void releaseKeys();
- void releaseSimpleRead(Signal*, ApiConnectRecordPtr, TcConnectRecord*);
+ void releaseDirtyRead(Signal*, ApiConnectRecordPtr, TcConnectRecord*);
void releaseDirtyWrite(Signal* signal);
void releaseTcCon();
void releaseTcConnectFail(Signal* signal);
@@ -1620,7 +1617,7 @@ private:
void startphase1x010Lab(Signal* signal);
void lqhKeyConf_checkTransactionState(Signal * signal,
- ApiConnectRecord * const regApiPtr);
+ Ptr<ApiConnectRecord> regApiPtr);
void checkDropTab(Signal* signal);
@@ -1675,6 +1672,7 @@ private:
UintR cfailure_nr;
UintR coperationsize;
UintR ctcTimer;
+ UintR cDbHbInterval;
ApiConnectRecordPtr tmpApiConnectptr;
UintR tcheckGcpId;
diff --git a/storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp b/storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
index 887e6f848b1..e584883e3b6 100644
--- a/storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
+++ b/storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
@@ -20,6 +20,7 @@
#include <RefConvert.hpp>
#include <ndb_limits.h>
#include <my_sys.h>
+#include <ndb_rand.h>
#include <signaldata/EventReport.hpp>
#include <signaldata/TcKeyReq.hpp>
@@ -309,9 +310,11 @@ void Dbtc::execINCL_NODEREQ(Signal* signal)
hostptr.i = signal->theData[1];
ptrCheckGuard(hostptr, chostFilesize, hostRecord);
hostptr.p->hostStatus = HS_ALIVE;
- signal->theData[0] = cownref;
c_alive_nodes.set(hostptr.i);
+ signal->theData[0] = hostptr.i;
+ signal->theData[1] = cownref;
+
if (ERROR_INSERTED(8039))
{
CLEAR_ERROR_INSERT_VALUE;
@@ -320,11 +323,11 @@ void Dbtc::execINCL_NODEREQ(Signal* signal)
sendSignal(numberToRef(CMVMI, hostptr.i),
GSN_NDB_TAMPER, signal, 1, JBB);
signal->theData[0] = save;
- sendSignalWithDelay(tblockref, GSN_INCL_NODECONF, signal, 5000, 1);
+ sendSignalWithDelay(tblockref, GSN_INCL_NODECONF, signal, 5000, 2);
return;
}
- sendSignal(tblockref, GSN_INCL_NODECONF, signal, 1, JBB);
+ sendSignal(tblockref, GSN_INCL_NODECONF, signal, 2, JBB);
}
void Dbtc::execREAD_NODESREF(Signal* signal)
@@ -658,6 +661,10 @@ void Dbtc::execREAD_CONFIG_REQ(Signal* signal)
ndb_mgm_get_int_parameter(p, CFG_DB_TRANSACTION_DEADLOCK_TIMEOUT, &val);
set_timeout_value(val);
+ val = 1500;
+ ndb_mgm_get_int_parameter(p, CFG_DB_HEARTBEAT_INTERVAL, &val);
+ cDbHbInterval = (val < 10) ? 10 : val;
+
val = 3000;
ndb_mgm_get_int_parameter(p, CFG_DB_TRANSACTION_INACTIVE_TIMEOUT, &val);
set_appl_timeout_value(val);
@@ -2790,9 +2797,9 @@ void Dbtc::execTCKEYREQ(Signal* signal)
Uint8 TNoDiskFlag = TcKeyReq::getNoDiskFlag(Treqinfo);
Uint8 TexecuteFlag = TexecFlag;
- regCachePtr->opSimple = TSimpleFlag;
- regCachePtr->opExec = TInterpretedFlag;
regTcPtr->dirtyOp = TDirtyFlag;
+ regTcPtr->opSimple = TSimpleFlag;
+ regCachePtr->opExec = TInterpretedFlag;
regCachePtr->distributionKeyIndicator = TDistrKeyFlag;
regCachePtr->m_no_disk_flag = TNoDiskFlag;
@@ -3246,9 +3253,10 @@ void Dbtc::sendlqhkeyreq(Signal* signal,
LqhKeyReq::setScanTakeOverFlag(tslrAttrLen, regCachePtr->scanTakeOverInd);
Tdata10 = 0;
- sig0 = regCachePtr->opSimple;
+ sig0 = regTcPtr->opSimple;
sig1 = regTcPtr->operation;
- bool simpleRead = (sig1 == ZREAD && sig0 == ZTRUE);
+ sig2 = regTcPtr->dirtyOp;
+ bool dirtyRead = (sig1 == ZREAD && sig2 == ZTRUE);
LqhKeyReq::setKeyLen(Tdata10, regCachePtr->keylen);
LqhKeyReq::setLastReplicaNo(Tdata10, regTcPtr->lastReplicaNo);
if (unlikely(version < NDBD_ROWID_VERSION))
@@ -3261,7 +3269,7 @@ void Dbtc::sendlqhkeyreq(Signal* signal,
// Indicate Application Reference is present in bit 15
/* ---------------------------------------------------------------------- */
LqhKeyReq::setApplicationAddressFlag(Tdata10, 1);
- LqhKeyReq::setDirtyFlag(Tdata10, regTcPtr->dirtyOp);
+ LqhKeyReq::setDirtyFlag(Tdata10, sig2);
LqhKeyReq::setInterpretedFlag(Tdata10, regCachePtr->opExec);
LqhKeyReq::setSimpleFlag(Tdata10, sig0);
LqhKeyReq::setOperation(Tdata10, sig1);
@@ -3322,7 +3330,7 @@ void Dbtc::sendlqhkeyreq(Signal* signal,
sig5 = regTcPtr->clientData;
sig6 = regCachePtr->scanInfo;
- if (! simpleRead)
+ if (! dirtyRead)
{
regApiPtr->m_transaction_nodes.set(regTcPtr->tcNodedata[0]);
regApiPtr->m_transaction_nodes.set(regTcPtr->tcNodedata[1]);
@@ -3395,7 +3403,6 @@ void Dbtc::packLqhkeyreq040Lab(Signal* signal,
BlockReference TBRef)
{
TcConnectRecord * const regTcPtr = tcConnectptr.p;
- CacheRecord * const regCachePtr = cachePtr.p;
#ifdef ERROR_INSERT
ApiConnectRecord * const regApiPtr = apiConnectptr.p;
if (ERROR_INSERTED(8009)) {
@@ -3420,8 +3427,8 @@ void Dbtc::packLqhkeyreq040Lab(Signal* signal,
if (anAttrBufIndex == RNIL) {
UintR TtcTimer = ctcTimer;
UintR Tread = (regTcPtr->operation == ZREAD);
- UintR Tsimple = (regCachePtr->opSimple == ZTRUE);
- UintR Tboth = Tread & Tsimple;
+ UintR Tdirty = (regTcPtr->dirtyOp == ZTRUE);
+ UintR Tboth = Tread & Tdirty;
setApiConTimer(apiConnectptr.i, TtcTimer, __LINE__);
jam();
/*--------------------------------------------------------------------
@@ -3430,7 +3437,7 @@ void Dbtc::packLqhkeyreq040Lab(Signal* signal,
releaseAttrinfo();
if (Tboth) {
jam();
- releaseSimpleRead(signal, apiConnectptr, tcConnectptr.p);
+ releaseDirtyRead(signal, apiConnectptr, tcConnectptr.p);
return;
}//if
regTcPtr->tcConnectstate = OS_OPERATING;
@@ -3490,11 +3497,11 @@ void Dbtc::releaseAttrinfo()
}//Dbtc::releaseAttrinfo()
/* ========================================================================= */
-/* ------- RELEASE ALL RECORDS CONNECTED TO A SIMPLE OPERATION ------- */
+/* ------- RELEASE ALL RECORDS CONNECTED TO A DIRTY OPERATION ------- */
/* ========================================================================= */
-void Dbtc::releaseSimpleRead(Signal* signal,
- ApiConnectRecordPtr regApiPtr,
- TcConnectRecord* regTcPtr)
+void Dbtc::releaseDirtyRead(Signal* signal,
+ ApiConnectRecordPtr regApiPtr,
+ TcConnectRecord* regTcPtr)
{
Uint32 Ttckeyrec = regApiPtr.p->tckeyrec;
Uint32 TclientData = regTcPtr->clientData;
@@ -3504,7 +3511,7 @@ void Dbtc::releaseSimpleRead(Signal* signal,
ConnectionState state = regApiPtr.p->apiConnectstate;
regApiPtr.p->tcSendArray[Ttckeyrec] = TclientData;
- regApiPtr.p->tcSendArray[Ttckeyrec + 1] = TcKeyConf::SimpleReadBit | Tnode;
+ regApiPtr.p->tcSendArray[Ttckeyrec + 1] = TcKeyConf::DirtyReadBit | Tnode;
regApiPtr.p->tckeyrec = Ttckeyrec + 2;
unlinkReadyTcCon(signal);
@@ -3534,8 +3541,8 @@ void Dbtc::releaseSimpleRead(Signal* signal,
/**
* Emulate LQHKEYCONF
*/
- lqhKeyConf_checkTransactionState(signal, regApiPtr.p);
-}//Dbtc::releaseSimpleRead()
+ lqhKeyConf_checkTransactionState(signal, regApiPtr);
+}//Dbtc::releaseDirtyRead()
/* ------------------------------------------------------------------------- */
/* ------- CHECK IF ALL TC CONNECTIONS ARE COMPLETED ------- */
@@ -3717,12 +3724,13 @@ void Dbtc::execLQHKEYCONF(Signal* signal)
TCKEY_abort(signal, 29);
return;
}//if
- ApiConnectRecord * const regApiPtr =
- &localApiConnectRecord[TapiConnectptrIndex];
+ Ptr<ApiConnectRecord> regApiPtr;
+ regApiPtr.i = TapiConnectptrIndex;
+ regApiPtr.p = &localApiConnectRecord[TapiConnectptrIndex];
apiConnectptr.i = TapiConnectptrIndex;
- apiConnectptr.p = regApiPtr;
- compare_transid1 = regApiPtr->transid[0] ^ Ttrans1;
- compare_transid2 = regApiPtr->transid[1] ^ Ttrans2;
+ apiConnectptr.p = regApiPtr.p;
+ compare_transid1 = regApiPtr.p->transid[0] ^ Ttrans1;
+ compare_transid2 = regApiPtr.p->transid[1] ^ Ttrans2;
compare_transid1 = compare_transid1 | compare_transid2;
if (compare_transid1 != 0) {
warningReport(signal, 24);
@@ -3734,25 +3742,25 @@ void Dbtc::execLQHKEYCONF(Signal* signal)
systemErrorLab(signal, __LINE__);
}//if
if (ERROR_INSERTED(8003)) {
- if (regApiPtr->apiConnectstate == CS_STARTED) {
+ if (regApiPtr.p->apiConnectstate == CS_STARTED) {
CLEAR_ERROR_INSERT_VALUE;
return;
}//if
}//if
if (ERROR_INSERTED(8004)) {
- if (regApiPtr->apiConnectstate == CS_RECEIVING) {
+ if (regApiPtr.p->apiConnectstate == CS_RECEIVING) {
CLEAR_ERROR_INSERT_VALUE;
return;
}//if
}//if
if (ERROR_INSERTED(8005)) {
- if (regApiPtr->apiConnectstate == CS_REC_COMMITTING) {
+ if (regApiPtr.p->apiConnectstate == CS_REC_COMMITTING) {
CLEAR_ERROR_INSERT_VALUE;
return;
}//if
}//if
if (ERROR_INSERTED(8006)) {
- if (regApiPtr->apiConnectstate == CS_START_COMMITTING) {
+ if (regApiPtr.p->apiConnectstate == CS_START_COMMITTING) {
CLEAR_ERROR_INSERT_VALUE;
return;
}//if
@@ -3767,10 +3775,12 @@ void Dbtc::execLQHKEYCONF(Signal* signal)
regTcPtr->lastLqhNodeId = refToNode(tlastLqhBlockref);
regTcPtr->noFiredTriggers = noFired;
- UintR Ttckeyrec = (UintR)regApiPtr->tckeyrec;
+ UintR Ttckeyrec = (UintR)regApiPtr.p->tckeyrec;
UintR TclientData = regTcPtr->clientData;
UintR TdirtyOp = regTcPtr->dirtyOp;
- ConnectionState TapiConnectstate = regApiPtr->apiConnectstate;
+ Uint32 TopSimple = regTcPtr->opSimple;
+ Uint32 Toperation = regTcPtr->operation;
+ ConnectionState TapiConnectstate = regApiPtr.p->apiConnectstate;
if (Ttckeyrec > (ZTCOPCONF_SIZE - 2)) {
TCKEY_abort(signal, 30);
return;
@@ -3795,23 +3805,34 @@ void Dbtc::execLQHKEYCONF(Signal* signal)
* since they will enter execLQHKEYCONF a second time
* Skip counting internally generated TcKeyReq
*/
- regApiPtr->tcSendArray[Ttckeyrec] = TclientData;
- regApiPtr->tcSendArray[Ttckeyrec + 1] = treadlenAi;
- regApiPtr->tckeyrec = Ttckeyrec + 2;
+ regApiPtr.p->tcSendArray[Ttckeyrec] = TclientData;
+ regApiPtr.p->tcSendArray[Ttckeyrec + 1] = treadlenAi;
+ regApiPtr.p->tckeyrec = Ttckeyrec + 2;
}//if
}//if
- if (TdirtyOp == ZTRUE) {
- UintR Tlqhkeyreqrec = regApiPtr->lqhkeyreqrec;
+ if (TdirtyOp == ZTRUE)
+ {
+ UintR Tlqhkeyreqrec = regApiPtr.p->lqhkeyreqrec;
jam();
releaseDirtyWrite(signal);
- regApiPtr->lqhkeyreqrec = Tlqhkeyreqrec - 1;
- } else {
+ regApiPtr.p->lqhkeyreqrec = Tlqhkeyreqrec - 1;
+ }
+ else if (Toperation == ZREAD && TopSimple)
+ {
+ UintR Tlqhkeyreqrec = regApiPtr.p->lqhkeyreqrec;
+ jam();
+ unlinkReadyTcCon(signal);
+ releaseTcCon();
+ regApiPtr.p->lqhkeyreqrec = Tlqhkeyreqrec - 1;
+ }
+ else
+ {
jam();
if (noFired == 0) {
jam();
// No triggers to execute
- UintR Tlqhkeyconfrec = regApiPtr->lqhkeyconfrec;
- regApiPtr->lqhkeyconfrec = Tlqhkeyconfrec + 1;
+ UintR Tlqhkeyconfrec = regApiPtr.p->lqhkeyconfrec;
+ regApiPtr.p->lqhkeyconfrec = Tlqhkeyconfrec + 1;
regTcPtr->tcConnectstate = OS_PREPARED;
}
}//if
@@ -3841,21 +3862,18 @@ void Dbtc::execLQHKEYCONF(Signal* signal)
jam();
if (regTcPtr->isIndexOp) {
jam();
- setupIndexOpReturn(regApiPtr, regTcPtr);
+ setupIndexOpReturn(regApiPtr.p, regTcPtr);
}
lqhKeyConf_checkTransactionState(signal, regApiPtr);
} else {
// We have fired triggers
jam();
saveTriggeringOpState(signal, regTcPtr);
- if (regTcPtr->noReceivedTriggers == noFired) {
- ApiConnectRecordPtr transPtr;
-
+ if (regTcPtr->noReceivedTriggers == noFired)
+ {
// We have received all data
jam();
- transPtr.i = TapiConnectptrIndex;
- transPtr.p = regApiPtr;
- executeTriggers(signal, &transPtr);
+ executeTriggers(signal, &regApiPtr);
}
// else wait for more trigger data
}
@@ -3879,7 +3897,7 @@ void Dbtc::setupIndexOpReturn(ApiConnectRecord* regApiPtr,
*/
void
Dbtc::lqhKeyConf_checkTransactionState(Signal * signal,
- ApiConnectRecord * const apiConnectPtrP)
+ Ptr<ApiConnectRecord> regApiPtr)
{
/*---------------------------------------------------------------*/
/* IF THE COMMIT FLAG IS SET IN SIGNAL TCKEYREQ THEN DBTC HAS TO */
@@ -3890,9 +3908,9 @@ Dbtc::lqhKeyConf_checkTransactionState(Signal * signal,
/* FOR ALL OPERATIONS, AND THEN WAIT FOR THE API TO CONCLUDE THE */
/* TRANSACTION */
/*---------------------------------------------------------------*/
- ConnectionState TapiConnectstate = apiConnectPtrP->apiConnectstate;
- UintR Tlqhkeyconfrec = apiConnectPtrP->lqhkeyconfrec;
- UintR Tlqhkeyreqrec = apiConnectPtrP->lqhkeyreqrec;
+ ConnectionState TapiConnectstate = regApiPtr.p->apiConnectstate;
+ UintR Tlqhkeyconfrec = regApiPtr.p->lqhkeyconfrec;
+ UintR Tlqhkeyreqrec = regApiPtr.p->lqhkeyreqrec;
int TnoOfOutStanding = Tlqhkeyreqrec - Tlqhkeyconfrec;
switch (TapiConnectstate) {
@@ -3902,11 +3920,11 @@ Dbtc::lqhKeyConf_checkTransactionState(Signal * signal,
diverify010Lab(signal);
return;
} else if (TnoOfOutStanding > 0) {
- if (apiConnectPtrP->tckeyrec == ZTCOPCONF_SIZE) {
+ if (regApiPtr.p->tckeyrec == ZTCOPCONF_SIZE) {
jam();
sendtckeyconf(signal, 0);
return;
- } else if (apiConnectPtrP->indexOpReturn) {
+ } else if (regApiPtr.p->indexOpReturn) {
jam();
sendtckeyconf(signal, 0);
return;
@@ -3925,11 +3943,11 @@ Dbtc::lqhKeyConf_checkTransactionState(Signal * signal,
sendtckeyconf(signal, 2);
return;
} else {
- if (apiConnectPtrP->tckeyrec == ZTCOPCONF_SIZE) {
+ if (regApiPtr.p->tckeyrec == ZTCOPCONF_SIZE) {
jam();
sendtckeyconf(signal, 0);
return;
- } else if (apiConnectPtrP->indexOpReturn) {
+ } else if (regApiPtr.p->indexOpReturn) {
jam();
sendtckeyconf(signal, 0);
return;
@@ -3939,11 +3957,11 @@ Dbtc::lqhKeyConf_checkTransactionState(Signal * signal,
return;
case CS_REC_COMMITTING:
if (TnoOfOutStanding > 0) {
- if (apiConnectPtrP->tckeyrec == ZTCOPCONF_SIZE) {
+ if (regApiPtr.p->tckeyrec == ZTCOPCONF_SIZE) {
jam();
sendtckeyconf(signal, 0);
return;
- } else if (apiConnectPtrP->indexOpReturn) {
+ } else if (regApiPtr.p->indexOpReturn) {
jam();
sendtckeyconf(signal, 0);
return;
@@ -3960,7 +3978,7 @@ Dbtc::lqhKeyConf_checkTransactionState(Signal * signal,
/* CONSISTING OF DIRTY WRITES AND ALL OF THOSE WERE */
/* COMPLETED. ENSURE TCKEYREC IS ZERO TO PREVENT ERRORS. */
/*---------------------------------------------------------------*/
- apiConnectPtrP->tckeyrec = 0;
+ regApiPtr.p->tckeyrec = 0;
return;
default:
TCKEY_abort(signal, 46);
@@ -4218,34 +4236,46 @@ void Dbtc::diverify010Lab(Signal* signal)
jam();
systemErrorLab(signal, __LINE__);
}//if
- if (TfirstfreeApiConnectCopy != RNIL) {
- seizeApiConnectCopy(signal);
- regApiPtr->apiConnectstate = CS_PREPARE_TO_COMMIT;
- /*-----------------------------------------------------------------------
- * WE COME HERE ONLY IF THE TRANSACTION IS PREPARED ON ALL TC CONNECTIONS.
- * THUS WE CAN START THE COMMIT PHASE BY SENDING DIVERIFY ON ALL TC
- * CONNECTIONS AND THEN WHEN ALL DIVERIFYCONF HAVE BEEN RECEIVED THE
- * COMMIT MESSAGE CAN BE SENT TO ALL INVOLVED PARTS.
- *-----------------------------------------------------------------------*/
- EXECUTE_DIRECT(DBDIH, GSN_DIVERIFYREQ, signal, 1);
- if (signal->theData[2] == 0) {
- execDIVERIFYCONF(signal);
+
+ if (regApiPtr->lqhkeyreqrec)
+ {
+ if (TfirstfreeApiConnectCopy != RNIL) {
+ seizeApiConnectCopy(signal);
+ regApiPtr->apiConnectstate = CS_PREPARE_TO_COMMIT;
+ /*-----------------------------------------------------------------------
+ * WE COME HERE ONLY IF THE TRANSACTION IS PREPARED ON ALL TC CONNECTIONS
+ * THUS WE CAN START THE COMMIT PHASE BY SENDING DIVERIFY ON ALL TC
+ * CONNECTIONS AND THEN WHEN ALL DIVERIFYCONF HAVE BEEN RECEIVED THE
+ * COMMIT MESSAGE CAN BE SENT TO ALL INVOLVED PARTS.
+ *---------------------------------------------------------------------*/
+ EXECUTE_DIRECT(DBDIH, GSN_DIVERIFYREQ, signal, 1);
+ if (signal->theData[2] == 0) {
+ execDIVERIFYCONF(signal);
+ }
+ return;
+ } else {
+ /*-----------------------------------------------------------------------
+ * There were no free copy connections available. We must abort the
+ * transaction since otherwise we will have a problem with the report
+ * to the application.
+ * This should more or less not happen but if it happens we do
+ * not want to crash and we do not want to create code to handle it
+ * properly since it is difficult to test it and will be complex to
+ * handle a problem more or less not occurring.
+ *---------------------------------------------------------------------*/
+ terrorCode = ZSEIZE_API_COPY_ERROR;
+ abortErrorLab(signal);
+ return;
}
- return;
- } else {
- /*-----------------------------------------------------------------------
- * There were no free copy connections available. We must abort the
- * transaction since otherwise we will have a problem with the report
- * to the application.
- * This should more or less not happen but if it happens we do not want to
- * crash and we do not want to create code to handle it properly since
- * it is difficult to test it and will be complex to handle a problem
- * more or less not occurring.
- *-----------------------------------------------------------------------*/
- terrorCode = ZSEIZE_API_COPY_ERROR;
- abortErrorLab(signal);
- return;
- }//if
+ }
+ else
+ {
+ jam();
+ sendtckeyconf(signal, 1);
+ regApiPtr->apiConnectstate = CS_CONNECTED;
+ regApiPtr->m_transaction_nodes.clear();
+ setApiConTimer(apiConnectptr.i, 0,__LINE__);
+ }
}//Dbtc::diverify010Lab()
/* ------------------------------------------------------------------------- */
@@ -5093,6 +5123,7 @@ void Dbtc::releaseDirtyWrite(Signal* signal)
void Dbtc::execLQHKEYREF(Signal* signal)
{
const LqhKeyRef * const lqhKeyRef = (LqhKeyRef *)signal->getDataPtr();
+ Uint32 indexId = 0;
jamEntry();
UintR compare_transid1, compare_transid2;
@@ -5144,6 +5175,9 @@ void Dbtc::execLQHKEYREF(Signal* signal)
ptrCheckGuard(opPtr, ctcConnectFilesize, localTcConnectRecord);
// The operation executed an index trigger
+ TcIndexData* indexData = c_theIndexes.getPtr(currentIndexId);
+ indexId = indexData->indexId;
+ regApiPtr->errorData = indexId;
const Uint32 opType = regTcPtr->operation;
if (errCode == ZALREADYEXIST)
errCode = terrorCode = ZNOTUNIQUE;
@@ -5156,7 +5190,6 @@ void Dbtc::execLQHKEYREF(Signal* signal)
} else {
jam();
/** ZDELETE && NOT_FOUND */
- TcIndexData* indexData = c_theIndexes.getPtr(currentIndexId);
if(indexData->indexState == IS_BUILDING && state != CS_ABORTING){
jam();
/**
@@ -5241,12 +5274,14 @@ void Dbtc::execLQHKEYREF(Signal* signal)
jam();
regApiPtr->lqhkeyreqrec--; // Compensate for extra during read
tcKeyRef->connectPtr = indexOp;
+ tcKeyRef->errorData = indexId;
EXECUTE_DIRECT(DBTC, GSN_TCKEYREF, signal, TcKeyRef::SignalLength);
apiConnectptr.i = save;
apiConnectptr.p = regApiPtr;
} else {
jam();
tcKeyRef->connectPtr = clientData;
+ tcKeyRef->errorData = indexId;
sendSignal(regApiPtr->ndbapiBlockref,
GSN_TCKEYREF, signal, TcKeyRef::SignalLength, JBB);
}//if
@@ -5260,16 +5295,8 @@ void Dbtc::execLQHKEYREF(Signal* signal)
regApiPtr->lqhkeyreqrec--;
if (regApiPtr->lqhkeyconfrec == regApiPtr->lqhkeyreqrec) {
if (regApiPtr->apiConnectstate == CS_START_COMMITTING) {
- if(regApiPtr->lqhkeyconfrec) {
- jam();
- diverify010Lab(signal);
- } else {
- jam();
- sendtckeyconf(signal, 1);
- regApiPtr->apiConnectstate = CS_CONNECTED;
- regApiPtr->m_transaction_nodes.clear();
- setApiConTimer(apiConnectptr.i, 0,__LINE__);
- }
+ jam();
+ diverify010Lab(signal);
return;
} else if (regApiPtr->tckeyrec > 0 || regApiPtr->m_exec_flag) {
jam();
@@ -6278,7 +6305,7 @@ void Dbtc::timeOutLoopStartLab(Signal* signal, Uint32 api_con_ptr)
jam();
if (api_timer != 0) {
Uint32 error= ZTIME_OUT_ERROR;
- time_out_value= time_out_param + (api_con_ptr & mask_value);
+ time_out_value= time_out_param + (ndb_rand() & mask_value);
if (unlikely(old_mask_value)) // abort during single user mode
{
apiConnectptr.i = api_con_ptr;
@@ -6384,6 +6411,7 @@ void Dbtc::timeOutFoundLab(Signal* signal, Uint32 TapiConPtr, Uint32 errCode)
// conditions should get us here. We ignore it.
/*------------------------------------------------------------------*/
case CS_PREPARE_TO_COMMIT:
+ {
jam();
/*------------------------------------------------------------------*/
/* WE ARE WAITING FOR DIH TO COMMIT THE TRANSACTION. WE SIMPLY*/
@@ -6392,12 +6420,16 @@ void Dbtc::timeOutFoundLab(Signal* signal, Uint32 TapiConPtr, Uint32 errCode)
// To ensure against strange bugs we crash the system if we have passed
// time-out period by a factor of 10 and it is also at least 5 seconds.
/*------------------------------------------------------------------*/
- if (((ctcTimer - getApiConTimer(apiConnectptr.i)) > (10 * ctimeOutValue)) &&
- ((ctcTimer - getApiConTimer(apiConnectptr.i)) > 500)) {
- jam();
- systemErrorLab(signal, __LINE__);
+ Uint32 time_passed = ctcTimer - getApiConTimer(apiConnectptr.i);
+ if (time_passed > 500 &&
+ time_passed > (5 * cDbHbInterval) &&
+ time_passed > (10 * ctimeOutValue))
+ {
+ jam();
+ systemErrorLab(signal, __LINE__);
}//if
break;
+ }
case CS_COMMIT_SENT:
jam();
/*------------------------------------------------------------------*/
@@ -6481,6 +6513,7 @@ void Dbtc::timeOutFoundLab(Signal* signal, Uint32 TapiConPtr, Uint32 errCode)
return;
case CS_WAIT_COMMIT_CONF:
jam();
+ CRASH_INSERTION(8053);
tcConnectptr.i = apiConnectptr.p->currentTcConnect;
ptrCheckGuard(tcConnectptr, ctcConnectFilesize, tcConnectRecord);
arrGuard(apiConnectptr.p->currentReplicaNo, MAX_REPLICAS);
@@ -10554,6 +10587,7 @@ void Dbtc::releaseAbortResources(Signal* signal)
tcRollbackRep->transId[0] = apiConnectptr.p->transid[0];
tcRollbackRep->transId[1] = apiConnectptr.p->transid[1];
tcRollbackRep->returnCode = apiConnectptr.p->returncode;
+ tcRollbackRep->errorData = apiConnectptr.p->errorData;
sendSignal(blockRef, GSN_TCROLLBACKREP, signal,
TcRollbackRep::SignalLength, JBB);
}
@@ -11978,6 +12012,7 @@ void Dbtc::execTCKEYCONF(Signal* signal)
tcIndxRef->transId[0] = regApiPtr->transid[0];
tcIndxRef->transId[1] = regApiPtr->transid[1];
tcIndxRef->errorCode = 4349;
+ tcIndxRef->errorData = 0;
sendSignal(regApiPtr->ndbapiBlockref, GSN_TCINDXREF, signal,
TcKeyRef::SignalLength, JBB);
return;
@@ -11997,6 +12032,7 @@ void Dbtc::execTCKEYCONF(Signal* signal)
tcIndxRef->transId[0] = regApiPtr->transid[0];
tcIndxRef->transId[1] = regApiPtr->transid[1];
tcIndxRef->errorCode = 4349;
+ tcIndxRef->errorData = 0;
sendSignal(regApiPtr->ndbapiBlockref, GSN_TCINDXREF, signal,
TcKeyRef::SignalLength, JBB);
return;
@@ -12080,6 +12116,7 @@ void Dbtc::execTCKEYREF(Signal* signal)
tcIndxRef->transId[0] = tcKeyRef->transId[0];
tcIndxRef->transId[1] = tcKeyRef->transId[1];
tcIndxRef->errorCode = tcKeyRef->errorCode;
+ tcIndxRef->errorData = 0;
releaseIndexOperation(regApiPtr, indexOp);
@@ -12157,6 +12194,7 @@ void Dbtc::execTRANSID_AI(Signal* signal)
tcIndxRef->transId[0] = regApiPtr->transid[0];
tcIndxRef->transId[1] = regApiPtr->transid[1];
tcIndxRef->errorCode = 4000;
+ tcIndxRef->errorData = 0;
sendSignal(regApiPtr->ndbapiBlockref, GSN_TCINDXREF, signal,
TcKeyRef::SignalLength, JBB);
return;
@@ -12172,6 +12210,7 @@ void Dbtc::execTRANSID_AI(Signal* signal)
tcIndxRef->transId[0] = regApiPtr->transid[0];
tcIndxRef->transId[1] = regApiPtr->transid[1];
tcIndxRef->errorCode = 4349;
+ tcIndxRef->errorData = 0;
sendSignal(regApiPtr->ndbapiBlockref, GSN_TCINDXREF, signal,
TcKeyRef::SignalLength, JBB);
return;
@@ -12200,6 +12239,7 @@ void Dbtc::execTRANSID_AI(Signal* signal)
tcIndxRef->transId[0] = regApiPtr->transid[0];
tcIndxRef->transId[1] = regApiPtr->transid[1];
tcIndxRef->errorCode = 4349;
+ tcIndxRef->errorData = 0;
sendSignal(regApiPtr->ndbapiBlockref, GSN_TCINDXREF, signal,
TcKeyRef::SignalLength, JBB);
*/
@@ -12225,6 +12265,7 @@ void Dbtc::execTRANSID_AI(Signal* signal)
tcIndxRef->transId[0] = regApiPtr->transid[0];
tcIndxRef->transId[1] = regApiPtr->transid[1];
tcIndxRef->errorCode = 4349;
+ tcIndxRef->errorData = regApiPtr->errorData;
sendSignal(regApiPtr->ndbapiBlockref, GSN_TCINDXREF, signal,
TcKeyRef::SignalLength, JBB);
return;
@@ -12278,6 +12319,7 @@ void Dbtc::readIndexTable(Signal* signal,
tcIndxRef->transId[0] = regApiPtr->transid[0];
tcIndxRef->transId[1] = regApiPtr->transid[1];
tcIndxRef->errorCode = 4000;
+ // tcIndxRef->errorData = ??; Where to find indexId
sendSignal(regApiPtr->ndbapiBlockref, GSN_TCINDXREF, signal,
TcKeyRef::SignalLength, JBB);
return;
@@ -12424,6 +12466,7 @@ void Dbtc::executeIndexOperation(Signal* signal,
tcIndxRef->transId[0] = regApiPtr->transid[0];
tcIndxRef->transId[1] = regApiPtr->transid[1];
tcIndxRef->errorCode = 4349;
+ tcIndxRef->errorData = 0;
sendSignal(regApiPtr->ndbapiBlockref, GSN_TCINDXREF, signal,
TcKeyRef::SignalLength, JBB);
return;
diff --git a/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp b/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp
index f28687dca0d..45d124b8d7d 100644
--- a/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp
+++ b/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp
@@ -518,6 +518,7 @@ typedef Ptr<Fragoperrec> FragoperrecPtr;
Uint32 m_savePointId;
Uint32 m_scanGCI;
};
+ Uint32 m_endPage;
// lock waited for or obtained and not yet passed to LQH
Uint32 m_accLockOp;
@@ -641,6 +642,8 @@ typedef Ptr<Fragoperrec> FragoperrecPtr;
*/
Page_request_list::Head m_page_requests[MAX_FREE_LIST];
+ DLList<Page>::Head m_unmap_pages;
+
/**
* Current extent
*/
@@ -702,7 +705,8 @@ struct Fragrecord {
DLList<ScanOp>::Head m_scanList;
- enum { UC_LCP = 1, UC_CREATE = 2 };
+ enum { UC_LCP = 1, UC_CREATE = 2, UC_SET_LCP = 3 };
+ Uint32 m_restore_lcp_id;
Uint32 m_undo_complete;
Uint32 m_tablespace_id;
Uint32 m_logfile_group_id;
@@ -1573,6 +1577,8 @@ public:
void nr_delete_page_callback(Signal*, Uint32 op, Uint32 page);
void nr_delete_log_buffer_callback(Signal*, Uint32 op, Uint32 page);
+
+ bool get_frag_info(Uint32 tableId, Uint32 fragId, Uint32* maxPage);
private:
BLOCK_DEFINES(Dbtup);
@@ -2830,7 +2836,7 @@ private:
public:
int disk_page_load_hook(Uint32 page_id);
- void disk_page_unmap_callback(Uint32 page_id, Uint32 dirty_count);
+ void disk_page_unmap_callback(Uint32 when, Uint32 page, Uint32 dirty_count);
int disk_restart_alloc_extent(Uint32 tableId, Uint32 fragId,
const Local_key* key, Uint32 pages);
@@ -2851,11 +2857,11 @@ public:
Local_key m_key;
};
- void disk_restart_mark_no_lcp(Uint32 table, Uint32 frag);
+ void disk_restart_lcp_id(Uint32 table, Uint32 frag, Uint32 lcpId);
private:
void disk_restart_undo_next(Signal*);
- void disk_restart_undo_lcp(Uint32, Uint32, Uint32 flag);
+ void disk_restart_undo_lcp(Uint32, Uint32, Uint32 flag, Uint32 lcpId);
void disk_restart_undo_callback(Signal* signal, Uint32, Uint32);
void disk_restart_undo_alloc(Apply_undo*);
void disk_restart_undo_update(Apply_undo*);
diff --git a/storage/ndb/src/kernel/blocks/dbtup/DbtupDiskAlloc.cpp b/storage/ndb/src/kernel/blocks/dbtup/DbtupDiskAlloc.cpp
index 87705232de2..8420e7f2bde 100644
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupDiskAlloc.cpp
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupDiskAlloc.cpp
@@ -903,8 +903,10 @@ Dbtup::disk_page_set_dirty(PagePtr pagePtr)
}
void
-Dbtup::disk_page_unmap_callback(Uint32 page_id, Uint32 dirty_count)
+Dbtup::disk_page_unmap_callback(Uint32 when,
+ Uint32 page_id, Uint32 dirty_count)
{
+ jamEntry();
Ptr<GlobalPage> gpage;
m_global_page_pool.getPtr(gpage, page_id);
PagePtr pagePtr;
@@ -918,17 +920,9 @@ Dbtup::disk_page_unmap_callback(Uint32 page_id, Uint32 dirty_count)
{
return ;
}
-
- Local_key key;
- key.m_page_no = pagePtr.p->m_page_no;
- key.m_file_no = pagePtr.p->m_file_no;
- Uint32 idx = pagePtr.p->list_index;
- ndbassert((idx & 0x8000) == 0);
+ Uint32 idx = pagePtr.p->list_index;
- if (DBG_DISK)
- ndbout << "disk_page_unmap_callback " << key << endl;
-
Ptr<Tablerec> tabPtr;
tabPtr.i= pagePtr.p->m_table_id;
ptrCheckGuard(tabPtr, cnoOfTablerec, tablerec);
@@ -938,26 +932,89 @@ Dbtup::disk_page_unmap_callback(Uint32 page_id, Uint32 dirty_count)
Disk_alloc_info& alloc= fragPtr.p->m_disk_alloc_info;
- if (dirty_count == 0)
+ if (when == 0)
{
- Uint32 free = pagePtr.p->free_space;
- Uint32 used = pagePtr.p->uncommitted_used_space;
- ddassert(free >= used);
- ddassert(alloc.calc_page_free_bits(free - used) == idx);
+ /**
+ * Before pageout
+ */
+ jam();
+
+ if (DBG_DISK)
+ {
+ Local_key key;
+ key.m_page_no = pagePtr.p->m_page_no;
+ key.m_file_no = pagePtr.p->m_file_no;
+ ndbout << "disk_page_unmap_callback(before) " << key
+ << " cnt: " << dirty_count << " " << (idx & ~0x8000) << endl;
+ }
+
+ ndbassert((idx & 0x8000) == 0);
+
+ ArrayPool<Page> *pool= (ArrayPool<Page>*)&m_global_page_pool;
+ LocalDLList<Page> list(*pool, alloc.m_dirty_pages[idx]);
+ LocalDLList<Page> list2(*pool, alloc.m_unmap_pages);
+ list.remove(pagePtr);
+ list2.add(pagePtr);
+
+ if (dirty_count == 0)
+ {
+ jam();
+ pagePtr.p->list_index = idx | 0x8000;
+
+ Local_key key;
+ key.m_page_no = pagePtr.p->m_page_no;
+ key.m_file_no = pagePtr.p->m_file_no;
+
+ Uint32 free = pagePtr.p->free_space;
+ Uint32 used = pagePtr.p->uncommitted_used_space;
+ ddassert(free >= used);
+ ddassert(alloc.calc_page_free_bits(free - used) == idx);
+
+ Tablespace_client tsman(0, c_tsman,
+ fragPtr.p->fragTableId,
+ fragPtr.p->fragmentId,
+ fragPtr.p->m_tablespace_id);
+
+ tsman.unmap_page(&key, idx);
+ jamEntry();
+ }
+ }
+ else if (when == 1)
+ {
+ /**
+ * After page out
+ */
+ jam();
+
+ Local_key key;
+ key.m_page_no = pagePtr.p->m_page_no;
+ key.m_file_no = pagePtr.p->m_file_no;
+ Uint32 real_free = pagePtr.p->free_space;
+ if (DBG_DISK)
+ {
+ ndbout << "disk_page_unmap_callback(after) " << key
+ << " cnt: " << dirty_count << " " << (idx & ~0x8000) << endl;
+ }
+
+ ArrayPool<Page> *pool= (ArrayPool<Page>*)&m_global_page_pool;
+ LocalDLList<Page> list(*pool, alloc.m_unmap_pages);
+ list.remove(pagePtr);
+
Tablespace_client tsman(0, c_tsman,
fragPtr.p->fragTableId,
fragPtr.p->fragmentId,
fragPtr.p->m_tablespace_id);
- tsman.unmap_page(&key, idx);
- jamEntry();
- pagePtr.p->list_index = idx | 0x8000;
+ if (DBG_DISK && alloc.calc_page_free_bits(real_free) != (idx & ~0x8000))
+ {
+ ndbout << key
+ << " calc: " << alloc.calc_page_free_bits(real_free)
+ << " idx: " << (idx & ~0x8000)
+ << endl;
+ }
+ tsman.update_page_free_bits(&key, alloc.calc_page_free_bits(real_free));
}
-
- ArrayPool<Page> *pool= (ArrayPool<Page>*)&m_global_page_pool;
- LocalDLList<Page> list(*pool, alloc.m_dirty_pages[idx]);
- list.remove(pagePtr);
}
void
@@ -969,8 +1026,6 @@ Dbtup::disk_page_alloc(Signal* signal,
Disk_alloc_info& alloc= fragPtrP->m_disk_alloc_info;
Uint64 lsn;
- Uint32 old_free = pagePtr.p->free_space;
- Uint32 old_bits= alloc.calc_page_free_bits(old_free);
if (tabPtrP->m_attributes[DD].m_no_of_varsize == 0)
{
ddassert(pagePtr.p->uncommitted_used_space > 0);
@@ -988,20 +1043,6 @@ Dbtup::disk_page_alloc(Signal* signal,
lsn= disk_page_undo_alloc(pagePtr.p, key, sz, gci, logfile_group_id);
}
-
- Uint32 new_free = pagePtr.p->free_space;
- Uint32 new_bits= alloc.calc_page_free_bits(new_free);
-
- if (old_bits != new_bits)
- {
- Tablespace_client tsman(signal, c_tsman,
- fragPtrP->fragTableId,
- fragPtrP->fragmentId,
- fragPtrP->m_tablespace_id);
-
- tsman.update_page_free_bits(key, new_bits, lsn);
- jamEntry();
- }
}
void
@@ -1016,7 +1057,6 @@ Dbtup::disk_page_free(Signal *signal,
Uint32 logfile_group_id= fragPtrP->m_logfile_group_id;
Disk_alloc_info& alloc= fragPtrP->m_disk_alloc_info;
Uint32 old_free= pagePtr.p->free_space;
- Uint32 old_bits= alloc.calc_page_free_bits(old_free);
Uint32 sz;
Uint64 lsn;
@@ -1043,19 +1083,7 @@ Dbtup::disk_page_free(Signal *signal,
}
Uint32 new_free = pagePtr.p->free_space;
- Uint32 new_bits = alloc.calc_page_free_bits(new_free);
- if (old_bits != new_bits)
- {
- Tablespace_client tsman(signal, c_tsman,
- fragPtrP->fragTableId,
- fragPtrP->fragmentId,
- fragPtrP->m_tablespace_id);
-
- tsman.update_page_free_bits(key, new_bits, lsn);
- jamEntry();
- }
-
Uint32 ext = pagePtr.p->m_extent_info_ptr;
Uint32 used = pagePtr.p->uncommitted_used_space;
Uint32 old_idx = pagePtr.p->list_index;
@@ -1341,15 +1369,23 @@ Dbtup::disk_restart_undo(Signal* signal, Uint64 lsn,
case File_formats::Undofile::UNDO_LCP_FIRST:
case File_formats::Undofile::UNDO_LCP:
{
+ jam();
ndbrequire(len == 3);
+ Uint32 lcp = ptr[0];
Uint32 tableId = ptr[1] >> 16;
Uint32 fragId = ptr[1] & 0xFFFF;
- disk_restart_undo_lcp(tableId, fragId, Fragrecord::UC_LCP);
+ disk_restart_undo_lcp(tableId, fragId, Fragrecord::UC_LCP, lcp);
disk_restart_undo_next(signal);
+
+ if (DBG_UNDO)
+ {
+ ndbout_c("UNDO LCP %u (%u, %u)", lcp, tableId, fragId);
+ }
return;
}
case File_formats::Undofile::UNDO_TUP_ALLOC:
{
+ jam();
Disk_undo::Alloc* rec= (Disk_undo::Alloc*)ptr;
preq.m_page.m_page_no = rec->m_page_no;
preq.m_page.m_file_no = rec->m_file_no_page_idx >> 16;
@@ -1358,6 +1394,7 @@ Dbtup::disk_restart_undo(Signal* signal, Uint64 lsn,
}
case File_formats::Undofile::UNDO_TUP_UPDATE:
{
+ jam();
Disk_undo::Update* rec= (Disk_undo::Update*)ptr;
preq.m_page.m_page_no = rec->m_page_no;
preq.m_page.m_file_no = rec->m_file_no_page_idx >> 16;
@@ -1366,6 +1403,7 @@ Dbtup::disk_restart_undo(Signal* signal, Uint64 lsn,
}
case File_formats::Undofile::UNDO_TUP_FREE:
{
+ jam();
Disk_undo::Free* rec= (Disk_undo::Free*)ptr;
preq.m_page.m_page_no = rec->m_page_no;
preq.m_page.m_file_no = rec->m_file_no_page_idx >> 16;
@@ -1377,6 +1415,7 @@ Dbtup::disk_restart_undo(Signal* signal, Uint64 lsn,
*
*/
{
+ jam();
Disk_undo::Create* rec= (Disk_undo::Create*)ptr;
Ptr<Tablerec> tabPtr;
tabPtr.i= rec->m_table;
@@ -1384,12 +1423,34 @@ Dbtup::disk_restart_undo(Signal* signal, Uint64 lsn,
for(Uint32 i = 0; i<MAX_FRAG_PER_NODE; i++)
if (tabPtr.p->fragrec[i] != RNIL)
disk_restart_undo_lcp(tabPtr.i, tabPtr.p->fragid[i],
- Fragrecord::UC_CREATE);
+ Fragrecord::UC_CREATE, 0);
disk_restart_undo_next(signal);
+
+ if (DBG_UNDO)
+ {
+ ndbout_c("UNDO CREATE (%u)", tabPtr.i);
+ }
return;
}
case File_formats::Undofile::UNDO_TUP_DROP:
+ {
jam();
+ Disk_undo::Drop* rec = (Disk_undo::Drop*)ptr;
+ Ptr<Tablerec> tabPtr;
+ tabPtr.i= rec->m_table;
+ ptrCheckGuard(tabPtr, cnoOfTablerec, tablerec);
+ for(Uint32 i = 0; i<MAX_FRAG_PER_NODE; i++)
+ if (tabPtr.p->fragrec[i] != RNIL)
+ disk_restart_undo_lcp(tabPtr.i, tabPtr.p->fragid[i],
+ Fragrecord::UC_CREATE, 0);
+ disk_restart_undo_next(signal);
+
+ if (DBG_UNDO)
+ {
+ ndbout_c("UNDO DROP (%u)", tabPtr.i);
+ }
+ return;
+ }
case File_formats::Undofile::UNDO_TUP_ALLOC_EXTENT:
jam();
case File_formats::Undofile::UNDO_TUP_FREE_EXTENT:
@@ -1398,6 +1459,7 @@ Dbtup::disk_restart_undo(Signal* signal, Uint64 lsn,
return;
case File_formats::Undofile::UNDO_END:
+ jam();
f_undo_done = true;
return;
default:
@@ -1431,14 +1493,32 @@ Dbtup::disk_restart_undo_next(Signal* signal)
}
void
-Dbtup::disk_restart_mark_no_lcp(Uint32 tableId, Uint32 fragId)
+Dbtup::disk_restart_lcp_id(Uint32 tableId, Uint32 fragId, Uint32 lcpId)
{
jamEntry();
- disk_restart_undo_lcp(tableId, fragId, Fragrecord::UC_CREATE);
+
+ if (lcpId == RNIL)
+ {
+ disk_restart_undo_lcp(tableId, fragId, Fragrecord::UC_CREATE, 0);
+ if (DBG_UNDO)
+ {
+ ndbout_c("mark_no_lcp (%u, %u)", tableId, fragId);
+ }
+ }
+ else
+ {
+ disk_restart_undo_lcp(tableId, fragId, Fragrecord::UC_SET_LCP, lcpId);
+ if (DBG_UNDO)
+ {
+ ndbout_c("mark_no_lcp (%u, %u)", tableId, fragId);
+ }
+
+ }
}
void
-Dbtup::disk_restart_undo_lcp(Uint32 tableId, Uint32 fragId, Uint32 flag)
+Dbtup::disk_restart_undo_lcp(Uint32 tableId, Uint32 fragId, Uint32 flag,
+ Uint32 lcpId)
{
Ptr<Tablerec> tabPtr;
tabPtr.i= tableId;
@@ -1446,11 +1526,43 @@ Dbtup::disk_restart_undo_lcp(Uint32 tableId, Uint32 fragId, Uint32 flag)
if (tabPtr.p->tableStatus == DEFINED)
{
+ jam();
FragrecordPtr fragPtr;
getFragmentrec(fragPtr, fragId, tabPtr.p);
if (!fragPtr.isNull())
{
- fragPtr.p->m_undo_complete |= flag;
+ jam();
+ switch(flag){
+ case Fragrecord::UC_CREATE:
+ jam();
+ fragPtr.p->m_undo_complete |= flag;
+ return;
+ case Fragrecord::UC_LCP:
+ jam();
+ if (fragPtr.p->m_undo_complete == 0 &&
+ fragPtr.p->m_restore_lcp_id == lcpId)
+ {
+ jam();
+ fragPtr.p->m_undo_complete |= flag;
+ if (DBG_UNDO)
+ ndbout_c("table: %u fragment: %u lcp: %u -> done",
+ tableId, fragId, lcpId);
+ }
+ return;
+ case Fragrecord::UC_SET_LCP:
+ {
+ jam();
+ if (DBG_UNDO)
+ ndbout_c("table: %u fragment: %u restore to lcp: %u",
+ tableId, fragId, lcpId);
+ ndbrequire(fragPtr.p->m_undo_complete == 0);
+ ndbrequire(fragPtr.p->m_restore_lcp_id == RNIL);
+ fragPtr.p->m_restore_lcp_id = lcpId;
+ return;
+ }
+ }
+ jamLine(flag);
+ ndbrequire(false);
}
}
}
@@ -1474,6 +1586,7 @@ Dbtup::disk_restart_undo_callback(Signal* signal,
pagePtr.p->nextList != RNIL ||
pagePtr.p->prevList != RNIL)
{
+ jam();
update = true;
pagePtr.p->list_index |= 0x8000;
pagePtr.p->nextList = pagePtr.p->prevList = RNIL;
@@ -1484,6 +1597,9 @@ Dbtup::disk_restart_undo_callback(Signal* signal,
if (tableId >= cnoOfTablerec)
{
+ jam();
+ if (DBG_UNDO)
+ ndbout_c("UNDO table> %u", tableId);
disk_restart_undo_next(signal);
return;
}
@@ -1492,6 +1608,9 @@ Dbtup::disk_restart_undo_callback(Signal* signal,
if (undo->m_table_ptr.p->tableStatus != DEFINED)
{
+ jam();
+ if (DBG_UNDO)
+ ndbout_c("UNDO !defined (%u) ", tableId);
disk_restart_undo_next(signal);
return;
}
@@ -1499,19 +1618,25 @@ Dbtup::disk_restart_undo_callback(Signal* signal,
getFragmentrec(undo->m_fragment_ptr, fragId, undo->m_table_ptr.p);
if(undo->m_fragment_ptr.isNull())
{
+ jam();
+ if (DBG_UNDO)
+ ndbout_c("UNDO fragment null %u/%u", tableId, fragId);
disk_restart_undo_next(signal);
return;
}
if (undo->m_fragment_ptr.p->m_undo_complete)
{
+ jam();
+ if (DBG_UNDO)
+ ndbout_c("UNDO undo complete %u/%u", tableId, fragId);
disk_restart_undo_next(signal);
return;
}
- Local_key key;
- key.m_page_no = pagePtr.p->m_page_no;
- key.m_file_no = pagePtr.p->m_file_no;
+ Local_key key = undo->m_key;
+// key.m_page_no = pagePtr.p->m_page_no;
+// key.m_file_no = pagePtr.p->m_file_no;
Uint64 lsn = 0;
lsn += pagePtr.p->m_page_header.m_page_lsn_hi; lsn <<= 32;
@@ -1521,6 +1646,7 @@ Dbtup::disk_restart_undo_callback(Signal* signal,
if (undo->m_lsn <= lsn)
{
+ jam();
if (DBG_UNDO)
{
ndbout << "apply: " << undo->m_lsn << "(" << lsn << " )"
@@ -1535,12 +1661,15 @@ Dbtup::disk_restart_undo_callback(Signal* signal,
*/
switch(undo->m_type){
case File_formats::Undofile::UNDO_TUP_ALLOC:
+ jam();
disk_restart_undo_alloc(undo);
break;
case File_formats::Undofile::UNDO_TUP_UPDATE:
+ jam();
disk_restart_undo_update(undo);
break;
case File_formats::Undofile::UNDO_TUP_FREE:
+ jam();
disk_restart_undo_free(undo);
break;
default:
@@ -1555,14 +1684,17 @@ Dbtup::disk_restart_undo_callback(Signal* signal,
m_pgman.update_lsn(undo->m_key, lsn);
jamEntry();
+
+ disk_restart_undo_page_bits(signal, undo);
}
else if (DBG_UNDO)
{
+ jam();
ndbout << "ignore: " << undo->m_lsn << "(" << lsn << " )"
- << key << " type: " << undo->m_type << endl;
+ << key << " type: " << undo->m_type
+ << " tab: " << tableId << endl;
}
- disk_restart_undo_page_bits(signal, undo);
disk_restart_undo_next(signal);
}
@@ -1637,16 +1769,12 @@ Dbtup::disk_restart_undo_page_bits(Signal* signal, Apply_undo* undo)
Uint32 new_bits = alloc.calc_page_free_bits(free);
pageP->list_index = 0x8000 | new_bits;
- Uint64 lsn = 0;
- lsn += pageP->m_page_header.m_page_lsn_hi; lsn <<= 32;
- lsn += pageP->m_page_header.m_page_lsn_lo;
-
Tablespace_client tsman(signal, c_tsman,
fragPtrP->fragTableId,
fragPtrP->fragmentId,
fragPtrP->m_tablespace_id);
- tsman.restart_undo_page_free_bits(&undo->m_key, new_bits, undo->m_lsn, lsn);
+ tsman.restart_undo_page_free_bits(&undo->m_key, new_bits);
jamEntry();
}
@@ -1683,6 +1811,7 @@ Dbtup::disk_restart_alloc_extent(Uint32 tableId, Uint32 fragId,
if (alloc.m_curr_extent_info_ptr_i != RNIL)
{
+ jam();
Ptr<Extent_info> old;
c_extent_pool.getPtr(old, alloc.m_curr_extent_info_ptr_i);
ndbassert(old.p->m_free_matrix_pos == RNIL);
@@ -1709,6 +1838,7 @@ void
Dbtup::disk_restart_page_bits(Uint32 tableId, Uint32 fragId,
const Local_key*, Uint32 bits)
{
+ jam();
TablerecPtr tabPtr;
FragrecordPtr fragPtr;
tabPtr.i = tableId;
diff --git a/storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp b/storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp
index 45766e5e9c4..a642d704eb9 100644
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp
@@ -1957,9 +1957,8 @@ int Dbtup::interpreterNextLab(Signal* signal,
Uint32 TdataForUpdate[3];
Uint32 Tlen;
- AttributeHeader& ah= AttributeHeader::init(&TdataForUpdate[0],
- TattrId,
- TattrNoOfWords << 2);
+ AttributeHeader ah(TattrId, TattrNoOfWords << 2);
+ TdataForUpdate[0]= ah.m_value;
TdataForUpdate[1]= TregMemBuffer[theRegister + 2];
TdataForUpdate[2]= TregMemBuffer[theRegister + 3];
Tlen= TattrNoOfWords + 1;
@@ -1975,6 +1974,7 @@ int Dbtup::interpreterNextLab(Signal* signal,
// Write a NULL value into the attribute
/* --------------------------------------------------------- */
ah.setNULL();
+ TdataForUpdate[0]= ah.m_value;
Tlen= 1;
}
int TnoDataRW= updateAttributes(req_struct,
diff --git a/storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp b/storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp
index 6866236f15e..176efac8058 100644
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp
@@ -143,6 +143,7 @@ void Dbtup::execTUPFRAGREQ(Signal* signal)
regFragPtr.p->m_lcp_scan_op = RNIL;
regFragPtr.p->m_lcp_keep_list = RNIL;
regFragPtr.p->m_var_page_chunks = RNIL;
+ regFragPtr.p->m_restore_lcp_id = RNIL;
if (ERROR_INSERTED(4007) && regTabPtr.p->fragid[0] == fragId ||
ERROR_INSERTED(4008) && regTabPtr.p->fragid[1] == fragId) {
@@ -674,11 +675,11 @@ Dbtup::undo_createtable_callback(Signal* signal, Uint32 opPtrI, Uint32 unused)
switch(ret){
case 0:
return;
+ case -1:
+ warningEvent("Failed to sync log for create of table: %u", regTabPtr.i);
default:
- ndbout_c("ret: %d", ret);
- ndbrequire(false);
+ execute(signal, req.m_callback, regFragPtr.p->m_logfile_group_id);
}
-
}
void
@@ -959,8 +960,6 @@ void Dbtup::releaseFragment(Signal* signal, Uint32 tableId,
return;
}
-#if NOT_YET_UNDO_DROP_TABLE
-#error "This code is complete, but I prefer not to enable it until I need it"
if (logfile_group_id != RNIL)
{
Callback cb;
@@ -968,8 +967,15 @@ void Dbtup::releaseFragment(Signal* signal, Uint32 tableId,
cb.m_callbackFunction =
safe_cast(&Dbtup::drop_table_log_buffer_callback);
Uint32 sz= sizeof(Disk_undo::Drop) >> 2;
- (void) c_lgman->alloc_log_space(logfile_group_id, sz);
-
+ int r0 = c_lgman->alloc_log_space(logfile_group_id, sz);
+ if (r0)
+ {
+ jam();
+ warningEvent("Failed to alloc log space for drop table: %u",
+ tabPtr.i);
+ goto done;
+ }
+
Logfile_client lgman(this, c_lgman, logfile_group_id);
int res= lgman.get_log_buffer(signal, sz, &cb);
switch(res){
@@ -977,15 +983,18 @@ void Dbtup::releaseFragment(Signal* signal, Uint32 tableId,
jam();
return;
case -1:
- ndbrequire("NOT YET IMPLEMENTED" == 0);
+ warningEvent("Failed to get log buffer for drop table: %u",
+ tabPtr.i);
+ c_lgman->free_log_space(logfile_group_id, sz);
+ goto done;
break;
default:
execute(signal, cb, logfile_group_id);
return;
}
}
-#endif
-
+
+done:
drop_table_logsync_callback(signal, tabPtr.i, RNIL);
}
@@ -997,7 +1006,20 @@ Dbtup::drop_fragment_unmap_pages(Signal *signal,
{
if (tabPtr.p->m_no_of_disk_attributes)
{
+ jam();
Disk_alloc_info& alloc_info= fragPtr.p->m_disk_alloc_info;
+
+ if (!alloc_info.m_unmap_pages.isEmpty())
+ {
+ jam();
+ ndbout_c("waiting for unmape pages");
+ signal->theData[0] = ZUNMAP_PAGES;
+ signal->theData[1] = tabPtr.i;
+ signal->theData[2] = fragPtr.i;
+ signal->theData[3] = pos;
+ sendSignal(cownref, GSN_CONTINUEB, signal, 4, JBB);
+ return;
+ }
while(alloc_info.m_dirty_pages[pos].isEmpty() && pos < MAX_FREE_LIST)
pos++;
@@ -1164,9 +1186,10 @@ Dbtup::drop_table_log_buffer_callback(Signal* signal, Uint32 tablePtrI,
switch(ret){
case 0:
return;
+ case -1:
+ warningEvent("Failed to syn log for drop of table: %u", tablePtrI);
default:
- ndbout_c("ret: %d", ret);
- ndbrequire(false);
+ execute(signal, req.m_callback, logfile_group_id);
}
}
@@ -1441,3 +1464,22 @@ Dbtup::complete_restore_lcp(Uint32 tableId, Uint32 fragId)
tabDesc += 2;
}
}
+
+bool
+Dbtup::get_frag_info(Uint32 tableId, Uint32 fragId, Uint32* maxPage)
+{
+ jamEntry();
+ TablerecPtr tabPtr;
+ tabPtr.i= tableId;
+ ptrCheckGuard(tabPtr, cnoOfTablerec, tablerec);
+
+ FragrecordPtr fragPtr;
+ getFragmentrec(fragPtr, fragId, tabPtr.p);
+
+ if (maxPage)
+ {
+ * maxPage = fragPtr.p->noOfPages;
+ }
+
+ return true;
+}
diff --git a/storage/ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp b/storage/ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp
index b0b0cec6b76..64f81dc11ab 100644
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp
@@ -818,9 +818,7 @@ Dbtup::checkUpdateOfPrimaryKey(KeyReqStruct* req_struct,
Tablerec* const regTabPtr)
{
Uint32 keyReadBuffer[MAX_KEY_SIZE_IN_WORDS];
- Uint32 attributeHeader;
TableDescriptor* attr_descr = req_struct->attr_descr;
- AttributeHeader* ahOut = (AttributeHeader*)&attributeHeader;
AttributeHeader ahIn(*updateBuffer);
Uint32 attributeId = ahIn.getAttributeId();
Uint32 attrDescriptorIndex = attributeId << ZAD_LOG_SIZE;
@@ -843,7 +841,7 @@ Dbtup::checkUpdateOfPrimaryKey(KeyReqStruct* req_struct,
ReadFunction f = regTabPtr->readFunctionArray[attributeId];
- AttributeHeader::init(&attributeHeader, attributeId, 0);
+ AttributeHeader attributeHeader(attributeId, 0);
req_struct->out_buf_index = 0;
req_struct->max_read = MAX_KEY_SIZE_IN_WORDS;
req_struct->attr_descriptor = attrDescriptor;
@@ -852,12 +850,12 @@ Dbtup::checkUpdateOfPrimaryKey(KeyReqStruct* req_struct,
req_struct->xfrm_flag = true;
ndbrequire((this->*f)(&keyReadBuffer[0],
req_struct,
- ahOut,
+ &attributeHeader,
attributeOffset));
req_struct->xfrm_flag = tmp;
- ndbrequire(req_struct->out_buf_index == ahOut->getDataSize());
- if (ahIn.getDataSize() != ahOut->getDataSize()) {
+ ndbrequire(req_struct->out_buf_index == attributeHeader.getDataSize());
+ if (ahIn.getDataSize() != attributeHeader.getDataSize()) {
jam();
return true;
}
diff --git a/storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp b/storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp
index 6e53531e118..5e9306909b4 100644
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp
@@ -95,7 +95,23 @@ Dbtup::execACC_SCANREQ(Signal* signal)
}
}
- bits |= AccScanReq::getNRScanFlag(req->requestInfo) ? ScanOp::SCAN_NR : 0;
+ if (AccScanReq::getNRScanFlag(req->requestInfo))
+ {
+ jam();
+ bits |= ScanOp::SCAN_NR;
+ scanPtr.p->m_endPage = req->maxPage;
+ if (req->maxPage != RNIL && req->maxPage > frag.noOfPages)
+ {
+ ndbout_c("%u %u endPage: %u (noOfPages: %u)",
+ tablePtr.i, fragId,
+ req->maxPage, fragPtr.p->noOfPages);
+ }
+ }
+ else
+ {
+ jam();
+ scanPtr.p->m_endPage = RNIL;
+ }
// set up scan op
new (scanPtr.p) ScanOp();
@@ -540,7 +556,7 @@ Dbtup::scanFirst(Signal*, ScanOpPtr scanPtr)
ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord);
Fragrecord& frag = *fragPtr.p;
// in the future should not pre-allocate pages
- if (frag.noOfPages == 0) {
+ if (frag.noOfPages == 0 && ((bits & ScanOp::SCAN_NR) == 0)) {
jam();
scan.m_state = ScanOp::Last;
return;
@@ -632,11 +648,23 @@ Dbtup::scanNext(Signal* signal, ScanOpPtr scanPtr)
key.m_page_no++;
if (key.m_page_no >= frag.noOfPages) {
jam();
+
+ if ((bits & ScanOp::SCAN_NR) && (scan.m_endPage != RNIL))
+ {
+ jam();
+ if (key.m_page_no < scan.m_endPage)
+ {
+ jam();
+ ndbout_c("scanning page %u", key.m_page_no);
+ goto cont;
+ }
+ }
// no more pages, scan ends
pos.m_get = ScanPos::Get_undef;
scan.m_state = ScanOp::Last;
return true;
}
+ cont:
key.m_page_idx = 0;
pos.m_get = ScanPos::Get_page_mm;
// clear cached value
@@ -649,7 +677,13 @@ Dbtup::scanNext(Signal* signal, ScanOpPtr scanPtr)
{
if (pos.m_realpid_mm == RNIL) {
jam();
- pos.m_realpid_mm = getRealpid(fragPtr.p, key.m_page_no);
+ if (key.m_page_no < frag.noOfPages)
+ pos.m_realpid_mm = getRealpid(fragPtr.p, key.m_page_no);
+ else
+ {
+ ndbassert(bits & ScanOp::SCAN_NR);
+ goto nopage;
+ }
}
PagePtr pagePtr;
c_page_pool.getPtr(pagePtr, pos.m_realpid_mm);
@@ -657,9 +691,18 @@ Dbtup::scanNext(Signal* signal, ScanOpPtr scanPtr)
if (pagePtr.p->page_state == ZEMPTY_MM) {
// skip empty page
jam();
- pos.m_get = ScanPos::Get_next_page_mm;
- break; // incr loop count
+ if (! (bits & ScanOp::SCAN_NR))
+ {
+ pos.m_get = ScanPos::Get_next_page_mm;
+ break; // incr loop count
+ }
+ else
+ {
+ jam();
+ pos.m_realpid_mm = RNIL;
+ }
}
+ nopage:
pos.m_page = pagePtr.p;
pos.m_get = ScanPos::Get_tuple;
}
@@ -772,7 +815,7 @@ Dbtup::scanNext(Signal* signal, ScanOpPtr scanPtr)
uncommitted = committed = ~(unsigned)0;
int ret = tsman.get_page_free_bits(&key, &uncommitted, &committed);
ndbrequire(ret == 0);
- if (committed == 0) {
+ if (committed == 0 && uncommitted == 0) {
// skip empty page
jam();
pos.m_get = ScanPos::Get_next_page_dd;
@@ -820,11 +863,11 @@ Dbtup::scanNext(Signal* signal, ScanOpPtr scanPtr)
{
pos.m_get = ScanPos::Get_next_tuple_fs;
th = (Tuple_header*)&page->m_data[key.m_page_idx];
- thbits = th->m_header_bits;
if (likely(! (bits & ScanOp::SCAN_NR)))
{
jam();
+ thbits = th->m_header_bits;
if (! (thbits & Tuple_header::FREE))
{
goto found_tuple;
@@ -832,7 +875,15 @@ Dbtup::scanNext(Signal* signal, ScanOpPtr scanPtr)
}
else
{
- if ((foundGCI = *th->get_mm_gci(tablePtr.p)) > scanGCI)
+ if (pos.m_realpid_mm == RNIL)
+ {
+ jam();
+ foundGCI = 0;
+ goto found_deleted_rowid;
+ }
+ thbits = th->m_header_bits;
+ if ((foundGCI = *th->get_mm_gci(tablePtr.p)) > scanGCI ||
+ foundGCI == 0)
{
if (! (thbits & Tuple_header::FREE))
{
@@ -904,7 +955,8 @@ Dbtup::scanNext(Signal* signal, ScanOpPtr scanPtr)
Fix_page *mmpage = (Fix_page*)c_page_pool.getPtr(pos.m_realpid_mm);
th = (Tuple_header*)(mmpage->m_data + key_mm.m_page_idx);
- if ((foundGCI = *th->get_mm_gci(tablePtr.p)) > scanGCI)
+ if ((foundGCI = *th->get_mm_gci(tablePtr.p)) > scanGCI ||
+ foundGCI == 0)
{
if (! (thbits & Tuple_header::FREE))
break;
diff --git a/storage/ndb/src/kernel/blocks/dbtux/DbtuxScan.cpp b/storage/ndb/src/kernel/blocks/dbtux/DbtuxScan.cpp
index a0643848530..e6ee2374056 100644
--- a/storage/ndb/src/kernel/blocks/dbtux/DbtuxScan.cpp
+++ b/storage/ndb/src/kernel/blocks/dbtux/DbtuxScan.cpp
@@ -217,7 +217,8 @@ Dbtux::execTUX_BOUND_INFO(Signal* signal)
// fill in any gap
while (maxAttrId[j] <= attrId) {
jam();
- BoundInfo& b = boundInfo[j][maxAttrId[j]++];
+ BoundInfo& b = boundInfo[j][maxAttrId[j]];
+ maxAttrId[j]++;
b.type2 = -1;
}
BoundInfo& b = boundInfo[j][attrId];
diff --git a/storage/ndb/src/kernel/blocks/dbutil/DbUtil.cpp b/storage/ndb/src/kernel/blocks/dbutil/DbUtil.cpp
index 550e255061f..f34bc41af06 100644
--- a/storage/ndb/src/kernel/blocks/dbutil/DbUtil.cpp
+++ b/storage/ndb/src/kernel/blocks/dbutil/DbUtil.cpp
@@ -1169,9 +1169,7 @@ DbUtil::prepareOperation(Signal* signal, PreparePtr prepPtr)
/**************************************************************
* Attribute found - store in mapping (AttributeId, Position)
**************************************************************/
- AttributeHeader & attrMap =
- AttributeHeader::init(attrMappingIt.data,
- attrDesc.AttributeId, // 1. Store AttrId
+ AttributeHeader attrMap(attrDesc.AttributeId, // 1. Store AttrId
0);
if (attrDesc.AttributeKeyFlag) {
@@ -1200,6 +1198,7 @@ DbUtil::prepareOperation(Signal* signal, PreparePtr prepPtr)
return;
}
}
+ *(attrMappingIt.data) = attrMap.m_value;
#if 0
ndbout << "BEFORE: attrLength: " << attrLength << endl;
#endif
diff --git a/storage/ndb/src/kernel/blocks/lgman.cpp b/storage/ndb/src/kernel/blocks/lgman.cpp
index 23738717580..0481f7b399b 100644
--- a/storage/ndb/src/kernel/blocks/lgman.cpp
+++ b/storage/ndb/src/kernel/blocks/lgman.cpp
@@ -2701,8 +2701,16 @@ Lgman::execute_undo_record(Signal* signal)
Uint32 lcp = * (ptr - len + 1);
if(m_latest_lcp && lcp > m_latest_lcp)
{
- // Just ignore
- break;
+ if (0)
+ {
+ const Uint32 * base = ptr - len + 1;
+ Uint32 lcp = base[0];
+ Uint32 tableId = base[1] >> 16;
+ Uint32 fragId = base[1] & 0xFFFF;
+
+ ndbout_c("NOT! ignoring lcp: %u tab: %u frag: %u",
+ lcp, tableId, fragId);
+ }
}
if(m_latest_lcp == 0 ||
diff --git a/storage/ndb/src/kernel/blocks/pgman.cpp b/storage/ndb/src/kernel/blocks/pgman.cpp
index d8e0c053984..aa1f04c720c 100644
--- a/storage/ndb/src/kernel/blocks/pgman.cpp
+++ b/storage/ndb/src/kernel/blocks/pgman.cpp
@@ -238,6 +238,13 @@ Pgman::execCONTINUEB(Signal* signal)
}
else
{
+ if (ERROR_INSERTED(11007))
+ {
+ ndbout << "No more writes..." << endl;
+ SET_ERROR_INSERT_VALUE(11008);
+ signal->theData[0] = 9999;
+ sendSignalWithDelay(CMVMI_REF, GSN_NDB_TAMPER, signal, 10000, 1);
+ }
signal->theData[0] = m_end_lcp_req.senderData;
sendSignal(m_end_lcp_req.senderRef, GSN_END_LCP_CONF, signal, 1, JBB);
}
@@ -493,6 +500,11 @@ Pgman::release_page_entry(Ptr<Page_entry>& ptr)
if (! (state & Page_entry::LOCKED))
ndbrequire(! (state & Page_entry::REQUEST));
+
+ if (ptr.p->m_copy_page_i != RNIL)
+ {
+ m_global_page_pool.release(ptr.p->m_copy_page_i);
+ }
set_page_state(ptr, 0);
m_page_hashlist.remove(ptr);
@@ -1142,7 +1154,8 @@ Pgman::process_cleanup(Signal* signal)
#ifdef VM_TRACE
debugOut << "PGMAN: " << ptr << " : process_cleanup" << endl;
#endif
- c_tup->disk_page_unmap_callback(ptr.p->m_real_page_i,
+ c_tup->disk_page_unmap_callback(0,
+ ptr.p->m_real_page_i,
ptr.p->m_dirty_count);
pageout(signal, ptr);
max_count--;
@@ -1180,6 +1193,11 @@ Pgman::move_cleanup_ptr(Ptr<Page_entry> ptr)
void
Pgman::execLCP_FRAG_ORD(Signal* signal)
{
+ if (ERROR_INSERTED(11008))
+ {
+ ndbout_c("Ignore LCP_FRAG_ORD");
+ return;
+ }
LcpFragOrd* ord = (LcpFragOrd*)signal->getDataPtr();
ndbrequire(ord->lcpId >= m_last_lcp_complete + 1 || m_last_lcp_complete == 0);
m_last_lcp = ord->lcpId;
@@ -1196,6 +1214,12 @@ Pgman::execLCP_FRAG_ORD(Signal* signal)
void
Pgman::execEND_LCP_REQ(Signal* signal)
{
+ if (ERROR_INSERTED(11008))
+ {
+ ndbout_c("Ignore END_LCP");
+ return;
+ }
+
EndLcpReq* req = (EndLcpReq*)signal->getDataPtr();
m_end_lcp_req = *req;
@@ -1274,7 +1298,8 @@ Pgman::process_lcp(Signal* signal)
{
DBG_LCP(" pageout()" << endl);
ptr.p->m_state |= Page_entry::LCP;
- c_tup->disk_page_unmap_callback(ptr.p->m_real_page_i,
+ c_tup->disk_page_unmap_callback(0,
+ ptr.p->m_real_page_i,
ptr.p->m_dirty_count);
pageout(signal, ptr);
}
@@ -1301,6 +1326,13 @@ Pgman::process_lcp(Signal* signal)
}
else
{
+ if (ERROR_INSERTED(11007))
+ {
+ ndbout << "No more writes..." << endl;
+ signal->theData[0] = 9999;
+ sendSignalWithDelay(CMVMI_REF, GSN_NDB_TAMPER, signal, 10000, 1);
+ SET_ERROR_INSERT_VALUE(11008);
+ }
signal->theData[0] = m_end_lcp_req.senderData;
sendSignal(m_end_lcp_req.senderRef, GSN_END_LCP_CONF, signal, 1, JBB);
}
@@ -1489,6 +1521,10 @@ Pgman::fswriteconf(Signal* signal, Ptr<Page_entry> ptr)
Page_state state = ptr.p->m_state;
ndbrequire(state & Page_entry::PAGEOUT);
+ c_tup->disk_page_unmap_callback(1,
+ ptr.p->m_real_page_i,
+ ptr.p->m_dirty_count);
+
state &= ~ Page_entry::PAGEOUT;
state &= ~ Page_entry::EMPTY;
state &= ~ Page_entry::DIRTY;
@@ -1588,8 +1624,11 @@ Pgman::fswritereq(Signal* signal, Ptr<Page_entry> ptr)
}
#endif
- sendSignal(NDBFS_REF, GSN_FSWRITEREQ, signal,
- FsReadWriteReq::FixedLength + 1, JBA);
+ if (!ERROR_INSERTED(11008))
+ {
+ sendSignal(NDBFS_REF, GSN_FSWRITEREQ, signal,
+ FsReadWriteReq::FixedLength + 1, JBA);
+ }
}
void
@@ -1739,7 +1778,7 @@ Pgman::get_page(Signal* signal, Ptr<Page_entry> ptr, Page_request page_req)
#endif
state |= Page_entry::REQUEST;
- if (only_request && req_flags & Page_request::EMPTY_PAGE)
+ if (only_request && (req_flags & Page_request::EMPTY_PAGE))
{
state |= Page_entry::EMPTY;
}
@@ -2401,7 +2440,8 @@ Pgman::execDUMP_STATE_ORD(Signal* signal)
if (pl_hash.find(ptr, key))
{
ndbout << "pageout " << ptr << endl;
- c_tup->disk_page_unmap_callback(ptr.p->m_real_page_i,
+ c_tup->disk_page_unmap_callback(0,
+ ptr.p->m_real_page_i,
ptr.p->m_dirty_count);
pageout(signal, ptr);
}
@@ -2452,6 +2492,16 @@ Pgman::execDUMP_STATE_ORD(Signal* signal)
{
SET_ERROR_INSERT_VALUE(11006);
}
+
+ if (signal->theData[0] == 11007)
+ {
+ SET_ERROR_INSERT_VALUE(11007);
+ }
+
+ if (signal->theData[0] == 11008)
+ {
+ SET_ERROR_INSERT_VALUE(11008);
+ }
}
// page cache client
diff --git a/storage/ndb/src/kernel/blocks/qmgr/Qmgr.hpp b/storage/ndb/src/kernel/blocks/qmgr/Qmgr.hpp
index 8d51b24ec6a..6a76ce5217a 100644
--- a/storage/ndb/src/kernel/blocks/qmgr/Qmgr.hpp
+++ b/storage/ndb/src/kernel/blocks/qmgr/Qmgr.hpp
@@ -265,6 +265,8 @@ private:
void execALLOC_NODEID_CONF(Signal *);
void execALLOC_NODEID_REF(Signal *);
void completeAllocNodeIdReq(Signal *);
+
+ void execSTART_ORD(Signal*);
// Arbitration signals
void execARBIT_CFG(Signal* signal);
@@ -281,6 +283,7 @@ private:
void check_readnodes_reply(Signal* signal, Uint32 nodeId, Uint32 gsn);
Uint32 check_startup(Signal* signal);
+ void api_failed(Signal* signal, Uint32 aFailedNode);
void node_failed(Signal* signal, Uint16 aFailedNode);
void checkStartInterface(Signal* signal);
void failReport(Signal* signal,
diff --git a/storage/ndb/src/kernel/blocks/qmgr/QmgrInit.cpp b/storage/ndb/src/kernel/blocks/qmgr/QmgrInit.cpp
index f9950072ab4..2f03bd56694 100644
--- a/storage/ndb/src/kernel/blocks/qmgr/QmgrInit.cpp
+++ b/storage/ndb/src/kernel/blocks/qmgr/QmgrInit.cpp
@@ -31,10 +31,6 @@ void Qmgr::initData()
cnoCommitFailedNodes = 0;
c_maxDynamicId = 0;
c_clusterNodes.clear();
-
- Uint32 hbDBAPI = 500;
- setHbApiDelay(hbDBAPI);
- c_connectedNodes.set(getOwnNodeId());
c_stopReq.senderRef = 0;
/**
@@ -43,6 +39,27 @@ void Qmgr::initData()
ndbrequire((Uint32)NodeInfo::DB == 0);
ndbrequire((Uint32)NodeInfo::API == 1);
ndbrequire((Uint32)NodeInfo::MGM == 2);
+
+ NodeRecPtr nodePtr;
+ nodePtr.i = getOwnNodeId();
+ ptrAss(nodePtr, nodeRec);
+ nodePtr.p->blockRef = reference();
+
+ c_connectedNodes.set(getOwnNodeId());
+ setNodeInfo(getOwnNodeId()).m_version = NDB_VERSION;
+
+
+ /**
+ * Timeouts
+ */
+ const ndb_mgm_configuration_iterator * p =
+ m_ctx.m_config.getOwnConfigIterator();
+ ndbrequire(p != 0);
+
+ Uint32 hbDBAPI = 1500;
+ ndb_mgm_get_int_parameter(p, CFG_DB_API_HEARTBEAT_INTERVAL, &hbDBAPI);
+
+ setHbApiDelay(hbDBAPI);
}//Qmgr::initData()
void Qmgr::initRecords()
@@ -113,6 +130,7 @@ Qmgr::Qmgr(Block_context& ctx)
addRecSignal(GSN_DIH_RESTARTREF, &Qmgr::execDIH_RESTARTREF);
addRecSignal(GSN_DIH_RESTARTCONF, &Qmgr::execDIH_RESTARTCONF);
addRecSignal(GSN_NODE_VERSION_REP, &Qmgr::execNODE_VERSION_REP);
+ addRecSignal(GSN_START_ORD, &Qmgr::execSTART_ORD);
initData();
}//Qmgr::Qmgr()
diff --git a/storage/ndb/src/kernel/blocks/qmgr/QmgrMain.cpp b/storage/ndb/src/kernel/blocks/qmgr/QmgrMain.cpp
index 1fba4d62e17..23e7829481e 100644
--- a/storage/ndb/src/kernel/blocks/qmgr/QmgrMain.cpp
+++ b/storage/ndb/src/kernel/blocks/qmgr/QmgrMain.cpp
@@ -238,6 +238,38 @@ Qmgr::execREAD_CONFIG_REQ(Signal* signal)
ReadConfigConf::SignalLength, JBB);
}
+void
+Qmgr::execSTART_ORD(Signal* signal)
+{
+ /**
+ * Start timer handling
+ */
+ signal->theData[0] = ZTIMER_HANDLING;
+ sendSignal(QMGR_REF, GSN_CONTINUEB, signal, 1, JBB);
+
+ NodeRecPtr nodePtr;
+ for (nodePtr.i = 1; nodePtr.i < MAX_NODES; nodePtr.i++)
+ {
+ ptrAss(nodePtr, nodeRec);
+ nodePtr.p->ndynamicId = 0;
+ if(getNodeInfo(nodePtr.i).m_type == NodeInfo::DB)
+ {
+ nodePtr.p->phase = ZINIT;
+ c_definedNodes.set(nodePtr.i);
+ } else {
+ nodePtr.p->phase = ZAPI_INACTIVE;
+ }
+
+ setNodeInfo(nodePtr.i).m_heartbeat_cnt= 0;
+ nodePtr.p->sendPrepFailReqStatus = Q_NOT_ACTIVE;
+ nodePtr.p->sendCommitFailReqStatus = Q_NOT_ACTIVE;
+ nodePtr.p->sendPresToStatus = Q_NOT_ACTIVE;
+ nodePtr.p->failState = NORMAL;
+ nodePtr.p->rcv[0] = 0;
+ nodePtr.p->rcv[1] = 0;
+ }//for
+}
+
/*
4.2 ADD NODE MODULE*/
/*##########################################################################*/
@@ -298,8 +330,6 @@ void Qmgr::startphase1(Signal* signal)
nodePtr.i = getOwnNodeId();
ptrAss(nodePtr, nodeRec);
nodePtr.p->phase = ZSTARTING;
- nodePtr.p->blockRef = reference();
- c_connectedNodes.set(nodePtr.i);
signal->theData[0] = reference();
sendSignal(DBDIH_REF, GSN_DIH_RESTARTREQ, signal, 1, JBB);
@@ -371,11 +401,14 @@ void Qmgr::execCONNECT_REP(Signal* signal)
case ZFAIL_CLOSING:
jam();
return;
- case ZINIT:
- ndbrequire(false);
case ZAPI_ACTIVE:
case ZAPI_INACTIVE:
return;
+ case ZINIT:
+ ndbrequire(getNodeInfo(nodeId).m_type == NodeInfo::MGM);
+ break;
+ default:
+ ndbrequire(false);
}
if (getNodeInfo(nodeId).getType() != NodeInfo::DB)
@@ -1212,12 +1245,6 @@ void Qmgr::execCM_REGREF(Signal* signal)
{
jam();
electionWon(signal);
-
- /**
- * Start timer handling
- */
- signal->theData[0] = ZTIMER_HANDLING;
- sendSignal(QMGR_REF, GSN_CONTINUEB, signal, 10, JBB);
}
return;
@@ -1855,12 +1882,6 @@ Qmgr::joinedCluster(Signal* signal, NodeRecPtr nodePtr){
sendSttorryLab(signal);
- /**
- * Start timer handling
- */
- signal->theData[0] = ZTIMER_HANDLING;
- sendSignal(QMGR_REF, GSN_CONTINUEB, signal, 10, JBB);
-
sendCmAckAdd(signal, getOwnNodeId(), CmAdd::CommitNew);
}
@@ -2094,25 +2115,6 @@ void Qmgr::findNeighbours(Signal* signal)
/*---------------------------------------------------------------------------*/
void Qmgr::initData(Signal* signal)
{
- NodeRecPtr nodePtr;
- for (nodePtr.i = 1; nodePtr.i < MAX_NODES; nodePtr.i++) {
- ptrAss(nodePtr, nodeRec);
- nodePtr.p->ndynamicId = 0;
- if(getNodeInfo(nodePtr.i).m_type == NodeInfo::DB){
- nodePtr.p->phase = ZINIT;
- c_definedNodes.set(nodePtr.i);
- } else {
- nodePtr.p->phase = ZAPI_INACTIVE;
- }
-
- setNodeInfo(nodePtr.i).m_heartbeat_cnt= 0;
- nodePtr.p->sendPrepFailReqStatus = Q_NOT_ACTIVE;
- nodePtr.p->sendCommitFailReqStatus = Q_NOT_ACTIVE;
- nodePtr.p->sendPresToStatus = Q_NOT_ACTIVE;
- nodePtr.p->failState = NORMAL;
- nodePtr.p->rcv[0] = 0;
- nodePtr.p->rcv[1] = 0;
- }//for
cfailureNr = 1;
ccommitFailureNr = 1;
cprepareFailureNr = 1;
@@ -2146,13 +2148,11 @@ void Qmgr::initData(Signal* signal)
ndbrequire(p != 0);
Uint32 hbDBDB = 1500;
- Uint32 hbDBAPI = 1500;
Uint32 arbitTimeout = 1000;
c_restartPartialTimeout = 30000;
c_restartPartionedTimeout = 60000;
c_restartFailureTimeout = ~0;
ndb_mgm_get_int_parameter(p, CFG_DB_HEARTBEAT_INTERVAL, &hbDBDB);
- ndb_mgm_get_int_parameter(p, CFG_DB_API_HEARTBEAT_INTERVAL, &hbDBAPI);
ndb_mgm_get_int_parameter(p, CFG_DB_ARBIT_TIMEOUT, &arbitTimeout);
ndb_mgm_get_int_parameter(p, CFG_DB_START_PARTIAL_TIMEOUT,
&c_restartPartialTimeout);
@@ -2177,7 +2177,6 @@ void Qmgr::initData(Signal* signal)
}
setHbDelay(hbDBDB);
- setHbApiDelay(hbDBAPI);
setArbitTimeout(arbitTimeout);
arbitRec.state = ARBIT_NULL; // start state for all nodes
@@ -2204,7 +2203,6 @@ void Qmgr::initData(Signal* signal)
execARBIT_CFG(signal);
}
- setNodeInfo(getOwnNodeId()).m_version = NDB_VERSION;
}//Qmgr::initData()
@@ -2237,20 +2235,22 @@ void Qmgr::timerHandlingLab(Signal* signal)
hb_check_timer.reset();
}
}
-
+
if (interface_check_timer.check(TcurrentTime)) {
jam();
interface_check_timer.reset();
checkStartInterface(signal);
}
+ if (hb_api_timer.check(TcurrentTime))
+ {
+ jam();
+ hb_api_timer.reset();
+ apiHbHandlingLab(signal);
+ }
+
if (cactivateApiCheck != 0) {
jam();
- if (hb_api_timer.check(TcurrentTime)) {
- jam();
- hb_api_timer.reset();
- apiHbHandlingLab(signal);
- }//if
if (clatestTransactionCheck == 0) {
//-------------------------------------------------------------
// Initialise the Transaction check timer.
@@ -2367,18 +2367,21 @@ void Qmgr::apiHbHandlingLab(Signal* signal)
if(type == NodeInfo::INVALID)
continue;
- if (TnodePtr.p->phase == ZAPI_ACTIVE){
+ if (c_connectedNodes.get(nodeId))
+ {
jam();
setNodeInfo(TnodePtr.i).m_heartbeat_cnt++;
- if(getNodeInfo(TnodePtr.i).m_heartbeat_cnt > 2){
+ if(getNodeInfo(TnodePtr.i).m_heartbeat_cnt > 2)
+ {
signal->theData[0] = NDB_LE_MissedHeartbeat;
signal->theData[1] = nodeId;
signal->theData[2] = getNodeInfo(TnodePtr.i).m_heartbeat_cnt - 1;
sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, 3, JBB);
}
- if (getNodeInfo(TnodePtr.i).m_heartbeat_cnt > 4) {
+ if (getNodeInfo(TnodePtr.i).m_heartbeat_cnt > 4)
+ {
jam();
/*------------------------------------------------------------------*/
/* THE API NODE HAS NOT SENT ANY HEARTBEAT FOR THREE SECONDS.
@@ -2390,8 +2393,8 @@ void Qmgr::apiHbHandlingLab(Signal* signal)
signal->theData[0] = NDB_LE_DeadDueToHeartbeat;
signal->theData[1] = nodeId;
sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, 2, JBB);
-
- node_failed(signal, nodeId);
+
+ api_failed(signal, nodeId);
}//if
}//if
}//for
@@ -2480,26 +2483,6 @@ void Qmgr::sendApiFailReq(Signal* signal, Uint16 failedNodeNo)
sendSignal(DBTC_REF, GSN_API_FAILREQ, signal, 2, JBA);
sendSignal(DBDICT_REF, GSN_API_FAILREQ, signal, 2, JBA);
sendSignal(SUMA_REF, GSN_API_FAILREQ, signal, 2, JBA);
-
- /**-------------------------------------------------------------------------
- * THE OTHER NODE WAS AN API NODE. THE COMMUNICATION LINK IS ALREADY
- * BROKEN AND THUS NO ACTION IS NEEDED TO BREAK THE CONNECTION.
- * WE ONLY NEED TO SET PARAMETERS TO ENABLE A NEW CONNECTION IN A FEW
- * SECONDS.
- *-------------------------------------------------------------------------*/
- setNodeInfo(failedNodePtr.i).m_heartbeat_cnt= 0;
- setNodeInfo(failedNodePtr.i).m_version = 0;
- recompute_version_info(getNodeInfo(failedNodePtr.i).m_type);
-
- CloseComReqConf * const closeCom = (CloseComReqConf *)&signal->theData[0];
-
- closeCom->xxxBlockRef = reference();
- closeCom->failNo = 0;
- closeCom->noOfNodes = 1;
- NodeBitmask::clear(closeCom->theNodes);
- NodeBitmask::set(closeCom->theNodes, failedNodePtr.i);
- sendSignal(CMVMI_REF, GSN_CLOSE_COMREQ, signal,
- CloseComReqConf::SignalLength, JBA);
}//Qmgr::sendApiFailReq()
void Qmgr::execAPI_FAILREQ(Signal* signal)
@@ -2512,20 +2495,7 @@ void Qmgr::execAPI_FAILREQ(Signal* signal)
ndbrequire(getNodeInfo(failedNodePtr.i).getType() != NodeInfo::DB);
- // ignore if api not active
- if (failedNodePtr.p->phase != ZAPI_ACTIVE)
- {
- jam();
- // But send to SUMA anyway...
- sendSignal(SUMA_REF, GSN_API_FAILREQ, signal, 2, JBA);
- return;
- }
-
- signal->theData[0] = NDB_LE_Disconnected;
- signal->theData[1] = failedNodePtr.i;
- sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, 2, JBB);
-
- node_failed(signal, failedNodePtr.i);
+ api_failed(signal, signal->theData[0]);
}
void Qmgr::execAPI_FAILCONF(Signal* signal)
@@ -2649,6 +2619,13 @@ void Qmgr::execDISCONNECT_REP(Signal* signal)
ndbrequire(false);
}
+ if (getNodeInfo(nodeId).getType() != NodeInfo::DB)
+ {
+ jam();
+ api_failed(signal, nodeId);
+ return;
+ }
+
switch(nodePtr.p->phase){
case ZRUNNING:
jam();
@@ -2685,66 +2662,109 @@ void Qmgr::node_failed(Signal* signal, Uint16 aFailedNode)
failedNodePtr.i = aFailedNode;
ptrCheckGuard(failedNodePtr, MAX_NODES, nodeRec);
- if (getNodeInfo(failedNodePtr.i).getType() == NodeInfo::DB){
+ ndbrequire(getNodeInfo(failedNodePtr.i).getType() == NodeInfo::DB);
+
+ /**---------------------------------------------------------------------
+ * THE OTHER NODE IS AN NDB NODE, WE HANDLE IT AS IF A HEARTBEAT
+ * FAILURE WAS DISCOVERED.
+ *---------------------------------------------------------------------*/
+ switch(failedNodePtr.p->phase){
+ case ZRUNNING:
jam();
- /**---------------------------------------------------------------------
- * THE OTHER NODE IS AN NDB NODE, WE HANDLE IT AS IF A HEARTBEAT
- * FAILURE WAS DISCOVERED.
- *---------------------------------------------------------------------*/
- switch(failedNodePtr.p->phase){
- case ZRUNNING:
- jam();
- failReportLab(signal, aFailedNode, FailRep::ZLINK_FAILURE);
- return;
- case ZFAIL_CLOSING:
- jam();
- return;
- case ZSTARTING:
- c_start.reset();
- // Fall-through
- default:
- jam();
- /*---------------------------------------------------------------------*/
- // The other node is still not in the cluster but disconnected.
- // We must restart communication in three seconds.
- /*---------------------------------------------------------------------*/
- failedNodePtr.p->failState = NORMAL;
- failedNodePtr.p->phase = ZFAIL_CLOSING;
- setNodeInfo(failedNodePtr.i).m_heartbeat_cnt= 0;
-
- CloseComReqConf * const closeCom =
- (CloseComReqConf *)&signal->theData[0];
-
- closeCom->xxxBlockRef = reference();
- closeCom->failNo = 0;
- closeCom->noOfNodes = 1;
- NodeBitmask::clear(closeCom->theNodes);
- NodeBitmask::set(closeCom->theNodes, failedNodePtr.i);
- sendSignal(CMVMI_REF, GSN_CLOSE_COMREQ, signal,
- CloseComReqConf::SignalLength, JBA);
- }//if
+ failReportLab(signal, aFailedNode, FailRep::ZLINK_FAILURE);
return;
- }
-
- /**
- * API code
- */
- jam();
- if (failedNodePtr.p->phase != ZFAIL_CLOSING){
+ case ZFAIL_CLOSING:
+ jam();
+ return;
+ case ZSTARTING:
+ c_start.reset();
+ // Fall-through
+ default:
jam();
- //-------------------------------------------------------------------------
- // The API was active and has now failed. We need to initiate API failure
- // handling. If the API had already failed then we can ignore this
- // discovery.
- //-------------------------------------------------------------------------
+ /*---------------------------------------------------------------------*/
+ // The other node is still not in the cluster but disconnected.
+ // We must restart communication in three seconds.
+ /*---------------------------------------------------------------------*/
+ failedNodePtr.p->failState = NORMAL;
failedNodePtr.p->phase = ZFAIL_CLOSING;
-
- sendApiFailReq(signal, aFailedNode);
- arbitRec.code = ArbitCode::ApiFail;
- handleArbitApiFail(signal, aFailedNode);
+ setNodeInfo(failedNodePtr.i).m_heartbeat_cnt= 0;
+
+ CloseComReqConf * const closeCom =
+ (CloseComReqConf *)&signal->theData[0];
+
+ closeCom->xxxBlockRef = reference();
+ closeCom->failNo = 0;
+ closeCom->noOfNodes = 1;
+ NodeBitmask::clear(closeCom->theNodes);
+ NodeBitmask::set(closeCom->theNodes, failedNodePtr.i);
+ sendSignal(CMVMI_REF, GSN_CLOSE_COMREQ, signal,
+ CloseComReqConf::SignalLength, JBA);
}//if
return;
-}//Qmgr::node_failed()
+}
+
+void
+Qmgr::api_failed(Signal* signal, Uint32 nodeId)
+{
+ NodeRecPtr failedNodePtr;
+ /**------------------------------------------------------------------------
+ * A COMMUNICATION LINK HAS BEEN DISCONNECTED. WE MUST TAKE SOME ACTION
+ * DUE TO THIS.
+ *-----------------------------------------------------------------------*/
+ failedNodePtr.i = nodeId;
+ ptrCheckGuard(failedNodePtr, MAX_NODES, nodeRec);
+
+ if (failedNodePtr.p->phase == ZFAIL_CLOSING)
+ {
+ /**
+ * Failure handling already in progress
+ */
+ jam();
+ return;
+ }
+
+ if (failedNodePtr.p->phase == ZAPI_ACTIVE)
+ {
+ jam();
+ sendApiFailReq(signal, nodeId);
+ arbitRec.code = ArbitCode::ApiFail;
+ handleArbitApiFail(signal, nodeId);
+ }
+ else
+ {
+ /**
+ * Always inform SUMA
+ */
+ jam();
+ signal->theData[0] = nodeId;
+ signal->theData[1] = QMGR_REF;
+ sendSignal(SUMA_REF, GSN_API_FAILREQ, signal, 2, JBA);
+ failedNodePtr.p->failState = NORMAL;
+ }
+
+ failedNodePtr.p->phase = ZFAIL_CLOSING;
+ setNodeInfo(failedNodePtr.i).m_heartbeat_cnt= 0;
+ setNodeInfo(failedNodePtr.i).m_version = 0;
+ recompute_version_info(getNodeInfo(failedNodePtr.i).m_type);
+
+ CloseComReqConf * const closeCom = (CloseComReqConf *)&signal->theData[0];
+ closeCom->xxxBlockRef = reference();
+ closeCom->failNo = 0;
+ closeCom->noOfNodes = 1;
+ NodeBitmask::clear(closeCom->theNodes);
+ NodeBitmask::set(closeCom->theNodes, failedNodePtr.i);
+ sendSignal(CMVMI_REF, GSN_CLOSE_COMREQ, signal,
+ CloseComReqConf::SignalLength, JBA);
+
+ if (getNodeInfo(failedNodePtr.i).getType() == NodeInfo::MGM)
+ {
+ /**
+ * Allow MGM do reconnect "directly"
+ */
+ jam();
+ setNodeInfo(failedNodePtr.i).m_heartbeat_cnt = 3;
+ }
+}
/**--------------------------------------------------------------------------
* AN API NODE IS REGISTERING. IF FOR THE FIRST TIME WE WILL ENABLE
@@ -4963,43 +4983,39 @@ Qmgr::execDUMP_STATE_ORD(Signal* signal)
c_start.m_president_candidate_gci);
infoEvent("ctoStatus = %d\n", ctoStatus);
for(Uint32 i = 1; i<MAX_NDB_NODES; i++){
- if(getNodeInfo(i).getType() == NodeInfo::DB){
- NodeRecPtr nodePtr;
- nodePtr.i = i;
- ptrCheckGuard(nodePtr, MAX_NDB_NODES, nodeRec);
- char buf[100];
- switch(nodePtr.p->phase){
- case ZINIT:
- sprintf(buf, "Node %d: ZINIT(%d)", i, nodePtr.p->phase);
- break;
- case ZSTARTING:
- sprintf(buf, "Node %d: ZSTARTING(%d)", i, nodePtr.p->phase);
- break;
- case ZRUNNING:
- sprintf(buf, "Node %d: ZRUNNING(%d)", i, nodePtr.p->phase);
- break;
- case ZPREPARE_FAIL:
- sprintf(buf, "Node %d: ZPREPARE_FAIL(%d)", i, nodePtr.p->phase);
- break;
- case ZFAIL_CLOSING:
- sprintf(buf, "Node %d: ZFAIL_CLOSING(%d)", i, nodePtr.p->phase);
- break;
- case ZAPI_INACTIVE:
- sprintf(buf, "Node %d: ZAPI_INACTIVE(%d)", i, nodePtr.p->phase);
- break;
- case ZAPI_ACTIVE:
- sprintf(buf, "Node %d: ZAPI_ACTIVE(%d)", i, nodePtr.p->phase);
- break;
- default:
- sprintf(buf, "Node %d: <UNKNOWN>(%d)", i, nodePtr.p->phase);
- break;
- }
- infoEvent(buf);
+ NodeRecPtr nodePtr;
+ nodePtr.i = i;
+ ptrCheckGuard(nodePtr, MAX_NDB_NODES, nodeRec);
+ char buf[100];
+ switch(nodePtr.p->phase){
+ case ZINIT:
+ sprintf(buf, "Node %d: ZINIT(%d)", i, nodePtr.p->phase);
+ break;
+ case ZSTARTING:
+ sprintf(buf, "Node %d: ZSTARTING(%d)", i, nodePtr.p->phase);
+ break;
+ case ZRUNNING:
+ sprintf(buf, "Node %d: ZRUNNING(%d)", i, nodePtr.p->phase);
+ break;
+ case ZPREPARE_FAIL:
+ sprintf(buf, "Node %d: ZPREPARE_FAIL(%d)", i, nodePtr.p->phase);
+ break;
+ case ZFAIL_CLOSING:
+ sprintf(buf, "Node %d: ZFAIL_CLOSING(%d)", i, nodePtr.p->phase);
+ break;
+ case ZAPI_INACTIVE:
+ sprintf(buf, "Node %d: ZAPI_INACTIVE(%d)", i, nodePtr.p->phase);
+ break;
+ case ZAPI_ACTIVE:
+ sprintf(buf, "Node %d: ZAPI_ACTIVE(%d)", i, nodePtr.p->phase);
+ break;
+ default:
+ sprintf(buf, "Node %d: <UNKNOWN>(%d)", i, nodePtr.p->phase);
+ break;
}
+ infoEvent(buf);
}
- default:
- ;
- }//switch
+ }
#ifdef ERROR_INSERT
if (signal->theData[0] == 935 && signal->getLength() == 2)
diff --git a/storage/ndb/src/kernel/blocks/suma/Suma.cpp b/storage/ndb/src/kernel/blocks/suma/Suma.cpp
index b8cc438f514..113b63a19d3 100644
--- a/storage/ndb/src/kernel/blocks/suma/Suma.cpp
+++ b/storage/ndb/src/kernel/blocks/suma/Suma.cpp
@@ -821,8 +821,9 @@ Suma::execINCL_NODEREQ(Signal* signal){
ndbrequire(!c_alive_nodes.get(nodeId));
c_alive_nodes.set(nodeId);
- signal->theData[0] = reference();
- sendSignal(senderRef, GSN_INCL_NODECONF, signal, 1, JBB);
+ signal->theData[0] = nodeId;
+ signal->theData[1] = reference();
+ sendSignal(senderRef, GSN_INCL_NODECONF, signal, 2, JBB);
}
void
@@ -974,6 +975,54 @@ Suma::execDUMP_STATE_ORD(Signal* signal){
}
return;
}
+
+ if (tCase == 8011)
+ {
+ jam();
+ Uint32 bucket = signal->theData[1];
+ KeyTable<Table>::Iterator it;
+ if (signal->getLength() == 1)
+ {
+ jam();
+ bucket = 0;
+ infoEvent("-- Starting dump of subscribers --");
+ }
+
+ c_tables.next(bucket, it);
+ const Uint32 RT_BREAK = 16;
+ for(Uint32 i = 0; i<RT_BREAK || it.bucket == bucket; i++)
+ {
+ jam();
+ if(it.curr.i == RNIL)
+ {
+ jam();
+ infoEvent("-- Ending dump of subscribers --");
+ return;
+ }
+
+ infoEvent("Table: %u ver: %u #n: %u (ref,data,subscritopn)",
+ it.curr.p->m_tableId,
+ it.curr.p->m_schemaVersion,
+ it.curr.p->n_subscribers);
+
+ Ptr<Subscriber> ptr;
+ LocalDLList<Subscriber> list(c_subscriberPool, it.curr.p->c_subscribers);
+ for (list.first(ptr); !ptr.isNull(); list.next(ptr), i++)
+ {
+ jam();
+ infoEvent(" [ %x %u %u ]",
+ ptr.p->m_senderRef,
+ ptr.p->m_senderData,
+ ptr.p->m_subPtrI);
+ }
+ c_tables.next(it);
+ }
+
+ signal->theData[0] = tCase;
+ signal->theData[1] = it.bucket;
+ sendSignalWithDelay(reference(), GSN_DUMP_STATE_ORD, signal, 100, 2);
+ return;
+ }
}
/*************************************************************
@@ -2402,6 +2451,7 @@ Suma::execSUB_START_REQ(Signal* signal){
{
jam();
+ c_subscriberPool.release(subbPtr);
sendSubStartRef(signal, SubStartRef::PartiallyConnected);
return;
}
@@ -3655,6 +3705,8 @@ Suma::execSUB_GCP_COMPLETE_REP(Signal* signal)
if(m_gcp_complete_rep_count && !c_subscriber_nodes.isclear())
{
+ CRASH_INSERTION(13033);
+
NodeReceiverGroup rg(API_CLUSTERMGR, c_subscriber_nodes);
sendSignal(rg, GSN_SUB_GCP_COMPLETE_REP, signal,
SubGcpCompleteRep::SignalLength, JBB);
@@ -3674,8 +3726,8 @@ Suma::execSUB_GCP_COMPLETE_REP(Signal* signal)
{
if(m_active_buckets.get(i))
continue;
-
- if(c_buckets[i].m_buffer_tail != RNIL)
+
+ if (!c_subscriber_nodes.isclear())
{
//Uint32* dst;
get_buffer_ptr(signal, i, gci, 0);
diff --git a/storage/ndb/src/kernel/blocks/tsman.cpp b/storage/ndb/src/kernel/blocks/tsman.cpp
index 8f61ec0cf7b..3a7003d56c8 100644
--- a/storage/ndb/src/kernel/blocks/tsman.cpp
+++ b/storage/ndb/src/kernel/blocks/tsman.cpp
@@ -299,7 +299,7 @@ Tsman::execDUMP_STATE_ORD(Signal* signal){
Uint32 new_bits = curr_bits ^ rand();
Local_key key = chunks[chunk].start_page;
key.m_page_no += page;
- ndbrequire(update_page_free_bits(signal, &key, new_bits, 0) == 0);
+ ndbrequire(update_page_free_bits(signal, &key, new_bits) == 0);
}
}
}
@@ -366,6 +366,20 @@ Tsman::execCREATE_FILEGROUP_REQ(Signal* signal){
CreateFilegroupImplRef::SignalLength, JBB);
}
+NdbOut&
+operator<<(NdbOut& out, const File_formats::Datafile::Extent_header & obj)
+{
+ out << "table: " << obj.m_table
+ << " fragment: " << obj.m_fragment_id << " ";
+ for(Uint32 i = 0; i<32; i++)
+ {
+ char t[2];
+ BaseString::snprintf(t, sizeof(t), "%x", obj.get_free_bits(i));
+ out << t;
+ }
+ return out;
+}
+
void
Tsman::execDROP_FILEGROUP_REQ(Signal* signal){
jamEntry();
@@ -1590,8 +1604,7 @@ Tsman::execFREE_EXTENT_REQ(Signal* signal)
int
Tsman::update_page_free_bits(Signal* signal,
Local_key *key,
- unsigned committed_bits,
- Uint64 lsn)
+ unsigned committed_bits)
{
jamEntry();
@@ -1626,6 +1639,18 @@ Tsman::update_page_free_bits(Signal* signal,
File_formats::Datafile::Extent_header* header =
page->get_header(val.m_extent_no, val.m_extent_size);
+ if (header->m_table == RNIL)
+ {
+ ndbout << "update page free bits page: " << *key
+ << " " << *header << endl;
+ }
+
+ if (0)
+ {
+ ndbout << "update page free bits page(" << committed_bits << ") "
+ << *key << " " << *header << endl;
+ }
+
ndbrequire(header->m_table != RNIL);
Uint32 page_no_in_extent = calc_page_no_in_extent(key->m_page_no, &val);
@@ -1637,7 +1662,7 @@ Tsman::update_page_free_bits(Signal* signal,
Uint32 src = header->get_free_bits(page_no_in_extent) & UNCOMMITTED_MASK;
header->update_free_bits(page_no_in_extent, src | committed_bits);
- m_page_cache_client.update_lsn(preq.m_page, lsn);
+ m_page_cache_client.update_lsn(preq.m_page, 0);
return 0;
}
@@ -1725,6 +1750,11 @@ Tsman::unmap_page(Signal* signal, Local_key *key, Uint32 uncommitted_bits)
File_formats::Datafile::Extent_header* header =
page->get_header(val.m_extent_no, val.m_extent_size);
+ if (header->m_table == RNIL)
+ {
+ ndbout << "trying to unmap page: " << *key
+ << " " << *header << endl;
+ }
ndbrequire(header->m_table != RNIL);
Uint32 page_no_in_extent = calc_page_no_in_extent(key->m_page_no, &val);
@@ -1746,9 +1776,7 @@ Tsman::restart_undo_page_free_bits(Signal* signal,
Uint32 tableId,
Uint32 fragId,
Local_key *key,
- unsigned bits,
- Uint64 undo_lsn,
- Uint64 page_lsn)
+ unsigned bits)
{
jamEntry();
@@ -1782,21 +1810,7 @@ Tsman::restart_undo_page_free_bits(Signal* signal,
(File_formats::Datafile::Extent_page*)ptr_p;
File_formats::Datafile::Extent_header* header =
page->get_header(val.m_extent_no, val.m_extent_size);
-
- Uint64 lsn = 0;
- lsn += page->m_page_header.m_page_lsn_hi; lsn <<= 32;
- lsn += page->m_page_header.m_page_lsn_lo;
-
- if (undo_lsn > lsn && undo_lsn > page_lsn)
- {
- if (DBG_UNDO)
- ndbout << "tsman: ignore " << undo_lsn << "(" << lsn << ", "
- << page_lsn << ") "
- << *key << " "
- << " -> " << bits << endl;
- return 0;
- }
-
+
if (header->m_table == RNIL)
{
if (DBG_UNDO)
@@ -1815,7 +1829,7 @@ Tsman::restart_undo_page_free_bits(Signal* signal,
*/
if (DBG_UNDO)
{
- ndbout << "tsman: apply " << undo_lsn << "(" << lsn << ") "
+ ndbout << "tsman: apply "
<< *key << " " << (src & COMMITTED_MASK)
<< " -> " << bits << endl;
}
@@ -1863,7 +1877,7 @@ Tsman::execALLOC_PAGE_REQ(Signal* signal)
/**
* Handling of unmapped extent header pages is not implemented
*/
- int flags = 0;
+ int flags = Page_cache_client::DIRTY_REQ;
int real_page_id;
Uint32 page_no;
Uint32 src_bits;
diff --git a/storage/ndb/src/kernel/blocks/tsman.hpp b/storage/ndb/src/kernel/blocks/tsman.hpp
index 1293cc54141..20019e6d4d1 100644
--- a/storage/ndb/src/kernel/blocks/tsman.hpp
+++ b/storage/ndb/src/kernel/blocks/tsman.hpp
@@ -209,12 +209,12 @@ private:
void load_extent_page_callback(Signal*, Uint32, Uint32);
void create_file_ref(Signal*, Ptr<Tablespace>, Ptr<Datafile>,
Uint32,Uint32,Uint32);
- int update_page_free_bits(Signal*, Local_key*, unsigned committed_bits,
- Uint64 lsn);
+ int update_page_free_bits(Signal*, Local_key*, unsigned committed_bits);
+
int get_page_free_bits(Signal*, Local_key*, unsigned*, unsigned*);
int unmap_page(Signal*, Local_key*, unsigned uncommitted_bits);
int restart_undo_page_free_bits(Signal*, Uint32, Uint32, Local_key*,
- unsigned committed_bits, Uint64, Uint64);
+ unsigned committed_bits);
int alloc_extent(Signal* signal, Uint32 tablespace, Local_key* key);
int alloc_page_from_extent(Signal*, Uint32, Local_key*, Uint32 bits);
@@ -320,7 +320,7 @@ public:
/**
* Update page free bits
*/
- int update_page_free_bits(Local_key*, unsigned bits, Uint64 lsn);
+ int update_page_free_bits(Local_key*, unsigned bits);
/**
* Get page free bits
@@ -336,8 +336,7 @@ public:
/**
* Undo handling of page bits
*/
- int restart_undo_page_free_bits(Local_key*, unsigned bits,
- Uint64 lsn, Uint64 page_lsn);
+ int restart_undo_page_free_bits(Local_key*, unsigned bits);
/**
* Get tablespace info
@@ -417,10 +416,9 @@ Tablespace_client::free_extent(Local_key* key, Uint64 lsn)
inline
int
Tablespace_client::update_page_free_bits(Local_key *key,
- unsigned committed_bits,
- Uint64 lsn)
+ unsigned committed_bits)
{
- return m_tsman->update_page_free_bits(m_signal, key, committed_bits, lsn);
+ return m_tsman->update_page_free_bits(m_signal, key, committed_bits);
}
inline
@@ -442,17 +440,13 @@ Tablespace_client::unmap_page(Local_key *key, unsigned uncommitted_bits)
inline
int
Tablespace_client::restart_undo_page_free_bits(Local_key* key,
- unsigned committed_bits,
- Uint64 lsn,
- Uint64 page_lsn)
+ unsigned committed_bits)
{
return m_tsman->restart_undo_page_free_bits(m_signal,
m_table_id,
m_fragment_id,
key,
- committed_bits,
- lsn,
- page_lsn);
+ committed_bits);
}
#endif
diff --git a/storage/ndb/src/kernel/vm/SimulatedBlock.cpp b/storage/ndb/src/kernel/vm/SimulatedBlock.cpp
index bc16b9f364e..2963b8a02ad 100644
--- a/storage/ndb/src/kernel/vm/SimulatedBlock.cpp
+++ b/storage/ndb/src/kernel/vm/SimulatedBlock.cpp
@@ -1056,6 +1056,7 @@ SimulatedBlock::assembleFragments(Signal * signal){
/**
* Don't release allocated segments
*/
+ signal->header.m_fragmentInfo = 0;
signal->header.m_noOfSections = 0;
return false;
}
@@ -1083,6 +1084,7 @@ SimulatedBlock::assembleFragments(Signal * signal){
* fragInfo = 2
*/
if(fragInfo == 2){
+ signal->header.m_fragmentInfo = 0;
signal->header.m_noOfSections = 0;
return false;
}
diff --git a/storage/ndb/src/mgmclient/CommandInterpreter.cpp b/storage/ndb/src/mgmclient/CommandInterpreter.cpp
index 875cc2771ae..9e8910c9649 100644
--- a/storage/ndb/src/mgmclient/CommandInterpreter.cpp
+++ b/storage/ndb/src/mgmclient/CommandInterpreter.cpp
@@ -269,8 +269,8 @@ static const char* helpText =
"CLUSTERLOG TOGGLE [<severity>] ... Toggle severity filter on/off\n"
"CLUSTERLOG INFO Print cluster log information\n"
"<id> START Start data node (started with -n)\n"
-"<id> RESTART [-n] [-i] Restart data or management server node\n"
-"<id> STOP Stop data or management server node\n"
+"<id> RESTART [-n] [-i] [-a] Restart data or management server node\n"
+"<id> STOP [-a] Stop data or management server node\n"
"ENTER SINGLE USER MODE <id> Enter single user mode\n"
"EXIT SINGLE USER MODE Exit single user mode\n"
"<id> STATUS Print status\n"
@@ -434,7 +434,7 @@ static const char* helpTextRestart =
" NDB Cluster -- Management Client -- Help for RESTART command\n"
"---------------------------------------------------------------------------\n"
"RESTART Restart data or management server node\n\n"
-"<id> RESTART [-n] [-i] \n"
+"<id> RESTART [-n] [-i] [-a]\n"
" Restart the data or management node <id>(or All data nodes).\n\n"
" -n (--nostart) restarts the node but does not\n"
" make it join the cluster. Use '<id> START' to\n"
@@ -445,6 +445,7 @@ static const char* helpTextRestart =
" in the same node group during start up.\n\n"
" Consult the documentation before using -i.\n\n"
" INCORRECT USE OF -i WILL CAUSE DATA LOSS!\n"
+" -a Aborts the node, not syncing GCP.\n"
;
static const char* helpTextStop =
@@ -452,10 +453,11 @@ static const char* helpTextStop =
" NDB Cluster -- Management Client -- Help for STOP command\n"
"---------------------------------------------------------------------------\n"
"STOP Stop data or management server node\n\n"
-"<id> STOP Stop the data or management server node <id>.\n\n"
+"<id> STOP [-a] Stop the data or management server node <id>.\n\n"
" ALL STOP will just stop all data nodes.\n\n"
" If you desire to also shut down management servers,\n"
-" use SHUTDOWN instead.\n"
+" use SHUTDOWN instead.\n"
+" -a Aborts the node, not syncing GCP.\n"
;
static const char* helpTextEnterSingleUserMode =
diff --git a/storage/ndb/src/mgmsrv/MgmtSrvr.cpp b/storage/ndb/src/mgmsrv/MgmtSrvr.cpp
index af708664a69..184d51bad78 100644
--- a/storage/ndb/src/mgmsrv/MgmtSrvr.cpp
+++ b/storage/ndb/src/mgmsrv/MgmtSrvr.cpp
@@ -119,7 +119,11 @@ operator<<(NdbOut& out, const LogLevel & ll)
void
MgmtSrvr::logLevelThreadRun()
{
- while (!_isStopThread) {
+ while (!_isStopThread)
+ {
+ Vector<NodeId> failed_started_nodes;
+ Vector<EventSubscribeReq> failed_log_level_requests;
+
/**
* Handle started nodes
*/
@@ -144,14 +148,15 @@ MgmtSrvr::logLevelThreadRun()
m_started_nodes.unlock();
if (setEventReportingLevelImpl(node, req))
- {
- ndbout_c("setEventReportingLevelImpl(%d): failed", node);
- }
-
- SetLogLevelOrd ord;
- ord = m_nodeLogLevel[node];
- setNodeLogLevelImpl(node, ord);
-
+ {
+ failed_started_nodes.push_back(node);
+ }
+ else
+ {
+ SetLogLevelOrd ord;
+ ord = m_nodeLogLevel[node];
+ setNodeLogLevelImpl(node, ord);
+ }
m_started_nodes.lock();
}
}
@@ -166,17 +171,20 @@ MgmtSrvr::logLevelThreadRun()
if(req.blockRef == 0)
{
- req.blockRef = _ownReference;
- if (setEventReportingLevelImpl(0, req))
- {
- ndbout_c("setEventReportingLevelImpl: failed 2!");
- }
+ req.blockRef = _ownReference;
+ if (setEventReportingLevelImpl(0, req))
+ {
+ failed_log_level_requests.push_back(req);
+ }
}
else
{
SetLogLevelOrd ord;
ord = req;
- setNodeLogLevelImpl(req.blockRef, ord);
+ if (setNodeLogLevelImpl(req.blockRef, ord))
+ {
+ failed_log_level_requests.push_back(req);
+ }
}
m_log_level_requests.lock();
}
@@ -185,7 +193,28 @@ MgmtSrvr::logLevelThreadRun()
if(!ERROR_INSERTED(10000))
m_event_listner.check_listeners();
- NdbSleep_MilliSleep(_logLevelThreadSleep);
+ Uint32 sleeptime = _logLevelThreadSleep;
+ if (failed_started_nodes.size())
+ {
+ m_started_nodes.lock();
+ for (Uint32 i = 0; i<failed_started_nodes.size(); i++)
+ m_started_nodes.push_back(failed_started_nodes[i], false);
+ m_started_nodes.unlock();
+ failed_started_nodes.clear();
+ sleeptime = 100;
+ }
+
+ if (failed_log_level_requests.size())
+ {
+ m_log_level_requests.lock();
+ for (Uint32 i = 0; i<failed_log_level_requests.size(); i++)
+ m_log_level_requests.push_back(failed_log_level_requests[i], false);
+ m_log_level_requests.unlock();
+ failed_log_level_requests.clear();
+ sleeptime = 100;
+ }
+
+ NdbSleep_MilliSleep(sleeptime);
}
}
@@ -234,10 +263,10 @@ MgmtSrvr::startEventLog()
}
}
-void
-MgmtSrvr::stopEventLog()
+void
+MgmtSrvr::stopEventLog()
{
- // Nothing yet
+ g_eventLogger.close();
}
bool
@@ -1535,7 +1564,6 @@ MgmtSrvr::setEventReportingLevelImpl(int nodeId_arg,
{
SignalSender ss(theFacade);
NdbNodeBitmask nodes;
- int retries = 30;
nodes.clear();
while (1)
{
@@ -1572,18 +1600,8 @@ MgmtSrvr::setEventReportingLevelImpl(int nodeId_arg,
continue;
}
// api_reg_conf not recevied yet, need to retry
- break;
- }
- }
- if (nodeId <= max)
- {
- if (--retries)
- {
- ss.unlock();
- NdbSleep_MilliSleep(100);
- continue;
+ return SEND_OR_RECEIVE_FAILED;
}
- return SEND_OR_RECEIVE_FAILED;
}
if (nodeId_arg == 0)
@@ -1607,6 +1625,10 @@ MgmtSrvr::setEventReportingLevelImpl(int nodeId_arg,
continue; // node is not connected, skip
if (ss.sendSignal(nodeId, &ssig) == SEND_OK)
nodes.set(nodeId);
+ else if (max == nodeId)
+ {
+ return SEND_OR_RECEIVE_FAILED;
+ }
}
break;
}
@@ -2988,8 +3010,7 @@ int MgmtSrvr::connect_to_self(void)
return 0;
}
-
-
template class MutexVector<unsigned short>;
template class MutexVector<Ndb_mgmd_event_service::Event_listener>;
+template class Vector<EventSubscribeReq>;
template class MutexVector<EventSubscribeReq>;
diff --git a/storage/ndb/src/mgmsrv/Services.cpp b/storage/ndb/src/mgmsrv/Services.cpp
index 9272b5ab532..eeae61025b1 100644
--- a/storage/ndb/src/mgmsrv/Services.cpp
+++ b/storage/ndb/src/mgmsrv/Services.cpp
@@ -968,7 +968,6 @@ printNodeStatus(OutputStream *output,
MgmtSrvr &mgmsrv,
enum ndb_mgm_node_type type) {
NodeId nodeId = 0;
- mgmsrv.updateStatus();
while(mgmsrv.getNextNodeId(&nodeId, type)) {
enum ndb_mgm_node_status status;
Uint32 startPhase = 0,
@@ -1018,6 +1017,7 @@ MgmApiSession::getStatus(Parser<MgmApiSession>::Context &,
m_output->println("node status");
SLEEP_ERROR_INSERTED(6);
m_output->println("nodes: %d", noOfNodes);
+ m_mgmsrv.updateStatus();
SLEEP_ERROR_INSERTED(7);
printNodeStatus(m_output, m_mgmsrv, NDB_MGM_NODE_TYPE_NDB);
printNodeStatus(m_output, m_mgmsrv, NDB_MGM_NODE_TYPE_MGM);
diff --git a/storage/ndb/src/ndbapi/ClusterMgr.cpp b/storage/ndb/src/ndbapi/ClusterMgr.cpp
index 448bc1025e8..f5cc44f70d7 100644
--- a/storage/ndb/src/ndbapi/ClusterMgr.cpp
+++ b/storage/ndb/src/ndbapi/ClusterMgr.cpp
@@ -204,7 +204,10 @@ ClusterMgr::forceHB()
theFacade.sendSignalUnCond(&signal, nodeId);
}
- NdbCondition_WaitTimeout(waitForHBCond, theFacade.theMutexPtr, 1000);
+ /* Wait for nodes to reply - if any heartbeats was sent */
+ if (!waitForHBFromNodes.isclear())
+ NdbCondition_WaitTimeout(waitForHBCond, theFacade.theMutexPtr, 1000);
+
waitingForHB= false;
#ifdef DEBUG_REG
ndbout << "Still waiting for HB from " << waitForHBFromNodes.getText(buf) << endl;
diff --git a/storage/ndb/src/ndbapi/NdbBlob.cpp b/storage/ndb/src/ndbapi/NdbBlob.cpp
index 0fc96add084..f3d1dbe3dd1 100644
--- a/storage/ndb/src/ndbapi/NdbBlob.cpp
+++ b/storage/ndb/src/ndbapi/NdbBlob.cpp
@@ -1141,7 +1141,7 @@ NdbBlob::readTableParts(char* buf, Uint32 part, Uint32 count)
* table tuple does not fully protect blob parts since DBTUP
* commits each tuple separately.
*/
- tOp->readTuple() == -1 ||
+ tOp->readTuple(NdbOperation::LM_SimpleRead) == -1 ||
setPartKeyValue(tOp, part + n) == -1 ||
tOp->getValue((Uint32)3, buf) == NULL) {
setErrorCode(tOp);
diff --git a/storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp b/storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp
index a82983fca8c..dff953923fe 100644
--- a/storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp
+++ b/storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp
@@ -792,6 +792,18 @@ NdbEventOperationImpl::receive_event()
p = p->next();
}
}
+ // change the blobHandle's to refer to the new table object.
+ NdbBlob *p = theBlobList;
+ while (p)
+ {
+ int no = p->getColumn()->getColumnNo();
+ NdbColumnImpl *tAttrInfo = at->getColumn(no);
+ DBUG_PRINT("info", ("blob_handle: 0x%lx "
+ "switching column impl 0x%lx -> 0x%lx",
+ (long) p, (long) p->theColumn, (long) tAttrInfo));
+ p->theColumn = tAttrInfo;
+ p = p->next();
+ }
if (tmp_table_impl)
delete tmp_table_impl;
}
diff --git a/storage/ndb/src/ndbapi/NdbIndexOperation.cpp b/storage/ndb/src/ndbapi/NdbIndexOperation.cpp
index fc19bd251d4..921769f09e3 100644
--- a/storage/ndb/src/ndbapi/NdbIndexOperation.cpp
+++ b/storage/ndb/src/ndbapi/NdbIndexOperation.cpp
@@ -85,6 +85,9 @@ int NdbIndexOperation::readTuple(NdbOperation::LockMode lm)
case LM_CommittedRead:
return readTuple();
break;
+ case LM_SimpleRead:
+ return readTuple();
+ break;
default:
return -1;
};
diff --git a/storage/ndb/src/ndbapi/NdbOperation.cpp b/storage/ndb/src/ndbapi/NdbOperation.cpp
index 50531292e40..ddaf5d0b233 100644
--- a/storage/ndb/src/ndbapi/NdbOperation.cpp
+++ b/storage/ndb/src/ndbapi/NdbOperation.cpp
@@ -429,3 +429,9 @@ NdbOperation::getTable() const
{
return m_currentTable;
}
+
+NdbTransaction*
+NdbOperation::getNdbTransaction()
+{
+ return theNdbCon;
+}
diff --git a/storage/ndb/src/ndbapi/NdbOperationDefine.cpp b/storage/ndb/src/ndbapi/NdbOperationDefine.cpp
index c9459ff911c..21a6185347e 100644
--- a/storage/ndb/src/ndbapi/NdbOperationDefine.cpp
+++ b/storage/ndb/src/ndbapi/NdbOperationDefine.cpp
@@ -131,6 +131,8 @@ NdbOperation::readTuple(NdbOperation::LockMode lm)
case LM_CommittedRead:
return committedRead();
break;
+ case LM_SimpleRead:
+ return simpleRead();
default:
return -1;
};
@@ -185,24 +187,22 @@ NdbOperation::readTupleExclusive()
int
NdbOperation::simpleRead()
{
- /**
- * Currently/still disabled
- */
- return readTuple();
-#if 0
+ NdbTransaction* tNdbCon = theNdbCon;
int tErrorLine = theErrorLine;
if (theStatus == Init) {
theStatus = OperationDefined;
theOperationType = ReadRequest;
theSimpleIndicator = 1;
+ theDirtyIndicator = 0;
theErrorLine = tErrorLine++;
- theLockMode = LM_Read;
+ theLockMode = LM_SimpleRead;
+ m_abortOption = AO_IgnoreError;
+ tNdbCon->theSimpleState = 0;
return 0;
} else {
setErrorCode(4200);
return -1;
}//if
-#endif
}//NdbOperation::simpleRead()
/*****************************************************************************
@@ -338,28 +338,32 @@ NdbOperation::setReadLockMode(LockMode lockMode)
{
/* We only support changing lock mode for read operations at this time. */
assert(theOperationType == ReadRequest || theOperationType == ReadExclusive);
- switch (lockMode)
- {
- case LM_CommittedRead:
- theOperationType= ReadRequest;
- theSimpleIndicator= 1;
- theDirtyIndicator= 1;
- break;
- case LM_Read:
- theNdbCon->theSimpleState= 0;
- theOperationType= ReadRequest;
- theSimpleIndicator= 0;
- theDirtyIndicator= 0;
- break;
- case LM_Exclusive:
- theNdbCon->theSimpleState= 0;
- theOperationType= ReadExclusive;
- theSimpleIndicator= 0;
- theDirtyIndicator= 0;
- break;
- default:
- /* Not supported / invalid. */
- assert(false);
+ switch (lockMode) {
+ case LM_CommittedRead: /* TODO, check theNdbCon->theSimpleState */
+ theOperationType= ReadRequest;
+ theSimpleIndicator= 1;
+ theDirtyIndicator= 1;
+ break;
+ case LM_SimpleRead: /* TODO, check theNdbCon->theSimpleState */
+ theOperationType= ReadRequest;
+ theSimpleIndicator= 1;
+ theDirtyIndicator= 0;
+ break;
+ case LM_Read:
+ theNdbCon->theSimpleState= 0;
+ theOperationType= ReadRequest;
+ theSimpleIndicator= 0;
+ theDirtyIndicator= 0;
+ break;
+ case LM_Exclusive:
+ theNdbCon->theSimpleState= 0;
+ theOperationType= ReadExclusive;
+ theSimpleIndicator= 0;
+ theDirtyIndicator= 0;
+ break;
+ default:
+ /* Not supported / invalid. */
+ assert(false);
}
theLockMode= lockMode;
}
@@ -404,9 +408,8 @@ NdbOperation::getValue_impl(const NdbColumnImpl* tAttrInfo, char* aValue)
return NULL;
}//if
}//if
- Uint32 ah;
- AttributeHeader::init(&ah, tAttrInfo->m_attrId, 0);
- if (insertATTRINFO(ah) != -1) {
+ AttributeHeader ah(tAttrInfo->m_attrId, 0);
+ if (insertATTRINFO(ah.m_value) != -1) {
// Insert Attribute Id into ATTRINFO part.
/************************************************************************
@@ -532,12 +535,11 @@ NdbOperation::setValue( const NdbColumnImpl* tAttrInfo,
tAttrId = tAttrInfo->m_attrId;
m_no_disk_flag &= (tAttrInfo->m_storageType == NDB_STORAGETYPE_DISK ? 0:1);
const char *aValue = aValuePassed;
- Uint32 ahValue;
if (aValue == NULL) {
if (tAttrInfo->m_nullable) {
- AttributeHeader& ah = AttributeHeader::init(&ahValue, tAttrId, 0);
+ AttributeHeader ah(tAttrId, 0);
ah.setNULL();
- insertATTRINFO(ahValue);
+ insertATTRINFO(ah.m_value);
// Insert Attribute Id with the value
// NULL into ATTRINFO part.
DBUG_RETURN(0);
@@ -573,8 +575,8 @@ NdbOperation::setValue( const NdbColumnImpl* tAttrInfo,
// Excluding bits in last word
const Uint32 sizeInWords = sizeInBytes / 4;
- (void) AttributeHeader::init(&ahValue, tAttrId, sizeInBytes);
- insertATTRINFO( ahValue );
+ AttributeHeader ah(tAttrId, sizeInBytes);
+ insertATTRINFO( ah.m_value );
/***********************************************************************
* Check if the pointer of the value passed is aligned on a 4 byte boundary.
diff --git a/storage/ndb/src/ndbapi/NdbOperationExec.cpp b/storage/ndb/src/ndbapi/NdbOperationExec.cpp
index 9fe85265a0c..cd1ac44d82c 100644
--- a/storage/ndb/src/ndbapi/NdbOperationExec.cpp
+++ b/storage/ndb/src/ndbapi/NdbOperationExec.cpp
@@ -24,6 +24,7 @@
#include "Interpreter.hpp"
#include <AttributeHeader.hpp>
#include <signaldata/TcKeyReq.hpp>
+#include <signaldata/TcKeyRef.hpp>
#include <signaldata/KeyInfo.hpp>
#include <signaldata/AttrInfo.hpp>
#include <signaldata/ScanTab.hpp>
@@ -175,12 +176,11 @@ NdbOperation::prepareSend(Uint32 aTC_ConnectPtr,
Uint8 tInterpretIndicator = theInterpretIndicator;
Uint8 tNoDisk = m_no_disk_flag;
-//-------------------------------------------------------------
-// Simple state is set if start and commit is set and it is
-// a read request. Otherwise it is set to zero.
-//-------------------------------------------------------------
+ /**
+ * A dirty read, can not abort the transaction
+ */
Uint8 tReadInd = (theOperationType == ReadRequest);
- Uint8 tSimpleState = tReadInd & tSimpleIndicator;
+ Uint8 tDirtyState = tReadInd & tDirtyIndicator;
tcKeyReq->transId1 = tTransId1;
tcKeyReq->transId2 = tTransId2;
@@ -206,8 +206,8 @@ NdbOperation::prepareSend(Uint32 aTC_ConnectPtr,
tcKeyReq->setOperationType(tReqInfo, tOperationType);
tcKeyReq->setKeyLength(tReqInfo, tTupKeyLen);
- // A simple read is always ignore error
- abortOption = tSimpleState ? (Uint8) AO_IgnoreError : (Uint8) abortOption;
+ // A dirty read is always ignore error
+ abortOption = tDirtyState ? (Uint8) AO_IgnoreError : (Uint8) abortOption;
tcKeyReq->setAbortOption(tReqInfo, abortOption);
m_abortOption = abortOption;
@@ -546,11 +546,17 @@ NdbOperation::receiveTCKEYREF( NdbApiSignal* aSignal)
}//if
setErrorCode(aSignal->readData(4));
+ if (aSignal->getLength() == TcKeyRef::SignalLength)
+ {
+ // Signal may contain additional error data
+ theError.details = (char *) aSignal->readData(5);
+ }
+
theStatus = Finished;
theReceiver.m_received_result_length = ~0;
- // not simple read
- if(! (theOperationType == ReadRequest && theSimpleIndicator))
+ // not dirty read
+ if(! (theOperationType == ReadRequest && theDirtyIndicator))
{
theNdbCon->OpCompleteFailure(this);
return -1;
diff --git a/storage/ndb/src/ndbapi/NdbReceiver.cpp b/storage/ndb/src/ndbapi/NdbReceiver.cpp
index 34b3a14ac6e..5a311bcbefe 100644
--- a/storage/ndb/src/ndbapi/NdbReceiver.cpp
+++ b/storage/ndb/src/ndbapi/NdbReceiver.cpp
@@ -283,7 +283,7 @@ NdbReceiver::execTRANSID_AI(const Uint32* aDataPtr, Uint32 aLength)
Uint32 tmp = m_received_result_length + aLength;
m_received_result_length = tmp;
- return (tmp == exp || (exp > TcKeyConf::SimpleReadBit) ? 1 : 0);
+ return (tmp == exp || (exp > TcKeyConf::DirtyReadBit) ? 1 : 0);
}
int
diff --git a/storage/ndb/src/ndbapi/NdbScanFilter.cpp b/storage/ndb/src/ndbapi/NdbScanFilter.cpp
index fb47772fdea..25f74ce71a4 100644
--- a/storage/ndb/src/ndbapi/NdbScanFilter.cpp
+++ b/storage/ndb/src/ndbapi/NdbScanFilter.cpp
@@ -14,11 +14,15 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#include <NdbScanFilter.hpp>
+#include <Ndb.hpp>
#include <NdbOperation.hpp>
#include "NdbDictionaryImpl.hpp"
#include <Vector.hpp>
#include <NdbOut.hpp>
#include <Interpreter.hpp>
+#include <signaldata/AttrInfo.hpp>
+#include "NdbApiSignal.hpp"
+#include "NdbUtil.hpp"
#ifdef VM_TRACE
#include <NdbEnv.h>
@@ -52,14 +56,37 @@ public:
int cond_col_const(Interpreter::BinaryCondition, Uint32 attrId,
const void * value, Uint32 len);
+
+ bool m_abort_on_too_large;
+
+ NdbOperation::OperationStatus m_initial_op_status;
+ Uint32 m_initial_AI_size;
+ Uint32 m_max_size;
+
+ Uint32 get_size() {
+ assert(m_operation->theTotalCurrAI_Len >= m_initial_AI_size);
+ return m_operation->theTotalCurrAI_Len - m_initial_AI_size;
+ }
+ bool check_size() {
+ if (get_size() <= m_max_size)
+ return true;
+ handle_filter_too_large();
+ return false;
+ }
+ void handle_filter_too_large();
+
+ NdbError m_error;
};
const Uint32 LabelExit = ~0;
-NdbScanFilter::NdbScanFilter(class NdbOperation * op)
+NdbScanFilter::NdbScanFilter(class NdbOperation * op,
+ bool abort_on_too_large,
+ Uint32 max_size)
: m_impl(* new NdbScanFilterImpl())
{
+ DBUG_ENTER("NdbScanFilter::NdbScanFilter");
m_impl.m_current.m_group = (NdbScanFilter::Group)0;
m_impl.m_current.m_popCount = 0;
m_impl.m_current.m_ownLabel = 0;
@@ -69,6 +96,21 @@ NdbScanFilter::NdbScanFilter(class NdbOperation * op)
m_impl.m_latestAttrib = ~0;
m_impl.m_operation = op;
m_impl.m_negative = 0;
+
+ DBUG_PRINT("info", ("op status: %d tot AI: %u in curr: %u",
+ op->theStatus,
+ op->theTotalCurrAI_Len, op->theAI_LenInCurrAI));
+
+ m_impl.m_abort_on_too_large = abort_on_too_large;
+
+ m_impl.m_initial_op_status = op->theStatus;
+ m_impl.m_initial_AI_size = op->theTotalCurrAI_Len;
+ if (max_size > NDB_MAX_SCANFILTER_SIZE_IN_WORDS)
+ max_size = NDB_MAX_SCANFILTER_SIZE_IN_WORDS;
+ m_impl.m_max_size = max_size;
+
+ m_impl.m_error.code = 0;
+ DBUG_VOID_RETURN;
}
NdbScanFilter::~NdbScanFilter(){
@@ -200,30 +242,38 @@ NdbScanFilter::end(){
switch(tmp.m_group){
case NdbScanFilter::AND:
if(tmp.m_trueLabel == (Uint32)~0){
- m_impl.m_operation->interpret_exit_ok();
+ if (m_impl.m_operation->interpret_exit_ok() == -1)
+ return -1;
} else {
- m_impl.m_operation->branch_label(tmp.m_trueLabel);
+ if (m_impl.m_operation->branch_label(tmp.m_trueLabel) == -1)
+ return -1;
}
break;
case NdbScanFilter::NAND:
if(tmp.m_trueLabel == (Uint32)~0){
- m_impl.m_operation->interpret_exit_nok();
+ if (m_impl.m_operation->interpret_exit_nok() == -1)
+ return -1;
} else {
- m_impl.m_operation->branch_label(tmp.m_falseLabel);
+ if (m_impl.m_operation->branch_label(tmp.m_falseLabel) == -1)
+ return -1;
}
break;
case NdbScanFilter::OR:
if(tmp.m_falseLabel == (Uint32)~0){
- m_impl.m_operation->interpret_exit_nok();
+ if (m_impl.m_operation->interpret_exit_nok() == -1)
+ return -1;
} else {
- m_impl.m_operation->branch_label(tmp.m_falseLabel);
+ if (m_impl.m_operation->branch_label(tmp.m_falseLabel) == -1)
+ return -1;
}
break;
case NdbScanFilter::NOR:
if(tmp.m_falseLabel == (Uint32)~0){
- m_impl.m_operation->interpret_exit_ok();
+ if (m_impl.m_operation->interpret_exit_ok() == -1)
+ return -1;
} else {
- m_impl.m_operation->branch_label(tmp.m_trueLabel);
+ if (m_impl.m_operation->branch_label(tmp.m_trueLabel) == -1)
+ return -1;
}
break;
default:
@@ -231,24 +281,29 @@ NdbScanFilter::end(){
return -1;
}
- m_impl.m_operation->def_label(tmp.m_ownLabel);
+ if (m_impl.m_operation->def_label(tmp.m_ownLabel) == -1)
+ return -1;
if(m_impl.m_stack.size() == 0){
switch(tmp.m_group){
case NdbScanFilter::AND:
case NdbScanFilter::NOR:
- m_impl.m_operation->interpret_exit_nok();
+ if (m_impl.m_operation->interpret_exit_nok() == -1)
+ return -1;
break;
case NdbScanFilter::OR:
case NdbScanFilter::NAND:
- m_impl.m_operation->interpret_exit_ok();
+ if (m_impl.m_operation->interpret_exit_ok() == -1)
+ return -1;
break;
default:
m_impl.m_operation->setErrorCodeAbort(4260);
return -1;
}
}
-
+
+ if (!m_impl.check_size())
+ return -1;
return 0;
}
@@ -261,10 +316,16 @@ NdbScanFilter::istrue(){
}
if(m_impl.m_current.m_trueLabel == (Uint32)~0){
- return m_impl.m_operation->interpret_exit_ok();
+ if (m_impl.m_operation->interpret_exit_ok() == -1)
+ return -1;
} else {
- return m_impl.m_operation->branch_label(m_impl.m_current.m_trueLabel);
+ if (m_impl.m_operation->branch_label(m_impl.m_current.m_trueLabel) == -1)
+ return -1;
}
+
+ if (!m_impl.check_size())
+ return -1;
+ return 0;
}
int
@@ -276,12 +337,22 @@ NdbScanFilter::isfalse(){
}
if(m_impl.m_current.m_falseLabel == (Uint32)~0){
- return m_impl.m_operation->interpret_exit_nok();
+ if (m_impl.m_operation->interpret_exit_nok() == -1)
+ return -1;
} else {
- return m_impl.m_operation->branch_label(m_impl.m_current.m_falseLabel);
+ if (m_impl.m_operation->branch_label(m_impl.m_current.m_falseLabel) == -1)
+ return -1;
}
+
+ if (!m_impl.check_size())
+ return -1;
+ return 0;
}
+NdbOperation *
+NdbScanFilter::getNdbOperation(){
+ return m_impl.m_operation;
+}
#define action(x, y, z)
@@ -330,7 +401,11 @@ NdbScanFilterImpl::cond_col(Interpreter::UnaryCondition op, Uint32 AttrId){
}
Branch1 branch = table2[op].m_branches[m_current.m_group];
- (m_operation->* branch)(AttrId, m_current.m_ownLabel);
+ if ((m_operation->* branch)(AttrId, m_current.m_ownLabel) == -1)
+ return -1;
+
+ if (!check_size())
+ return -1;
return 0;
}
@@ -463,8 +538,12 @@ NdbScanFilterImpl::cond_col_const(Interpreter::BinaryCondition op,
return -1;
}
- int ret = (m_operation->* branch)(AttrId, value, len, false, m_current.m_ownLabel);
- return ret;
+ if ((m_operation->* branch)(AttrId, value, len, false, m_current.m_ownLabel) == -1)
+ return -1;
+
+ if (!check_size())
+ return -1;
+ return 0;
}
int
@@ -490,7 +569,130 @@ NdbScanFilter::cmp(BinaryCondition cond, int ColId,
return m_impl.cond_col_const(Interpreter::NOT_LIKE, ColId, val, len);
}
return -1;
-}
+}
+
+void
+NdbScanFilterImpl::handle_filter_too_large()
+{
+ DBUG_ENTER("NdbScanFilterImpl::handle_filter_too_large");
+
+ NdbOperation* const op = m_operation;
+ m_error.code = NdbScanFilter::FilterTooLarge;
+ if (m_abort_on_too_large)
+ op->setErrorCodeAbort(m_error.code);
+
+ /*
+ * Possible interpreted parts at this point are:
+ *
+ * 1. initial read
+ * 2. interpreted program
+ *
+ * It is assumed that NdbScanFilter has created all of 2
+ * so that we don't have to save interpreter state.
+ */
+
+ const Uint32 size = get_size();
+ assert(size != 0);
+
+ // new ATTRINFO size
+ const Uint32 new_size = m_initial_AI_size;
+
+ // find last signal for new size
+ assert(op->theFirstATTRINFO != NULL);
+ NdbApiSignal* lastSignal = op->theFirstATTRINFO;
+ Uint32 n = 0;
+ while (n + AttrInfo::DataLength < new_size) {
+ lastSignal = lastSignal->next();
+ assert(lastSignal != NULL);
+ n += AttrInfo::DataLength;
+ }
+ assert(n < size);
+
+ // release remaining signals
+ NdbApiSignal* tSignal = lastSignal->next();
+ op->theNdb->releaseSignalsInList(&tSignal);
+ lastSignal->next(NULL);
+
+ // length of lastSignal
+ const Uint32 new_curr = AttrInfo::HeaderLength + new_size - n;
+ assert(new_curr <= 25);
+
+ DBUG_PRINT("info", ("op status: %d->%d tot AI: %u->%u in curr: %u->%u",
+ op->theStatus, m_initial_op_status,
+ op->theTotalCurrAI_Len, new_size,
+ op->theAI_LenInCurrAI, new_curr));
+
+ // reset op state
+ op->theStatus = m_initial_op_status;
+
+ // reset interpreter state to initial
+
+ NdbBranch* tBranch = op->theFirstBranch;
+ while (tBranch != NULL) {
+ NdbBranch* tmp = tBranch;
+ tBranch = tBranch->theNext;
+ op->theNdb->releaseNdbBranch(tmp);
+ }
+ op->theFirstBranch = NULL;
+ op->theLastBranch = NULL;
+
+ NdbLabel* tLabel = op->theFirstLabel;
+ while (tLabel != NULL) {
+ NdbLabel* tmp = tLabel;
+ tLabel = tLabel->theNext;
+ op->theNdb->releaseNdbLabel(tmp);
+ }
+ op->theFirstLabel = NULL;
+ op->theLastLabel = NULL;
+
+ NdbCall* tCall = op->theFirstCall;
+ while (tCall != NULL) {
+ NdbCall* tmp = tCall;
+ tCall = tCall->theNext;
+ op->theNdb->releaseNdbCall(tmp);
+ }
+ op->theFirstCall = NULL;
+ op->theLastCall = NULL;
+
+ NdbSubroutine* tSubroutine = op->theFirstSubroutine;
+ while (tSubroutine != NULL) {
+ NdbSubroutine* tmp = tSubroutine;
+ tSubroutine = tSubroutine->theNext;
+ op->theNdb->releaseNdbSubroutine(tmp);
+ }
+ op->theFirstSubroutine = NULL;
+ op->theLastSubroutine = NULL;
+
+ op->theNoOfLabels = 0;
+ op->theNoOfSubroutines = 0;
+
+ // reset AI size
+ op->theTotalCurrAI_Len = new_size;
+ op->theAI_LenInCurrAI = new_curr;
+
+ // reset signal pointers
+ op->theCurrentATTRINFO = lastSignal;
+ op->theATTRINFOptr = &lastSignal->getDataPtrSend()[new_curr];
+
+ // interpreter sizes are set later somewhere
+
+ DBUG_VOID_RETURN;
+}
+
+static void
+update(const NdbError & _err){
+ NdbError & error = (NdbError &) _err;
+ ndberror_struct ndberror = (ndberror_struct)error;
+ ndberror_update(&ndberror);
+ error = NdbError(ndberror);
+}
+
+const NdbError &
+NdbScanFilter::getNdbError() const
+{
+ update(m_impl.m_error);
+ return m_impl.m_error;
+}
#if 0
diff --git a/storage/ndb/src/ndbapi/NdbScanOperation.cpp b/storage/ndb/src/ndbapi/NdbScanOperation.cpp
index 89782453a72..afbec070ac8 100644
--- a/storage/ndb/src/ndbapi/NdbScanOperation.cpp
+++ b/storage/ndb/src/ndbapi/NdbScanOperation.cpp
@@ -237,6 +237,7 @@ NdbScanOperation::setReadLockMode(LockMode lockMode)
lockHoldMode= false;
readCommitted= true;
break;
+ case LM_SimpleRead:
case LM_Read:
lockExcl= false;
lockHoldMode= true;
@@ -872,6 +873,10 @@ NdbScanOperation::doSendScan(int aProcessorId)
// sending it. This could not be done in openScan because
// we created the ATTRINFO signals after the SCAN_TABREQ signal.
ScanTabReq * const req = CAST_PTR(ScanTabReq, tSignal->getDataPtrSend());
+ if (unlikely(theTotalCurrAI_Len > ScanTabReq::MaxTotalAttrInfo)) {
+ setErrorCode(4257);
+ return -1;
+ }
req->attrLenKeyLen = (tupKeyLen << 16) | theTotalCurrAI_Len;
Uint32 tmp = req->requestInfo;
ScanTabReq::setDistributionKeyFlag(tmp, theDistrKeyIndicator_);
diff --git a/storage/ndb/src/ndbapi/NdbTransaction.cpp b/storage/ndb/src/ndbapi/NdbTransaction.cpp
index 55c6f0f4b99..17c7188bff2 100644
--- a/storage/ndb/src/ndbapi/NdbTransaction.cpp
+++ b/storage/ndb/src/ndbapi/NdbTransaction.cpp
@@ -30,6 +30,7 @@
#include <signaldata/TcCommit.hpp>
#include <signaldata/TcKeyFailConf.hpp>
#include <signaldata/TcHbRep.hpp>
+#include <signaldata/TcRollbackRep.hpp>
/*****************************************************************************
NdbTransaction( Ndb* aNdb );
@@ -1729,6 +1730,8 @@ Remark: Handles the reception of the ROLLBACKREP signal.
int
NdbTransaction::receiveTCROLLBACKREP( NdbApiSignal* aSignal)
{
+ DBUG_ENTER("NdbTransaction::receiveTCROLLBACKREP");
+
/****************************************************************************
Check that we are expecting signals from this transaction and that it doesn't
belong to a transaction already completed. Simply ignore messages from other
@@ -1736,6 +1739,11 @@ transactions.
****************************************************************************/
if(checkState_TransId(aSignal->getDataPtr() + 1)){
theError.code = aSignal->readData(4);// Override any previous errors
+ if (aSignal->getLength() == TcRollbackRep::SignalLength)
+ {
+ // Signal may contain additional error data
+ theError.details = (char *) aSignal->readData(5);
+ }
/**********************************************************************/
/* A serious error has occured. This could be due to deadlock or */
@@ -1747,14 +1755,14 @@ transactions.
theCompletionStatus = CompletedFailure;
theCommitStatus = Aborted;
theReturnStatus = ReturnFailure;
- return 0;
+ DBUG_RETURN(0);
} else {
#ifdef NDB_NO_DROPPED_SIGNAL
abort();
#endif
}
- return -1;
+ DBUG_RETURN(-1);
}//NdbTransaction::receiveTCROLLBACKREP()
/*******************************************************************************
@@ -1787,8 +1795,8 @@ from other transactions.
const Uint32 tAttrInfoLen = *tPtr++;
if (tOp && tOp->checkMagicNumber()) {
Uint32 done = tOp->execTCOPCONF(tAttrInfoLen);
- if(tAttrInfoLen > TcKeyConf::SimpleReadBit){
- Uint32 node = tAttrInfoLen & (~TcKeyConf::SimpleReadBit);
+ if(tAttrInfoLen > TcKeyConf::DirtyReadBit){
+ Uint32 node = tAttrInfoLen & (~TcKeyConf::DirtyReadBit);
NdbNodeBitmask::set(m_db_nodes, node);
if(NdbNodeBitmask::get(m_failed_db_nodes, node) && !done)
{
@@ -2182,7 +2190,7 @@ NdbTransaction::report_node_failure(Uint32 id){
* 4) X X
*/
NdbOperation* tmp = theFirstExecOpInList;
- const Uint32 len = TcKeyConf::SimpleReadBit | id;
+ const Uint32 len = TcKeyConf::DirtyReadBit | id;
Uint32 tNoComp = theNoOfOpCompleted;
Uint32 tNoSent = theNoOfOpSent;
Uint32 count = 0;
diff --git a/storage/ndb/src/ndbapi/TransporterFacade.cpp b/storage/ndb/src/ndbapi/TransporterFacade.cpp
index eabfc6bc371..22eee859ef3 100644
--- a/storage/ndb/src/ndbapi/TransporterFacade.cpp
+++ b/storage/ndb/src/ndbapi/TransporterFacade.cpp
@@ -1501,9 +1501,9 @@ void PollGuard::unlock_and_signal()
if (t_signal_cond_waiter)
t_signal_cond_waiter->set_poll_owner(true);
}
- m_tp->unlock_mutex();
if (t_signal_cond_waiter)
t_signal_cond_waiter->cond_signal();
+ m_tp->unlock_mutex();
m_locked=false;
}
diff --git a/storage/ndb/src/ndbapi/ndberror.c b/storage/ndb/src/ndbapi/ndberror.c
index a0417e5b118..e7f946118f2 100644
--- a/storage/ndb/src/ndbapi/ndberror.c
+++ b/storage/ndb/src/ndbapi/ndberror.c
@@ -169,7 +169,7 @@ ErrorBundle ErrorCodes[] = {
{ 219, DMEC, TR, "219" },
{ 233, DMEC, TR,
"Out of operation records in transaction coordinator (increase MaxNoOfConcurrentOperations)" },
- { 275, DMEC, TR, "275" },
+ { 275, DMEC, TR, "Out of transaction records for complete phase (increase MaxNoOfConcurrentTransactions)" },
{ 279, DMEC, TR, "Out of transaction markers in transaction coordinator" },
{ 414, DMEC, TR, "414" },
{ 418, DMEC, TR, "Out of transaction buffers in LQH" },
@@ -624,6 +624,7 @@ ErrorBundle ErrorCodes[] = {
{ 4273, DMEC, IE, "No blob table in dict cache" },
{ 4274, DMEC, IE, "Corrupted main table PK in blob operation" },
{ 4275, DMEC, AE, "The blob method is incompatible with operation type or lock mode" },
+ { 4294, DMEC, AE, "Scan filter is too large, discarded" },
{ NO_CONTACT_WITH_PROCESS, DMEC, AE,
"No contact with the process (dead ?)."},
@@ -765,8 +766,6 @@ ndberror_update(ndberror_struct * error){
if(!found){
error->status = ST_U;
}
-
- error->details = 0;
}
#if CHECK_ERRORCODES
diff --git a/storage/ndb/test/include/HugoTransactions.hpp b/storage/ndb/test/include/HugoTransactions.hpp
index e2b12f261a8..e8f7b33e0ed 100644
--- a/storage/ndb/test/include/HugoTransactions.hpp
+++ b/storage/ndb/test/include/HugoTransactions.hpp
@@ -36,6 +36,16 @@ public:
int updateValue = 0,
bool abort = false);
+ int loadTableStartFrom(Ndb*,
+ int startFrom,
+ int records,
+ int batch = 512,
+ bool allowConstraintViolation = true,
+ int doSleep = 0,
+ bool oneTrans = false,
+ int updateValue = 0,
+ bool abort = false);
+
int scanReadRecords(Ndb*,
int records,
int abort = 0,
@@ -56,6 +66,11 @@ public:
int batchsize = 1,
NdbOperation::LockMode = NdbOperation::LM_Read);
+ int scanUpdateRecords(Ndb*, NdbScanOperation::ScanFlag,
+ int records,
+ int abort = 0,
+ int parallelism = 0);
+
int scanUpdateRecords(Ndb*,
int records,
int abort = 0,
@@ -90,9 +105,12 @@ public:
int records,
int percentToLock = 1,
int lockTime = 1000);
+
int fillTable(Ndb*,
int batch=512);
+ int fillTableStartFrom(Ndb*, int startFrom, int batch=512);
+
/**
* Reading using UniqHashIndex with key = pk
*/
diff --git a/storage/ndb/test/include/UtilTransactions.hpp b/storage/ndb/test/include/UtilTransactions.hpp
index 75bbcd9c776..193398c3da2 100644
--- a/storage/ndb/test/include/UtilTransactions.hpp
+++ b/storage/ndb/test/include/UtilTransactions.hpp
@@ -30,6 +30,11 @@ public:
int closeTransaction(Ndb*);
int clearTable(Ndb*,
+ NdbScanOperation::ScanFlag,
+ int records = 0,
+ int parallelism = 0);
+
+ int clearTable(Ndb*,
int records = 0,
int parallelism = 0);
diff --git a/storage/ndb/test/include/dbutil.hpp b/storage/ndb/test/include/dbutil.hpp
new file mode 100755
index 00000000000..2b36965715f
--- /dev/null
+++ b/storage/ndb/test/include/dbutil.hpp
@@ -0,0 +1,97 @@
+// dbutil.h: interface for the database utilities class.
+//////////////////////////////////////////////////////////////////////
+// Supplies a database to the test application
+//////////////////////////////////////////////////////////////////////
+
+#ifndef DBUTIL_HPP
+#define DBUTIL_HPP
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+#include <time.h>
+#include <stdio.h>
+#include <string.h>
+#include <mysql.h>
+//include "rand.h"
+#include <stdlib.h>
+
+//#define DEBUG
+#define DIE_UNLESS(expr) \
+ ((void) ((expr) ? 0 : (Die(__FILE__, __LINE__, #expr), 0)))
+#define DIE(expr) \
+ Die(__FILE__, __LINE__, #expr)
+#define myerror(msg) PrintError(msg)
+#define mysterror(stmt, msg) PrintStError(stmt, msg)
+#define CheckStmt(stmt) \
+{ \
+if ( stmt == 0) \
+ myerror(NULL); \
+DIE_UNLESS(stmt != 0); \
+}
+
+#define check_execute(stmt, r) \
+{ \
+if (r) \
+ mysterror(stmt, NULL); \
+DIE_UNLESS(r == 0);\
+}
+
+#define TRUE 1
+#define FALSE 0
+
+
+class dbutil
+{
+public:
+
+ dbutil(const char * databaseName);
+ ~dbutil();
+
+ void DatabaseLogin(const char * system,
+ const char * usr,
+ const char * password,
+ unsigned int portIn,
+ const char * sockIn,
+ bool transactional);
+ char * GetDbName(){return dbs;};
+ char * GetUser(){return user;};
+ char * GetPassword(){return pass;};
+ char * GetHost(){return host;};
+ char * GetSocket(){return socket;};
+ const char * GetServerType(){return mysql_get_server_info(myDbHandel);};
+ MYSQL* GetDbHandel(){return myDbHandel;};
+ MYSQL_STMT *STDCALL MysqlSimplePrepare(const char *query);
+ int Select_DB();
+ int Do_Query(char * stm);
+ const char * GetError();
+ int GetErrorNumber();
+ unsigned long SelectCountTable(const char * table);
+
+private:
+
+ //Connect variables
+ char * databaseName; //hold results file name
+ char host[256]; // Computer to connect to
+ char user[256]; // MySQL User
+ char pass[256]; // MySQL User Password
+ char dbs[256]; // Database to use (TPCB)
+ unsigned int port; // MySQL Server port
+ char socket[256]; // MySQL Server Unix Socket
+ MYSQL *myDbHandel;
+
+ void DatabaseLogout();
+
+ void SetDbName(const char * name){strcpy((char *)dbs, name);};
+ void SetUser(const char * userName){strcpy((char *)user, userName);};
+ void SetPassword(const char * password){strcpy((char *)pass,password);};
+ void SetHost(const char * system){strcpy((char*)host, system);};
+ void SetPort(unsigned int portIn){port=portIn;};
+ void SetSocket(const char * sockIn){strcpy((char *)socket, sockIn);};
+ void PrintError(const char *msg);
+ void PrintStError(MYSQL_STMT *stmt, const char *msg);
+ void Die(const char *file, int line, const char *expr); // stop program
+
+};
+#endif
+
diff --git a/storage/ndb/test/ndbapi/testBasic.cpp b/storage/ndb/test/ndbapi/testBasic.cpp
index 952b5a50dc5..ac23ceaad18 100644
--- a/storage/ndb/test/ndbapi/testBasic.cpp
+++ b/storage/ndb/test/ndbapi/testBasic.cpp
@@ -136,31 +136,13 @@ int runPkRead(NDBT_Context* ctx, NDBT_Step* step){
int loops = ctx->getNumLoops();
int records = ctx->getNumRecords();
int batchSize = ctx->getProperty("BatchSize", 1);
+ int lm = ctx->getProperty("LockMode", NdbOperation::LM_Read);
int i = 0;
HugoTransactions hugoTrans(*ctx->getTab());
while (i<loops) {
g_info << i << ": ";
- if (hugoTrans.pkReadRecords(GETNDB(step), records, batchSize) != NDBT_OK){
- g_info << endl;
- return NDBT_FAILED;
- }
- i++;
- }
- g_info << endl;
- return NDBT_OK;
-}
-
-int runPkDirtyRead(NDBT_Context* ctx, NDBT_Step* step){
- int loops = ctx->getNumLoops();
- int records = ctx->getNumRecords();
- int batchSize = ctx->getProperty("BatchSize", 1);
- int i = 0;
- bool dirty = true;
- HugoTransactions hugoTrans(*ctx->getTab());
- while (i<loops) {
- g_info << i << ": ";
- if (hugoTrans.pkReadRecords(GETNDB(step), records, batchSize,
- NdbOperation::LM_CommittedRead) != NDBT_OK){
+ if (hugoTrans.pkReadRecords(GETNDB(step), records, batchSize,
+ (NdbOperation::LockMode)lm) != NDBT_OK){
g_info << endl;
return NDBT_FAILED;
}
@@ -1552,14 +1534,23 @@ TESTCASE("PkInsert",
}
TESTCASE("PkRead",
"Verify that we can insert, read and delete from this table using PK"){
+ TC_PROPERTY("LockMode", NdbOperation::LM_Read);
INITIALIZER(runLoadTable);
STEP(runPkRead);
FINALIZER(runClearTable);
}
TESTCASE("PkDirtyRead",
"Verify that we can insert, dirty read and delete from this table using PK"){
+ TC_PROPERTY("LockMode", NdbOperation::LM_Dirty);
INITIALIZER(runLoadTable);
- STEP(runPkDirtyRead);
+ STEP(runPkRead);
+ FINALIZER(runClearTable);
+}
+TESTCASE("PkSimpleRead",
+ "Verify that we can insert, simple read and delete from this table using PK"){
+ TC_PROPERTY("LockMode", NdbOperation::LM_SimpleRead);
+ INITIALIZER(runLoadTable);
+ STEP(runPkRead);
FINALIZER(runClearTable);
}
TESTCASE("PkUpdate",
diff --git a/storage/ndb/test/ndbapi/testDict.cpp b/storage/ndb/test/ndbapi/testDict.cpp
index 13c071f968e..e1b8f2b3c7f 100644
--- a/storage/ndb/test/ndbapi/testDict.cpp
+++ b/storage/ndb/test/ndbapi/testDict.cpp
@@ -684,7 +684,7 @@ int runTestFragmentTypes(NDBT_Context* ctx, NDBT_Step* step){
CHECK(utilTrans.selectCount(pNdb, 64, &count) == 0);
CHECK(count == records);
CHECK(hugoTrans.pkDelRecords(pNdb, records/2) == 0);
- CHECK(hugoTrans.scanUpdateRecords(pNdb, records) == 0);
+ CHECK(hugoTrans.scanUpdateRecords(pNdb, records/2) == 0);
CHECK(utilTrans.selectCount(pNdb, 64, &count) == 0);
CHECK(count == (records/2));
@@ -862,7 +862,7 @@ int runPkSizes(NDBT_Context* ctx, NDBT_Step* step){
CHECK(utilTrans.selectCount(pNdb, 64, &count) == 0);
CHECK(count == records);
CHECK(hugoTrans.pkDelRecords(pNdb, records/2) == 0);
- CHECK(hugoTrans.scanUpdateRecords(pNdb, records) == 0);
+ CHECK(hugoTrans.scanUpdateRecords(pNdb, records/2) == 0);
CHECK(utilTrans.selectCount(pNdb, 64, &count) == 0);
CHECK(count == (records/2));
CHECK(utilTrans.clearTable(pNdb, records) == 0);
@@ -2706,7 +2706,266 @@ runDictRestart(NDBT_Context* ctx, NDBT_Step* step)
return NDBT_OK;
}
+int
+runBug29501(NDBT_Context* ctx, NDBT_Step* step) {
+ NdbRestarter res;
+ NdbDictionary::LogfileGroup lg;
+ lg.setName("DEFAULT-LG");
+ lg.setUndoBufferSize(8*1024*1024);
+
+ if (res.getNumDbNodes() < 2)
+ return NDBT_OK;
+
+ Ndb* pNdb = GETNDB(step);
+ NdbDictionary::Dictionary* pDict = pNdb->getDictionary();
+
+ int node = res.getRandomNotMasterNodeId(rand());
+ res.restartOneDbNode(node, true, true, false);
+
+ if(pDict->createLogfileGroup(lg) != 0){
+ g_err << "Failed to create logfilegroup:"
+ << endl << pDict->getNdbError() << endl;
+ return NDBT_FAILED;
+ }
+
+ NdbDictionary::Undofile uf;
+ uf.setPath("undofile01.dat");
+ uf.setSize(5*1024*1024);
+ uf.setLogfileGroup("DEFAULT-LG");
+
+ if(pDict->createUndofile(uf) != 0){
+ g_err << "Failed to create undofile:"
+ << endl << pDict->getNdbError() << endl;
+ return NDBT_FAILED;
+ }
+
+ res.waitNodesNoStart(&node, 1);
+ res.startNodes(&node, 1);
+
+ if (res.waitClusterStarted()){
+ g_err << "Node restart failed"
+ << endl << pDict->getNdbError() << endl;
+ return NDBT_FAILED;
+ }
+
+ if (pDict->dropLogfileGroup(pDict->getLogfileGroup(lg.getName())) != 0){
+ g_err << "Drop of LFG Failed"
+ << endl << pDict->getNdbError() << endl;
+ return NDBT_FAILED;
+ }
+
+ return NDBT_OK;
+}
+
+int
+runDropDDObjects(NDBT_Context* ctx, NDBT_Step* step){
+ //Purpose is to drop all tables, data files, Table spaces and LFG's
+ Uint32 i = 0;
+
+ Ndb* pNdb = GETNDB(step);
+ NdbDictionary::Dictionary* pDict = pNdb->getDictionary();
+
+ NdbDictionary::Dictionary::List list;
+ if (pDict->listObjects(list) == -1)
+ return NDBT_FAILED;
+
+ //Search the list and drop all tables found
+ const char * tableFound = 0;
+ for (i = 0; i < list.count; i++){
+ switch(list.elements[i].type){
+ case NdbDictionary::Object::UserTable:
+ tableFound = list.elements[i].name;
+ if(tableFound != 0){
+ if(strcmp(tableFound, "ndb_apply_status") != 0 &&
+ strcmp(tableFound, "NDB$BLOB_2_3") != 0 &&
+ strcmp(tableFound, "ndb_schema") != 0){
+ if(pDict->dropTable(tableFound) != 0){
+ g_err << "Failed to drop table: " << tableFound << pDict->getNdbError() << endl;
+ return NDBT_FAILED;
+ }
+ }
+ }
+ tableFound = 0;
+ break;
+ default:
+ break;
+ }
+ }
+
+ //Search the list and drop all data file found
+ const char * dfFound = 0;
+ for (i = 0; i < list.count; i++){
+ switch(list.elements[i].type){
+ case NdbDictionary::Object::Datafile:
+ dfFound = list.elements[i].name;
+ if(dfFound != 0){
+ if(pDict->dropDatafile(pDict->getDatafile(0, dfFound)) != 0){
+ g_err << "Failed to drop datafile: " << pDict->getNdbError() << endl;
+ return NDBT_FAILED;
+ }
+ }
+ dfFound = 0;
+ break;
+ default:
+ break;
+ }
+ }
+
+ //Search the list and drop all Table Spaces Found
+ const char * tsFound = 0;
+ for (i = 0; i <list.count; i++){
+ switch(list.elements[i].type){
+ case NdbDictionary::Object::Tablespace:
+ tsFound = list.elements[i].name;
+ if(tsFound != 0){
+ if(pDict->dropTablespace(pDict->getTablespace(tsFound)) != 0){
+ g_err << "Failed to drop tablespace: " << pDict->getNdbError() << endl;
+ return NDBT_FAILED;
+ }
+ }
+ tsFound = 0;
+ break;
+ default:
+ break;
+ }
+ }
+
+ //Search the list and drop all LFG Found
+ //Currently only 1 LGF is supported, but written for future
+ //when more then one is supported.
+ const char * lgFound = 0;
+ for (i = 0; i < list.count; i++){
+ switch(list.elements[i].type){
+ case NdbDictionary::Object::LogfileGroup:
+ lgFound = list.elements[i].name;
+ if(lgFound != 0){
+ if (pDict->dropLogfileGroup(pDict->getLogfileGroup(lgFound)) != 0){
+ g_err << "Failed to drop tablespace: " << pDict->getNdbError() << endl;
+ return NDBT_FAILED;
+ }
+ }
+ lgFound = 0;
+ break;
+ default:
+ break;
+ }
+ }
+
+ return NDBT_OK;
+}
+
+int
+runWaitStarted(NDBT_Context* ctx, NDBT_Step* step){
+
+ NdbRestarter restarter;
+ restarter.waitClusterStarted(300);
+
+ NdbSleep_SecSleep(3);
+ return NDBT_OK;
+}
+
+int
+testDropDDObjectsSetup(NDBT_Context* ctx, NDBT_Step* step){
+ //Purpose is to setup to test DropDDObjects
+ char tsname[256];
+ char dfname[256];
+
+ Ndb* pNdb = GETNDB(step);
+ NdbDictionary::Dictionary* pDict = pNdb->getDictionary();
+
+ NdbDictionary::LogfileGroup lg;
+ lg.setName("DEFAULT-LG");
+ lg.setUndoBufferSize(8*1024*1024);
+
+
+ if(pDict->createLogfileGroup(lg) != 0){
+ g_err << "Failed to create logfilegroup:"
+ << endl << pDict->getNdbError() << endl;
+ return NDBT_FAILED;
+ }
+
+ NdbDictionary::Undofile uf;
+ uf.setPath("undofile01.dat");
+ uf.setSize(5*1024*1024);
+ uf.setLogfileGroup("DEFAULT-LG");
+
+ if(pDict->createUndofile(uf) != 0){
+ g_err << "Failed to create undofile:"
+ << endl << pDict->getNdbError() << endl;
+ return NDBT_FAILED;
+ }
+
+ BaseString::snprintf(tsname, sizeof(tsname), "TS-%u", rand());
+ BaseString::snprintf(dfname, sizeof(dfname), "%s-%u.dat", tsname, rand());
+
+ if (create_tablespace(pDict, lg.getName(), tsname, dfname)){
+ g_err << "Failed to create undofile:"
+ << endl << pDict->getNdbError() << endl;
+ return NDBT_FAILED;
+ }
+
+ return NDBT_OK;
+}
+
+int
+DropDDObjectsVerify(NDBT_Context* ctx, NDBT_Step* step){
+ //Purpose is to verify test DropDDObjects worked
+ Uint32 i = 0;
+
+ Ndb* pNdb = GETNDB(step);
+ NdbDictionary::Dictionary* pDict = pNdb->getDictionary();
+
+ NdbDictionary::Dictionary::List list;
+ if (pDict->listObjects(list) == -1)
+ return NDBT_FAILED;
+
+ bool ddFound = false;
+ for (i = 0; i <list.count; i++){
+ switch(list.elements[i].type){
+ case NdbDictionary::Object::Tablespace:
+ ddFound = true;
+ break;
+ case NdbDictionary::Object::LogfileGroup:
+ ddFound = true;
+ break;
+ default:
+ break;
+ }
+ if(ddFound == true){
+ g_err << "DropDDObjects Failed: DD found:"
+ << endl;
+ return NDBT_FAILED;
+ }
+ }
+ return NDBT_OK;
+}
+
NDBT_TESTSUITE(testDict);
+TESTCASE("testDropDDObjects",
+ "* 1. start cluster\n"
+ "* 2. Create LFG\n"
+ "* 3. create TS\n"
+ "* 4. run DropDDObjects\n"
+ "* 5. Verify DropDDObjectsRestart worked\n"){
+INITIALIZER(runWaitStarted);
+INITIALIZER(runDropDDObjects);
+INITIALIZER(testDropDDObjectsSetup);
+STEP(runDropDDObjects);
+FINALIZER(DropDDObjectsVerify);
+}
+
+TESTCASE("Bug29501",
+ "* 1. start cluster\n"
+ "* 2. Restart 1 node -abort -nostart\n"
+ "* 3. create LFG\n"
+ "* 4. Restart data node\n"
+ "* 5. Restart 1 node -nostart\n"
+ "* 6. Drop LFG\n"){
+INITIALIZER(runWaitStarted);
+INITIALIZER(runDropDDObjects);
+STEP(runBug29501);
+FINALIZER(runDropDDObjects);
+}
TESTCASE("CreateAndDrop",
"Try to create and drop the table loop number of times\n"){
INITIALIZER(runCreateAndDrop);
diff --git a/storage/ndb/test/ndbapi/testIndex.cpp b/storage/ndb/test/ndbapi/testIndex.cpp
index 00e559c7a0f..bd9ff7ac607 100644
--- a/storage/ndb/test/ndbapi/testIndex.cpp
+++ b/storage/ndb/test/ndbapi/testIndex.cpp
@@ -809,7 +809,7 @@ int runSystemRestart1(NDBT_Context* ctx, NDBT_Step* step){
CHECK(hugoTrans.pkUpdateRecords(pNdb, records) == 0);
CHECK(utilTrans.verifyIndex(pNdb, idxName, 16, false) == 0);
CHECK(hugoTrans.pkDelRecords(pNdb, records/2) == 0);
- CHECK(hugoTrans.scanUpdateRecords(pNdb, records) == 0);
+ CHECK(hugoTrans.scanUpdateRecords(pNdb, records/2) == 0);
CHECK(utilTrans.verifyIndex(pNdb, idxName, 16, false) == 0);
CHECK(utilTrans.clearTable(pNdb, records) == 0);
CHECK(hugoTrans.loadTable(pNdb, records, 1) == 0);
@@ -834,7 +834,7 @@ int runSystemRestart1(NDBT_Context* ctx, NDBT_Step* step){
CHECK(utilTrans.verifyIndex(pNdb, idxName, 16, false) == 0);
CHECK(hugoTrans.pkDelRecords(pNdb, records/2) == 0);
CHECK(utilTrans.verifyIndex(pNdb, idxName, 16, false) == 0);
- CHECK(hugoTrans.scanUpdateRecords(pNdb, records) == 0);
+ CHECK(hugoTrans.scanUpdateRecords(pNdb, records/2) == 0);
CHECK(utilTrans.verifyIndex(pNdb, idxName, 16, false) == 0);
CHECK(utilTrans.clearTable(pNdb, records) == 0);
CHECK(hugoTrans.loadTable(pNdb, records, 1) == 0);
diff --git a/storage/ndb/test/ndbapi/testNodeRestart.cpp b/storage/ndb/test/ndbapi/testNodeRestart.cpp
index 99b72699762..751134c43c5 100644
--- a/storage/ndb/test/ndbapi/testNodeRestart.cpp
+++ b/storage/ndb/test/ndbapi/testNodeRestart.cpp
@@ -1590,6 +1590,8 @@ runBug27466(NDBT_Context* ctx, NDBT_Step* step)
node2 = res.getDbNodeId(rand() % res.getNumDbNodes());
}
+ ndbout_c("nodes %u %u", node1, node2);
+
if (res.restartOneDbNode(node1, false, true, true))
return NDBT_FAILED;
@@ -1762,6 +1764,125 @@ runBug28717(NDBT_Context* ctx, NDBT_Step* step)
return NDBT_OK;
}
+int
+runBug31525(NDBT_Context* ctx, NDBT_Step* step)
+{
+ int result = NDBT_OK;
+ int loops = ctx->getNumLoops();
+ int records = ctx->getNumRecords();
+ Ndb* pNdb = GETNDB(step);
+ NdbRestarter res;
+
+ if (res.getNumDbNodes() < 2)
+ {
+ return NDBT_OK;
+ }
+
+ int nodes[2];
+ nodes[0] = res.getMasterNodeId();
+ nodes[1] = res.getNextMasterNodeId(nodes[0]);
+
+ while (res.getNodeGroup(nodes[0]) != res.getNodeGroup(nodes[1]))
+ {
+ ndbout_c("Restarting %u as it not in same node group as %u",
+ nodes[1], nodes[0]);
+ if (res.restartOneDbNode(nodes[1], false, true, true))
+ return NDBT_FAILED;
+
+ if (res.waitNodesNoStart(nodes+1, 1))
+ return NDBT_FAILED;
+
+ if (res.startNodes(nodes+1, 1))
+ return NDBT_FAILED;
+
+ if (res.waitClusterStarted())
+ return NDBT_FAILED;
+
+ nodes[1] = res.getNextMasterNodeId(nodes[0]);
+ }
+
+ ndbout_c("nodes[0]: %u nodes[1]: %u", nodes[0], nodes[1]);
+
+ int val = DumpStateOrd::DihMinTimeBetweenLCP;
+ if (res.dumpStateAllNodes(&val, 1))
+ return NDBT_FAILED;
+
+ int val2[] = { DumpStateOrd::CmvmiSetRestartOnErrorInsert, 1 };
+ if (res.dumpStateAllNodes(val2, 2))
+ return NDBT_FAILED;
+
+ if (res.insertErrorInAllNodes(932))
+ return NDBT_FAILED;
+
+ if (res.insertErrorInNode(nodes[1], 7192))
+ return NDBT_FAILED;
+
+ if (res.insertErrorInNode(nodes[0], 7191))
+ return NDBT_FAILED;
+
+ if (res.waitClusterNoStart())
+ return NDBT_FAILED;
+
+ if (res.startAll())
+ return NDBT_FAILED;
+
+ if (res.waitClusterStarted())
+ return NDBT_FAILED;
+
+ if (res.restartOneDbNode(nodes[1], false, false, true))
+ return NDBT_FAILED;
+
+ if (res.waitClusterStarted())
+ return NDBT_FAILED;
+
+ return NDBT_OK;
+}
+
+int
+runBug32160(NDBT_Context* ctx, NDBT_Step* step)
+{
+ int result = NDBT_OK;
+ int loops = ctx->getNumLoops();
+ int records = ctx->getNumRecords();
+ Ndb* pNdb = GETNDB(step);
+ NdbRestarter res;
+
+ if (res.getNumDbNodes() < 2)
+ {
+ return NDBT_OK;
+ }
+
+ int master = res.getMasterNodeId();
+ int next = res.getNextMasterNodeId(master);
+
+ if (res.insertErrorInNode(next, 7194))
+ {
+ return NDBT_FAILED;
+ }
+
+ int val2[] = { DumpStateOrd::CmvmiSetRestartOnErrorInsert, 1 };
+ if (res.dumpStateOneNode(master, val2, 2))
+ return NDBT_FAILED;
+
+ if (res.insertErrorInNode(master, 7193))
+ return NDBT_FAILED;
+
+ int val3[] = { 7099 };
+ if (res.dumpStateOneNode(master, val3, 1))
+ return NDBT_FAILED;
+
+ if (res.waitNodesNoStart(&master, 1))
+ return NDBT_FAILED;
+
+ if (res.startNodes(&master, 1))
+ return NDBT_FAILED;
+
+ if (res.waitClusterStarted())
+ return NDBT_FAILED;
+
+ return NDBT_OK;
+}
+
NDBT_TESTSUITE(testNodeRestart);
TESTCASE("NoLoad",
"Test that one node at a time can be stopped and then restarted "\
@@ -2085,6 +2206,9 @@ TESTCASE("Bug21271",
STEP(runPkUpdateUntilStopped);
FINALIZER(runClearTable);
}
+TESTCASE("Bug31525", ""){
+ INITIALIZER(runBug31525);
+}
TESTCASE("Bug24717", ""){
INITIALIZER(runBug24717);
}
@@ -2128,6 +2252,9 @@ TESTCASE("Bug28717", ""){
TESTCASE("Bug29364", ""){
INITIALIZER(runBug29364);
}
+TESTCASE("Bug32160", ""){
+ INITIALIZER(runBug32160);
+}
NDBT_TESTSUITE_END(testNodeRestart);
int main(int argc, const char** argv){
diff --git a/storage/ndb/test/ndbapi/testScan.cpp b/storage/ndb/test/ndbapi/testScan.cpp
index 2561869fa5f..df6dbe2e550 100644
--- a/storage/ndb/test/ndbapi/testScan.cpp
+++ b/storage/ndb/test/ndbapi/testScan.cpp
@@ -579,7 +579,7 @@ int runScanUpdateUntilStopped(NDBT_Context* ctx, NDBT_Step* step){
para = myRandom48(239)+1;
g_info << i << ": ";
- if (hugoTrans.scanUpdateRecords(GETNDB(step), records, 0, para) == NDBT_FAILED){
+ if (hugoTrans.scanUpdateRecords(GETNDB(step), 0, 0, para) == NDBT_FAILED){
return NDBT_FAILED;
}
i++;
diff --git a/storage/ndb/test/ndbapi/testSystemRestart.cpp b/storage/ndb/test/ndbapi/testSystemRestart.cpp
index 901c0e35568..0f9100f67fa 100644
--- a/storage/ndb/test/ndbapi/testSystemRestart.cpp
+++ b/storage/ndb/test/ndbapi/testSystemRestart.cpp
@@ -20,6 +20,7 @@
#include <NdbRestarter.hpp>
#include <Vector.hpp>
#include <signaldata/DumpStateOrd.hpp>
+#include <NdbBackup.hpp>
int runLoadTable(NDBT_Context* ctx, NDBT_Step* step){
@@ -121,7 +122,7 @@ int runSystemRestart1(NDBT_Context* ctx, NDBT_Step* step){
CHECK(hugoTrans.loadTable(pNdb, records) == 0);
CHECK(hugoTrans.pkUpdateRecords(pNdb, records) == 0);
CHECK(hugoTrans.pkDelRecords(pNdb, records/2) == 0);
- CHECK(hugoTrans.scanUpdateRecords(pNdb, records) == 0);
+ CHECK(hugoTrans.scanUpdateRecords(pNdb, records/2) == 0);
CHECK(utilTrans.clearTable(pNdb, records) == 0);
CHECK(hugoTrans.loadTable(pNdb, records) == 0);
CHECK(utilTrans.clearTable(pNdb, records) == 0);
@@ -142,7 +143,7 @@ int runSystemRestart1(NDBT_Context* ctx, NDBT_Step* step){
CHECK(hugoTrans.loadTable(pNdb, records) == 0);
CHECK(hugoTrans.pkUpdateRecords(pNdb, records) == 0);
CHECK(hugoTrans.pkDelRecords(pNdb, records/2) == 0);
- CHECK(hugoTrans.scanUpdateRecords(pNdb, records) == 0);
+ CHECK(hugoTrans.scanUpdateRecords(pNdb, records/2) == 0);
CHECK(utilTrans.clearTable(pNdb, records) == 0);
CHECK(hugoTrans.loadTable(pNdb, records) == 0);
CHECK(utilTrans.clearTable(pNdb, records) == 0);
@@ -265,7 +266,7 @@ int runSystemRestart2(NDBT_Context* ctx, NDBT_Step* step){
CHECK(hugoTrans.loadTable(pNdb, records) == 0);
CHECK(hugoTrans.pkUpdateRecords(pNdb, records) == 0);
CHECK(hugoTrans.pkDelRecords(pNdb, records/2) == 0);
- CHECK(hugoTrans.scanUpdateRecords(pNdb, records) == 0);
+ CHECK(hugoTrans.scanUpdateRecords(pNdb, records/2) == 0);
CHECK(utilTrans.clearTable(pNdb, records) == 0);
CHECK(hugoTrans.loadTable(pNdb, records) == 0);
CHECK(utilTrans.clearTable(pNdb, records) == 0);
@@ -329,7 +330,7 @@ int runSystemRestartTestUndoLog(NDBT_Context* ctx, NDBT_Step* step){
CHECK(hugoTrans.loadTable(pNdb, records) == 0);
CHECK(hugoTrans.pkUpdateRecords(pNdb, records) == 0);
CHECK(hugoTrans.pkDelRecords(pNdb, records/2) == 0);
- CHECK(hugoTrans.scanUpdateRecords(pNdb, records) == 0);
+ CHECK(hugoTrans.scanUpdateRecords(pNdb, records/2) == 0);
CHECK(utilTrans.clearTable(pNdb, records) == 0);
CHECK(hugoTrans.loadTable(pNdb, records) == 0);
CHECK(utilTrans.clearTable(pNdb, records) == 0);
@@ -1293,6 +1294,292 @@ runBug28770(NDBT_Context* ctx, NDBT_Step* step) {
return result;
}
+int
+runStopper(NDBT_Context* ctx, NDBT_Step* step)
+{
+ NdbRestarter restarter;
+ Uint32 stop = 0;
+loop:
+ while (!ctx->isTestStopped() &&
+ ((stop = ctx->getProperty("StopAbort", Uint32(0))) == 0))
+ {
+ NdbSleep_MilliSleep(30);
+ }
+
+ if (ctx->isTestStopped())
+ {
+ return NDBT_OK;
+ }
+
+ ndbout << "Killing in " << stop << "ms..." << flush;
+ NdbSleep_MilliSleep(stop);
+ restarter.restartAll(false, true, true);
+ ctx->setProperty("StopAbort", Uint32(0));
+ goto loop;
+}
+
+int runSR_DD_1(NDBT_Context* ctx, NDBT_Step* step)
+{
+ Ndb* pNdb = GETNDB(step);
+ int result = NDBT_OK;
+ Uint32 loops = ctx->getNumLoops();
+ int count;
+ NdbRestarter restarter;
+ NdbBackup backup(GETNDB(step)->getNodeId()+1);
+ bool lcploop = ctx->getProperty("LCP", (unsigned)0);
+ bool all = ctx->getProperty("ALL", (unsigned)0);
+
+ Uint32 i = 1;
+ Uint32 backupId;
+
+ int val[] = { DumpStateOrd::CmvmiSetRestartOnErrorInsert, 1 };
+ int lcp = DumpStateOrd::DihMinTimeBetweenLCP;
+
+ int startFrom = 0;
+
+ HugoTransactions hugoTrans(*ctx->getTab());
+ while(i<=loops && result != NDBT_FAILED)
+ {
+
+ if (lcploop)
+ {
+ CHECK(restarter.dumpStateAllNodes(&lcp, 1) == 0);
+ }
+
+ int nodeId = restarter.getDbNodeId(rand() % restarter.getNumDbNodes());
+ //CHECK(restarter.dumpStateAllNodes(&val, 1) == 0);
+
+ ndbout << "Loop " << i << "/"<< loops <<" started" << endl;
+ ndbout << "Loading records..." << startFrom << endl;
+ CHECK(hugoTrans.loadTable(pNdb, startFrom) == 0);
+
+ if (!all)
+ {
+ ndbout << "Making " << nodeId << " crash" << endl;
+ int kill[] = { 9999, 1000, 3000 };
+ CHECK(restarter.dumpStateOneNode(nodeId, val, 2) == 0);
+ CHECK(restarter.dumpStateOneNode(nodeId, kill, 3) == 0);
+ }
+ else
+ {
+ ndbout << "Crashing cluster" << endl;
+ ctx->setProperty("StopAbort", 1000 + rand() % (3000 - 1000));
+ }
+ Uint64 end = NdbTick_CurrentMillisecond() + 4000;
+ Uint32 row = startFrom;
+ do {
+ ndbout << "Loading from " << row << " to " << row + 1000 << endl;
+ if (hugoTrans.loadTableStartFrom(pNdb, row, 1000) != 0)
+ break;
+ row += 1000;
+ } while (NdbTick_CurrentMillisecond() < end);
+
+ if (!all)
+ {
+ ndbout << "Waiting for " << nodeId << " to restart" << endl;
+ CHECK(restarter.waitNodesNoStart(&nodeId, 1) == 0);
+ ndbout << "Restarting cluster" << endl;
+ CHECK(restarter.restartAll(false, true, true) == 0);
+ }
+ else
+ {
+ ndbout << "Waiting for cluster to restart" << endl;
+ }
+ CHECK(restarter.waitClusterNoStart() == 0);
+ CHECK(restarter.startAll() == 0);
+ CHECK(restarter.waitClusterStarted() == 0);
+
+ ndbout << "Starting backup..." << flush;
+ CHECK(backup.start(backupId) == 0);
+ ndbout << "done" << endl;
+
+ int cnt = 0;
+ CHECK(hugoTrans.selectCount(pNdb, 0, &cnt) == 0);
+ ndbout << "Found " << cnt << " records..." << endl;
+ ndbout << "Clearing..." << endl;
+ CHECK(hugoTrans.clearTable(pNdb,
+ NdbScanOperation::SF_TupScan, cnt) == 0);
+
+ if (cnt > startFrom)
+ {
+ startFrom = cnt;
+ }
+ startFrom += 1000;
+ i++;
+ }
+
+ ndbout << "runSR_DD_1 finished" << endl;
+ ctx->stopTest();
+ return result;
+}
+
+int runSR_DD_2(NDBT_Context* ctx, NDBT_Step* step)
+{
+ Ndb* pNdb = GETNDB(step);
+ int result = NDBT_OK;
+ Uint32 loops = ctx->getNumLoops();
+ Uint32 rows = ctx->getNumRecords();
+ int count;
+ NdbRestarter restarter;
+ NdbBackup backup(GETNDB(step)->getNodeId()+1);
+ bool lcploop = ctx->getProperty("LCP", (unsigned)0);
+ bool all = ctx->getProperty("ALL", (unsigned)0);
+
+ Uint32 i = 1;
+ Uint32 backupId;
+
+ int val[] = { DumpStateOrd::CmvmiSetRestartOnErrorInsert, 1 };
+ int lcp = DumpStateOrd::DihMinTimeBetweenLCP;
+
+ int startFrom = 0;
+
+ HugoTransactions hugoTrans(*ctx->getTab());
+ while(i<=loops && result != NDBT_FAILED)
+ {
+
+ if (lcploop)
+ {
+ CHECK(restarter.dumpStateAllNodes(&lcp, 1) == 0);
+ }
+
+ int nodeId = restarter.getDbNodeId(rand() % restarter.getNumDbNodes());
+
+ if (!all)
+ {
+ ndbout << "Making " << nodeId << " crash" << endl;
+ int kill[] = { 9999, 3000, 10000 };
+ CHECK(restarter.dumpStateOneNode(nodeId, val, 2) == 0);
+ CHECK(restarter.dumpStateOneNode(nodeId, kill, 3) == 0);
+ }
+ else
+ {
+ ndbout << "Crashing cluster" << endl;
+ ctx->setProperty("StopAbort", 1000 + rand() % (3000 - 1000));
+ }
+
+ Uint64 end = NdbTick_CurrentMillisecond() + 11000;
+ Uint32 row = startFrom;
+ do {
+ if (hugoTrans.loadTable(pNdb, rows) != 0)
+ break;
+
+ if (hugoTrans.clearTable(pNdb, NdbScanOperation::SF_TupScan, rows) != 0)
+ break;
+ } while (NdbTick_CurrentMillisecond() < end);
+
+ if (!all)
+ {
+ ndbout << "Waiting for " << nodeId << " to restart" << endl;
+ CHECK(restarter.waitNodesNoStart(&nodeId, 1) == 0);
+ ndbout << "Restarting cluster" << endl;
+ CHECK(restarter.restartAll(false, true, true) == 0);
+ }
+ else
+ {
+ ndbout << "Waiting for cluster to restart" << endl;
+ }
+
+ CHECK(restarter.waitClusterNoStart() == 0);
+ CHECK(restarter.startAll() == 0);
+ CHECK(restarter.waitClusterStarted() == 0);
+
+ ndbout << "Starting backup..." << flush;
+ CHECK(backup.start(backupId) == 0);
+ ndbout << "done" << endl;
+
+ int cnt = 0;
+ CHECK(hugoTrans.selectCount(pNdb, 0, &cnt) == 0);
+ ndbout << "Found " << cnt << " records..." << endl;
+ ndbout << "Clearing..." << endl;
+ CHECK(hugoTrans.clearTable(pNdb,
+ NdbScanOperation::SF_TupScan, cnt) == 0);
+ i++;
+ }
+
+ ndbout << "runSR_DD_2 finished" << endl;
+ ctx->stopTest();
+ return result;
+}
+
+int runBug22696(NDBT_Context* ctx, NDBT_Step* step)
+{
+ Ndb* pNdb = GETNDB(step);
+ int result = NDBT_OK;
+ Uint32 loops = ctx->getNumLoops();
+ Uint32 rows = ctx->getNumRecords();
+ NdbRestarter restarter;
+ HugoTransactions hugoTrans(*ctx->getTab());
+
+ Uint32 i = 0;
+ while(i<=loops && result != NDBT_FAILED)
+ {
+ for (Uint32 j = 0; j<10 && result != NDBT_FAILED; j++)
+ CHECK(hugoTrans.scanUpdateRecords(pNdb, rows) == 0);
+
+ CHECK(restarter.restartAll(false, true, i > 0 ? true : false) == 0);
+ CHECK(restarter.waitClusterNoStart() == 0);
+ CHECK(restarter.insertErrorInAllNodes(7072) == 0);
+ CHECK(restarter.startAll() == 0);
+ CHECK(restarter.waitClusterStarted() == 0);
+
+ i++;
+ if (i < loops)
+ {
+ NdbSleep_SecSleep(5); // Wait for a few gcp
+ }
+ }
+
+ ctx->stopTest();
+ return result;
+}
+
+int
+runBug27434(NDBT_Context* ctx, NDBT_Step* step)
+{
+ int result = NDBT_OK;
+ NdbRestarter restarter;
+ Ndb* pNdb = GETNDB(step);
+ const Uint32 nodeCount = restarter.getNumDbNodes();
+
+ if (nodeCount < 2)
+ return NDBT_OK;
+
+ int args[] = { DumpStateOrd::DihMaxTimeBetweenLCP };
+ int dump[] = { DumpStateOrd::DihStartLcpImmediately };
+
+ int filter[] = { 15, NDB_MGM_EVENT_CATEGORY_CHECKPOINT, 0 };
+ NdbLogEventHandle handle =
+ ndb_mgm_create_logevent_handle(restarter.handle, filter);
+
+ struct ndb_logevent event;
+
+ do {
+ int node1 = restarter.getDbNodeId(rand() % nodeCount);
+ CHECK(restarter.restartOneDbNode(node1, false, true, true) == 0);
+ NdbSleep_SecSleep(3);
+ CHECK(restarter.waitNodesNoStart(&node1, 1) == 0);
+
+ CHECK(restarter.dumpStateAllNodes(args, 1) == 0);
+
+ for (Uint32 i = 0; i<3; i++)
+ {
+ CHECK(restarter.dumpStateAllNodes(dump, 1) == 0);
+ while(ndb_logevent_get_next(handle, &event, 0) >= 0 &&
+ event.type != NDB_LE_LocalCheckpointStarted);
+ while(ndb_logevent_get_next(handle, &event, 0) >= 0 &&
+ event.type != NDB_LE_LocalCheckpointCompleted);
+ }
+
+ restarter.restartAll(false, true, true);
+ NdbSleep_SecSleep(3);
+ CHECK(restarter.waitClusterNoStart() == 0);
+ restarter.insertErrorInNode(node1, 5046);
+ restarter.startAll();
+ CHECK(restarter.waitClusterStarted() == 0);
+ } while(false);
+
+ return result;
+}
NDBT_TESTSUITE(testSystemRestart);
TESTCASE("SR1",
@@ -1474,6 +1761,72 @@ TESTCASE("Bug24664",
STEP(runBug24664);
FINALIZER(runClearTable);
}
+TESTCASE("Bug27434",
+ "")
+{
+ INITIALIZER(runWaitStarted);
+ STEP(runBug27434);
+}
+TESTCASE("SR_DD_1", "")
+{
+ TC_PROPERTY("ALL", 1);
+ INITIALIZER(runWaitStarted);
+ STEP(runStopper);
+ STEP(runSR_DD_1);
+ FINALIZER(runClearTable);
+}
+TESTCASE("SR_DD_1b", "")
+{
+ INITIALIZER(runWaitStarted);
+ STEP(runSR_DD_1);
+ FINALIZER(runClearTable);
+}
+TESTCASE("SR_DD_1_LCP", "")
+{
+ TC_PROPERTY("ALL", 1);
+ TC_PROPERTY("LCP", 1);
+ INITIALIZER(runWaitStarted);
+ STEP(runStopper);
+ STEP(runSR_DD_1);
+ FINALIZER(runClearTable);
+}
+TESTCASE("SR_DD_1b_LCP", "")
+{
+ TC_PROPERTY("LCP", 1);
+ INITIALIZER(runWaitStarted);
+ STEP(runSR_DD_1);
+ FINALIZER(runClearTable);
+}
+TESTCASE("SR_DD_2", "")
+{
+ TC_PROPERTY("ALL", 1);
+ INITIALIZER(runWaitStarted);
+ STEP(runStopper);
+ STEP(runSR_DD_2);
+ FINALIZER(runClearTable);
+}
+TESTCASE("SR_DD_2b", "")
+{
+ INITIALIZER(runWaitStarted);
+ STEP(runSR_DD_2);
+ FINALIZER(runClearTable);
+}
+TESTCASE("SR_DD_2_LCP", "")
+{
+ TC_PROPERTY("ALL", 1);
+ TC_PROPERTY("LCP", 1);
+ INITIALIZER(runWaitStarted);
+ STEP(runStopper);
+ STEP(runSR_DD_2);
+ FINALIZER(runClearTable);
+}
+TESTCASE("SR_DD_2b_LCP", "")
+{
+ TC_PROPERTY("LCP", 1);
+ INITIALIZER(runWaitStarted);
+ STEP(runSR_DD_2);
+ FINALIZER(runClearTable);
+}
TESTCASE("Bug29167", "")
{
INITIALIZER(runWaitStarted);
@@ -1492,8 +1845,13 @@ TESTCASE("Bug28770",
STEP(runBug28770);
FINALIZER(runClearTable);
}
-
-
+TESTCASE("Bug22696", "")
+{
+ INITIALIZER(runWaitStarted);
+ INITIALIZER(runLoadTable);
+ INITIALIZER(runBug22696);
+ FINALIZER(runClearTable);
+}
NDBT_TESTSUITE_END(testSystemRestart);
int main(int argc, const char** argv){
diff --git a/storage/ndb/test/ndbapi/test_event.cpp b/storage/ndb/test/ndbapi/test_event.cpp
index e1e0012d0d8..18825d734a4 100644
--- a/storage/ndb/test/ndbapi/test_event.cpp
+++ b/storage/ndb/test/ndbapi/test_event.cpp
@@ -21,6 +21,7 @@
#include <NdbAutoPtr.hpp>
#include <NdbRestarter.hpp>
#include <NdbRestarts.hpp>
+#include <signaldata/DumpStateOrd.hpp>
#define GETNDB(ps) ((NDBT_NdbApiStep*)ps)->getNdb()
@@ -1730,7 +1731,7 @@ runScanUpdateUntilStopped(NDBT_Context* ctx, NDBT_Step* step){
HugoTransactions hugoTrans(*ctx->getTab());
while (ctx->isTestStopped() == false)
{
- if (hugoTrans.scanUpdateRecords(GETNDB(step), records, abort,
+ if (hugoTrans.scanUpdateRecords(GETNDB(step), 0, abort,
parallelism) == NDBT_FAILED){
return NDBT_FAILED;
}
@@ -1758,6 +1759,85 @@ runInsertDeleteUntilStopped(NDBT_Context* ctx, NDBT_Step* step)
return NDBT_OK;
}
+int
+runBug31701(NDBT_Context* ctx, NDBT_Step* step)
+{
+ int result = NDBT_OK;
+
+ NdbRestarter restarter;
+
+ if (restarter.getNumDbNodes() < 2){
+ ctx->stopTest();
+ return NDBT_OK;
+ }
+ // This should really wait for applier to start...10s is likely enough
+ NdbSleep_SecSleep(10);
+
+ int nodeId = restarter.getDbNodeId(rand() % restarter.getNumDbNodes());
+
+ int val2[] = { DumpStateOrd::CmvmiSetRestartOnErrorInsert, 1 };
+ if (restarter.dumpStateOneNode(nodeId, val2, 2))
+ return NDBT_FAILED;
+
+ restarter.insertErrorInNode(nodeId, 13033);
+ if (restarter.waitNodesNoStart(&nodeId, 1))
+ return NDBT_FAILED;
+
+ if (restarter.startNodes(&nodeId, 1))
+ return NDBT_FAILED;
+
+ if (restarter.waitClusterStarted())
+ return NDBT_FAILED;
+
+
+ int records = ctx->getNumRecords();
+ HugoTransactions hugoTrans(*ctx->getTab());
+
+ if(ctx->getPropertyWait("LastGCI", ~(Uint32)0))
+ {
+ g_err << "FAIL " << __LINE__ << endl;
+ return NDBT_FAILED;
+ }
+
+ hugoTrans.clearTable(GETNDB(step), 0);
+
+ if (hugoTrans.loadTable(GETNDB(step), 3*records, 1, true, 1) != 0){
+ g_err << "FAIL " << __LINE__ << endl;
+ return NDBT_FAILED;
+ }
+
+ if (hugoTrans.pkDelRecords(GETNDB(step), 3*records, 1, true, 1) != 0){
+ g_err << "FAIL " << __LINE__ << endl;
+ return NDBT_FAILED;
+ }
+ if (hugoTrans.loadTable(GETNDB(step), records, 1, true, 1) != 0){
+ g_err << "FAIL " << __LINE__ << endl;
+ return NDBT_FAILED;
+ }
+ if (hugoTrans.pkUpdateRecords(GETNDB(step), records, 1, 1) != 0){
+ g_err << "FAIL " << __LINE__ << endl;
+ return NDBT_FAILED;
+ }
+ if (hugoTrans.pkUpdateRecords(GETNDB(step), records, 1, 1) != 0){
+ g_err << "FAIL " << __LINE__ << endl;
+ return NDBT_FAILED;
+ }
+ if (hugoTrans.pkUpdateRecords(GETNDB(step), records, 1, 1) != 0){
+ g_err << "FAIL " << __LINE__ << endl;
+ return NDBT_FAILED;
+ }
+
+ ctx->setProperty("LastGCI", hugoTrans.m_latest_gci);
+ if(ctx->getPropertyWait("LastGCI", ~(Uint32)0))
+ {
+ g_err << "FAIL " << __LINE__ << endl;
+ return NDBT_FAILED;
+ }
+
+ ctx->stopTest();
+ return NDBT_OK;
+}
+
NDBT_TESTSUITE(test_event);
TESTCASE("BasicEventOperation",
"Verify that we can listen to Events"
@@ -1887,6 +1967,14 @@ TESTCASE("Bug27169", ""){
STEP(runRestarterLoop);
FINALIZER(runDropEvent);
}
+TESTCASE("Bug31701", ""){
+ INITIALIZER(runCreateEvent);
+ INITIALIZER(runCreateShadowTable);
+ STEP(runEventApplier);
+ STEP(runBug31701);
+ FINALIZER(runDropEvent);
+ FINALIZER(runDropShadowTable);
+}
NDBT_TESTSUITE_END(test_event);
int main(int argc, const char** argv){
diff --git a/storage/ndb/test/run-test/daily-basic-tests.txt b/storage/ndb/test/run-test/daily-basic-tests.txt
index b7a3a15dae7..37db5e01dd6 100644
--- a/storage/ndb/test/run-test/daily-basic-tests.txt
+++ b/storage/ndb/test/run-test/daily-basic-tests.txt
@@ -65,6 +65,14 @@ args: -n PkRead
max-time: 500
cmd: testBasic
+args: -n PkSimpleRead
+
+max-time: 500
+cmd: testBasic
+args: -n PkDirtyRead
+
+max-time: 500
+cmd: testBasic
args: -n PkUpdate
max-time: 500
@@ -555,7 +563,7 @@ args: -n Bug25554 T1
max-time: 3000
cmd: testNodeRestart
-args: -n Bug25984
+args: -n Bug25984 T1
max-time: 1000
cmd: testNodeRestart
@@ -573,8 +581,20 @@ max-time: 1000
cmd: testNodeRestart
args: -n Bug29364 T1
+max-time: 300
+cmd: testNodeRestart
+args: -n Bug32160 T1
+
#
# DICT TESTS
+max-time: 500
+cmd: testDict
+args: -n Bug29501 T1
+
+max-time: 500
+cmd: testDict
+args: -n testDropDDObjects T1
+
max-time: 1500
cmd: testDict
args: -n CreateAndDrop
@@ -864,6 +884,10 @@ max-time: 1000
cmd: testNodeRestart
args: -n Bug27466 T1
+max-time: 1500
+cmd: testSystemRestart
+args: -n Bug27434 T1
+
max-time: 1000
cmd: test_event
args: -l 10 -n Bug27169 T1
@@ -945,3 +969,80 @@ args: -n Bug28804 T1 T3
max-time: 180
cmd: testIndex
args: -n Bug28804_ATTRINFO T1 T3
+
+max-time: 1500
+cmd: testSystemRestart
+args: -n SR_DD_1 D1
+
+max-time: 1500
+cmd: testSystemRestart
+args: -n SR_DD_1b D1
+
+max-time: 1500
+cmd: testSystemRestart
+args: -n SR_DD_1 D2
+
+max-time: 1500
+cmd: testSystemRestart
+args: -n SR_DD_1b D2
+
+max-time: 1500
+cmd: testSystemRestart
+args: -n SR_DD_1_LCP D1
+
+max-time: 1500
+cmd: testSystemRestart
+args: -n SR_DD_1b_LCP D1
+
+max-time: 1500
+cmd: testSystemRestart
+args: -n SR_DD_1_LCP D2
+
+max-time: 1500
+cmd: testSystemRestart
+args: -n SR_DD_1b_LCP D2
+
+max-time: 1500
+cmd: testSystemRestart
+args: -n SR_DD_2 D1
+
+max-time: 1500
+cmd: testSystemRestart
+args: -n SR_DD_2b D1
+
+max-time: 1500
+cmd: testSystemRestart
+args: -n SR_DD_2 D2
+
+max-time: 1500
+cmd: testSystemRestart
+args: -n SR_DD_2b D2
+
+max-time: 1500
+cmd: testSystemRestart
+args: -n SR_DD_2_LCP D1
+
+max-time: 1500
+cmd: testSystemRestart
+args: -n SR_DD_2b_LCP D1
+
+max-time: 1500
+cmd: testSystemRestart
+args: -n SR_DD_2_LCP D2
+
+max-time: 1500
+cmd: testSystemRestart
+args: -n SR_DD_2b_LCP D2
+
+max-time: 600
+cmd: testNodeRestart
+args: -n Bug31525 T1
+
+max-time: 300
+cmd: test_event
+args: -n Bug31701 T1
+
+max-time: 300
+cmd: testSystemRestart
+args: -n Bug22696 T1
+
diff --git a/storage/ndb/test/src/HugoOperations.cpp b/storage/ndb/test/src/HugoOperations.cpp
index 1a2e5180f1f..93a9eaf435a 100644
--- a/storage/ndb/test/src/HugoOperations.cpp
+++ b/storage/ndb/test/src/HugoOperations.cpp
@@ -93,6 +93,7 @@ rand_lock_mode:
case NdbOperation::LM_Read:
case NdbOperation::LM_Exclusive:
case NdbOperation::LM_CommittedRead:
+ case NdbOperation::LM_SimpleRead:
if(idx && idx->getType() == NdbDictionary::Index::OrderedIndex &&
pIndexScanOp == 0)
{
diff --git a/storage/ndb/test/src/HugoTransactions.cpp b/storage/ndb/test/src/HugoTransactions.cpp
index 3a1600815e0..0e5f7cd8115 100644
--- a/storage/ndb/test/src/HugoTransactions.cpp
+++ b/storage/ndb/test/src/HugoTransactions.cpp
@@ -341,50 +341,14 @@ HugoTransactions::scanReadRecords(Ndb* pNdb,
int
HugoTransactions::scanUpdateRecords(Ndb* pNdb,
- int records,
- int abortPercent,
- int parallelism){
- if(m_defaultScanUpdateMethod == 1){
- return scanUpdateRecords1(pNdb, records, abortPercent, parallelism);
- } else if(m_defaultScanUpdateMethod == 2){
- return scanUpdateRecords2(pNdb, records, abortPercent, parallelism);
- } else {
- return scanUpdateRecords3(pNdb, records, abortPercent, parallelism);
- }
-}
-
-// Scan all records exclusive and update
-// them one by one
-int
-HugoTransactions::scanUpdateRecords1(Ndb* pNdb,
- int records,
- int abortPercent,
- int parallelism){
- return scanUpdateRecords3(pNdb, records, abortPercent, 1);
-}
-
-// Scan all records exclusive and update
-// them batched by asking nextScanResult to
-// give us all cached records before fetching new
-// records from db
-int
-HugoTransactions::scanUpdateRecords2(Ndb* pNdb,
- int records,
- int abortPercent,
- int parallelism){
- return scanUpdateRecords3(pNdb, records, abortPercent, parallelism);
-}
-
-int
-HugoTransactions::scanUpdateRecords3(Ndb* pNdb,
- int records,
- int abortPercent,
- int parallelism){
- int retryAttempt = 0;
+ NdbScanOperation::ScanFlag flags,
+ int records,
+ int abortPercent,
+ int parallelism){
+ int retryAttempt = 0;
int check, a;
NdbScanOperation *pOp;
-
while (true){
restart:
if (retryAttempt++ >= m_retryMax){
@@ -411,8 +375,9 @@ restart:
return NDBT_FAILED;
}
- if( pOp->readTuplesExclusive(parallelism) ) {
- ERR(pTrans->getNdbError());
+ if( pOp->readTuples(NdbOperation::LM_Exclusive, flags,
+ parallelism))
+ {
closeTransaction(pNdb);
return NDBT_FAILED;
}
@@ -429,15 +394,18 @@ restart:
check = pTrans->execute(NoCommit, AbortOnError);
if( check == -1 ) {
const NdbError err = pTrans->getNdbError();
- ERR(err);
- closeTransaction(pNdb);
if (err.status == NdbError::TemporaryError){
+ ERR(err);
+ closeTransaction(pNdb);
NdbSleep_MilliSleep(50);
+ retryAttempt++;
continue;
}
+ ERR(err);
+ closeTransaction(pNdb);
return NDBT_FAILED;
}
-
+
// Abort after 1-100 or 1-records rows
int ranVal = rand();
int abortCount = ranVal % (records == 0 ? 100 : records);
@@ -448,75 +416,114 @@ restart:
abortTrans = true;
}
+ int eof;
int rows = 0;
- while((check = pOp->nextResult(true)) == 0){
- do {
- rows++;
- NdbOperation* pUp = pOp->updateCurrentTuple();
- if(pUp == 0){
+ while((eof = pOp->nextResult(true)) == 0){
+ rows++;
+ if (calc.verifyRowValues(&row) != 0){
+ closeTransaction(pNdb);
+ return NDBT_FAILED;
+ }
+
+ if (abortCount == rows && abortTrans == true){
+ ndbout << "Scan is aborted" << endl;
+ g_info << "Scan is aborted" << endl;
+ pOp->close();
+ if( check == -1 ) {
ERR(pTrans->getNdbError());
closeTransaction(pNdb);
return NDBT_FAILED;
}
- const int updates = calc.getUpdatesValue(&row) + 1;
- const int r = calc.getIdValue(&row);
- for(a = 0; a<tab.getNoOfColumns(); a++){
- if (tab.getColumn(a)->getPrimaryKey() == false){
- if(setValueForAttr(pUp, a, r, updates ) != 0){
- ERR(pTrans->getNdbError());
- closeTransaction(pNdb);
- return NDBT_FAILED;
- }
- }
- }
-
- if (rows == abortCount && abortTrans == true){
- g_info << "Scan is aborted" << endl;
- // This scan should be aborted
- closeTransaction(pNdb);
- return NDBT_OK;
- }
- } while((check = pOp->nextResult(false)) == 0);
-
- if(check != -1){
- check = pTrans->execute(Commit, AbortOnError);
- if(check != -1)
- m_latest_gci = pTrans->getGCI();
- pTrans->restart();
- }
-
- const NdbError err = pTrans->getNdbError();
- if( check == -1 ) {
+
closeTransaction(pNdb);
- ERR(err);
- if (err.status == NdbError::TemporaryError){
- NdbSleep_MilliSleep(50);
- goto restart;
- }
- return NDBT_FAILED;
+ return NDBT_OK;
}
}
-
- const NdbError err = pTrans->getNdbError();
- if( check == -1 ) {
- closeTransaction(pNdb);
- ERR(err);
+ if (eof == -1) {
+ const NdbError err = pTrans->getNdbError();
+
if (err.status == NdbError::TemporaryError){
+ ERR_INFO(err);
+ closeTransaction(pNdb);
NdbSleep_MilliSleep(50);
- goto restart;
+ switch (err.code){
+ case 488:
+ case 245:
+ case 490:
+ // Too many active scans, no limit on number of retry attempts
+ break;
+ default:
+ retryAttempt++;
+ }
+ continue;
}
+ ERR(err);
+ closeTransaction(pNdb);
return NDBT_FAILED;
}
-
+
closeTransaction(pNdb);
+
+ g_info << rows << " rows have been read" << endl;
+ if (records != 0 && rows != records){
+ g_err << "Check expected number of records failed" << endl
+ << " expected=" << records <<", " << endl
+ << " read=" << rows << endl;
+ return NDBT_FAILED;
+ }
- g_info << rows << " rows have been updated" << endl;
return NDBT_OK;
}
return NDBT_FAILED;
}
int
+HugoTransactions::scanUpdateRecords(Ndb* pNdb,
+ int records,
+ int abortPercent,
+ int parallelism){
+
+ return scanUpdateRecords(pNdb,
+ (NdbScanOperation::ScanFlag)0,
+ records, abortPercent, parallelism);
+}
+
+// Scan all records exclusive and update
+// them one by one
+int
+HugoTransactions::scanUpdateRecords1(Ndb* pNdb,
+ int records,
+ int abortPercent,
+ int parallelism){
+ return scanUpdateRecords(pNdb,
+ (NdbScanOperation::ScanFlag)0,
+ records, abortPercent, 1);
+}
+
+// Scan all records exclusive and update
+// them batched by asking nextScanResult to
+// give us all cached records before fetching new
+// records from db
+int
+HugoTransactions::scanUpdateRecords2(Ndb* pNdb,
+ int records,
+ int abortPercent,
+ int parallelism){
+ return scanUpdateRecords(pNdb, (NdbScanOperation::ScanFlag)0,
+ records, abortPercent, parallelism);
+}
+
+int
+HugoTransactions::scanUpdateRecords3(Ndb* pNdb,
+ int records,
+ int abortPercent,
+ int parallelism)
+{
+ return scanUpdateRecords(pNdb, (NdbScanOperation::ScanFlag)0,
+ records, abortPercent, parallelism);
+}
+
+int
HugoTransactions::loadTable(Ndb* pNdb,
int records,
int batch,
@@ -524,7 +531,22 @@ HugoTransactions::loadTable(Ndb* pNdb,
int doSleep,
bool oneTrans,
int value,
- bool abort){
+ bool abort)
+{
+ return loadTableStartFrom(pNdb, 0, records, batch, allowConstraintViolation,
+ doSleep, oneTrans, value, abort);
+}
+
+int
+HugoTransactions::loadTableStartFrom(Ndb* pNdb,
+ int startFrom,
+ int records,
+ int batch,
+ bool allowConstraintViolation,
+ int doSleep,
+ bool oneTrans,
+ int value,
+ bool abort){
int check;
int retryAttempt = 0;
int retryMax = 5;
@@ -543,8 +565,9 @@ HugoTransactions::loadTable(Ndb* pNdb,
<< " -> rows/commit = " << batch << endl;
}
+ Uint32 orgbatch = batch;
g_info << "|- Inserting records..." << endl;
- for (int c=0 ; c<records ; ){
+ for (int c=0 ; c<records; ){
bool closeTrans = true;
if(c + batch > records)
@@ -578,7 +601,7 @@ HugoTransactions::loadTable(Ndb* pNdb,
}
}
- if(pkInsertRecord(pNdb, c, batch, value) != NDBT_OK)
+ if(pkInsertRecord(pNdb, c + startFrom, batch, value) != NDBT_OK)
{
ERR(pTrans->getNdbError());
closeTransaction(pNdb);
@@ -625,6 +648,7 @@ HugoTransactions::loadTable(Ndb* pNdb,
ERR(err);
NdbSleep_MilliSleep(50);
retryAttempt++;
+ batch = 1;
continue;
break;
@@ -670,7 +694,14 @@ HugoTransactions::loadTable(Ndb* pNdb,
int
HugoTransactions::fillTable(Ndb* pNdb,
- int batch){
+ int batch){
+ return fillTableStartFrom(pNdb, 0, batch);
+}
+
+int
+HugoTransactions::fillTableStartFrom(Ndb* pNdb,
+ int startFrom,
+ int batch){
int check;
int retryAttempt = 0;
int retryMax = 5;
@@ -688,7 +719,7 @@ HugoTransactions::fillTable(Ndb* pNdb,
<< " -> rows/commit = " << batch << endl;
}
- for (int c=0 ; ; ){
+ for (int c=startFrom ; ; ){
if (retryAttempt >= retryMax){
g_info << "Record " << c << " could not be inserted, has retried "
diff --git a/storage/ndb/test/src/Makefile.am b/storage/ndb/test/src/Makefile.am
index a025579cb72..aa486108235 100644
--- a/storage/ndb/test/src/Makefile.am
+++ b/storage/ndb/test/src/Makefile.am
@@ -24,7 +24,7 @@ libNDBT_a_SOURCES = \
NdbRestarter.cpp NdbRestarts.cpp NDBT_Output.cpp \
NdbBackup.cpp NdbConfig.cpp NdbGrep.cpp NDBT_Table.cpp \
NdbSchemaCon.cpp NdbSchemaOp.cpp getarg.c \
- CpcClient.cpp NdbMixRestarter.cpp NDBT_Thread.cpp
+ CpcClient.cpp NdbMixRestarter.cpp NDBT_Thread.cpp dbutil.cpp
INCLUDES_LOC = -I$(top_srcdir)/storage/ndb/src/common/mgmcommon -I$(top_srcdir)/storage/ndb/include/mgmcommon -I$(top_srcdir)/storage/ndb/include/kernel -I$(top_srcdir)/storage/ndb/src/mgmapi
diff --git a/storage/ndb/test/src/NDBT_Thread.cpp b/storage/ndb/test/src/NDBT_Thread.cpp
index 56cf2f6815b..ff6785724ba 100644
--- a/storage/ndb/test/src/NDBT_Thread.cpp
+++ b/storage/ndb/test/src/NDBT_Thread.cpp
@@ -131,7 +131,7 @@ NDBT_Thread::exit()
m_state = Exit;
signal();
unlock();
-};
+}
void
NDBT_Thread::join()
diff --git a/storage/ndb/test/src/NdbRestarts.cpp b/storage/ndb/test/src/NdbRestarts.cpp
index 6ec520887b5..86e71f4b3fc 100644
--- a/storage/ndb/test/src/NdbRestarts.cpp
+++ b/storage/ndb/test/src/NdbRestarts.cpp
@@ -607,6 +607,7 @@ NFDuringNR_codes[] = {
5026,
7139,
7132,
+ 5045,
//LCP
8000,
diff --git a/storage/ndb/test/src/UtilTransactions.cpp b/storage/ndb/test/src/UtilTransactions.cpp
index 5a408140c8e..776ffd176b3 100644
--- a/storage/ndb/test/src/UtilTransactions.cpp
+++ b/storage/ndb/test/src/UtilTransactions.cpp
@@ -42,38 +42,9 @@ UtilTransactions::UtilTransactions(Ndb* ndb,
int
UtilTransactions::clearTable(Ndb* pNdb,
- int records,
- int parallelism){
- if(m_defaultClearMethod == 1){
- return clearTable1(pNdb, records, parallelism);
- } else if(m_defaultClearMethod == 2){
- return clearTable2(pNdb, records, parallelism);
- } else {
- return clearTable3(pNdb, records, parallelism);
- }
-}
-
-
-int
-UtilTransactions::clearTable1(Ndb* pNdb,
- int records,
- int parallelism)
-{
- return clearTable3(pNdb, records, 1);
-}
-
-int
-UtilTransactions::clearTable2(Ndb* pNdb,
- int records,
- int parallelism)
-{
- return clearTable3(pNdb, records, parallelism);
-}
-
-int
-UtilTransactions::clearTable3(Ndb* pNdb,
- int records,
- int parallelism){
+ NdbScanOperation::ScanFlag flags,
+ int records,
+ int parallelism){
// Scan all records exclusive and delete
// them one by one
int retryAttempt = 0;
@@ -116,7 +87,7 @@ UtilTransactions::clearTable3(Ndb* pNdb,
goto failed;
}
- if( pOp->readTuplesExclusive(par) ) {
+ if( pOp->readTuples(NdbOperation::LM_Exclusive, flags, par) ) {
err = pTrans->getNdbError();
goto failed;
}
@@ -180,6 +151,43 @@ UtilTransactions::clearTable3(Ndb* pNdb,
}
int
+UtilTransactions::clearTable(Ndb* pNdb,
+ int records,
+ int parallelism){
+
+ return clearTable(pNdb, (NdbScanOperation::ScanFlag)0,
+ records, parallelism);
+}
+
+
+int
+UtilTransactions::clearTable1(Ndb* pNdb,
+ int records,
+ int parallelism)
+{
+ return clearTable(pNdb, (NdbScanOperation::ScanFlag)0,
+ records, 1);
+}
+
+int
+UtilTransactions::clearTable2(Ndb* pNdb,
+ int records,
+ int parallelism)
+{
+ return clearTable(pNdb, (NdbScanOperation::ScanFlag)0,
+ records, parallelism);
+}
+
+int
+UtilTransactions::clearTable3(Ndb* pNdb,
+ int records,
+ int parallelism)
+{
+ return clearTable(pNdb, (NdbScanOperation::ScanFlag)0,
+ records, parallelism);
+}
+
+int
UtilTransactions::copyTableData(Ndb* pNdb,
const char* destName){
// Scan all records and copy
diff --git a/storage/ndb/test/src/dbutil.cpp b/storage/ndb/test/src/dbutil.cpp
new file mode 100755
index 00000000000..0c936f53182
--- /dev/null
+++ b/storage/ndb/test/src/dbutil.cpp
@@ -0,0 +1,176 @@
+// dbutil.cpp: implementation of the database utilities class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "dbutil.hpp"
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+dbutil::dbutil(const char * dbname)
+{
+ memset(host,' ',sizeof(host));
+ memset(user,' ',sizeof(pass));
+ memset(dbs,' ',sizeof(dbs));
+ port = 0;
+ memset(socket,' ',sizeof(socket));
+ this->SetDbName(dbname);
+}
+
+dbutil::~dbutil()
+{
+ this->DatabaseLogout();
+}
+
+//////////////////////////////////////////////////////////////////////
+// Database Login
+//////////////////////////////////////////////////////////////////////
+void dbutil::DatabaseLogin(const char* system,
+ const char* usr,
+ const char* password,
+ unsigned int portIn,
+ const char* sockIn,
+ bool transactional
+ ){
+ if (!(myDbHandel = mysql_init(NULL))){
+ myerror("mysql_init() failed");
+ exit(1);
+ }
+ this->SetUser(usr);
+ this->SetHost(system);
+ this->SetPassword(password);
+ this->SetPort(portIn);
+ this->SetSocket(sockIn);
+
+ if (!(mysql_real_connect(myDbHandel, host, user, pass, "test", port, socket, 0))){
+ myerror("connection failed");
+ mysql_close(myDbHandel);
+ fprintf(stdout, "\n Check the connection options using --help or -?\n");
+ exit(1);
+ }
+
+ myDbHandel->reconnect= 1;
+
+ /* set AUTOCOMMIT */
+ if(!transactional){
+ mysql_autocommit(myDbHandel, TRUE);
+ }
+ else{
+ mysql_autocommit(myDbHandel, FALSE);
+ }
+
+ fprintf(stdout, "\n\tConnected to MySQL server version: %s (%lu)\n\n",
+ mysql_get_server_info(myDbHandel),
+ (unsigned long) mysql_get_server_version(myDbHandel));
+}
+
+//////////////////////////////////////////////////////////////////////
+// Database Logout
+//////////////////////////////////////////////////////////////////////
+void dbutil::DatabaseLogout(){
+ if (myDbHandel){
+ fprintf(stdout, "\n\tClosing the MySQL database connection ...\n\n");
+ mysql_close(myDbHandel);
+ }
+}
+
+//////////////////////////////////////////////////////////////////////
+// Prepare MySQL Statements Cont
+//////////////////////////////////////////////////////////////////////
+MYSQL_STMT *STDCALL dbutil::MysqlSimplePrepare(const char *query){
+#ifdef DEBUG
+printf("Inside dbutil::MysqlSimplePrepare\n");
+#endif
+int result = 0;
+ MYSQL_STMT *my_stmt= mysql_stmt_init(this->GetDbHandel());
+ if (my_stmt && (result = mysql_stmt_prepare(my_stmt, query, strlen(query)))){
+ printf("res = %s\n",mysql_stmt_error(my_stmt));
+ mysql_stmt_close(my_stmt);
+ return 0;
+ }
+ return my_stmt;
+}
+//////////////////////////////////////////////////////////////////////
+// Error Printing
+//////////////////////////////////////////////////////////////////////
+void dbutil::PrintError(const char *msg){
+ if (this->GetDbHandel()
+ && mysql_errno(this->GetDbHandel())){
+ if (this->GetDbHandel()->server_version){
+ fprintf(stdout, "\n [MySQL-%s]",
+ this->GetDbHandel()->server_version);
+ }
+ else
+ fprintf(stdout, "\n [MySQL]");
+ fprintf(stdout, "[%d] %s\n",
+ mysql_errno(this->GetDbHandel()),
+ mysql_error(this->GetDbHandel()));
+ }
+ else if (msg)
+ fprintf(stderr, " [MySQL] %s\n", msg);
+}
+
+void dbutil::PrintStError(MYSQL_STMT *stmt, const char *msg)
+{
+ if (stmt && mysql_stmt_errno(stmt))
+ {
+ if (this->GetDbHandel()
+ && this->GetDbHandel()->server_version)
+ fprintf(stdout, "\n [MySQL-%s]",
+ this->GetDbHandel()->server_version);
+ else
+ fprintf(stdout, "\n [MySQL]");
+
+ fprintf(stdout, "[%d] %s\n", mysql_stmt_errno(stmt),
+ mysql_stmt_error(stmt));
+ }
+ else if (msg)
+ fprintf(stderr, " [MySQL] %s\n", msg);
+}
+/////////////////////////////////////////////////////
+int dbutil::Select_DB()
+{
+ return mysql_select_db(this->GetDbHandel(),
+ this->GetDbName());
+}
+////////////////////////////////////////////////////
+int dbutil::Do_Query(char * stm)
+{
+ return mysql_query(this->GetDbHandel(), stm);
+}
+////////////////////////////////////////////////////
+const char * dbutil::GetError()
+{
+ return mysql_error(this->GetDbHandel());
+}
+////////////////////////////////////////////////////
+int dbutil::GetErrorNumber()
+{
+ return mysql_errno(this->GetDbHandel());
+}
+////////////////////////////////////////////////////
+unsigned long dbutil::SelectCountTable(const char * table)
+{
+ unsigned long count = 0;
+ MYSQL_RES *result;
+ char query[1024];
+ MYSQL_ROW row;
+
+ sprintf(query,"select count(*) from `%s`", table);
+ if (mysql_query(this->GetDbHandel(),query) || !(result=mysql_store_result(this->GetDbHandel())))
+ {
+ printf("error\n");
+ return 1;
+ }
+ row= mysql_fetch_row(result);
+ count= (ulong) strtoull(row[0], (char**) 0, 10);
+ mysql_free_result(result);
+
+ return count;
+}
+void dbutil::Die(const char *file, int line, const char *expr){
+ fprintf(stderr, "%s:%d: check failed: '%s'\n", file, line, expr);
+ abort();
+}
+
+
diff --git a/storage/ndb/test/tools/Makefile.am b/storage/ndb/test/tools/Makefile.am
index 1683d4d84ae..da715caa1cb 100644
--- a/storage/ndb/test/tools/Makefile.am
+++ b/storage/ndb/test/tools/Makefile.am
@@ -13,7 +13,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-ndbtest_PROGRAMS = hugoLoad hugoFill hugoLockRecords hugoPkDelete hugoPkRead hugoPkReadRecord hugoPkUpdate hugoScanRead hugoScanUpdate restart verify_index copy_tab create_index ndb_cpcc listen_event eventlog rep_latency
+ndbtest_PROGRAMS = hugoLoad hugoFill hugoLockRecords hugoPkDelete hugoPkRead hugoPkReadRecord hugoPkUpdate hugoScanRead hugoScanUpdate restart verify_index copy_tab create_index ndb_cpcc listen_event eventlog rep_latency ndb_connect
# transproxy
@@ -35,6 +35,7 @@ ndb_cpcc_SOURCES = cpcc.cpp
listen_event_SOURCES = listen.cpp
eventlog_SOURCES = log_listner.cpp
rep_latency_SOURCES = rep_latency.cpp
+ndb_connect_SOURCES = connect.cpp
include $(top_srcdir)/storage/ndb/config/common.mk.am
include $(top_srcdir)/storage/ndb/config/type_ndbapitest.mk.am
diff --git a/storage/ndb/test/tools/connect.cpp b/storage/ndb/test/tools/connect.cpp
new file mode 100644
index 00000000000..2d3ac34d3e8
--- /dev/null
+++ b/storage/ndb/test/tools/connect.cpp
@@ -0,0 +1,152 @@
+/* Copyright (C) 2003 MySQL AB
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+#include <ndb_global.h>
+#include <ndb_opts.h>
+#include <NDBT.hpp>
+#include <NdbApi.hpp>
+#include <NdbSleep.h>
+
+NDB_STD_OPTS_VARS;
+
+static int _loop = 25;
+static int _sleep = 25;
+static int _drop = 1;
+
+typedef uchar* gptr;
+
+static struct my_option my_long_options[] =
+{
+ NDB_STD_OPTS("ndb_desc"),
+ { "loop", 'l', "loops",
+ (gptr*) &_loop, (gptr*) &_loop, 0,
+ GET_INT, REQUIRED_ARG, _loop, 0, 0, 0, 0, 0 },
+ { "sleep", 's', "Sleep (ms) between connection attempt",
+ (gptr*) &_sleep, (gptr*) &_sleep, 0,
+ GET_INT, REQUIRED_ARG, _sleep, 0, 0, 0, 0, 0 },
+ { "drop", 'd',
+ "Drop event operations before disconnect (0 = no, 1 = yes, else rand",
+ (gptr*) &_drop, (gptr*) &_drop, 0,
+ GET_INT, REQUIRED_ARG, _drop, 0, 0, 0, 0, 0 },
+ { 0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
+};
+
+static void usage()
+{
+ char desc[] = "This program connects to ndbd, and then disconnects\n";
+ ndb_std_print_version();
+ my_print_help(my_long_options);
+ my_print_variables(my_long_options);
+}
+
+int main(int argc, char** argv){
+ NDB_INIT(argv[0]);
+
+ const char *load_default_groups[]= { "mysql_cluster",0 };
+ load_defaults("my",load_default_groups,&argc,&argv);
+ int ho_error;
+#ifndef DBUG_OFF
+ opt_debug= "d:t:O,/tmp/ndb_desc.trace";
+#endif
+ if ((ho_error=handle_options(&argc, &argv, my_long_options,
+ ndb_std_get_one_option)))
+ return NDBT_ProgramExit(NDBT_WRONGARGS);
+
+ for (int i = 0; i<_loop; i++)
+ {
+ Ndb_cluster_connection con(opt_connect_str);
+ if(con.connect(12, 5, 1) != 0)
+ {
+ ndbout << "Unable to connect to management server." << endl;
+ return NDBT_ProgramExit(NDBT_FAILED);
+ }
+ if (con.wait_until_ready(30,30) != 0)
+ {
+ ndbout << "Cluster nodes not ready in 30 seconds." << endl;
+ return NDBT_ProgramExit(NDBT_FAILED);
+ }
+
+ Ndb MyNdb(&con, "TEST_DB");
+ if(MyNdb.init() != 0){
+ ERR(MyNdb.getNdbError());
+ return NDBT_ProgramExit(NDBT_FAILED);
+ }
+
+ Vector<NdbEventOperation*> ops;
+ const NdbDictionary::Dictionary * dict= MyNdb.getDictionary();
+ for (int j = 0; j < argc; j++)
+ {
+ const NdbDictionary::Table * pTab = dict->getTable(argv[j]);
+ if (pTab == 0)
+ {
+ ndbout_c("Failed to retreive table: \"%s\"", argv[j]);
+ }
+
+ BaseString tmp;
+ tmp.appfmt("EV-%s", argv[j]);
+ NdbEventOperation* pOp = MyNdb.createEventOperation(tmp.c_str());
+ if ( pOp == NULL )
+ {
+ ndbout << "Event operation creation failed: " <<
+ MyNdb.getNdbError() << endl;
+ return NDBT_ProgramExit(NDBT_FAILED);
+ }
+
+ for (int a = 0; a < pTab->getNoOfColumns(); a++)
+ {
+ pOp->getValue(pTab->getColumn(a)->getName());
+ pOp->getPreValue(pTab->getColumn(a)->getName());
+ }
+
+ if (pOp->execute())
+ {
+ ndbout << "operation execution failed: " << pOp->getNdbError()
+ << endl;
+ return NDBT_ProgramExit(NDBT_FAILED);
+ }
+ ops.push_back(pOp);
+ }
+
+ if (_sleep)
+ {
+ NdbSleep_MilliSleep(10 + rand() % _sleep);
+ }
+
+ for (Uint32 i = 0; i<ops.size(); i++)
+ {
+ switch(_drop){
+ case 0:
+ break;
+ do_drop:
+ case 1:
+ if (MyNdb.dropEventOperation(ops[i]))
+ {
+ ndbout << "drop event operation failed "
+ << MyNdb.getNdbError() << endl;
+ return NDBT_ProgramExit(NDBT_FAILED);
+ }
+ break;
+ default:
+ if ((rand() % 100) > 50)
+ goto do_drop;
+ }
+ }
+ }
+
+ return NDBT_ProgramExit(NDBT_OK);
+}
+
+template class Vector<NdbEventOperation*>;
diff --git a/storage/ndb/tools/restore/Restore.cpp b/storage/ndb/tools/restore/Restore.cpp
index a7d8a9d10d9..f599bb21978 100644
--- a/storage/ndb/tools/restore/Restore.cpp
+++ b/storage/ndb/tools/restore/Restore.cpp
@@ -534,6 +534,88 @@ TupleS::prepareRecord(TableS & tab){
return true;
}
+int
+RestoreDataIterator::readTupleData(Uint32 *buf_ptr, Uint32 *ptr,
+ Uint32 dataLength)
+{
+ while (ptr + 2 < buf_ptr + dataLength)
+ {
+ typedef BackupFormat::DataFile::VariableData VarData;
+ VarData * data = (VarData *)ptr;
+ Uint32 sz = ntohl(data->Sz);
+ Uint32 attrId = ntohl(data->Id); // column_no
+
+ AttributeData * attr_data = m_tuple.getData(attrId);
+ const AttributeDesc * attr_desc = m_tuple.getDesc(attrId);
+
+ // just a reminder - remove when backwards compat implemented
+ if (m_currentTable->backupVersion < MAKE_VERSION(5,1,3) &&
+ attr_desc->m_column->getNullable())
+ {
+ const Uint32 ind = attr_desc->m_nullBitIndex;
+ if(BitmaskImpl::get(m_currentTable->m_nullBitmaskSize,
+ buf_ptr,ind))
+ {
+ attr_data->null = true;
+ attr_data->void_value = NULL;
+ continue;
+ }
+ }
+
+ if (m_currentTable->backupVersion < MAKE_VERSION(5,1,3))
+ {
+ sz *= 4;
+ }
+
+ attr_data->null = false;
+ attr_data->void_value = &data->Data[0];
+ attr_data->size = sz;
+
+ //if (m_currentTable->getTableId() >= 2) { ndbout << "var off=" << ptr-buf_ptr << " attrId=" << attrId << endl; }
+
+ /**
+ * Compute array size
+ */
+ const Uint32 arraySize = sz / (attr_desc->size / 8);
+ assert(arraySize <= attr_desc->arraySize);
+
+ //convert the length of blob(v1) and text(v1)
+ if(!m_hostByteOrder
+ && (attr_desc->m_column->getType() == NdbDictionary::Column::Blob
+ || attr_desc->m_column->getType() == NdbDictionary::Column::Text)
+ && attr_desc->m_column->getArrayType() == NdbDictionary::Column::ArrayTypeFixed)
+ {
+ char* p = (char*)&attr_data->u_int64_value[0];
+ Uint64 x;
+ memcpy(&x, p, sizeof(Uint64));
+ x = Twiddle64(x);
+ memcpy(p, &x, sizeof(Uint64));
+ }
+
+ //convert datetime type
+ if(!m_hostByteOrder
+ && attr_desc->m_column->getType() == NdbDictionary::Column::Datetime)
+ {
+ char* p = (char*)&attr_data->u_int64_value[0];
+ Uint64 x;
+ memcpy(&x, p, sizeof(Uint64));
+ x = Twiddle64(x);
+ memcpy(p, &x, sizeof(Uint64));
+ }
+
+ if(!Twiddle(attr_desc, attr_data, attr_desc->arraySize))
+ {
+ return -1;
+ }
+
+ ptr += ((sz + 3) >> 2) + 2;
+ }
+
+ assert(ptr == buf_ptr + dataLength);
+
+ return 0;
+}
+
const TupleS *
RestoreDataIterator::getNextTuple(int & res)
{
@@ -630,78 +712,8 @@ RestoreDataIterator::getNextTuple(int & res)
attr_data->void_value = NULL;
}
- while (ptr + 2 < buf_ptr + dataLength) {
- typedef BackupFormat::DataFile::VariableData VarData;
- VarData * data = (VarData *)ptr;
- Uint32 sz = ntohl(data->Sz);
- Uint32 attrId = ntohl(data->Id); // column_no
-
- AttributeData * attr_data = m_tuple.getData(attrId);
- const AttributeDesc * attr_desc = m_tuple.getDesc(attrId);
-
- // just a reminder - remove when backwards compat implemented
- if(m_currentTable->backupVersion < MAKE_VERSION(5,1,3) &&
- attr_desc->m_column->getNullable()){
- const Uint32 ind = attr_desc->m_nullBitIndex;
- if(BitmaskImpl::get(m_currentTable->m_nullBitmaskSize,
- buf_ptr,ind)){
- attr_data->null = true;
- attr_data->void_value = NULL;
- continue;
- }
- }
-
- if (m_currentTable->backupVersion < MAKE_VERSION(5,1,3))
- {
- sz *= 4;
- }
-
- attr_data->null = false;
- attr_data->void_value = &data->Data[0];
- attr_data->size = sz;
-
- //if (m_currentTable->getTableId() >= 2) { ndbout << "var off=" << ptr-buf_ptr << " attrId=" << attrId << endl; }
-
- /**
- * Compute array size
- */
- const Uint32 arraySize = sz / (attr_desc->size / 8);
- assert(arraySize <= attr_desc->arraySize);
-
- //convert the length of blob(v1) and text(v1)
- if(!m_hostByteOrder
- && (attr_desc->m_column->getType() == NdbDictionary::Column::Blob
- || attr_desc->m_column->getType() == NdbDictionary::Column::Text)
- && attr_desc->m_column->getArrayType() == NdbDictionary::Column::ArrayTypeFixed)
- {
- char* p = (char*)&attr_data->u_int64_value[0];
- Uint64 x;
- memcpy(&x, p, sizeof(Uint64));
- x = Twiddle64(x);
- memcpy(p, &x, sizeof(Uint64));
- }
-
- //convert datetime type
- if(!m_hostByteOrder
- && attr_desc->m_column->getType() == NdbDictionary::Column::Datetime)
- {
- char* p = (char*)&attr_data->u_int64_value[0];
- Uint64 x;
- memcpy(&x, p, sizeof(Uint64));
- x = Twiddle64(x);
- memcpy(p, &x, sizeof(Uint64));
- }
-
- if(!Twiddle(attr_desc, attr_data, attr_desc->arraySize))
- {
- res = -1;
- return NULL;
- }
-
- ptr += ((sz + 3) >> 2) + 2;
- }
-
- assert(ptr == buf_ptr + dataLength);
+ if ((res = readTupleData(buf_ptr, ptr, dataLength)))
+ return NULL;
m_count ++;
res = 0;
diff --git a/storage/ndb/tools/restore/Restore.hpp b/storage/ndb/tools/restore/Restore.hpp
index 5455fa17aa0..f6de9245509 100644
--- a/storage/ndb/tools/restore/Restore.hpp
+++ b/storage/ndb/tools/restore/Restore.hpp
@@ -355,6 +355,10 @@ public:
bool validateFragmentFooter();
const TupleS *getNextTuple(int & res);
+
+private:
+
+ int readTupleData(Uint32 *buf_ptr, Uint32 *ptr, Uint32 dataLength);
};
class LogEntry {
diff --git a/strings/ctype-cp932.c b/strings/ctype-cp932.c
index a0ff0314246..c1aba0b35c6 100644
--- a/strings/ctype-cp932.c
+++ b/strings/ctype-cp932.c
@@ -5360,12 +5360,12 @@ my_wc_mb_cp932(CHARSET_INFO *cs __attribute__((unused)),
static int
my_mb_wc_cp932(CHARSET_INFO *cs __attribute__((unused)),
my_wc_t *pwc, const uchar *s, const uchar *e){
- int hi=s[0];
+ int hi;
if (s >= e)
return MY_CS_TOOSMALL;
- if (hi < 0x80)
+ if ((hi= s[0]) < 0x80)
{
pwc[0]=hi;
return 1;
diff --git a/strings/ctype-euc_kr.c b/strings/ctype-euc_kr.c
index fd783015bf4..247fb041896 100644
--- a/strings/ctype-euc_kr.c
+++ b/strings/ctype-euc_kr.c
@@ -179,20 +179,40 @@ static uchar NEAR sort_order_euc_kr[]=
/* Support for Korean(EUC_KR) characters, by powerm90@tinc.co.kr and mrpark@tinc.co.kr */
-#define iseuc_kr(c) ((0xa1<=(uchar)(c) && (uchar)(c)<=0xfe))
+/*
+ Unicode mapping is done according to:
+ ftp://ftp.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/KSC/KSC5601.TXT
+
+ Valid multi-byte characters:
+
+ [A1..FE][41..5A,61..7A,81..FE]
+
+ Note, 0x5C is not a valid MB tail,
+ so escape_with_backslash_is_dangerous is not set.
+*/
+
+#define iseuc_kr_head(c) ((0xa1<=(uchar)(c) && (uchar)(c)<=0xfe))
+
+#define iseuc_kr_tail1(c) ((uchar) (c) >= 0x41 && (uchar) (c) <= 0x5A)
+#define iseuc_kr_tail2(c) ((uchar) (c) >= 0x61 && (uchar) (c) <= 0x7A)
+#define iseuc_kr_tail3(c) ((uchar) (c) >= 0x81 && (uchar) (c) <= 0xFE)
+
+#define iseuc_kr_tail(c) (iseuc_kr_tail1(c) || \
+ iseuc_kr_tail2(c) || \
+ iseuc_kr_tail3(c))
static uint ismbchar_euc_kr(CHARSET_INFO *cs __attribute__((unused)),
const char* p, const char *e)
{
return ((*(uchar*)(p)<0x80)? 0:\
- iseuc_kr(*(p)) && (e)-(p)>1 && iseuc_kr(*((p)+1))? 2:\
+ iseuc_kr_head(*(p)) && (e)-(p)>1 && iseuc_kr_tail(*((p)+1))? 2:\
0);
}
static uint mbcharlen_euc_kr(CHARSET_INFO *cs __attribute__((unused)),uint c)
{
- return (iseuc_kr(c) ? 2 : 1);
+ return (iseuc_kr_head(c) ? 2 : 1);
}
@@ -8654,7 +8674,7 @@ my_well_formed_len_euckr(CHARSET_INFO *cs __attribute__((unused)),
/* Single byte ascii character */
b++;
}
- else if (b < emb && iseuc_kr(*b) && iseuc_kr(b[1]))
+ else if (b < emb && iseuc_kr_head(*b) && iseuc_kr_tail(b[1]))
{
/* Double byte character */
b+= 2;
diff --git a/strings/ctype-simple.c b/strings/ctype-simple.c
index b5e5e2184ba..7de00025eda 100644
--- a/strings/ctype-simple.c
+++ b/strings/ctype-simple.c
@@ -845,6 +845,7 @@ size_t my_long10_to_str_8bit(CHARSET_INFO *cs __attribute__((unused)),
register char *p, *e;
long int new_val;
uint sign=0;
+ unsigned long int uval = (unsigned long int) val;
e = p = &buffer[sizeof(buffer)-1];
*p= 0;
@@ -853,15 +854,16 @@ size_t my_long10_to_str_8bit(CHARSET_INFO *cs __attribute__((unused)),
{
if (val < 0)
{
- val= -val;
+ /* Avoid integer overflow in (-val) for LONGLONG_MIN (BUG#31799). */
+ uval= (unsigned long int)0 - uval;
*dst++= '-';
len--;
sign= 1;
}
}
- new_val = (long) ((unsigned long int) val / 10);
- *--p = '0'+ (char) ((unsigned long int) val - (unsigned long) new_val * 10);
+ new_val = (long) (uval / 10);
+ *--p = '0'+ (char) (uval - (unsigned long) new_val * 10);
val = new_val;
while (val != 0)
@@ -885,12 +887,14 @@ size_t my_longlong10_to_str_8bit(CHARSET_INFO *cs __attribute__((unused)),
register char *p, *e;
long long_val;
uint sign= 0;
+ ulonglong uval = (ulonglong)val;
if (radix < 0)
{
if (val < 0)
{
- val = -val;
+ /* Avoid integer overflow in (-val) for LONGLONG_MIN (BUG#31799). */
+ uval = (ulonglong)0 - uval;
*dst++= '-';
len--;
sign= 1;
@@ -900,22 +904,22 @@ size_t my_longlong10_to_str_8bit(CHARSET_INFO *cs __attribute__((unused)),
e = p = &buffer[sizeof(buffer)-1];
*p= 0;
- if (val == 0)
+ if (uval == 0)
{
*--p= '0';
len= 1;
goto cnv;
}
- while ((ulonglong) val > (ulonglong) LONG_MAX)
+ while (uval > (ulonglong) LONG_MAX)
{
- ulonglong quo=(ulonglong) val/(uint) 10;
- uint rem= (uint) (val- quo* (uint) 10);
+ ulonglong quo= uval/(uint) 10;
+ uint rem= (uint) (uval- quo* (uint) 10);
*--p = '0' + rem;
- val= quo;
+ uval= quo;
}
- long_val= (long) val;
+ long_val= (long) uval;
while (long_val != 0)
{
long quo= long_val/10;
diff --git a/strings/ctype-ucs2.c b/strings/ctype-ucs2.c
index 1df8221072e..d1579afe4c2 100644
--- a/strings/ctype-ucs2.c
+++ b/strings/ctype-ucs2.c
@@ -1019,6 +1019,7 @@ size_t my_l10tostr_ucs2(CHARSET_INFO *cs,
register char *p, *db, *de;
long int new_val;
int sl=0;
+ unsigned long int uval = (unsigned long int) val;
p = &buffer[sizeof(buffer)-1];
*p='\0';
@@ -1028,12 +1029,13 @@ size_t my_l10tostr_ucs2(CHARSET_INFO *cs,
if (val < 0)
{
sl = 1;
- val = -val;
+ /* Avoid integer overflow in (-val) for LONGLONG_MIN (BUG#31799). */
+ uval = (unsigned long int)0 - uval;
}
}
- new_val = (long) ((unsigned long int) val / 10);
- *--p = '0'+ (char) ((unsigned long int) val - (unsigned long) new_val * 10);
+ new_val = (long) (uval / 10);
+ *--p = '0'+ (char) (uval - (unsigned long) new_val * 10);
val = new_val;
while (val != 0)
@@ -1067,34 +1069,36 @@ size_t my_ll10tostr_ucs2(CHARSET_INFO *cs __attribute__((unused)),
register char *p, *db, *de;
long long_val;
int sl=0;
+ ulonglong uval= (ulonglong) val;
if (radix < 0)
{
if (val < 0)
{
sl=1;
- val = -val;
+ /* Avoid integer overflow in (-val) for LONGLONG_MIN (BUG#31799). */
+ uval = (ulonglong)0 - uval;
}
}
p = &buffer[sizeof(buffer)-1];
*p='\0';
- if (val == 0)
+ if (uval == 0)
{
*--p='0';
goto cnv;
}
- while ((ulonglong) val > (ulonglong) LONG_MAX)
+ while (uval > (ulonglong) LONG_MAX)
{
- ulonglong quo=(ulonglong) val/(size_t) 10;
- uint rem= (uint) (val- quo* (uint) 10);
+ ulonglong quo= uval/(uint) 10;
+ uint rem= (uint) (uval- quo* (uint) 10);
*--p = '0' + rem;
- val= quo;
+ uval= quo;
}
- long_val= (long) val;
+ long_val= (long) uval;
while (long_val != 0)
{
long quo= long_val/10;
diff --git a/strings/decimal.c b/strings/decimal.c
index f1753c619d1..0559dd97613 100644
--- a/strings/decimal.c
+++ b/strings/decimal.c
@@ -1601,9 +1601,21 @@ decimal_round(decimal_t *from, decimal_t *to, int scale,
x+=10;
*buf1=powers10[pos]*(x-y);
}
- if (frac0 < 0)
+ /*
+ In case we're rounding e.g. 1.5e9 to 2.0e9, the decimal_digit_t's inside
+ the buffer are as follows.
+
+ Before <1, 5e8>
+ After <2, 5e8>
+
+ Hence we need to set the 2nd field to 0.
+ The same holds if we round 1.5e-9 to 2e-9.
+ */
+ if (frac0 < frac1)
{
- dec1 *end=to->buf+intg0, *buf=buf1+1;
+ dec1 *buf= to->buf + ((scale == 0 && intg0 == 0) ? 1 : intg0 + frac0);
+ dec1 *end= to->buf + len;
+
while (buf < end)
*buf++=0;
}
@@ -2329,11 +2341,12 @@ static int do_div_mod(decimal_t *from1, decimal_t *from2,
}
if (unlikely(intg0+frac0 > to->len))
{
- stop1-=to->len-frac0-intg0;
+ stop1-=frac0+intg0-to->len;
frac0=to->len-intg0;
to->frac=frac0*DIG_PER_DEC1;
error=E_DEC_TRUNCATED;
}
+ DBUG_ASSERT(buf0 + (stop1 - start1) <= to->buf + to->len);
while (start1 < stop1)
*buf0++=*start1++;
}
diff --git a/strings/int2str.c b/strings/int2str.c
index 9fc53032819..fba98aac3f1 100644
--- a/strings/int2str.c
+++ b/strings/int2str.c
@@ -57,6 +57,7 @@ int2str(register long int val, register char *dst, register int radix,
register char *p;
long int new_val;
char *dig_vec= upcase ? _dig_vec_upper : _dig_vec_lower;
+ ulong uval= (ulong) val;
if (radix < 0)
{
@@ -65,7 +66,8 @@ int2str(register long int val, register char *dst, register int radix,
if (val < 0)
{
*dst++ = '-';
- val = -val;
+ /* Avoid integer overflow in (-val) for LONGLONG_MIN (BUG#31799). */
+ uval = (ulong)0 - uval;
}
radix = -radix;
}
@@ -86,8 +88,8 @@ int2str(register long int val, register char *dst, register int radix,
*/
p = &buffer[sizeof(buffer)-1];
*p = '\0';
- new_val=(ulong) val / (ulong) radix;
- *--p = dig_vec[(uchar) ((ulong) val- (ulong) new_val*(ulong) radix)];
+ new_val= uval / (ulong) radix;
+ *--p = dig_vec[(uchar) (uval- (ulong) new_val*(ulong) radix)];
val = new_val;
#ifdef HAVE_LDIV
while (val != 0)
@@ -133,20 +135,22 @@ char *int10_to_str(long int val,char *dst,int radix)
char buffer[65];
register char *p;
long int new_val;
+ unsigned long int uval = (unsigned long int) val;
if (radix < 0) /* -10 */
{
if (val < 0)
{
*dst++ = '-';
- val = -val;
+ /* Avoid integer overflow in (-val) for LONGLONG_MIN (BUG#31799). */
+ uval = (unsigned long int)0 - uval;
}
}
p = &buffer[sizeof(buffer)-1];
*p = '\0';
- new_val= (long) ((unsigned long int) val / 10);
- *--p = '0'+ (char) ((unsigned long int) val - (unsigned long) new_val * 10);
+ new_val= (long) (uval / 10);
+ *--p = '0'+ (char) (uval - (unsigned long) new_val * 10);
val = new_val;
while (val != 0)
diff --git a/strings/llstr.c b/strings/llstr.c
index 12aea63e014..643cf36a311 100644
--- a/strings/llstr.c
+++ b/strings/llstr.c
@@ -32,3 +32,9 @@ char *llstr(longlong value,char *buff)
longlong10_to_str(value,buff,-10);
return buff;
}
+
+char *ullstr(longlong value,char *buff)
+{
+ longlong10_to_str(value,buff,10);
+ return buff;
+}
diff --git a/strings/longlong2str.c b/strings/longlong2str.c
index c464abcfccd..d7de5bb0f7c 100644
--- a/strings/longlong2str.c
+++ b/strings/longlong2str.c
@@ -51,13 +51,15 @@ char *longlong2str(longlong val,char *dst,int radix)
char buffer[65];
register char *p;
long long_val;
+ ulonglong uval= (ulonglong) val;
if (radix < 0)
{
if (radix < -36 || radix > -2) return (char*) 0;
if (val < 0) {
*dst++ = '-';
- val = -val;
+ /* Avoid integer overflow in (-val) for LONGLONG_MIN (BUG#31799). */
+ uval = (ulonglong)0 - uval;
}
radix = -radix;
}
@@ -65,7 +67,7 @@ char *longlong2str(longlong val,char *dst,int radix)
{
if (radix > 36 || radix < 2) return (char*) 0;
}
- if (val == 0)
+ if (uval == 0)
{
*dst++='0';
*dst='\0';
@@ -74,14 +76,14 @@ char *longlong2str(longlong val,char *dst,int radix)
p = &buffer[sizeof(buffer)-1];
*p = '\0';
- while ((ulonglong) val > (ulonglong) LONG_MAX)
+ while (uval > (ulonglong) LONG_MAX)
{
- ulonglong quo=(ulonglong) val/(uint) radix;
- uint rem= (uint) (val- quo* (uint) radix);
+ ulonglong quo= uval/(uint) radix;
+ uint rem= (uint) (uval- quo* (uint) radix);
*--p = _dig_vec_upper[rem];
- val= quo;
+ uval= quo;
}
- long_val= (long) val;
+ long_val= (long) uval;
while (long_val != 0)
{
long quo= long_val/radix;
@@ -100,17 +102,19 @@ char *longlong10_to_str(longlong val,char *dst,int radix)
char buffer[65];
register char *p;
long long_val;
+ ulonglong uval= (ulonglong) val;
if (radix < 0)
{
if (val < 0)
{
*dst++ = '-';
- val = -val;
+ /* Avoid integer overflow in (-val) for LONGLONG_MIN (BUG#31799). */
+ uval = (ulonglong)0 - uval;
}
}
- if (val == 0)
+ if (uval == 0)
{
*dst++='0';
*dst='\0';
@@ -119,14 +123,14 @@ char *longlong10_to_str(longlong val,char *dst,int radix)
p = &buffer[sizeof(buffer)-1];
*p = '\0';
- while ((ulonglong) val > (ulonglong) LONG_MAX)
+ while (uval > (ulonglong) LONG_MAX)
{
- ulonglong quo=(ulonglong) val/(uint) 10;
- uint rem= (uint) (val- quo* (uint) 10);
+ ulonglong quo= uval/(uint) 10;
+ uint rem= (uint) (uval- quo* (uint) 10);
*--p = _dig_vec_upper[rem];
- val= quo;
+ uval= quo;
}
- long_val= (long) val;
+ long_val= (long) uval;
while (long_val != 0)
{
long quo= long_val/10;
diff --git a/strings/strmake.c b/strings/strmake.c
index 0d26e1b61a9..df8d78e8476 100644
--- a/strings/strmake.c
+++ b/strings/strmake.c
@@ -27,23 +27,25 @@
#include <my_global.h>
#include "m_string.h"
-#ifdef BAD_STRING_COMPILER
-
-char *strmake(char *dst,const char *src,uint length)
+char *strmake(register char *dst, register const char *src, size_t length)
{
- reg1 char *res;
-
- if ((res=memccpy(dst,src,0,length)))
- return res-1;
- dst[length]=0;
- return dst+length;
-}
-
-#define strmake strmake_overlapp /* Use orginal for overlapping str */
+#ifdef EXTRA_DEBUG
+ /*
+ 'length' is the maximum length of the string; the buffer needs
+ to be one character larger to accomodate the terminating '\0'.
+ This is easy to get wrong, so we make sure we write to the
+ entire length of the buffer to identify incorrect buffer-sizes.
+ We only initialise the "unused" part of the buffer here, a) for
+ efficiency, and b) because dst==src is allowed, so initialising
+ the entire buffer would overwrite the source-string. Also, we
+ write a character rather than '\0' as this makes spotting these
+ problems in the results easier.
+ */
+ uint n= strlen(src) + 1;
+ if (n <= length)
+ memset(dst + n, (int) 'Z', length - n + 1);
#endif
-char *strmake(register char *dst, register const char *src, size_t length)
-{
while (length--)
if (! (*dst++ = *src++))
return dst-1;
diff --git a/support-files/MacOSX/ReadMe.txt b/support-files/MacOSX/ReadMe.txt
new file mode 100644
index 00000000000..b3dcba21705
--- /dev/null
+++ b/support-files/MacOSX/ReadMe.txt
@@ -0,0 +1,8 @@
+
+You can find information about how to install on Mac OS X at
+
+ http://dev.mysql.com/doc/refman/5.1/en/mac-os-x-installation.html
+
+The MySQL Reference Manual is also available in various formats on
+http://dev.mysql.com/doc; if you're interested in the DocBook XML
+sources go to http://svn.mysql.com.
diff --git a/support-files/compiler_warnings.supp b/support-files/compiler_warnings.supp
index 0a2c720b81b..c437748c770 100644
--- a/support-files/compiler_warnings.supp
+++ b/support-files/compiler_warnings.supp
@@ -36,6 +36,11 @@ pars0lex.l: .*conversion from 'ulint' to 'int', possible loss of data.*
db_vrfy.c : .*comparison is always false due to limited range of data type.*
#
+# readline is not maintained by us
+#
+.*/cmd-line-utils/readline/.* : .*
+
+#
# Ignore all conversion warnings on windows 64
# (Is safe as we are not yet supporting strings >= 2G)
#
@@ -77,3 +82,4 @@ mi_packrec.c : .*result of 32-bit shift implicitly converted to 64 bits.* : 560-
# Wrong compiler warnings
#
.* : .*no matching operator delete found; memory will not be freed if initialization throws an exception.*
+ctype-simple.c : .*unary minus operator applied to unsigned type, result still unsigned.*
diff --git a/support-files/mysql.server.sh b/support-files/mysql.server.sh
index e0933aff8a4..65e13aaaca0 100644
--- a/support-files/mysql.server.sh
+++ b/support-files/mysql.server.sh
@@ -314,7 +314,7 @@ case "$mode" in
fi
exit $return_value
else
- log_failure_msg "Couldn't find MySQL manager or server"
+ log_failure_msg "Couldn't find MySQL manager ($manager) or server ($bindir/mysqld_safe)"
fi
;;
diff --git a/support-files/mysql.spec.sh b/support-files/mysql.spec.sh
index 39c7f866e4f..afd23f4a5a3 100644
--- a/support-files/mysql.spec.sh
+++ b/support-files/mysql.spec.sh
@@ -490,6 +490,11 @@ chmod -R og-rw $mysql_datadir/mysql
# Allow mysqld_safe to start mysqld and print a message before we exit
sleep 2
+#echo "Thank you for installing the MySQL Community Server! For Production
+#systems, we recommend MySQL Enterprise, which contains enterprise-ready
+#software, intelligent advisory services, and full production support with
+#scheduled service packs and more. Visit www.mysql.com/enterprise for more
+#information."
%post ndb-storage
mysql_clusterdir=/var/lib/mysql-cluster
diff --git a/tests/bug25714.c b/tests/bug25714.c
index 4782178e2f2..03d28f59aa4 100644
--- a/tests/bug25714.c
+++ b/tests/bug25714.c
@@ -29,8 +29,12 @@ int main (int argc, char **argv)
MY_INIT(argv[0]);
- if (argc != 2)
+ if (argc != 2 || !strcmp(argv[1], "--help"))
+ {
+ fprintf(stderr, "This program is a part of the MySQL test suite. "
+ "It is not intended to be executed directly by a user.\n");
return -1;
+ }
mysql_init(&conn);
if (!mysql_real_connect(
diff --git a/tests/mysql_client_test.c b/tests/mysql_client_test.c
index 409917d4219..3776be79399 100644
--- a/tests/mysql_client_test.c
+++ b/tests/mysql_client_test.c
@@ -129,7 +129,7 @@ static void die(const char *file, int line, const char *expr)
fflush(stdout);
fprintf(stderr, "%s:%d: check failed: '%s'\n", file, line, expr);
fflush(stderr);
- abort();
+ exit(1);
}
@@ -5914,6 +5914,20 @@ DROP TABLE IF EXISTS test_multi_tab";
(void) my_process_result_set(result);
mysql_free_result(result);
+ /*
+ Check if errors in one of the queries handled properly.
+ */
+ rc= mysql_query(mysql_local, "select 1; select * from not_existing_table");
+ myquery(rc);
+ result= mysql_store_result(mysql_local);
+ mysql_free_result(result);
+
+ rc= mysql_next_result(mysql_local);
+ DIE_UNLESS(rc > 0);
+
+ rc= mysql_next_result(mysql_local);
+ DIE_UNLESS(rc < 0);
+
mysql_close(mysql_local);
}
@@ -7787,7 +7801,7 @@ static void test_explain_bug()
verify_prepare_field(result, 5, "Extra", "EXTRA",
mysql_get_server_version(mysql) <= 50000 ?
MYSQL_TYPE_STRING : MYSQL_TYPE_VAR_STRING,
- 0, 0, "", 20, 0);
+ 0, 0, "", 27, 0);
mysql_free_result(result);
mysql_stmt_close(stmt);
@@ -9552,7 +9566,7 @@ static void test_subqueries_ref()
{
MYSQL_STMT *stmt;
int rc, i;
- const char *query= "SELECT a as ccc from t1 where a+1=(SELECT 1+ccc from t1 where ccc+1=a+1 and a=1)";
+ const char *query= "SELECT a as ccc from t1 outr where a+1=(SELECT 1+outr.a from t1 where outr.a+1=a+1 and a=1)";
myheader("test_subqueries_ref");
@@ -11930,7 +11944,7 @@ static void test_bug5194()
MAX_PARAM_COUNT * CHARS_PER_PARAM + 1);
param_str= (char*) malloc(COLUMN_COUNT * CHARS_PER_PARAM);
- if (bind == 0 || query == 0 || param_str == 0)
+ if (my_bind == 0 || query == 0 || param_str == 0)
{
fprintf(stderr, "Can't allocate enough memory for query structs\n");
if (my_bind)
@@ -15660,7 +15674,7 @@ static void test_mysql_insert_id()
myquery(rc);
res= mysql_insert_id(mysql);
DIE_UNLESS(res == 0);
- rc= mysql_query(mysql, "update t2 set f1=NULL where f1=14");
+ rc= mysql_query(mysql, "update t2 set f1=0 where f1=14");
myquery(rc);
res= mysql_insert_id(mysql);
DIE_UNLESS(res == 0);
@@ -15869,6 +15883,8 @@ static void test_status()
Test that client gets updated value of insert_id on UPDATE that uses
LAST_INSERT_ID(expr).
+ select_query added to test for bug
+ #26921 Problem in mysql_insert_id() Embedded C API function
*/
static void test_bug21726()
{
@@ -15881,6 +15897,8 @@ static void test_bug21726()
const char *update_query= "UPDATE t1 SET i= LAST_INSERT_ID(i + 1)";
int rc;
my_ulonglong insert_id;
+ const char *select_query= "SELECT * FROM t1";
+ MYSQL_RES *result;
DBUG_ENTER("test_bug21726");
myheader("test_bug21726");
@@ -15897,6 +15915,13 @@ static void test_bug21726()
insert_id= mysql_insert_id(mysql);
DIE_UNLESS(insert_id == 3);
+ rc= mysql_query(mysql, select_query);
+ myquery(rc);
+ insert_id= mysql_insert_id(mysql);
+ DIE_UNLESS(insert_id == 3);
+ result= mysql_store_result(mysql);
+ mysql_free_result(result);
+
DBUG_VOID_RETURN;
}
@@ -16001,7 +16026,7 @@ static void test_bug21635()
char *query_end;
MYSQL_RES *result;
MYSQL_FIELD *field;
- unsigned int field_count, i;
+ unsigned int field_count, i, j;
int rc;
DBUG_ENTER("test_bug21635");
@@ -16017,30 +16042,39 @@ static void test_bug21635()
myquery(rc);
rc= mysql_query(mysql, "CREATE TABLE t1 (i INT)");
myquery(rc);
- rc= mysql_query(mysql, "INSERT INTO t1 VALUES (1)");
- myquery(rc);
+ /*
+ We need this loop to ensure correct behavior with both constant and
+ non-constant tables.
+ */
+ for (j= 0; j < 2 ; j++)
+ {
+ rc= mysql_query(mysql, "INSERT INTO t1 VALUES (1)");
+ myquery(rc);
- rc= mysql_real_query(mysql, query, query_end - query);
- myquery(rc);
+ rc= mysql_real_query(mysql, query, query_end - query);
+ myquery(rc);
- result= mysql_use_result(mysql);
- DIE_UNLESS(result);
+ result= mysql_use_result(mysql);
+ DIE_UNLESS(result);
field_count= mysql_field_count(mysql);
for (i= 0; i < field_count; ++i)
{
field= mysql_fetch_field_direct(result, i);
if (!opt_silent)
- printf("%s -> %s ... ", expr[i * 2], field->name);
+ if (!opt_silent)
+ printf("%s -> %s ... ", expr[i * 2], field->name);
fflush(stdout);
DIE_UNLESS(field->db[0] == 0 && field->org_table[0] == 0 &&
field->table[0] == 0 && field->org_name[0] == 0);
DIE_UNLESS(strcmp(field->name, expr[i * 2 + 1]) == 0);
if (!opt_silent)
- puts("OK");
+ if (!opt_silent)
+ puts("OK");
}
- mysql_free_result(result);
+ mysql_free_result(result);
+ }
rc= mysql_query(mysql, "DROP TABLE t1");
myquery(rc);
@@ -16869,7 +16903,9 @@ static void test_bug20023()
int sql_big_selects_4;
int sql_big_selects_5;
+#if NOT_USED
char query_buffer[MAX_TEST_QUERY_LENGTH];
+#endif
/* Create a new connection. */
@@ -16967,6 +17003,12 @@ static void test_bug20023()
Check that SQL_BIG_SELECTS will be the original one.
***********************************************************************/
+#if NOT_USED
+ /*
+ max_join_size is a ulong or better.
+ my_snprintf() only goes up to ul.
+ */
+
/* Restore MAX_JOIN_SIZE. */
my_snprintf(query_buffer,
@@ -16975,6 +17017,11 @@ static void test_bug20023()
(int) max_join_size_orig);
DIE_IF(mysql_query(&con, query_buffer));
+
+#else
+ DIE_IF(mysql_query(&con, "SET @@global.max_join_size = -1"));
+#endif
+
DIE_IF(mysql_query(&con, "SET @@session.max_join_size = default"));
/* Issue COM_CHANGE_USER. */
@@ -17091,6 +17138,99 @@ static void test_bug31418()
}
+
+/**
+ Bug#31669 Buffer overflow in mysql_change_user()
+*/
+
+#define LARGE_BUFFER_SIZE 2048
+
+static void test_bug31669()
+{
+ int rc;
+ static char buff[LARGE_BUFFER_SIZE+1];
+#ifndef EMBEDDED_LIBRARY
+ static char user[USERNAME_CHAR_LENGTH+1];
+ static char db[NAME_CHAR_LEN+1];
+ static char query[LARGE_BUFFER_SIZE*2];
+#endif
+
+ DBUG_ENTER("test_bug31669");
+ myheader("test_bug31669");
+
+ rc= mysql_change_user(mysql, NULL, NULL, NULL);
+ DIE_UNLESS(rc);
+
+ rc= mysql_change_user(mysql, "", "", "");
+ DIE_UNLESS(rc);
+
+ memset(buff, 'a', sizeof(buff));
+
+ rc= mysql_change_user(mysql, buff, buff, buff);
+ DIE_UNLESS(rc);
+
+ rc = mysql_change_user(mysql, opt_user, opt_password, current_db);
+ DIE_UNLESS(!rc);
+
+#ifndef EMBEDDED_LIBRARY
+ memset(db, 'a', sizeof(db));
+ db[NAME_CHAR_LEN]= 0;
+ strxmov(query, "CREATE DATABASE IF NOT EXISTS ", db, NullS);
+ rc= mysql_query(mysql, query);
+ myquery(rc);
+
+ memset(user, 'b', sizeof(user));
+ user[USERNAME_CHAR_LENGTH]= 0;
+ memset(buff, 'c', sizeof(buff));
+ buff[LARGE_BUFFER_SIZE]= 0;
+ strxmov(query, "GRANT ALL PRIVILEGES ON *.* TO '", user, "'@'%' IDENTIFIED BY "
+ "'", buff, "' WITH GRANT OPTION", NullS);
+ rc= mysql_query(mysql, query);
+ myquery(rc);
+
+ rc= mysql_query(mysql, "FLUSH PRIVILEGES");
+ myquery(rc);
+
+ rc= mysql_change_user(mysql, user, buff, db);
+ DIE_UNLESS(!rc);
+
+ user[USERNAME_CHAR_LENGTH-1]= 'a';
+ rc= mysql_change_user(mysql, user, buff, db);
+ DIE_UNLESS(rc);
+
+ user[USERNAME_CHAR_LENGTH-1]= 'b';
+ buff[LARGE_BUFFER_SIZE-1]= 'd';
+ rc= mysql_change_user(mysql, user, buff, db);
+ DIE_UNLESS(rc);
+
+ buff[LARGE_BUFFER_SIZE-1]= 'c';
+ db[NAME_CHAR_LEN-1]= 'e';
+ rc= mysql_change_user(mysql, user, buff, db);
+ DIE_UNLESS(rc);
+
+ db[NAME_CHAR_LEN-1]= 'a';
+ rc= mysql_change_user(mysql, user, buff, db);
+ DIE_UNLESS(!rc);
+
+ rc= mysql_change_user(mysql, user + 1, buff + 1, db + 1);
+ DIE_UNLESS(rc);
+
+ rc = mysql_change_user(mysql, opt_user, opt_password, current_db);
+ DIE_UNLESS(!rc);
+
+ strxmov(query, "DROP DATABASE ", db, NullS);
+ rc= mysql_query(mysql, query);
+ myquery(rc);
+
+ strxmov(query, "DELETE FROM mysql.user WHERE User='", user, "'", NullS);
+ rc= mysql_query(mysql, query);
+ myquery(rc);
+ DIE_UNLESS(mysql_affected_rows(mysql) == 1);
+#endif
+
+ DBUG_VOID_RETURN;
+}
+
/*
Read and parse arguments and MySQL options from my.cnf
*/
@@ -17394,6 +17534,7 @@ static struct my_tests_st my_tests[]= {
{ "test_bug30472", test_bug30472 },
{ "test_bug20023", test_bug20023 },
{ "test_bug31418", test_bug31418 },
+ { "test_bug31669", test_bug31669 },
{ 0, 0 }
};
diff --git a/unittest/mysys/my_atomic-t.c b/unittest/mysys/my_atomic-t.c
index a9e98a95cdb..f2bcd360508 100644
--- a/unittest/mysys/my_atomic-t.c
+++ b/unittest/mysys/my_atomic-t.c
@@ -18,6 +18,13 @@
#include <my_atomic.h>
#include <tap.h>
+/* at least gcc 3.4.5 and 3.4.6 (but not 3.2.3) on RHEL */
+#if __GNUC__ == 3 && __GNUC_MINOR__ == 4
+#define GCC_BUG_WORKAROUND volatile
+#else
+#define GCC_BUG_WORKAROUND
+#endif
+
int32 a32,b32,c32;
my_atomic_rwlock_t rwl;
@@ -30,7 +37,7 @@ int N;
pthread_handler_t test_atomic_add_handler(void *arg)
{
int m=*(int *)arg;
- int32 x;
+ GCC_BUG_WORKAROUND int32 x;
for (x=((int)((long)(&m))); m ; m--)
{
x=x*m+0x87654321;
@@ -102,7 +109,7 @@ pthread_handler_t test_atomic_swap_handler(void *arg)
pthread_handler_t test_atomic_cas_handler(void *arg)
{
int m=*(int *)arg, ok;
- int32 x,y;
+ GCC_BUG_WORKAROUND int32 x,y;
for (x=((int)((long)(&m))); m ; m--)
{
my_atomic_rwlock_wrlock(&rwl);